Please ignore the previous patch, and consider the attached, slighty amended patch instead.
Sorry for the noise. Regards, Stefano
From b8544b4340ddbca55857aef6db74f0ae520ef276 Mon Sep 17 00:00:00 2001 From: Stefano Lattarini <stefano.lattar...@gmail.com> Date: Thu, 12 Aug 2010 18:57:25 +0200 Subject: [PATCH] Improve support for non-default autotools in rebuild rules. * lib/am/configure.am: Bumped serial number: 16 -> 17. (%MAKEFILE-IN%): When appropriate, export AUTOCONF and AUTOM4TE to proper values when calling $(AUTOMAKE). (%MAKEFILE-IN%) [%?TOPDIR_P%]: Likewise. ($(ACLOCAL_M4)) [!%?TOPDIR_P%]: Likewise (but when calling $(ACLOCAL). * m4/init.m4 (AM_INIT_AUTOMAKE): New AC_SUBSTitution `AUTOM4TE', an autom4te program wrapped with the `missing' script. Also, AC_SUBST `am__nomissing_AUTOCONF' and `am__nomissing_AUTOM4TE', respectively to overridden `autoconf' and `autom4te' programs, *not* wrapped by the `missing' script. * configure.ac (am_AUTOM4TE): New AC_SUBST'd variable. * tests/defs.in ($AUTOM4TE): New shell variable, defaulting to AC_SUBST'd `...@am_autom4te@'. ($APIVERSION): New variable, AC_SUBST'd. ($ACLOCAL, $AUTOMAKE): Use it. * tests/remake8a.test: New test. * tests/remake8b.test: Likewise. * tests/remake8c.test: Likewise. * tests/remake8d.test: Likewise. * tests/remake8e.test: Likewise. * tests/remake8f.test: Likewise. * tests/remake8g.test: Likewise. * tests/remake8h.test: Likewise. * tests/Makefile.am (TESTS): Updated. --- ChangeLog | 29 +++++++ Makefile.in | 40 ++++++++- configure | 13 +++ configure.ac | 1 + doc/Makefile.in | 15 +++- lib/Automake/Makefile.in | 15 +++- lib/Automake/tests/Makefile.in | 15 +++- lib/Makefile.in | 15 +++- lib/am/Makefile.in | 15 +++- lib/am/configure.am | 45 ++++++++++- m4/Makefile.in | 15 +++- m4/init.m4 | 14 +++- tests/Makefile.am | 7 ++ tests/Makefile.in | 22 +++++- tests/defs.in | 7 +- tests/remake8a.test | 94 ++++++++++++++++++++++ tests/remake8b.test | 99 +++++++++++++++++++++++ tests/remake8c.test | 111 ++++++++++++++++++++++++++ tests/remake8d.test | 172 ++++++++++++++++++++++++++++++++++++++++ tests/remake8e.test | 170 +++++++++++++++++++++++++++++++++++++++ tests/remake8f.test | 119 +++++++++++++++++++++++++++ tests/remake8g.test | 140 ++++++++++++++++++++++++++++++++ 22 files changed, 1155 insertions(+), 18 deletions(-) create mode 100755 tests/remake8a.test create mode 100755 tests/remake8b.test create mode 100755 tests/remake8c.test create mode 100755 tests/remake8d.test create mode 100755 tests/remake8e.test create mode 100755 tests/remake8f.test create mode 100755 tests/remake8g.test diff --git a/ChangeLog b/ChangeLog index 5453722..62ed0c1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,32 @@ +2010-08-14 Stefano Lattarini <stefano.lattar...@gmail.com> + + Improve support for non-default autotools in rebuild rules. + * lib/am/configure.am: Bumped serial number: 16 -> 17. + (%MAKEFILE-IN%): When appropriate, export AUTOCONF and AUTOM4TE + to proper values when calling $(AUTOMAKE). + (%MAKEFILE-IN%) [%?TOPDIR_P%]: Likewise. + ($(ACLOCAL_M4)) [!%?TOPDIR_P%]: Likewise (but when calling + $(ACLOCAL). + * m4/init.m4 (AM_INIT_AUTOMAKE): New AC_SUBSTitution `AUTOM4TE', + an autom4te program wrapped with the `missing' script. Also, + AC_SUBST `am__nomissing_AUTOCONF' and `am__nomissing_AUTOM4TE', + respectively to overridden `autoconf' and `autom4te' programs, + *not* wrapped by the `missing' script. + * configure.ac (am_AUTOM4TE): New AC_SUBST'd variable. + * tests/defs.in ($AUTOM4TE): New shell variable, defaulting + to AC_SUBST'd `...@am_autom4te@'. + ($APIVERSION): New variable, AC_SUBST'd. + ($ACLOCAL, $AUTOMAKE): Use it. + * tests/remake8a.test: New test. + * tests/remake8b.test: Likewise. + * tests/remake8c.test: Likewise. + * tests/remake8d.test: Likewise. + * tests/remake8e.test: Likewise. + * tests/remake8f.test: Likewise. + * tests/remake8g.test: Likewise. + * tests/remake8h.test: Likewise. + * tests/Makefile.am (TESTS): Updated. + 2010-08-10 Stefano Lattarini <stefano.lattar...@gmail.com> Tweak and/or extend some `acloca*.test' tests. diff --git a/Makefile.in b/Makefile.in index 528b80e..56672ce 100644 --- a/Makefile.in +++ b/Makefile.in @@ -150,6 +150,7 @@ AMTAR = @AMTAR@ APIVERSION = @APIVERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ +AUTOM4TE = @AUTOM4TE@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ @@ -194,7 +195,10 @@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am_AUTOCONF = @am_AUTOCONF@ am_AUTOHEADER = @am_AUTOHEADER@ +am_AUTOM4TE = @am_AUTOM4TE@ am__leading_dot = @am__leading_dot@ +am__nomissing_AUTOCONF = @am__nomissing_AUTOCONF@ +am__nomissing_AUTOM4TE = @am__nomissing_AUTOM4TE@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ @@ -328,14 +332,32 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ - && exit 0; \ + $(am__cd) $(srcdir) && \ + ( if test -n '$(am__nomissing_AUTOCONF)'; then \ + AUTOCONF='$(am__nomissing_AUTOCONF)'; \ + export AUTOCONF; \ + fi; \ + if test -n '$(am__nomissing_AUTOM4TE)'; then \ + AUTOM4TE='$(am__nomissing_AUTOM4TE)'; \ + export AUTOM4TE; \ + fi; \ + $(AUTOMAKE) --gnu; \ + ) && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu Makefile + ( if test -n '$(am__nomissing_AUTOCONF)'; then \ + AUTOCONF='$(am__nomissing_AUTOCONF)'; \ + export AUTOCONF; \ + fi; \ + if test -n '$(am__nomissing_AUTOM4TE)'; then \ + AUTOM4TE='$(am__nomissing_AUTOM4TE)'; \ + export AUTOM4TE; \ + fi; \ + $(AUTOMAKE) --gnu Makefile; \ + ) .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -353,7 +375,17 @@ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENC $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + @echo ' cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)'; \ + $(am__cd) $(srcdir) && \ + ( if test -n '$(am__nomissing_AUTOCONF)'; then \ + AUTOCONF='$(am__nomissing_AUTOCONF)'; \ + export AUTOCONF; \ + fi; \ + if test -n '$(am__nomissing_AUTOM4TE)'; then \ + AUTOM4TE='$(am__nomissing_AUTOM4TE)'; \ + export AUTOM4TE; \ + fi; \ + $(ACLOCAL) $(ACLOCAL_AMFLAGS) ) $(am__aclocal_m4_deps): install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) diff --git a/configure b/configure index ae88625..c913f4c 100755 --- a/configure +++ b/configure @@ -584,10 +584,13 @@ INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO +AUTOM4TE AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL +am__nomissing_AUTOM4TE +am__nomissing_AUTOCONF VERSION PACKAGE CYGPATH_W @@ -596,6 +599,7 @@ INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM am_AUTOHEADER +am_AUTOM4TE am_AUTOCONF build_os build_vendor @@ -1769,6 +1773,8 @@ case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac # suite) without being bothered by `missing'. Likewise for autoheader. am_AUTOCONF="${AUTOCONF-autoconf}" +am_AUTOM4TE="${AUTOM4TE-autom4te}" + am_AUTOHEADER="${AUTOHEADER-autoheader}" @@ -2227,6 +2233,10 @@ cat >>confdefs.h <<_ACEOF _ACEOF # Some tools Automake needs. +test -n "$AUTOCONF" && am__nomissing_AUTOCONF=$AUTOCONF + +test -n "$AUTOM4TE" && am__nomissing_AUTOM4TE=$AUTOM4TE + ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} @@ -2240,6 +2250,9 @@ AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} +AUTOM4TE=${AUTOM4TE-"${am_missing_run}autom4te"} + + MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on diff --git a/configure.ac b/configure.ac index de4583d..10a2279 100644 --- a/configure.ac +++ b/configure.ac @@ -30,6 +30,7 @@ AC_CANONICAL_BUILD # way we can run Autoconf tests from configure (or from the test # suite) without being bothered by `missing'. Likewise for autoheader. AC_SUBST([am_AUTOCONF], ["${AUTOCONF-autoconf}"]) +AC_SUBST([am_AUTOM4TE], ["${AUTOM4TE-autom4te}"]) AC_SUBST([am_AUTOHEADER], ["${AUTOHEADER-autoheader}"]) AM_INIT_AUTOMAKE([1.10a dist-bzip2 filename-length-max=99 color-tests parallel-tests]) diff --git a/doc/Makefile.in b/doc/Makefile.in index 95a8fb8..13c4eb5 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -117,6 +117,7 @@ AMTAR = @AMTAR@ APIVERSION = @APIVERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ +AUTOM4TE = @AUTOM4TE@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ @@ -161,7 +162,10 @@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am_AUTOCONF = @am_AUTOCONF@ am_AUTOHEADER = @am_AUTOHEADER@ +am_AUTOM4TE = @am_AUTOM4TE@ am__leading_dot = @am__leading_dot@ +am__nomissing_AUTOCONF = @am__nomissing_AUTOCONF@ +am__nomissing_AUTOM4TE = @am__nomissing_AUTOM4TE@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ @@ -257,7 +261,16 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu doc/Makefile + ( if test -n '$(am__nomissing_AUTOCONF)'; then \ + AUTOCONF='$(am__nomissing_AUTOCONF)'; \ + export AUTOCONF; \ + fi; \ + if test -n '$(am__nomissing_AUTOM4TE)'; then \ + AUTOM4TE='$(am__nomissing_AUTOM4TE)'; \ + export AUTOM4TE; \ + fi; \ + $(AUTOMAKE) --gnu doc/Makefile; \ + ) .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ diff --git a/lib/Automake/Makefile.in b/lib/Automake/Makefile.in index e068ab8..7c5c590 100644 --- a/lib/Automake/Makefile.in +++ b/lib/Automake/Makefile.in @@ -137,6 +137,7 @@ AMTAR = @AMTAR@ APIVERSION = @APIVERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ +AUTOM4TE = @AUTOM4TE@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ @@ -181,7 +182,10 @@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am_AUTOCONF = @am_AUTOCONF@ am_AUTOHEADER = @am_AUTOHEADER@ +am_AUTOM4TE = @am_AUTOM4TE@ am__leading_dot = @am__leading_dot@ +am__nomissing_AUTOCONF = @am__nomissing_AUTOCONF@ +am__nomissing_AUTOM4TE = @am__nomissing_AUTOM4TE@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ @@ -277,7 +281,16 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Automake/Makefile'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu lib/Automake/Makefile + ( if test -n '$(am__nomissing_AUTOCONF)'; then \ + AUTOCONF='$(am__nomissing_AUTOCONF)'; \ + export AUTOCONF; \ + fi; \ + if test -n '$(am__nomissing_AUTOM4TE)'; then \ + AUTOM4TE='$(am__nomissing_AUTOM4TE)'; \ + export AUTOM4TE; \ + fi; \ + $(AUTOMAKE) --gnu lib/Automake/Makefile; \ + ) .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ diff --git a/lib/Automake/tests/Makefile.in b/lib/Automake/tests/Makefile.in index 3d28072..3fdcc25 100644 --- a/lib/Automake/tests/Makefile.in +++ b/lib/Automake/tests/Makefile.in @@ -153,6 +153,7 @@ AMTAR = @AMTAR@ APIVERSION = @APIVERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ +AUTOM4TE = @AUTOM4TE@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ @@ -197,7 +198,10 @@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am_AUTOCONF = @am_AUTOCONF@ am_AUTOHEADER = @am_AUTOHEADER@ +am_AUTOM4TE = @am_AUTOM4TE@ am__leading_dot = @am__leading_dot@ +am__nomissing_AUTOCONF = @am__nomissing_AUTOCONF@ +am__nomissing_AUTOM4TE = @am__nomissing_AUTOM4TE@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ @@ -265,7 +269,16 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Automake/tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu lib/Automake/tests/Makefile + ( if test -n '$(am__nomissing_AUTOCONF)'; then \ + AUTOCONF='$(am__nomissing_AUTOCONF)'; \ + export AUTOCONF; \ + fi; \ + if test -n '$(am__nomissing_AUTOM4TE)'; then \ + AUTOM4TE='$(am__nomissing_AUTOM4TE)'; \ + export AUTOM4TE; \ + fi; \ + $(AUTOMAKE) --gnu lib/Automake/tests/Makefile; \ + ) .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ diff --git a/lib/Makefile.in b/lib/Makefile.in index f90b085..46d7b12 100644 --- a/lib/Makefile.in +++ b/lib/Makefile.in @@ -139,6 +139,7 @@ AMTAR = @AMTAR@ APIVERSION = @APIVERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ +AUTOM4TE = @AUTOM4TE@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ @@ -183,7 +184,10 @@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am_AUTOCONF = @am_AUTOCONF@ am_AUTOHEADER = @am_AUTOHEADER@ +am_AUTOM4TE = @am_AUTOM4TE@ am__leading_dot = @am__leading_dot@ +am__nomissing_AUTOCONF = @am__nomissing_AUTOCONF@ +am__nomissing_AUTOM4TE = @am__nomissing_AUTOM4TE@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ @@ -248,7 +252,16 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu lib/Makefile + ( if test -n '$(am__nomissing_AUTOCONF)'; then \ + AUTOCONF='$(am__nomissing_AUTOCONF)'; \ + export AUTOCONF; \ + fi; \ + if test -n '$(am__nomissing_AUTOM4TE)'; then \ + AUTOM4TE='$(am__nomissing_AUTOM4TE)'; \ + export AUTOM4TE; \ + fi; \ + $(AUTOMAKE) --gnu lib/Makefile; \ + ) .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ diff --git a/lib/am/Makefile.in b/lib/am/Makefile.in index 8924d17..c69551a 100644 --- a/lib/am/Makefile.in +++ b/lib/am/Makefile.in @@ -97,6 +97,7 @@ AMTAR = @AMTAR@ APIVERSION = @APIVERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ +AUTOM4TE = @AUTOM4TE@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ @@ -141,7 +142,10 @@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am_AUTOCONF = @am_AUTOCONF@ am_AUTOHEADER = @am_AUTOHEADER@ +am_AUTOM4TE = @am_AUTOM4TE@ am__leading_dot = @am__leading_dot@ +am__nomissing_AUTOCONF = @am__nomissing_AUTOCONF@ +am__nomissing_AUTOM4TE = @am__nomissing_AUTOM4TE@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ @@ -240,7 +244,16 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/am/Makefile'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu lib/am/Makefile + ( if test -n '$(am__nomissing_AUTOCONF)'; then \ + AUTOCONF='$(am__nomissing_AUTOCONF)'; \ + export AUTOCONF; \ + fi; \ + if test -n '$(am__nomissing_AUTOM4TE)'; then \ + AUTOM4TE='$(am__nomissing_AUTOM4TE)'; \ + export AUTOM4TE; \ + fi; \ + $(AUTOMAKE) --gnu lib/am/Makefile; \ + ) .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ diff --git a/lib/am/configure.am b/lib/am/configure.am index e9299d6..349ebde 100644 --- a/lib/am/configure.am +++ b/lib/am/configure.am @@ -40,8 +40,23 @@ endif %?TOPDIR_P% case '$(am__configure_deps)' in \ *$$dep*) \ ?TOPDIR_P? echo ' cd $(srcdir) && $(AUTOMAKE) %AUTOMAKE-OPTIONS%'; \ -?TOPDIR_P? $(am__cd) $(srcdir) && $(AUTOMAKE) %AUTOMAKE-OPTIONS% \ -?TOPDIR_P? && exit 0; \ +?TOPDIR_P? $(am__cd) $(srcdir) && \ +## We must export the configure-time values of AUTOCONF and AUTOM4TE only +## if they have been expicitly overridden by the user; otherwise, it's +## better leave automake and aclocal pick up those values from either the +## environment or the built-in defaults (and similarly leave autoconf pick +## up the value of AUTOM4TE from either the environment or the built-in +## default). +?TOPDIR_P? ( if test -n '$(am__nomissing_AUTOCONF)'; then \ +?TOPDIR_P? AUTOCONF='$(am__nomissing_AUTOCONF)'; \ +?TOPDIR_P? export AUTOCONF; \ +?TOPDIR_P? fi; \ +?TOPDIR_P? if test -n '$(am__nomissing_AUTOM4TE)'; then \ +?TOPDIR_P? AUTOM4TE='$(am__nomissing_AUTOM4TE)'; \ +?TOPDIR_P? export AUTOM4TE; \ +?TOPDIR_P? fi; \ +?TOPDIR_P? $(AUTOMAKE) %AUTOMAKE-OPTIONS%; \ +?TOPDIR_P? ) && exit 0; \ ?!TOPDIR_P? ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ ## If on the other hand, subdir/Makefile.in has been removed, then toplevel ## am--refresh will not be aware of any need to run. We still invoke it @@ -54,7 +69,17 @@ endif %?TOPDIR_P% ## Otherwise, rebuild only this file. echo ' cd $(top_srcdir) && $(AUTOMAKE) %AUTOMAKE-OPTIONS% %MAKEFILE-AM-SOURCES%'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) %AUTOMAKE-OPTIONS% %MAKEFILE-AM-SOURCES% +## See comments above for why we need this involution. + ( if test -n '$(am__nomissing_AUTOCONF)'; then \ + AUTOCONF='$(am__nomissing_AUTOCONF)'; \ + export AUTOCONF; \ + fi; \ + if test -n '$(am__nomissing_AUTOM4TE)'; then \ + AUTOM4TE='$(am__nomissing_AUTOM4TE)'; \ + export AUTOM4TE; \ + fi; \ + $(AUTOMAKE) %AUTOMAKE-OPTIONS% %MAKEFILE-AM-SOURCES%; \ + ) ## Ensure that GNU make doesn't remove Makefile if ./config.status (below) ## is interrupted. Otherwise, the user would need to know to rerun @@ -119,7 +144,19 @@ $(top_srcdir)/configure: %MAINTAINER-MODE% $(am__configure_deps) ## the $(am__configure_deps) dependency. if %?REGEN-ACLOCAL-M4% $(ACLOCAL_M4): %MAINTAINER-MODE% $(am__aclocal_m4_deps) -?TOPDIR_P? $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +?TOPDIR_P? @echo ' cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)'; \ +?TOPDIR_P? $(am__cd) $(srcdir) && \ +## Please see the comments above about similar code in rules for +## rebuilding `%MAKEFILE-IN%'. +?TOPDIR_P? ( if test -n '$(am__nomissing_AUTOCONF)'; then \ +?TOPDIR_P? AUTOCONF='$(am__nomissing_AUTOCONF)'; \ +?TOPDIR_P? export AUTOCONF; \ +?TOPDIR_P? fi; \ +?TOPDIR_P? if test -n '$(am__nomissing_AUTOM4TE)'; then \ +?TOPDIR_P? AUTOM4TE='$(am__nomissing_AUTOM4TE)'; \ +?TOPDIR_P? export AUTOM4TE; \ +?TOPDIR_P? fi; \ +?TOPDIR_P? $(ACLOCAL) $(ACLOCAL_AMFLAGS) ) ?!TOPDIR_P? cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ## Avoid the "deleted header file" problem for the dependencies. diff --git a/m4/Makefile.in b/m4/Makefile.in index 270ee91..4f5eb36 100644 --- a/m4/Makefile.in +++ b/m4/Makefile.in @@ -97,6 +97,7 @@ AMTAR = @AMTAR@ APIVERSION = @APIVERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ +AUTOM4TE = @AUTOM4TE@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ @@ -141,7 +142,10 @@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am_AUTOCONF = @am_AUTOCONF@ am_AUTOHEADER = @am_AUTOHEADER@ +am_AUTOM4TE = @am_AUTOM4TE@ am__leading_dot = @am__leading_dot@ +am__nomissing_AUTOCONF = @am__nomissing_AUTOCONF@ +am__nomissing_AUTOM4TE = @am__nomissing_AUTOM4TE@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ @@ -237,7 +241,16 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu m4/Makefile'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu m4/Makefile + ( if test -n '$(am__nomissing_AUTOCONF)'; then \ + AUTOCONF='$(am__nomissing_AUTOCONF)'; \ + export AUTOCONF; \ + fi; \ + if test -n '$(am__nomissing_AUTOM4TE)'; then \ + AUTOM4TE='$(am__nomissing_AUTOM4TE)'; \ + export AUTOM4TE; \ + fi; \ + $(AUTOMAKE) --gnu m4/Makefile; \ + ) .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ diff --git a/m4/init.m4 b/m4/init.m4 index 365c9ac..b21cd4d 100644 --- a/m4/init.m4 +++ b/m4/init.m4 @@ -7,7 +7,7 @@ # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 16 +# serial 17 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. @@ -70,10 +70,22 @@ _AM_IF_OPTION([no-define],, # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl +dnl We pass these two commands in the environment of automake and aclocal +dnl commands in generated Makefile, so wrapping them with `missing' would +dnl be a bad idea. For example, if aclocal proper is ever called, it will +dnl need a working autom4te to get traces from e.g. configure.ac, and +dnl the workaround provided by `missing --run autom4te' is not enough in +dnl such a case, and a flat-out failure by aclocal is the best and most +dnl correct option. +test -n "$AUTOCONF" && am__nomissing_AUTOCONF=$AUTOCONF +AC_SUBST([am__nomissing_AUTOCONF]) +test -n "$AUTOM4TE" && am__nomissing_AUTOM4TE=$AUTOM4TE +AC_SUBST([am__nomissing_AUTOM4TE]) AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(AUTOM4TE, autom4te) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl diff --git a/tests/Makefile.am b/tests/Makefile.am index 0558149..19de3ab 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -601,6 +601,13 @@ remake4.test \ remake5.test \ remake6.test \ remake7.test \ +remake8a.test \ +remake8b.test \ +remake8c.test \ +remake8d.test \ +remake8e.test \ +remake8f.test \ +remake8g.test \ regex.test \ req.test \ reqd.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index a06026e..2915a03 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -158,6 +158,7 @@ AMTAR = @AMTAR@ APIVERSION = @APIVERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ +AUTOM4TE = @AUTOM4TE@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ @@ -202,7 +203,10 @@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am_AUTOCONF = @am_AUTOCONF@ am_AUTOHEADER = @am_AUTOHEADER@ +am_AUTOM4TE = @am_AUTOM4TE@ am__leading_dot = @am__leading_dot@ +am__nomissing_AUTOCONF = @am__nomissing_AUTOCONF@ +am__nomissing_AUTOM4TE = @am__nomissing_AUTOM4TE@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ @@ -839,6 +843,13 @@ remake4.test \ remake5.test \ remake6.test \ remake7.test \ +remake8a.test \ +remake8b.test \ +remake8c.test \ +remake8d.test \ +remake8e.test \ +remake8f.test \ +remake8g.test \ regex.test \ req.test \ reqd.test \ @@ -1035,7 +1046,16 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/parallel-tests.am $(am__ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu tests/Makefile + ( if test -n '$(am__nomissing_AUTOCONF)'; then \ + AUTOCONF='$(am__nomissing_AUTOCONF)'; \ + export AUTOCONF; \ + fi; \ + if test -n '$(am__nomissing_AUTOM4TE)'; then \ + AUTOM4TE='$(am__nomissing_AUTOM4TE)'; \ + export AUTOM4TE; \ + fi; \ + $(AUTOMAKE) --gnu tests/Makefile; \ + ) .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ diff --git a/tests/defs.in b/tests/defs.in index 1744a07..36d1086 100644 --- a/tests/defs.in +++ b/tests/defs.in @@ -54,6 +54,8 @@ test -f "$srcdir/defs.in" || { me=`echo "$0" | sed -e 's,.*[\\/],,;s/\.test$//'` +APIVERSION='@APIVERSION@' + # Make sure we override the user shell. SHELL='@SHELL@' export SHELL @@ -61,12 +63,13 @@ export SHELL test -z "$PERL" && PERL='@PERL@' test -z "$MAKE" && MAKE=make test -z "$AUTOCONF" && AUTOCONF="@am_AUTOCONF@" +test -z "$AUTOM4TE" && AUTOM4TE="@am_AUTOM4TE@" test -z "$AUTOHEADER" && AUTOHEADER="@am_AUTOHEADER@" test -z "$AUTOUPDATE" && AUTOUPDATE=autoupdate test -z "$MISSING" && MISSING=`pwd`/../lib/missing # Use -Werror because this also turns some Perl warnings into error. # (Tests for which this is inappropriate should use -Wno-error.) -test -z "$ACLOCAL" && ACLOCAL="acloc...@apiversion@ -Werror" +test -z "$ACLOCAL" && ACLOCAL="aclocal-$APIVERSION -Werror" # Extra flags to pass to aclocal before all other flags added by this script. ACLOCAL_TESTSUITE_FLAGS= export ACLOCAL_TESTSUITE_FLAGS @@ -77,7 +80,7 @@ export ACLOCAL_TESTSUITE_FLAGS # -Werror by default. Tests for which this is inappropriate # (e.g. when testing that a warning is enabled by a specific switch) # should use -Wnone or/and -Wno-error -test -z "$AUTOMAKE" && AUTOMAKE="automa...@apiversion@ --foreign -Werror -Wall" +test -z "$AUTOMAKE" && AUTOMAKE="automake-$APIVERSION --foreign -Werror -Wall" PATH="`p...@path_separator@$PATH" echo "$PATH" diff --git a/tests/remake8a.test b/tests/remake8a.test new file mode 100755 index 0000000..8d6dfee --- /dev/null +++ b/tests/remake8a.test @@ -0,0 +1,94 @@ +#! /bin/sh +# Copyright (C) 2010 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, see <http://www.gnu.org/licenses/>. + +# Make sure that rebuild rules behave properly when no configure-time +# override of autoconf and autom4te is done. + +. ./defs || Exit 1 + +set -e + +: > Makefile.am + +cat > configure.in <<END +AC_INIT([$me], [1.0]) +AM_INIT_AUTOMAKE([foreign -Wall -Werror]) +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT +END + +mkdir xbin + +for p in autom4te autoconf; do + cat > xbin/$p <<END +#! /bin/sh +echo "Bad $p called: \$0" >&2 +exit 255 +END + cat xbin/$p # for debugging + chmod a+x xbin/$p +done + +# Unfortunately, we cannot just export our $AUTOCONF and $AUTOM4TE for +# use by automake and aclocal. POSIX states that if a Makefile contains +# a macro definition, and this macro has the same name of an exported +# environment variable, then that variable will be redefined by make to +# have the same value of the macro, and thus this will be the value seen +# by make subprocesses. For example: +# $ cat Makefile +# x=1 +# target:; @echo $$x; env | grep '^x=' +# $ x=2 make +# 1 +# x=1 +# Yuck! So we need the following workaround. +for p in automake aclocal; do + cat > xbin/$p <<END +#! /bin/sh +AUTOCONF='$AUTOCONF'; export AUTOCONF +AUTOM4TE='$AUTOM4TE'; export AUTOM4TE +exec '$curdir/$p-$APIVERSION' \${1+"\$@"} +END + cat xbin/$p # for debugging + cp xbin/$p xbin/$p-$APIVERSION + chmod a+x xbin/$p xbin/$p-$APIVERSION +done + +PATH=`pwd`/xbin:$PATH; export PATH + +aclocal-$APIVERSION -Wall -Werror +automake-$APIVERSION -Wall -Werror +$AUTOCONF + +# We don't want configure to pick these vars up from the environment. +unset AUTOCONF +unset AUTOM4TE + +./configure + +$sleep +rm -f aclocal.m4 +touch configure.in +touch Makefile.am + +# The `missing' script should save our day w.r.t. broken autoconf, +# and the rebuild rules shouldn't export the broken autoconf and +# autom4te to the aclocal and automake calls. +$MAKE >output 2>&1 || { cat output; Exit 1; } +cat output +grep 'WARNING:.*missing' output + +: diff --git a/tests/remake8b.test b/tests/remake8b.test new file mode 100755 index 0000000..5a6b713 --- /dev/null +++ b/tests/remake8b.test @@ -0,0 +1,99 @@ +#! /bin/sh +# Copyright (C) 2010 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, see <http://www.gnu.org/licenses/>. + +# Check that automake-generated makefiles wraps autotools calls with +# the `missing' script by default. +# Keep this in sync with sister test `remake8c.test'. + +required=GNUmake +. ./defs || Exit 1 + +set -e + +: > Makefile.am + +cat > configure.in <<END +AC_INIT([$me], [1.0]) +AM_INIT_AUTOMAKE([foreign -Wall -Werror]) +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT +END + +AUTOCONF="$AUTOCONF" AUTOM4TE="$AUTOM4TE" aclocal-$APIVERSION -Werror -Wall +AUTOCONF="$AUTOCONF" AUTOM4TE="$AUTOM4TE" automake-$APIVERSION -Werror -Wall +AUTOM4TE="$AUTOM4TE" $AUTOCONF -Werror -Wall + +# We don't want AUTOCONF, AUTOMAKE etc. to be picked up by configure, +# so unset them in case the've been exported in the environment. +save_AUTOCONF=$AUTOCONF +save_AUTOM4TE=$AUTOM4TE +unset ACLOCAL +unset AUTOMAKE +unset AUTOCONF +unset AUTOM4TE + +mkdir xbin + +for p in autoconf autom4te; do + cat > xbin/$p <<END +#! /bin/sh +echo 'Fake $p that always fails!' >&2 +exit 255 +END + chmod a+x xbin/$p +done + +for p in automake aclocal; do + cat > xbin/$p <<END +#! /bin/sh +# This is required, otherwise automake and aclocal will try to use +# our fake & always failing autoconf and autom4te. +AUTOCONF='$save_AUTOCONF'; export AUTOCONF +AUTOM4TE='$save_AUTOM4TE'; export AUTOM4TE +exec '$curdir/$p-$APIVERSION' \${1+"\$@"} +END + cat xbin/$p # for debugging + cp -f xbin/$p xbin/$p-$APIVERSION + chmod a+x xbin/$p xbin/$p-$APIVERSION +done + +PATH=`pwd`/xbin:$PATH; export PATH + +./configure + +$sleep +touch configure.in +# Check that the `missing' script kicks in and saves the day. +$MAKE >output 2>&1 || { cat output; Exit 1; } +cat output +grep 'Fake autoconf that always fails!' output +grep 'WARNING:.*autoconf.*missing' output + +rm -f aclocal.m4 +# Check that the `missing' script kicks in and saves the day. +$MAKE >output 2>&1 || { cat output; Exit 1; } +cat output +grep 'Fake autoconf that always fails!' output +grep 'WARNING:.*autoconf.*missing' output + +# Now check that we try to bypass `missing', failures ensue. + +./configure AUTOCONF=autoconf +$sleep +touch configure.in +$MAKE && Exit 1 + +: diff --git a/tests/remake8c.test b/tests/remake8c.test new file mode 100755 index 0000000..9addf13 --- /dev/null +++ b/tests/remake8c.test @@ -0,0 +1,111 @@ +#! /bin/sh +# Copyright (C) 2010 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, see <http://www.gnu.org/licenses/>. + +# Check that automake-generated makefiles wraps autotools calls with +# the `missing' script by default. +# Keep this in sync with sister test `remake8b.test'. + +required=GNUmake +. ./defs || Exit 1 + +set -e + +: > Makefile.am + +cat > configure.in <<END +AC_INIT([$me], [1.0]) +AM_INIT_AUTOMAKE([foreign -Wall -Werror]) +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT +END + +AUTOCONF="$AUTOCONF" AUTOM4TE="$AUTOM4TE" aclocal-$APIVERSION -Werror -Wall +AUTOCONF="$AUTOCONF" AUTOM4TE="$AUTOM4TE" automake-$APIVERSION -Werror -Wall +AUTOM4TE="$AUTOM4TE" $AUTOCONF -Werror -Wall + +# We don't want AUTOCONF, AUTOMAKE etc. to be picked up by configure, +# so unset them in case the've been exported in the environment. +unset ACLOCAL +unset AUTOMAKE +unset AUTOCONF +unset AUTOM4TE + +mkdir xbin + +for p in automake aclocal autoconf autom4te; do + cat > xbin/$p <<END +#! /bin/sh +echo 'Fake $p that always fails!' >&2 +exit 255 +END + cat xbin/$p # for debugging + chmod a+x xbin/$p +done +cp -f xbin/automake xbin/automake-$APIVERSION +cp -f xbin/aclocal xbin/aclocal-$APIVERSION + +PATH=`pwd`/xbin:$PATH; export PATH + +./configure + +$sleep +touch Makefile.am +# Check that the `missing' script kicks in and saves the day. +$MAKE >output 2>&1 || { cat output; Exit 1; } +cat output +grep 'Fake automake that always fails!' output +grep 'WARNING:.*automake.*missing' output + +$sleep +touch configure.in +# Check that the `missing' script kicks in and saves the day. +$MAKE >output 2>&1 || { cat output; Exit 1; } +cat output +grep 'Fake automake that always fails!' output +grep 'WARNING:.*automake.*missing' output +grep 'Fake autoconf that always fails!' output +grep 'WARNING:.*autoconf.*missing' output + +rm -f aclocal.m4 +# Check that the `missing' script kicks in and saves the day. +$MAKE >output 2>&1 || { cat output; Exit 1; } +cat output +grep 'Fake aclocal that always fails!' output +grep 'WARNING:.*aclocal.*missing' output +grep 'Fake automake that always fails!' output +grep 'WARNING:.*automake.*missing' output +grep 'Fake autoconf that always fails!' output +grep 'WARNING:.*autoconf.*missing' output + +# Now check that we try to bypass `missing', failures ensue. +# NOTE: the order of the following tests *is significant*. +# Please do not change it. + +./configure AUTOMAKE=automake +$sleep +touch Makefile.am +$MAKE && Exit 1 + +./configure AUTOCONF=autoconf +$sleep +touch configure.in +$MAKE && Exit 1 + +./configure ACLOCAL=aclocal +rm -f aclocal.m4 +$MAKE && Exit 1 + +: diff --git a/tests/remake8d.test b/tests/remake8d.test new file mode 100755 index 0000000..9b954ff --- /dev/null +++ b/tests/remake8d.test @@ -0,0 +1,172 @@ +#! /bin/sh +# Copyright (C) 2010 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, see <http://www.gnu.org/licenses/>. + +# Make sure configure-time override of autoconf and autom4te are +# consistently honoured by the automake-generated rebuild rules. +# Keep this in sync with the sister test `remake8e.test'. + +required=GNUmake +. ./defs || Exit 1 + +set -e + +ocwd=`pwd` || Exit 1 + +no_bad_autotools_call() +{ + if find "$ocwd" -name '*.autofail' | grep .; then + Exit 1 + else + : + fi +} + +cat > Makefile.am <<'END' +ACLOCAL_AMFLAGS = -Werror +SUBDIRS = sub +END + +mkdir sub +: > sub/Makefile.am + +cat > configure.in <<END +AC_INIT([$me], [1.0]) +AM_INIT_AUTOMAKE([foreign -Wall -Werror]) +AC_CONFIG_FILES([Makefile sub/Makefile]) +AC_OUTPUT +END + +mkdir xbin +cd xbin + +cat > wrap--Autoconf <<END +#! /bin/sh +exec $AUTOCONF \${1+"\$@"} +END +cat > wrap--Autom4te <<END +#! /bin/sh +exec $AUTOM4TE \${1+"\$@"} +END + +cat > wrap--Automake <<'END' +#! /bin/sh +echo "$0: INFO: AUTOCONF='$AUTOCONF'" >&2 +echo "$0: INFO: AUTOM4TE='$AUTOM4TE'" >&2 +test x"$AUTOCONF" = x"wrap--Autoconf" || exit 255 +test x"$AUTOM4TE" = x"wrap--Autom4te" || exit 255 +END +cp wrap--Automake wrap--Aclocal +echo "exec '$curdir/automake-$APIVERSION' "'${1+"$@"}' >> wrap--Automake +echo "exec '$curdir/aclocal-$APIVERSION' "'${1+"$@"}' >> wrap--Aclocal + +for p in aclocal automake aclocal-$APIVERSION automake-$APIVERSION \ + autom4te autoconf +do + cat > $p <<END +#! /bin/sh +echo "BAD: $p (\$0) called" >&2 +: > $p.autofail +exit 255 +END +done + +cd .. + +ls -l xbin # for debugging +for f in xbin/*; do + chmod a+x $f + cat $f # for debugging +done + +PATH=`pwd`/xbin:$PATH; export PATH + +unset AUTOCONF +unset AUTOM4TE +unset AUTOMAKE +unset ACLOCAL + +AUTOCONF=wrap--Autoconf AUTOM4TE=wrap--Autom4te wrap--Aclocal -Werror +AUTOCONF=wrap--Autoconf AUTOM4TE=wrap--Autom4te wrap--Automake -Werror -Wall +AUTOM4TE=wrap--Autom4te wrap--Autoconf -Werror -Wall + +# Now check that aclocal and automake calls in Makefile always use +# the configure-time autoconf and autom4te. + +for vpath in : false; do + + if $vpath; then + srcdir=`pwd` + rm -rf build + mkdir build + cd build + else + srcdir=. + fi + + "$srcdir"/configure AUTOCONF=wrap--Autoconf AUTOM4TE=wrap--Autom4te \ + AUTOMAKE=wrap--Automake ACLOCAL=wrap--Aclocal + + # Try to trigger rebuold rules in different situations. + rm -f "$srcdir"/configure "$srcdir"/aclocal.m4 + rm -f "$srcdir"/Makefile.in "$srcdir"/sub/Makefile.in + $MAKE + no_bad_autotools_call + test -f "$srcdir"/configure + test -f "$srcdir"/aclocal.m4 + test -f "$srcdir"/Makefile.in + test -f "$srcdir"/sub/Makefile.in + + rm -f "$srcdir"/Makefile.in "$srcdir"/sub/Makefile.in + cd sub + $MAKE + no_bad_autotools_call + cd .. + test -f "$srcdir"/sub/Makefile.in + # Rebuild rules in subdir are "greedy" + test -f "$srcdir"/Makefile.in + + $sleep + touch "$srcdir"/Makefile.am + $MAKE + no_bad_autotools_call + + $sleep + touch "$srcdir"/sub/Makefile.am + cd sub + $MAKE + cd .. + no_bad_autotools_call + + $sleep + touch "$srcdir"/sub/Makefile.am + $MAKE + no_bad_autotools_call + + $sleep + touch "$srcdir"/configure.in + rm -f aclocal.m4 + $MAKE + no_bad_autotools_call + + $MAKE distclean + + if $vpath; then + cd $srcdir + fi + +done + +: diff --git a/tests/remake8e.test b/tests/remake8e.test new file mode 100755 index 0000000..7e722b0 --- /dev/null +++ b/tests/remake8e.test @@ -0,0 +1,170 @@ +#! /bin/sh +# Copyright (C) 2010 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, see <http://www.gnu.org/licenses/>. + +# Make sure configure-time override of autoconf and autom4te are +# consistently honoured by the automake-generated rebuild rules. +# Keep this in sync with the sister test `remake8d.test'. + +required=GNUmake +. ./defs || Exit 1 + +set -e + +ocwd=`pwd` || Exit 1 + +no_bad_autotools_call() +{ + if find "$ocwd" -name '*.autofail' | grep .; then + Exit 1 + else + : + fi +} + +cat > Makefile.am <<'END' +ACLOCAL_AMFLAGS = -Werror +SUBDIRS = sub +END + +mkdir sub +: > sub/Makefile.am + +cat > configure.in <<END +AC_INIT([$me], [1.0]) +AM_INIT_AUTOMAKE([foreign -Wall -Werror]) +AC_CONFIG_FILES([Makefile sub/Makefile]) +AC_OUTPUT +END + +mkdir xbin +cd xbin + +cat > wrap--Autoconf <<END +#! /bin/sh +exec $AUTOCONF \${1+"\$@"} +END +cat > wrap--Autom4te <<END +#! /bin/sh +exec $AUTOM4TE \${1+"\$@"} +END + +for p in autom4te autoconf; do + cat > $p <<END +#! /bin/sh +echo "BAD: $p (\$0) called" >&2 +: > $p.autofail +exit 255 +END +done + +for p in aclocal automake; do + cat > $p <<'END' +#! /bin/sh +echo "$0: INFO: AUTOCONF='$AUTOCONF'" >&2 +echo "$0: INFO: AUTOM4TE='$AUTOM4TE'" >&2 +test x"$AUTOCONF" = x"wrap--Autoconf" || exit 255 +test x"$AUTOM4TE" = x"wrap--Autom4te" || exit 255 +END + echo "exec '$curdir/$p-$APIVERSION'"' ${1+"$@"}' >> $p + cp -f $p $p-$APIVERSION +done + +cd .. + +ls -l xbin # for debugging +for f in xbin/*; do + chmod a+x $f + cat $f # for debugging +done + +PATH=`pwd`/xbin:$PATH; export PATH + +unset AUTOCONF +unset AUTOM4TE +unset AUTOMAKE +unset ACLOCAL + +AUTOCONF=wrap--Autoconf AUTOM4TE=wrap--Autom4te aclocal -Werror +AUTOCONF=wrap--Autoconf AUTOM4TE=wrap--Autom4te automake --foreign -Werror -Wall +AUTOM4TE=wrap--Autom4te wrap--Autoconf -Werror -Wall + +# Now check that aclocal and automake calls in Makefile always use +# the configure-time autoconf and autom4te. + +for vpath in : false; do + + if $vpath; then + srcdir=$ocwd + rm -rf build + mkdir build + cd build + else + srcdir=. + fi + + "$srcdir"/configure AUTOCONF=wrap--Autoconf AUTOM4TE=wrap--Autom4te + + # Try to trigger rebuold rules in different situations. + rm -f "$srcdir"/configure "$srcdir"/aclocal.m4 + rm -f "$srcdir"/Makefile.in "$srcdir"/sub/Makefile.in + $MAKE + no_bad_autotools_call + test -f "$srcdir"/configure + test -f "$srcdir"/aclocal.m4 + test -f "$srcdir"/Makefile.in + test -f "$srcdir"/sub/Makefile.in + + rm -f "$srcdir"/Makefile.in "$srcdir"/sub/Makefile.in + cd sub + $MAKE + no_bad_autotools_call + cd .. + test -f "$srcdir"/sub/Makefile.in + # Rebuild rules in subdir are "greedy" + test -f "$srcdir"/Makefile.in + + $sleep + touch "$srcdir"/Makefile.am + $MAKE + no_bad_autotools_call + + $sleep + touch "$srcdir"/sub/Makefile.am + cd sub + $MAKE + cd .. + no_bad_autotools_call + + $sleep + touch "$srcdir"/sub/Makefile.am + $MAKE + no_bad_autotools_call + + $sleep + touch "$srcdir"/configure.in + rm -f aclocal.m4 + $MAKE + no_bad_autotools_call + + $MAKE distclean + + if $vpath; then + cd $srcdir + fi + +done + +: diff --git a/tests/remake8f.test b/tests/remake8f.test new file mode 100755 index 0000000..1554dae --- /dev/null +++ b/tests/remake8f.test @@ -0,0 +1,119 @@ +#! /bin/sh +# Copyright (C) 2010 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, see <http://www.gnu.org/licenses/>. + +# We expect the `missing' script *never* to wrap autoconf and autom4te +# calls *done by automake and aclocal* in our rebuild rules. + +required=GNUmake +. ./defs || Exit 1 + +set -e + +: > Makefile.am + +cat >> configure.in <<END +AC_OUTPUT +END + +$ACLOCAL +$AUTOCONF +$AUTOMAKE + +mkdir xbin +cat > xbin/autoconf <<END +#! /bin/sh +exec $AUTOCONF \${1+"\$@"} +END +cat > xbin/autom4te <<END +#! /bin/sh +exec $AUTOM4TE \${1+"\$@"} +END +chmod a+x xbin/autoconf xbin/autom4te + +PATH=`pwd`/xbin:$PATH; export PATH + +cat > missing <<'END' +#! /bin/sh +if test x"$1" = x"--run"; then + shift + case $1 in + autom4te|autoconf) + echo "Oops! The \`missing' script has called $1!" >&2 + echo "This should have been never happened in this test." >&2 + : > missing.fail + exit 255 + ;; + *) + # Just assume we have the tool, and run it. This should be safe + # given our usage of missing here. + exec "$@" + exit 255 # notreached + ;; + esac +else + echo "Botched \`missing' call detected!" >&2 + echo "Arguments were: $*" >&2 + exit 255 +fi +exit 255 # notreached +END +chmod a+x missing + +no_bad_missing_call() +{ + if find . -name missing.fail | grep .; then + Exit 1 + else + : + fi +} + +# The configure script should not take up any of these from the +# environment. +save_AUTOCONF=$AUTOCONF +unset ACLOCAL +unset AUTOMAKE +unset AUTOCONF +unset AUTOM4TE + +./configure + +$sleep +touch Makefile.am +$MAKE +no_bad_missing_call + +rm -f Makefile.in +$MAKE +no_bad_missing_call + +$MAKE distclean + +# To test more comprehensive rebuild rules, we have to be able to +# call autoconf. +./configure AUTOCONF="$save_AUTOCONF" + +$sleep +touch configure.in +$MAKE +no_bad_missing_call + +$sleep +rm -f aclocal.m4 +$MAKE +no_bad_missing_call + +: diff --git a/tests/remake8g.test b/tests/remake8g.test new file mode 100755 index 0000000..736b7d6 --- /dev/null +++ b/tests/remake8g.test @@ -0,0 +1,140 @@ +#! /bin/sh +# Copyright (C) 2010 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, see <http://www.gnu.org/licenses/>. + +# Make sure configure-time override of autoconf and autom4te are +# consistently honoured by the automake-generated rebuild rules. +# Also, check that such rebuild rules are not uselessly run. +# See also the other `remake8*.test' related tests. + +required=GNUmake +. ./defs || Exit 1 + +set -e + +# We might modify/unset this variables later, so save them. +save_PATH=$PATH +save_AUTOCONF=$AUTOCONF +save_AUTOM4TE=$AUTOM4TE + +AUTOCONF=false; export AUTOCONF +AUTOM4TE=false; export AUTOM4TE + +cat > Makefile.am <<'END' +SUBDIRS = sub +END + +mkdir sub +: > sub/Makefile.am + +cat >> configure.in <<'END' +AC_CONFIG_FILES([sub/Makefile]) +AC_OUTPUT +END + +AUTOCONF="$save_AUTOCONF" AUTOM4TE="$save_AUTOM4TE" $ACLOCAL +AUTOCONF="$save_AUTOCONF" AUTOM4TE="$save_AUTOM4TE" $AUTOMAKE +AUTOM4TE="$save_AUTOM4TE" $save_AUTOCONF -Werror -Wall + +# Now check that aclocal and automake calls in Makefile always use +# the configure-time autoconf and autom4te. + +mkdir xbin +cat > xbin/wrap-autoconf <<END +#! /bin/sh +: > ac.run +exec $save_AUTOCONF \${1+"\$@"} +END +cat > xbin/wrap-autom4te <<END +#! /bin/sh +: > am4t.run +exec $save_AUTOM4TE \${1+"\$@"} +END +chmod a+x xbin/wrap-autoconf xbin/wrap-autom4te + +PATH=`pwd`/xbin:$PATH; export PATH + +./configure AUTOCONF=wrap-autoconf AUTOM4TE=wrap-autom4te + +# Try to remove every autotools-generated file, and to remake everything. + +rm -f configure aclocal.m4 Makefile.in sub/Makefile.in +$MAKE +test -f configure +test -f aclocal.m4 +test -f Makefile.in +test -f sub/Makefile.in +# Check that our autotools wrappers have really run. +test -f ac.run +test -f am4t.run +# Cleanup. +rm -f *.run sub/*.run + +# Redo the same checks, but with subset of generated files. +# Since we are at it, throw in also some tame "stress" tests. + +rm -f Makefile.in +$MAKE +test -f Makefile.in +# Check that our autotools wrappers have really run. +test -f ac.run +test -f am4t.run +# Cleanup. +rm -f *.run sub/*.run + +cd sub +$sleep +touch Makefile.am +$MAKE +# Check that the expected code path in the Makefile has been triggered. +# The *.run files must be in `..' because the rebuilt rules are always +# run in the top srcdir. +test -f ../am4t.run +test -f ../ac.run +test ! -r am4t.run +test ! -r ac.run +cd .. +rm -f *.run sub/*.run + +# Now check that rebuild rules are not uselessly triggered. +$sleep +echo .PHONY: foo-Bar-QUUX >> Makefile +$MAKE +test ! -r ac.run +test ! -r sub/ac.run +test ! -r am4t.run +test ! -r sub/am4t.run +$FGREP foo-Bar-QUUX Makefile +$sleep +echo : foo-Bar-QUUX >> configure +echo .PHONY: foo-Bar-QUUX >> Makefile.in +$MAKE +test ! -r ac.run +test ! -r sub/ac.run +test ! -r am4t.run +test ! -r sub/am4t.run +$FGREP foo-Bar-QUUX configure +$FGREP foo-Bar-QUUX Makefile.in +$FGREP foo-Bar-QUUX Makefile +$sleep +touch configure.in +$MAKE +test -f ac.run +test -f am4t.run +$FGREP foo-Bar-QUUX configure && Exit 1 +$FGREP foo-Bar-QUUX Makefile && Exit 1 +$FGREP foo-Bar-QUUX Makefile.in && Exit 1 + +: -- 1.7.1