At 05/12/2011 02:40 PM, Wen Congyang Write: > My steps to build libvirt: > 1. # export CFLAGS=-Werror > 2. # ./autogen.sh > 3. # make dist && rpmbuild --nodeps --define "_sourcedir `pwd`" -ba libvirt.spec > ... > checking for msgmerge... /usr/bin/msgmerge > checking whether NLS is requested... yes > checking for GNU gettext in libc... no > checking for iconv... yes > checking for GNU gettext in libintl... no > checking whether to use NLS... no > checking for UDEV... yes > checking for PCIACCESS... yes > ... > + rm -f /home/wency/rpmbuild/BUILDROOT/libvirt-0.9.1-1.el6.x86_64/etc/libvirt/qemu/networks/default.xml > + rm -f /home/wency/rpmbuild/BUILDROOT/libvirt-0.9.1-1.el6.x86_64/etc/libvirt/qemu/networks/autostart/default.xml > + sed -i -e '/<uuid>/d' /home/wency/rpmbuild/BUILDROOT/libvirt-0.9.1-1.el6.x86_64/usr/share/libvirt/networks/default.xml > + /usr/lib/rpm/find-lang.sh /home/wency/rpmbuild/BUILDROOT/libvirt-0.9.1-1.el6.x86_64 libvirt > No translations found for libvirt in /home/wency/rpmbuild/BUILDROOT/libvirt-0.9.1-1.el6.x86_64 > error: Bad exit status from /var/tmp/rpm-tmp.nSgCNo (%install) > > > RPM build errors: > Bad exit status from /var/tmp/rpm-tmp.nSgCNo (%install) > > 4. # cat config.log > ... > configure:82567: checking for GNU gettext in libc > configure:82596: gcc -std=gnu99 -o conftest -Werror conftest.c -ldl >&5 > cc1: warnings being treated as errors > conftest.c: In function 'main': > conftest.c:468: error: cast from pointer to integer of different size > configure:82603: $? = 1 > configure: failed program was: > ... > | int > | main () > | { > | bindtextdomain ("", ""); > | return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings > | ; > | return 0; > | } This test program is generated according to gettext.m4. It's a bug of old version gettext, and it's fixed in gettext-0.14.4. I modify configure.ac to require gettext-0.14.4, build libvirt with -Werror, and receive the following error messages: RPM build errors: File not found: /home/wency/rpmbuild/BUILDROOT/libvirt-0.9.1-1.el6.x86_64/etc/libvirt/lxc.conf File not found: /home/wency/rpmbuild/BUILDROOT/libvirt-0.9.1-1.el6.x86_64/var/run/libvirt/lxc File not found: /home/wency/rpmbuild/BUILDROOT/libvirt-0.9.1-1.el6.x86_64/var/lib/libvirt/lxc File not found: /home/wency/rpmbuild/BUILDROOT/libvirt-0.9.1-1.el6.x86_64/usr/share/augeas/lenses/libvirtd_lxc.aug File not found: /home/wency/rpmbuild/BUILDROOT/libvirt-0.9.1-1.el6.x86_64/usr/share/augeas/lenses/tests/test_libvirtd_lxc.aug File not found: /home/wency/rpmbuild/BUILDROOT/libvirt-0.9.1-1.el6.x86_64/usr/libexec/libvirt_lxc The following patch can fix the problem: >From 95a02c3f6c594a623c01183067a1abd0d925d492 Mon Sep 17 00:00:00 2001 From: Wen Congyang <wency@xxxxxxxxxxxxxx> Date: Thu, 12 May 2011 17:51:21 +0800 Subject: [PATCH] build: fix building error with -Werror --- configure.ac | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 71c4968..0d369ac 100644 --- a/configure.ac +++ b/configure.ac @@ -638,7 +638,10 @@ if test "$with_libvirtd" = "no" ; then with_lxc=no fi if test "$with_lxc" = "yes" || test "$with_lxc" = "check"; then - AC_TRY_LINK([#define _GNU_SOURCE + AC_TRY_LINK([ + #ifndef _GNU_SOURCE + #define _GNU_SOURCE + #endif #include <sched.h> ], [ unshare (1); @@ -1981,7 +1984,7 @@ dnl Enable building libvirtd? AM_CONDITIONAL([WITH_LIBVIRTD],[test "x$with_libvirtd" = "xyes"]) dnl Check for gettext -AM_GNU_GETTEXT_VERSION([0.14.1]) +AM_GNU_GETTEXT_VERSION([0.14.4]) AM_GNU_GETTEXT([external]) dnl Since we're using such an old version of gettext, we must also define dnl this symbol, in order to make the autopoint-supplied Makefile.in.in -- 1.7.1 > configure:82623: result: no > ... > > 5. # cat po/Makefile.in.in > ... > install: install-exec install-data > install-exec: > install-data: install-data-@USE_NLS@ > if test "$(PACKAGE)" = "gettext-tools"; then \ > $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ > for file in $(DISTFILES.common) Makevars.template; do \ > $(INSTALL_DATA) $(srcdir)/$$file \ > $(DESTDIR)$(gettextsrcdir)/$$file; \ > done; \ > for file in Makevars; do \ > rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ > done; \ > else \ > : ; \ > fi > install-data-no: all > install-data-yes: all > $(mkinstalldirs) $(DESTDIR)$(datadir) > ... > gettext() returns char *, and we try to convert it to int. The size of pointer > and int is different, and gcc will give a warning. I build it with -Werror, so > the test program can not be built, and NLS is disabled. But We only install > translations when NLS is enabled. > > -- > libvir-list mailing list > libvir-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/libvir-list > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list