From owner-freebsd-stable Mon Nov 13 2:51:34 2000 Delivered-To: freebsd-stable@freebsd.org Received: from updraft.jp.freebsd.org (updraft.jp.FreeBSD.ORG [210.157.158.42]) by hub.freebsd.org (Postfix) with ESMTP id 30A6437B479; Mon, 13 Nov 2000 02:51:20 -0800 (PST) Received: from castle2.jp.FreeBSD.org (castle2.jp.FreeBSD.org [210.226.20.120]) by updraft.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id TAA05298; Mon, 13 Nov 2000 19:51:16 +0900 (JST) (envelope-from matusita@jp.FreeBSD.org) Received: from localhost (localhost [127.0.0.1]) by castle2.jp.FreeBSD.org (8.11.0+3.3W/8.11.0) with ESMTP/inet id eADApDs01548; Mon, 13 Nov 2000 19:51:14 +0900 (JST) (envelope-from matusita@jp.FreeBSD.org) Cc: current@FreeBSD.ORG, stable@FreeBSD.ORG In-Reply-To: References: <3A0F9ED8.A56CA34E@cup.hp.com> X-Face: '*aj"d@ijeQ:/X}]oM5c5Uz{ZZZk90WPt>a^y4$cGQp8:!H\W=hSM;PuNiidkc]/%,;6VGu e+`&APmz|P;F~OL/QK%;P2vU>\j4X.8@i%j6[%DTs_3J,Fff0)*oHg$A.cDm&jc#pD24WK@{,"Ef!0 P\):.2}8jo-BiZ?X&t$V X-User-Agent: Mew/1.94.2 XEmacs/21.2 (Notus) X-FaceAnim: (-O_O-)(O_O- )(_O- )(O- )(- -)( -O)( -O_)( -O_O)(-O_O-) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Dispatcher: imput version 20000228(IM140) Lines: 198 From: Makoto MATSUSHITA To: bde@zeta.org.au Subject: Re: "make modules" kicks the first module directory twice Date: Mon, 13 Nov 2000 19:51:11 +0900 Message-Id: <20001113195111R.matusita@jp.FreeBSD.org> Sender: owner-freebsd-stable@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG 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 majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message