This is the original 4/4 patch, unchanged from last time. It still passes `make distcheck' from a clean checkout and build on my mac.
> Assuming strongly that this patch depends upon the semantics of 3/4 > applied, I will review this patch after 3/4 is fixed I haven't actually tried it separately, but I expect it will still work even with the current master Makefile.am. Even so, I'd rather push these in the order I've tested them. Okay to push? * Makefile.am (bootstrap_files): List files that need to be generated at bootstrap time before `./configure && make' can work. It turns out that this is considerably fewer files than we had thought necessary previously. (bootstrap-deps-prep): Ensure minimum set of required substitution variables are non-empty. (bootstrap-deps): Depend on `bootstrap' files. * bootstrap (Generate bootstrap dependencies): Now that `Makefile.am' is entirely responsible for rebuilding files at bootstrap time, we need only specify the new `bootstrap-deps' target, and supply values for the substitutions checked by `bootstrap-deps-prep'. * configure.ac (AC_CONFIG_SRCDIR): `libtoolize.in' is not here yet right after running `bootstrap'. So rely on the presence of `libltdl/config/libtoolize.m4sh', which is always there. Signed-off-by: Gary V. Vaughan <g...@gnu.org> --- ChangeLog | 19 +++++++++++++++++++ Makefile.am | 41 +++++++++++++++++++++++++++++++++++++++++ bootstrap | 17 ++++------------- configure.ac | 2 +- 4 files changed, 65 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index e478899..de9d2c0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,22 @@ +2010-08-30 Gary V. Vaughan <g...@gnu.org> + + maint: simplify and improve safety of bootstrap process. + * Makefile.am (bootstrap_files): List files that need to be + generated at bootstrap time before `./configure && make' can + work. It turns out that this is considerably fewer files than we + had thought necessary previously. + (bootstrap-deps-prep): Ensure minimum set of required substitution + variables are non-empty. + (bootstrap-deps): Depend on `bootstrap' files. + * bootstrap (Generate bootstrap dependencies): Now that + `Makefile.am' is entirely responsible for rebuilding files at + bootstrap time, we need only specify the new `bootstrap-deps' + target, and supply values for the substitutions checked by + `bootstrap-deps-prep'. + * configure.ac (AC_CONFIG_SRCDIR): `libtoolize.in' is not here yet + right after running `bootstrap'. So rely on the presence of + `libtoolize.m4sh', which is always there. + 2010-08-31 Gary V. Vaughan <g...@gnu.org> build: eliminate superfluous temporary files from `Makefile.am'. diff --git a/Makefile.am b/Makefile.am index 5d84b2c..54d5674 100644 --- a/Makefile.am +++ b/Makefile.am @@ -182,6 +182,47 @@ $(srcdir)/libltdl/Makefile.am: $(srcdir)/libltdl/Makefile.inc -e '1s,^\(.. Makefile.\)inc.*,\1am -- Process this file with automake to produce Makefile.in,' > "$@" chmod a-w "$@" +## Document the make macros that are needed to build bootstrap-deps +## dependencies when called from `bootstrap' (developer's machine), +## where the Makefile.am is fed to make in its raw format before +## `configure' has found the correct values (on the build machine). +bootstrap_files = \ + $(auxdir)/ltmain.sh \ + $(m4dir)/ltversion.m4 \ + libltdl/Makefile.am + +.PHONY: bootstrap-deps bootstrap-deps-prep +bootstrap-deps: bootstrap-deps-prep $(bootstrap_files) +bootstrap-deps-prep: +## The following variables are substituted by `bootstrap-dep-preps' + @exit_cmd=:; \ + test -z "$(srcdir)" \ + && echo "ERROR: don't call $(MAKE) with srcdir unset." \ + && exit_cmd=exit; \ + test -z "$(M4SH)" \ + && echo "ERROR: don't call $(MAKE) with M4SH unset." \ + && exit_cmd=exit; \ + test -z "$(PACKAGE)" \ + && echo "ERROR: don't call $(MAKE) with PACKAGE unset." \ + && exit_cmd=exit; \ + test -z "$(PACKAGE_BUGREPORT)" \ + && echo "ERROR: don't call $(MAKE) with PACKAGE_BUGREPORT unset." \ + && exit_cmd=exit; \ + test -z "$(PACKAGE_NAME)" \ + && echo "ERROR: don't call $(MAKE) with PACKAGE_NAME unset." \ + && exit_cmd=exit; \ + test -z "$(PACKAGE_URL)" \ + && echo "ERROR: don't call $(MAKE) with PACKAGE_URL unset." \ + && exit_cmd=exit; \ + test -z "$(SED)" \ + && echo "ERROR: don't call $(MAKE) with SED unset." \ + && exit_cmd=exit; \ + test -z "$(VERSION)" \ + && echo "ERROR: don't call $(MAKE) with VERSION unset." \ + && exit_cmd=exit; \ + $$exit_cmd 1 + rm -f $(bootstrap_files) + ## Unfortunately, all this bogeyness means that we have to manually ## keep the generated files in libltdl up to date. diff --git a/bootstrap b/bootstrap index 78b4d30..e66b151 100755 --- a/bootstrap +++ b/bootstrap @@ -126,19 +126,10 @@ $SED '/^if /,/^endif$/d;/^else$/,/^endif$/d;/^include /d' $makes > Makefile # Building distributed files from configure is bad for automake, so we # generate them here, and have Makefile rules to keep them up to date. -# We don't have all the substitution values to build ltmain.sh from this -# script yet, but we need config/ltmain.sh for the libtool commands in -# configure, and ltversion.m4 to generate configure in the first place: -rm -f $auxdir/ltmain.sh $m4dir/ltversion.m4 - -$MAKE ./$auxdir/ltmain.sh ./$m4dir/ltversion.m4 \ - ./libtoolize.in ./tests/defs.in ./tests/package.m4 \ - ./tests/testsuite ./libltdl/Makefile.am ./doc/notes.txt \ - srcdir=. top_srcdir=. PACKAGE="$PACKAGE" VERSION="$VERSION" \ - PACKAGE_NAME="$PACKAGE_NAME" PACKAGE_URL="$PACKAGE_URL" \ - PACKAGE_BUGREPORT="bug-$pack...@gnu.org" M4SH="$AUTOM4TE --language=m4sh" \ - AUTOTEST="$AUTOM4TE --language=autotest" SED="$SED" MAKEINFO="$MAKEINFO" \ - GREP="$GREP" FGREP="$FGREP" EGREP="$EGREP" LN_S="$LN_S" +$MAKE bootstrap-deps \ + M4SH="$AUTOM4TE --language=m4sh" PACKAGE="$PACKAGE" \ + PACKAGE_BUGREPORT="bug-$pack...@gnu.org" PACKAGE_NAME="$PACKAGE_NAME" \ + PACKAGE_URL="$PACKAGE_URL" SED="$SED" srcdir=. VERSION="$VERSION" rm -f Makefile diff --git a/configure.ac b/configure.ac index 63ee8bf..403c4b9 100644 --- a/configure.ac +++ b/configure.ac @@ -35,7 +35,7 @@ AC_INIT([GNU Libtool], [2.4.1a], [bug-libt...@gnu.org]) m4_ifndef([AC_PACKAGE_URL], [AC_SUBST([PACKAGE_URL], [http://www.gnu.org/software/libtool/])]) AC_CONFIG_HEADERS([config.h:config-h.in]) -AC_CONFIG_SRCDIR([libtoolize.in]) +AC_CONFIG_SRCDIR([libtoolize.m4sh]) LT_CONFIG_LTDL_DIR([libltdl], [nonrecursive]) AC_CONFIG_AUX_DIR([libltdl/config]) AC_CONFIG_MACRO_DIR([libltdl/m4]) -- 1.7.3