diff options
author | Alexis Hildebrandt <afh@surryhill.net> | 2023-06-10 17:17:42 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-10 17:17:42 +0200 |
commit | b59356351e240f7286febb599f6dfd1e6f6e4cb4 (patch) | |
tree | 950a92dbecdaed1284cf111da4f9810c09c5aa98 | |
parent | 82f72f4f836251846492948aebd54a7536bc6da7 (diff) | |
parent | 1d422c32d6c3b137e8cb4a95b68fbd035107a7e5 (diff) | |
download | fork-ledger-b59356351e240f7286febb599f6dfd1e6f6e4cb4.tar.gz fork-ledger-b59356351e240f7286febb599f6dfd1e6f6e4cb4.tar.bz2 fork-ledger-b59356351e240f7286febb599f6dfd1e6f6e4cb4.zip |
Merge pull request #2259 from afh/afh-readline
Improve support for libedit and readline
-rw-r--r-- | CMakeLists.txt | 16 | ||||
-rw-r--r-- | NEWS.md | 2 | ||||
-rw-r--r-- | flake.nix | 16 | ||||
-rw-r--r-- | src/main.cc | 11 | ||||
-rw-r--r-- | src/system.hh.in | 1 |
5 files changed, 38 insertions, 8 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 712aa714..ced9172c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -189,14 +189,18 @@ include_directories(${CMAKE_INCLUDE_PATH}) macro(find_opt_library_and_header _header_var _header _lib_var _lib _have_var) if (${_have_var}) + message("-- Looking for ${_header} in ${_lib}") find_path(${_header_var} ${_header}) if (NOT ${_header_var}) + message("-- Looking for ${_header} in ${_lib} - not found") set(${_have_var} 0) else() find_library(${_lib_var} ${_lib}) if (NOT ${_lib_var}) + message("-- Looking for ${_header} in ${_lib} - not found") set(${_have_var} 0) else() + message("-- Looking for ${_header} in ${_lib} - found") include_directories(SYSTEM "${${_header_var}}") set(${_have_var} 1) endif() @@ -246,8 +250,13 @@ if (MPFR_PATH AND EXISTS "${MPFR_PATH}/mpfr.h") endif() -check_library_exists(edit readline "" HAVE_EDIT) -find_opt_library_and_header(EDIT_PATH histedit.h EDIT_LIB edit HAVE_EDIT) +check_library_exists(edit add_history "" HAVE_EDIT) +find_opt_library_and_header(EDIT_PATH editline/readline.h EDIT_LIB edit HAVE_EDIT) +if (NOT HAVE_EDIT) +check_library_exists(readline add_history "" HAVE_READLINE) +find_opt_library_and_header(READLINE_PATH readline/history.h READLINE_LIB readline HAVE_READLINE) +endif (NOT HAVE_EDIT) + #find_package(Gettext) # Used for running tests @@ -269,6 +278,9 @@ macro(add_ledger_library_dependencies _target) if (HAVE_EDIT) target_link_libraries(${_target} ${EDIT_LIB}) endif() + if (HAVE_READLINE) + target_link_libraries(${_target} ${READLINE_LIB}) + endif() if (HAVE_GETTEXT) target_link_libraries(${_target} ${INTL_LIB}) endif() @@ -11,6 +11,8 @@ - Fix related reports when using bucket transactions (ledger/ledger#2220) +- Add support to build ledger with readline + ## 3.3.2 (2023-03-30) - Fix divide by zero (ledger/ledger#777, ledger/ledger#2207) @@ -6,6 +6,8 @@ outputs = { self, nixpkgs }: let usePython = true; gpgmeSupport = true; + useLibedit = true; + useReadline = false; forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f system); nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; }); systems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ]; @@ -23,14 +25,24 @@ outputs = [ "out" "dev" ] ++ lib.optionals usePython [ "py" ]; buildInputs = [ - gmp mpfr libedit gnused + gmp mpfr gnused + ] ++ lib.optionals useLibedit [ + libedit + ] ++ lib.optionals useReadline [ + readline ] ++ lib.optionals gpgmeSupport [ gpgme ] ++ (if usePython then [ python3 (boost.override { enablePython = true; python = python3; }) ] else [ boost ]); - nativeBuildInputs = [ cmake texinfo tzdata ]; + nativeBuildInputs = [ + cmake texinfo tzdata + ] ++ lib.optionals useLibedit [ + libedit.dev + ] ++ lib.optionals useReadline [ + readline.dev + ]; enableParallelBuilding = true; diff --git a/src/main.cc b/src/main.cc index 6b3e1eb3..fcd61f28 100644 --- a/src/main.cc +++ b/src/main.cc @@ -41,6 +41,9 @@ #if HAVE_EDIT #include <editline/readline.h> +#elif HAVE_READLINE +#include <readline/readline.h> +#include <readline/history.h> #endif using namespace ledger; @@ -137,7 +140,7 @@ int main(int argc, char * argv[], char * envp[]) bool exit_loop = false; -#if HAVE_EDIT +#if HAVE_EDIT || HAVE_READLINE rl_readline_name = const_cast<char *>("Ledger"); // TODO: rl_attempted_completion_function = ledger_completion; @@ -158,7 +161,7 @@ int main(int argc, char * argv[], char * envp[]) add_history(expansion); } -#else // HAVE_EDIT +#else // HAVE_EDIT || HAVE_READLINE while (! std::cin.eof()) { std::cout << global_scope->prompt_string(); @@ -167,7 +170,7 @@ int main(int argc, char * argv[], char * envp[]) char * p = skip_ws(line); -#endif // HAVE_EDIT +#endif // HAVE_EDIT || HAVE_READLINE check_for_signal(); @@ -178,7 +181,7 @@ int main(int argc, char * argv[], char * envp[]) global_scope->execute_command_wrapper(split_arguments(p), true); } -#if HAVE_EDIT +#if HAVE_EDIT || HAVE_READLINE if (expansion) std::free(expansion); std::free(p); diff --git a/src/system.hh.in b/src/system.hh.in index 10086d23..05f28fc2 100644 --- a/src/system.hh.in +++ b/src/system.hh.in @@ -52,6 +52,7 @@ #cmakedefine01 HAVE_GETTEXT #cmakedefine01 HAVE_EDIT +#cmakedefine01 HAVE_READLINE #cmakedefine01 HAVE_GETPWUID #cmakedefine01 HAVE_GETPWNAM #cmakedefine01 HAVE_IOCTL |