This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH] New "make check-headers" rule. (was: Re: [RFA/commit 1/3] language.h: Add "symtab.h" #include)
- From: Pedro Alves <palves at redhat dot com>
- To: Joel Brobecker <brobecker at adacore dot com>
- Cc: gdb-patches at sourceware dot org
- Date: Wed, 13 Nov 2013 19:03:32 +0000
- Subject: [PATCH] New "make check-headers" rule. (was: Re: [RFA/commit 1/3] language.h: Add "symtab.h" #include)
- Authentication-results: sourceware.org; auth=none
- References: <1384151855-12926-1-git-send-email-brobecker at adacore dot com>
On 11/11/2013 06:37 AM, Joel Brobecker wrote:
> Hello,
>
> I noticed this when I tried to #include "language.h" from mi-parse.c,
> when I got compilation errors from missing type declarations:
>
> In addition to the fact that language.h depends on a number of struct
> types declared in symtab.h, language.h also depends on an enumerated
> type (domain_enum). So language.h should #include "symtab.h".
>
> gdb/ChangeLog:
>
> * language.h: Add "symtab.h" #include.
>
> Tested on x86_64-linux. I think this patch should go in on its own.
Agreed.
I wonder what people think of something like the patch below.
$ make check-headers CHECK_HEADERS="language.h"
Checking headers.
for i in language.h ; do \
gcc -g3 -O0 -I. -I../../src/gdb -I../../src/gdb/common -I../../src/gdb/config -DLOCALEDIR="\"/usr/local/share/locale\"" -DHAVE_CONFIG_H -I../../src/gdb/../include/opcode -I../../src/gdb/../opcodes/.. -I../../src/gdb/../readline/.. -I../bfd -I../../src/gdb/../bfd -I../../src/gdb/../include -I../libdecnumber -I../../src/gdb/../libdecnumber -I../../src/gdb/gnulib/import -Ibuild-gnulib/import -DTUI=1 -I/usr/include/python2.7 -I/usr/include/python2.7 -Wall -Wdeclaration-after-statement -Wpointer-arith -Wpointer-sign -Wno-unused -Wunused-value -Wunused-function -Wno-switch -Wno-char-subscripts -Wmissing-prototypes -Wdeclaration-after-statement -Wempty-body -Wmissing-parameter-type -Wold-style-declaration -Wold-style-definition -Wformat-nonliteral -Werror -c -o check-headers -Wno-error -fno-strict-aliasing -DNDEBUG -fwrapv -include defs.h \
../../src/gdb/$i -o /dev/null ; \
done
../../src/gdb/language.h:200:17: warning: ‘struct symbol’ declared inside parameter list [enabled by default]
../../src/gdb/language.h:200:17: warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default]
../../src/gdb/language.h:242:13: warning: ‘struct symbol’ declared inside parameter list [enabled by default]
../../src/gdb/language.h:263:14: warning: type defaults to ‘int’ in declaration of ‘domain_enum’ [-Wimplicit-int]
../../src/gdb/language.h:263:8: warning: ‘struct block’ declared inside parameter list [enabled by default]
../../src/gdb/language.h:294:5: error: expected specifier-qualifier-list before ‘VEC’
make: *** [check-headers] Error 1
After your patch, the above comes out clean.
-------------
New "make check-headers" rule.
Tries to compile each header in isolation, thus ensuring headers are
self-contained.
Defaults to checking all $HFILES_NO_SRCDIR headers.
Do:
make check-headers CHECK_HEADERS="header.h list.h"
to check specific headers.
gdb/
2013-11-13 Pedro Alves <palves@redhat.com>
* Makefile.in (COMPILE.pre): Rename to ...
(NODEPS_COMPILE.pre): ... this.
(COMPILE.post): Rename to ...
(NODEPS_COMPILE.post): ... this.
(COMPILE): Rename to ...
(NODEPS_COMPILE): ... this.
(COMPILE.pre, COMPILE.post, COMPILE): Reimplement as wrappers
around the NODEPS variants.
(CHECK_HEADERS): New.
(check-headers:): New rule.
---
gdb/Makefile.in | 32 +++++++++++++++++++++++++++++---
1 file changed, 29 insertions(+), 3 deletions(-)
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 975edbf..d39b5b4 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -86,11 +86,15 @@ DEPMODE = @CCDEPMODE@
DEPDIR = @DEPDIR@
depcomp = $(SHELL) $(srcdir)/../depcomp
+NODEPS_COMPILE.pre = $(CC)
+NODEPS_COMPILE.post = -c -o $@
+NODEPS_COMPILE = $(NODEPS_COMPILE.pre) $(INTERNAL_CFLAGS) $(NODEPS_COMPILE.post)
+
# Note that these are overridden by GNU make-specific code below if
# GNU make is used. The overrides implement dependency tracking.
-COMPILE.pre = $(CC)
-COMPILE.post = -c -o $@
-COMPILE = $(COMPILE.pre) $(INTERNAL_CFLAGS) $(COMPILE.post)
+COMPILE.pre = $(NODEPS_COMPILE.pre)
+COMPILE.post = $(NODEPS_COMPILE.post)
+COMPILE = $(NODEPS_COMPILE)
POSTCOMPILE = @true
# Directory containing source files.
@@ -1050,6 +1054,28 @@ check//%: force
"$$target"; \
else true; fi
+# The set of headers checked by 'check-headers' by default.
+CHECK_HEADERS = $(HFILES_NO_SRCDIR)
+
+# Try to compile each header in isolation, thus ensuring headers are
+# self-contained.
+#
+# Defaults to checking all $HFILES_NO_SRCDIR headers.
+#
+# Do:
+#
+# make check-headers CHECK_HEADERS="header.h list.h"
+#
+# to check specific headers.
+#
+check-headers:
+ @echo Checking headers.
+ for i in $(CHECK_HEADERS) ; do \
+ $(NODEPS_COMPILE) -Wno-error $(PYTHON_CFLAGS) -include defs.h \
+ $(srcdir)/$$i -o /dev/null ; \
+ done
+.PHONY: check-headers
+
info install-info clean-info dvi pdf install-pdf html install-html: force
@$(MAKE) $(FLAGS_TO_PASS) DO=$@ "DODIRS=$(SUBDIRS)" subdir_do