X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=GNUmakefile;h=52c200295d87579e194f6bdc07a05bd340759329;hb=0ac06406dcc6cf9c5f1fbeef340764e73cc8eae0;hp=9d83dbaa3260f5972a89431053592a95d5d50147;hpb=5aa495f5a2133013ef0adf768974779f517ac34d;p=platform%2Fupstream%2Fautomake.git diff --git a/GNUmakefile b/GNUmakefile index 9d83dba..52c2002 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -1,6 +1,6 @@ # Maintainer makefile for Automake. Requires GNU make. -# Copyright (C) 2012 Free Software Foundation, Inc. +# Copyright (C) 2012-2013 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 @@ -15,14 +15,74 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -# 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),) +ifeq ($(filter bootstrap,$(MAKECMDGOALS)),) + +ifeq ($(wildcard Makefile),) + # Any target but 'bootstrap' specified in an unconfigured tree + # is an error, even when the user is running GNU make. $(warning There seems to be no Makefile in this directory.) $(warning You must run ./configure before running 'make'.) $(error Fatal Error) -else - include ./Makefile - include $(srcdir)/syntax-checks.mk endif +include ./Makefile +include $(srcdir)/maintainer/maint.mk +include $(srcdir)/maintainer/syntax-checks.mk + +else # ! bootstrap in $(MAKECMDGOALS) + +other-targets := $(filter-out bootstrap,$(MAKECMDGOALS)) +config-status := $(wildcard ./config.status) + +BOOTSTRAP_SHELL ?= /bin/sh +export BOOTSTRAP_SHELL + +# Allow the user (or more likely the developer) to ask for a bootstrap +# of the package. +# +# Two issues that must be kept in mind in the implementation below: +# +# [1] "make bootstrap" can be invoked before 'configure' is run (and in +# fact, even before it is created, if we are bootstrapping from a +# freshly-cloned checkout). +# +# [2] When re-bootstrapping an already configured tree, we must ensure +# that the automatic remake rules for Makefile and company do not +# kick in, because the tree might be in an inconsistent state (e.g., +# we have just switched from 'maint' to 'master', and have the built +# 'automake' script left from 'maint', but the files 'lib/am/*.am' +# are from 'master': if 'automake' gets run and uses those files -- +# boom!). + +ifdef config-status # Bootstrap from an already-configured tree. + # We need the definition of $(srcdir) in the 'bootstrap' rule + # below. + srcdir := $(shell echo @srcdir@ | $(config-status) --file=-) + ifndef srcdir + $(error Could not obtain $$(srcdir) from $(config-status)) + endif + # Also, if we are re-bootstrapping an already-configured tree, we + # want to re-configure it with the same pre-existing configuration. + old-configure-flags := $(shell $(config-status) --config) +else # Assume we are bootstrapping from an unconfigured srcdir. + srcdir := . + old-configure-flags := +endif + +configure-flags := $(old-configure-flags) $(BOOTSTRAP_CONFIGURE_FLAGS) + +.PHONY: bootstrap +bootstrap: + cd $(srcdir) && $(SHELL) ./bootstrap.sh + $(srcdir)/configure $(configure-flags) + $(MAKE) clean + $(MAKE) check TESTS=t/get-sysconf + +# Ensure that all the specified targets but 'bootstrap' (if any) are +# run with a properly re-bootstrapped tree. +ifdef other-targets +$(other-targets): restart +.PHONY: $(other-targets) restart +restart: bootstrap; $(MAKE) $(AM_MAKEFLAGS) $(other-targets) +endif + +endif # ! bootstrap in $(MAKECMDGOALS)