summaryrefslogtreecommitdiff
path: root/top
diff options
context:
space:
mode:
authorJim Meyering <meyering@redhat.com>2010-05-09 18:50:40 +0200
committerJim Meyering <meyering@redhat.com>2010-05-09 18:53:33 +0200
commit880f2b69df57af506439d6aaf1fe185a6f960e43 (patch)
tree1e7bb08e2596b15b20186a2576de30bbd9c0ac92 /top
parentdb2ebe9d04c394f51b2b0f4306c9f9a79959b1da (diff)
downloadgnulib-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.mk44
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 '~$$' && \