On Mon, 5 Nov 2007, Julian Stacey wrote:

JS>I found some unexpected behaviour within make on 6.2-RELEASE,
JS>Not sure if it's a bug, or proper behaviour. Comment please ?
JS>
JS>Make seems to be being too clever, evaluating where it
JS>think the CWD (current working directory) is, whereas I think
JS>it should better let the external per line shell discover for itself.
JS>Make fails to realise that because of  symbolic links, it is not
JS>acceptable to shorten
JS>     cd /site/home/jhs/pics/.. ; rdist
JS>to
JS>     cd /site/home/jhs ; rdist
JS>
JS>How I discovered the behaviour:
JS>     I keep my data split in 2: 
JS>             Some small enough to back up to a USB stick, eg:
JS>                     /usra/home/jhs/._/txt/  
JS>             & some bulky eg:
JS>                     /usra/jhs/xtra/pics
JS>     using symbolic links eg
JS>             /site/home      -> /usra/home
JS>             ~/.HOME         -> /site/home/jhs/._
JS>             ~/txt           -> .HOME/txt
JS>             ~/pics          -> .HOME/pics
JS>             ~/._/pics       -> xtra/pics
JS>             ~/._/xtra/pics  -> /usra/jhs/xtra/pics
JS>
JS>     Some links are more complex than shown, for reasons
JS>     beyond scope of this posting, but it's all been working fine
JS>     for 8 years & I've had patches to 2.2.8 onward
JS>     kernels to increase the allowed traversal count for sym
JS>     links etc
JS>     
http://berklix.com/~jhs/src/bsd/fixes/FreeBSD/src/gen/sys/sys/param.h.REL=ALL.diff
JS>
JS>It's been fine while I manually ran:
JS>     cd ; rdist `hostname -s`
JS>     cd ~/xtra/LN  ; rdist xtra      # LN -> /usra/jhs/xtra
JS>The make behaviour was noticed when I embeded those lines in a Makefile.
JS>
JS>Here's some to try yourself:
JS># Warning cant use eg ~/pics/../Distfile
JS>bug1:
JS>     -cd ~/txt/.. && pwd
JS>     @#      /usr/home/jhs
JS>     -cd ~/txt/.. && /bin/pwd
JS>     @#      /usra/home/jhs
JS>     -cd ~/txt && cd .. && /bin/pwd
JS>     @#      /usra/home/jhs
JS>     -cd ~/._/txt/.. && /bin/pwd
JS>     @#      /usra/home/jhs/._
JS>bug2:
JS>     cd ~/pics && pwd
JS>     @#      /usr/home/jhs/pics
JS>     cd ~/pics/.. && pwd
JS>     @#      /usr/home/jhs
JS>     cd ~/pics && /bin/pwd
JS>     @#      /usra/jhs/xtra/pics
JS>     cd ~/pics/.. && /bin/pwd
JS>     @#      /usra/home/jhs
JS>
JS>See from results marked @#, make is evaluating eg
JS>     cd ~/txt/.. ; rdist
JS>as if it's equivalent to 
JS>     cd ~; rdist
JS>& it's Not equivalent,
JS>if I do eg:
JS>     cd ~/pics/.. ; rdist 
JS>rdist6 runs using the Distfile in my ~/Distfile, rather than different
JS>/usra/jhs/xtra/Distfile.
JS>
JS>I can cludge round this make behaviour, eg by in Makefile avoiding the ../ in
JS>     cd ~/xtra/pics/.. && rdist -f /usra/jhs/xtra/Distfile pics
JS>but seems make is trying to be too clever, & failing, & make would be better
JS>if it did less.
JS>
JS>(BTW, to avoid distracting answers: I know make invokes a seperate
JS>shell per line, that's not the issue, also not the issue is /usr/obj/
JS>or which external interactive shell I use).

Are you sure that this is not a problem with /bin/sh? Make always execs a 
shell if it finds special symbols like ';' in the line. It does not 
interprete the cd.

What shell are you using (I mean in which shell did you do the successful 
tests above)? Try something like:

.SHELL: name="sh" path="/path/to/your/shell"

in the Makefile (given that you're not using a c-shell). If it works then 
the problem is in /bin/sh.

harti
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to