diff options
author | Stefano Lattarini <stefano.lattarini@gmail.com> | 2012-04-27 18:48:27 +0200 |
---|---|---|
committer | Stefano Lattarini <stefano.lattarini@gmail.com> | 2012-04-27 23:37:49 +0200 |
commit | 56badcd480c91e73e3a7f56beed80e0ebe566eab (patch) | |
tree | f5021fade5194e21173b401f65371cbd59ad725e /GNUmakefile | |
parent | b99b5be0d88d69698f71a5cc85d841c9816f3031 (diff) | |
download | automake-56badcd480c91e73e3a7f56beed80e0ebe566eab.tar.gz |
bootstrap: add convenience make target
Dependencies in the Automake build system are not completely specified
(see for example the commit log of recent commit 'v1.12-10-gab14841',
"build: avoid too greedy rebuilds in the testsuite"). In fact, some of
them cannot even be; for example, Makefile is generated at configure
time from Makefile.in, which should be regenerated by our bleeding-edge
automake script, which is generated by out Makefile -- specifying the
complete chain of dependencies here would bring to a circular dependency
issue.
For this reason, before testing or deploying a change, we are often
forced to perform a full re-bootstrap of the Automake package, to ensure
all our files are actually up-to-date. Until now, this has to be done
manually, thus causing wasted keystrokes and more possibilities of error.
With this change, we introduce a new 'bootstrap' make target to
automatize all the (easy) steps of this re-bootstrapping (plus some
minor bells & whistles since we are at it).
* GNUmakefile: Rewrite to allow an easy bootstrapping and clean rebuild
of the whole package, in particular with the help of ...
(bootstrap): ... this new target.
Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
Diffstat (limited to 'GNUmakefile')
-rw-r--r-- | GNUmakefile | 54 |
1 files changed, 47 insertions, 7 deletions
diff --git a/GNUmakefile b/GNUmakefile index 9d83dbaa3..dcaaf01a6 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -15,14 +15,54 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -# If the user runs GNU make but has not yet run ./configure, -# give them an helpful diagnostic instead of a cryptic error. -am--Makefile := $(wildcard Makefile) -ifeq ($(am--Makefile),) - $(warning There seems to be no Makefile in this directory.) - $(warning You must run ./configure before running 'make'.) - $(error Fatal Error) +ifeq ($(wildcard Makefile),) + ifeq ($(filter bootstrap,$(MAKECMDGOALS)),bootstrap) + # Allow the user (or more likely the developer) to ask for a bootstrap + # of the package; of course, this can happen before configure is run, + # and in fact even before it is created. + else + # Else, If the user runs GNU make but has not yet run ./configure, + # give them an helpful diagnostic instead of a cryptic error. + $(warning There seems to be no Makefile in this directory.) + $(warning You must run ./configure before running 'make'.) + $(error Fatal Error) + endif else include ./Makefile include $(srcdir)/syntax-checks.mk endif + +# To allow bootstrapping also in an unconfigured tree. +srcdir ?= . +am__cd ?= CDPATH=. && unset CDPATH && cd +AM_DEFAULT_VERBOSITY ?= 0 +V ?= $(AM_DEFAULT_VERBOSITY) + +ifeq ($(V),0) + AM_V_BOOTSTRAP = @echo " BOOTSTRAP"; + AM_V_CONFIGURE = @echo " CONFIGURE"; + AM_V_REMAKE = @echo " REMAKE"; +else + AM_V_BOOTSTRAP = + AM_V_CONFIGURE = + AM_V_REMAKE = +endif + +# Must be phony, not to be confused with the 'bootstrap' script. +.PHONY: bootstrap +bootstrap: + $(AM_V_BOOTSTRAP)$(am__cd) $(srcdir) && ./bootstrap + $(AM_V_CONFIGURE)set -e; \ + am__bootstrap_configure () { \ + $(srcdir)/configure $${1+"$$@"} $(BOOTSTRAP_CONFIGURE_FLAGS); \ + }; \ + if test -f $(srcdir)/config.status; then \ + : config.status should return a string properly quoted for eval; \ + old_configure_flags=`$(srcdir)/config.status --config`; \ + else \ + old_configure_flags=""; \ + fi; \ + eval am__bootstrap_configure "$$old_configure_flags" + # The "make check" below is to ensure all the testsuite-required + # files are rebuilt. + $(AM_V_REMAKE)$(MAKE) clean && $(MAKE) check TESTS=t/get-sysconf |