[libvirt] [PATCH 2/2] build: add configure --without-readline

Eric Blake eblake at redhat.com
Fri Oct 4 18:26:50 UTC 2013


Make it much easier to test a configuration built without readline
support, by reusing our existing library probe machinery.  It gets
a bit tricky with readline, which does not provide a pkg-config
snippet, and which on some platforms requires one of several
terminal libraries as a prerequiste, but the end result should be
the same default behavior but now with the option to disable things.

* m4/virt-readline.m4 (LIBVIRT_CHECK_READLINE): Simplify by using
LIBVIRT_CHECK_LIB.
* tools/virsh.c: Convert USE_READLINE to WITH_READLINE.

Signed-off-by: Eric Blake <eblake at redhat.com>
---
 m4/virt-readline.m4 | 51 ++++++++++++++++++---------------------------------
 tools/virsh.c       | 12 ++++++------
 2 files changed, 24 insertions(+), 39 deletions(-)

diff --git a/m4/virt-readline.m4 b/m4/virt-readline.m4
index 8f5a884..775c186 100644
--- a/m4/virt-readline.m4
+++ b/m4/virt-readline.m4
@@ -18,48 +18,33 @@ dnl <http://www.gnu.org/licenses/>.
 dnl

 AC_DEFUN([LIBVIRT_CHECK_READLINE],[
-  READLINE_LIBS=
-  AC_CHECK_HEADERS([readline/readline.h])
-
-  AC_CHECK_LIB([readline], [readline],
-	[lv_use_readline=yes; READLINE_LIBS=-lreadline],
-	[lv_use_readline=no])
-
-  # If the above test failed, it may simply be that -lreadline requires
-  # some termcap-related code, e.g., from one of the following libraries.
-  # See if adding one of them to LIBS helps.
-  if test $lv_use_readline = no; then
-    lv_saved_libs=$LIBS
+  extra_LIBS=
+  lv_saved_libs=$LIBS
+  if test "x$with_readline" != xno; then
+    # Linking with -lreadline may require some termcap-related code, e.g.,
+    # from one of the following libraries.  Add it to LIBS before using
+    # canned library checks; then verify later if it was needed.
     LIBS=
     AC_SEARCH_LIBS([tgetent], [ncurses curses termcap termlib])
     case $LIBS in
       no*) ;;  # handle "no" and "none required"
       *) # anything else is a -lLIBRARY
-	# Now, check for -lreadline again, also using $LIBS.
-	# Note: this time we use a different function, so that
-	# we don't get a cached "no" result.
-	AC_CHECK_LIB([readline], [rl_initialize],
-		[lv_use_readline=yes
-		 READLINE_LIBS="-lreadline $LIBS"],,
-		[$LIBS])
-	;;
+	extra_LIBS=$LIBS ;;
     esac
-    test $lv_use_readline = no &&
-	AC_MSG_WARN([readline library not found])
-    LIBS=$lv_saved_libs
+    LIBS="$lv_saved_libs $extra_LIBS"
   fi

-  if test $lv_use_readline = yes; then
-    AC_DEFINE_UNQUOTED([USE_READLINE], 1,
-		       [whether virsh can use readline])
-    READLINE_CFLAGS=-DUSE_READLINE
-  else
-    READLINE_CFLAGS=
-  fi
-  AC_SUBST([READLINE_CFLAGS])
+  # The normal library check...
+  LIBVIRT_CHECK_LIB([READLINE], [readline], [readline], [readline/readline.h])
+
+  # Touch things up to avoid $extra_LIBS, if possible.  Test a second
+  # function, to ensure we aren't being confused by caching.
+  LIBS=$lv_saved_libs
+  AC_CHECK_LIB([readline], [rl_initialize],
+    [], [READLINE_LIBS="$READLINE_LIBS $extra_LIBS"])
+  LIBS=$lv_saved_libs
 ])

 AC_DEFUN([LIBVIRT_RESULT_READLINE],[
-  LIBVIRT_RESULT([readline], [$lv_use_readline],
-     [CFLAGS='$READLINE_CFLAGS' LIBS='$READLINE_LIBS'])
+  LIBVIRT_RESULT_LIB([READLINE])
 ])
diff --git a/tools/virsh.c b/tools/virsh.c
index ac354ac..6842ed8 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -48,7 +48,7 @@
 #include <libxml/xpath.h>
 #include <libxml/xmlsave.h>

-#ifdef HAVE_READLINE_READLINE_H
+#if WITH_READLINE
 # include <readline/readline.h>
 # include <readline/history.h>
 #endif
@@ -2580,7 +2580,7 @@ vshCloseLogFile(vshControl *ctl)
     }
 }

-#ifdef USE_READLINE
+#if WITH_READLINE

 /* -----------------
  * Readline stuff
@@ -2765,7 +2765,7 @@ vshReadline(vshControl *ctl ATTRIBUTE_UNUSED, const char *prompt)
     return readline(prompt);
 }

-#else /* !USE_READLINE */
+#else /* !WITH_READLINE */

 static int
 vshReadlineInit(vshControl *ctl ATTRIBUTE_UNUSED)
@@ -2799,7 +2799,7 @@ vshReadline(vshControl *ctl, const char *prompt)
     return vshStrdup(ctl, r);
 }

-#endif /* !USE_READLINE */
+#endif /* !WITH_READLINE */

 static void
 vshDeinitTimer(int timer ATTRIBUTE_UNUSED, void *opaque ATTRIBUTE_UNUSED)
@@ -3026,7 +3026,7 @@ vshShowVersion(vshControl *ctl ATTRIBUTE_UNUSED)
 #ifdef WITH_DTRACE_PROBES
     vshPrint(ctl, " DTrace");
 #endif
-#ifdef USE_READLINE
+#if WITH_READLINE
     vshPrint(ctl, " Readline");
 #endif
 #ifdef WITH_DRIVER_MODULES
@@ -3316,7 +3316,7 @@ main(int argc, char **argv)
             if (ctl->cmdstr == NULL)
                 break;          /* EOF */
             if (*ctl->cmdstr) {
-#if USE_READLINE
+#if WITH_READLINE
                 add_history(ctl->cmdstr);
 #endif
                 if (vshCommandStringParse(ctl, ctl->cmdstr))
-- 
1.8.3.1




More information about the libvir-list mailing list