automake-patches
[Top][All Lists]
Advanced

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

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


From: Eric Blake
Subject: Re: [PATCH] {maint} bootstrap: add convenience make target
Date: Fri, 27 Apr 2012 11:49:47 -0600
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/20120329 Thunderbird/11.0.1

On 04/27/2012 11:35 AM, Stefano Lattarini wrote:
> 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.

Question: libvirt just hit a problem where we temporarily bumped to
requiring gettext 0.18, then backed that out to 0.17.  Unfortunately, if
you successfully built the tree during the 0.18 window, then
incrementally update, running './bootstrap' was still insufficient to
clean up the damage, since 'autopoint --force' refuses to downgrade any
installed .m4 files.  Are there any such files installed by automake's
boostrap that need to be hand-cleaned, so an incremental bootstrap run
will be guaranteed to install the file as if it were a fresh checkout
instead of leaving the incremental garbage behind?

>  
> -# 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

Why the reindentation?

>  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; \

s/quited/quoted/

> +       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

The idea looks reasonable to me, although I just skimmed the patch
rather than closely reviewing how it all works.

-- 
Eric Blake   address@hidden    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

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