#!/bin/rc fn usage { echo 'usage: '$0' [dir]' >[1=2] exit 2 } if(! ~ $#* 0 1) usage if(! [ -f config.rc ]) cp config.def.rc config.rc . ./config.rc flag e + if(! [ -f config.ninja ]) cp config.def.ninja config.ninja # call this after a command capture to ensure it succeeded fn checkstatus {} ifs=' ' . ./ninja.rc fn subgen { subninja '$dir'/$1/local.ninja ninja_inputs=($ninja_inputs '$dir'/$1/ninja) index_inputs=($index_inputs '$outdir'/$1/root.index) perms_inputs=($perms_inputs '$outdir'/$1/root.perms) if(~ $recurse 1 || ! [ -f $1/local.ninja ]) @ gen $1 & status=() } fn gen { pkg=`{basename $1} checkstatus if(~ $dir '' .) dir=$1 if not dir=$dir/$1 cd $1 allsrcs=() tree_perms=() perms_inputs=() index_inputs=() gen_inputs=() ninja_inputs=() absdir=`{pwd} { set dir $dir if(~ $dir .) set outdir '$builddir' if not set outdir '$builddir/$dir' if([ -e rev ]) set srcdir '$dir'/src . $absdir/gen.rc build '$dir'/local.ninja gen '|' setup.rc config.rc ninja.rc '$dir'/gen.rc $gen_inputs phony ninja '$dir'/local.ninja $ninja_inputs if(! ~ $#tree_perms 0) { printf '%s\n' $tree_perms | sort -k 2 >$absdir/local.perms perms_inputs=($perms_inputs '$dir'/local.perms) } if(~ $#perms_inputs 0) build '$outdir/root.perms' empty if not build '$outdir/root.perms' mergeperms $perms_inputs if(~ $#index_inputs 0) build '$outdir/root.index' empty if not build '$outdir/root.index' cat $index_inputs } >local.ninja.tmp mv $absdir/^(local.ninja.tmp local.ninja) echo 'generated '$dir >[1=2] wait } if(! ~ $#* 0) {gen $1 ; exit} recurse=1 @ gen .