shithub: plan9front

Download patch

ref: 485b334608910bbf6930a4f52ca946ba092fad04
parent: 1a444750d6c331f8b96a8df986fbb239dd20d293
author: Amavect <>
date: Sat Aug 28 09:15:02 EDT 2021

cmd/mkfile: major cleanup
Target generation is revised, split into $YTARG and $TARG.
$PROGS is inlined to the cmd target.
%.cpus is added to allow chaining: mk all.cpus
$POWERLESS is added, since dtracy doesn't build yet on ppc.
$DIRS regexp is simplified, simplifing $NOMK.
$cpuobjtype is replaced with cp's recipe for copying itself on $cputype.
$APEDIRS is removed.
The none target is renamed to usage, since it prints out usage.
The ape target is removed.
The dirs target is replaced by all.dirs
%.directories is replaced by %.dirs
The all target serializes directories after cmds to match the install target recipe.
All regexp rules are replaced with nonregexp versions for clarity.
The &:n: rule is removed. Just build the $O.$cmd file.
.y files now build .c files, not .tab.c files, and remove (bc|units|mpc|pc).c:R:
All safeinstall rules are removed.
The cleanfiles rule is renamed to cleancmds and simplified.
%.clean is removed. Just use mk cleancmds.
The install rule serializes cp and yacc before building anything else, avoiding races.
The installall recipe is simplified with the install.cpus prereq.
%.installall is removed. Just use mk $cmd.install.cpus
The $O.cj, %.update, and compilers rules are removed.

