From: Gary V. Vaughan <g...@gnu.org> * bootstrap (rebuild): Set the shell variable `revision' rather than `correctver' for clarity. (edit): Split into two parts... (bootstrap_edit): ...substitutions that should happen at bootstrap time... (configure_edit): ...and substitution that should not happen until configure time. * bootstrap: Move the bootstrap related section up towards the top of the file. (libltdl/m4/ltversion.m4): Extract `$macro_revision' from this file for direct comparison with `$revision', rather than munging the file's serial number. Use `bootstrap_edit' for substitutions when generating from `ltversion.in'. (libltdl/config/ltmain.sh): Similarly, extract `$package_revision' for comparison with rebuild's `$revision' setting, and make bootstrap time substitutions with `bootstrap_edit'. (libtool): Likewise. (libtoolize): Use `configure_edit' for substitutions at configure time. (tests/package.m4, tests/defs): Likewise. * HACKING (Release Procedure): Remove the note to workaround the bug fixed by this changeset. * NEWS (Bug fixes): Mention that this bug is now fixed.
Signed-off-by: Gary V. Vaughan <g...@gnu.org> --- ChangeLog | 25 +++++++ HACKING | 9 --- Makefile.am | 211 ++++++++++++++++++++++++++++++----------------------------- NEWS | 2 + 4 files changed, 134 insertions(+), 113 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4e6e5a0..218bd48 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,30 @@ 2010-08-30 Gary V. Vaughan <g...@gnu.org> + Don't leak developer GREP, SED etc into distribution file. + * bootstrap (rebuild): Set the shell variable `revision' rather + than `correctver' for clarity. + (edit): Split into two parts... + (bootstrap_edit): ...substitutions that should happen at bootstrap + time... + (configure_edit): ...and substitution that should not happen until + configure time. + * bootstrap: Move the bootstrap related section up towards the top + of the file. + (libltdl/m4/ltversion.m4): Extract `$macro_revision' from this + file for direct comparison with `$revision', rather than munging + the file's serial number. Use `bootstrap_edit' for substitutions + when generating from `ltversion.in'. + (libltdl/config/ltmain.sh): Similarly, extract `$package_revision' + for comparison with rebuild's `$revision' setting, and make + bootstrap time substitutions with `bootstrap_edit'. + (libtool): Likewise. + (libtoolize): Use `configure_edit' for substitutions at configure + time. + (tests/package.m4, tests/defs): Likewise. + * HACKING (Release Procedure): Remove the note to workaround the + bug fixed by this changeset. + * NEWS (Bug fixes): Mention that this bug is now fixed. + Rewrite bootstrap script for consistency with our other shell code. * bootstrap: Add a proper option parsing loop, along with copies of supporting functions from `libltd/m4/getopt.m4sh' and diff --git a/HACKING b/HACKING index 19b4b66..9d213ae 100644 --- a/HACKING +++ b/HACKING @@ -620,15 +620,6 @@ or obtained by writing to the Free Software Foundation, Inc., * Update NEWS, ChangeLog. -* Until the bug that leaks developer tool paths into the release tarballs - from ./bootstrap is fixed, make sure the right tools are first in your - PATH and then: - export EGREP=egrep - export FGREP=fgrep - export GREP=grep - export MAKE=make - export SED=sed - * Run ./bootstrap. * Run ./configure (or create a build directory first and run configure diff --git a/Makefile.am b/Makefile.am index de3eafe..f6c0a9a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -57,89 +57,13 @@ timestamp = set dummy `$(MKSTAMP) $(srcdir)`; shift; \ *) TIMESTAMP="" ;; \ esac -rebuild = rebuild=:; $(timestamp); correctver=$$1 - - -## ---------------- ## -## Libtool scripts. ## -## ---------------- ## - -# The libtool distributor and the standalone libtool script. -bin_SCRIPTS = libtoolize libtool - -libtoolize: $(srcdir)/libtoolize.in $(top_builddir)/config.status - rm -f libtoolize.tmp libtoolize - $(timestamp); \ - input="libtoolize.m4sh"; \ - $(edit) -e "s,@TIMESTAMP\@,$$TIMESTAMP,g" \ - -e 's,@aclocal_DATA\@,$(aclocalfiles),g' \ - -e "s,@pkgltdl_files\@,$(ltdldatafiles),g" \ - -e "s,@pkgconfig_files\@,$(auxfiles),g" \ - $(srcdir)/libtoolize.in > libtoolize.tmp - chmod a+x libtoolize.tmp - chmod a-w libtoolize.tmp - mv -f libtoolize.tmp libtoolize - -# Use `$(srcdir)' for the benefit of non-GNU makes: this is -# how libtoolize.in appears in our dependencies. -EXTRA_DIST += libtoolize.m4sh -$(srcdir)/libtoolize.in: $(sh_files) libtoolize.m4sh Makefile.am - cd $(srcdir); \ - rm -f libtoolize.in; \ - $(M4SH) -B $(auxdir) libtoolize.m4sh > libtoolize.in - -# We used to do this with a 'stamp-vcl' file, but non-gmake builds -# would rerun configure on every invocation, so now we manually -# check the version numbers from the build rule when necessary. -libtool: $(top_builddir)/config.status $(srcdir)/$(auxdir)/ltmain.sh ChangeLog - @target=libtool; $(rebuild); \ - if test -f "$$target"; then \ - set dummy `./$$target --version | sed 1q`; actualver="$$5"; \ - test "$$actualver" = "$$correctver" && rebuild=false; \ - fi; \ - for prereq in $?; do \ - case $$prereq in *ChangeLog);; *) rebuild=:;; esac; \ - done; \ - if $$rebuild; then \ - echo $(SHELL) ./config.status $$target; \ - cd $(top_builddir) && $(SHELL) ./config.status $$target; \ - fi - -.PHONY: configure-subdirs -configure-subdirs distdir: $(DIST_MAKEFILE_LIST) -...@dist_makefile_list@: - dir=`echo $@ | sed 's,^[^/]*$$,.,;s,/[^/]*$$,,'`; \ - test -d $$dir || mkdir $$dir || exit 1; \ - abs_srcdir=`$(lt__cd) $(srcdir) && pwd`; \ - (cd $$dir && $$abs_srcdir/$$dir/configure --with-dist) || exit 1 +rebuild = rebuild=:; $(timestamp); revision=$$1 # ---------- # # Bootstrap. # # ---------- # -edit = sed \ - -e 's,@EGREP\@,$(EGREP),g' \ - -e 's,@FGREP\@,$(FGREP),g' \ - -e 's,@GREP\@,$(GREP),g' \ - -e 's,@LN_S\@,$(LN_S),g' \ - -e 's,@MACRO_VERSION\@,$(VERSION),g' \ - -e 's,@PACKAGE\@,$(PACKAGE),g' \ - -e 's,@PACKAGE_BUGREPORT\@,$(PACKAGE_BUGREPORT),g' \ - -e 's,@PACKAGE_URL\@,$(PACKAGE_URL),g' \ - -e 's,@PACKAGE_NAME\@,$(PACKAGE_NAME),g' \ - -e 's,@PACKAGE_STRING\@,$(PACKAGE_NAME) $(VERSION),g' \ - -e 's,@PACKAGE_TARNAME\@,$(PACKAGE),g' \ - -e 's,@PACKAGE_VERSION\@,$(VERSION),g' \ - -e 's,@SED\@,$(SED),g' \ - -e 's,@VERSION\@,$(VERSION),g' \ - -e 's,@aclocaldir\@,$(aclocaldir),g' \ - -e 's,@datadir\@,$(datadir),g' \ - -e 's,@pkgdatadir\@,$(pkgdatadir),g' \ - -e 's,@host_triplet\@,$(host_triplet),g' \ - -e 's,@prefix\@,$(prefix),g' \ - -e "s,@configure_input\@,Generated from $$input.,g" - sh_files = $(auxdir)/general.m4sh $(auxdir)/getopt.m4sh EXTRA_DIST += bootstrap $(srcdir)/libtoolize.in $(auxdir)/ltmain.m4sh \ $(auxdir)/mkstamp $(sh_files) \ @@ -151,6 +75,25 @@ EXTRA_DIST += bootstrap $(srcdir)/libtoolize.in $(auxdir)/ltmain.m4sh \ CLEANFILES += libtool libtoolize libtoolize.tmp \ $(auxdir)/ltmain.tmp $(m4dir)/ltversion.tmp +## These are the replacements that need to be made at bootstrap time, +## because they must be static in distributed files, and not accidentally +## changed by configure running on the build machine. +bootstrap_edit = sed \ + -e "s,@configure_input\@,Generated from $$input.,g" \ + -e 's,@MACRO_VERSION\@,$(VERSION),g' \ + -e "s,@MACRO_REVISION\@,$$revision,g" \ + -e "s,@MACRO_SERIAL\@,$$serial,g" \ + -e 's,@PACKAGE\@,$(PACKAGE),g' \ + -e 's,@PACKAGE_BUGREPORT\@,$(PACKAGE_BUGREPORT),g' \ + -e 's,@PACKAGE_URL\@,$(PACKAGE_URL),g' \ + -e 's,@PACKAGE_NAME\@,$(PACKAGE_NAME),g' \ + -e "s,@package_revision\@,$$revision,g" \ + -e 's,@PACKAGE_STRING\@,$(PACKAGE_NAME) $(VERSION),g' \ + -e 's,@PACKAGE_TARNAME\@,$(PACKAGE),g' \ + -e 's,@PACKAGE_VERSION\@,$(VERSION),g' \ + -e "s,@TIMESTAMP\@,$$TIMESTAMP,g" \ + -e 's,@VERSION\@,$(VERSION),g' + ## We build ltversion.m4 here, instead of from config.status, ## because config.status is rerun each time one of configure's ## dependencies change and ltversion.m4 happens to be a configure @@ -159,15 +102,14 @@ CLEANFILES += libtool libtoolize libtoolize.tmp \ ## We used to do this with a 'stamp-vcl' file, but non-gmake builds ## would rerun configure on every invocation, so now we manually ## check the version numbers from the build rule when necessary. -## Use `$(srcdir)/m4' for the benefit of non-GNU makes: this is +## Use `$(srcdir)/$(m4dir)' for the benefit of non-GNU makes: this is ## how ltversion.m4 appears in our dependencies. EXTRA_DIST += $(m4dir)/ltversion.in $(srcdir)/$(m4dir)/ltversion.m4 $(srcdir)/$(m4dir)/ltversion.m4: $(m4dir)/ltversion.in configure.ac ChangeLog @target='$(srcdir)/$(m4dir)/ltversion.m4'; $(rebuild); \ if test -f "$$target"; then \ - set dummy `sed -n '/^# serial /p' "$$target"`; shift; \ - actualver=1.$$3; \ - test "$$actualver" = "$$correctver" && rebuild=false; \ + eval `sed -n '/^macro_revision=/p' "$$target"`; \ + test "$$macro_revision" = "$$revision" && rebuild=false; \ fi; \ for prereq in $?; do \ case $$prereq in *ChangeLog | *configure.ac);; *) rebuild=:;; esac; \ @@ -175,14 +117,12 @@ $(srcdir)/$(m4dir)/ltversion.m4: $(m4dir)/ltversion.in configure.ac ChangeLog if $$rebuild; then \ cd $(srcdir); \ rm -f $(m4dir)/ltversion.tmp; \ - serial=`echo "$$correctver" | sed 's,^1[.],,g'`; \ + serial=`echo "$$revision" | sed 's,^[1-9][0-9]*[.],,g'`; \ input="ltversion.in"; \ - echo $(edit) -e "s,@MACRO_REVISION\@,$$correctver,g" \ - -e "s,@MACRO_SERIAL\@,$$serial,g" \ + echo $(bootstrap_edit) \ $(srcdir)/$(m4dir)/ltversion.in \> $(srcdir)/$(m4dir)/ltversion.m4; \ - $(edit) -e "s,@MACRO_REVISION\@,$$correctver,g" \ - -e "s,@MACRO_SERIAL\@,$$serial,g" \ - $(m4dir)/ltversion.in > $(m4dir)/ltversion.tmp; \ + $(bootstrap_edit) \ + $(m4dir)/ltversion.in > $(m4dir)/ltversion.tmp; \ chmod a-w $(m4dir)/ltversion.tmp; \ mv -f $(m4dir)/ltversion.tmp $(m4dir)/ltversion.m4; \ fi @@ -192,7 +132,7 @@ $(srcdir)/$(m4dir)/ltversion.m4: $(m4dir)/ltversion.in configure.ac ChangeLog ## would rerun configure on every invocation, so now we manually ## check the version numbers from the build rule when necessary. ## !WARNING! If you edit this rule to change the contents of ltmain.sh, -## you must `touch $(srcdir)/$(auxdir)/ltmain.in' from the +## you must `touch $(srcdir)/$(auxdir)/ltmain.m4sh' from the ## shell if you need ltmain.sh to be regenerated. Ideally, we ## should make this rule depend on Makefile but that will break ## distcheck (at least) by rebuilding ltmain.sh in the source @@ -202,8 +142,7 @@ $(srcdir)/$(auxdir)/ltmain.sh: $(sh_files) $(auxdir)/ltmain.m4sh configure.ac Ch @target='$(srcdir)/$(auxdir)/ltmain.sh'; $(rebuild); \ if test -f "$$target"; then \ eval `sed -n '/^package_revision=/p' "$$target"`; \ - actualver=$$package_revision; \ - test "$$actualver" = "$$correctver" && rebuild=false; \ + test "$$package_revision" = "$$revision" && rebuild=false; \ fi; \ for prereq in $?; do \ case $$prereq in *ChangeLog);; *) rebuild=:;; esac; \ @@ -217,12 +156,10 @@ $(srcdir)/$(auxdir)/ltmain.sh: $(sh_files) $(auxdir)/ltmain.m4sh configure.ac Ch $(M4SH) -B $(auxdir) $(auxdir)/ltmain.m4sh \ > $(auxdir)/ltmain.in; \ input="ltmain.m4sh"; \ - echo $(edit) -e "s,@TIMESTAMP\@,$$TIMESTAMP,g" \ - -e "s,@package_revision\@,$$correctver," \ + echo $(bootstrap_edit) \ $(srcdir)/$(auxdir)/ltmain.in "> $$target"; \ - $(edit) -e "s,@TIMESTAMP\@,$$TIMESTAMP,g" \ - -e "s,@package_revision\@,$$1,g" \ - $(auxdir)/ltmain.in > $(auxdir)/ltmain.tmp; \ + $(bootstrap_edit) \ + $(auxdir)/ltmain.in > $(auxdir)/ltmain.tmp; \ rm -f $(auxdir)/ltmain.in; \ chmod a-w $(auxdir)/ltmain.tmp; \ mv -f $(auxdir)/ltmain.tmp $(auxdir)/ltmain.sh; \ @@ -264,6 +201,79 @@ LTDL_BOOTSTRAP_DEPS = $(srcdir)/libltdl/aclocal.m4 \ all-local: $(LTDL_BOOTSTRAP_DEPS) + +## ---------------- ## +## Libtool scripts. ## +## ---------------- ## + +configure_edit = $(bootstrap_edit) \ + -e 's,@aclocal_DATA\@,$(aclocalfiles),g' \ + -e 's,@aclocaldir\@,$(aclocaldir),g' \ + -e 's,@datadir\@,$(datadir),g' \ + -e 's,@EGREP\@,$(EGREP),g' \ + -e 's,@FGREP\@,$(FGREP),g' \ + -e 's,@GREP\@,$(GREP),g' \ + -e 's,@host_triplet\@,$(host_triplet),g' \ + -e 's,@LN_S\@,$(LN_S),g' \ + -e "s,@pkgconfig_files\@,$(auxfiles),g" \ + -e 's,@pkgdatadir\@,$(pkgdatadir),g' \ + -e "s,@pkgltdl_files\@,$(ltdldatafiles),g" \ + -e 's,@prefix\@,$(prefix),g' \ + -e 's,@SED\@,$(SED),g' + +# The libtool distributor and the standalone libtool script. +bin_SCRIPTS = libtoolize libtool + +libtoolize: $(srcdir)/libtoolize.in $(top_builddir)/config.status + rm -f libtoolize.tmp libtoolize + $(timestamp); \ + input="libtoolize.m4sh"; \ + $(configure_edit) \ + $(srcdir)/libtoolize.in > libtoolize.tmp + chmod a+x libtoolize.tmp + chmod a-w libtoolize.tmp + mv -f libtoolize.tmp libtoolize + +# Use `$(srcdir)' for the benefit of non-GNU makes: this is +# how libtoolize.in appears in our dependencies. +EXTRA_DIST += libtoolize.m4sh +$(srcdir)/libtoolize.in: $(sh_files) libtoolize.m4sh Makefile.am + cd $(srcdir); \ + rm -f libtoolize.in; \ + $(M4SH) -B $(auxdir) libtoolize.m4sh > libtoolize.in + +# We used to do this with a 'stamp-vcl' file, but non-gmake builds +# would rerun configure on every invocation, so now we manually +# check the version numbers from the build rule when necessary. +libtool: $(top_builddir)/config.status $(srcdir)/$(auxdir)/ltmain.sh ChangeLog + @target=libtool; $(rebuild); \ + if test -f "$$target"; then \ + eval `sed -n '/^package_revision=/p' "$$target"`; \ + test "$$package_revision" = "$$revision" && rebuild=false; \ + fi; \ + for prereq in $?; do \ + case $$prereq in *ChangeLog);; *) rebuild=:;; esac; \ + done; \ + if $$rebuild; then \ + echo $(SHELL) ./config.status $$target; \ + cd $(top_builddir) && $(SHELL) ./config.status $$target; \ + fi + +.PHONY: configure-subdirs +configure-subdirs distdir: $(DIST_MAKEFILE_LIST) +...@dist_makefile_list@: + dir=`echo $@ | sed 's,^[^/]*$$,.,;s,/[^/]*$$,,'`; \ + test -d $$dir || mkdir $$dir || exit 1; \ + abs_srcdir=`$(lt__cd) $(srcdir) && pwd`; \ + (cd $$dir && $$abs_srcdir/$$dir/configure --with-dist) || exit 1 + + +## -------- ## +## Libltdl. ## +## -------- ## + +include libltdl/Makefile.inc + EXTRA_DIST += $(srcdir)/libltdl/stamp-mk $(m4dir)/lt~obsolete.m4 $(srcdir)/libltdl/Makefile.in: $(srcdir)/libltdl/Makefile.am \ @@ -301,13 +311,6 @@ $(srcdir)/libltdl/config-h.in: $(sub_configure_deps) touch $@ -## -------- ## -## Libltdl. ## -## -------- ## - -include libltdl/Makefile.inc - - ## -------------- ## ## Documentation. ## ## -------------- ## @@ -551,7 +554,7 @@ $(srcdir)/tests/package.m4: $(srcdir)/configure.ac Makefile.am echo 'm4_define([AT_PACKAGE_STRING], [...@package_string@])'; \ echo 'm4_define([AT_PACKAGE_BUGREPORT], [...@package_bugreport@])'; \ echo 'm4_define([AT_PACKAGE_URL], [...@package_url@])'; \ - } | $(edit) > $(srcdir)/tests/package.m4 + } | $(configure_edit) > $(srcdir)/tests/package.m4 tests/atconfig: $(top_builddir)/config.status $(SHELL) ./config.status tests/atconfig @@ -897,7 +900,7 @@ check-recursive: tests/defs tests/defs: $(srcdir)/tests/defs.in rm -f tests/defs.tmp tests/defs; \ input="defs.m4sh"; \ - $(edit) $(srcdir)/tests/defs.in > tests/defs.tmp; \ + $(configure_edit) $(srcdir)/tests/defs.in > tests/defs.tmp; \ mv -f tests/defs.tmp tests/defs # Use `$(srcdir)/tests' for the benefit of non-GNU makes: this is diff --git a/NEWS b/NEWS index 688bdca..90a5e6e 100644 --- a/NEWS +++ b/NEWS @@ -40,6 +40,8 @@ New in 2.2.12 2010-08-??: git version 2.2.11a, Libtool team: - Warnings from Autoconf v2.67-36-g1e604ec about incomplete programs passed to AC_*_IFELSE tests have been fixed. - On IRIX, the test for -Wl,-exported_symbol now also works with gfortran. + - The bug that leaked developer tool paths into the release tarballs + from ./bootstrap is fixed. New in 2.2.10 2010-06-10: git version 2.2.9a, Libtool team: -- 1.7.2.2