Re: VPATH and Relative vs. Absolute pathnames

2003-12-07 Thread Bob Friesenhahn
On Sun, 7 Dec 2003, John Darrington wrote:

 Is there any way to instruct automake to only use relative pathnames
 in its makefile?  This way, one could actually use the VPATH feature,
 which is essential if you're building a project under certain CM
 systems.

In conjunction with Autoconf, Automake already provides the ability to
build from outside of the source tree.  What purpose do you need to
use VPATH for?

Bob
==
Bob Friesenhahn
[EMAIL PROTECTED]
http://www.simplesystems.org/users/bfriesen





Re: VPATH and Relative vs. Absolute pathnames

2003-12-07 Thread John Darrington
On Sun, Dec 07, 2003 at 09:24:30AM -0600, Bob Friesenhahn wrote:
 On Sun, 7 Dec 2003, John Darrington wrote:
 
  Is there any way to instruct automake to only use relative pathnames
  in its makefile?  This way, one could actually use the VPATH feature,
  which is essential if you're building a project under certain CM
  systems.
 
 In conjunction with Autoconf, Automake already provides the ability to
 build from outside of the source tree.  

That's a good feature, but not the same thing.


 What purpose do you need to use VPATH for?

Tools such as aegis place source files in a  heirachial way.  There
might be three (or more) repositories where source is found, and there is
a defined search order.  For example if a project has three files,
src1.c src2.c and src3.c at any one time they might be located at
follows:

/work/foo/baseline/src1.c
/work/foo/branch1/baseline/src2.c
/home/john/development/foo/src3.c


Typically there are three ways to manage this situation:

1.  Create symbolic links from the top of the vsearch path to the
actual files.  (Doesn't scale well for large projects).

2.  Use a translucent/union/stacking filesystem.  Should work ok, but
very few systems have such features at the moment.

3.  Use the VPATH feature of Make


In my opionion, 3 is the simplest and easiest, you would just set, in
this example: 
 VPATH=/home/john/development/foo:/work/foo/branch1/baseline:/work/foo/baseline

then when make comes across a rule like

%.o: %.c
 $(CC) -c -o $@ $

it magically picks the correct thing.

However autoconf/automake breaks everything, because it puts absolute
paths in the targets and/or dependencies

J'


 

-- 
PGP Public key ID: 1024D/2DE827B3 
fingerprint = 8797 A26D 0854 2EAB 0285  A290 8A67 719C 2DE8 27B3
See http://wwwkeys.pgp.net or any PGP keyserver for public key.




pgp0.pgp
Description: PGP signature