On Fri, Sep 13, 2013 at 10:33:04AM -0600, Eric Blake wrote: > Bother those kernel developers. In the latest rawhide, kernel > and glibc have now been unified so that <netinet/in.h> and > <linux/in6.h> no longer clash; but <linux/if_bridge.h> is still > not self-contained. Because of the latest header change, the > build is failing with: > > checking for linux/param.h... no > configure: error: You must install kernel-headers in order to compile libvirt with QEMU or LXC support > > with details: > > In file included from conftest.c:561:0: > /usr/include/linux/in6.h:71:18: error: field 'flr_dst' has incomplete type > struct in6_addr flr_dst; > > We need a workaround to avoid our workaround :) > > * configure.ac (KERNEL_HEADERS_WORKAROUND): New test. > * src/util/virnetdevbridge.c (includes): Use it. > > Signed-off-by: Eric Blake <eblake@xxxxxxxxxx> > --- > > This qualifies as a build-breaker; but last time I pushed a patch > in this area of code without review, it got reverted, so I'll wait > for the review. > > I've tested on RHEL 5, RHEL 6, Fedora 19 (all of which have glibc > and kernel differences, although not the same error messages) and > rawhide (where glibc and kernel finally agree, but where the kernel > headers _still_ assume that the caller already declared ipv6 structs). > > configure.ac | 38 ++++++++++++++++++++++++++++---------- > src/util/virnetdevbridge.c | 24 ++++++++++++++---------- > 2 files changed, 42 insertions(+), 20 deletions(-) > > diff --git a/configure.ac b/configure.ac > index 8426863..8acccdd 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -1051,18 +1051,36 @@ dnl check for kernel headers required by src/bridge.c > dnl > if test "$with_linux" = "yes"; then > if test "$with_qemu" = "yes" || test "$with_lxc" = "yes" ; then > + # Various kernel versions have headers that are not self-standing, but > + # yet are incompatible with the corresponding glibc headers. In order > + # to guarantee compilation across a wide range of versions (from RHEL 5 > + # to rawhide), we first have to probe whether glibc and kernel can be > + # used in tandem; and if not, provide workarounds that ensure that > + # ABI-compatible IPv6 types are present for use by the kernel headers. > + # These probes mirror the usage in virnetdevbridge.c > + AC_CACHE_CHECK([whether kernel and glibc headers are compatible], > + [lv_cv_kernel_glibc_compatible], > + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ > + #include <netinet/in.h> > + #include <linux/in6.h> > + ]])], > + [lv_cv_kernel_glibc_compatible=yes], > + [lv_cv_kernel_glibc_compatible=no])]) > + if test "x$lv_cv_kernel_glibc_compatible" != xyes; then > + AC_DEFINE([KERNEL_HEADERS_WORKAROUND], [1], > + [define to 1 if Linux kernel headers require a workaround to avoid > + compilation errors when mixed with glibc headers]) > + fi nitpick - how about calling this LINUX_NETINET_IN_WORKAROUND or something similarly specific about the header file that is actually broken. ACK 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 :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list