Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 1 Aug 2000 16:42:16 +0200
From:      Marc Espie <Marc.Espie@liafa.jussieu.fr>
To:        freebsd-hackers@freebsd.org
Subject:   Pointer to people `in charge' of FreeBSD make ?
Message-ID:  <20000801164216.A14226@liafa1.liafa.jussieu.fr>

next in thread | raw e-mail | index | archive | help
I'm currently over-hauling OpenBSD make.

During my investigations, I've stumbled upon an oddity of the way
VPATH works.

There are currently two hooks in make that handle VPATH.
- in dir.c, file name lookups resort to handling along the VPATH
when a file is not found in the current directory.
- the suffix handling rules know how to handle VPATH.

One part is left in the cold: explicit target rules. They're always
looked up with Targ_FindNode, and don't take VPATH into account.

Consider the following Makefile:

VPATH=some_dir

a: b
	cp $> a

some_dir/b:
	echo "toto" >$@


If you say `make', it will answer "don't know how to make b".
If you first say `make some_dir/b', then it will know how to make a,
looking up b in the right place.

You can get even weirder results if the some_dir/b: rule includes some
dependencies, because such dependencies won't be checked, even though
they apply to the same file.

This is completely inconsistent, and very error-prone.
Besides, I've had a hard time explaining this twice or thrice to gnu-make
advocates... as that program does the right thing in such a case.

The fix is probably not too hard. All revolves around Job_CheckCommands(),
which checks that a node is a `real' node first. Strategy is as follows:
- let the make parser generate false nodes as usual.
- around Job_CheckCommands, if the node is not real, try to see if there
is a more `real' node (e.g., one with dependencies and recreation rules)
along the path, and substitute it instead. (a bit icky, as the vpath
lookup rules in dir.c are not too fun, but I know how to do it).

Currently, what I'm interested in is collaboration: this changes the semantics
of make slightly, in a non-obvious way. If OpenBSD performs the change in a 
dark corner, we'll be able to accept Makefiles that other BSD* may complain 
about.  Spewing a `warning, non standard feature used' is always possible, 
but it would be better if we could agree on a common plan...
-- 
	Marc Espie		
|anime, sf, juggling, unicycle, acrobatics, comics...
|AmigaOS, OpenBSD, C++, perl, Icon, PostScript...
| `real programmers don't die, they just get out of beta'


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20000801164216.A14226>