john.levon@xxxxxxx wrote: > # HG changeset patch > # User john.levon@xxxxxxx > # Date 1229399267 28800 > # Node ID db36391b739c117f5887388f65f31e6a9d2d361b > # Parent 020f8b8e9340287a6ab3d869b359e39b905cd0ff > Fix _FILE_OFFSET_BITS re-definition > > Since config.h contains the _FILE_OFFSET_BITS setting (a little dubious > in itself), it must be the first header included, otherwise system > headers can define _FILE_OFFSET_BITS differently themselves. > > Signed-off-by: John Levon <john.levon@xxxxxxx> > > diff --git a/src/node_device_hal.c b/src/node_device_hal.c > --- a/src/node_device_hal.c > +++ b/src/node_device_hal.c > @@ -21,10 +21,11 @@ > * Author: David F. Lively <dlively@xxxxxxxxxxxxxxx> > */ > > +#include <config.h> > + > #include <stdio.h> > #include <stdlib.h> > > -#include <config.h> > #include <libhal.h> > > #include "node_device_conf.h" ACK FYI, there are 3 other cases where the "include <config.h> first" rule is broken: docs/examples/info1.c docs/examples/suspend.c qemud/remote_protocol.c so I've just written a new syntax-check rule to enforce this. It fixes only the last one. Since the two examples are not necessarily built using libvirt's own build system, so they are exempted. So with your patch above and the following one, the new "make sc_require_config_h_first" part of "make syntax-check" passes: >From 15afb090ac28ab6b9274fb827eb1c1c939db4104 Mon Sep 17 00:00:00 2001 From: Jim Meyering <meyering@xxxxxxxxxx> Date: Wed, 17 Dec 2008 10:49:04 +0100 Subject: [PATCH] enforce the "include <config.h> first" rule * qemud/Makefile.am: Ensure that the generated remote_protocol.c includes <config.h> first. * qemud/remote_protocol.c: Regenerate. * Makefile.maint (sc_require_config_h_first): New rule, so that "make syntax-check" enforces this. * .x-sc_require_config_h_first: New file. * Makefile.am (.x-sc_require_config_h_first): Add it. --- .x-sc_require_config_h_first | 2 ++ ChangeLog | 11 +++++++++++ Makefile.am | 1 + Makefile.maint | 15 +++++++++++++++ qemud/Makefile.am | 9 +++++++-- qemud/remote_protocol.c | 2 +- 6 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 .x-sc_require_config_h_first diff --git a/.x-sc_require_config_h_first b/.x-sc_require_config_h_first new file mode 100644 index 0000000..58a8878 --- /dev/null +++ b/.x-sc_require_config_h_first @@ -0,0 +1,2 @@ +^docs/examples/info1\.c$ +^docs/examples/suspend\.c$ diff --git a/ChangeLog b/ChangeLog index 08a1cb5..36c1278 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2008-12-17 Jim Meyering <meyering@xxxxxxxxxx> + + enforce the "include <config.h> first" rule + * qemud/Makefile.am: Ensure that the generated remote_protocol.c + includes <config.h> first. + * qemud/remote_protocol.c: Regenerate. + * Makefile.maint (sc_require_config_h_first): New rule, so that + "make syntax-check" enforces this. + * .x-sc_require_config_h_first: New file. + * Makefile.am (.x-sc_require_config_h_first): Add it. + Wed Dec 17 08:02:01 +0100 2008 Jim Meyering <meyering@xxxxxxxxxx> fix numa-related (and kernel-dependent) test failures diff --git a/Makefile.am b/Makefile.am index d40a151..758ad50 100644 --- a/Makefile.am +++ b/Makefile.am @@ -14,6 +14,7 @@ EXTRA_DIST = \ libvirt.pc libvirt.pc.in \ $(man_MANS) autobuild.sh \ .x-sc_avoid_if_before_free \ + .x-sc_require_config_h_first \ .x-sc_prohibit_strcmp \ .x-sc_require_config_h \ autogen.sh diff --git a/Makefile.maint b/Makefile.maint index 5758215..b7bb680 100644 --- a/Makefile.maint +++ b/Makefile.maint @@ -135,6 +135,21 @@ sc_require_config_h: else :; \ fi +# You must include <config.h> before including any other header file. +sc_require_config_h_first: + @if $(VC_LIST_EXCEPT) | grep '\.c$$' > /dev/null; then \ + fail=0; \ + for i in $$($(VC_LIST_EXCEPT) | grep '\.c$$'); do \ + grep '^# *include\>' $$i | sed 1q \ + | grep '^# *include <config\.h>' > /dev/null \ + || { echo $$i; fail=1; }; \ + done; \ + test $$fail = 1 && \ + { echo '$(ME): the above files include some other header' \ + 'before <config.h>' 1>&2; exit 1; } || :; \ + else :; \ + fi + # To use this "command" macro, you must first define two shell variables: # h: the header, enclosed in <> or "" # re: a regular expression that matches IFF something provided by $h is used. diff --git a/qemud/Makefile.am b/qemud/Makefile.am index b8dae88..28fd84a 100644 --- a/qemud/Makefile.am +++ b/qemud/Makefile.am @@ -33,11 +33,16 @@ EXTRA_DIST = \ if RPCGEN SUFFIXES = .x +# The perl -ne subshell ensures that remote_protocol.c ends up +# including <config.h> before "remote_protocol.h". .x.c: - rm -f $@ $@-t $@-t2 + rm -f $@ $@-t $@-t1 $@-t2 rpcgen -c -o $@-t $< + (echo '#include <config.h>'; \ + perl -ne '/^#include <config.h>/ or print' $@-t) > $@-t1 if GLIBC_RPCGEN - perl -w rpcgen_fix.pl $@-t > $@-t2 + perl -w rpcgen_fix.pl $@-t1 > $@-t2 + rm $@-t1 chmod 444 $@-t2 mv $@-t2 $@ endif diff --git a/qemud/remote_protocol.c b/qemud/remote_protocol.c index ec8e653..cbd722d 100644 --- a/qemud/remote_protocol.c +++ b/qemud/remote_protocol.c @@ -1,10 +1,10 @@ +#include <config.h> /* * Please do not edit this file. * It was generated using rpcgen. */ #include "remote_protocol.h" -#include <config.h> #include "internal.h" #include <arpa/inet.h> -- 1.6.1.rc2.316.geb2f0 -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list