blob: cb58eec68cfa24611af3edd789d02b124ec9e1b5 (
plain)
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
|
#!/bin/rc
flag e +
while(~ $1 -*) switch($1) {
case -d
cd $2
shift 2
}
if(~ $#* 0) outdir=out
if not outdir=$1
mkdir -p $outdir
ifs=() {
abs_srcdir=`{readlink -f . | head -c -1}
abs_outdir=`{readlink -f $outdir | head -c -1}
}
# find relative path from outdir to srcdir
ifs=/ {
srcdir=`{printf %s $abs_srcdir}
outdir=`{printf %s $abs_outdir}
}
if(~ $#outdir 0) ifs=() { rel_srcdir=`{ifs=() pwd | head -c -1} }
if not n=() {
for(i in `{awk 'BEGIN {for (i = 1; i <= '$#outdir'; i++) print i}'}) {
if(~$#n 0 && ! ~ $srcdir($i) $outdir($i)) {
ifs=() { rel_srcdir=`{printf /%s $srcdir($i-) | tail -c +2} }
n=$i
}
if(~ $#n 1) {
if(~ $#rel_srcdir 0) rel_srcdir=..
if not rel_srcdir=../$rel_srcdir
}
}
}
root_srcdir=$abs_srcdir
root_outdir=$abs_outdir
setup_outs=( build.ninja )
setup_ins=()
. ./ninja.rc
fn subgen {
olddir=$dir
dir=$1
srcdir=$root_srcdir/$dir
outdir=$root_outdir/$dir
printf 'generating in %s\n' $dir >[1=2]
setup_outs=( $setup_outs $dir/local.ninja )
setup_ins=( $setup_ins '$root_srcdir'/$dir/gen.rc )
mkdir -p $outdir
cd $srcdir
{
echo 'outdir = '$dir
echo 'srcdir = $root_srcdir/'$dir
. ./gen.rc
} >$outdir/local.ninja
cd $root_srcdir
dir=$olddir
srcdir=$root_srcdir/$dir
outdir=$root_outdir/$dir
}
subgen .
{
set root_srcdir $rel_srcdir
set root_outdir .
include '$root_srcdir/config.ninja'
include '$root_srcdir/rules.ninja'
let generator 1 pool console --\
build $"setup_outs gen '$root_srcdir/setup.rc' '|' $setup_ins
subninja local.ninja
} >$root_outdir/build.ninja.tmp
mv $root_outdir/^( build.ninja.tmp build.ninja )
|