mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-30 17:18:21 +03:00
lvm: add readline alternative editline
LVM2 is distributed under GPLv2 only. The readline library changed its license long ago to GPLv3. Given that those licenses are incompatible and you follow the FSF in their interpretation that dynamically linking creates a derivative work, distributing LVM2 linked against a current readline version might be legally problematic. Add support for the BSD licensed editline library as an alternative for readline. Link: https://thrysoee.dk/editline
This commit is contained in:
parent
fb96e9ab21
commit
168e2ffbcd
23
configure.ac
23
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)
|
||||
|
@ -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 <editline/history.h> header file. */
|
||||
#undef HAVE_EDITLINE_HISTORY_H
|
||||
|
||||
/* Define to 1 if you have the <editline/readline.h> header file. */
|
||||
#undef HAVE_EDITLINE_READLINE_H
|
||||
|
||||
/* Define to 1 if you have the <errno.h> header file. */
|
||||
#undef HAVE_ERRNO_H
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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
|
||||
|
||||
|
19
tools/lvm.c
19
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 <readline/readline.h>
|
||||
# include <readline/history.h>
|
||||
# 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 <readline/readline.h>
|
||||
# include <readline/history.h>
|
||||
# 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 <editline/readline.h>
|
||||
# include <editline/history.h>
|
||||
# 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 */
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user