diff options
| author | Michael Forney <mforney@mforney.org> | 2016-04-14 00:21:44 -0700 |
|---|---|---|
| committer | Michael Forney <mforney@mforney.org> | 2016-04-15 02:10:08 -0700 |
| commit | 20a3b2ad4421763e4b19d7897cc5addecf06898d (patch) | |
| tree | ecc00da23403820c355f5ff81f9da2ae8531f466 /setup.rc | |
| parent | b3a4eb3f51f308a1d7fdde8a7cf77f4b8df2f308 (diff) | |
Allow independent generation of ninja files
Diffstat (limited to 'setup.rc')
| -rwxr-xr-x | setup.rc | 125 |
1 files changed, 66 insertions, 59 deletions
@@ -2,86 +2,93 @@ flag e + -while(~ $1 -*) switch($1) { -case -d - cd $2 - shift 2 +fn usage { + { + echo 'usage: '$0' [-b builddir]' + echo ' '$0' [-n]' + } >[1=2] + exit 2 } -if(~ $#* 0) outdir=out -if not outdir=$1 -mkdir -p $outdir +builddir=out +norecurse=() -ifs=() { - abs_srcdir=`{readlink -f . | head -c -1} - abs_outdir=`{readlink -f $outdir | head -c -1} +while(~ $1 -*) switch($1) { +case -b + builddir=$2 + shift 2 +case -n + norecurse=1 + shift +case * + usage $0 } -# find relative path from outdir to srcdir -ifs=/ { - srcdir=`{printf %s $abs_srcdir} - outdir=`{printf %s $abs_outdir} -} +. ./ninja.rc -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 - } +fn subgen { + dir=$pre$1 { + subninja $dir/local.ninja + gen_inputs=( $gen_inputs $dir/local.ninja ) + tree_inputs=( $tree_inputs '$builddir'/$dir/root.tree ) + tree_perms=( $tree_perms '$builddir'/$dir/root.perms ) } + if(~ $recurse 1) @ gen $1 & + status=() } -root_srcdir=$abs_srcdir -root_outdir=$abs_outdir -setup_outs=( build.ninja ) -setup_ins=() +fn gen { + if(~ $dir '' .) dir=$1 + if not dir=$dir/$1 -. ./ninja.rc + if(~ $dir .) { suf='' pre='' } + if not { suf=/$dir pre=$dir/ } -fn subgen { - olddir=$dir - dir=$1 - srcdir=$root_srcdir/$dir - outdir=$root_outdir/$dir - - printf 'generating in %s\n' $dir >[1=2] + cd $1 - setup_outs=( $setup_outs $dir/local.ninja ) - setup_ins=( $setup_ins '$root_srcdir'/$dir/gen.rc ) + tree_perms=() + perms_inputs=() + tree_inputs=() + gen_inputs=() - mkdir -p $outdir - cd $srcdir { - echo 'outdir = '$dir - echo 'srcdir = $root_srcdir/'$dir + set srcdir $dir + set outdir '$builddir'$suf + + ifs=() { old_pwd=`{pwd | head -c -1} } . ./gen.rc - } >$outdir/local.ninja - cd $root_srcdir - dir=$olddir - srcdir=$root_srcdir/$dir - outdir=$root_outdir/$dir + build '$srcdir'/local.ninja gen '|' setup.rc ninja.rc '$srcdir'/gen.rc $gen_inputs + + if(! ~ $#tree_perms 0) { + printf '%s\n' $tree_perms >$old_pwd/local.perms + perms_inputs=( $perms_inputs '$srcdir'/local.perms ) + } + if(~ $#perms_inputs 0) build '$outdir/root.perms' stamp + if not build '$outdir/root.perms' cat $perms_inputs + if(~ $#tree_inputs 0) build '$outdir/root.tree' stamp + if not build '$outdir/root.tree' cat $tree_inputs + } >local.ninja + + wait } -subgen . +if(! ~ $#* 0) { gen $1 ; exit } -{ - set root_srcdir $rel_srcdir - set root_outdir . +if(~ $#norecurse 0) { + recurse=1 + @ gen . +} - include '$root_srcdir/config.ninja' - include '$root_srcdir/rules.ninja' +{ + set builddir $builddir - let generator 1 pool console --\ - build $"setup_outs gen '$root_srcdir/setup.rc' '|' $setup_ins + include config.ninja + include rules.ninja subninja local.ninja -} >$root_outdir/build.ninja.tmp -mv $root_outdir/^( build.ninja.tmp build.ninja ) + build build.ninja gen '|' setup.rc ninja.rc local.ninja +} >build.ninja.tmp + +mv build.ninja.tmp build.ninja |
