diff --git a/configure.ac b/configure.ac index c2a72abf2..3b06e472b 100644 --- a/configure.ac +++ b/configure.ac @@ -691,6 +691,12 @@ AC_ARG_ENABLE([readline], AC_HELP_STRING([--disable-readline], [disable readline support]), READLINE=$enableval, READLINE=maybe) +################################################################################ +dnl -- Disable editline +AC_ARG_ENABLE([editline], + AC_HELP_STRING([--enable-editline], [enable editline support]), + EDITLINE=$enableval, EDITLINE=no) + ################################################################################ dnl -- Disable realtime clock support AC_MSG_CHECKING(whether to enable realtime support) @@ -1378,6 +1384,16 @@ AC_IF_YES(ac_cv_stat_st_ctim, dnl -- Check for getopt AC_CHECK_HEADERS(getopt.h, AC_DEFINE([HAVE_GETOPTLONG], 1, [Define to 1 if getopt_long is available.])) +################################################################################ +dnl -- Check for editline +if test "$EDITLINE" == yes; then + PKG_CHECK_MODULES([EDITLINE], [libedit], [ + AC_DEFINE([EDITLINE_SUPPORT], 1, + [Define to 1 to include the LVM editline shell.])], AC_MSG_ERROR( +[libedit could not be found which is required for the --enable-readline option.]) + ) +fi + ################################################################################ dnl -- Check for readline (Shamelessly copied from parted 1.4.17) if test "$READLINE" != no; then @@ -1510,6 +1526,12 @@ fi AC_MSG_CHECKING(whether to enable readline) AC_MSG_RESULT($READLINE) +if test "$EDITLINE" = yes; then + AC_CHECK_HEADERS(editline/readline.h editline/history.h,,hard_bailout) +fi +AC_MSG_CHECKING(whether to enable editline) +AC_MSG_RESULT($EDITLINE) + if test "$BUILD_CMIRRORD" = yes; then AC_CHECK_FUNCS(atexit,,hard_bailout) fi @@ -1765,6 +1787,7 @@ AC_SUBST(QUORUM_CFLAGS) AC_SUBST(QUORUM_LIBS) AC_SUBST(RT_LIBS) AC_SUBST(READLINE_LIBS) +AC_SUBST(EDITLINE_LIBS) AC_SUBST(REPLICATORS) AC_SUBST(SACKPT_CFLAGS) AC_SUBST(SACKPT_LIBS) diff --git a/include/configure.h.in b/include/configure.h.in index 540cee7cf..46d5aef20 100644 --- a/include/configure.h.in +++ b/include/configure.h.in @@ -126,6 +126,9 @@ /* Library version */ #undef DM_LIB_VERSION +/* Define to 1 to include the LVM editline shell. */ +#undef EDITLINE_SUPPORT + /* Path to fsadm binary. */ #undef FSADM_PATH @@ -176,6 +179,12 @@ /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ #undef HAVE_DOPRNT +/* Define to 1 if you have the header file. */ +#undef HAVE_EDITLINE_HISTORY_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_EDITLINE_READLINE_H + /* Define to 1 if you have the header file. */ #undef HAVE_ERRNO_H diff --git a/lib/mm/memlock.c b/lib/mm/memlock.c index b06bbc82c..883795d28 100644 --- a/lib/mm/memlock.c +++ b/lib/mm/memlock.c @@ -122,6 +122,7 @@ static const char * const _blacklist_maps[] = { "/libpcre.so.", /* not using pcre during mlock (selinux) */ "/libpcre2-", /* not using pcre during mlock (selinux) */ "/libreadline.so.", /* not using readline during mlock */ + "/libedit.so.", /* not using editline during mlock */ "/libresolv-", /* not using during mlock (udev) */ "/libselinux.so.", /* not using selinux during mlock */ "/libsepol.so.", /* not using sepol during mlock */ diff --git a/libdm/make.tmpl.in b/libdm/make.tmpl.in index 9041da52e..aaf8a5e77 100644 --- a/libdm/make.tmpl.in +++ b/libdm/make.tmpl.in @@ -71,6 +71,7 @@ RT_LIBS = @RT_LIBS@ M_LIBS = @M_LIBS@ PTHREAD_LIBS = @PTHREAD_LIBS@ READLINE_LIBS = @READLINE_LIBS@ +EDITLINE_LIBS = @EDITLINE_LIBS@ SELINUX_LIBS = @SELINUX_LIBS@ UDEV_CFLAGS = @UDEV_CFLAGS@ UDEV_LIBS = @UDEV_LIBS@ diff --git a/make.tmpl.in b/make.tmpl.in index 8a2081897..4549746ab 100644 --- a/make.tmpl.in +++ b/make.tmpl.in @@ -77,6 +77,7 @@ RT_LIBS = @RT_LIBS@ M_LIBS = @M_LIBS@ PTHREAD_LIBS = @PTHREAD_LIBS@ READLINE_LIBS = @READLINE_LIBS@ +EDITLINE_LIBS = @EDITLINE_LIBS@ SELINUX_LIBS = @SELINUX_LIBS@ UDEV_CFLAGS = @UDEV_CFLAGS@ UDEV_LIBS = @UDEV_LIBS@ diff --git a/tools/Makefile.in b/tools/Makefile.in index 2620daa17..11160e655 100644 --- a/tools/Makefile.in +++ b/tools/Makefile.in @@ -122,7 +122,7 @@ CFLAGS_lvm.o += $(EXTRA_EXEC_CFLAGS) lvm: $(OBJECTS) lvm.o $(LVMINTERNAL_LIBS) @echo " [CC] $@" $(Q) $(CC) $(CFLAGS) $(LDFLAGS) $(EXTRA_EXEC_LDFLAGS) $(ELDFLAGS) -o $@ $+ \ - $(DMEVENT_LIBS) $(READLINE_LIBS) $(LVMLIBS) + $(DMEVENT_LIBS) $(READLINE_LIBS) $(EDITLINE_LIBS) $(LVMLIBS) DEFS_man-generator.o += -DMAN_PAGE_GENERATOR diff --git a/tools/lvm.c b/tools/lvm.c index 4bfa6f5c2..79b1210af 100644 --- a/tools/lvm.c +++ b/tools/lvm.c @@ -22,13 +22,18 @@ int main(int argc, char **argv) return lvm2_main(argc, argv); } -#ifdef READLINE_SUPPORT +#if defined(READLINE_SUPPORT) || defined(EDITLINE_SUPPORT) -# include -# include -# ifndef HAVE_RL_COMPLETION_MATCHES -# define rl_completion_matches(a, b) completion_matches((char *)a, b) -# define rl_completion_func_t CPPFunction +# ifdef READLINE_SUPPORT +# include +# include +# ifndef HAVE_RL_COMPLETION_MATCHES +# define rl_completion_matches(a, b) completion_matches((char *)a, b) +# define rl_completion_func_t CPPFunction +# endif +# elif defined(EDITLINE_SUPPORT) +# include +# include # endif static struct cmdline_context *_cmdline; @@ -348,4 +353,4 @@ int lvm_shell(struct cmd_context *cmd, struct cmdline_context *cmdline) return 0; } -#endif /* READLINE_SUPPORT */ +#endif /* READLINE_SUPPORT || EDITLINE_SUPPORT */ diff --git a/tools/lvmcmdline.c b/tools/lvmcmdline.c index 8dd38e51d..e8d732878 100644 --- a/tools/lvmcmdline.c +++ b/tools/lvmcmdline.c @@ -3646,7 +3646,7 @@ int lvm2_main(int argc, char **argv) } if (run_shell) { -#ifdef READLINE_SUPPORT +#if defined(READLINE_SUPPORT) || defined(EDITLINE_SUPPORT) _nonroot_warning(); if (!_prepare_profiles(cmd)) { ret = ECMD_FAILED;