diff --git a/libvirt.spec.in b/libvirt.spec.in
index 9f24e06aa4..522e36b6a5 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -406,11 +406,13 @@ BuildRequires: wireshark-devel >= 2.4.0
BuildRequires: libssh-devel >= 0.7.0
%endif
+# On RHEL-7 rpcgen is still part of glibc-common package
%if 0%{?fedora} || 0%{?rhel} > 7
BuildRequires: rpcgen
-BuildRequires: libtirpc-devel
%endif
+BuildRequires: libtirpc-devel
+
%if %{with_firewalld_zone}
BuildRequires: firewalld-filesystem
%endif
diff --git a/m4/virt-xdr.m4 b/m4/virt-xdr.m4
index 83754157d9..09d0c2ba2f 100644
--- a/m4/virt-xdr.m4
+++ b/m4/virt-xdr.m4
@@ -18,37 +18,20 @@ dnl .
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
- old_CFLAGS=$CFLAGS
- AC_CACHE_CHECK([where to find ], [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
- ]])], [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 ]) ;;
- *) 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 57e1d4d95b..834e356b68 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -434,7 +434,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 0a9717adec..8556a3b852 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 d1bf49cd3f..ab01d8e048 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 64023aa672..873e6029dd 100644
--- a/src/logging/Makefile.inc.am
+++ b/src/logging/Makefile.inc.am
@@ -98,6 +98,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 5b8eb59bab..80f4aad782 100644
--- a/src/remote/Makefile.inc.am
+++ b/src/remote/Makefile.inc.am
@@ -64,6 +64,7 @@ REMOTE_DAEMON_LD_ADD = \
$(LIBXML_LIBS) \
$(GNUTLS_LIBS) \
$(SASL_LIBS) \
+ $(XDR_LIBS) \
$(DBUS_LIBS) \
$(LIBNL_LIBS) \
$(NULL)