linux-qubasis

linux oasis port as a qubes template

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

commit 3b81eb89a74a46df682c505fac8401d59060f6d8
parent 9bb6d33bd325bc2e5435ca3896181d019b27ff94
Author: Jul <jul@9o.is>
Date:   Thu, 28 Aug 2025 03:03:38 +0800

make ninja scripts posix compliant

  - remove local built-ins
  - reduce quoting

Diffstat:
Mninja/functions.sh | 354++++++++++++++++++++++++++++++++++---------------------------------------------
Mninja/sync.sh | 25+++++++++----------------
Mpkg/fspec-sync/gen.sh | 4++--
Mpkg/mandoc/gen.sh | 2++
Mpkg/netbsd-curses/gen.sh | 24++++++++++--------------
Apkg/netbsd-curses/patch/0001-make-genhash-script-posix-compliant.patch | 25+++++++++++++++++++++++++
Mpkg/zlib/gen.sh | 7++++---
7 files changed, 204 insertions(+), 237 deletions(-)

diff --git a/ninja/functions.sh b/ninja/functions.sh @@ -1,28 +1,26 @@ setv() { - local v=$1; shift; - printf '%s = %s\n' "$v" "$*" >> "$_ninja_writepath" + _v1=$1; shift; + printf '%s = %s\n' "$_v1" "$*" >> "$_ninja_writepath" } bind() { - local v=$1; shift; - setv " $v" "$*" + _v1=$1; shift; + setv " $_v1" "$*" } include() { - printf 'include %s\n' "$1" >> "$_ninja_writepath" + printf 'include %s\n' $1 >> "$_ninja_writepath" } rule() { - printf 'rule %s\n' "$1" >> "$_ninja_writepath" + printf 'rule %s\n' $1 >> "$_ninja_writepath" bind 'command' "$2" } build() { - local rule="$1"; shift; - local out="$1"; shift; - local value="$*" - - printf 'build %s: %s %s\n' "$out" "$rule" "$value" >> "$_ninja_writepath" + _v1=$1; shift + _v2=$1; shift + printf 'build %s: %s %s\n' "$_v2" "$_v1" "$*" >> "$_ninja_writepath" } cflags() { @@ -30,119 +28,98 @@ cflags() { } copy() { - local src="$1" - local out="${2-$src}" - - _ninja_prefix out '$outdir' $out - _ninja_prefix src '$srcdir' $src - _ninja_sync $src + _ninja_prefix _src $srcdir $1 + _ninja_prefix _out $outdir ${2-$1} + _ninja_sync $_src - build copy "$out" "$src" + build copy $_out $_src } gzip() { - local src="$1" - local out="${2-$src}" - - _ninja_prefix out '$outdir' "$out" - _ninja_prefix src '$srcdir' $src - _ninja_sync $src + _ninja_prefix _src $srcdir $1 + _ninja_prefix _out $outdir ${2-$1} + _ninja_sync $_src - build gzip "$out" "$src" + build gzip $_out $_src } bin() { - local src="$1" - _ninja_fspec /bin/$src reg 0755 $src + _ninja_fspec /bin/$1 reg 0755 $1 } dir() { - local path="$1" - local mode="${2-0755}" - _ninja_fspec $path dir $mode + _ninja_fspec $1 dir ${2-0755} } sym() { - local target="$1" - local path="$2" - _ninja_fspec $path sym 0777 $target + _ninja_fspec $2 sym 0777 $1 } reg() { - local src="$1" - local path="$2" - local mode="${3-0644}" - _ninja_fspec $path reg $mode $src + _ninja_fspec $2 reg ${3-0644} $1 } man() { - local src="$1" - local sec="${2-}" - local out="${src##*/}" + _src=$1 + _sec=${2-} + _out=${_src##*/} - if [ "$sec" ]; then - out="${out%.*}.$sec" + if [ $_sec ]; then + _out=${_out%.*}.$_sec else - sec="${src##*.}" + _sec=${_src##*.} fi - if [ "$GZMAN" = 'true' ]; then - out="$out.gz" - gzip $src $out + if [ "${GZMAN-}" = true ]; then + _out=$_out.gz + _cmd=gzip else - copy $src $out + _cmd=copy fi - _ninja_fspec $MANDIR/man$sec/$out reg 0644 $out + _ninja_fspec $MANDIR/man$_sec/$_out reg 0644 $_out + $_cmd $_src $_out } compile() { - local objs='' - - _ninja_prefix srcs '$srcdir' "$*" - _ninja_compile '' $srcs + _ninja_prefix _srcs $srcdir $* + _ninja_compile $_srcs } sync() { - _ninja_prefix srcs '$srcdir' $* - _ninja_sync $srcs + _ninja_prefix _srcs $srcdir $* + _ninja_sync $_srcs } exe() { _ninja_flush_exe + _out=$1; shift - local out="$1"; shift - local srcs="$*" - - _ninja_prefix out '$outdir' $out - _ninja_prefix srcs '$srcdir' $srcs - _ninja_sync $srcs - - _ninja_buffer_exe="$out $srcs" + _ninja_prefix _out $outdir $_out + _ninja_prefix _srcs $srcdir $* + _ninja_sync $_srcs + _ninja_buffer_exe="$_out $_srcs" } lib() { _ninja_flush_lib + _out=$1; shift - local out="$1"; shift - local srcs="$*" - - _ninja_prefix out '$outdir' $out - _ninja_prefix srcs '$srcdir' $srcs - _ninja_sync $srcs - - _ninja_buffer_lib="$out $srcs" + _ninja_prefix _out $outdir $_out + _ninja_prefix _srcs $srcdir $* + _ninja_sync $_srcs + _ninja_buffer_lib="$_out $_srcs" } dep() { - _ninja_prefix srcs '$basedir/pkg' $* - _ninja_buffer_deps="$_ninja_buffer_deps $srcs" + _ninja_prefix _srcs $basedir/pkg $* + _ninja_buffer_deps="$_ninja_buffer_deps $_srcs" } headers() { - _ninja_prefix srcs '$srcdir' $* - _ninja_sync $srcs - _ninja_buffer_headers="$_ninja_buffer_headers $srcs" + _ninja_prefix _srcs $srcdir $* + _ninja_sync $_srcs + _ninja_buffer_headers="$_ninja_buffer_headers $_srcs" } pkg() { @@ -150,25 +127,27 @@ pkg() { } subgen() { - if [ "$_ninja_type" != 'root' ]; then - local subgendir="$_ninja_gendir/" + _prefix= + + if [ $_ninja_type != root ]; then + _prefix="$_ninja_gendir/" fi - _ninja_queue_subgen="$_ninja_queue_subgen ${subgendir-}$1" + _ninja_queue_subgen="$_ninja_queue_subgen $_prefix$1" _ninja_buffer_subgen="$_ninja_buffer_subgen $1" } gen() { - _ninja_init "$1" - _ninja_setv_init "$1" + _ninja_init $1 + _ninja_setv_init $1 . "$_ninja_dir"/gen.sh _ninja_complete if [ "$_ninja_queue_subgen" ]; then set -- $_ninja_queue_subgen - local pkg=$1; shift; - _ninja_queue_subgen="$@" - gen $pkg + _v1=$1; shift; + _ninja_queue_subgen="$*" + gen $_v1 fi } @@ -180,9 +159,7 @@ gen() { _ninja_queue_subgen= _ninja_init() { - local gendir=$1 - - _ninja_initglobals "$gendir" + _ninja_initglobals "$1" mkdir -p "${_ninja_writepath%/*}" printf '' > "$_ninja_writepath" } @@ -191,8 +168,7 @@ _ninja_complete() { _ninja_flush if [ "$_ninja_type" = 'root' ]; then - local gen_files='$basedir/config.sh $basedir/ninja/functions.sh $dir/gen.sh' - build gen $ninjadir/$_ninja_file '|' $gen_files + build gen $ninjadir/$_ninja_file '| $basedir/config.sh $basedir/ninja/functions.sh $dir/gen.sh' fi mv "$_ninja_writepath" "${_ninja_writepath%.*}" @@ -203,29 +179,27 @@ _ninja_complete() { } _ninja_initglobals() { - local gendir="$1" - _ninja_basedir="${_ninja_basedir-$basedir}" - _ninja_dir="$_ninja_basedir/$gendir" + _ninja_dir="$_ninja_basedir/$1" _ninja_ninjadir="$_ninja_basedir"/$BUILDDIR/ninja - case "$gendir" in + case "$1" in .) _ninja_type=root _ninja_file=root.ninja ;; pkg/*|tpl/*) - _ninja_type="${gendir%%/*}" - _ninja_gendir="$gendir" + _ninja_type="${1%%/*}" + _ninja_gendir="$1" if [ "${_ninja_host-}" ]; then - _ninja_file=host/${gendir#*/}.ninja + _ninja_file=host/${1#*/}.ninja else - _ninja_file=$gendir.ninja + _ninja_file=$1.ninja fi ;; *) - printf "Error gen $_ninja_file: invalid gendir: %s\n" "$gendir" + printf "Error gen $_ninja_file: invalid gendir: %s\n" "$1" exit 1 esac @@ -270,93 +244,81 @@ _ninja_setv_init() { outdir='$outdir' srcdir='$srcdir' rootdir='$rootdir' - objdir='$outdir/_objects' pkgdir='$pkgdir' + objdir='$outdir/_obj' unset -f host } _ninja_prefix() { - local variable="$1"; shift - local prefix="$1"; shift - local vs='' - local v='' + _var="$1"; shift + _prefix="$1"; shift + _vs='' - for v in $*; do - case $v in + for _v in $*; do + case $_v in \$*) ;; - *) v="$prefix/$v";; + *) _v="$_prefix/$_v";; esac - if [ "$vs" ]; then - vs="$vs $v" + if [ "$_vs" ]; then + _vs="$_vs $_v" else - vs="$v" + _vs="$_v" fi done - eval "$variable='$vs'" + eval "$_var='$_vs'" } _ninja_sync() { - local src='' - - for src in $@; do - case $src in + for _v in $*; do + case $_v in \$srcdir/*) - _ninja_buffer_sync="$_ninja_buffer_sync $src" + _ninja_buffer_sync="$_ninja_buffer_sync $_v" esac done } _ninja_fspec() { - local path="$PREFIX$1" - local type="${2}" - local mode="${3}" - local src="${4-}" - - _ninja_buffer_fspec="$_ninja_buffer_fspec$path $type $mode $src\n" + _ninja_buffer_fspec="$_ninja_buffer_fspec$PREFIX$1 $2 $3 ${4-}\n" } _ninja_fspec_file() { - local name="$1"; shift + _v1="$1"; shift if [ ! "$*" ]; then - _ninja_buffer_fspec_files="$_ninja_buffer_fspec_files $pkgdir/$name/_files/_all" + _ninja_buffer_fspec_files="$_ninja_buffer_fspec_files $pkgdir/$_v1/_files/_all" return fi - for fspec in $*; do - _ninja_buffer_fspec_files="$_ninja_buffer_fspec_files $pkgdir/$name/_files/$fspec" + for _v in $*; do + _ninja_buffer_fspec_files="$_ninja_buffer_fspec_files $pkgdir/$_v1/_files/$_v" done } _ninja_compile() { - local out="$1"; shift - local srcs="$@" - local src='' - local obj='' - - for src in $srcs; do - case $src in + _objs= + for _src in $*; do + case $_src in *.[cS]) - obj=$objdir/${src#\$srcdir/}.o + _obj=$objdir/${_src#\$srcdir/}.o if [ "$_ninja_buffer_deps" ]; then - src="$src || \$tgtdir/deps" + _src="$_src || \$tgtdir/deps" fi - build cc $obj $src - objs="$objs $obj" + build cc $_obj $_src + _objs="$_objs $_obj" ;; *.[ao]) - objs="$objs $src" + _objs="$_objs $_src" ;; *.a.d) - _ninja_buffer_d="$_ninja_buffer_d $src" + _ninja_buffer_d="$_ninja_buffer_d $_src" ;; *) - printf "Error gen $_ninja_file: unknown file to compile: %s\n" "$src" + printf "Error gen $_ninja_file: unknown file to compile: %s\n" "$_src" exit 1 esac done @@ -369,22 +331,19 @@ _ninja_flush_exe() { set -- $_ninja_buffer_exe - local out="$1"; shift; - local srcs="$@" - local objs='' + _out="$1"; shift; + _ninja_compile $* - _ninja_compile "$out" $srcs - - if [ "$objs" ]; then + if [ "$_objs" ]; then if [ "$_ninja_buffer_d" ]; then - local rspfile=$outdir/_rsp/${out##*/} + _rspfile=$outdir/_rsp/${_out##*/} - build link $out $objs '|' $rspfile - bind ldlibs @$rspfile - build awk $rspfile $_ninja_buffer_d '|' $basedir/ninja/rsp.awk + build link $_out $_objs '|' $_rspfile + bind ldlibs @$_rspfile + build awk $_rspfile $_ninja_buffer_d '|' $basedir/ninja/rsp.awk bind expr '-f $basedir/ninja/rsp.awk' else - build link $out $objs + build link $_out $_objs fi fi @@ -399,36 +358,31 @@ _ninja_flush_lib() { set -- $_ninja_buffer_lib - local out="$1"; shift; - local srcs="$@" - local src='' - local objs='' - local as='' - - _ninja_compile "$out" $srcs + _out="$1"; shift; + _srcs= + _ninja_compile $* - for src in $srcs; do - case $src in - *.a) as="$as $src" + for _src in $*; do + case $_src in + *.a) _srcs="$_srcs $_src" esac done - if [ "$objs" ]; then - build ar $out $objs - build rsp $out.d $out $as + if [ "$_objs" ]; then + build ar $_out $_objs + build rsp $_out.d $_out $_srcs fi _ninja_buffer_lib= } _ninja_flush_subninjas() { - local pkg='' - for pkg in $_ninja_buffer_subgen; do - printf 'subninja $ninjadir/%s.ninja\n' "$pkg" >> "$_ninja_writepath" + for _v in $_ninja_buffer_subgen; do + printf 'subninja $ninjadir/%s.ninja\n' "$_v" >> "$_ninja_writepath" done if [ ! "${_ninja_host-}" ] && command -v host >/dev/null 2>&1; then - local srcs="$( + _srcs="$( _ninja_host='true' _ninja_init "$_ninja_gendir" @@ -447,53 +401,51 @@ _ninja_flush_subninjas() { )" printf 'subninja $ninjadir/host/%s.ninja\n' "${_ninja_gendir#*/}" >> "$_ninja_writepath" - _ninja_buffer_sync="$_ninja_buffer_sync $srcs" + _ninja_buffer_sync="$_ninja_buffer_sync $_srcs" fi } _ninja_flush_build() { - local subbuilds='' - local pkg='' - if [ "${_ninja_host-}" ]; then return fi - for pkg in $_ninja_buffer_subgen; do - subbuilds="$subbuilds \$tgtdir/$pkg/build" + _srcs= + + for _v in $_ninja_buffer_subgen; do + _srcs="$_srcs \$tgtdir/$_v/build" done case $_ninja_type in - root) build phony $tgtdir/build $subbuilds;; + root) build phony $tgtdir/build $_srcs;; tpl) build phony $tgtdir/build $outdir/rootfs.tar.zst;; - pkg) build phony $tgtdir/build $outdir/_files/_all $subbuilds;; + pkg) build phony $tgtdir/build $outdir/_files/_all $_srcs;; esac } _ninja_flush_sync() { - local subsyncs='' - local verfile="$_ninja_dir"/version - if [ "${_ninja_host-}" ]; then printf "$_ninja_buffer_sync" return fi + _srcs= + if [ "$_ninja_type" != 'root' ]; then - subsyncs='$outdir/_files/_version' + _srcs=$outdir/_files/_version fi - for pkg in $_ninja_buffer_subgen; do - subsyncs="$subsyncs \$tgtdir/$pkg/sync" + for _v in $_ninja_buffer_subgen; do + _srcs="$_srcs \$tgtdir/$_v/sync" done - build phony $tgtdir/sync "$subsyncs" + build phony $tgtdir/sync "$_srcs" if [ "$_ninja_type" = 'root' ]; then return fi - if [ ! -f "$verfile" ]; then + if [ ! -f "$_ninja_dir"/version ]; then build touch $outdir/_files/_version return fi @@ -521,18 +473,15 @@ _ninja_flush_headers() { return fi - local src='' - local out='' - local outs='' + _srcs= - for src in $_ninja_buffer_headers; do - out=$outdir/include/${src##*/} - outs="$outs $out" - - build copy $out $src + for _src in $_ninja_buffer_headers; do + _out=$outdir/include/${_src##*/} + _srcs="$_srcs $_out" + build copy $_out $_src done - build phony $tgtdir/headers "$outs" + build phony $tgtdir/headers "$_srcs" } _ninja_flush_fspec() { @@ -545,7 +494,7 @@ _ninja_flush_fspec() { return fi - local fspecs=$(printf "$_ninja_buffer_fspec" | while read -r line; do + _srcs=$(printf "$_ninja_buffer_fspec" | while read -r line; do set -- $line path="$1" type="$2" @@ -572,7 +521,7 @@ _ninja_flush_fspec() { printf "$out " done) - build cat $outdir/_files/_all $fspecs $_ninja_buffer_fspec_files + build cat $outdir/_files/_all $_srcs $_ninja_buffer_fspec_files if [ "$_ninja_type" = 'tpl' ]; then build fspec-tar $outdir/rootfs.tar.zst $outdir/_files/_all @@ -591,16 +540,17 @@ _ninja_flush() { } _ninja_dedup() { - local variable=$1; shift - local src='' - local tmp='' - - for src in $*; do - case "$tmp" in - *" $src "* | "$src "* | *" $src") ;; - *) tmp="$tmp $src";; + _var=$1; shift + _vs= + + eval "$_var=''" + + for _v in $*; do + case "$_vs" in + *" $_v "* | "$_v "* | *" $_v") ;; + *) _vs="$_vs $_v";; esac done - eval "$variable='$tmp'" + eval "$_var='$_vs'" } diff --git a/ninja/sync.sh b/ninja/sync.sh @@ -10,6 +10,7 @@ fi dir="$1" version_file="$2" out_file="$3" +repo=$dir/repo . "$version_file" @@ -24,11 +25,7 @@ if [ ! "${rel-}" ]; then fi sync_curl() { - local repo="$1" - local url="$2" - local sha256="$3" - local rel="$4" - local file="$dldir/${url##*/}" + file="$dldir/${url##*/}" if [ -e "$repo" ]; then rm -rf "$repo" @@ -55,17 +52,13 @@ sync_curl() { } sync_git() { - local repo="$1" - local ref="$2" - local rel="$3" - git submodule update --init --checkout $repo - git -C $repo clean -dx - git -C $repo reset --hard $ref - if [ -d patch ] ; then - git -C $repo am --keep-non-patch --no-gpg-sign \ - --whitespace=nowarn ../patch/*.patch + if [ -d $dir/patch ] ; then + for patch in $dir/patch/*.patch; do + git -C $repo am --keep-non-patch --no-gpg-sign \ + --whitespace=nowarn ../patch/${patch##*/} + done fi git -C $repo tag -f r$rel @@ -83,7 +76,7 @@ case $method in exit 1 fi - sync_curl $dir/repo "$url" $sha256 $rel + sync_curl ;; git) if [ ! "${ref-}" ]; then @@ -91,7 +84,7 @@ case $method in exit 1 fi - sync_git $dir/repo $ref $rel + sync_git ;; *) printf "Error sync $dir: unknown sync method '%s'\n" "$method" >&2 diff --git a/pkg/fspec-sync/gen.sh b/pkg/fspec-sync/gen.sh @@ -4,6 +4,8 @@ cflags \ -Wno-maybe-uninitialized \ -Wno-sign-compare +dep b3sum/headers + host() { cflags -I $pkgdir/b3sum/include dep b3sum/headers @@ -27,8 +29,6 @@ host() { $outdir/libcommon.a } -dep b3sum/headers - lib libcommon.a \ fatal.c \ parse.c \ diff --git a/pkg/mandoc/gen.sh b/pkg/mandoc/gen.sh @@ -10,6 +10,8 @@ cflags \ -Wno-maybe-uninitialized \ -Wno-error +dep zlib/headers + lib libmandoc.a \ arch.c \ att.c \ diff --git a/pkg/netbsd-curses/gen.sh b/pkg/netbsd-curses/gen.sh @@ -16,6 +16,13 @@ cflags \ -Wno-pedantic \ -Wno-type-limits +headers \ + lib/libcurses/curses.h \ + lib/libcurses/unctrl.h \ + lib/libterminfo/term.h \ + lib/libterminfo/termcap.h \ + lib/libpanel/panel.h + rule tic '$hostdir/tic $ticflags -o $out $in $terms' bind description 'TIC $out' @@ -33,13 +40,9 @@ tic() { } nbperf() { - local script=$srcdir/lib/libterminfo/$1 - local out=$outdir/$2 - local src=$srcdir/$3 - - build nbperf $out $script $src '|' $script $hostdir/nbperf - sync $src - dep $out + build nbperf $outdir/$2 $srcdir/lib/libterminfo/$1 $srcdir/$3 '|' $hostdir/nbperf + sync $srcdir/$3 + dep $outdir/$2 } host() { @@ -69,13 +72,6 @@ tic terminfo -x nbperf genhash deps/hash.c lib/libterminfo/term.h nbperf genthash deps/termcap_hash.c lib/libterminfo/termcap_map.c -headers \ - lib/libcurses/curses.h \ - lib/libcurses/unctrl.h \ - lib/libterminfo/term.h \ - lib/libterminfo/termcap.h \ - lib/libpanel/panel.h - lib libterminfo.a \ compat/cdbr.c \ compat/mi_vector_hash.c \ diff --git a/pkg/netbsd-curses/patch/0001-make-genhash-script-posix-compliant.patch b/pkg/netbsd-curses/patch/0001-make-genhash-script-posix-compliant.patch @@ -0,0 +1,25 @@ +From 21ff488e1c070de6e25d4eba8c4a547eacf6f2ff Mon Sep 17 00:00:00 2001 +From: Jul <jul@qh.is> +Date: Thu, 28 Aug 2025 01:55:04 +0800 +Subject: [PATCH] make genhash script posix compliant + +--- + lib/libterminfo/genhash | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/libterminfo/genhash b/lib/libterminfo/genhash +index b52fd9b..3465c17 100755 +--- a/lib/libterminfo/genhash ++++ b/lib/libterminfo/genhash +@@ -41,7 +41,7 @@ TERMH=${1:-term.h} + + genent() + { +- local name=$1 NAME=$2 len= ++ name=$1 NAME=$2 len= + + # Calculate the maximum word length plus terminator + len=$($TOOL_SED -e "1,/enum TI${NAME}/d" -e '/};/,$d' \ +-- +2.50.1 + diff --git a/pkg/zlib/gen.sh b/pkg/zlib/gen.sh @@ -4,6 +4,10 @@ cflags \ -D HAVE_UNISTD_H \ -D _LARGEFILE64_SOURCE +headers \ + zconf.h \ + zlib.h + lib libz.a \ adler32.c \ compress.c \ @@ -20,6 +24,3 @@ lib libz.a \ trees.c \ uncompr.c \ zutil.c - -copy zlib.h include/zlib.h -copy zconf.h include/zconf.h