| # Maintainer makefile for Automake. Requires GNU make. |
| |
| # Copyright (C) 2012-2024 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 <https://www.gnu.org/licenses/>. |
| |
| 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) |
| 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 |
| $(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) |