linux-qubasis
linux oasis port as a qubes template
git clone https://9o.is/git/linux-qubasis.git
commit 143e32f5c644e231ac8f06ffd4bd6addb29cbd16 parent 48c20ebccdbb304c93c2fc187be69c354b8819e7 Author: Jul <jul@9o.is> Date: Sun, 24 Aug 2025 14:44:38 +0800 add ninja sub function Diffstat:
| M | ninja/functions.sh | | | 95 | +++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------- |
1 file changed, 64 insertions(+), 31 deletions(-)
diff --git a/ninja/functions.sh b/ninja/functions.sh @@ -134,26 +134,44 @@ pkg() { } subgen() { - _ninja_queue_subgen="$_ninja_queue_subgen $_subgendir$1" + local subgendir="${_gendir-}" + if [ "$subgendir" ]; then + subgendir="$subgendir/" + fi + + _ninja_queue_subgen="$_ninja_queue_subgen $subgendir$1" _ninja_buffer_subninja="$_ninja_buffer_subninja $1" } -gen() { - dir="$basedir"/$1 +sub() { + local subname="-$1" + ( + ninja_init "$_gendir" "$subname" + _ninja_sub="$subname" + eval $2 + ninja_complete + ) + subninja "$_gendir$subname" +} + +ninja_init() { + local gendir=$1 + local suffix=${2-} + local ninja_dir=$BUILDDIR/ninja + + _ninja_initglobals - if [ "$1" = '.' ]; then - _subgendir= + if [ "$gendir" = '.' ]; then _ninja_file=root.ninja else - _subgendir="$1/" - _ninja_file=$1.ninja + _ninja_file=$gendir$suffix.ninja fi - _ninja_fullpath="$basedir"/$_ninja_dir/$_ninja_file.tmp - mkdir -p "$basedir"/$_ninja_dir/${1%/*} + _ninja_fullpath="$basedir"/$ninja_dir/$_ninja_file.tmp + mkdir -p "$basedir"/$ninja_dir/${gendir%/*} printf '' > "$_ninja_fullpath" - setv 'gendir' "$1" + setv 'gendir' "$gendir" if [ "$1" != '.' ]; then setv 'dir' '$basedir/$gendir' @@ -161,15 +179,29 @@ gen() { setv 'srcdir' '$dir/repo' fi - if [ ! "${1#tpl/}" = "$1" ]; then + if [ ! "${gendir#tpl/}" = "$gendir" ]; then setv 'rootdir' '$outdir/root' fi +} - . "$dir"/gen.sh +ninja_complete() { + local gen_files='$basedir/config.sh $basedir/ninja/functions.sh $dir/gen.sh' _ninja_flush - build gen "\$ninjadir/$_ninja_file" "| $_ninja_gen_files" + build gen "\$ninjadir/$_ninja_file" "| $gen_files" mv $_ninja_fullpath ${_ninja_fullpath%.*} +} + +gen() { + dir="$basedir"/$1 + + if [ "$1" != '.' ]; then + _gendir="$1" + fi + + ninja_init "$1" + . "$dir"/gen.sh + ninja_complete if [ "$_ninja_queue_subgen" ]; then set -- $_ninja_queue_subgen @@ -181,21 +213,21 @@ gen() { ## -## Internal ninja global variables and functions +## Internal ninja internal functions ## -_ninja_dir=$BUILDDIR/ninja -_ninja_gen_files='$basedir/config.sh $basedir/ninja/functions.sh $dir/gen.sh' - _ninja_queue_subgen= -_ninja_buffer_subninja= -_ninja_buffer_builds= -_ninja_buffer_exe= -_ninja_buffer_lib= -_ninja_buffer_dep= -_ninja_buffer_dep_srcs= -_ninja_buffer_sync= +_ninja_initglobals() { + _ninja_sub= + _ninja_buffer_subninja= + _ninja_buffer_builds= + _ninja_buffer_exe= + _ninja_buffer_lib= + _ninja_buffer_dep= + _ninja_buffer_dep_srcs= + _ninja_buffer_sync= +} _ninja_prefix() { local variable="$1"; shift @@ -312,12 +344,12 @@ _ninja_flush_subninja() { local pkg='' for pkg in $_ninja_buffer_subninja; do - subbuilds="$subbuilds \$gendir/$pkg/build" + subbuilds="$subbuilds \$gendir/$pkg/build$_ninja_sub" subninja $pkg done - build phony '$gendir/configure' "\$ninjadir/$_ninja_file" - build phony '$gendir/build' "$_ninja_buffer_builds" "$subbuilds" + build phony "\$gendir/configure$_ninja_sub" "\$ninjadir/$_ninja_file" + build phony "\$gendir/build$_ninja_sub" "$_ninja_buffer_builds" "$subbuilds" _ninja_buffer_subninja= _ninja_buffer_builds= @@ -326,22 +358,23 @@ _ninja_flush_subninja() { _ninja_flush_sync() { local subsyncs='$outdir/meta/version' local verfile="$dir"/version + local verout="\$outdir/meta/version$_ninja_sub" for pkg in $_ninja_buffer_subninja; do subsyncs="$subsyncs \$gendir/$pkg/sync" done - build phony '$gendir/sync' "$subsyncs" + build phony "\$gendir/sync$_ninja_sub" "$subsyncs" if [ ! -f "$verfile" ]; then - build touch '$outdir/meta/version' + build touch "$verout" return fi - build sync '$outdir/meta/version' '$gendir/version | $basedir/ninja/sync.sh' + build sync "$verout" '$gendir/version | $basedir/ninja/sync.sh' if [ "$_ninja_buffer_sync" ]; then - build phony "$_ninja_buffer_sync" '$outdir/meta/version' + build phony "$_ninja_buffer_sync" "$verout" fi _ninja_buffer_sync=