[libvirt] [PATCHv2 2/2] freebsd: Fix build problem due to picking up the wrong libvirt.h

Eric Blake eblake at redhat.com
Thu Jul 28 19:32:04 UTC 2011


From: Matthias Bolte <matthias.bolte at googlemail.com>

Gettext annoyingly modifies CPPFLAGS in-place, putting
-I/usr/local/include into the search patch if libintl headers
must be used from that location.  But since we must support
automake 1.9.6 which lacks AM_CPPFLAGS, and since CPPFLAGS is used
prior to INCLUDES, this means that the build picks up the _old_
installed libvirt.h in priority to the in-tree version, leading
to all sorts of weird build failures on FreeBSD.

Fix this by teaching configure to undo gettext's actions, but
to keep any changes required by gettext at the end of INCLUDES
after all in-tree locations are used first.  Also requires
adding a wrapper Makefile.am and making gnulib-tool create
just gnulib.mk files during the bootstrap process.
---

v1 is here:
https://www.redhat.com/archives/libvir-list/2011-July/msg01984.html

v2: update bootstrap.conf and gnulib/*/Makefile.am to fix gnulib
compilation, update .gitignore to allow committing new files.

 .gitignore               |    6 +++++-
 bootstrap.conf           |    5 ++---
 configure.ac             |   22 ++++++++++++++++++++++
 daemon/Makefile.am       |   17 ++++++++++-------
 gnulib/lib/Makefile.am   |    8 ++++++++
 gnulib/tests/Makefile.am |    8 ++++++++
 python/Makefile.am       |    3 ++-
 src/Makefile.am          |    5 +++--
 tests/Makefile.am        |    3 ++-
 tools/Makefile.am        |   13 ++++++++-----
 10 files changed, 70 insertions(+), 20 deletions(-)
 create mode 100644 gnulib/lib/Makefile.am
 create mode 100644 gnulib/tests/Makefile.am

diff --git a/.gitignore b/.gitignore
index dd64ca5..60220ad 100644
--- a/.gitignore
+++ b/.gitignore
@@ -36,7 +36,9 @@
 /configure.lineno
 /daemon/*_dispatch.h
 /docs/hvsupport.html.in
-/gnulib/
+/gnulib/lib/*
+/gnulib/m4/*
+/gnulib/tests/*
 /libtool
 /libvirt-*.tar.gz
 /libvirt-[0-9]*
@@ -74,6 +76,8 @@ results.log
 stamp-h
 stamp-h.in
 stamp-h1
+!/gnulib/lib/Makefile.am
+!/gnulib/tests/Makefile.am
 !/m4/virt-*.m4
 !/po/*.po
 !/po/POTFILES.in
diff --git a/bootstrap.conf b/bootstrap.conf
index 3b105b1..7882886 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -161,7 +161,6 @@ gnulib_name=libgnu
 m4_base=gnulib/m4
 source_base=gnulib/lib
 tests_base=gnulib/tests
-gnulib_mk=Makefile.am
 gnulib_tool_option_extras="\
  --lgpl=2\
  --with-tests\
@@ -203,9 +202,9 @@ gnulib_extra_files="

 bootstrap_epilogue()
 {
-  # Change paths in gnulib/tests/Makefile.am from "../../.." to "../..",
+  # Change paths in gnulib/tests/gnulib.mk from "../../.." to "../..",
   # then ensure that gnulib/tests/Makefile.in is up-to-date.
-  m=gnulib/tests/Makefile.am
+  m=gnulib/tests/gnulib.mk
   sed 's,\.\./\.\./\.\.,../..,g' $m > $m-t
   mv -f $m-t $m
   ${AUTOMAKE-automake} gnulib/tests/Makefile
diff --git a/configure.ac b/configure.ac
index 36037e5..34bc1fe 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2058,8 +2058,30 @@ dnl Enable building libvirtd?
 AM_CONDITIONAL([WITH_LIBVIRTD],[test "x$with_libvirtd" = "xyes"])

 dnl Check for gettext - don't go any newer than what RHEL 5 supports
+dnl
+dnl save and restore CPPFLAGS around gettext check as the internal iconv
+dnl check might leave -I/usr/local/include in CPPFLAGS on FreeBSD resulting
+dnl in the build picking up previously installed libvirt/libvirt.h instead
+dnl of the correct one from the source tree.
+dnl compute the difference between save_CPPFLAGS and CPPFLAGS and append it
+dnl to INCLUDES in order to preserve changes made by gettext but in a place
+dnl that does not break the build
+save_CPPFLAGS="$CPPFLAGS"
 AM_GNU_GETTEXT_VERSION([0.17])
 AM_GNU_GETTEXT([external])
+GETTEXT_CPPFLAGS=
+if test "x$save_CPPFLAGS" != "x$CPPFLAGS"; then
+ set dummy $CPPFLAGS; shift
+ for var
+ do
+   case " $var " in
+     " $save_CPPFLAGS ") ;;
+     *) GETTEXT_CPPFLAGS="$GETTEXT_CPPFLAGS $var" ;;
+   esac
+ done
+fi
+CPPFLAGS="$save_CPPFLAGS"
+AC_SUBST([GETTEXT_CPPFLAGS])

 ALL_LINGUAS=`cd "$srcdir/po" > /dev/null && ls *.po | sed 's+\.po$++'`

diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index 65ac8e9..690bf85 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -3,6 +3,16 @@
 ## Copyright (C) 2005-2011 Red Hat, Inc.
 ## See COPYING.LIB for the License of this software

+INCLUDES = \
+	-I$(top_srcdir)/gnulib/lib -I../gnulib/lib \
+	-I$(top_srcdir)/include -I$(top_builddir)/include \
+	-I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/util \
+	-I$(top_srcdir)/src/conf \
+	-I$(top_srcdir)/src/rpc \
+	-I$(top_srcdir)/src/remote \
+	$(GETTEXT_CPPFLAGS)
+
 CLEANFILES =

 DAEMON_GENERATED =					\
@@ -82,13 +92,6 @@ libvirtd_SOURCES = $(DAEMON_SOURCES)

 #-D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_POSIX_C_SOURCE=199506L
 libvirtd_CFLAGS = \
-	-I$(top_srcdir)/gnulib/lib -I../gnulib/lib \
-	-I$(top_srcdir)/include -I$(top_builddir)/include \
-	-I$(top_srcdir)/src \
-	-I$(top_srcdir)/src/util \
-	-I$(top_srcdir)/src/conf \
-	-I$(top_srcdir)/src/rpc \
-	-I$(top_srcdir)/src/remote \
 	$(LIBXML_CFLAGS) $(GNUTLS_CFLAGS) $(SASL_CFLAGS) \
 	$(XDR_CFLAGS) $(POLKIT_CFLAGS) \
 	$(WARN_CFLAGS) \
diff --git a/gnulib/lib/Makefile.am b/gnulib/lib/Makefile.am
new file mode 100644
index 0000000..3445c6d
--- /dev/null
+++ b/gnulib/lib/Makefile.am
@@ -0,0 +1,8 @@
+## Makefile for gnulib/lib				-*-Makefile-*-
+
+## Copyright (C) 2011 Red Hat, Inc.
+## See COPYING.LIB for the License of this software
+
+include gnulib.mk
+
+INCLUDES = $(GETTEXT_CPPFLAGS)
diff --git a/gnulib/tests/Makefile.am b/gnulib/tests/Makefile.am
new file mode 100644
index 0000000..3445c6d
--- /dev/null
+++ b/gnulib/tests/Makefile.am
@@ -0,0 +1,8 @@
+## Makefile for gnulib/lib				-*-Makefile-*-
+
+## Copyright (C) 2011 Red Hat, Inc.
+## See COPYING.LIB for the License of this software
+
+include gnulib.mk
+
+INCLUDES = $(GETTEXT_CPPFLAGS)
diff --git a/python/Makefile.am b/python/Makefile.am
index 0e14d23..5943fe8 100644
--- a/python/Makefile.am
+++ b/python/Makefile.am
@@ -9,7 +9,8 @@ INCLUDES = \
 	$(PYTHON_INCLUDES) \
 	-I$(top_srcdir)/include \
 	-I$(top_builddir)/include \
-	-I$(top_builddir)/$(subdir)
+	-I$(top_builddir)/$(subdir) \
+	$(GETTEXT_CPPFLAGS)

 AM_CFLAGS = $(WARN_CFLAGS)

diff --git a/src/Makefile.am b/src/Makefile.am
index 00307fa..b7e4991 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -5,13 +5,14 @@

 # No libraries with the exception of LIBXML should be listed
 # here. List them against the individual XXX_la_CFLAGS targets
-# that actually use them
+# that actually use them. Also keep GETTEXT_CPPFLAGS at the end.
 INCLUDES =	-I$(top_srcdir)/gnulib/lib			\
 		-I../gnulib/lib					\
 		-I../include					\
 		-I at top_srcdir@/src/util				\
 		-I at top_srcdir@/include				\
-		-DIN_LIBVIRT
+		-DIN_LIBVIRT					\
+		$(GETTEXT_CPPFLAGS)

 AM_CFLAGS =	$(DRIVER_MODULE_CFLAGS)				\
 		$(LIBXML_CFLAGS)				\
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 1560ac1..43a4301 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -11,7 +11,8 @@ INCLUDES = \
 	-I$(top_srcdir)/include \
 	-I$(top_srcdir)/src \
 	-I$(top_srcdir)/src/util \
-	-I$(top_srcdir)/src/conf
+	-I$(top_srcdir)/src/conf \
+	$(GETTEXT_CPPFLAGS)

 AM_CFLAGS = \
 	$(LIBXML_CFLAGS) \
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 66d4ed2..71131e2 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -1,6 +1,14 @@
 ## Copyright (C) 2005-2011 Red Hat, Inc.
 ## See COPYING.LIB for the License of this software

+INCLUDES = \
+	-I../include -I$(top_srcdir)/include \
+	-I$(top_srcdir)/gnulib/lib -I../gnulib/lib	\
+	-I$(top_srcdir)/src				\
+	-I$(top_srcdir)/src/util			\
+	-I$(top_srcdir)					\
+	$(GETTEXT_CPPFLAGS)
+
 POD2MAN = pod2man -c "Virtualization Support" -r "$(PACKAGE)-$(VERSION)"

 ICON_FILES = \
@@ -68,11 +76,6 @@ virsh_LDADD =							\
 		$(LIBXML_LIBS)					\
 		$(VIRSH_LIBS)
 virsh_CFLAGS =							\
-		-I$(top_srcdir)/gnulib/lib -I../gnulib/lib	\
-		-I../include -I$(top_srcdir)/include		\
-		-I$(top_srcdir)/src				\
-		-I$(top_srcdir)/src/util			\
-		-I$(top_srcdir)					\
 		$(WARN_CFLAGS)					\
 		$(COVERAGE_CFLAGS)				\
 		$(LIBXML_CFLAGS)				\
-- 
1.7.4.4




More information about the libvir-list mailing list