linux-qubasis
linux oasis port as a qubes template
git clone https://9o.is/git/linux-qubasis.git
commit 0dc90eea9b742ff58efa6d0a8b403161fe5256e7 parent 2dd7a8f140cca467e299b145061898463620d9c2 Author: Jul <jul@9o.is> Date: Mon, 25 Aug 2025 11:25:47 +0800 organize ninja global variables Diffstat:
| M | configure | | | 4 | ---- |
| M | ninja/functions.sh | | | 133 | +++++++++++++++++++++++++++++++++++++++++++++++-------------------------------- |
2 files changed, 79 insertions(+), 58 deletions(-)
diff --git a/configure b/configure @@ -24,7 +24,3 @@ require $TARGET_PLATFORM-as require $TARGET_PLATFORM-objcopy gen "${1:-.}" - -if [ ! "${1-}" ]; then - ln -sf "$basedir"/$BUILDDIR/ninja/root.ninja "$basedir"/build.ninja -fi diff --git a/ninja/functions.sh b/ninja/functions.sh @@ -1,6 +1,6 @@ setv() { local v=$1; shift; - printf '%s = %s\n' "$v" "$*" >> "$_ninja_fullpath" + printf '%s = %s\n' "$v" "$*" >> "$_ninja_writepath" } bind() { @@ -9,11 +9,11 @@ bind() { } include() { - printf 'include %s\n' "$1" >> "$_ninja_fullpath" + printf 'include %s\n' "$1" >> "$_ninja_writepath" } rule() { - printf 'rule %s\n' "$1" >> "$_ninja_fullpath" + printf 'rule %s\n' "$1" >> "$_ninja_writepath" bind 'command' "$2" } @@ -22,7 +22,7 @@ build() { local out="$1"; shift; local value="$*" - printf 'build %s: %s %s\n' "$out" "$rule" "$value" >> "$_ninja_fullpath" + printf 'build %s: %s %s\n' "$out" "$rule" "$value" >> "$_ninja_writepath" } cflags() { @@ -142,7 +142,8 @@ pkg() { } subgen() { - local subgendir="${_gendir-}" + local subgendir="${_ninja_gendir-}" + if [ "$subgendir" ]; then subgendir="$subgendir/" fi @@ -153,80 +154,82 @@ subgen() { subninja() { local subname="-$1" + ( - ninja_init "$_gendir" "$subname" + _ninja_init "$_ninja_gendir" "$subname" _ninja_sub="$subname" eval $1 - ninja_complete + _ninja_complete ) - printf 'subninja $ninjadir/%s.ninja\n' "$_gendir$subname" >> "$_ninja_fullpath" -} -ninja_init() { - local gendir=$1 - local suffix=${2-} - local ninja_dir=$BUILDDIR/ninja + printf 'subninja $ninjadir/%s.ninja\n' "$_ninja_gendir$subname" >> "$_ninja_writepath" +} - _ninja_initglobals +gen() { + _ninja_init "$1" + _ninja_setv_init "$1" + . "$_ninja_dir"/gen.sh + _ninja_complete - if [ "$gendir" = '.' ]; then - _ninja_file=root.ninja - else - _ninja_file=$gendir$suffix.ninja + if [ "$_ninja_queue_subgen" ]; then + set -- $_ninja_queue_subgen + local pkg=$1; shift; + _ninja_queue_subgen="$@" + gen $pkg fi +} - _ninja_fullpath="$basedir"/$ninja_dir/$_ninja_file.tmp - mkdir -p "$basedir"/$ninja_dir/${gendir%/*} - printf '' > "$_ninja_fullpath" - setv 'gendir' "$gendir" +## +## Internal ninja functions and variables +## - if [ "$1" != '.' ]; then - setv 'dir' '$basedir/$gendir' - setv 'outdir' '$builddir/$gendir' - setv 'srcdir' '$dir/repo' - fi +_ninja_queue_subgen= - if [ ! "${gendir#tpl/}" = "$gendir" ]; then - setv 'rootdir' '$outdir/root' - fi +_ninja_init() { + local gendir=$1 + local suffix=${2-} + + _ninja_initglobals "$gendir" "$suffix" + + mkdir -p "$_ninja_ninjadir"/${gendir%/*} + printf '' > "$_ninja_writepath" } -ninja_complete() { +_ninja_complete() { local gen_files='$basedir/config.sh $basedir/ninja/functions.sh $dir/gen.sh' _ninja_flush build gen "\$ninjadir/$_ninja_file" "| $gen_files" - mv $_ninja_fullpath ${_ninja_fullpath%.*} -} - -gen() { - dir="$basedir"/$1 + mv $_ninja_writepath ${_ninja_writepath%.*} - if [ "$1" != '.' ]; then - _gendir="$1" + if [ ! "$_ninja_gendir" ]; then + ln -sf "$_ninja_ninjadir"/$_ninja_file "$_ninja_basedir"/build.ninja fi +} - ninja_init "$1" - . "$dir"/gen.sh - ninja_complete +_ninja_initglobals() { + local gendir="$1" + local suffix="${2-}" - if [ "$_ninja_queue_subgen" ]; then - set -- $_ninja_queue_subgen - local pkg=$1; shift; - _ninja_queue_subgen="$@" - gen $pkg + if [ "$gendir" = '.' ]; then + _ninja_gendir= + else + _ninja_gendir="$gendir" fi -} + _ninja_basedir="${_ninja_basedir-$basedir}" + _ninja_dir="$_ninja_basedir/$gendir" + _ninja_ninjadir="$_ninja_basedir"/$BUILDDIR/ninja -## -## Internal ninja internal functions -## + if [ "$gendir" = '.' ]; then + _ninja_file=root.ninja + else + _ninja_file=$gendir$suffix.ninja + fi -_ninja_queue_subgen= + _ninja_writepath="$_ninja_ninjadir"/$_ninja_file.tmp -_ninja_initglobals() { _ninja_sub= _ninja_buffer_subgen= _ninja_buffer_builds= @@ -236,6 +239,28 @@ _ninja_initglobals() { _ninja_buffer_sync= } +_ninja_setv_init() { + setv 'gendir' "$1" + + if [ "$1" != '.' ]; then + setv 'dir' '$basedir/$gendir' + setv 'outdir' '$builddir/$gendir' + setv 'srcdir' '$dir/repo' + fi + + if [ ! "${1#tpl/}" = "$1" ]; then + setv 'rootdir' '$outdir/root' + fi + + basedir='$basedir' + gendir='$gendir' + dir='$dir' + outdir='$outdir' + srcdir='$srcdir' + rootdir='$rootdir' + objdir='$outdir/o' +} + _ninja_prefix() { local variable="$1"; shift local prefix="$1"; shift @@ -352,7 +377,7 @@ _ninja_flush_builds() { for pkg in $_ninja_buffer_subgen; do subbuilds="$subbuilds \$gendir/$pkg/build$_ninja_sub" - printf 'subninja $ninjadir/%s.ninja\n' "$pkg" >> "$_ninja_fullpath" + printf 'subninja $ninjadir/%s.ninja\n' "$pkg" >> "$_ninja_writepath" done build phony "\$gendir/configure$_ninja_sub" "\$ninjadir/$_ninja_file" @@ -364,7 +389,7 @@ _ninja_flush_builds() { _ninja_flush_sync() { local subsyncs='$outdir/meta/version' - local verfile="$dir"/version + local verfile="$_ninja_dir"/version for pkg in $_ninja_buffer_subgen; do subsyncs="$subsyncs \$gendir/$pkg/sync"