linux-qubasis

linux oasis port as a qubes template

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

commit 66f0eb1cc6a086dfb6d3c8b57919f53ee5500513
parent f84608adcd418e405c0b4422e92ebb04c658e312
Author: Jul <jul@9o.is>
Date:   Fri, 29 Aug 2025 16:33:39 +0800

create fetch ninja function with more granular rules

Diffstat:
Mninja/functions.sh | 136+++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------
Mninja/rules.ninja | 30+++++++++++++++++++++++++++++-
Dninja/sync.sh | 94-------------------------------------------------------------------------------
Mpkg/abduco/gen.sh | 2++
Dpkg/abduco/version | 3---
Mpkg/awk/gen.sh | 5+++++
Dpkg/awk/version | 3---
Mpkg/b3sum/gen.sh | 2++
Dpkg/b3sum/version | 3---
Mpkg/byacc/gen.sh | 3+++
Dpkg/byacc/version | 4----
Mpkg/fspec-sync/gen.sh | 2++
Dpkg/fspec-sync/version | 3---
Mpkg/less/gen.sh | 3+++
Dpkg/less/version | 4----
Mpkg/mandoc/gen.sh | 3+++
Dpkg/mandoc/version | 4----
Mpkg/netbsd-curses/gen.sh | 2++
Dpkg/netbsd-curses/version | 3---
Mpkg/oksh/gen.sh | 2++
Dpkg/oksh/version | 3---
Mpkg/pax/gen.sh | 2++
Dpkg/pax/version | 3---
Mpkg/sbase/gen.sh | 2++
Dpkg/sbase/version | 3---
Mpkg/zlib/gen.sh | 2++
Dpkg/zlib/version | 3---
Mpkg/zstd/gen.sh | 2++
Dpkg/zstd/version | 3---
29 files changed, 152 insertions(+), 182 deletions(-)

