From: Jim Meyering Date: Tue, 27 Apr 2004 14:57:33 +0000 (+0000) Subject: (sc_src_functions_have_static_scope): New rule. X-Git-Tag: v5.3.0~1667 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=36968546e5d3835b4d3d2f0a0a4f8b0632eb9003;p=thirdparty%2Fcoreutils.git (sc_src_functions_have_static_scope): New rule. --- diff --git a/src/Makefile.am b/src/Makefile.am index 61e05b51b8..8356f1430f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -270,3 +270,22 @@ s2 = '/^\#define AUTHORS \\\\/{;n;$(sed_filter);p;q;}' done | $(ASSORT) -u ) > $@-t chmod a-w $@-t mv $@-t $@ + +# The following rule is not designed to be portable, +# and relies on tools that not everyone has. + +# Most functions in src/*.c should have static scope. +# Any that don't must be marked with `extern', but `main' +# and `usage' are exceptions. They're always extern, but +# don't need to be marked. +sc_src_functions_have_static_scope: $(all_programs) + @t=exceptions-$$$$; \ + trap "s=$$?; rm -f $$t; exit $$s" 0 1 2 13 15; \ + ( printf '^main$$\n^usage$$\n'; \ + grep -h -A1 '^extern .*[^;]$$' $(SOURCES) \ + | grep -vE '^(extern |--)' |sed 's/^/^/;s/ .*/$$/' ) > $$t; \ + nm -e *.$(OBJEXT) \ + | sed -n 's/.* T //p' \ + | grep -Ev -f $$t && \ + { echo 'the above functions should have static scope' 1>&2; \ + exit 1; } || :