
On Tue, May 10, 2011 at 05:42:06PM +0200, Christophe Fergeau wrote:
glibc 2.13.90 has obsoleted its rpc implementation in favour of the one provided by the TI-RPC library:
* The RPC implementation in libc is obsoleted. Old programs keep working but new programs cannot be linked with the routines in libc anymore. Programs in need of RPC functionality must be linked against TI-RPC. The TI-RPC implemtation is IPv6 enabled and there are other benefits.
Visible changes of this change include (obviously) the inability to link programs using RPC functions without referencing the TI-RPC library, the removal of the RPC headers from the glibc headers, and the lack of symbols defined in <rpc/netdb.h> when <netdb.h> is installed. Implemented by Ulrich Drepper. (from glibc NEWS)
Thus with recent glibc, we need to try linking with -ltirpc when looking for the XDR functions. The daemon also needs to use XDR_CFLAGS to be able to find the XDR headers stored in /usr/include/tirpc.
When using TI-RPC, there are some warnings about redundant declarations, but the fix probably belongs in other modules:
/usr/include/tirpc/rpc/rpcent.h:68:13: warning: redundant redeclaration of 'setrpcent' [-Wredundant-decls] /usr/include/rpc/netdb.h:53:13: note: previous declaration of 'setrpcent' was here
/usr/include/tirpc/rpc/rpcent.h:69:13: warning: redundant redeclaration of 'endrpcent' [-Wredundant-decls] /usr/include/rpc/netdb.h:54:13: note: previous declaration of 'endrpcent' was here
/usr/include/tirpc/rpc/rpc.h:84:12: warning: redundant redeclaration of 'bindresvport' [-Wredundant-decls] /usr/include/netinet/in.h:440:12: note: previous declaration of 'bindresvport' was here
Hmm, those smell like a bug in either glibc or tirpc. Only one of them should provide those decls.
--- configure.ac | 6 +++--- daemon/Makefile.am | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/configure.ac b/configure.ac index dcec371..db1c0e6 100644 --- a/configure.ac +++ b/configure.ac @@ -366,16 +366,16 @@ 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 -lrpc (Cygwin) -lxdr (some MinGW), -lnsl (Solaris) - dnl or none (most Unix) + dnl -ltirpc (glibc 2.13.90 or newer) or none (most Unix) AC_CHECK_LIB([portablexdr],[xdrmem_create],[],[ - AC_SEARCH_LIBS([xdrmem_create],[rpc xdr nsl],[], + AC_SEARCH_LIBS([xdrmem_create],[rpc xdr nsl tirpc],[], [AC_MSG_ERROR([Cannot find a XDR library])]) ])
dnl check for cygwin's variation in xdr function names AC_CHECK_FUNCS([xdr_u_int64_t],[],[],[#include <rpc/xdr.h>])
- dnl Cygwin requires -I/usr/include/tirpc for <rpc/rpc.h> + dnl Cygwin/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 diff --git a/daemon/Makefile.am b/daemon/Makefile.am index af71188..ef1804b 100644 --- a/daemon/Makefile.am +++ b/daemon/Makefile.am @@ -80,7 +80,7 @@ libvirtd_CFLAGS = \ -I$(top_srcdir)/src/conf \ -I$(top_srcdir)/src/remote \ $(LIBXML_CFLAGS) $(GNUTLS_CFLAGS) $(SASL_CFLAGS) \ - $(POLKIT_CFLAGS) \ + $(XDR_CFLAGS) $(POLKIT_CFLAGS) \ $(WARN_CFLAGS) \ $(COVERAGE_CFLAGS) \ -DQEMUD_PID_FILE="\"$(QEMUD_PID_FILE)\"" \
ACK, but someone should file a BZ about the duplicated definitions to get them fixed, because we need to be able to build with -Werror enabled Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|