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 ;;