bde> (In the above example, the targets are built concurrently and race
bde> each other. This is bad when the `all' target wins the race. The
bde> `obj' target runs faster, so it usually wins the race except in the
bde> first directory (3dfx)). More .ORDER statements in *.mk are required.
Thank you for giving us a details of this problem. But can we fix this
problem with .ORDER statements? Putting ".ORDER: obj all" or alike to
Makefile doesn't fix to me (maybe I misunderstand the usage of .ORDER
statement)...
bde> `&&' should never be used in shell commands in makefiles, although it
bde> may be only a bad example. This is because multiple commands are
bde> executed in the same shell in the -j case, and `&&' gives non-simple
bde> commands which may defeat the shell's -e setting.
What should we do if we want to check the existence of a directory and
kick one (not two or more) command after chdir to that directory? Much
Makefiles in our FreeBSD repository employ "cd ${dir} && command" to
do this... Should we say
if [ -d ${dir} ]; then \
(cd ${dir}; command) \
else
false
fi
or exist() directive of make(1) ?
***
Anyway, attached below is current sample patch to fix this problem.
"make obj" and "make all" are separated to two individual commands
(redundant 'cd' clause, but it should work).
-- -
Makoto `MAR' MATSUSHITA
Index: Makefile
===================================================================
RCS file: /lab/FreeBSD/FreeBSD.cvs/src/release/Makefile,v
retrieving revision 1.585
diff -c -r1.585 Makefile
*** Makefile 2000/11/12 11:04:11 1.585
--- Makefile 2000/11/13 05:37:12
***************
*** 831,837 ****
@rm -f ${RD}/kernels/*.ko
@cd ${.CURDIR}/../sys/${MACHINE}/conf && config ${KERNEL}
@cd ${.CURDIR}/../sys/compile/${KERNEL} && \
! make kernel-depend && \
make ${KERNEL_FLAGS} modules && \
make modules-reinstall DESTDIR=${RD}/kernels && \
--- 831,837 ----
@rm -f ${RD}/kernels/*.ko
@cd ${.CURDIR}/../sys/${MACHINE}/conf && config ${KERNEL}
@cd ${.CURDIR}/../sys/compile/${KERNEL} && \
! make modules-depend && \
make ${KERNEL_FLAGS} modules && \
make modules-reinstall DESTDIR=${RD}/kernels && \
Index: Makefile.alpha
===================================================================
RCS file: /lab/FreeBSD/FreeBSD.cvs/src/sys/conf/Makefile.alpha,v
retrieving revision 1.79
diff -c -r1.79 Makefile.alpha
*** Makefile.alpha 2000/10/29 09:47:50 1.79
--- Makefile.alpha 2000/11/13 10:09:34
***************
*** 310,320 ****
modules:
@mkdir -p ${.OBJDIR}/modules
! cd $S/modules && env ${MKMODULESENV} ${MAKE} obj all
modules-depend:
@mkdir -p ${.OBJDIR}/modules
! cd $S/modules && env ${MKMODULESENV} ${MAKE} obj depend
modules-clean:
cd $S/modules && env ${MKMODULESENV} ${MAKE} clean
--- 310,322 ----
modules:
@mkdir -p ${.OBJDIR}/modules
! cd $S/modules && env ${MKMODULESENV} ${MAKE} obj
! cd $S/modules && env ${MKMODULESENV} ${MAKE} all
modules-depend:
@mkdir -p ${.OBJDIR}/modules
! cd $S/modules && env ${MKMODULESENV} ${MAKE} obj
! cd $S/modules && env ${MKMODULESENV} ${MAKE} depend
modules-clean:
cd $S/modules && env ${MKMODULESENV} ${MAKE} clean
Index: Makefile.i386
===================================================================
RCS file: /lab/FreeBSD/FreeBSD.cvs/src/sys/conf/Makefile.i386,v
retrieving revision 1.212
diff -c -r1.212 Makefile.i386
*** Makefile.i386 2000/10/29 09:47:50 1.212
--- Makefile.i386 2000/11/13 10:10:03
***************
*** 271,281 ****
modules:
@mkdir -p ${.OBJDIR}/modules
! cd $S/modules && env ${MKMODULESENV} ${MAKE} obj all
modules-depend:
@mkdir -p ${.OBJDIR}/modules
! cd $S/modules && env ${MKMODULESENV} ${MAKE} obj depend
modules-clean:
cd $S/modules && env ${MKMODULESENV} ${MAKE} clean
--- 271,283 ----
modules:
@mkdir -p ${.OBJDIR}/modules
! cd $S/modules && env ${MKMODULESENV} ${MAKE} obj
! cd $S/modules && env ${MKMODULESENV} ${MAKE} all
modules-depend:
@mkdir -p ${.OBJDIR}/modules
! cd $S/modules && env ${MKMODULESENV} ${MAKE} obj
! cd $S/modules && env ${MKMODULESENV} ${MAKE} depend
modules-clean:
cd $S/modules && env ${MKMODULESENV} ${MAKE} clean
Index: Makefile.ia64
===================================================================
RCS file: /lab/FreeBSD/FreeBSD.cvs/src/sys/conf/Makefile.ia64,v
retrieving revision 1.4
diff -c -r1.4 Makefile.ia64
*** Makefile.ia64 2000/10/29 09:47:50 1.4
--- Makefile.ia64 2000/11/13 10:10:41
***************
*** 275,285 ****
modules:
@mkdir -p ${.OBJDIR}/modules
! cd $S/modules && env ${MKMODULESENV} ${MAKE} obj all
modules-depend:
@mkdir -p ${.OBJDIR}/modules
! cd $S/modules && env ${MKMODULESENV} ${MAKE} obj depend
modules-clean:
cd $S/modules && env ${MKMODULESENV} ${MAKE} clean
--- 275,287 ----
modules:
@mkdir -p ${.OBJDIR}/modules
! cd $S/modules && env ${MKMODULESENV} ${MAKE} obj
! cd $S/modules && env ${MKMODULESENV} ${MAKE} all
modules-depend:
@mkdir -p ${.OBJDIR}/modules
! cd $S/modules && env ${MKMODULESENV} ${MAKE} obj
! cd $S/modules && env ${MKMODULESENV} ${MAKE} depend
modules-clean:
cd $S/modules && env ${MKMODULESENV} ${MAKE} clean
Index: Makefile.pc98
===================================================================
RCS file: /lab/FreeBSD/FreeBSD.cvs/src/sys/conf/Makefile.pc98,v
retrieving revision 1.110
diff -c -r1.110 Makefile.pc98
*** Makefile.pc98 2000/11/05 14:31:17 1.110
--- Makefile.pc98 2000/11/13 10:11:03
***************
*** 274,284 ****
modules:
@mkdir -p ${.OBJDIR}/modules
! cd $S/modules && env ${MKMODULESENV} ${MAKE} obj all
modules-depend:
@mkdir -p ${.OBJDIR}/modules
! cd $S/modules && env ${MKMODULESENV} ${MAKE} obj depend
modules-clean:
cd $S/modules && env ${MKMODULESENV} ${MAKE} clean
--- 274,286 ----
modules:
@mkdir -p ${.OBJDIR}/modules
! cd $S/modules && env ${MKMODULESENV} ${MAKE} obj
! cd $S/modules && env ${MKMODULESENV} ${MAKE} all
modules-depend:
@mkdir -p ${.OBJDIR}/modules
! cd $S/modules && env ${MKMODULESENV} ${MAKE} obj
! cd $S/modules && env ${MKMODULESENV} ${MAKE} depend
modules-clean:
cd $S/modules && env ${MKMODULESENV} ${MAKE} clean
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message