build: merge branch 'th/build-libreadline'

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/930
This commit is contained in:
Thomas Haller 2021-07-19 09:11:30 +02:00
commit 7ae2f842ae
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
3 changed files with 108 additions and 87 deletions

View file

@ -1043,27 +1043,21 @@ fi
PKG_CHECK_MODULES(LIBNDP, [libndp])
AC_ARG_WITH(readline,
AS_HELP_STRING([--with-readline=auto|libreadline|libedit|none], [Using libreadline (auto) or libedit]),
[], [with_readline=auto])
if test "$with_readline" != "none" -a "$with_readline" != "auto" -a "$with_readline" != "libreadline" -a "$with_readline" != "libedit"; then
AC_MSG_ERROR([invalid --with-readline option])
fi
if test "$with_readline" != "none"; then
AX_LIB_READLINE
if test -z "${READLINE_LIBS}"; then
AC_MSG_FAILURE([readline library not found])
fi
fi
AX_LIB_READLINE
AC_ARG_WITH(nmcli,
AS_HELP_STRING([--with-nmcli=yes|no], [Build nmcli]))
if test "$with_nmcli" != no; then
build_nmcli=yes
AS_HELP_STRING([--with-nmcli=yes|no], [Build nmcli]),
[],
[with_nmcli=yes])
if test "$with_nmcli" == yes; then
if test "$with_readline" = none; then
AC_MSG_FAILURE([nmcli requires readline library. Use --with-readline or --with-nmcli=no])
fi
build_nmcli=yes
elif test "$with_nmcli" == no; then
build_nmcli=no
else
build_nmcli=no
AC_MSG_ERROR([invalid --with-nmcli option. Valid options are --with-nmcli=yes|no])
fi
AM_CONDITIONAL(BUILD_NMCLI, test "$build_nmcli" = yes)

View file

