]> git.saurik.com Git - bison.git/blobdiff - Makefile.maint
* build-aux/Makefile.am: Ship cross-options.pl.
[bison.git] / Makefile.maint
index a43a6c738eaf43b15d396ed8cc3fae81e6be5ded..f20e2dd831ca93b6fc66bc980288f5807050b32a 100644 (file)
@@ -3,21 +3,19 @@
 # CPPI, Bison, and Autoconf.
 
 ## Copyright (C) 2001-2006 Free Software Foundation, Inc.
 # CPPI, Bison, and Autoconf.
 
 ## Copyright (C) 2001-2006 Free Software Foundation, Inc.
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2, or (at your option)
-## any later version.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, write to the Free Software
-## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-## 02110-1301, USA.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # This is reported not to work with make-3.79.1
 # ME := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
 
 # This is reported not to work with make-3.79.1
 # ME := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
@@ -25,12 +23,9 @@ ME := Makefile.maint
 
 # Do not save the original name or timestamp in the .tar.gz file.
 # Use --rsyncable if available.
 
 # Do not save the original name or timestamp in the .tar.gz file.
 # Use --rsyncable if available.
-GZIP_ENV = \
-  "--no-name --best$$( \
-    case $$(gzip --help) in \
-    (*--rsyncable*) echo ' --rsyncable';; \
-    esac \
-  )"
+gzip_rsyncable = \
+  (gzip --help|grep rsyncable) >/dev/null 2>&1 && echo --rsyncable
+GZIP_ENV = "--no-name --best `$(gzip_rsyncable)`"
 
 CVS = cvs
 
 
 CVS = cvs
 
@@ -87,7 +82,8 @@ export LC_ALL = C
 # new ChangeLog entries.
 local-checks-available = \
   po-check copyright-check writable-files m4-check author_mark_check \
 # new ChangeLog entries.
 local-checks-available = \
   po-check copyright-check writable-files m4-check author_mark_check \
-  changelog-check strftime-check syntax-check makefile_path_separator_check \
+  changelog-check strftime-check $(syntax-check-rules) \
+  makefile_path_separator_check \
   makefile-check
 .PHONY: $(local-checks-available)
 
   makefile-check
 .PHONY: $(local-checks-available)
 
@@ -113,7 +109,8 @@ syntax-check-rules = \
   sc_sun_os_names \
   sc_system_h_headers \
   sc_tight_scope \
   sc_sun_os_names \
   sc_system_h_headers \
   sc_tight_scope \
-  sc_trailing_space \
+  sc_trailing_blank \
+  sc_two_space_separator_in_usage \
   sc_unmarked_diagnostics \
   sc_useless_cpp_parens
 
   sc_unmarked_diagnostics \
   sc_useless_cpp_parens
 
@@ -156,7 +153,7 @@ sc_space_tab:
 # They provide no error checking mechanism.
 # Instead, use strto* functions.
 sc_prohibit_atoi_atof:
 # They provide no error checking mechanism.
 # Instead, use strto* functions.
 sc_prohibit_atoi_atof:
-       @grep -nE '\<(ato[filq]|ato''ll)\>' $$($(CVS_LIST_EXCEPT)) &&   \
+       @grep -nE '\<ato([filq]|ll)\>' $$($(CVS_LIST_EXCEPT)) &&        \
          { echo '$(ME): do not use ato''f, ato''i, ato''l, ato''ll, or ato''q' \
                1>&2; exit 1; } || :
 
          { echo '$(ME): do not use ato''f, ato''i, ato''l, ato''ll, or ato''q' \
                1>&2; exit 1; } || :
 
@@ -174,10 +171,32 @@ sc_file_system:
            'rewrite to use "file system"' 1>&2;                        \
            exit 1; } || :
 
            'rewrite to use "file system"' 1>&2;                        \
            exit 1; } || :
 
+sc_no_if_have_config_h:
+       @grep -n '^# *if HAVE_CONFIG_H' $$($(CVS_LIST_EXCEPT)) &&       \
+         { echo '$(ME): found use of #if HAVE_CONFIG_H; use #ifdef'    \
+               1>&2; exit 1; } || :
+
+# Nearly all .c files must include <config.h>.
+sc_require_config_h:
+       @grep -L '^# *include <config\.h>'                              \
+               $$($(CVS_LIST_EXCEPT) | grep '\.c$$')                   \
+           | grep . &&                                                 \
+         { echo '$(ME): the above files do not include <config.h>'     \
+               1>&2; exit 1; } || :
+
+# Prohibit the inclusion of assert.h without an actual use of assert.
+sc_prohibit_assert_without_use:
+       @files=$$(grep -l '# *include <assert\.h>'                      \
+                   $$($(CVS_LIST_EXCEPT) | grep '\.c$$')) &&           \
+       grep -L '\<assert (' $$files                                    \
+           | grep . &&                                                 \
+         { echo "$(ME): the above files include <assert.h> but don't use it" \
+               1>&2; exit 1; } || :
+
 sc_obsolete_symbols:
 sc_obsolete_symbols:
-       @grep -nE '\<(\<(HAVE_FCNTL_H|O_NDELAY)\>'                      \
+       @grep -nE '\<(HAVE''_FCNTL_H|O''_NDELAY)\>'                     \
             $$($(CVS_LIST_EXCEPT)) &&                                  \
             $$($(CVS_LIST_EXCEPT)) &&                                  \
-         { echo '$(ME): do not use HAVE_FCNTL_H or O_NDELAY'           \
+         { echo '$(ME): do not use HAVE''_FCNTL_H or O''_NDELAY'       \
                1>&2; exit 1; } || :
 
 # FIXME: warn about definitions of EXIT_FAILURE, EXIT_SUCCESS, STREQ
                1>&2; exit 1; } || :
 
 # FIXME: warn about definitions of EXIT_FAILURE, EXIT_SUCCESS, STREQ
@@ -193,11 +212,10 @@ sc_changelog:
 dd_c = $(srcdir)/src/dd.c
 sc_dd_max_sym_length:
 ifneq ($(wildcard $(dd_c)),)
 dd_c = $(srcdir)/src/dd.c
 sc_dd_max_sym_length:
 ifneq ($(wildcard $(dd_c)),)
-       @test -f $(dd_c) || exit 0;                             \
-       len=$$( (sed -n '/conversions\[\] =$$/,/^};/p' $(dd_c); \
+       @len=$$( (sed -n '/conversions\[\] =$$/,/^};/p' $(dd_c);\
                 sed -n '/flags\[\] =$$/,/^};/p' $(dd_c) )      \
                |sed -n '/"/s/^[^"]*"\([^"]*\)".*/\1/p'         \
                 sed -n '/flags\[\] =$$/,/^};/p' $(dd_c) )      \
                |sed -n '/"/s/^[^"]*"\([^"]*\)".*/\1/p'         \
-              | wc --max-line-length);                         \
+             | wc --max-line-length);                          \
        max=$$(sed -n '/^#define LONGEST_SYMBOL /s///p' $(dd_c) \
              |tr -d '"' | wc --max-line-length);               \
        if test "$$len" = "$$max"; then :; else                 \
        max=$$(sed -n '/^#define LONGEST_SYMBOL /s///p' $(dd_c) \
              |tr -d '"' | wc --max-line-length);               \
        if test "$$len" = "$$max"; then :; else                 \
@@ -239,7 +257,7 @@ sc_root_tests:
 # Files in src/ should not include directly any of
 # the headers already included via system.h.
 sc_system_h_headers: .re-list
 # Files in src/ should not include directly any of
 # the headers already included via system.h.
 sc_system_h_headers: .re-list