--- a/sys/src/cmd/mkfile	Thu Sep  2 09:28:48 2021
+++ b/sys/src/cmd/mkfile	Sat Aug 28 09:15:02 2021
@@ -1,137 +1,74 @@
-TARG=`{ls *.[cy] | sed '/\.tab\.c$/d;s/..$//'}
+YTARG=`{ls | sed -n '/\.y$/s/\.y$//p'}
+TARG=$YTARG `{ls | sed -n '/^cp\.c$/d; /^yacc\.c$/d; /\.c$/s/\.c$//p'}
 HFILES=/$objtype/include/u.h /sys/include/libc.h /sys/include/bio.h
-NOMK=$NOTSYS`{~ $objtype (386 amd64) || echo $PCONLY}
-cpuobjtype=`{sed -n 's/^O=//p' /$cputype/mkfile}
-DIRS=`{echo */mkfile | sed 's,/mkfile *,\n,g' | grep -v '^('$NOMK')$'}
-APEDIRS=bzip2 compress cvs eqn grap gs links-ape lp pic postscript spin \
-	tex troff
-	echo usage: mk cmds, dirs, all, install, installall, '$O'.cmd, cmd.install, or cmd.installall
-cmds:V:	$PROGS
-ape:V: $APE
-	for(i in $APEDIRS) @{
-		cd $i
-		echo mk $i
-		mk $MKFLAGS all
-	}
-	for(i in cc $DIRS) @{
-		cd $i
-		echo mk $i
-		mk $MKFLAGS all
-	}
+POWERLESS=dtracy  # until someone fixes the build for power
+NOMK=`{~ $objtype (386 amd64) || echo $PCONLY} `{~ $objtype power && echo $POWERLESS}
+DIRS=`{echo */mkfile | sed 's,/mkfile *,\n,g' | grep -v '-e^'^('' $NOMK)^'$'}
-all:V:	$PROGS dirs
+	echo 'usage: mk all, all.cpus, cmds, $O.$cmd'
+	echo '	install, install.cpus, $cmd.install, $cmd.install.cpus'
+	echo '	clean, nuke'
-^([$OS])\.(.*):R:	\2.\1
-	$stem1^l $LDFLAGS -o $target $stem2.$stem1
+%.c %.y
+	yacc $YFLAGS -o $stem.c -s $stem $stem.y
-.*\.[$OS]:R:	$HFILES
+%.$O: $HFILES
-(.*)\.([$OS])'$':R:	\1.c
-	$stem2^c $CFLAGS $stem1.c
+%.$O: %.c
+	$CC $CFLAGS $stem.c
-&:n:	$O.&
-	mv $O.$stem $stem
+$O.%: %.$O
+	$LD $LDFLAGS -o $target $stem.$O	%.y
-	$YACC $YFLAGS -s $stem $prereq
+$BIN/%: $O.%
+	cp $O.$stem $target
-%.install:V: $BIN/%
+$BIN/cp: $O.cp
+	`{if(~ $objtype $cputype) echo ./$O.cp; if not echo cp} $prereq $target
-$cpuobjtype._cp:	/bin/cp
-	cp $prereq $target
+$BIN/init: $O.init  # hack, install location is not target
+	cp $O.init /$objtype/init
-%.safeinstall:	$O.% $cpuobjtype._cp
-	test -e $BIN/$stem && mv $BIN/$stem $BIN/_$stem
-	./$cpuobjtype._cp $O.$stem $BIN/$stem
-	for(objtype in $CPUS)
-		mk $stem.safeinstall
-	mk $stem.clean
+%.acid: %.c $HFILES
+	$CC $CFLAGS -a $stem.c >$target
-$BIN/%:	$O.% $cpuobjtype._cp
-	./$cpuobjtype._cp $O.$stem $BIN/$stem
+	for(objtype in $CPUS) mk $MKFLAGS $stem
 	for(i in $DIRS) @{
 		cd $i
 		echo mk $i
 		mk $MKFLAGS $stem
-clean:V:	cleanfiles clean.directories
-nuke:V:		cleanfiles nuke.directories
-directories:V:	install.directories
+cmds:V: $O.cp $O.yacc ${TARG:%=$O.%}
-	rm -f [$OS].out *.[$OS] y.debug y.output [$OS].$TARG [$OS] $TARG bc.c units.c mpc.c [$OS]._cp
+all:V: cmds
+	mk $MKFLAGS all.dirs
-	rm -f [$OS].$stem $stem.[$OS]
+%.install:V: $BIN/%
-	test -e $cpuobjtype._cp || cp /bin/cp $cpuobjtype._cp
+install:V: cp.install
+	mk $MKFLAGS yacc.install
 	mk $MKFLAGS $TARG.install
-	mk $MKFLAGS directories
-	for(objtype in $CPUS)
-		mk $MKFLAGS install
-%.installall:	%.c
-	test -e $cpuobjtype._cp || cp /bin/cp $cpuobjtype._cp
-	for (objtype in $CPUS) {
-		rfork e
-		mk $stem.install &
-	}
-	wait
-	rm -f $stem.[$OS] $ y.debug y.output [$OS].$stem bc.c units.c mpc.c
-%.acid: %.$O $HFILES
-	$CC $CFLAGS -a $stem.c >$target
+	mk $MKFLAGS install.dirs
-(bc|units|mpc|pc).c:R:	\
-	mv $ $stem1.c
+installall:V: install.cpus
-$BIN/init:	$O.init
-	cp $prereq /$objtype/init
+	rm -f *.[$OS] [$OS].* y.debug y.output $YTARG.c *.tab.h
-$O.cj:	cj.$O
-	$LD $LDFLAGS -o $O.cj cj.$O /$objtype/lib/libjpg.a
+clean:V: cleancmds clean.dirs
-	update $stem.c /386/bin/$stem
-	for(i in ?c)
-		if(! ~ $i cc rc) @{
-			cd $i
-			mk clean
-			objtype=$cputype mk install
-			mk clean
-		}
-	for(i in ?c)
-		if(! ~ $i cc rc) @{
-			cd $i
-			mk clean
-			mk installall
-			mk clean
-		}
+nuke:V: cleancmds nuke.dirs
+	rm -f *.acid