Bram Moolenaar wrote:
Tony Mechelynck wrote:

At patchlevel 125 (123-124-125 newly patched), "make reconfig" and "make distclean" both fail as follows (beware of "mailer beautification":
all lines from GUI_INC_LOC= (included) to --enable-mzschemeinterp
(excluded) end in a backslash):

Starting make in the src directory.
If there are problems, cd to the src directory and run make there
I don't know how you start this, but you apparently didn't do "make
distclean" in the "src" directory.
I invoked it in the top directory, and the only rule it executed there was

        cd src && $(MAKE) $@

No variables set at that point.

It's possible that when the timestamp of src/auto/configure changes the
scripts get confused a bit.  The current autoconf implementation isn't
very user friendly when it comes to patching.

I don't think I can do anything to avoid this.  "make distclean" works
fine for me and doesn't run configure first.

It works fine for me too, _except_ when the configure source files have just been patched (as by patch 7.0.123) and the configure output files are older.

I suspect the configure run happens because "make distclean" is trying to "make" the auto/config.mk which is to be "included" at line 289 of src/Makefile (note: "make" is a two-pass process). I suggest the "distclean" target rules (at least) be moved to the top Makefile in order to avoid including config.mk when making that target.

The place of the include should not matter.  The Makefile is first read
completely before dependencies are followed.  "distclean" does not
depend on auto/config.mk.  Perhaps your make program implies this
dependency when including a file?   I would call that a bug (some might
call it a feature...).


I'm using GNU make, version 3.80. From "info make", under "Include", I read the following (about two-thirds of the way down):

[...]
Once it has finished reading makefiles, `make' will try to remake any
that are out of date or don't exist.  *Note How Makefiles Are Remade:
Remaking Makefiles.  Only after it has tried to find a way to remake a
makefile and failed, will `make' diagnose the missing makefile as a
fatal error.
[...]

In this case, since there is a rule to make auto/config.mk, with auto/configure, config.mk.in and config.h.in as prerequisites, and one or more of the latter are newer than the included file config.mk, the latter is "an out-of-date makefile" and make tries to remake it -- by running configure. IOW this is a "documented feature" of GNU make.

Since the include is in src/Makefile and not in vim70/Makefile, by placing the "distclean" rule in the latter (explicitly, not as a call to src/Makefile) we would avoid the include altogether, and thus the check on whether the included makefile is out of date.


Best regards,
Tony.

Reply via email to