1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
use std
use "config"
use "deps"
use "opts"
use "parse"
use "types"
use "util"
pkg bld =
const cleanall : (b : build# -> bool)
const clean : (b : build#, targ : byte[:] -> bool)
const cleanmyr : (b : build#, mt : myrtarg# -> void)
;;
const cleanall = {b
for tn : b.all
match gettarg(b.targs, tn)
| `Bin bt:
cleanup(b, bt, bt.inputs)
| `Lib lt:
cleanup(b, lt, lt.inputs)
| `Gen gt:
for f : gt.out
if !gt.durable && std.remove(f)
mbldput("\tclean {}\n", f)
;;
;;
| `Data _: /* nothing to do */
| `Cmd _: /* nothing to do */
| `Man _: /* nothing to do */
;;
;;
-> true
}
const clean = {b, targ
for tn : b.all
match gettarg(b.targs, tn)
| `Bin bt:
if std.sleq(bt.name, targ)
cleanup(b, bt, bt.inputs)
;;
| `Lib lt:
if std.sleq(lt.name, targ)
cleanup(b, lt, lt.inputs)
;;
| `Gen gt:
for f : gt.out
if !gt.durable && std.remove(f)
mbldput("\tclean {}\n", f)
;;
;;
| `Data _: /* nothing to do */
| `Cmd _: /* nothing to do */
| `Man _: /* nothing to do */
;;
;;
-> true
}
const cleanmyr = {b, targ
cleanup(b, targ, targ.inputs)
}
const cleanup = {b, targ, leaves
var mchammer_files /* cant touch this */
var keys, dg, test
/*
we want to automatically add 'clean' sources since otherwise,
mbld won't be able to clean code after changing a build file.
*/
setdir(b, targ.dir)
dg = myrdeps(b, targ, true, true)
mchammer_files = std.mkht(std.strhash, std.streq)
for l : leaves
std.htput(mchammer_files, l, true)
;;
keys = std.htkeys(dg.deps)
for k : keys
if !std.htgetv(mchammer_files, k, false) && std.remove(k)
mbldput("\tclean {}\n", k)
;;
test = std.pathcat("test", k)
if std.remove(test)
mbldput("\tclean {}\n", test)
;;
std.slfree(test)
;;
}
|