# HG changeset patch # User Jim Meyering # Date 1273423840 -7200 # Node ID 256d057c7f1f22f6db2fa5fa3e58a97b5b21f439 # Parent 1c0d89ded4f98599f9f637ced33996512f1591d5 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 --- 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 --- a/top/maint.mk +++ b/top/maint.mk @@ -665,6 +665,50 @@ ' 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 '~$$' && \