On Wed, 28 Nov 2007, Martin Dorey wrote:

http://www.gnu.org/software/make/manual/make.html#Makefile-Basics
suggests you follow your final suggestion, as you (seem to) have a
$(srcdir) variable.  It suggests ./ otherwise, although I've tripped
over doing that and generally use $(CURDIR)/ myself.

Thanks for the link; I knew I'd read something like that before.


It's helpful elsewhere that ./file and file are considered to be the
same file.

Its nice that the two are considered the same -- when we are determining dependencies. It is not so nice when this changes the command line.

It still seems reasonable to expect that

cat <<_EOF > Makefile
test.out: $(srcdir)/script.sh
       $< > $@
_EOF

should work in all cases -- not just when '.' is in $PATH or $(srcdir) is other than '.'. Though I guess

cat <<_EOF > Makefile
test.out: script.sh
       $(srcdir)/$< > $@
_EOF

isn't too bad, now that I know to use it.

If it is decided that canonicalization of automatic variables is The Right Thing(TM), then their section in the manual should probably be updated to make that clear. Having read that section a few times, I never guessed they were being filtered.
http://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html

It would also be good to close the relevant bug reports as "invalid" or "won't fix" and leave a note as to the correct makefile syntax (e.g. use $(srcdir) in the rules; not in the prerequisites).

Later,
Daniel


-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of
[EMAIL PROTECTED]
Sent: Wednesday, November 28, 2007 12:53
To: bug-make@gnu.org
Subject: canonicalization/stripping of leading ./

Here's an example makefile:

cat <<_EOF > Makefile
test.out: ./script.sh
       $< > $@
_EOF

Now when I run make, it executes
`script.sh > test.out`
instead of
`./script.sh > test.out`

This is all fine when 'PATH=.:<stuff>', and sometimes acceptable when
'PATH=<stuff>:.'; but in the general case, its very bad.

I'm working around this by changing my makefiles to

cat <<_EOF > Makefile
test.out: ./script.sh
       ./$< > $@
_EOF

but that doesn't seem too good either; maybe it should always be

cat <<_EOF > Makefile
test.out: $(srcdir)/script.sh
       $(srcdir)/$< > $@
_EOF

??

Bug reports #15338 and #17230 cover this same issue, but I haven't seen
any followup, neither on Savannah nor on these lists.

The closest discussion I could find was #10708, mentioned in
http://lists.gnu.org/archive/html/help-make/2006-03/msg00231.html

What's the official scoop?  Are there plans to fix/change this behavior?

In the meantime, how should I code the above Makefile (where an output
file should be rebuilt whenever its script changes)?

Thanks,
Daniel


_______________________________________________
Bug-make mailing list
Bug-make@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-make

Reply via email to