From: Jim Meyering Date: Sun, 9 May 2010 16:50:40 +0000 (+0200) Subject: maint.mk: prohibit definition of symbols defined by gnulib X-Git-Tag: v0.1~4158 X-Git-Url: http://erislabs.org.uk/gitweb/?a=commitdiff_plain;h=880f2b69df57af506439d6aaf1fe185a6f960e43;p=gnulib.git maint.mk: prohibit definition of symbols defined by gnulib * top/maint.mk (sc_prohibit_always-defined_macros): Reject the definition of symbols defined by gnulib. --- diff --git a/ChangeLog b/ChangeLog index 7c1f4e210..4de7bb32d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2010-05-09 Jim Meyering + + maint.mk: prohibit definition of symbols defined by gnulib + * top/maint.mk (sc_prohibit_always-defined_macros): Reject the + definition of symbols defined by gnulib. + 2010-05-09 Bruno Haible acl: Avoid test failure on Cygwin-hosted mingw. diff --git a/top/maint.mk b/top/maint.mk index 335d07835..8d3d137d8 100644 --- a/top/maint.mk +++ b/top/maint.mk @@ -665,6 +665,50 @@ sc_prohibit_always_true_header_tests: ' with the corresponding gnulib module, they are always true' \ $(_sc_search_regexp) +# ================================================================== +gl_other_headers_ ?= \ + intprops.h \ + openat.h \ + stat-macros.h + +# Perl -lne code to extract "significant" cpp-defined symbols from a +# gnulib header file, eliminating a few common false-positives. +gl_extract_significant_defines_ = \ + /^\# *define ([^_ (][^ (]*)(\s*\(|\s+\w+)/ && $$2 !~ /(?:rpl_|_used_without_)/\ + and print $$1 + +# Create a list of regular expressions matching the names +# of macros that are guaranteed to be defined by parts of gnulib. +.re-defmac: + @gen_h=$(gl_generated_headers_); \ + (cd $(gnulib_dir)/lib; \ + for f in *.in.h $(gl_other_headers_); do \ + perl -lne '$(gl_extract_significant_defines_)' $$f; \ + done; \ + ) | sort -u \ + | grep -Ev '^ATTRIBUTE_NORETURN' \ + | sed 's/^/^ *# *define /;s/$$/\\>/' \ + > $@-t + @mv $@-t $@ + +define gl_trap_ + Exit () { set +e; (exit $$1); exit $$1; }; \ + for sig in 1 2 3 13 15; do \ + eval "trap 'Exit $$(expr $$sig + 128)' $$sig"; \ + done +endef + +# Don't define macros that we already get from gnulib header files. +sc_prohibit_always-defined_macros: .re-defmac + @if test -d $(gnulib_dir); then \ + trap 'rc=$$?; rm -f .re-defmac; exit $$rc' 0; \ + $(gl_trap_); \ + grep -f .re-defmac $$($(VC_LIST_EXCEPT)) \ + && { echo '$(ME): define the above via some gnulib .h file' \ + 1>&2; exit 1; } || :; \ + fi +# ================================================================== + # Prohibit checked in backup files. sc_prohibit_backup_files: @$(VC_LIST) | grep '~$$' && \