Subject: yet more parallel-make races
To: None <tech-install@netbsd.org, current-users@netbsd.org>
From: Chuck Silvers <chuq@chuq.com>
List: tech-install
Date: 09/13/2005 08:15:02
--ikeVEW9yuYc//A+q
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

hi,

I found a couple more problems with parallel makes.

(1) sys/arch/i386/stand

	there's trouble with the shared "lib" directories.  sometimes
	the "mkdir -p" from one of the subdirectories of lib will create
	a lib directory before the LIBOBJ stuff has a chance to make
	a lib symlink.  switching to using .BEGIN for these seems to
	work better.

(2) usr.bin/tn3270

	both tn3270/tn3270 and tn3270/mset want to depend on
	tools/mkastosc/mkastosc, and sometimes they both try to build it
	and collide.  or maybe they collide with the original SUBDIR
	processing.  either way adding a .WAIT to the SUBDIRS list
	after "tools" should take care of this.

both patches are attached, anyone have any objections to me applying them?

-Chuck

--ikeVEW9yuYc//A+q
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="diff.i386stand-race"

? src/sys/arch/i386/stand/z
Index: src/sys/arch/i386/stand/Makefile.booters
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/stand/Makefile.booters,v
retrieving revision 1.60
diff -u -p -r1.60 Makefile.booters
--- src/sys/arch/i386/stand/Makefile.booters	5 May 2005 18:03:04 -0000	1.60
+++ src/sys/arch/i386/stand/Makefile.booters	13 Sep 2005 15:06:20 -0000
@@ -49,30 +49,16 @@ KERNMISCMAKEFLAGS="LIBKERN_ARCH=i386"
 CLEANFILES+= ${STARTFILE} vers.c ${BASE}.list
 SRCS+=	vers.c
 
-.if !make(obj) && !make(clean) && !make(cleandir)
-.NOPATH: machine x86
-.endif
-
-depend dependall realdepend realall: machine x86 lib
 CLEANFILES+= machine x86
 
-machine:: x86
-	-rm -f $@
-	ln -s $S/arch/i386/include $@
-
-x86::
-	-rm -f $@
-	ln -s $S/arch/x86/include $@
-
-${OBJS} ${ROMSTART} ${DOSSTART} ${PXESTART}: machine x86 lib
-
-lib:
+.if !make(obj) && !make(clean) && !make(cleandir)
+.BEGIN:
+	-rm -f machine && ln -s $S/arch/i386/include machine
+	-rm -f x86 && ln -s $S/arch/x86/include x86
 .ifdef LIBOBJ
-	-rm -f $@
-	ln -s ${LIBOBJ}/lib .
-	[ -d ${LIBOBJ}/lib ] || mkdir ${LIBOBJ}/lib
-.else
-	mkdir lib
+	-rm -f lib && ln -s ${LIBOBJ}/lib lib
+	mkdir -p ${LIBOBJ}/lib
+.endif
 .endif
 
 ### find out what to use for libkern
Index: src/sys/arch/i386/stand/boot/Makefile.boot
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/stand/boot/Makefile.boot,v
retrieving revision 1.23
diff -u -p -r1.23 Makefile.boot
--- src/sys/arch/i386/stand/boot/Makefile.boot	22 Jun 2005 06:06:34 -0000	1.23
+++ src/sys/arch/i386/stand/boot/Makefile.boot	13 Sep 2005 15:06:20 -0000
@@ -82,30 +82,16 @@ SAMISCMAKEFLAGS+= SA_INCLUDE_NET=no	# Ne
 
 I386_STAND_DIR?= $S/arch/i386/stand
 
-.if !make(obj) && !make(clean) && !make(cleandir)
-.NOPATH: machine x86
-.endif
-
-depend dependall realdepend realall: machine x86 lib
 CLEANFILES+= machine x86
 
-machine::
-	-rm -f $@
-	ln -s $S/arch/i386/include $@
-
-x86::
-	-rm -f $@
-	ln -s $S/arch/x86/include $@
-
-${OBJS}: machine x86 lib
-
-lib:
+.if !make(obj) && !make(clean) && !make(cleandir)
+.BEGIN:
+	-rm -f machine && ln -s $S/arch/i386/include machine
+	-rm -f x86 && ln -s $S/arch/x86/include x86
 .ifdef LIBOBJ
-	-rm -f $@
-	ln -s ${LIBOBJ}/lib .
-	[ -d ${LIBOBJ}/lib ] || mkdir ${LIBOBJ}/lib
-.else
-	mkdir lib
+	-rm -f lib && ln -s ${LIBOBJ}/lib lib
+	mkdir -p ${LIBOBJ}/lib
+.endif
 .endif
 
 ### find out what to use for libi386
Index: src/sys/arch/i386/stand/bootxx/Makefile.bootxx
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/stand/bootxx/Makefile.bootxx,v
retrieving revision 1.17
diff -u -p -r1.17 Makefile.bootxx
--- src/sys/arch/i386/stand/bootxx/Makefile.bootxx	5 May 2005 18:03:04 -0000	1.17
+++ src/sys/arch/i386/stand/bootxx/Makefile.bootxx	13 Sep 2005 15:06:20 -0000
@@ -86,30 +86,16 @@ CPPFLAGS+= -DLIBSA_SINGLE_FILESYSTEM=xxf
 
 I386_STAND_DIR?= $S/arch/i386/stand
 
-.if !make(obj) && !make(clean) && !make(cleandir)
-.NOPATH: machine x86
-.endif
-
-depend dependall realdepend realall: machine x86 lib
 CLEANFILES+= machine x86
 
-machine::
-	-rm -f $@
-	ln -s $S/arch/i386/include $@
-
-x86::
-	-rm -f $@
-	ln -s $S/arch/x86/include $@
-
-${OBJS}: machine x86 lib
-
-lib:
+.if !make(obj) && !make(clean) && !make(cleandir)
+.BEGIN:
+	-rm -f machine && ln -s $S/arch/i386/include machine
+	-rm -f x86 && ln -s $S/arch/x86/include x86
 .ifdef LIBOBJ
-	-rm -f $@
-	ln -s ${LIBOBJ}/lib .
-	[ -d ${LIBOBJ}/lib ] || mkdir ${LIBOBJ}/lib
-.else
-	mkdir lib
+	-rm -f lib && ln -s ${LIBOBJ}/lib lib
+	mkdir -p ${LIBOBJ}/lib
+.endif
 .endif
 
 ### find out what to use for libi386

--ikeVEW9yuYc//A+q
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="diff.tn3270-race"

Index: src/usr.bin/tn3270/Makefile
===================================================================
RCS file: /cvsroot/src/usr.bin/tn3270/Makefile,v
retrieving revision 1.7
diff -u -p -r1.7 Makefile
--- src/usr.bin/tn3270/Makefile	5 Sep 1998 14:58:51 -0000	1.7
+++ src/usr.bin/tn3270/Makefile	13 Sep 2005 15:10:17 -0000
@@ -2,7 +2,7 @@
 
 .if make(clean) || make(cleandir) || make(distclean) || make(depend) || \
 	make(obj) || make(lint)
-SUBDIR += tools
+SUBDIR += tools .WAIT
 .endif
 SUBDIR += tn3270 mset
 

--ikeVEW9yuYc//A+q--