Re: Problems with configure after patch 123

2006-10-10 Thread A.J.Mechelynck

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.


Re: Problems with configure after patch 123

2006-10-10 Thread Bram Moolenaar

Tony Mechelynck wrote:

  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.

But I don't want to update auto/config.mk.  I can understand that it's
build when it does not exist, otherwise the only alternative is giving
an error message and die.  But when it exists it should be used as-is.
I would rather call this a bug than a feature, I didn't specify the file
should be updated.  Isn't there a way to disable this feature?

 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.

make distclean should work in the src directory, like everything
else.

-- 
The startling truth finally became apparent, and it was this: Numbers
written on restaurant checks within the confines of restaurants do not follow
the same mathematical laws as numbers written on any other pieces of paper in
any other parts of the Universe.  This single statement took the scientific
world by storm.  So many mathematical conferences got held in such good
restaurants that many of the finest minds of a generation died of obesity and
heart failure, and the science of mathematics was put back by years.
-- Douglas Adams, The Hitchhiker's Guide to the Galaxy

 /// Bram Moolenaar -- [EMAIL PROTECTED] -- http://www.Moolenaar.net   \\\
///sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\download, build and distribute -- http://www.A-A-P.org///
 \\\help me help AIDS victims -- http://ICCF-Holland.org///


Re: Problems with configure after patch 123

2006-10-10 Thread A.J.Mechelynck

Bram Moolenaar wrote:

Tony Mechelynck wrote:


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.


But I don't want to update auto/config.mk.  I can understand that it's
build when it does not exist, otherwise the only alternative is giving
an error message and die.  But when it exists it should be used as-is.
I would rather call this a bug than a feature, I didn't specify the file
should be updated.  Isn't there a way to disable this feature?


[...]

Apparently the make philosophy is that one wants to use the most up-to-date 
makefiles possible. I'm not sure I understand fully from the make info text if 
and how you can avoid to remake an existing makefile if it's present but 
out-of-date.


One method would of course be to drop the make rules for config.mk -- but what 
would happen when doing make the first time without a target? Another 
possibility would be to touch the config.mk file to make it newer than the 
rest -- but is it possible to do that other than manually?


It says in the info text for make that a makefile target with two colons and 
no prerequisites will never be remade to avoid an endless loop (unlike a 
non-makefile target with two colons and no prerequisites, which is remade 
unconditionally IIUC). But double-colon rules are somewhat esoteric and I'm 
not sure whether this property is usable.



Best regards,
Tony.