shithub: mc

Download patch

ref: 9d653c1ec47061e3985be018dfe29ad93a657ec1
parent: 45907dfb026557ab65bcff529384dbfb212e2347
author: Ori Bernstein <[email protected]>
date: Sun May 3 06:57:20 EDT 2015

Run gen/cmd commands in the right subdir.

--- a/mbld/build.myr
+++ b/mbld/build.myr
@@ -36,7 +36,7 @@
 const genall = {b
 	for tn in b.all
 		match gettarg(b.targs, tn)
-		| `Gen gt: run(gt.cmd)
+		| `Gen gt:	runin(b, gt.cmd, gt.dir)
 		| _:	/* skip */
 		;;
 	;;
@@ -49,12 +49,17 @@
 	| `std.Some (`Bin bt):	buildbin(b, bt, false)
 	| `std.Some (`Lib lt):	buildlib(b, lt)
 	| `std.Some (`Test tt):	buildbin(b, tt, false)
-	| `std.Some (`Gen gt):	run(gt.cmd)
-	| `std.Some (`Cmd ct):	run(ct.cmd)
+	| `std.Some (`Gen gt):	runin(b, gt.cmd, gt.dir)
+	| `std.Some (`Cmd ct):	runin(b, ct.cmd, ct.dir)
 	| `std.Some (`Man mt):	/* nothing needed */
 	| `std.None:	std.fatal(1, "invalid target %s\n", targ)
 	;;
 	-> true
+}
+
+const runin = {b, cmd, dir
+	setdir(b, dir)
+	run(cmd)
 }
 
 const buildbin = {b, targ, addsrc
--- a/mbld/parse.myr
+++ b/mbld/parse.myr
@@ -169,8 +169,8 @@
 	| `std.Some "bin":	bintarget(b, p)
 	| `std.Some "test":	testtarget(b, p)
 	| `std.Some "lib":	libtarget(b, p)
-	| `std.Some "gen":	cmdtarget(b, p, false)
-	| `std.Some "cmd":	cmdtarget(b, p, true)
+	| `std.Some "gen":	cmdtarget(b, p, "gen", false)
+	| `std.Some "cmd":	cmdtarget(b, p, "cmd", true)
 	| `std.Some "man":	mantarget(b, p)
 	| `std.Some "sub":	subtarget(b, p)
 	| `std.Some targtype:	failparse(p, "unknown targtype type %s\n", targtype)
@@ -223,7 +223,7 @@
 }
 
 /* gentarget: wordlist {attrs} = wordlist ;; */
-const cmdtarget = {b, p, isgen
+const cmdtarget = {b, p, cmd, iscmd
 	var outlist, deplist, cmdlist
 	var durable
 	var attrs
@@ -230,16 +230,16 @@
 	var gt
 
 	match wordlist(p)
-	| `std.None:	failparse(p, "gen target missing output files\n")
+	| `std.None:	failparse(p, "%s target missing output files\n", cmd)
 	| `std.Some out:
-		if isgen && out.len != 1
-			failparse(p, "gen target takes one name\n")
+		if iscmd && out.len != 1
+			failparse(p, "%s target takes one name\n", cmd)
 		;;
 		outlist = out
 	;;
 
 	skipspace(p)
-	if !isgen && matchc(p, '{')
+	if !iscmd && matchc(p, '{')
 		match attrlist(p)
 		| `std.Some al:	attrs = al
 		| `std.None:	failparse(p, "invalid attr list for %s\n", outlist[0])
@@ -254,9 +254,9 @@
 	;;
 
 	match wordlist(p)
-	| `std.None:	failparse(p, "target missing command\n")
-	| `std.Some cmd:
-		cmdlist = cmd
+	| `std.None:	failparse(p, "%s target missing command\n", cmd)
+	| `std.Some cl:
+		cmdlist = cl
 	;;
 
 	if !matchc(p, ';') || !matchc(p, ';')
@@ -270,7 +270,7 @@
 		| ("durable", ""):	durable = true
 		| ("durable", val):	failparse(p, "durable attr does not take argument\n")
 		| ("dep", depname):	deplist = std.slpush(deplist, depname)
-		| (attrname, val):	failparse(p, "attribute %s not valid on gen targets\n")
+		| (attrname, val):	failparse(p, "attribute %s not valid on %s targets\n", attrname, cmd)
 		;;
 	;;
 
@@ -281,8 +281,10 @@
 		.deps=deplist,
 		.cmd=cmdlist
 	])
-	if !isgen
-		for o in outlist
+	for o in outlist
+		if iscmd
+			addtarg(p, b, o, `Cmd gt)
+		else
 			std.htput(b.gensrc, o, gt)
 			addtarg(p, b, o, `Gen gt)
 		;;
--- a/mbldwrap.sh
+++ b/mbldwrap.sh
@@ -5,8 +5,8 @@
 export MYR_RT=../rt/_myrrt.o
 
 # this should be a bourne compatible shell script.
-if test -f mbld/mbld; then
-	mbld $@
+if test -f ./mbld/mbld; then
+	./mbld/mbld $@
 else
 	./bootstrap.sh
 fi
--- /dev/null
+++ b/test/bld.sub
@@ -1,0 +1,1 @@
+cmd runtest = ./runtest.sh ;;