]> Savannah Git Hosting - gnulib.git/commitdiff
maint.mk: speed up require_config_h_first
authorJán Tomko <jtomko@redhat.com>
Tue, 26 Jul 2016 14:28:16 +0000 (16:28 +0200)
committerJim Meyering <meyering@fb.com>
Mon, 1 Aug 2016 14:43:25 +0000 (07:43 -0700)
Instead of spawning three processes per file,
rewrite the check in perl and run it once for all the files.
* top/maint.mk (perl_config_h_first_): Define.
(sc_require_config_h_first): Use it in place of shell code.

ChangeLog
top/maint.mk

index dda0e504ce205f8107b12b49fa16ed017dee8a3c..03dae474a3354e7e219d036bed466738900fea91 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2016-07-30  Ján Tomko  <jtomko@redhat.com>
+
+       maint.mk: speed up require_config_h_first
+       Instead of spawning three processes per file,
+       rewrite the check in perl and run it once for all the files.
+       * top/maint.mk (perl_config_h_first_): Define.
+       (sc_require_config_h_first): Use it in place of shell code.
+
 2016-07-26  Ján Tomko  <jtomko@redhat.com>
 
        maint.mk: speed up sc_po_check
index c82afbef4ef16d59ce1dd8d316ca5b7e0fdd8e3c..9ca2bd3b32544a040e89e291834bd4a440fe825d 100644 (file)
@@ -437,17 +437,26 @@ sc_require_config_h:
        halt='the above files do not include <config.h>'                \
          $(_sc_search_regexp)
 
+# Print each file name for which the first #include does not match
+# $(config_h_header).  Like grep -m 1, this only looks at the first match.
+perl_config_h_first_ =                                                 \
+  -e 'BEGIN {$$ret = 0}'                                               \
+  -e 'if (/^\# *include\b/) {'                                         \
+  -e '  if (not m{^\# *include $(config_h_header)}) {'                 \
+  -e '    print "$$ARGV\n";'                                           \
+  -e '    $$ret = 1;'                                                  \
+  -e '  }'                                                             \
+  -e '  \# Move on to next file after first include'                   \
+  -e '  close ARGV;'                                                   \
+  -e '}'                                                               \
+  -e 'END {exit $$ret}'
+
 # You must include <config.h> before including any other header file.
 # This can possibly be via a package-specific header, if given by cfg.mk.
 sc_require_config_h_first:
        @if $(VC_LIST_EXCEPT) | grep '\.c$$' > /dev/null; then          \
-         fail=0;                                                       \
-         for i in $$($(VC_LIST_EXCEPT) | grep '\.c$$'); do             \
-           grep '^# *include\>' $$i | $(SED) 1q                        \
-               | grep -E '^# *include $(config_h_header)' > /dev/null  \
-             || { echo $$i; fail=1; };                                 \
-         done;                                                         \
-         test $$fail = 1 &&                                            \
+         files=$$($(VC_LIST_EXCEPT) | grep '\.c$$') &&                 \
+         perl -n $(perl_config_h_first_) $$files ||                    \
            { echo '$(ME): the above files include some other header'   \
                'before <config.h>' 1>&2; exit 1; } || :;               \
        else :;                                                         \