From: Akim Demaille Date: Thu, 17 Oct 2002 10:34:09 +0000 (+0000) Subject: * lib/autoconf/general.m4 (AC_CACHE_SAVE): Don't use cmp. X-Git-Tag: AUTOCONF-2.54a~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a73415cbc4a70422e3061458c7bd044ee3561dc5;p=thirdparty%2Fautoconf.git * lib/autoconf/general.m4 (AC_CACHE_SAVE): Don't use cmp. Fixes the `AC_ARG_VAR' test failures. * lib/autoconf/status.m4 (_AC_OUTPUT_FILES): Don't use cmp. * lib/freeze.mk (check-forbidden-patterns): New. * lib/autoconf/Makefile.am, lib/autotest/Makefile.am * lib/m4sugar/Makefile.am (check-local): Use it to catch `cmp'. * doc/autoconf.texi (Limitations of Usual Tools): HP-UX' cmp and /dev/null. Reported months ago by H. Merijn Brand. --- diff --git a/ChangeLog b/ChangeLog index 5c661f167..6007a8733 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2002-10-17 Akim Demaille + + * lib/autoconf/general.m4 (AC_CACHE_SAVE): Don't use cmp. + Fixes the `AC_ARG_VAR' test failures. + * lib/autoconf/status.m4 (_AC_OUTPUT_FILES): Don't use cmp. + * lib/freeze.mk (check-forbidden-patterns): New. + * lib/autoconf/Makefile.am, lib/autotest/Makefile.am + * lib/m4sugar/Makefile.am (check-local): Use it to catch `cmp'. + * doc/autoconf.texi (Limitations of Usual Tools): HP-UX' cmp and + /dev/null. + Reported months ago by H. Merijn Brand. + 2002-10-17 Akim Demaille * tests/tools.at (autoheader): Put randoms `@' to stress Perl. diff --git a/NEWS b/NEWS index 6eb43217d..df37b42a1 100644 --- a/NEWS +++ b/NEWS @@ -26,6 +26,10 @@ - Portability of the Autoconf package to Solaris. +- Cache files and HP-UX + Because of HP-UX' cmp, cache files probably never worked properly. + Autoconf no longer uses cmp at all. + - Spurious warnings caused by config.status. This bug is benign, but painful: on some systems (typically FreeBSD), warnings such as: diff --git a/THANKS b/THANKS index 97d4ad18d..ec878fbd0 100644 --- a/THANKS +++ b/THANKS @@ -75,6 +75,7 @@ Guillermo Gomez gomez@mi.uni-erlangen.de Hans Olsson Hans.Olsson@dna.lth.se Harlan Stenn stenn@whimsy.udel.edu H.J. Lu hjl@gnu.org +H. Merijn Brand h.m.brand@hccnet.nl Ian Lance Taylor ian@cygnus.com James A. Lupo lupoja@feynman.ml.wpafb.af.mil Jason Molenda jsm@cygnus.com diff --git a/doc/autoconf.texi b/doc/autoconf.texi index a57c41f10..d63aa75d3 100644 --- a/doc/autoconf.texi +++ b/doc/autoconf.texi @@ -9860,6 +9860,17 @@ DOS files, even if only checking whether two files are different, use @command{diff} to avoid spurious differences due to differences of newline encoding. +Under HP-UX 11, @command{cmp} is unable to process @file{/dev/null}, and +even exits with success: + +@example +$ @kbd{cmp /dev/null configure} +@error{}Premature end of file /dev/null at -1 +$ @kbd{echo $?} +0 +@end example + +For all these reasons, it seems safer to always use @command{diff}. @item @command{cp} @c --------------- diff --git a/lib/autoconf/Makefile.am b/lib/autoconf/Makefile.am index 9d2c36da4..c1d74caed 100644 --- a/lib/autoconf/Makefile.am +++ b/lib/autoconf/Makefile.am @@ -42,16 +42,9 @@ ETAGS_ARGS = $(ETAGS_FOR_AUTOCONF) ## Checks. ## ## -------- ## -check-local: - if (cd $(srcdir) && \ - grep '^_*EOF' $(dist_autoconflib_DATA)) >eof.log; then \ - echo "ERROR: user EOF tags were used:" >&2; \ - sed "s,^,$*.m4: ," &2; \ - echo >&2; \ - exit 1; \ - else \ - rm -f eof.log; \ - fi +check-local: check-forbidden-patterns +forbidden_patterns = -e '^_*EOF' -e ' cmp ' +forbidden_patterns_files = $(dist_autoconflib_DATA) ## ------------------ ## diff --git a/lib/autoconf/Makefile.in b/lib/autoconf/Makefile.in index e639ac1fa..d2c72ee21 100644 --- a/lib/autoconf/Makefile.in +++ b/lib/autoconf/Makefile.in @@ -106,6 +106,8 @@ CLEANFILES = $(nodist_autoconflib_DATA) TAGS_FILES = $(dist_autoconflib_DATA) ETAGS_ARGS = $(ETAGS_FOR_AUTOCONF) +forbidden_patterns = -e '^_*EOF' -e ' cmp ' +forbidden_patterns_files = $(dist_autoconflib_DATA) SUFFIXES = .m4 .m4f @@ -292,11 +294,13 @@ top_distdir = ../.. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) - $(mkinstalldirs) $(distdir)/$(srcdir)/.. + $(mkinstalldirs) $(distdir)/./.. @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ @@ -409,16 +413,7 @@ uninstall-am: uninstall-dist_autoconflibDATA uninstall-info-am \ uninstall-nodist_autoconflibDATA -check-local: - if (cd $(srcdir) && \ - grep '^_*EOF' $(dist_autoconflib_DATA)) >eof.log; then \ - echo "ERROR: user EOF tags were used:" >&2; \ - sed "s,^,$*.m4: ," &2; \ - echo >&2; \ - exit 1; \ - else \ - rm -f eof.log; \ - fi +check-local: check-forbidden-patterns autoconf.m4f: $(autoconf_m4f_dependencies) $(MY_AUTOM4TE): @@ -441,6 +436,18 @@ $(AUTOM4TE_CFG): # For parallel builds. $(build_libdir)/m4sugar/version.m4: cd $(build_libdir)/m4sugar && $(MAKE) $(AM_MAKEFLAGS) version.m4 + +check-forbidden-patterns: + if (cd $(srcdir) && \ + grep $(forbidden_patterns) $(forbidden_patterns_files)) \ + >forbidden.log; then \ + echo "ERROR: forbidden patterns were found:" >&2; \ + sed "s,^,$*.m4: ," &2; \ + echo >&2; \ + exit 1; \ + else \ + rm -f forbidden.log; \ + fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/lib/autoconf/general.m4 b/lib/autoconf/general.m4 index 005ade105..cdbb85c14 100644 --- a/lib/autoconf/general.m4 +++ b/lib/autoconf/general.m4 @@ -1771,7 +1771,7 @@ _AC_CACHE_DUMP() | t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end'] >>confcache -if cmp -s $cache_file confcache; then :; else +if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file diff --git a/lib/autoconf/status.m4 b/lib/autoconf/status.m4 index 61d97b53a..bf322339a 100644 --- a/lib/autoconf/status.m4 +++ b/lib/autoconf/status.m4 @@ -649,7 +649,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then - if cmp -s $ac_file $tmp/config.h 2>/dev/null; then + if diff $ac_file $tmp/config.h >/dev/null 2>&1; then AC_MSG_NOTICE([$ac_file is unchanged]) else ac_dir=`AS_DIRNAME(["$ac_file"])` @@ -1019,7 +1019,7 @@ dnl The parens around the eval prevent an "illegal io" in Ultrix sh. " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin dnl This would break Makefile dependencies. -dnl if cmp -s $ac_file $tmp/out 2>/dev/null; then +dnl if diff $ac_file $tmp/out >/dev/null 2>&1; then dnl echo "$ac_file is unchanged" dnl else dnl rm -f $ac_file diff --git a/lib/autoscan/Makefile.in b/lib/autoscan/Makefile.in index aaeeea84a..89839dc9f 100644 --- a/lib/autoscan/Makefile.in +++ b/lib/autoscan/Makefile.in @@ -214,11 +214,13 @@ top_distdir = ../.. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) - $(mkinstalldirs) $(distdir)/$(srcdir)/.. + $(mkinstalldirs) $(distdir)/./.. @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ @@ -345,6 +347,18 @@ $(AUTOM4TE_CFG): $(build_libdir)/m4sugar/version.m4: cd $(build_libdir)/m4sugar && $(MAKE) $(AM_MAKEFLAGS) version.m4 +check-forbidden-patterns: + if (cd $(srcdir) && \ + grep $(forbidden_patterns) $(forbidden_patterns_files)) \ + >forbidden.log; then \ + echo "ERROR: forbidden patterns were found:" >&2; \ + sed "s,^,$*.m4: ," &2; \ + echo >&2; \ + exit 1; \ + else \ + rm -f forbidden.log; \ + fi + autoscan.list: $(srcdir)/autoscan.pre $(autoconf_m4f_dependencies) Makefile.am echo '# Automatically Generated: do not edit this file' > autoscan.list sed '/^[#]/!q' $(srcdir)/autoscan.pre >>autoscan.list diff --git a/lib/autotest/Makefile.am b/lib/autotest/Makefile.am index 369c4456a..de3203a76 100644 --- a/lib/autotest/Makefile.am +++ b/lib/autotest/Makefile.am @@ -35,16 +35,9 @@ ETAGS_ARGS = $(ETAGS_FOR_AUTOCONF) ## Checks. ## ## -------- ## -check-local: - if (cd $(srcdir) && \ - grep '^_*EOF' $(dist_autotestlib_DATA)) >eof.log; then \ - echo "ERROR: user EOF tags were used:" >&2; \ - sed "s,^,$*.m4: ," &2; \ - echo >&2; \ - exit 1; \ - else \ - rm -f eof.log; \ - fi +check-local: check-forbidden-patterns +forbidden_patterns = -e '^_*EOF' -e ' cmp ' +forbidden_patterns_files = $(dist_autotestlib_DATA) ## ------------------ ## diff --git a/lib/autotest/Makefile.in b/lib/autotest/Makefile.in index de87bd907..2d5929fc9 100644 --- a/lib/autotest/Makefile.in +++ b/lib/autotest/Makefile.in @@ -99,6 +99,8 @@ CLEANFILES = $(nodist_autotestlib_DATA) TAGS_FILES = $(dist_autotestlib_DATA) ETAGS_ARGS = $(ETAGS_FOR_AUTOCONF) +forbidden_patterns = -e '^_*EOF' -e ' cmp ' +forbidden_patterns_files = $(dist_autotestlib_DATA) SUFFIXES = .m4 .m4f @@ -285,11 +287,13 @@ top_distdir = ../.. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) - $(mkinstalldirs) $(distdir)/$(srcdir)/.. + $(mkinstalldirs) $(distdir)/./.. @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ @@ -402,16 +406,7 @@ uninstall-am: uninstall-dist_autotestlibDATA uninstall-info-am \ uninstall-nodist_autotestlibDATA -check-local: - if (cd $(srcdir) && \ - grep '^_*EOF' $(dist_autotestlib_DATA)) >eof.log; then \ - echo "ERROR: user EOF tags were used:" >&2; \ - sed "s,^,$*.m4: ," &2; \ - echo >&2; \ - exit 1; \ - else \ - rm -f eof.log; \ - fi +check-local: check-forbidden-patterns autotest.m4f: $(autotest_m4f_dependencies) $(MY_AUTOM4TE): @@ -434,6 +429,18 @@ $(AUTOM4TE_CFG): # For parallel builds. $(build_libdir)/m4sugar/version.m4: cd $(build_libdir)/m4sugar && $(MAKE) $(AM_MAKEFLAGS) version.m4 + +check-forbidden-patterns: + if (cd $(srcdir) && \ + grep $(forbidden_patterns) $(forbidden_patterns_files)) \ + >forbidden.log; then \ + echo "ERROR: forbidden patterns were found:" >&2; \ + sed "s,^,$*.m4: ," &2; \ + echo >&2; \ + exit 1; \ + else \ + rm -f forbidden.log; \ + fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/lib/freeze.mk b/lib/freeze.mk index 8b66e2125..ec765d2b1 100644 --- a/lib/freeze.mk +++ b/lib/freeze.mk @@ -111,3 +111,20 @@ ETAGS_FOR_AUTOCONF = \ $(ETAGS_FOR_M4SUGAR) \ --regex='/\(A[CU]_DEFUN\|AU_ALIAS\)(\[\([^]]*\)\]/\2/' \ --regex='/AN_\(FUNCTION\|HEADER\|IDENTIFIER\|LIBRARY\|MAKEVAR\|PROGRAM\)(\[\([^]]*\)\]/\2/' + + +## -------------------------------- ## +## Looking for forbidden patterns. ## +## -------------------------------- ## + +check-forbidden-patterns: + if (cd $(srcdir) && \ + grep $(forbidden_patterns) $(forbidden_patterns_files)) \ + >forbidden.log; then \ + echo "ERROR: forbidden patterns were found:" >&2; \ + sed "s,^,$*.m4: ," &2; \ + echo >&2; \ + exit 1; \ + else \ + rm -f forbidden.log; \ + fi diff --git a/lib/m4sugar/Makefile.am b/lib/m4sugar/Makefile.am index 50481e7c1..caf3c1e68 100644 --- a/lib/m4sugar/Makefile.am +++ b/lib/m4sugar/Makefile.am @@ -54,16 +54,10 @@ ETAGS_ARGS = $(ETAGS_FOR_AUTOCONF) ## Checks. ## ## -------- ## -check-local: - if (cd $(srcdir) && \ - grep '^_*EOF' $(dist_m4sugarlib_DATA)) >eof.log; then \ - echo "ERROR: user EOF tags were used:" >&2; \ - sed "s,^,$*.m4: ," &2; \ - echo >&2; \ - exit 1; \ - else \ - rm -f eof.log; \ - fi +check-local: check-forbidden-patterns +forbidden_patterns = -e '^_*EOF' -e ' cmp ' +forbidden_patterns_files = $(dist_m4sugarlib_DATA) + ## ------------------ ## diff --git a/lib/m4sugar/Makefile.in b/lib/m4sugar/Makefile.in index a5ef655e4..059e572f7 100644 --- a/lib/m4sugar/Makefile.in +++ b/lib/m4sugar/Makefile.in @@ -99,6 +99,8 @@ CLEANFILES = $(nodist_m4sugarlib_DATA) TAGS_FILES = $(dist_m4sugarlib_DATA) ETAGS_ARGS = $(ETAGS_FOR_AUTOCONF) +forbidden_patterns = -e '^_*EOF' -e ' cmp ' +forbidden_patterns_files = $(dist_m4sugarlib_DATA) SUFFIXES = .m4 .m4f @@ -285,11 +287,13 @@ top_distdir = ../.. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) - $(mkinstalldirs) $(distdir)/$(srcdir)/.. + $(mkinstalldirs) $(distdir)/./.. @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ @@ -416,16 +420,7 @@ version.m4: $(top_srcdir)/configure.ac echo 'm4_define([m4_PACKAGE_BUGREPORT], [@PACKAGE_BUGREPORT@])'; \ } >version.m4 -check-local: - if (cd $(srcdir) && \ - grep '^_*EOF' $(dist_m4sugarlib_DATA)) >eof.log; then \ - echo "ERROR: user EOF tags were used:" >&2; \ - sed "s,^,$*.m4: ," &2; \ - echo >&2; \ - exit 1; \ - else \ - rm -f eof.log; \ - fi +check-local: check-forbidden-patterns m4sugar.m4f: $(m4sugar_m4f_dependencies) m4sh.m4f: $(m4sh_m4f_dependencies) @@ -449,6 +444,18 @@ $(AUTOM4TE_CFG): # For parallel builds. $(build_libdir)/m4sugar/version.m4: cd $(build_libdir)/m4sugar && $(MAKE) $(AM_MAKEFLAGS) version.m4 + +check-forbidden-patterns: + if (cd $(srcdir) && \ + grep $(forbidden_patterns) $(forbidden_patterns_files)) \ + >forbidden.log; then \ + echo "ERROR: forbidden patterns were found:" >&2; \ + sed "s,^,$*.m4: ," &2; \ + echo >&2; \ + exit 1; \ + else \ + rm -f forbidden.log; \ + fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/tests/Makefile.in b/tests/Makefile.in index e2713303f..ca1e3642e 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -267,11 +267,13 @@ top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) - $(mkinstalldirs) $(distdir)/$(srcdir)/../lib + $(mkinstalldirs) $(distdir)/./../lib @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ @@ -401,6 +403,18 @@ $(AUTOM4TE_CFG): $(build_libdir)/m4sugar/version.m4: cd $(build_libdir)/m4sugar && $(MAKE) $(AM_MAKEFLAGS) version.m4 +check-forbidden-patterns: + if (cd $(srcdir) && \ + grep $(forbidden_patterns) $(forbidden_patterns_files)) \ + >forbidden.log; then \ + echo "ERROR: forbidden patterns were found:" >&2; \ + sed "s,^,$*.m4: ," &2; \ + echo >&2; \ + exit 1; \ + else \ + rm -f forbidden.log; \ + fi + # Import the dependencies on Autotest and M4sh. $(srcdir)/package.m4: $(top_srcdir)/configure.ac