On Thu, 19 Apr 2001, Ruslan Ermilov wrote:

> Attached is the Makefile that demonstrates the problem.  Run it like this:
> 
>       make obj; make all
> 
> Then try:
> 
>       make install
> 
> And then try:
> 
>       make -j2 install
> 
> Note the difference.  This fixes the problem:
> 
> --- Makefile  Thu Apr 19 11:33:04 2001
> +++ Makefile  Thu Apr 19 11:36:20 2001
> @@ -8,6 +8,7 @@
>  beforeinstall: .SILENT
>       cd ${.CURDIR}; \
>       ${INSTALL} ${COPY} -m ${NOBINMODE} Makefile ${DESTDIR}/tmp
> +     cd ${.OBJDIR}
>       pwd
>       ${INSTALL} ${COPY} -m ${NOBINMODE} foo ${DESTDIR}/tmp
> 
> I'm not sure if this a make(1) bug or a feature, as both NetBSD and
> OpenBSD behave the same.  But I'm pretty sure this is a bug.  Will?

This is a feature of parallel make.  Parallel make combines all of
the commands for each target into a single shell command (if possible?).
Thus `cd's in one command affect subsequent commands.  This feature
can be controlled using the undocumented .SINGLESHELL directive.
Unfortunately, the implementation of .SINGLESHELL is too primitive
for .SINGELSHELL to be worth using.  Using it is equivalent to using
-B to turn off -j.

This has caused problems before.  See the log message for rev.1.177
of src/Makefile for a more complicated example.  (The problem for
`cd's is obvious compared with the one for `&&'s.  In the example in
log message, the point of the `cd's is to maximise the damage caused
by combining non- -j-aware commands.

Bruce


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to