[libvirt PATCH 037/351] meson: add readline build option

Pavel Hrdina phrdina at redhat.com
Thu Jul 16 09:54:33 UTC 2020


Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
---
 configure.ac        |  3 --
 m4/virt-readline.m4 | 86 ---------------------------------------------
 meson.build         | 64 +++++++++++++++++++++++++++++++++
 meson_options.txt   |  1 +
 4 files changed, 65 insertions(+), 89 deletions(-)
 delete mode 100644 m4/virt-readline.m4

diff --git a/configure.ac b/configure.ac
index 2c9f38f9ba6..b822e862535 100644
--- a/configure.ac
+++ b/configure.ac
@@ -137,7 +137,6 @@ LIBVIRT_ARG_OPENWSMAN
 LIBVIRT_ARG_PCIACCESS
 LIBVIRT_ARG_PM_UTILS
 LIBVIRT_ARG_POLKIT
-LIBVIRT_ARG_READLINE
 LIBVIRT_ARG_SANLOCK
 LIBVIRT_ARG_SASL
 LIBVIRT_ARG_SELINUX
@@ -177,7 +176,6 @@ LIBVIRT_CHECK_PCIACCESS
 LIBVIRT_CHECK_PM_UTILS
 LIBVIRT_CHECK_POLKIT
 LIBVIRT_CHECK_PTHREAD
-LIBVIRT_CHECK_READLINE
 LIBVIRT_CHECK_SANLOCK
 LIBVIRT_CHECK_SASL
 LIBVIRT_CHECK_SELINUX
@@ -502,7 +500,6 @@ LIBVIRT_RESULT_PCIACCESS
 LIBVIRT_RESULT_PM_UTILS
 LIBVIRT_RESULT_POLKIT
 LIBVIRT_RESULT_RBD
-LIBVIRT_RESULT_READLINE
 LIBVIRT_RESULT_SANLOCK
 LIBVIRT_RESULT_SASL
 LIBVIRT_RESULT_SELINUX
diff --git a/m4/virt-readline.m4 b/m4/virt-readline.m4
deleted file mode 100644
index cd12110c4e2..00000000000
--- a/m4/virt-readline.m4
+++ /dev/null
@@ -1,86 +0,0 @@
-dnl The readline library
-dnl
-dnl Copyright (C) 2005-2013 Red Hat, Inc.
-dnl
-dnl This library is free software; you can redistribute it and/or
-dnl modify it under the terms of the GNU Lesser General Public
-dnl License as published by the Free Software Foundation; either
-dnl version 2.1 of the License, or (at your option) any later version.
-dnl
-dnl This library is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-dnl Lesser General Public License for more details.
-dnl
-dnl You should have received a copy of the GNU Lesser General Public
-dnl License along with this library.  If not, see
-dnl <http://www.gnu.org/licenses/>.
-dnl
-
-AC_DEFUN([LIBVIRT_ARG_READLINE],[
-  LIBVIRT_ARG_WITH_FEATURE([READLINE], [readline], [check])
-])
-
-AC_DEFUN([LIBVIRT_CHECK_READLINE],[
-
-  # We have to check for readline.pc's presence beforehand because for
-  # the longest time the library didn't ship a .pc file at all
-  PKG_CHECK_EXISTS([readline], [use_pkgconfig=1], [use_pkgconfig=0])
-
-  if test $use_pkgconfig = 1; then
-    # readline 7.0 is the first version which includes pkg-config support
-    LIBVIRT_CHECK_PKG([READLINE], [readline], [7.0])
-  else
-    # This function is present in all reasonable (5.0+) readline versions;
-    # however, the macOS base system contains a library called libedit which
-    # takes over the readline name despite lacking many of its features. We
-    # want to make sure we only enable readline support when linking against
-    # the actual readline library, and the availability of this specific
-    # functions is as good a witness for that fact as any.
-    AC_CHECK_DECLS([rl_completion_quote_character],
-                   [], [],
-                   [[#include <stdio.h>
-                     #include <readline/readline.h>]])
-
-    if test "$ac_cv_have_decl_rl_completion_quote_character" = "no" ; then
-      if test "$with_readline" = "yes" ; then
-        AC_MSG_ERROR([readline is missing rl_completion_quote_character])
-      else
-        with_readline=no;
-      fi
-    fi
-
-    # The normal library check...
-    LIBVIRT_CHECK_LIB([READLINE], [readline], [readline], [readline/readline.h])
-  fi
-
-  # We need this to avoid compilation issues with modern compilers.
-  # See 9ea3424a178 for a more detailed explanation
-  if test "$with_readline" = "yes" ; then
-    case "$READLINE_CFLAGS" in
-      *-D_FUNCTION_DEF*) ;;
-      *) READLINE_CFLAGS="-D_FUNCTION_DEF $READLINE_CFLAGS" ;;
-    esac
-  fi
-
-  # Gross kludge for readline include path obtained through pkg-config.
-  #
-  # As of 8.0, upstream readline.pc has -I${includedir}/readline among
-  # its Cflags, which is clearly wrong. This does not affect Linux
-  # because ${includedir} is already part of the default include path,
-  # but on other platforms that's not the case and the result is that
-  # <readline/readline.h> can't be located, causing the build to fail.
-  # A patch solving this issue has already been posted upstream, so once
-  # the fix has landed in FreeBSD ports and macOS homebrew we can safely
-  # drop the kludge and rely on pkg-config alone on those platforms.
-  #
-  # [1] http://lists.gnu.org/archive/html/bug-readline/2019-04/msg00007.html
-  case "$READLINE_CFLAGS" in
-    *include/readline*) READLINE_CFLAGS=$(echo $READLINE_CFLAGS | sed s,include/readline,include,g) ;;
-    *) ;;
-  esac
-])
-
-AC_DEFUN([LIBVIRT_RESULT_READLINE],[
-  LIBVIRT_RESULT_LIB([READLINE])
-])
diff --git a/meson.build b/meson.build
index 7aacfc2011c..c30b14c1643 100644
--- a/meson.build
+++ b/meson.build
@@ -965,6 +965,69 @@ if audit_dep.found()
   conf.set('WITH_AUDIT', 1)
 endif
 
