linux-qubasis

linux oasis port as a qubes template

git clone https://9o.is/git/linux-qubasis.git

commit 7e2e2814789acdf40e1f30a4648ef3cf4788b021
parent a0638cf87950023eb2e17e67e3bcd3ac142bd486
Author: Jul <jul@9o.is>
Date:   Thu, 20 Nov 2025 12:34:02 -0500

fix/simplify files generation

Diffstat:
M.gitignore | 1+
Mgen.sh | 1+
Mgenfn.sh | 19++++++++++++++-----
Dpkg/gen-files.sh | 15---------------
Mpkg/genfn.sh | 53++++++++++++++++++++++++++++++++++++-----------------
Mpkg/rules.sh | 4----
Mqubes/genfn.sh | 13++++++-------
7 files changed, 58 insertions(+), 48 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -1,3 +1,4 @@ /out *.ninja *.tmp +pkg/**/*/files diff --git a/gen.sh b/gen.sh @@ -11,6 +11,7 @@ var hostdir $outdir/host rule gen './gen.sh $dir' bind description 'GEN $dir' bind generator 1 +bind restat 1 subgen pkg subgen qubes diff --git a/genfn.sh b/genfn.sh @@ -1,8 +1,10 @@ main() { DIR=. - GEN_FILES='./gen.sh ./genfn.sh' + OUTDIR=./out NINJA_FILE=local.ninja NINJA_FILES=$DIR/$NINJA_FILE + GEN_FILES='./gen.sh ./genfn.sh' + GEN_OUTS=$DIR/$NINJA_FILE set_target "$1" init_file @@ -16,13 +18,18 @@ init_file() { } fini_file() { - if persist && [ -e $DIR/$NINJA_FILE.tmp ]; then - mv $DIR/$NINJA_FILE.tmp $DIR/$NINJA_FILE + _f=$DIR/$NINJA_FILE + if persist && [ -e $_f.tmp ]; then + if cmp -s $_f.tmp $_f; then + rm -f $_f.tmp + else + mv $_f.tmp $_f + fi fi } gen_done() { - gen $dir/$NINJA_FILE '|' $GEN_FILES + gen "$GEN_OUTS" '|' $GEN_FILES phony $dir/ninja $NINJA_FILES fini_file wait @@ -90,8 +97,10 @@ subgen() { if in_target_route $1; then ( DIR=$DIR/$1 - GEN_FILES="$GEN_FILES $DIR/gen.sh" + OUTDIR=$OUTDIR/$1 NINJA_FILES=$DIR/local.ninja + GEN_FILES="$GEN_FILES $DIR/gen.sh" + GEN_OUTS=$DIR/$NINJA_FILE init_file diff --git a/pkg/gen-files.sh b/pkg/gen-files.sh @@ -1,15 +0,0 @@ -outdir=$1 -shift - -while [ $# -gt 0 ]; do - case "$1" in - reg|sym) - printf "$1 $2 $3 $4\n" - shift 4 - ;; - *) - printf "%s: error parsing: unknown %s\n" $0 $1 - exit 1 - ;; - esac -done diff --git a/pkg/genfn.sh b/pkg/genfn.sh @@ -3,18 +3,20 @@ pkg() { } init_pkg() { - FILE= OBJS= HDRS= SRCS= DEPS= PCHS= - unset -f host + var srcdir $dir/src var libdir $outdir var objdir $outdir/obj var hdrdir $outdir/include var datdir $outdir/share + + unset -f host + init_files } fini_pkg() { @@ -29,10 +31,7 @@ fini_pkg() { phony "$(printf '%s\n' $SRCS | sort | uniq | xargs)" $outdir/fetched "$PCHS" fi - if [ "$FILE" ]; then - gen_files files '|' ./pkg/gen-files.sh $GEN_FILES - bind files $FILE - fi + fini_files } pkgsub() { @@ -111,12 +110,12 @@ dep() { bin() { exe $* - file reg 0755 '\$$bindir'/$_out $outdir/$_out + file reg 0755 '$bindir'/$_out $OUTDIR/$_out } libexec() { exe $* - file reg 0755 '\$$libexecdir'/$_out $outdir/$_out + file reg 0755 '$libexecdir'/$_out $OUTDIR/$_out } exe() { @@ -145,7 +144,7 @@ lib() { rsp $libdir/$_out.d $outdir/$_out $_libs fi - file reg 0644 '\$$libdir'/$_out $libdir/$_out + file reg 0644 '$libdir'/$_out $OUTDIR/$_out } compile() { @@ -193,7 +192,7 @@ binfiles() { files $* for _file in $_files; do _out=${_file#*/} - file reg 0755 '\$$bindir'/$_out $outdir/$_out + file reg 0755 '$bindir'/$_out $OUTDIR/$_out done } @@ -202,7 +201,7 @@ share() { for _file in $_files; do _out=${_file#*/} - file reg 0644 '\$$datadir'/$_out $outdir/share/$_out + file reg 0644 '$datadir'/$_out $OUTDIR/share/$_out done } @@ -211,7 +210,7 @@ include() { for _file in $_files; do _out=${_file#*/} - file reg 0644 '\$$includedir'/$_out $outdir/include/$_out + file reg 0644 '$includedir'/$_out $OUTDIR/include/$_out HDRS="$HDRS $_file" done } @@ -338,14 +337,14 @@ man() { fi gzip $_out.gz $_src - file reg 0644 '\$$mandir'/man$_sec/$_out.gz $outdir/$_out.gz + file reg 0644 '$mandir'/man$_sec/$_out.gz $OUTDIR/$_out.gz } sym() { case ${1%%/*} in - bin) _prefix='\$$bindir';; - man) _prefix='\$$mandir';; - share) _prefix='\$$datadir';; + bin) _prefix='$bindir';; + man) _prefix='$mandir';; + share) _prefix='$datadir';; *) error sym cannot handles prefix $_prefix;; esac @@ -353,5 +352,25 @@ sym() { } file() { - FILE="$FILE $*" + if persist; then + printf '%s\n' "$*" >> $DIR/files.tmp + fi +} + +init_files() { + if persist && [ -e $DIR/files.tmp ]; then + rm -f $DIR/files.tmp + fi +} + +fini_files() { + _f=$DIR/files + if persist && [ -e $_f.tmp ]; then + if cmp -s $_f.tmp $_f; then + rm -f $_f.tmp + else + mv $_f.tmp $_f + fi + GEN_OUTS="$GEN_OUTS $DIR/files" + fi } diff --git a/pkg/rules.sh b/pkg/rules.sh @@ -54,7 +54,3 @@ bind description 'EXTRACT $in' rule patch 'git -C $srcdir am -3 --keep-non-patch --no-gpg-sign --whitespace=nowarn ../../../$in >/dev/null && touch $out' bind description 'PATCH $in' - -rule gen_files 'sh ./pkg/gen-files.sh $outdir $files >$out' -bind description 'GEN $out' -bind generator 1 diff --git a/qubes/genfn.sh b/qubes/genfn.sh @@ -22,7 +22,8 @@ fini_qvm() { if [ "$FSPECS" ]; then fspec_root root.fspec $FSPECS - phony build $outdir/root.fspec + fspec_tar root.tar.gz $outdir/root.fspec + phony build $outdir/root.tar.gz else touch nofspecs phony build $outdir/nofspecs @@ -39,17 +40,15 @@ fini_qvm() { } pkg() { - _in=./out/pkg/$1/files + _in=./pkg/$1/files _out=$outdir/fspec/$1.fspec + GEN_FILES="$GEN_FILES $_in" + if [ ! -e $_in ]; then - GEN_FILES="$GEN_FILES $_in" return fi - GEN_FILES="$GEN_FILES $_in ./pkg/$1/gen.sh" - FSPECS="$FSPECS $_out" - _deps="$(awk -v pkgexclude="$PKGEXCLUDE" " BEGIN { gsub(/\\//, \"\\\\/\", pkgexclude); @@ -64,6 +63,7 @@ pkg() { " $_in | xargs)" fspec $_out $_in '|' $_deps + FSPECS="$FSPECS $_out" } pkgexclude() { @@ -177,7 +177,6 @@ volume_import() { _size=$(( ${2%M} * 1048576 )) _out=$outdir/qvm-volume-import-$_volume - fspec_tar root.tar.gz $outdir/root.fspec build volume_import $_out $outdir/root.tar.gz \ '|' $dir/create $hostdir/pax $qubesdir/volume_import.sh bind volume $_volume