summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2014-06-26 12:04:19 -0500
committerDan Williams <dcbw@redhat.com>2014-06-27 13:10:50 -0500
commit29297f8531e24d4df616c5c3acace9e23a695a02 (patch)
tree7ffcf55798bba0009d0e56bc2bbfac415d438988
parent32ebcbe7c7c6ed374269a228192b32895f5d69e1 (diff)
downloadNetworkManager-29297f8531e24d4df616c5c3acace9e23a695a02.tar.gz
build: check harder for readline
Not all distros build their readline linked with a termcap library, since apps are (apparently) supposed to choose one for themselves and explicitly link to it when using readline. So add some checks to figure out whether readline is already linked, and if not, prefer ncurses since we use that for nmtui already. ax_lib_readline based off: http://www.gnu.org/software/autoconf-archive/ax_lib_readline.html
-rw-r--r--configure.ac7
-rw-r--r--m4/ax_lib_readline.m4106
2 files changed, 107 insertions, 6 deletions
diff --git a/configure.ac b/configure.ac
index 848a1970b7..e152fa0e0d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -390,13 +390,8 @@ PKG_CHECK_MODULES(UUID, uuid)
AC_SUBST(UUID_CFLAGS)
AC_SUBST(UUID_LIBS)
-dnl
dnl Checks for readline library - used by nmcli
-dnl
-#PKG_CHECK_MODULES(READLINE, readline)
-AC_CHECK_LIB(readline, readline, [READLINE_LIBS=-lreadline], [AC_MSG_ERROR(readline library is required)])
-AC_CHECK_HEADERS(readline/readline.h, [], [AC_MSG_ERROR(readline/readline.h - readline devel files required)])
-AC_SUBST(READLINE_LIBS)
+AX_LIB_READLINE
# Intel WiMAX SDK checks
PKG_CHECK_MODULES(IWMX_SDK, [libiWmxSdk-0 >= 1.5.1], [have_wimax=yes],[have_wimax=no])
diff --git a/m4/ax_lib_readline.m4 b/m4/ax_lib_readline.m4
new file mode 100644
index 0000000000..72764fba56
--- /dev/null
+++ b/m4/ax_lib_readline.m4
@@ -0,0 +1,106 @@
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_lib_readline.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_LIB_READLINE
+#
+# DESCRIPTION
+#
+# Searches for a readline compatible library. If found, defines
+# `HAVE_LIBREADLINE'. If the found library has the `add_history' function,
+# sets also `HAVE_READLINE_HISTORY'. Also checks for the locations of the
+# necessary include files and sets `HAVE_READLINE_H' or
+# `HAVE_READLINE_READLINE_H' and `HAVE_READLINE_HISTORY_H' or
+# 'HAVE_HISTORY_H' if the corresponding include files exists.
+#
+# The libraries that may be readline compatible are `libedit',
+# `libeditline' and `libreadline'. Sometimes we need to link a termcap
+# library for readline to work, this macro tests these cases too by trying
+# to link with `libtermcap', `libcurses' or `libncurses' before giving up.
+#
+# Here is an example of how to use the information provided by this macro
+# to perform the necessary includes or declarations in a C file:
+#
+# #ifdef HAVE_LIBREADLINE
+# # if defined(HAVE_READLINE_READLINE_H)
+# # include <readline/readline.h>
+# # elif defined(HAVE_READLINE_H)
+# # include <readline.h>
+# # else /* !defined(HAVE_READLINE_H) */
+# extern char *readline ();
+# # endif /* !defined(HAVE_READLINE_H) */
+# char *cmdline = NULL;
+# #else /* !defined(HAVE_READLINE_READLINE_H) */
+# /* no readline */
+# #endif /* HAVE_LIBREADLINE */
+#
+# #ifdef HAVE_READLINE_HISTORY
+# # if defined(HAVE_READLINE_HISTORY_H)
+# # include <readline/history.h>
+# # elif defined(HAVE_HISTORY_H)
+# # include <history.h>
+# # else /* !defined(HAVE_HISTORY_H) */
+# extern void add_history ();
+# extern int write_history ();
+# extern int read_history ();
+# # endif /* defined(HAVE_READLINE_HISTORY_H) */
+# /* no history */
+# #endif /* HAVE_READLINE_HISTORY */
+#
+# LICENSE
+#
+# Copyright (c) 2008 Ville Laurikari <vl@iki.fi>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 6
+
+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"
+ for readline_lib in readline edit editline; do
+ # prefer ncurses since we use it for nmtui too
+ for termcap_lib in "" ncurses termcap curses; 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_TRY_LINK_FUNC(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
+ break
+ fi
+ done
+ LIBS="$ORIG_LIBS"
+ ])
+
+ if test -z "$ax_cv_lib_readline"; then
+ AC_MSG_ERROR([readline library with terminfo support is required (one of ncurses, curses, or termcap)])
+ fi
+
+ LIBS="$LIBS $ax_cv_lib_readline"
+ AC_CHECK_HEADERS(readline.h readline/readline.h)
+ AC_CACHE_CHECK([whether readline supports history],
+ ax_cv_lib_readline_history, [
+ ax_cv_lib_readline_history="no"
+ AC_TRY_LINK_FUNC(add_history, ax_cv_lib_readline_history="yes")
+ ])
+ if test "$ax_cv_lib_readline_history" != "yes"; then
+ AC_MSG_ERROR(readline history support is required)
+ fi
+ AC_CHECK_HEADERS(history.h readline/history.h)
+ READLINE_LIBS="$ax_cv_lib_readline"
+ AC_SUBST(READLINE_LIBS)
+])dnl