diff --git a/ninja/functions.sh b/ninja/functions.sh @@ -1,3 +1,8 @@ +error() { + printf "Error gen $_ninja_gendir: %s\n" "$*" + exit 1 +} + setv() { _v1=$1; shift; _vs= @@ -52,22 +57,6 @@ yacc() { bind yaccflags "-d -b $_out" } -copy() { - _ninja_prefix _src $srcdir $1 - _ninja_prefix _out $outdir ${2-$1} - _ninja_sync $_src - - build copy $_out $_src -} - -gzip() { - _ninja_prefix _src $srcdir $1 - _ninja_prefix _out $outdir ${2-$1} - _ninja_sync $_src - - build gzip $_out $_src '|' $hostdir/minigzip -} - bin() { _ninja_fspec /bin/$1 reg 0755 $1 } @@ -95,20 +84,20 @@ man() { _sec=${_src##*.} fi + _ninja_prefix _src $srcdir $_src + _ninja_prefix _out $outdir $_out + _ninja_sync $_src + if [ "${GZMAN-}" = true ]; then _out=$_out.gz - _cmd=gzip + _rule=gzip + _rule_dep='| $hostdir/minigzip' else - _cmd=copy + _rule=copy fi _ninja_fspec $MANDIR/man$_sec/$_out reg 0644 $_out - $_cmd $_src $_out -} - -compile() { - _ninja_prefix _srcs $srcdir $* - _ninja_compile $_srcs + build $_rule $_out $_src ${_rule_dep-} } sync() { @@ -151,6 +140,10 @@ pkg() { _ninja_fspec_file $* } +fetch() { + _ninja_buffer_fetch="$*" +} + subgen() { _prefix= @@ -225,8 +218,8 @@ _ninja_initglobals() { fi ;; *) - printf "Error gen $_ninja_file: invalid gendir: %s\n" "$1" - exit 1 + error invalid gendir $1 + ;; esac _ninja_writepath="$_ninja_ninjadir"/$_ninja_file.tmp @@ -239,6 +232,7 @@ _ninja_initglobals() { _ninja_buffer_deps= _ninja_buffer_headers= _ninja_buffer_sync= + _ninja_buffer_fetch= _ninja_buffer_fspec= _ninja_buffer_fspec_files= } @@ -355,8 +349,8 @@ _ninja_compile() { _ninja_buffer_d="$_ninja_buffer_d $_src" ;; *) - printf "Error gen $_ninja_file: unknown file to compile: %s\n" "$_src" - exit 1 + error unknown file to compile: $_src + ;; esac done } @@ -460,6 +454,70 @@ _ninja_flush_build() { esac } +_ninja_flush_fetch() { + _fetchdir=$outdir/_fetch + + if [ ${_ninja_host-} ] || [ $_ninja_type = root ]; then + return + fi + + if [ ! "$_ninja_buffer_fetch" ]; then + build touch $_fetchdir/fetched + return + fi + + set -- $_ninja_buffer_fetch + + case $1 in + git) + build fetch-git $_fetchdir/fetched + ;; + curl) + _url=$2 + _sha256=$3 + _name=${_url##*/} + + build fetch-curl $_fetchdir/$_name + bind url $_url + build sha256sum $_fetchdir/checked $_fetchdir/$_name + bind sha256 $_sha256 + + case $_name in + *.tar.gz|*.tgz) + _archive=${_name%.t*gz}.tar + _cmpr=gunzip + _cmpr_dep=$hostdir/minigzip + ;; + *) + _archive=$_name + ;; + esac + + if [ $_cmpr ]; then + build $_cmpr $_fetchdir/$_archive $_fetchdir/$_name '|' ${_cmpr_dep-} $_fetchdir/checked + fi + + build extract $_fetchdir/fetched $_fetchdir/$_archive '|' $hostdir/pax $_fetchdir/checked + + if ! grep -qE "^$_ninja_gendir/repo$" "$_ninja_basedir"/.git/info/exclude; then + printf "%s/repo\n" "$_ninja_gendir" >> "$_ninja_basedir"/.git/info/exclude + fi + ;; + *) + error unknown fetch method $1 + ;; + esac + + if [ -d "$_ninja_dir"/patch ]; then + _outs= + for _v in "$_ninja_dir"/patch/*.patch; do + _out=$_fetchdir/${_v##*/} + _outs="$_outs $_out" + build patch $_out ${_v#"$_ninja_dir"/} '|' $_fetchdir/fetched $_outs + done + fi +} + _ninja_flush_sync() { if [ ${_ninja_host-} ]; then printf "$_ninja_buffer_sync" @@ -469,7 +527,7 @@ _ninja_flush_sync() { _srcs= if [ $_ninja_type != root ]; then - _srcs=$outdir/_files/_version + _srcs=$outdir/_fetch/fetched fi for _v in $_ninja_buffer_subgen; do @@ -478,23 +536,10 @@ _ninja_flush_sync() { build phony $tgtdir/sync $_srcs - if [ $_ninja_type = root ]; then - return + if [ "$_ninja_buffer_sync" ]; then + _ninja_dedup _ninja_buffer_sync $_ninja_buffer_sync + build phony "$_ninja_buffer_sync" $outdir/_fetch/fetched fi - - if [ ! -f "$_ninja_dir"/version ]; then - build touch $outdir/_files/_version - return - fi - - build sync $outdir/_files/_version $gendir/version '|' $basedir/ninja/sync.sh - - if [ ! "$_ninja_buffer_sync" ]; then - return - fi - - _ninja_dedup _ninja_buffer_sync $_ninja_buffer_sync - build phony "$_ninja_buffer_sync" $outdir/_files/_version } _ninja_flush_deps() { @@ -572,6 +617,7 @@ _ninja_flush() { _ninja_flush_deps _ninja_flush_headers _ninja_flush_fspec + _ninja_flush_fetch _ninja_flush_sync _ninja_flush_build } diff --git a/ninja/rules.ninja b/ninja/rules.ninja @@ -43,6 +43,10 @@ rule gzip command = $hostdir/minigzip -c -9 <$in >$out description = GZIP $out +rule gunzip + command = $hostdir/minigzip -c -d <$in >$out + description = GUNZIP $out + rule awk command = awk $expr $in >$out description = AWK $out @@ -62,5 +66,29 @@ rule fspec-tar description = FSPEC-TAR $out rule yacc - command = $hostdir/yacc $yaccflags $in + command = $hostdir/yacc $yaccflags $in >/dev/null description = YACC $out + +rule fetch-curl + command = rm -f $out && curl -L# -o $out $url + description = FETCH CURL $out + generator = 1 + pool = console + +rule fetch-git + command = git submodule update --init --checkout $srcdir && touch $out + description = FETCH GIT $gendir + generator = 1 + pool = console + +rule sha256sum + command = test '$sha256' = "$$(sha256sum $in | awk '{print $$1}')" && touch $out + description = SHA256SUM $in + +rule extract + command = rm -rf $srcdir && $hostdir/pax -r -s ',^[^/]*,$srcdir,' <$in && touch $out + description = EXTRACT $srcdir + +rule patch + command = git -C $srcdir am --3way --keep-non-patch --no-gpg-sign --whitespace=nowarn $PWD/$in && touch $out + description = PATCH $in diff --git a/ninja/sync.sh b/ninja/sync.sh @@ -1,94 +0,0 @@ -set -eu - -dldir=out/downloads - -if [ "$#" != 3 ] ; then - echo 'usage: sync.sh dir version_file out_file' >&2 - exit 2 -fi - -dir="$1" -version_file="$2" -out_file="$3" -repo=$dir/repo - -. "$version_file" - -if [ ! "${method-}" ]; then - printf "Error sync $dir: missing sync method\n" >&2 - exit 1 -fi - -if [ ! "${rel-}" ]; then - printf "Error sync $dir: missing sync rel\n" >&2 - exit 1 -fi - -sync_curl() { - file="$dldir/${url##*/}" - - if [ -e "$repo" ]; then - rm -rf "$repo" - fi - - if [ ! -e "$file" ]; then - mkdir -p "$dldir" - curl -OL --progress-bar --output-dir "$dldir" "$url" - - printf "$sha256 $file" > "$file.sha256" - sha256sum --check "$file.sha256" >/dev/null - fi - - if ! grep -qE "^$repo$" .git/info/exclude; then - printf "%s\n" "$repo" >> .git/info/exclude - fi - - mkdir "$repo" - tar -xzf "$file" -C "$repo" --strip-components=1 - - if [ -d patch ] ; then - git apply --whitespace=nowarn --directory "$repo" patch/*.patch - fi -} - -sync_git() { - git submodule update --init --checkout $repo - - if [ -d $dir/patch ] ; then - for patch in $dir/patch/*.patch; do - git -C $repo am --3way --keep-non-patch --no-gpg-sign \ - --whitespace=nowarn ../patch/${patch##*/} - done - fi - - git -C $repo tag -f r$rel -} - -case $method in - curl) - if [ ! "${url-}" ]; then - printf "Error sync $dir: missing curl url\n" >&2 - exit 1 - fi - - if [ ! "${sha256-}" ]; then - printf "Error sync $dir: missing curl sha256\n" >&2 - exit 1 - fi - - sync_curl - ;; - git) - if [ ! "${ref-}" ]; then - printf "Error sync $dir: missing git ref\n" >&2 - exit 1 - fi - - sync_git - ;; - *) - printf "Error sync $dir: unknown sync method '%s'\n" "$method" >&2 - exit 1 -esac - -cp -f "$version_file" "$out_file" diff --git a/pkg/abduco/gen.sh b/pkg/abduco/gen.sh @@ -1,3 +1,5 @@ +fetch git + cflags " -std=c99 -D _POSIX_C_SOURCE=200809L diff --git a/pkg/abduco/version b/pkg/abduco/version @@ -1,3 +0,0 @@ -method=git -ref=8c32909 -rel=0 diff --git a/pkg/awk/gen.sh b/pkg/awk/gen.sh @@ -1,3 +1,5 @@ +fetch git + cflags " -std=c11 -I $srcdir @@ -12,10 +14,13 @@ cflags -I $yaccdir dep $yaccdir/awkgram.tab.h rule maketab '$hostdir/maketab $in >$out' +bind description 'MAKETAB $out' + build maketab $yaccdir/proctab.c $yaccdir/awkgram.tab.h '|' $hostdir/maketab host() { cflags -I $yaccdir + dep $yaccdir/awkgram.tab.h exe maketab maketab.c } diff --git a/pkg/awk/version b/pkg/awk/version @@ -1,3 +0,0 @@ -method=git -ref=d9f3764 -rel=0 diff --git a/pkg/b3sum/gen.sh b/pkg/b3sum/gen.sh @@ -1,3 +1,5 @@ +fetch git + cflags " -std=c99 -D WITH_ASM diff --git a/pkg/b3sum/version b/pkg/b3sum/version @@ -1,3 +0,0 @@ -method=git -ref=d995c3d -rel=0 diff --git a/pkg/byacc/gen.sh b/pkg/byacc/gen.sh @@ -1,3 +1,6 @@ +fetch curl https://invisible-mirror.net/archives/byacc/byacc-20241231.tgz \ + 192c2fae048d4e7f514ba451627f9c4e612765099f819c19191f9fde3e609673 + cflags " -I $dir/include -D HAVE_CONFIG_H diff --git a/pkg/byacc/version b/pkg/byacc/version @@ -1,4 +0,0 @@ -method=curl -url=https://invisible-mirror.net/archives/byacc/byacc-20241231.tgz -sha256=192c2fae048d4e7f514ba451627f9c4e612765099f819c19191f9fde3e609673 -rel=0 diff --git a/pkg/fspec-sync/gen.sh b/pkg/fspec-sync/gen.sh @@ -1,3 +1,5 @@ +fetch git + cflags " -std=c99 -I $pkgdir/b3sum/include diff --git a/pkg/fspec-sync/version b/pkg/fspec-sync/version @@ -1,3 +0,0 @@ -method=git -ref=eca7ad6 -rel=0 diff --git a/pkg/less/gen.sh b/pkg/less/gen.sh @@ -1,3 +1,6 @@ +fetch curl https://www.greenwoodsoftware.com/less/less-679.tar.gz \ + 9b68820c34fa8a0af6b0e01b74f0298bcdd40a0489c61649b47058908a153d78 + cflags " -std=c99 -D _XOPEN_SOURCE=700 diff --git a/pkg/less/version b/pkg/less/version @@ -1,4 +0,0 @@ -method=curl -url=https://www.greenwoodsoftware.com/less/less-679.tar.gz -sha256=9b68820c34fa8a0af6b0e01b74f0298bcdd40a0489c61649b47058908a153d78 -rel=0 diff --git a/pkg/mandoc/gen.sh b/pkg/mandoc/gen.sh @@ -1,3 +1,6 @@ +fetch curl http://mandoc.bsd.lv/snapshots/mandoc-1.14.6.tar.gz \ + 8bf0d570f01e70a6e124884088870cbed7537f36328d512909eb10cd53179d9c + cflags " -I $dir/include -I $pkgdir/zlib/include diff --git a/pkg/mandoc/version b/pkg/mandoc/version @@ -1,4 +0,0 @@ -method=curl -url=http://mandoc.bsd.lv/snapshots/mandoc-1.14.6.tar.gz -sha256=8bf0d570f01e70a6e124884088870cbed7537f36328d512909eb10cd53179d9c -rel=0 diff --git a/pkg/netbsd-curses/gen.sh b/pkg/netbsd-curses/gen.sh @@ -1,3 +1,5 @@ +fetch git + cflags " -D _XOPEN_SOURCE=700 -D TERMINFO_DB diff --git a/pkg/netbsd-curses/version b/pkg/netbsd-curses/version @@ -1,3 +0,0 @@ -method=git -ref=3aa07c2 -rel=0 diff --git a/pkg/oksh/gen.sh b/pkg/oksh/gen.sh @@ -1,3 +1,5 @@ +fetch git + cflags " -D SMALL -D EMACS diff --git a/pkg/oksh/version b/pkg/oksh/version @@ -1,3 +0,0 @@ -method=git -ref=936f355 -rel=0 diff --git a/pkg/pax/gen.sh b/pkg/pax/gen.sh @@ -1,3 +1,5 @@ +fetch git + cflags " -std=c99 -Wno-sign-compare diff --git a/pkg/pax/version b/pkg/pax/version @@ -1,3 +0,0 @@ -method=git -ref=95d26ab -rel=0 diff --git a/pkg/sbase/gen.sh b/pkg/sbase/gen.sh @@ -1,3 +1,5 @@ +fetch git + cflags " -std=c99 -D _DEFAULT_SOURCE diff --git a/pkg/sbase/version b/pkg/sbase/version @@ -1,3 +0,0 @@ -method=git -ref=6b802ab -rel=0 diff --git a/pkg/zlib/gen.sh b/pkg/zlib/gen.sh @@ -1,3 +1,5 @@ +fetch git + cflags " -std=c99 -D HAVE_STDARG_H diff --git a/pkg/zlib/version b/pkg/zlib/version @@ -1,3 +0,0 @@ -method=git -ref=5a82f71 -rel=0 diff --git a/pkg/zstd/gen.sh b/pkg/zstd/gen.sh @@ -1,3 +1,5 @@ +fetch git + zstd_cflags=" -D ZSTD_NOBENCH -D ZSTD_NODICT diff --git a/pkg/zstd/version b/pkg/zstd/version @@ -1,3 +0,0 @@ -method=git -ref=22b4483 -rel=0