diff options
author | Jim Meyering <meyering@redhat.com> | 2010-05-09 18:50:40 +0200 |
---|---|---|
committer | Jim Meyering <meyering@redhat.com> | 2010-05-09 18:53:33 +0200 |
commit | 880f2b69df57af506439d6aaf1fe185a6f960e43 (patch) | |
tree | 1e7bb08e2596b15b20186a2576de30bbd9c0ac92 /top | |
parent | db2ebe9d04c394f51b2b0f4306c9f9a79959b1da (diff) | |
download | gnulib-880f2b69df57af506439d6aaf1fe185a6f960e43.tar.gz |
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.
Diffstat (limited to 'top')
-rw-r--r-- | top/maint.mk | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/top/maint.mk b/top/maint.mk index 335d078358..8d3d137d8f 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 '~$$' && \ |