+# readline 7.0 is the first version which includes pkg-config support
+readline_version = '7.0'
+readline_dep = dependency('readline', version: '>=' + readline_version, required: false)
+if not readline_dep.found()
+  readline_dep = cc.find_library('readline', required: get_option('readline'))
+
+  if readline_dep.found()
+    # This function is present in all reasonable (5.0+) readline versions;
+    # however, the macOS base system contains a library called libedit which
+    # takes over the readline name despite lacking many of its features. We
+    # want to make sure we only enable readline support when linking against
+    # the actual readline library, and the availability of this specific
+    # functions is as good a witness for that fact as any.
+    correct_rl = cc.has_function('rl_completion_quote_character', prefix: '#include <readline/readline.h>')
+    if not correct_rl and get_option('readline').enabled()
+      error('readline is missing rl_completion_quote_character')
+    else
+      readline_dep = dependency('', required: false)
+    endif
+  endif
+endif
+if readline_dep.found()
+  # Gross kludge for readline include path obtained through pkg-config.
+  #
+  # As of 8.0, upstream readline.pc has -I${includedir}/readline among
+  # its Cflags, which is clearly wrong. This does not affect Linux
+  # because ${includedir} is already part of the default include path,
+  # but on other platforms that's not the case and the result is that
+  # <readline/readline.h> can't be located, causing the build to fail.
+  # A patch solving this issue has already been posted upstream, so once
+  # the fix has landed in FreeBSD ports and macOS homebrew we can safely
+  # drop the kludge and rely on pkg-config alone on those platforms.
+  #
+  # [1] http://lists.gnu.org/archive/html/bug-readline/2019-04/msg00007.html
+  if readline_dep.type_name() == 'pkgconfig' and host_machine.system() != 'linux'
+    pkg_config_prog = find_program('pkg-config')
+    rc = run_command(pkg_config_prog, '--cflags', 'readline', check: true)
+    cflags = rc.stdout().strip()
+    if cflags.contains('include/readline')
+      rc = run_command(
+        'python3', '-c',
+        'print("@0@".replace("@1@", "@2@"))'.format(
+          cflags, 'include/readline', 'include',
+        ),
+        check: true,
+      )
+      readline_dep = declare_dependency(
+        compile_args: rc.stdout().strip().split(),
+        dependencies: [ readline_dep ],
+      )
+    endif
+  endif
+
+  # We need this to avoid compilation issues with modern compilers.
+  # See 9ea3424a178 for a more detailed explanation
+  readline_dep = declare_dependency(
+    compile_args: [ '-D_FUNCTION_DEF' ],
+    dependencies: [ readline_dep ],
+  )
+
+  conf.set('WITH_READLINE', 1)
+endif
+
 
 # define top include directory
 
@@ -989,6 +1052,7 @@ libs_summary = {
   'apparmor': apparmor_dep.found(),
   'attr': attr_dep.found(),
   'audit': audit_dep.found(),
+  'readline': readline_dep.found(),
 }
 summary(libs_summary, section: 'Libraries', bool_yn: true)
 
diff --git a/meson_options.txt b/meson_options.txt
index 16822374180..aafc694533a 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -12,3 +12,4 @@ option('test_coverage', type: 'boolean', value: false, description: 'turn on cod
 option('apparmor', type: 'feature', value: 'auto', description: 'apparmor support')
 option('attr', type: 'feature', value: 'auto', description: 'attr support')
 option('audit', type: 'feature', value: 'auto', description: 'audit support')
+option('readline', type: 'feature', value: 'auto', description: 'readline support')
-- 
2.26.2




More information about the libvir-list mailing list