This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] New "make check-headers" rule. (was: Re: [RFA/commit 1/3] language.h: Add "symtab.h" #include)


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
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]