-       if test -f $(srcdir)/src/system.h; then                 \
+       @if test -f $(srcdir)/src/system.h; then                        \
          trap 'rc=$$?; rm -f .re-list; exit $$rc' 0 1 2 3 15;          \
          grep -nE -f .re-list                                          \
              $$($(CVS_LIST) src |                                      \
          trap 'rc=$$?; rm -f .re-list; exit $$rc' 0 1 2 3 15;          \
          grep -nE -f .re-list                                          \
              $$($(CVS_LIST) src |                                      \
@@ -258,9 +276,16 @@ sc_sun_os_names:
 sc_tight_scope:
        $(MAKE) -C src $@
 
 sc_tight_scope:
        $(MAKE) -C src $@
 
-sc_trailing_space:
+sc_trailing_blank:
        @grep -n '[      ]$$' $$($(CVS_LIST_EXCEPT)) &&                 \
        @grep -n '[      ]$$' $$($(CVS_LIST_EXCEPT)) &&                 \
-         { echo '$(ME): found trailing space(s)'                       \
+         { echo '$(ME): found trailing blank(s)'                       \
+               1>&2; exit 1; } || :
+
+sc_two_space_separator_in_usage:
+       @grep -n '^   *--[a-z][0-9A-Za-z-]* [^ ].*\\$$'                 \
+           $$($(CVS_LIST_EXCEPT)) &&                                   \
+         { echo "$(ME): help2man requires at least two spaces between"; \
+           echo "$(ME): an option and its description"; \
                1>&2; exit 1; } || :
 
 # Look for diagnostics that aren't marked for translation.
                1>&2; exit 1; } || :
 
 # Look for diagnostics that aren't marked for translation.
@@ -268,14 +293,14 @@ sc_trailing_space:
 sc_unmarked_diagnostics:
        @grep -nE                                                       \
            '\<error \([^"]*"[^"]*[a-z]{3}' $$($(CVS_LIST_EXCEPT))      \
 sc_unmarked_diagnostics:
        @grep -nE                                                       \
            '\<error \([^"]*"[^"]*[a-z]{3}' $$($(CVS_LIST_EXCEPT))      \
-         | grep -v '_(' &&                                             \
+         | grep -v '_''(' &&                                           \
          { echo '$(ME): found unmarked diagnostic(s)' 1>&2;            \
            exit 1; } || :
 
 # Avoid useless parentheses like those in this example:
 # #if defined (SYMBOL) || defined (SYM2)
 sc_useless_cpp_parens:
          { echo '$(ME): found unmarked diagnostic(s)' 1>&2;            \
            exit 1; } || :
 
 # Avoid useless parentheses like those in this example:
 # #if defined (SYMBOL) || defined (SYM2)
 sc_useless_cpp_parens:
-       @grep '^# *if .*defined *(' $$($(CVS_LIST_EXCEPT)) &&           \
+       @grep -n '^# *if .*defined *(' $$($(CVS_LIST_EXCEPT)) &&        \
          { echo '$(ME): found useless parentheses in cpp directive'    \
                1>&2; exit 1; } || :
 
          { echo '$(ME): found useless parentheses in cpp directive'    \
                1>&2; exit 1; } || :
 
@@ -312,7 +337,7 @@ news-date-check: NEWS
        fi
 
 changelog-check:
        fi
 
 changelog-check:
-       if grep 'Version $(VERSION_REGEXP)\.$$' ChangeLog \
+       if head ChangeLog | grep 'Version $(VERSION_REGEXP)\.$$' \
            >/dev/null; then \
          :; \
        else \
            >/dev/null; then \
          :; \
        else \
@@ -321,18 +346,21 @@ changelog-check:
        fi
 
 m4-check:
        fi
 
 m4-check:
-       @grep 'AC_DEFUN([^[]' m4/*.m4 \
+       @grep -n 'AC_DEFUN([^[]' m4/*.m4 \
          && { echo 'Makefile.maint: quote the first arg to AC_DEFUN' 1>&2; \
               exit 1; } || :
 
 # Verify that all source files using _() are listed in po/POTFILES.in.
          && { echo 'Makefile.maint: quote the first arg to AC_DEFUN' 1>&2; \
               exit 1; } || :
 
 # Verify that all source files using _() are listed in po/POTFILES.in.
-# FIXME: don't hard-code src/false.c below; use a more general mechanism.
+# FIXME: don't hard-code file names below; use a more general mechanism.
 po-check:
        if test -f po/POTFILES.in; then                                 \
          grep -E -v '^(#|$$)' po/POTFILES.in                           \
            | grep -v '^src/false\.c$$' | sort > $@-1;                  \
          files=;                                                       \
 po-check:
        if test -f po/POTFILES.in; then                                 \
          grep -E -v '^(#|$$)' po/POTFILES.in                           \
            | grep -v '^src/false\.c$$' | sort > $@-1;                  \
          files=;                                                       \
-         for file in lib/*.[chly] src/*.[chly]; do \
+         for file in $$($(CVS_LIST_EXCEPT)) lib/*.[ch]; do             \
+           case $$file in                                              \
+           djgpp/* | man/*) continue;;                                 \
+           esac;                                                       \
            case $$file in                                              \
            *.[ch])                                                     \
              base=`expr " $$file" : ' \(.*\)\..'`;                     \
            case $$file in                                              \
            *.[ch])                                                     \
              base=`expr " $$file" : ' \(.*\)\..'`;                     \
@@ -340,7 +368,7 @@ po-check:
            esac;                                                       \
            files="$$files $$file";                                     \
          done;                                                         \
            esac;                                                       \
            files="$$files $$file";                                     \
          done;                                                         \
-         grep -E -l '\bN?_\([^)"]*("|$$)' $$files | sort > $@-2;       \
+         grep -E -l '\bN?_\([^)"]*("|$$)' $$files | sort -u > $@-2;    \
          diff -u $@-1 $@-2 || exit 1;                                  \
          rm -f $@-1 $@-2;                                              \
        fi
          diff -u $@-1 $@-2 || exit 1;                                  \
          rm -f $@-1 $@-2;                                              \
        fi
@@ -460,16 +488,6 @@ my-distcheck: $(local-check) $(release_archive_dir)/$(prev-tgz)
 WGET = wget
 WGETFLAGS = -C off
 
 WGET = wget
 WGETFLAGS = -C off
 
-tgz-md5 = $(shell md5sum < $(my_distdir).tar.gz|sed 's/  -//')
-tgz-sha1 = $(shell sha1sum < $(my_distdir).tar.gz|sed 's/  -//')
-bz2-md5 = $(shell md5sum < $(my_distdir).tar.bz2|sed 's/  -//')
-bz2-sha1 = $(shell sha1sum < $(my_distdir).tar.bz2|sed 's/  -//')
-xdelta-md5 = $(shell md5sum < $(xd-delta)|sed 's/  -//')
-xdelta-sha1 = $(shell sha1sum < $(xd-delta)|sed 's/  -//')
-tgz-size = $(shell du --human $(my_distdir).tar.gz|sed 's/\([MkK]\).*/ \1B/')
-bz2-size = $(shell du --human $(my_distdir).tar.bz2|sed 's/\([MkK]\).*/ \1B/')
-xd-size = $(shell du --human $(xd-delta)|sed 's/\([MkK]\).*/ \1B/')
-
 rel-check:
        tarz=/tmp/rel-check-tarz-$$$$; \
        md5_tmp=/tmp/rel-check-md5-$$$$; \
 rel-check:
        tarz=/tmp/rel-check-tarz-$$$$; \
        md5_tmp=/tmp/rel-check-md5-$$$$; \