@ -62,73 +62,97 @@
AU_ALIAS([VL_LIB_READLINE], [AX_LIB_READLINE])
AC_DEFUN([AX_LIB_READLINE], [
AC_CACHE_CHECK([for a readline compatible library],
ax_cv_lib_readline, [
ORIG_LIBS="$LIBS"
search_readlines="readline edit"
if test "$with_readline" = "libreadline"; then
search_readlines="readline"
fi
if test "$with_readline" = "libedit"; then
search_readlines="edit"
fi
for readline_lib in $search_readlines; do
# prefer ncurses since we use it for nmtui too
for termcap_lib in "" termcap curses ncurses; do
if test -z "$termcap_lib"; then
TRY_LIB="-l$readline_lib"
else
TRY_LIB="-l$readline_lib -l$termcap_lib"
fi
LIBS="$ORIG_LIBS $TRY_LIB"
AC_LINK_IFELSE([AC_LANG_CALL([], [readline])], [ax_cv_lib_readline="$TRY_LIB"])
AC_ARG_WITH(readline,
AS_HELP_STRING([--with-readline=auto|libreadline|libedit|none], [Using libreadline (auto) or libedit]),
[],
[with_readline=auto])
if test "$with_readline" != "none"; then
AC_CACHE_CHECK([for a readline compatible library],
ax_cv_lib_readline, [
ORIG_LIBS="$LIBS"
if test "$with_readline" = "libreadline"; then
search_readlines="readline"
elif test "$with_readline" = "libedit"; then
search_readlines="edit"
elif test "$with_readline" = "auto"; then
search_readlines="readline edit"
else
AC_MSG_ERROR([invalid --with-readline option. Valid options are --with-readline=auto|libreadline|libedit|none])
fi
for readline_lib in $search_readlines; do
# prefer ncurses since we use it for nmtui too
for termcap_lib in "" termcap curses ncurses; do
if test -z "$termcap_lib"; then
TRY_LIB="-l$readline_lib"
else
TRY_LIB="-l$readline_lib -l$termcap_lib"
fi
LIBS="$ORIG_LIBS $TRY_LIB"
AC_LINK_IFELSE([AC_LANG_CALL([], [readline])], [ax_cv_lib_readline="$TRY_LIB"])
if test -n "$ax_cv_lib_readline"; then
break
fi
done
if test -n "$ax_cv_lib_readline"; then
if test "$with_readline" = auto; then
if test "$readline_lib" = readline; then
with_readline=libreadline
else
with_readline=libedit
fi
fi
break
fi
done
if test -n "$ax_cv_lib_readline"; then
break
if test -z "$ax_cv_lib_readline"; then
if test "$with_readline" != auto; then
AC_MSG_ERROR([libreadline not found for --with-readline=$with_readline"])
fi
with_readline=none
ax_cv_lib_readline="no"
fi
done
if test -z "$ax_cv_lib_readline"; then
ax_cv_lib_readline="no"
fi
LIBS="$ORIG_LIBS"
])
if test "$ax_cv_lib_readline" != "no"; then
READLINE_LIBS="$ax_cv_lib_readline"
AC_SUBST(READLINE_LIBS)
AC_DEFINE(HAVE_LIBREADLINE, 1,
[Define if you have a readline compatible library])
if test "$with_readline" = "libedit"; then
AC_DEFINE(HAVE_EDITLINE_READLINE, 1,
[Explicitly set to 1 when libedit shall be used])
else
AC_DEFINE(HAVE_EDITLINE_READLINE, 0,
[By default the libreadline is used as readline library])
fi
ORIG_LIBS="$LIBS"
LIBS="$ORIG_LIBS $ax_cv_lib_readline"
AC_CACHE_CHECK([whether readline supports history],
ax_cv_lib_readline_history, [
ax_cv_lib_readline_history="no"
AC_LINK_IFELSE([AC_LANG_CALL([], [history_set_history_state])],
[ax_cv_lib_readline_history="yes"])
LIBS="$ORIG_LIBS"
])
LIBS=$ORIG_LIBS
if test "$ax_cv_lib_readline_history" = "yes"; then
AC_DEFINE(HAVE_READLINE_HISTORY, 1,
[Define if your readline library has \`history_set_history_state'])
AC_CHECK_HEADERS(readline/history.h histedit.h)
else
AC_DEFINE(HAVE_READLINE_HISTORY, 0,
[Explicitly set to 0 when libreadline shall not be used])
if test "$ax_cv_lib_readline" != "no"; then
READLINE_LIBS="$ax_cv_lib_readline"
AC_SUBST(READLINE_LIBS)
AC_DEFINE(HAVE_LIBREADLINE, 1,
[Define if you have a readline compatible library])
if test "$with_readline" = "libedit"; then
AC_DEFINE(HAVE_EDITLINE_READLINE, 1,
[Explicitly set to 1 when libedit shall be used])
else
AC_DEFINE(HAVE_EDITLINE_READLINE, 0,
[By default the libreadline is used as readline library])
fi
ORIG_LIBS="$LIBS"
LIBS="$ORIG_LIBS $ax_cv_lib_readline"
AC_CACHE_CHECK([whether readline supports history],
ax_cv_lib_readline_history, [
ax_cv_lib_readline_history="no"
AC_LINK_IFELSE([AC_LANG_CALL([], [history_set_history_state])],
[ax_cv_lib_readline_history="yes"])
])
LIBS=$ORIG_LIBS
if test "$ax_cv_lib_readline_history" = "yes"; then
AC_DEFINE(HAVE_READLINE_HISTORY, 1,
[Define if your readline library has \`history_set_history_state'])
AC_CHECK_HEADERS(readline/history.h histedit.h)
else
AC_DEFINE(HAVE_READLINE_HISTORY, 0,
[Explicitly set to 0 when libreadline shall not be used])
fi
fi
fi
])dnl

View file

@ -735,31 +735,34 @@ config_h.set10('WITH_CONCHECK', enable_concheck)
config_h.set10('HAVE_READLINE_HISTORY', false)
config_h.set10('HAVE_EDITLINE_READLINE', false)
enable_readline = get_option('readline')
if enable_readline != 'none'
if enable_readline == 'libreadline' or enable_readline == 'auto'
readline = cc.find_library('readline')
with_readline = get_option('readline')
if with_readline != 'none'
if with_readline == 'libreadline' or with_readline == 'auto'
readline = cc.find_library('readline', required: false)
if readline.found()
readline_dep = declare_dependency(link_args: '-lreadline')
config_h.set10('HAVE_READLINE_HISTORY', true)
with_readline = 'libreadline'
else
assert(enable_readline == 'auto', 'libreadline was not found')
assert(with_readline == 'auto', 'libreadline was not found')
endif
endif
if enable_readline == 'libedit' or (enable_readline == 'auto' and not readline.found())
edit = dependency('libedit')
if with_readline == 'libedit' or with_readline == 'auto'
edit = dependency('libedit', required: false)
if edit.found()
readline_dep = declare_dependency(link_args: '-ledit')
config_h.set10('HAVE_EDITLINE_READLINE', true)
with_readline = 'libedit'
else
assert(enable_readline == 'auto', 'libedit was not found')
assert(with_readline == 'auto', 'libedit was not found')
with_readline = 'none'
endif
endif
endif
enable_nmcli = get_option('nmcli')
if enable_nmcli
assert(enable_readline != 'none', 'readline library with terminfo support is required (one of readline, edit, or editline, AND one of ncurses, curses, or termcap)')
assert(with_readline != 'none', 'nmcli requires readline library (-Dnmcli=false or -Dreadline=auto|libreadline|libedit|none)')
endif
enable_nmtui = get_option('nmtui')
@ -1095,5 +1098,5 @@ output += ' sanitizers: ' + get_option('b_sanitize') + '\n'
output += ' Mozilla Public Suffix List: ' + enable_libpsl.to_string() + '\n'
output += ' vapi: ' + enable_vapi.to_string() + '\n'
output += ' ebpf: ' + enable_ebpf.to_string() + '\n'
output += ' readline: ' + enable_readline + '\n'
output += ' readline: ' + with_readline + '\n'
message(output)