From 3ec2bcb33ab8a9a467afd71500ecfd6560fbf358 Mon Sep 17 00:00:00 2001 From: Christian Engwer <christi@dune-project.org> Date: Wed, 10 Sep 2008 10:45:42 +0000 Subject: [PATCH] headercheck as discussed in FS#394 [[Imported from SVN: r5267]] --- am/global-rules | 3 +++ am/headercheck | 65 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 am/headercheck diff --git a/am/global-rules b/am/global-rules index e662d2e9e..af01c5bd3 100644 --- a/am/global-rules +++ b/am/global-rules @@ -9,5 +9,8 @@ # add "sourcescheck"-target testing if all source files are mentioned include $(top_srcdir)/am/sourcescheck +# check consistency of the headers (see FS#394) +include $(top_srcdir)/am/headercheck + # add "check-log"-target to create automated build logs include $(top_srcdir)/am/checklog diff --git a/am/headercheck b/am/headercheck new file mode 100644 index 000000000..d966eb757 --- /dev/null +++ b/am/headercheck @@ -0,0 +1,65 @@ +# -*- Makefile -*- +# $Id: sourcescheck 5183 2008-04-27 17:37:08Z christi $ + +headercheck_PATTERN = *.hh +headercheck_IGNORE = + +hctest.o: hctest.cc + $(CXX) -I$(top_srcdir) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) \ + $(MPI_CPPFLAGS) $(ALL_PKG_CPPFLAGS) -c -o $@ $< + +headercheck: + @if test x"$$HEADER" = "x"; then \ + $(MAKE) $(AM_MAKEFLAGS) headercheck-recursive; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) headercheck-am; \ + fi + +headercheck-am: + @if test x"$$HEADER" != "x"; then \ + list="$$HEADER"; \ + else \ + list=`echo $(headercheck_PATTERN)`; \ + fi; \ + test "$$list" != "$(headercheck_PATTERN)" || exit 0; \ + for f in $$list; do \ + HEADER="dune/$(subdir)/$$f"; \ + echo "$$MAKEFLAGS" | grep 's' -q || echo "checking $$HEADER"; \ + CCFILE=hctest.cc; \ + OFILE=hctest.o; \ + LOGFILE=hctest.log; \ + echo "#include <config.h>" > $$CCFILE; \ + echo "#include <$${HEADER}>" >> $$CCFILE; \ + echo "#include <$${HEADER}>" >> $$CCFILE; \ + echo "int main () {}" >> $$CCFILE; \ + make $$OFILE > $$LOGFILE 2>&1; \ + SUCCESS=$$?; \ + (test $$SUCCESS -eq 0 && test ! -s $$LOGFILE) || echo "Error in $$HEADER"; \ + test $$SUCCESS -eq 0 || cat $$LOGFILE; \ + rm -f $$OFILE; \ + rm -f $$CCFILE; \ + rm -f $$LOGFILE; \ + test $$SUCCESS -eq 0 || exit $$SUCCESS; \ + done + +headercheck-recursive: + @set fnord $$MAKEFLAGS; amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +.PHONY: headercheck headercheck-recursive headercheck-am -- GitLab