automake-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] {maint} bootstrap: add convenience make target


From: Stefano Lattarini
Subject: [PATCH] {maint} bootstrap: add convenience make target
Date: Fri, 27 Apr 2012 19:35:56 +0200

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 <address@hidden>
---

  I will push this by tomorrow if there is no objection.

  Regards,
    Stefano

 GNUmakefile |   55 ++++++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 46 insertions(+), 9 deletions(-)

diff --git a/GNUmakefile b/GNUmakefile
index 9d83dba..79cb009 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -15,14 +15,51 @@
 # 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
+    include ./Makefile
+    include $(srcdir)/syntax-checks.mk
 endif
+
+srcdir ?= .
+am__cd ?= CDPATH=. && unset CDPATH && cd
+AM_DEFAULT_VEBOSITY ?= 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 quited for eval; \
+         old_configure_flags=`$(srcdir)/config.status --config`; \
+       else \
+         old_configure_flags=""; \
+       fi; \
+       eval am__bootstrap_configure "$$old_configure_flags"
+       $(AM_V_REMAKE)$(MAKE) clean && $(MAKE) check TESTS=t/get-sysconf
-- 
1.7.9.5




reply via email to

[Prev in Thread] Current Thread [Next in Thread]