commit 985430d36342a7302c16b702cb88a6aba4c6489e parent 1fc96f9fe604c901a77a265dd1c9e2663b598d6e Author: Jan Pobrislo <ccx@te2000.cz> Date: Wed, 10 Dec 2025 16:54:31 +0000 add libtermkey Diffstat:
29 files changed, 354 insertions(+), 67 deletions(-)
diff --git a/downloadlist.sha256 b/downloadlist.sha256 @@ -151,3 +151,4 @@ a3903371efcce8a405c5c245d029e9f6850258a60fa3761c4d58995610949b31 11724552 https: f51d528fa680873914aa8367707726dd777fccc6e5c95cfad90fdb3562375c04 435801 https://github.com/void-linux/xbps/archive/0.60.6.tar.gz 0ad5dcba973a69e779650ef1cb335b12ee60716fc7326609895bd33e6d2a7325 2722572 https://github.com/strace/strace/releases/download/v6.18/strace-6.18.tar.xz 9a0fc2d6c377215c3e0d849f9189ecd91fd075f1da0a24b73f56c8892e86bdfe 835265 https://github.com/libcgroup/libcgroup/releases/download/v3.2.0/libcgroup-3.2.0.tar.gz +6945bd3c4aaa83da83d80a045c5563da4edd7d0374c62c0d35aec09eb3014600 46147 https://www.leonerd.org.uk/code/libtermkey/libtermkey-0.22.tar.gz diff --git a/filelist.sha256 b/filelist.sha256 @@ -41,6 +41,7 @@ cc2633ee136db0283d4faf7c27c890641e90cd835fc3adb19eaf0569e4078867 files/lh_boots 3b20df1d58f9a445785503415aea1188d33159327c2edab3d370dbd37bc4845e files/libelf.h f33d82840d1db22114e18626b64922fa1a3b539a2dee6847528ecc1b17b7b659 files/linux-6.1.34-x86_64-nossl.config 6beb4182e8815f0157ba784b932038a09f5e72d84dd1aba423a8c1a68167731e files/linux-6.1.34-x86_64.config +38546132164436766b5707c6a2ea63be6663c2af9655015677a90a0380889800 files/litbermkey-build-static-lib.patch c19f287c2833db07a3a16852670eedfba414737ace98be61c4843ba74f033374 files/mcm-binutils-2.25.1-merged.diff 7eefc1c674448997d1e8af90606c6f99dc4e04ba24ad8beac4697aeff98d83b7 files/mcm-binutils-2.27-merged.diff d5b86a9a3447ee9a4d83d269f3fbb5e29660a42122629597bdf8ee1e259d8c21 files/mcm-binutils-2.32-merged.diff diff --git a/templates/pkg/libtermkey b/templates/pkg/libtermkey @@ -0,0 +1,21 @@ +{%- import "package_sets" as ps -%} +{% extends "genlinks_mini" %} +{%- do import_functions.update(["build_env_static", "check_static"]) %} +{%- block template_deps -%} +{{ super() -}} +#+{{pkg_install_name("patch")}} +{{ ps.toolchain() }} +#+{{pkg_install_name("gnu-make")}} +{% endblock template_deps %} +{%- block configure %} +patch -p1 <../litbermkey-build-static-lib.patch + +{% endblock configure %} +{%- block build %} +make PREFIX="$PREFIX" + +{%- endblock build %} +{% block genlinks_begin %} + x["./{{includedir}}/libtermkey.h"]=1 + x["./{{libdir}}/libtermkey.a"]=1 +{% endblock %} diff --git a/templates/pkg/rsync b/templates/pkg/rsync @@ -19,14 +19,15 @@ #+{{ pkg_install_name("acl") }} #+{{ pkg_install_name("attr") }} {% endblock %} -{% block configure_args -%} +{% block configure -%} +build_env_static +autotools_config \ --without-included-popt \ --enable-openssl \ --enable-zstd \ - --enable-acl \ - --enable-attr \ --disable-xxhash \ --disable-lz4 + {% endblock %} {% block check -%} check_static command/rsync diff --git a/templates/pkg/vis b/templates/pkg/vis @@ -6,6 +6,7 @@ #+{{ pkg_install_name(make_impl|default("gnu-make")) }} #+{{ pkg_install_name("netbsd-curses") }} #+{{ pkg_install_name("acl") }} +#+{{ pkg_install_name("libtermkey") }} {% endblock package_deps -%} {%- block configure %} build_env_static @@ -16,10 +17,10 @@ build_env_static --docdir="$prefix/{{docdir}}/{{shortname}}" \ --sharedir="$prefix/{{datadir}}" \ --enable-curses \ - --disble-lua \ - --disble-lpeg-static \ - --disble-tre \ - --disble-selinux \ + --disable-lua \ + --disable-lpeg-static \ + --disable-tre \ + --disable-selinux \ --enable-acl \ --enable-help diff --git a/variants/ccx-x86_64/busybox:modutils b/variants/ccx-x86_64/busybox:modutils @@ -1,5 +1,5 @@ #!/usr/bin/env pthbs-build -#+linux-qemu-guest.34601cc9fdecb8d4bf87df249c917ea702e0e116ccfeb8090ac8d261b3d27e3e +#+linux-qemu-guest.58e7d51e09101207b3d683f4f503471f335a296c76d598bff2ed7cfd60f26bb0 #+musl-cross-make.14e02e45cc77fb5c9787349ef554dda78766f71652b100aee3b00e24a3d02cd1 #+gnu-make.4034f4d785c5108ad387088199242aa8aa6920e7aab1f79ce51d1f43e97cb580 #+busybox.56c53c92327b9fadf0d6015842344b63e07c8b93e2a047453128d7575529d5c4 @@ -60,7 +60,7 @@ export CFLAGS="-D_GNU_SOURCE" export LDFLAGS="-static" # TODO: indirection via deps directory/symlink cat >>.config <<EOF -CONFIG_DEFAULT_MODULES_DIR="/home/ccx/versions/linux-qemu-guest.34601cc9fdecb8d4bf87df249c917ea702e0e116ccfeb8090ac8d261b3d27e3e" +CONFIG_DEFAULT_MODULES_DIR="/home/ccx/versions/linux-qemu-guest.58e7d51e09101207b3d683f4f503471f335a296c76d598bff2ed7cfd60f26bb0" EOF make oldconfig cat .config diff --git a/variants/ccx-x86_64/default.environment b/variants/ccx-x86_64/default.environment @@ -50,7 +50,7 @@ #+patch.2107bae5d78ad951bd28615d44c983d64e686d320b40f74e4f5137fd9bcc2c6a #+flex.d39167f250ee7e10bded88eb7835bc8b7871aa2a3a60dcab340c4b7bc4b6672a #+bison.97ce4714edbb7c38d86cd484acc46fb0f4e07aa2371be0cb93375de8395ef327 -#+rsync.9edb188f8fb5ae6c692815ff1ab2215582db9daef37d50303ca31aa34d8a6b36 +#+rsync.847c889c40db7d219db3b84e245db91e309c8a4330b2b872ca70ef80b57a579a #+execline.49940e3d6f0e84ccbcddfce3dd2db760ad451a312896a69902b3f8e95a600e92 #+s6.0d5d4703e07c3e5a0d4567706c69119aad5a0e9a37c28bf6b05dd12a27dc1eb1 #+s6-rc.b3ba6e214c85c2f5cb10d42dd9d344798a776c86a200911d7eec95bcc955ef48 @@ -83,13 +83,13 @@ #+mlog.13adb42c1c505e3026114651c2f36d0a8c0723cc44e5c60f023d36db089806c5 #+findutils.89e63f707a8d7be6a083e58b937c21752b28c1a5d7760dd85dd985fa85366e3b #+nawk.4028835d6434ac7d8655c7f9e74ff307e2db89bf2c94002a309babd8a6780007 -#+vis.2fab2f1052159b31f27a245b862efe57c8df17173ab81514b2c812459b543fc4 +#+vis.0ed8971acba2ee38c0e12be8aa267f78fc7f4be3076acf48f81b3d49cfb2ea93 #+squashfs-tools.d674abf818e01e9a46d0a6e995c2fa8f4e6086671e2b4d8345e8f592e0558128 #+mandoc.e037587ebdf49fabbb28d83caa5b22be308fa7406c22f4f7545106426c458bdc #+tinyssh.0ac46feb5c124a8975937476f186cccae55fefec0cb8865ff2bac544a2af31af -#+system-config.5d64f6f1f516c029bc8805d568b161a84739ca6daad52a57ca4ea6e57e16d01f -#+system-config-rc.c8e12fd1cc81e83350bdbec0692b331b4d426f51ddbc523318c810c025ed5d9a +#+system-config.37fc26a40a8209346b24fcca4d1e43f5dbb62d6f84634bbcd94b67d9639f130c +#+system-config-rc.0922559eaa62c702509597022dbadaa6a718001d986394dc11e28ce54357016b #+system-config-scripts.0c081aa66e7b2b7ccfb20f9c75e5dfff8f8d6804d0b4624934a8059354c14d9e -#+system-config-init.952fa4c745f25f1891ddb512ba8e896c214b573ecaf517aae267bd498223c7ab +#+system-config-init.370b5cad4c253b15027c8ec0423a6a907779e2ad218de0becdef20f1a8fa8439 #+system-config-zsh.4fbaba9e3faaa13ba5a2d93a2b3dc4a5a94ebb5ed5bb7facfc94308076a14253 -#+busybox.8a2a5bd92237a1abddc853cb707440944ec79bbee0815c445715f478f7ef2c85- \ No newline at end of file +#+busybox.4fe6cdfe11b32717d11efe7564d0b495aba0f2d3fecad9b803ee0505e2a11c9e+ \ No newline at end of file diff --git a/variants/ccx-x86_64/kernel.environment b/variants/ccx-x86_64/kernel.environment @@ -1,3 +1,3 @@ #!/usr/bin/env pthbs-build -#+linux-qemu-guest.34601cc9fdecb8d4bf87df249c917ea702e0e116ccfeb8090ac8d261b3d27e3e -#+busybox.8a2a5bd92237a1abddc853cb707440944ec79bbee0815c445715f478f7ef2c85- \ No newline at end of file +#+linux-qemu-guest.58e7d51e09101207b3d683f4f503471f335a296c76d598bff2ed7cfd60f26bb0 +#+busybox.4fe6cdfe11b32717d11efe7564d0b495aba0f2d3fecad9b803ee0505e2a11c9e+ \ No newline at end of file diff --git a/variants/ccx-x86_64/libtermkey b/variants/ccx-x86_64/libtermkey @@ -0,0 +1,133 @@ +#!/usr/bin/env pthbs-build +#+busybox.56c53c92327b9fadf0d6015842344b63e07c8b93e2a047453128d7575529d5c4 +#+busybox-bzip2.0126bb7b1e717e04f34279b95c4e6174eee34f87a5d07231c8ecdc34f6ab1fea +#+busybox-gzip.ce3b1b66526fe19bb5f8a2d8ac1ca8e16313b1160e0476161a2952caa3e9ab4f +#+busybox-lzop.b010a9d4f7f9b29d1f839e5ebac7dbc1f2d57626ce3e48adbc5011a20e5bba71 +#+busybox-unzip.6e78fc97ae94aa9ceb41caff369bbf0db7e4500d924171acfc5cfdb83e357c38 +#+busybox-xz.b41b61d24d06de8007f02a0ef1d043730f1f70ad127eb3d0176e377240f7a763 +#+busybox-cpio.a6bac71dd44c8cae7212a9007bd04db49a6d49a4a48a1b67c857274276c89a7e +#+busybox-dpkg.e12f71bf6e1dc2477f5c8e429d9d764ad6d2aa1de36b3c9ffa2f645ae098a5a2 +#+busybox-rpm.355d32d3317387a12b93fa6dedb8c027f79e586791623572f7c56dc3469f3503 +#+busybox-tar.bde77d83984306e943d75ffde3387a310b4de0bdfbfe0d48bd41ecf61b2d39cb +#+busybox-ed.3938862a5aa8e2d37111074db3b84c2db7e69dd01828e3426a87d115d47758b7 +#+busybox-sed.c6ecd5eb36f90083161e1e684196e5247c1dac4f83a56e3d6fb243d2e962fe28 +#+busybox-vi.a3833e7313e010e3d82156f4ddb47a02afac77d320e5f4e094fa521519b3a800 +#+busybox-xxd.a14a03f5ae2935cb9b4a688b65856a311c0f97319d84fa534fe9e47e2220a6dd +#+busybox-process-extra.e159e8e0bd46ffa367b72cd8947a4e3d3e2029e6bf9750ae7396db188adc77a7 +#+busybox-procps.35788f743842a4b5698474c35c24bdea9e359839fffe0deaa9cd014d601680ee +#+busybox-psmisc.678fb27ab7d03ae8e0953cbbee399fde320210f5cbe9794293fdd7a2d7580ce8 +#+busybox-ash.ef8b72a477ae2545b8aec04f6e5fedfd2de30aa6204906bad3af7415a413831d +#+busybox-bc.5f47a5242eb7add52420ff987f1defc73bb4e06fa0641e14a4b2b286bfc576ae +#+busybox-coreutils.9fc74c9c472cc7b14f4af6e101ff765d23da777a114b2305538f53d2909d923e +#+busybox-coreutils-extra.40cc65cc10c9ac7aff1cd5ef397cc88c5151feae214bb9c1ed4ef7c436da6f7e +#+busybox-daemontools.39fc13baeda4b241771a111fddefdbf787ca265f599e1bd93b05efb453d70cc2 +#+busybox-grep.ea484e3da880feaf17131558a42311bd0239f74c229c2c2134675f6fe7ae25fa +#+busybox-misc.4b3d2e82871dcd5355bbafdafdfc911c0e71d7b79981a3823175464af3416462 +#+busybox-sh.55f2510c8bdd1614ba02243f8efb5f23f9273b585fd697111b723309bdc6fbbd +#+busybox-util-linux-unpriv.656023a8d03b987a561608ab67eabbdd670c91c41cdf629aa4b76a3f07e0cd50 +#+busybox-findutils.b2b8e511be4dca01dcc369198cb5a87e68c6fab6c16d34caa2515ff93ca07381 +#+nawk.4028835d6434ac7d8655c7f9e74ff307e2db89bf2c94002a309babd8a6780007 +#+patch.2107bae5d78ad951bd28615d44c983d64e686d320b40f74e4f5137fd9bcc2c6a +#+musl-cross-make.14e02e45cc77fb5c9787349ef554dda78766f71652b100aee3b00e24a3d02cd1 +#+gnu-make.4034f4d785c5108ad387088199242aa8aa6920e7aab1f79ce51d1f43e97cb580 + + +# - build script start - + +build_env_static() { + export CFLAGS="-ffile-prefix-map=${pthbs_workdir}=builddir $CFLAGS" + export CXXFLAGS="-ffile-prefix-map=${pthbs_workdir}=builddir $CXXFLAGS" + export LDFLAGS="-static -L$pthbs_build_environment/library $LDFLAGS" +} + +check_static() { + local exe || true + exe=$pthbs_destdir'/home/ccx/versions'/$pthbs_package/$1 + if ! test -f $exe; then + printf '%s\n' "Error: file '$1' doesn't exist!" + exit 1 + fi + local interp_info || true + interp_info=$(readelf --string-dump=.interp "$exe") || exit $? + if test x '!=' "x$interp_info"; then + printf '%s\n' "Error: '$1' is a dynamic binary!" + exit 1 + fi +} + +prefix=/home/ccx/versions/$pthbs_package +dest=${pthbs_destdir%/}${prefix} +cd 'libtermkey' + + +patch -p1 <../litbermkey-build-static-lib.patch + + + +make PREFIX="$PREFIX"make DESTDIR="$pthbs_destdir" install + + + + + +cd "$pthbs_destdir/home/ccx/versions/$pthbs_package" +find -type d -o -print | awk -F/ ' +BEGIN { + x["./include/libtermkey.h"]=1 + x["./library/libtermkey.a"]=1 +} + +function r1(s) { + sub("^[.]/[^/]*", ".", s) + return s +} +function s1(repl, s) { + sub("^[.]/[^/]*", "./"repl, s) + return s +} +function link(src) { + x[$0]=0 + printf "%s\t%s\n", $0, src + printf "genlinks >>%s\t%s<<\n", $0, src >>"/dev/stderr" +} +$1!="."{exit 1} +$2 == "env" { link($0); next } +$2 == ".env-template" { link($0); next } + +$2 == "command" { link($0); next } +$2 == "command" { link($0); next } +$2 == "bin" { link(s1("command", $0)); next } +$2 == "sbin" { link(s1("command", $0)); next } + +$2 == "library.so" { link($0); next } +$2 == "library" { link($0); next } +$2 == "lib" && $NF ~ /\.l?a$/ { link(s1("library", $0)); next } +$2 == "lib" && $NF ~ /\.so(\..*)?$/ { link(s1("library.so", $0)); next } + +$2 == "share" && $3 == "info" { link(s1("info", r1($0))); next } +$2 == "share" && $3 == "man" { link(s1("man", r1($0))); next } +$2 == "share" && $3 == "doc" { link(s1("doc", r1($0))); next } + +$2 == "config" { link($0); next } +$2 == "man" { link($0); next } +$2 == "info" { link($0); next } +$2 == "doc" { link($0); next } +$2 == "data" { link($0); next } +$2 == "include" { link($0); next } + + +{ printf "genlinks ##%s## skipped\n", $0 >>"/dev/stderr" } + +END { + for(fname in x) { printf "DEBUG: x[\"%s\"]=\"%s\"\n", fname, x[fname] >"/dev/stderr" } + retcode = 0 + for(fname in x) { + if(x[fname]) { + printf "ERROR: missing expected file \"%s\"\n", fname >"/dev/stderr" + retcode = 3 + } + } + exit retcode +}' >.install-links.new +mv .install-links.new .install-links + diff --git a/variants/ccx-x86_64/linux b/variants/ccx-x86_64/linux @@ -34,7 +34,7 @@ #+patch.2107bae5d78ad951bd28615d44c983d64e686d320b40f74e4f5137fd9bcc2c6a #+flex.d39167f250ee7e10bded88eb7835bc8b7871aa2a3a60dcab340c4b7bc4b6672a #+bison.97ce4714edbb7c38d86cd484acc46fb0f4e07aa2371be0cb93375de8395ef327 -#+rsync.9edb188f8fb5ae6c692815ff1ab2215582db9daef37d50303ca31aa34d8a6b36 +#+rsync.847c889c40db7d219db3b84e245db91e309c8a4330b2b872ca70ef80b57a579a #+zstd.07ebc1d049247600d4df20a2640d366674671001d16f9d046fbef08699a688c0 #+libelf.6f65bfeed188b3b55198dafcf752aeda3c1dc514fcc485e7fc87cc53bd88d72c #+pkgconf-pkg-config.d2f1547322d9ba8762a3aa73f0851720b99a3f5e95eb1531b7f8764f5c61c44f diff --git a/variants/ccx-x86_64/linux-qemu-guest b/variants/ccx-x86_64/linux-qemu-guest @@ -34,7 +34,7 @@ #+patch.2107bae5d78ad951bd28615d44c983d64e686d320b40f74e4f5137fd9bcc2c6a #+flex.d39167f250ee7e10bded88eb7835bc8b7871aa2a3a60dcab340c4b7bc4b6672a #+bison.97ce4714edbb7c38d86cd484acc46fb0f4e07aa2371be0cb93375de8395ef327 -#+rsync.9edb188f8fb5ae6c692815ff1ab2215582db9daef37d50303ca31aa34d8a6b36 +#+rsync.847c889c40db7d219db3b84e245db91e309c8a4330b2b872ca70ef80b57a579a #+zstd.07ebc1d049247600d4df20a2640d366674671001d16f9d046fbef08699a688c0 #+libelf.6f65bfeed188b3b55198dafcf752aeda3c1dc514fcc485e7fc87cc53bd88d72c #+pkgconf-pkg-config.d2f1547322d9ba8762a3aa73f0851720b99a3f5e95eb1531b7f8764f5c61c44f diff --git a/variants/ccx-x86_64/mdevd.environment b/variants/ccx-x86_64/mdevd.environment @@ -47,4 +47,4 @@ #+s6.0d5d4703e07c3e5a0d4567706c69119aad5a0e9a37c28bf6b05dd12a27dc1eb1 #+mdev-scripts.2c27264b06d9d8bfd6ae59af0c511706a7891c94b02d6be072b3cdad53740491 #+mdevd.e5729bee65528cd131ac498226925a35a014741d40214d8e4476f8cb0d97fc36 -#+busybox.8a2a5bd92237a1abddc853cb707440944ec79bbee0815c445715f478f7ef2c85- \ No newline at end of file +#+busybox.4fe6cdfe11b32717d11efe7564d0b495aba0f2d3fecad9b803ee0505e2a11c9e+ \ No newline at end of file diff --git a/variants/ccx-x86_64/rsync b/variants/ccx-x86_64/rsync @@ -89,17 +89,14 @@ prefix=/home/ccx/versions/$pthbs_package dest=${pthbs_destdir%/}${prefix} cd 'rsync-3.2.7' - build_env_static -autotools_config_static --without-included-popt \ +autotools_config \ + --without-included-popt \ --enable-openssl \ --enable-zstd \ - --enable-acl \ - --enable-attr \ --disable-xxhash \ --disable-lz4 - make -j${JOBS:-1} -l$((1+${JOBS:-1})) diff --git a/variants/ccx-x86_64/system-config b/variants/ccx-x86_64/system-config @@ -49,7 +49,7 @@ #+gnu-make.4034f4d785c5108ad387088199242aa8aa6920e7aab1f79ce51d1f43e97cb580 #+aat.9e1a8d84c57afc208692dea539729548b5e2c84a062f232d0abb0eabebd845c7 #+fileset.e5a151f626de3d82ae8cbffbe8df007f016ae78c7a795565377da03798048476 -#+rsync.9edb188f8fb5ae6c692815ff1ab2215582db9daef37d50303ca31aa34d8a6b36 +#+rsync.847c889c40db7d219db3b84e245db91e309c8a4330b2b872ca70ef80b57a579a #+execline.49940e3d6f0e84ccbcddfce3dd2db760ad451a312896a69902b3f8e95a600e92 #+kbd.26cc6da4f7c7f5a87f3d7f48b1adfce521ad06d606dfe9a8d5b4886119251feb #+mdevd.e5729bee65528cd131ac498226925a35a014741d40214d8e4476f8cb0d97fc36 @@ -60,7 +60,7 @@ #+libcgroup.61d1f04007de27aabce0c10b9fe33ed92214ca28b9686354ec104a9153b8824b #+system-config-scripts.0c081aa66e7b2b7ccfb20f9c75e5dfff8f8d6804d0b4624934a8059354c14d9e #+logincaps.dff305698371563065d0ae0795204a975129931ea7a3c066701f7fc21dfbda4c -#+busybox.8a2a5bd92237a1abddc853cb707440944ec79bbee0815c445715f478f7ef2c85 +#+busybox.4fe6cdfe11b32717d11efe7564d0b495aba0f2d3fecad9b803ee0505e2a11c9e #@git:055d24bac572481d7dedba7d4ec9df37f620fbfd:system-config @@ -98,7 +98,7 @@ chmod +x config/etc/skel/loginexec env 'pthbs_path_system-config'="$prefix" \ 'pthbs_path_containers=/home/ccx/versions/env.e504354206aeddd729f5a90232fdc070ef864da352cff6c014c5ec7553fb2e27' \ - 'pthbs_path_mdevd=/home/ccx/versions/env.9e1aa8f80a8b2f2401f096c24ccf29e0756c2267110656bbe7214d9686433819' \ + 'pthbs_path_mdevd=/home/ccx/versions/env.dedf82632e6eacb3426d6e815a8bbc2d7d6fedb34d1a426fefc28849cd4c583a' \ make -j${JOBS:-1} -l$((1+${JOBS:-1})) all sort -u build/execfile | while IFS= read exename; do diff --git a/variants/ccx-x86_64/system-config-init b/variants/ccx-x86_64/system-config-init @@ -50,7 +50,7 @@ #+s6-portable-utils.7f4db6a16ab09d3822d709aec42170cb1d2c7c752d88f13e3792e747cbd09a28 #+s6-linux-init.39d00512c8a37829a751fbbe1a7cfc37003dc9e3924d0ca13722eb2835830c2b #+execline.49940e3d6f0e84ccbcddfce3dd2db760ad451a312896a69902b3f8e95a600e92 -#+system-config-rc.c8e12fd1cc81e83350bdbec0692b331b4d426f51ddbc523318c810c025ed5d9a +#+system-config-rc.0922559eaa62c702509597022dbadaa6a718001d986394dc11e28ce54357016b # - build script start - @@ -75,7 +75,7 @@ dest=${pthbs_destdir%/}${prefix} cd '.' -s6rcdb=/home/ccx/versions/system-config-rc.c8e12fd1cc81e83350bdbec0692b331b4d426f51ddbc523318c810c025ed5d9a/config/s6-rc-db +s6rcdb=/home/ccx/versions/system-config-rc.0922559eaa62c702509597022dbadaa6a718001d986394dc11e28ce54357016b/config/s6-rc-db # Generate init (${dest} must not exist but parent dir does) mkdir -p "$pthbs_destdir//home/ccx/versions" diff --git a/variants/ccx-x86_64/system-config-rc b/variants/ccx-x86_64/system-config-rc @@ -30,7 +30,7 @@ #+busybox-diffutils.59467ff733b5e802f382c98960aae2c6ecfc7b82fa42db3df679593dc1ec8036 #+s6-rc.b3ba6e214c85c2f5cb10d42dd9d344798a776c86a200911d7eec95bcc955ef48 #+fileset.e5a151f626de3d82ae8cbffbe8df007f016ae78c7a795565377da03798048476 -#+system-config.5d64f6f1f516c029bc8805d568b161a84739ca6daad52a57ca4ea6e57e16d01f +#+system-config.37fc26a40a8209346b24fcca4d1e43f5dbb62d6f84634bbcd94b67d9639f130c # - build script start - @@ -40,7 +40,7 @@ dest=${pthbs_destdir%/}${prefix} cd '.' -src=/home/ccx/versions/system-config.5d64f6f1f516c029bc8805d568b161a84739ca6daad52a57ca4ea6e57e16d01f/config/s6-rc-source +src=/home/ccx/versions/system-config.37fc26a40a8209346b24fcca4d1e43f5dbb62d6f84634bbcd94b67d9639f130c/config/s6-rc-source s6-rc-compile ./s6-rc-db "$src" mkdir -p "$dest/config" mv -v s6-rc-db "$dest/config/" diff --git a/variants/ccx-x86_64/userspace.environment b/variants/ccx-x86_64/userspace.environment @@ -50,7 +50,7 @@ #+patch.2107bae5d78ad951bd28615d44c983d64e686d320b40f74e4f5137fd9bcc2c6a #+flex.d39167f250ee7e10bded88eb7835bc8b7871aa2a3a60dcab340c4b7bc4b6672a #+bison.97ce4714edbb7c38d86cd484acc46fb0f4e07aa2371be0cb93375de8395ef327 -#+rsync.9edb188f8fb5ae6c692815ff1ab2215582db9daef37d50303ca31aa34d8a6b36 +#+rsync.847c889c40db7d219db3b84e245db91e309c8a4330b2b872ca70ef80b57a579a #+execline.49940e3d6f0e84ccbcddfce3dd2db760ad451a312896a69902b3f8e95a600e92 #+s6.0d5d4703e07c3e5a0d4567706c69119aad5a0e9a37c28bf6b05dd12a27dc1eb1 #+s6-rc.b3ba6e214c85c2f5cb10d42dd9d344798a776c86a200911d7eec95bcc955ef48 @@ -83,7 +83,7 @@ #+mlog.13adb42c1c505e3026114651c2f36d0a8c0723cc44e5c60f023d36db089806c5 #+findutils.89e63f707a8d7be6a083e58b937c21752b28c1a5d7760dd85dd985fa85366e3b #+nawk.4028835d6434ac7d8655c7f9e74ff307e2db89bf2c94002a309babd8a6780007 -#+vis.2fab2f1052159b31f27a245b862efe57c8df17173ab81514b2c812459b543fc4 +#+vis.0ed8971acba2ee38c0e12be8aa267f78fc7f4be3076acf48f81b3d49cfb2ea93 #+squashfs-tools.d674abf818e01e9a46d0a6e995c2fa8f4e6086671e2b4d8345e8f592e0558128 #+mandoc.e037587ebdf49fabbb28d83caa5b22be308fa7406c22f4f7545106426c458bdc #+tinyssh.0ac46feb5c124a8975937476f186cccae55fefec0cb8865ff2bac544a2af31af \ No newline at end of file diff --git a/variants/ccx-x86_64/vis b/variants/ccx-x86_64/vis @@ -31,6 +31,7 @@ #+gnu-make.4034f4d785c5108ad387088199242aa8aa6920e7aab1f79ce51d1f43e97cb580 #+netbsd-curses.62fbfa6e36ad4c26813723d03cbfe75c3e7d20f081b985904d933a07a84a541e #+acl.666f9c995d30b0877cea7f754190eaa181bcfd6438b063382d8c7500d422e685 +#+libtermkey.b1456c72d3e994187006ddba236b265fc9c0129d85fe56d30f79a42f471710dd #@git:6c519e91c684838bebcc6d49d894af956f6815b4:vis @@ -70,10 +71,10 @@ build_env_static --docdir="$prefix/doc/vis" \ --sharedir="$prefix/data" \ --enable-curses \ - --disble-lua \ - --disble-lpeg-static \ - --disble-tre \ - --disble-selinux \ + --disable-lua \ + --disable-lpeg-static \ + --disable-tre \ + --disable-selinux \ --enable-acl \ --enable-help diff --git a/variants/ccx-x86_64/vm.environment b/variants/ccx-x86_64/vm.environment @@ -1,2 +1,2 @@ #!/usr/bin/env pthbs-build -#+linux-qemu-guest.34601cc9fdecb8d4bf87df249c917ea702e0e116ccfeb8090ac8d261b3d27e3e- \ No newline at end of file +#+linux-qemu-guest.58e7d51e09101207b3d683f4f503471f335a296c76d598bff2ed7cfd60f26bb0+ \ No newline at end of file diff --git a/variants/root-x86_64/default.environment b/variants/root-x86_64/default.environment @@ -50,7 +50,7 @@ #+patch.05e92009b5904e5104c194a4a2b66427c75b14619e0bdd0f541954e8b13d30f4 #+flex.36fbb09f9cf5f124e60da5ee47b9c4e4196523a4052d1dab8d438d404f4bca49 #+bison.86ffd0e657b2d4079934f7e40bf5c395a865b753f53a23e3a42bdc9841d2fe8b -#+rsync.7bf57a2c4823cae013f25cce6ce57329713f9cd623c8cb60847c4c23b128e5f3 +#+rsync.1d3890b4a27d4af2ff994e114a66d747cc0890003562ae3cb3b19a09400af323 #+execline.770a7209a0ab50477d1ea726742169464a00deacf6abec0f04c9eb69e3243cd5 #+s6.04fb8499c2babe913f53ef934076b087746db184ae4955c04457a325900e11eb #+s6-rc.bc50208569d8e23862ac3fcf169ea24354b3a9693c961a7139ed0fbaeb05ce86 @@ -83,13 +83,13 @@ #+mlog.4b3d68ba77440437786ec8ab629cd919074551e60c520d8ae8eb4b67a02223c2 #+findutils.519e93628e65c4e5ef4d7ac1cf4396e1689e3c8e192bd8678571d90fb9d1152b #+nawk.48e7e5c0112e297121356bf98ff987d3d85d92b2696452ecea8ae4cffc57c10d -#+vis.ac5430e253567738d9b451dabecd475e260ee79766fd0fd3ba6adfd178e4fd49 +#+vis.bbeff8efcbe96c140ed62f279134c561ed3dbb259de34b08fc32b22478f269c8 #+squashfs-tools.d17a5fe5700099cda5f27c79c24f4a75314d9c2160d9e5a31b1b4baf5b6c3365 #+mandoc.6f6a20cc42e1e71817249856c921d8e3686a869c979a34fcbd19de2ab00130ac #+tinyssh.7b2b9a4c3ff2d42a7b138c3830eb3c0a275aa391fb0812ccaecca383d2e6caa8 -#+system-config.a9ba062e34fc2fb0640ade6c4841ddd7e14fd90336aded3938f6efc031652909 -#+system-config-rc.abaaaf86c85f4564f289639666743479e6bb1d8f7e2e175dff01f25161e95415 +#+system-config.6cbd6c46c89419fa09237e3d25d7bbf45883974c52fd9e902bc24db007379e91 +#+system-config-rc.f6cb2b1d040b51ba0b369b12ca93aeb01288096031d50fa64a83fee4851d3e47 #+system-config-scripts.ac2a449afef9d2c804ccca9869bdb1eaf89223a1b687c8e154f4a46216566b11 -#+system-config-init.b0cde64571e35d3d3184c614d1056746bef1445e6da5b43bb3a72b9b5adb949e +#+system-config-init.6158782c319294b2cbe372798eeb941b95fbec9ffa0964d0c9cf81fdd5b9c2ae #+system-config-zsh.cbbd0ea2d203a601fb2497946adaba74910fd150b071dacffb1d82dd8c4fb33f #+busybox-modutils.5f321825e26ecc84ba02a1cd21c040ccb3cb8324b94d5b9492012eb5163a5aa7 \ No newline at end of file diff --git a/variants/root-x86_64/libtermkey b/variants/root-x86_64/libtermkey @@ -0,0 +1,133 @@ +#!/usr/bin/env pthbs-build +#+busybox.d606402a9b19703f3101fbbf1d8feba6c5330e680c0f00072c0dc3f7b0accb75 +#+busybox-bzip2.b36138bf256b42638bcace8cf6a08739b1754692010aa1a5a908e8df37be7fad +#+busybox-gzip.0c5d125d9d3cdf56cf21713e48d8b694b3452a287f0ac043c9a369b7d2f3b334 +#+busybox-lzop.c6936c52c87572853743ab163d57e3392ce429156552c898c021f4e2ac7af1b5 +#+busybox-unzip.e3a84bbc97bd08fe5090680838fc5b1d9abf069cde1b5709f166a2d2eebc427e +#+busybox-xz.f3842d8a5caff601be0a35d05e665d0544754f58faf5658ea439be0c1c040a99 +#+busybox-cpio.d1cbd26a4fa257de9a55ada14c4f080885059c8f51a7070a3a023cdd28507584 +#+busybox-dpkg.e1da550577c100cbf7465e94effbb497ddb432f2e4a4bb3eb90fc27d6d8926b2 +#+busybox-rpm.c0c0623d52e5057d4e7fb415b80a8b51a017ca4192b62f26e12ea544d011f927 +#+busybox-tar.7702b875f538a77796dd4587413edea7413d6e32c30ae04d7af5971d8d24ef3a +#+busybox-ed.c3bede943dff025dc5cc50be3040293b7db22573896736222b2313a0c98e590a +#+busybox-sed.3b94dd6f9471c2293f9022def3eed4b9aeced5f727c55e5f2b5f1eb171f23dce +#+busybox-vi.370e3d4d8985b698a5f6025b55f7ba803fb73c89b40924931ad5258d50015821 +#+busybox-xxd.b1385c052421a3a6858382738234f70c4cbf300d704dc6e03fc7dffc56e8b622 +#+busybox-process-extra.4bf3085bc662f3d1f8bd09f9db8c94425c4c0959f6bbf018de33cf34b5e1bcf4 +#+busybox-procps.6d8ca3e57677b8f922227712b35dc58cb0f95c8c1382108098226e9f3103c0a9 +#+busybox-psmisc.db3e795596b707b0d4c50347c7433d19c25e489ac15b973fecd50c360a3fb24d +#+busybox-ash.dfd3539b634f7d382b6e3925f69287a00262f4722841eab4e26fb974fd7ac622 +#+busybox-bc.e078e39a374f04666d1b7e64cf48130c795d452983e4eb1b326ab0affbb6ea7e +#+busybox-coreutils.2c73238b94522195571b87a2fe57c6b9252a36212f23280b14c4d513beacddc3 +#+busybox-coreutils-extra.e04a30916dd192201f931c20dcbc73c3dbe923bece439d0871d9db8b72ff7054 +#+busybox-daemontools.098138809572ced9375c0fff8f3e122eccafc1ac5d77f0353b8c7287943cd92d +#+busybox-grep.404137a4bd5f423fb4fdefc745cb2cbe2d52768359616313735c5f4f222ebc1c +#+busybox-misc.22016926318af042fb7857053cdf0f5d470b10f05c00e0035d63885c933597ff +#+busybox-sh.0731e0dad061cff997b5fc805e9e2fe92ecea581115d2b126006b85d702e866a +#+busybox-util-linux-unpriv.a209874278faaef4d767c83c2b15c82bc865e14c18629ff0be811ef73f9ad6ee +#+busybox-findutils.4b6b2da77a78596fabbeb11cc0dac80b1b039580baa5e2ff5fe4a2857f931b61 +#+nawk.48e7e5c0112e297121356bf98ff987d3d85d92b2696452ecea8ae4cffc57c10d +#+patch.05e92009b5904e5104c194a4a2b66427c75b14619e0bdd0f541954e8b13d30f4 +#+musl-cross-make.581e6f7496a630a91679f40945ae85b1c9a3f1f5afd725bb7608ad60c058d8f9 +#+gnu-make.98dc2bc139672e6347bc2b2220304949f81b1851d2dc14778379568a0734db59 + + +# - build script start - + +build_env_static() { + export CFLAGS="-ffile-prefix-map=${pthbs_workdir}=builddir $CFLAGS" + export CXXFLAGS="-ffile-prefix-map=${pthbs_workdir}=builddir $CXXFLAGS" + export LDFLAGS="-static -L$pthbs_build_environment/library $LDFLAGS" +} + +check_static() { + local exe || true + exe=$pthbs_destdir'/versions'/$pthbs_package/$1 + if ! test -f $exe; then + printf '%s\n' "Error: file '$1' doesn't exist!" + exit 1 + fi + local interp_info || true + interp_info=$(readelf --string-dump=.interp "$exe") || exit $? + if test x '!=' "x$interp_info"; then + printf '%s\n' "Error: '$1' is a dynamic binary!" + exit 1 + fi +} + +prefix=/versions/$pthbs_package +dest=${pthbs_destdir%/}${prefix} +cd 'libtermkey' + + +patch -p1 <../litbermkey-build-static-lib.patch + + + +make PREFIX="$PREFIX"make DESTDIR="$pthbs_destdir" install + + + + + +cd "$pthbs_destdir/versions/$pthbs_package" +find -type d -o -print | awk -F/ ' +BEGIN { + x["./include/libtermkey.h"]=1 + x["./library/libtermkey.a"]=1 +} + +function r1(s) { + sub("^[.]/[^/]*", ".", s) + return s +} +function s1(repl, s) { + sub("^[.]/[^/]*", "./"repl, s) + return s +} +function link(src) { + x[$0]=0 + printf "%s\t%s\n", $0, src + printf "genlinks >>%s\t%s<<\n", $0, src >>"/dev/stderr" +} +$1!="."{exit 1} +$2 == "env" { link($0); next } +$2 == ".env-template" { link($0); next } + +$2 == "command" { link($0); next } +$2 == "command" { link($0); next } +$2 == "bin" { link(s1("command", $0)); next } +$2 == "sbin" { link(s1("command", $0)); next } + +$2 == "library.so" { link($0); next } +$2 == "library" { link($0); next } +$2 == "lib" && $NF ~ /\.l?a$/ { link(s1("library", $0)); next } +$2 == "lib" && $NF ~ /\.so(\..*)?$/ { link(s1("library.so", $0)); next } + +$2 == "share" && $3 == "info" { link(s1("info", r1($0))); next } +$2 == "share" && $3 == "man" { link(s1("man", r1($0))); next } +$2 == "share" && $3 == "doc" { link(s1("doc", r1($0))); next } + +$2 == "config" { link($0); next } +$2 == "man" { link($0); next } +$2 == "info" { link($0); next } +$2 == "doc" { link($0); next } +$2 == "data" { link($0); next } +$2 == "include" { link($0); next } + + +{ printf "genlinks ##%s## skipped\n", $0 >>"/dev/stderr" } + +END { + for(fname in x) { printf "DEBUG: x[\"%s\"]=\"%s\"\n", fname, x[fname] >"/dev/stderr" } + retcode = 0 + for(fname in x) { + if(x[fname]) { + printf "ERROR: missing expected file \"%s\"\n", fname >"/dev/stderr" + retcode = 3 + } + } + exit retcode +}' >.install-links.new +mv .install-links.new .install-links + diff --git a/variants/root-x86_64/linux-qemu-guest b/variants/root-x86_64/linux-qemu-guest @@ -34,7 +34,7 @@ #+patch.05e92009b5904e5104c194a4a2b66427c75b14619e0bdd0f541954e8b13d30f4 #+flex.36fbb09f9cf5f124e60da5ee47b9c4e4196523a4052d1dab8d438d404f4bca49 #+bison.86ffd0e657b2d4079934f7e40bf5c395a865b753f53a23e3a42bdc9841d2fe8b -#+rsync.7bf57a2c4823cae013f25cce6ce57329713f9cd623c8cb60847c4c23b128e5f3 +#+rsync.1d3890b4a27d4af2ff994e114a66d747cc0890003562ae3cb3b19a09400af323 #+zstd.34cc749f8c590e889c6486d4f33b8c57208e3c6e7d36281d84689fac44b9a64c #+libelf.087731999bf3f2f82946ab397f6971bef889dc742a5757654d5079e95829cf50 #+pkgconf-pkg-config.c3d31ede6d00be8bbefb3513e3836d725a51781409722f7ab58d0a856a2a9738 diff --git a/variants/root-x86_64/rsync b/variants/root-x86_64/rsync @@ -89,17 +89,14 @@ prefix=/versions/$pthbs_package dest=${pthbs_destdir%/}${prefix} cd 'rsync-3.2.7' - build_env_static -autotools_config_static --without-included-popt \ +autotools_config \ + --without-included-popt \ --enable-openssl \ --enable-zstd \ - --enable-acl \ - --enable-attr \ --disable-xxhash \ --disable-lz4 - make -j${JOBS:-1} -l$((1+${JOBS:-1})) diff --git a/variants/root-x86_64/system-config b/variants/root-x86_64/system-config @@ -49,7 +49,7 @@ #+gnu-make.98dc2bc139672e6347bc2b2220304949f81b1851d2dc14778379568a0734db59 #+aat.e3e638e18b98d6c6fd82d1f1eba60082f4cfcd2e196c975cfd621f88f00e40f0 #+fileset.f310a9481c4fdb71269bb232f4ae4c004a62c44ee2a053a3b1500d67813a91d3 -#+rsync.7bf57a2c4823cae013f25cce6ce57329713f9cd623c8cb60847c4c23b128e5f3 +#+rsync.1d3890b4a27d4af2ff994e114a66d747cc0890003562ae3cb3b19a09400af323 #+execline.770a7209a0ab50477d1ea726742169464a00deacf6abec0f04c9eb69e3243cd5 #+kbd.e935a814b7be81a255036a94215521bcff827d7a29f9cfe3ee12b0b87a1a7468 #+mdevd.a65dac1bcbf3e45bf56ac219108fe15537401737aaabef2aa060f24682fa3a68 diff --git a/variants/root-x86_64/system-config-init b/variants/root-x86_64/system-config-init @@ -50,7 +50,7 @@ #+s6-portable-utils.88a5962bf96a590c8844071c1802840557768dc0a96078b815c1d9aa08ebe27c #+s6-linux-init.7a9d91b21cceaf06297ddc4522c7be945b051eb94cd21da564920db0003350e4 #+execline.770a7209a0ab50477d1ea726742169464a00deacf6abec0f04c9eb69e3243cd5 -#+system-config-rc.abaaaf86c85f4564f289639666743479e6bb1d8f7e2e175dff01f25161e95415 +#+system-config-rc.f6cb2b1d040b51ba0b369b12ca93aeb01288096031d50fa64a83fee4851d3e47 # - build script start - @@ -75,7 +75,7 @@ dest=${pthbs_destdir%/}${prefix} cd '.' -s6rcdb=/versions/system-config-rc.abaaaf86c85f4564f289639666743479e6bb1d8f7e2e175dff01f25161e95415/config/s6-rc-db +s6rcdb=/versions/system-config-rc.f6cb2b1d040b51ba0b369b12ca93aeb01288096031d50fa64a83fee4851d3e47/config/s6-rc-db # Generate init (${dest} must not exist but parent dir does) mkdir -p "$pthbs_destdir//versions" diff --git a/variants/root-x86_64/system-config-rc b/variants/root-x86_64/system-config-rc @@ -30,7 +30,7 @@ #+busybox-diffutils.7297c795754c245870d8ba99b3907f9ec3932726a5af6b8d15980adcbf6c0059 #+s6-rc.bc50208569d8e23862ac3fcf169ea24354b3a9693c961a7139ed0fbaeb05ce86 #+fileset.f310a9481c4fdb71269bb232f4ae4c004a62c44ee2a053a3b1500d67813a91d3 -#+system-config.a9ba062e34fc2fb0640ade6c4841ddd7e14fd90336aded3938f6efc031652909 +#+system-config.6cbd6c46c89419fa09237e3d25d7bbf45883974c52fd9e902bc24db007379e91 # - build script start - @@ -40,7 +40,7 @@ dest=${pthbs_destdir%/}${prefix} cd '.' -src=/versions/system-config.a9ba062e34fc2fb0640ade6c4841ddd7e14fd90336aded3938f6efc031652909/config/s6-rc-source +src=/versions/system-config.6cbd6c46c89419fa09237e3d25d7bbf45883974c52fd9e902bc24db007379e91/config/s6-rc-source s6-rc-compile ./s6-rc-db "$src" mkdir -p "$dest/config" mv -v s6-rc-db "$dest/config/" diff --git a/variants/root-x86_64/userspace.environment b/variants/root-x86_64/userspace.environment @@ -50,7 +50,7 @@ #+patch.05e92009b5904e5104c194a4a2b66427c75b14619e0bdd0f541954e8b13d30f4 #+flex.36fbb09f9cf5f124e60da5ee47b9c4e4196523a4052d1dab8d438d404f4bca49 #+bison.86ffd0e657b2d4079934f7e40bf5c395a865b753f53a23e3a42bdc9841d2fe8b -#+rsync.7bf57a2c4823cae013f25cce6ce57329713f9cd623c8cb60847c4c23b128e5f3 +#+rsync.1d3890b4a27d4af2ff994e114a66d747cc0890003562ae3cb3b19a09400af323 #+execline.770a7209a0ab50477d1ea726742169464a00deacf6abec0f04c9eb69e3243cd5 #+s6.04fb8499c2babe913f53ef934076b087746db184ae4955c04457a325900e11eb #+s6-rc.bc50208569d8e23862ac3fcf169ea24354b3a9693c961a7139ed0fbaeb05ce86 @@ -83,7 +83,7 @@ #+mlog.4b3d68ba77440437786ec8ab629cd919074551e60c520d8ae8eb4b67a02223c2 #+findutils.519e93628e65c4e5ef4d7ac1cf4396e1689e3c8e192bd8678571d90fb9d1152b #+nawk.48e7e5c0112e297121356bf98ff987d3d85d92b2696452ecea8ae4cffc57c10d -#+vis.ac5430e253567738d9b451dabecd475e260ee79766fd0fd3ba6adfd178e4fd49 +#+vis.bbeff8efcbe96c140ed62f279134c561ed3dbb259de34b08fc32b22478f269c8 #+squashfs-tools.d17a5fe5700099cda5f27c79c24f4a75314d9c2160d9e5a31b1b4baf5b6c3365 #+mandoc.6f6a20cc42e1e71817249856c921d8e3686a869c979a34fcbd19de2ab00130ac #+tinyssh.7b2b9a4c3ff2d42a7b138c3830eb3c0a275aa391fb0812ccaecca383d2e6caa8 \ No newline at end of file diff --git a/variants/root-x86_64/vis b/variants/root-x86_64/vis @@ -31,6 +31,7 @@ #+gnu-make.98dc2bc139672e6347bc2b2220304949f81b1851d2dc14778379568a0734db59 #+netbsd-curses.d3d7d0cf449972d5ce479a15d7298bad50ba445982cca9b12dc99d950330ce2c #+acl.23ca5a4622293bd90f6f2ab470f433d31cc90adaf368baa42fe946da8d742373 +#+libtermkey.ac8aaf7eb22838378880bb607470fb1cfffee9b4e66dc6499ceffe3e0a7bd4f0 #@git:6c519e91c684838bebcc6d49d894af956f6815b4:vis @@ -70,10 +71,10 @@ build_env_static --docdir="$prefix/doc/vis" \ --sharedir="$prefix/data" \ --enable-curses \ - --disble-lua \ - --disble-lpeg-static \ - --disble-tre \ - --disble-selinux \ + --disable-lua \ + --disable-lpeg-static \ + --disable-tre \ + --disable-selinux \ --enable-acl \ --enable-help diff --git a/variants/root-x86_64/vm.environment b/variants/root-x86_64/vm.environment @@ -1,2 +1,2 @@ #!/usr/bin/env pthbs-build -#+linux-qemu-guest.e8d34a54e94541ac975e418ae74bfbcb2ae2b4bb8613114a59803ce92bdc8163- \ No newline at end of file +#+linux-qemu-guest.c4e5160554edf6c44529308b76cfb6833f2ee952985dea8e36feb91885b4eeb4+ \ No newline at end of file