summaryrefslogtreecommitdiff
path: root/setup.rc
diff options
context:
space:
mode:
authorMichael Forney <mforney@mforney.org>2016-04-14 00:21:44 -0700
committerMichael Forney <mforney@mforney.org>2016-04-15 02:10:08 -0700
commit20a3b2ad4421763e4b19d7897cc5addecf06898d (patch)
treeecc00da23403820c355f5ff81f9da2ae8531f466 /setup.rc
parentb3a4eb3f51f308a1d7fdde8a7cf77f4b8df2f308 (diff)
Allow independent generation of ninja files
Diffstat (limited to 'setup.rc')
-rwxr-xr-xsetup.rc125
1 files changed, 66 insertions, 59 deletions
diff --git a/setup.rc b/setup.rc
index cb58eec6..8a6d6945 100755
--- a/setup.rc
+++ b/setup.rc
@@ -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