emacs-devel
[Top][All Lists]
Advanced

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

Re: Trunk: Build error on FreeBSD


From: Wolfgang Jenkner
Subject: Re: Trunk: Build error on FreeBSD
Date: Mon, 17 Sep 2012 15:04:39 +0200
User-agent: Gnus/5.130006 (Ma Gnus v0.6) Emacs/24.2.50 (berkeley-unix)

On Sat, Sep 15 2012, Wolfgang Jenkner wrote:

> On Sat, Sep 15 2012, Paul Eggert wrote:
>
>> On Fedora 17, 'gmake bootstrap' does delete src/epaths.h
>> as part of the 'bootstrap-clean' action, but it goes on
>> to recreate it as part of './config.status --recheck'
>
> For autoconf 2.69 (info "(autoconf)config.status Invocation") states
>
> `--recheck'
>      Ask `config.status' to update itself and exit (no instantiation).
>
> and (info "(autoconf)Configuration Actions") says that
> AC_CONFIG_COMMANDS is an "instantiating macro".

A patch is at the end, after this rather amusing story:

So, src/epaths.h is created by something else.

Let's begin with the beginning: bootstrap does the following

bootstrap: bootstrap-clean FRC
        cd $(srcdir) && { ./autogen.sh || test $$? -eq 101; }
        $(MAKE_CONFIG_STATUS)
        $(MAKE) $(MFLAGS) info all

When autogen.sh finishes, src/epaths.h has been nuked but config.status
is still there and executable.

The definition of MAKE_CONFIG_STATUS shows that the next step is

./config.status --recheck;

which doesn't recreate src/epaths.h, see above (the --recheck flag was
added in rev. 109962).

At this point, however, the last step has created a new config.status,
which is now newer than Makefile.  Makefile contains a rule to update
itself, which has indeed config.status as prerequisite:

MAKEFILE_NAME = Makefile
$(MAKEFILE_NAME): config.status $(srcdir)/src/config.in \
          $(srcdir)/Makefile.in $(SUBDIR_MAKEFILES_IN)
        ./config.status

Now for GNU make, this is exactly, what happens next, i.e.,
config.status runs and finally recreates src/epaths.h.

I think this rule is triggered before anything else because of
(info "(make)Remaking Makefiles"):

        To this end, after reading in all makefiles, `make' will
        consider each as a goal target and attempt to update it.

For other versions of make the rule is triggered for the lib target.

Wolfgang

Ah, the patch:

=== modified file 'Makefile.in'
--- Makefile.in 2012-09-16 18:49:00 +0000
+++ Makefile.in 2012-09-17 12:51:18 +0000
@@ -358,7 +358,7 @@
 MAKEFILE_NAME = Makefile
 $(MAKEFILE_NAME): config.status $(srcdir)/src/config.in \
           $(srcdir)/Makefile.in $(SUBDIR_MAKEFILES_IN)
-       ./config.status
+       MAKE='${MAKE}' ./config.status
 
 # Don't erase these files if make is interrupted while refreshing them.
 .PRECIOUS: Makefile config.status




reply via email to

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