[libvirt PATCH 16/31] m4: virt-xdr: rewrite XDR check

Pavel Hrdina phrdina at redhat.com
Thu Jul 2 12:25:14 UTC 2020


The current code to check XDR support was obsolete and way to
complicated.

On linux we can use pkg-config to check for libtirpc and have
the CFLAGS and LIBS configured by it as well.

On MinGW there is portablexdr library which installs header files
directly into system include directory.

On FreeBSD and macOS XDR functions are part of libc so there is
no library needed, we just need to call AM_CONDITIONAL to silence
configure which otherwise complains about missing WITH_XDR.

Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
---
 m4/virt-xdr.m4              | 39 +++++++++++--------------------------
 src/Makefile.am             |  4 +++-
 src/admin/Makefile.inc.am   |  1 +
 src/locking/Makefile.inc.am |  2 ++
 src/logging/Makefile.inc.am |  1 +
 src/remote/Makefile.inc.am  |  1 +
 6 files changed, 19 insertions(+), 29 deletions(-)

diff --git a/m4/virt-xdr.m4 b/m4/virt-xdr.m4
index 83754157d9a..09d0c2ba2f4 100644
--- a/m4/virt-xdr.m4
+++ b/m4/virt-xdr.m4
@@ -18,37 +18,20 @@ dnl <http://www.gnu.org/licenses/>.
 dnl
 
 AC_DEFUN([LIBVIRT_CHECK_XDR], [
-  with_xdr="no"
   if test x"$with_remote" = x"yes" || test x"$with_libvirtd" = x"yes"; then
-    dnl Where are the XDR functions?
-    dnl If portablexdr is installed, prefer that.
-    dnl Otherwise try -lxdr (some MinGW)
-    dnl -ltirpc (glibc 2.13.90 or newer) or none (most Unix)
-    AC_CHECK_LIB([portablexdr],[xdrmem_create],[],[
-      AC_SEARCH_LIBS([xdrmem_create],[xdr tirpc],[],
-        [AC_MSG_ERROR([Cannot find a XDR library])])
-    ])
+    dnl On MinGW portablexdr provides XDR functions, on linux they are
+    dnl provided by libtirpc and on FreeBSD/macOS there is no need to
+    dnl use extra library as it's provided by libc directly.
+
     with_xdr="yes"
 
-    dnl Recent glibc requires -I/usr/include/tirpc for <rpc/rpc.h>
-    old_CFLAGS=$CFLAGS
-    AC_CACHE_CHECK([where to find <rpc/rpc.h>], [lv_cv_xdr_cflags], [
-      for add_CFLAGS in '' '-I/usr/include/tirpc' 'missing'; do
-        if test x"$add_CFLAGS" = xmissing; then
-          lv_cv_xdr_cflags=missing; break
-        fi
-        CFLAGS="$old_CFLAGS $add_CFLAGS"
-        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <rpc/rpc.h>
-        ]])], [lv_cv_xdr_cflags=${add_CFLAGS:-none}; break])
-      done
-    ])
-    CFLAGS=$old_CFLAGS
-    case $lv_cv_xdr_cflags in
-      none) XDR_CFLAGS= ;;
-      missing) AC_MSG_ERROR([Unable to find <rpc/rpc.h>]) ;;
-      *) XDR_CFLAGS=$lv_cv_xdr_cflags ;;
-    esac
-    AC_SUBST([XDR_CFLAGS])
+    if test "$with_win" = "yes"; then
+      LIBVIRT_CHECK_LIB([XDR], [portablexdr], [xdrmem_create], [rpc/rpc.h])
+    elif test "$with_linux" = "yes"; then
+      LIBVIRT_CHECK_PKG([XDR], [libtirpc], [0.1.10])
+    else
+      AM_CONDITIONAL([WITH_XDR], [test "x$with_xdr" = "xyes"])
+    fi
   fi
 ])
 
diff --git a/src/Makefile.am b/src/Makefile.am
index b893f4179e8..8b0cbb6fc86 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -435,7 +435,9 @@ libvirt_la_LDFLAGS = \
 		$(AM_LDFLAGS) \
 		$(NULL)
 libvirt_la_LIBADD += \
-		    $(DLOPEN_LIBS)
+		$(DLOPEN_LIBS) \
+		$(XDR_LIBS) \
+		$(NULL)
 libvirt_la_CFLAGS = -DIN_LIBVIRT $(AM_CFLAGS)
 # Because we specify libvirt_la_DEPENDENCIES for $(LIBVIRT_SYMBOL_FILE), we
 # lose automake's automatic dependencies on an appropriate subset of
diff --git a/src/admin/Makefile.inc.am b/src/admin/Makefile.inc.am
index 0a9717adec6..8556a3b8523 100644
--- a/src/admin/Makefile.inc.am
+++ b/src/admin/Makefile.inc.am
@@ -72,6 +72,7 @@ libvirt_admin_la_LDFLAGS = \
 
 libvirt_admin_la_LIBADD = \
 	libvirt.la \
+	$(XDR_LIBS) \
 	$(CAPNG_LIBS) \
 	$(YAJL_LIBS) \
 	$(DEVMAPPER_LIBS) \
diff --git a/src/locking/Makefile.inc.am b/src/locking/Makefile.inc.am
index d1bf49cd3fb..ab01d8e0482 100644
--- a/src/locking/Makefile.inc.am
+++ b/src/locking/Makefile.inc.am
@@ -120,6 +120,7 @@ lockd_la_LDFLAGS = $(AM_LDFLAGS_MOD_NOUNDEF)
 lockd_la_LIBADD = \
 	libvirt.la \
 	$(GLIB_LIBS) \
+	$(XDR_LIBS) \
 	$(NULL)
 augeas_DATA += locking/libvirt_lockd.aug
 if WITH_DTRACE_PROBES
@@ -161,6 +162,7 @@ virtlockd_CFLAGS = \
 virtlockd_LDFLAGS = \
 	$(AM_LDFLAGS) \
 	$(PIE_LDFLAGS) \
+	$(XDR_LIBS) \
 	$(NO_UNDEFINED_LDFLAGS) \
 	$(NULL)
 virtlockd_LDADD = \
diff --git a/src/logging/Makefile.inc.am b/src/logging/Makefile.inc.am
index dc09cfe3fa8..4be33765e9e 100644
--- a/src/logging/Makefile.inc.am
+++ b/src/logging/Makefile.inc.am
@@ -99,6 +99,7 @@ virtlogd_CFLAGS = \
 virtlogd_LDFLAGS = \
 		$(AM_LDFLAGS) \
 		$(PIE_LDFLAGS) \
+		$(XDR_LIBS) \
 		$(NO_UNDEFINED_LDFLAGS) \
 		$(NULL)
 virtlogd_LDADD = \
diff --git a/src/remote/Makefile.inc.am b/src/remote/Makefile.inc.am
index 1b1be8340df..8a40c96563c 100644
--- a/src/remote/Makefile.inc.am
+++ b/src/remote/Makefile.inc.am
@@ -69,6 +69,7 @@ REMOTE_DAEMON_LD_ADD = \
 	$(LIBXML_LIBS) \
 	$(GNUTLS_LIBS) \
 	$(SASL_LIBS) \
+	$(XDR_LIBS) \
 	$(DBUS_LIBS) \
 	$(LIBNL_LIBS) \
 	$(NULL)
-- 
2.26.2




More information about the libvir-list mailing list