summaryrefslogtreecommitdiff
path: root/repo
diff options
context:
space:
mode:
Diffstat (limited to 'repo')
-rw-r--r--repo/apache-ant/apache-ant.xibuild42
-rw-r--r--repo/apr/apr-1.6.2-dont-test-dlclose.patch22
-rw-r--r--repo/apr/apr.xibuild30
-rw-r--r--repo/apr/semtimedop-s390x.patch16
-rw-r--r--repo/argon2/argon2.xibuild22
-rw-r--r--repo/box2d/box2d.xibuild32
-rw-r--r--repo/btrfs-progs/btrfs-progs.xibuild41
-rw-r--r--repo/calf/calf.xibuild30
-rw-r--r--repo/carla/carla.xibuild19
-rw-r--r--repo/ceph/10-musl-fixes.patch15
-rw-r--r--repo/ceph/11-dump_time_header_impl.patch34
-rw-r--r--repo/ceph/11-parse_rfc1123_alt.patch53
-rw-r--r--repo/ceph/11-s3_expiration_header.patch30
-rw-r--r--repo/ceph/12-package.json-resolutions.patch31
-rw-r--r--repo/ceph/20-pci.patch63
-rw-r--r--repo/ceph/30-32bit_fix.patch.noauto110
-rw-r--r--repo/ceph/30-cypress.patch.noauto14
-rw-r--r--repo/ceph/30-ubuntu-32bit-fixes.patch.noauto137
-rw-r--r--repo/ceph/31-32bit_fix_tests.patch.noauto66
-rw-r--r--repo/ceph/32-PurgeQueue.cc-cast.patch85
-rw-r--r--repo/ceph/32-upstream32bit.patch92
-rw-r--r--repo/ceph/32-upstream32bitcleanup.patch143
-rw-r--r--repo/ceph/35-fix_ErasureCodeShec.patch17
-rw-r--r--repo/ceph/37-fix_tests.patch86
-rw-r--r--repo/ceph/42-no-virtualenvs.patch71
-rw-r--r--repo/ceph/43-LogClock.h.patch18
-rw-r--r--repo/ceph/44-aarch64-erasure.patch129
-rw-r--r--repo/ceph/44-cmake-buildtype.patch38
-rw-r--r--repo/ceph/44-missing-include.patch16
-rw-r--r--repo/ceph/44-staticcast.patch13
-rw-r--r--repo/ceph/ceph-user.pre-install5
-rw-r--r--repo/ceph/ceph.confd17
-rw-r--r--repo/ceph/ceph.initd118
-rw-r--r--repo/ceph/ceph.xibuild120
-rw-r--r--repo/clucene/clucene-core-2.3.3.4-install_contribs_lib.patch42
-rw-r--r--repo/clucene/clucene-core-2.3.3.4-pkgconfig.patch12
-rw-r--r--repo/clucene/clucene.xibuild40
-rw-r--r--repo/cppunit/cppunit.xibuild28
-rw-r--r--repo/cryptsetup/cryptsetup.xibuild36
-rw-r--r--repo/cryptsetup/dmcrypt.confd111
-rw-r--r--repo/cryptsetup/dmcrypt.initd339
-rw-r--r--repo/cunit/cunit.xibuild48
-rw-r--r--repo/cunit/path-makefile.patch31
-rw-r--r--repo/cython/cython-test-fix.patch23
-rw-r--r--repo/cython/cython.xibuild29
-rw-r--r--repo/extra-cmake-modules/extra-cmake-modules.xibuild22
-rw-r--r--repo/fcgi/fcgi.xibuild27
-rw-r--r--repo/findutils/findutils.xibuild2
-rw-r--r--repo/font-dejavu/45-dejavu.conf26
-rw-r--r--repo/font-dejavu/90-tt-dejavu.conf228
-rw-r--r--repo/font-dejavu/font-dejavu.xibuild35
-rw-r--r--repo/font-liberation/30-liberation-mono.conf19
-rw-r--r--repo/font-liberation/30-liberation-sans.conf19
-rw-r--r--repo/font-liberation/30-liberation-serif.conf19
-rw-r--r--repo/font-liberation/45-liberation.conf26
-rw-r--r--repo/font-liberation/90-liberation.conf191
-rw-r--r--repo/font-liberation/font-liberation.xibuild30
-rw-r--r--repo/fuse/fix-realpath.patch28
-rw-r--r--repo/fuse/fuse.xibuild35
-rw-r--r--repo/gomuks/gomuks.xibuild19
-rw-r--r--repo/gpgme/0003-python310.patch335
-rw-r--r--repo/gpgme/gpgme.post-upgrade16
-rw-r--r--repo/gpgme/gpgme.xibuild38
-rw-r--r--repo/gpgme/gpgmepp.post-upgrade16
-rw-r--r--repo/gpgme/qgpgme.post-upgrade16
-rw-r--r--repo/heimdal/005_all_heimdal-suid_fix.patch20
-rw-r--r--repo/heimdal/CVE-2018-16860.patch147
-rw-r--r--repo/heimdal/autoconf-270.patch27
-rwxr-xr-xrepo/heimdal/heimdal-kadmind.initd24
-rwxr-xr-xrepo/heimdal/heimdal-kdc.initd23
-rwxr-xr-xrepo/heimdal/heimdal-kpasswdd.initd24
-rw-r--r--repo/heimdal/heimdal.xibuild82
-rw-r--r--repo/heimdal/heimdal_missing-include.patch11
-rw-r--r--repo/heimdal/silence-include-headers-redirect-warnings.patch80
-rw-r--r--repo/hunspell/CVE-2019-16707.patch22
-rw-r--r--repo/hunspell/hunspell.xibuild37
-rw-r--r--repo/hyphen/hyphen.xibuild22
-rw-r--r--repo/i2pd/i2pd.xibuild2
-rw-r--r--repo/inih/inih.xibuild31
-rw-r--r--repo/junit/junit.xibuild18
-rw-r--r--repo/kconfig/kconfig.xibuild24
-rw-r--r--repo/leveldb/leveldb.xibuild32
-rw-r--r--repo/libabw/libabw.xibuild29
-rw-r--r--repo/libcdr/libcdr.xibuild27
-rw-r--r--repo/libepubgen/libepubgen.xibuild27
-rw-r--r--repo/libetonyek/libetonyek.xibuild30
-rw-r--r--repo/libexttextcat/libexttextcat.xibuild28
-rw-r--r--repo/libfreehand/fix-build.patch13
-rw-r--r--repo/libfreehand/libfreehand.xibuild38
-rw-r--r--repo/libfreehand/parentheses-gcc8-fix.patch13
-rw-r--r--repo/libixion/fix.patch11
-rw-r--r--repo/libixion/libixion.xibuild36
-rw-r--r--repo/liblangtag/liblangtag.xibuild23
-rw-r--r--repo/libmspub/libmspub.xibuild31
-rw-r--r--repo/libmspub/musl.patch12
-rw-r--r--repo/libmwaw/libmwaw.xibuild23
-rw-r--r--repo/libnfs/fix-includes.patch10
-rw-r--r--repo/libnfs/libnfs.xibuild33
-rw-r--r--repo/libnumbertext/libnumbertext.xibuild29
-rw-r--r--repo/libodfgen/libodfgen.xibuild25
-rw-r--r--repo/liborcus/fix-include.patch10
-rw-r--r--repo/liborcus/liborcus.xibuild36
-rw-r--r--repo/libpagemaker/libpagemaker.xibuild24
-rw-r--r--repo/libqxp/libqxp.xibuild27
-rw-r--r--repo/librdkafka/librdkafka.xibuild23
-rw-r--r--repo/libreoffice/autoconf-boost-macros.patch152
-rw-r--r--repo/libreoffice/disable-liborcus-unittest.patch13
-rw-r--r--repo/libreoffice/fix-execinfo.patch34
-rw-r--r--repo/libreoffice/libreoffice-base.xibuild11
-rw-r--r--repo/libreoffice/libreoffice-calc.xibuild11
-rw-r--r--repo/libreoffice/libreoffice-common.xibuild10
-rw-r--r--repo/libreoffice/libreoffice-draw.xibuild11
-rw-r--r--repo/libreoffice/libreoffice-impress.xibuild11
-rw-r--r--repo/libreoffice/libreoffice-math.xibuild11
-rw-r--r--repo/libreoffice/libreoffice-postgres.xibuild10
-rw-r--r--repo/libreoffice/libreoffice-sdk.xibuild10
-rw-r--r--repo/libreoffice/libreoffice-writer.xibuild11
-rw-r--r--repo/libreoffice/libreoffice.xibuild136
-rw-r--r--repo/libreoffice/linux-musl.patch60
-rw-r--r--repo/libreoffice/musl-libintl.patch15
-rw-r--r--repo/libreoffice/musl-stacksize.patch40
-rw-r--r--repo/libreoffice/pld-skia-patches.patch10
-rw-r--r--repo/libreoffice/poppler-22.03.patch39
-rw-r--r--repo/libreoffice/remove-backtrace.patch163
-rw-r--r--repo/libreoffice/skia-freetype2.11.diff37
-rw-r--r--repo/librevenge/librevenge.xibuild36
-rw-r--r--repo/libstaroffice/fix-maybe-uninitialized.patch11
-rw-r--r--repo/libstaroffice/libstaroffice.xibuild30
-rw-r--r--repo/liburing/liburing.xibuild24
-rw-r--r--repo/libvisio/libvisio.xibuild31
-rw-r--r--repo/libwpd/libwpd-gcc11.patch25
-rw-r--r--repo/libwpd/libwpd.xibuild32
-rw-r--r--repo/libwpg/libwpg.xibuild29
-rw-r--r--repo/libwps/libwps.xibuild23
-rw-r--r--repo/libzmf/libzmf.xibuild24
-rw-r--r--repo/linux-headers/linux-headers.xibuild2
-rw-r--r--repo/linux-libre/linux-libre.xibuild2
-rw-r--r--repo/linux/linux.xibuild2
-rw-r--r--repo/lua/lua.xibuild36
-rw-r--r--repo/lua5-1/lua5-1.xibuild11
-rw-r--r--repo/lvm2/device-mapper-udev.post-install6
-rw-r--r--repo/lvm2/device-mapper-udev.post-upgrade6
-rw-r--r--repo/lvm2/device-mapper.xibuild17
-rw-r--r--repo/lvm2/dmeventd.initd26
-rw-r--r--repo/lvm2/fix-stdio-usage.patch49
-rw-r--r--repo/lvm2/library_dir-default-config.patch10
-rw-r--r--repo/lvm2/lvm.confd5
-rw-r--r--repo/lvm2/lvm.initd38
-rw-r--r--repo/lvm2/lvm2.xibuild65
-rw-r--r--repo/lvm2/mallinfo.patch11
-rw-r--r--repo/lvm2/mlockall-default-config.patch22
-rw-r--r--repo/mdds/mdds.xibuild30
-rw-r--r--repo/mythes/mythes.xibuild22
-rw-r--r--repo/nodejs/nodejs.xibuild3
-rw-r--r--repo/numactl/musl.patch21
-rw-r--r--repo/numactl/numactl.xibuild31
-rw-r--r--repo/oath-toolkit/oath-toolkit.xibuild26
-rw-r--r--repo/openttd/openttd.xibuild25
-rw-r--r--repo/parted/fix-includes.patch10
-rw-r--r--repo/parted/fix-libintl-header-s390x.patch58
-rw-r--r--repo/parted/make-tests.patch45
-rw-r--r--repo/parted/parted-include-sysmacros.patch10
-rw-r--r--repo/parted/parted.xibuild37
-rw-r--r--repo/parted/skip-duplicate-bsd-test-on-s390x.patch16
-rw-r--r--repo/perl-archive-zip/perl-archive-zip.xibuild31
-rw-r--r--repo/perl-json/perl-json.xibuild25
-rw-r--r--repo/python-colorama/python-colorama.xibuild16
-rw-r--r--repo/python-coverage/python-coverage.xibuild17
-rw-r--r--repo/python-filelock/python-filelock.xibuild16
-rw-r--r--repo/python-flake8/python-flake8.xibuild17
-rw-r--r--repo/python-flaky/python-flaky.xibuild16
-rw-r--r--repo/python-freezegun/python-freezegun.xibuild16
-rw-r--r--repo/python-incremental/python-incremental.xibuild17
-rw-r--r--repo/python-nodeenv/python-nodeenv.xibuild17
-rw-r--r--repo/python-nose/python-nose.xibuild17
-rw-r--r--repo/python-pathlib2/python-pathlib2.xibuild16
-rw-r--r--repo/python-pluggy/python-pluggy.xibuild16
-rw-r--r--repo/python-prettytable/python-prettytable.xibuild17
-rw-r--r--repo/python-psutil/python-psutil.xibuild16
-rw-r--r--repo/python-pytest/python-pytest.xibuild16
-rw-r--r--repo/python-toml/python-toml.xibuild16
-rw-r--r--repo/python-tomli/python-tomli.xibuild6
-rw-r--r--repo/python-towncrier/python-towncrier.xibuild16
-rw-r--r--repo/python-tox/python-tox.xibuild16
-rw-r--r--repo/python-urllib3/python-urllib3.xibuild6
-rw-r--r--repo/python-virtualenv/python-virtualenv.xibuild16
-rw-r--r--repo/qemu/0006-linux-user-signal.c-define-__SIGRTMIN-MAX-for-non-GN.patch37
-rw-r--r--repo/qemu/80-kvm.rules1
-rw-r--r--repo/qemu/CVE-2021-20255.patch43
-rw-r--r--repo/qemu/MAP_SYNC-fix.patch22
-rw-r--r--repo/qemu/bridge.conf9
-rw-r--r--repo/qemu/fix-sockios-header.patch13
-rw-r--r--repo/qemu/guest-agent-shutdown.patch32
-rw-r--r--repo/qemu/mips-softfloat.patch35
-rw-r--r--repo/qemu/musl-initialise-msghdr.patch16
-rw-r--r--repo/qemu/qemu-guest-agent.confd7
-rw-r--r--repo/qemu/qemu-guest-agent.initd6
-rw-r--r--repo/qemu/qemu.xibuild127
-rw-r--r--repo/qemu/xattr_size_max.patch15
-rw-r--r--repo/qt5-qtscript/qt5-qtscript.xibuild36
-rw-r--r--repo/qt5-qtscript/qtscript-everywhere-src-5.10.1-sgidefs.patch11
-rw-r--r--repo/qt5-qtscript/qtscript-s390x.patch32
-rw-r--r--repo/qtchooser/qt5.conf2
-rw-r--r--repo/qtchooser/qt6.conf2
-rw-r--r--repo/qtchooser/qtchooser.xibuild37
-rw-r--r--repo/rabbitmq-c/rabbitmq-c.xibuild29
-rw-r--r--repo/scratch/scratch.xibuild27
-rw-r--r--repo/spice/failing-tests.patch43
-rw-r--r--repo/spice/fix-build.patch7
-rw-r--r--repo/spice/spice-server.xibuild8
-rw-r--r--repo/spice/spice.xibuild28
-rw-r--r--repo/squeak-vm/sqVirtualMachine.patch49
-rw-r--r--repo/squeak-vm/squeak-vm.xibuild31
-rw-r--r--repo/tor/tor.post-upgrade21
-rw-r--r--repo/tor/tor.pre-install5
-rw-r--r--repo/tor/tor.xibuild5
-rw-r--r--repo/ucpp/ucpp.xibuild25
-rw-r--r--repo/unixodbc/unixodbc.xibuild26
-rw-r--r--repo/usbredir/usbredir.xibuild24
-rw-r--r--repo/userspace-rcu/userspace-rcu.xibuild28
-rw-r--r--repo/util-linux/util-linux.xibuild15
-rw-r--r--repo/vde2/inline.patch21
-rw-r--r--repo/vde2/musl-build-fix.patch15
-rw-r--r--repo/vde2/vde2.post-down37
-rw-r--r--repo/vde2/vde2.pre-install6
-rw-r--r--repo/vde2/vde2.pre-up74
-rw-r--r--repo/vde2/vde2.xibuild41
-rw-r--r--repo/vde2/vde_cryptcab-compile-against-openssl-1.1.0.patch92
-rw-r--r--repo/vigra/vigra.xibuild25
-rw-r--r--repo/virglrenderer/virglrenderer.xibuild20
-rw-r--r--repo/vte3/fix-W_EXITCODE.patch17
-rw-r--r--repo/vte3/syscall.patch15
-rw-r--r--repo/vte3/vte3.xibuild35
-rw-r--r--repo/vym/vym.xibuild19
-rw-r--r--repo/xfsprogs/fix-mmap.patch32
-rw-r--r--repo/xfsprogs/missing-signal.h.patch12
-rw-r--r--repo/xfsprogs/xfsprogs.xibuild40
-rw-r--r--repo/xmlsec/xmlsec.xibuild29
-rw-r--r--repo/xmlstarlet/xmlstarlet.xibuild25
-rw-r--r--repo/yarn/yarn.xibuild24
-rw-r--r--repo/yasm/74184586228af6c362f970c84fce58da3fcbdec8.patch18
-rw-r--r--repo/yasm/yasm.xibuild33
-rw-r--r--repo/zenity/zenity.xibuild21
-rw-r--r--repo/zxing-cpp/zxing-cpp.xibuild28
-rw-r--r--repo/zynaddsubfx/cmake-build-type-none.patch47
-rw-r--r--repo/zynaddsubfx/fix-bogus-strstr.patch16
-rw-r--r--repo/zynaddsubfx/fix-memset.patch11
-rw-r--r--repo/zynaddsubfx/zynaddsubfx.xibuild51
248 files changed, 8503 insertions, 64 deletions
diff --git a/repo/apache-ant/apache-ant.xibuild b/repo/apache-ant/apache-ant.xibuild
new file mode 100644
index 0000000..4808d2a
--- /dev/null
+++ b/repo/apache-ant/apache-ant.xibuild
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+NAME="apache-ant"
+DESC="A java-based build tool"
+
+MAKEDEPS="adoptopenjdk11"
+
+PKG_VER=1.10.12
+SOURCE="https://downloads.apache.org/ant/binaries/apache-ant-$PKG_VER-bin.tar.xz"
+
+anthome="/usr/share/java/apache-ant"
+build() {
+ cat > apache-ant.sh <<-EOF
+ ANT_HOME="$anthome"
+ export ANT_HOME
+ EOF
+}
+
+package() {
+ local destdir="$PKG_DEST/$anthome"
+
+ install -dm755 "$destdir"/bin
+ rm bin/*.bat bin/*.cmd
+ install -m755 bin/* "$destdir"/bin
+
+ install -dm755 "$PKG_DEST"/usr/bin
+ ln -sf $anthome/bin/ant "$PKG_DEST"/usr/bin/ant
+
+ cp -r etc "$destdir"/
+
+ install -dm755 "$destdir"/lib
+ install -m644 lib/*.jar "$destdir"/lib
+
+ ln -sf ../../junit.jar "$destdir"/lib/junit.jar
+
+ local file; for file in LICENSE NOTICE; do
+ install -m644 -D $file "$PKG_DEST"/usr/share/licenses/apache-ant/$file
+ done
+
+ install -m644 -D apache-ant.sh "$PKG_DEST"/etc/profile.d/apache-ant.sh
+}
+
diff --git a/repo/apr/apr-1.6.2-dont-test-dlclose.patch b/repo/apr/apr-1.6.2-dont-test-dlclose.patch
new file mode 100644
index 0000000..df24254
--- /dev/null
+++ b/repo/apr/apr-1.6.2-dont-test-dlclose.patch
@@ -0,0 +1,22 @@
+dlclose is a no-op on musl. Test will always fail.
+
+--- apr-1.6.2/test/testdso.c.old 2010-01-03 19:35:07.000000000 -0600
++++ apr-1.6.2/test/testdso.c 2017-09-10 18:43:43.374983090 -0500
+@@ -244,7 +244,7 @@
+ abts_run_test(suite, test_load_module, NULL);
+ abts_run_test(suite, test_dso_sym, NULL);
+ abts_run_test(suite, test_dso_sym_return_value, NULL);
+- abts_run_test(suite, test_unload_module, NULL);
++ /* abts_run_test(suite, test_unload_module, NULL); */
+
+ #ifdef LIB_NAME
+ apr_filepath_merge(&libname, NULL, LIB_NAME, 0, p);
+@@ -252,7 +252,7 @@
+ abts_run_test(suite, test_load_library, NULL);
+ abts_run_test(suite, test_dso_sym_library, NULL);
+ abts_run_test(suite, test_dso_sym_return_value_library, NULL);
+- abts_run_test(suite, test_unload_library, NULL);
++ /* abts_run_test(suite, test_unload_library, NULL); */
+ #endif
+
+ abts_run_test(suite, test_load_notthere, NULL);
diff --git a/repo/apr/apr.xibuild b/repo/apr/apr.xibuild
new file mode 100644
index 0000000..247dd3f
--- /dev/null
+++ b/repo/apr/apr.xibuild
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+NAME="apr"
+DESC="The Apache Portable Runtime"
+
+MAKEDEPS="util-linux"
+
+PKG_VER=1.7.0
+SOURCE="https://www.apache.org/dist/apr/apr-$PKG_VER.tar.bz2"
+
+ADDITIONAL="
+apr-1.6.2-dont-test-dlclose.patch
+semtimedop-s390x.patch
+"
+
+prepare () {
+ apply_patches
+}
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --datadir=/usr/share \
+ --enable-nonportable-atomics \
+ --with-devrandom=/dev/urandom
+ make
+}
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
diff --git a/repo/apr/semtimedop-s390x.patch b/repo/apr/semtimedop-s390x.patch
new file mode 100644
index 0000000..7c0d2cf
--- /dev/null
+++ b/repo/apr/semtimedop-s390x.patch
@@ -0,0 +1,16 @@
+the testsuite hangs on s390x when testing locking mechanism sysvsem. Work
+around by avoid use semtimedop for s390x.
+
+diff --git a/locks/unix/proc_mutex.c b/locks/unix/proc_mutex.c
+index 8e2187f..cad6c4a 100644
+--- a/locks/unix/proc_mutex.c
++++ b/locks/unix/proc_mutex.c
+@@ -449,7 +449,7 @@ static const apr_proc_mutex_unix_lock_methods_t mutex_sysv_methods =
+ proc_mutex_sysv_create,
+ proc_mutex_sysv_acquire,
+ proc_mutex_sysv_tryacquire,
+-#if defined(HAVE_SEMTIMEDOP)
++#if defined(HAVE_SEMTIMEDOP) && !defined(__s390x__)
+ proc_mutex_sysv_timedacquire,
+ #else
+ proc_mutex_spinsleep_timedacquire,
diff --git a/repo/argon2/argon2.xibuild b/repo/argon2/argon2.xibuild
new file mode 100644
index 0000000..936794b
--- /dev/null
+++ b/repo/argon2/argon2.xibuild
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+NAME="argon2"
+DESC="The password hash Argon2, winner of PHC"
+
+MAKEDEPS=""
+
+PKG_VER=20190702
+SOURCE="https://github.com/P-H-C/phc-winner-argon2/archive/$PKG_VER.tar.gz"
+
+build() {
+ make OPTTARGET=none ARGON2_VERSION=$PKG_VER
+}
+
+check() {
+ make OPTTARGET=none test
+}
+
+package() {
+ make OPTTARGET=none LIBRARY_REL=lib DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/box2d/box2d.xibuild b/repo/box2d/box2d.xibuild
new file mode 100644
index 0000000..8723618
--- /dev/null
+++ b/repo/box2d/box2d.xibuild
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+NAME="box2d"
+DESC="2D Physics Engine for Games"
+
+MAKEDEPS="cmake doxygen libx11 libxcursor libxinerama libxrandr ninja"
+
+PKG_VER=2.4.1
+SOURCE="https://github.com/erincatto/box2d/archive/v$PKG_VER.tar.gz"
+
+build() {
+ cmake -B build \
+ -GNinja \
+ -DCMAKE_BUILD_TYPE=MinSizeRel \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib \
+ -DBUILD_SHARED_LIBS=ON \
+ -DBOX2D_BUILD_DOCS=ON \
+ -DBOX2D_BUILD_TESTBED=OFF \
+ -DBOX2D_BUILD_UNIT_TESTS=ON
+ cmake --build build
+}
+
+check() {
+ echo "Running unit_test"
+ build/bin/unit_test
+}
+
+package() {
+ DESTDIR="$PKG_DEST" cmake --install build
+}
+
diff --git a/repo/btrfs-progs/btrfs-progs.xibuild b/repo/btrfs-progs/btrfs-progs.xibuild
new file mode 100644
index 0000000..7b80314
--- /dev/null
+++ b/repo/btrfs-progs/btrfs-progs.xibuild
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+NAME="btrfs-progs"
+DESC="BTRFS filesystem utilities"
+
+MAKEDEPS="linux-headers acl asciidoc attr autoconf automake e2fsprogs libtool lzo python util-linux xmlto zlib zstd eudev"
+
+PKG_VER=5.16.2
+SOURCE="https://www.kernel.org/pub/linux/kernel/people/kdave/btrfs-progs/btrfs-progs-v$PKG_VER.tar.xz"
+
+prepare() {
+ ./autogen.sh
+}
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var \
+ --disable-documentation \
+ --disable-backtrace
+ make
+}
+
+package() {
+ make -j1 DESTDIR="$PKG_DEST" install install_python
+
+ mkdir -p "$PKG_DEST"/usr/share/doc/btrfs-progs
+ install -m644 README.md CHANGES \
+ "$PKG_DEST"/usr/share/doc/btrfs-progs
+
+ mkdir "$PKG_DEST"/sbin
+ local i; for i in btrfs btrfsck fsck.btrfs mkfs.btrfs; do
+ mv "$PKG_DEST"/usr/bin/$i "$PKG_DEST"/sbin/
+ done
+ mv "$PKG_DEST"/usr/bin "$PKG_DEST"/usr/sbin
+
+ install -Dm644 btrfs-completion \
+ "$PKG_DEST"/usr/share/bash-completion/completions/btrfs
+}
diff --git a/repo/calf/calf.xibuild b/repo/calf/calf.xibuild
new file mode 100644
index 0000000..1629a87
--- /dev/null
+++ b/repo/calf/calf.xibuild
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+NAME="calf"
+DESC="Calf Studio Gear"
+
+MAKEDEPS="autoconf automake expat fluidsynth gtk2 jack libtool lv2"
+
+PKG_VER=0.90.3
+SOURCE="http://calf-studio-gear.org/files/calf-$PKG_VER.tar.gz"
+
+prepare() {
+ autoreconf -vif
+}
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var
+ make
+}
+
+check() {
+ make check
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
diff --git a/repo/carla/carla.xibuild b/repo/carla/carla.xibuild
new file mode 100644
index 0000000..77d8a7a
--- /dev/null
+++ b/repo/carla/carla.xibuild
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+NAME="carla"
+DESC="Fully-featured audio plugin host"
+
+MAKEDEPS="alsa-lib file fluidsynth liblo libsndfile libx11 linux-headers pulseaudio qt5-qtbase qt5-qtsvg"
+
+PKG_VER=2.4.3
+SOURCE="https://github.com/falkTX/Carla/archive/refs/tags/v$PKG_VER.tar.gz"
+
+build() {
+ make features
+ make
+}
+
+package() {
+ make install PREFIX=/usr DESTDIR="$PKG_DEST"
+}
+
diff --git a/repo/ceph/10-musl-fixes.patch b/repo/ceph/10-musl-fixes.patch
new file mode 100644
index 0000000..1b7c907
--- /dev/null
+++ b/repo/ceph/10-musl-fixes.patch
@@ -0,0 +1,15 @@
+fix for musl
+
+diff -Nurp a/src/tools/rbd_nbd/rbd-nbd.cc b/src/tools/rbd_nbd/rbd-nbd.cc
+--- a/src/tools/rbd_nbd/rbd-nbd.cc 2020-11-21 08:06:35.834423310 +0000
++++ b/src/tools/rbd_nbd/rbd-nbd.cc 2020-11-21 08:21:12.067978842 +0000
+@@ -576,7 +576,8 @@ private:
+ for (unsigned i = 0; i < cmdline.size(); i++) {
+ char *arg = &cmdline[i];
+ if (i == 0) {
+- if (strcmp(basename(arg) , "rbd-nbd") != 0) {
++ const char *fname = strrchr(arg, '/');
++ if (strcmp(fname ? fname+1 : arg, "rbd-nbd") != 0) {
+ return -EINVAL;
+ }
+ } else {
diff --git a/repo/ceph/11-dump_time_header_impl.patch b/repo/ceph/11-dump_time_header_impl.patch
new file mode 100644
index 0000000..d19e7ed
--- /dev/null
+++ b/repo/ceph/11-dump_time_header_impl.patch
@@ -0,0 +1,34 @@
+Patch by Robin Mueller
+
+The strftime method of the libmusl writes 'UTC' instead of 'GMT' when
+the character Z is used in the format pattern, and it looks like the
+S3 clients don't like 'UTC' in the date strings.
+
+This patch replaces 'UTC' with 'GMT' at the relevant location.
+
+--- a/src/rgw/rgw_rest.cc 2021-07-08 16:03:56.000000000 +0200
++++ b/src/rgw/rgw_rest.cc 2021-08-19 09:48:30.339492024 +0200
+@@ -436,8 +436,21 @@
+ return 0;
+ }
+
+- return strftime(timestr, sizeof(timestr),
+- "%a, %d %b %Y %H:%M:%S %Z", tmp);
++ size_t len = strftime(timestr, sizeof(timestr),
++ "%a, %d %b %Y %H:%M:%S %Z", tmp);
++
++ int position = 0;
++ while (timestr[position] != 'U' && len - position > 3)
++ position++;
++
++ if (len - position == 3) {
++ char substr[4];
++ memcpy(substr, &timestr[position], 4);
++
++ if (strcmp(substr, "UTC") == 0)
++ memcpy(&timestr[position], "GMT", 3);
++ }
++ return len;
+ }
+
+ void dump_time_header(struct req_state *s, const char *name, real_time t)
diff --git a/repo/ceph/11-parse_rfc1123_alt.patch b/repo/ceph/11-parse_rfc1123_alt.patch
new file mode 100644
index 0000000..5b54c4e
--- /dev/null
+++ b/repo/ceph/11-parse_rfc1123_alt.patch
@@ -0,0 +1,53 @@
+Patch by Robin Mueller
+
+libmusl doesn't support the z character in the format pattern for strptime this
+is a special functionality of glibc.
+
+patch is slightly adapted version of glibc code:
+https://elixir.bootlin.com/glibc/latest/source/time/strptime_l.c#L776
+
+--- a/src/rgw/rgw_common.cc 2021-07-08 16:03:56.000000000 +0200
++++ b/src/rgw/rgw_common.cc 2021-08-18 13:08:22.938903459 +0200
+@@ -531,7 +531,41 @@
+ {
+ // FIPS zeroization audit 20191115: this memset is not security related.
+ memset(t, 0, sizeof(*t));
+- return check_str_end(strptime(s, "%a, %d %b %Y %H:%M:%S %z", t));
++ s = strptime(s, "%a, %d %b %Y %H:%M:%S", t);
++ if (s) {
++ s++;
++ int val;
++ val = 0;
++ while (isspace(*s))
++ ++s;
++ if (*s == 'Z') {
++ ++s;
++ t->tm_gmtoff = 0;
++ } else {
++ if (*s != '+' && *s != '-')
++ return 0;
++ bool neg = *s++ == '-';
++ int n = 0;
++ while (n < 4 && *s >= '0' && *s <= '9') {
++ val = val * 10 + *s++ - '0';
++ ++n;
++ if (*s == ':' && n == 2 && isdigit (*(s + 1)))
++ ++s;
++ }
++ if (n == 2)
++ val *= 100;
++ else if (n != 4)
++ /* Only two or four digits recognized. */
++ return 0;
++ else if (val % 100 >= 60)
++ /* Minutes valid range is 0 through 59. */
++ return 0;
++ t->tm_gmtoff = (val / 100) * 3600 + (val % 100) * 60;
++ if (neg)
++ t->tm_gmtoff = -t->tm_gmtoff;
++ }
++ }
++ return check_str_end(s);
+ }
+
+ bool parse_rfc2616(const char *s, struct tm *t)
diff --git a/repo/ceph/11-s3_expiration_header.patch b/repo/ceph/11-s3_expiration_header.patch
new file mode 100644
index 0000000..ac12a83
--- /dev/null
+++ b/repo/ceph/11-s3_expiration_header.patch
@@ -0,0 +1,30 @@
+Patch by Robin Mueller
+
+Fix musl date handling
+
+--- a/src/rgw/rgw_lc.cc 2021-09-16 16:27:19.000000000 +0200
++++ b/src/rgw/rgw_lc.cc 2021-10-01 09:17:06.996639952 +0200
+@@ -2238,8 +2238,21 @@
+ // Fri, 23 Dec 2012 00:00:00 GMT
+ char exp_buf[100];
+ time_t exp = ceph::real_clock::to_time_t(*expiration_date);
+- if (std::strftime(exp_buf, sizeof(exp_buf),
+- "%a, %d %b %Y %T %Z", std::gmtime(&exp))) {
++ std::size_t len = std::strftime(exp_buf, sizeof(exp_buf), "%a, %d %b %Y %T %Z", std::gmtime(&exp));
++
++ if (len) {
++ int position = 0;
++ while (exp_buf[position] != 'U' && len - position > 3)
++ position++;
++
++ if (len - position == 3) {
++ char substr[4];
++ memcpy(substr, &exp_buf[position], 4);
++
++ if (strcmp(substr, "UTC") == 0)
++ memcpy(&exp_buf[position], "GMT", 3);
++ }
++
+ hdr = fmt::format("expiry-date=\"{0}\", rule-id=\"{1}\"", exp_buf,
+ *rule_id);
+ } else {
diff --git a/repo/ceph/12-package.json-resolutions.patch b/repo/ceph/12-package.json-resolutions.patch
new file mode 100644
index 0000000..ddc4ea2
--- /dev/null
+++ b/repo/ceph/12-package.json-resolutions.patch
@@ -0,0 +1,31 @@
+--- a/src/pybind/mgr/dashboard/CMakeLists.txt
++++ b/src/pybind/mgr/dashboard/CMakeLists.txt
+@@ -76,7 +76,7 @@
+
+ add_npm_command(
+ OUTPUT "${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend/node_modules"
+- COMMAND CYPRESS_CACHE_FOLDER=${CMAKE_SOURCE_DIR}/build/src/pybind/mgr/dashboard/cypress NG_CLI_ANALYTICS=false npm ci ${mgr-dashboard-userconfig}
++ COMMAND CYPRESS_CACHE_FOLDER=${CMAKE_SOURCE_DIR}/build/src/pybind/mgr/dashboard/cypress NG_CLI_ANALYTICS=false yarn install --network-timeout 600000 --frozen-lockfile ${mgr-dashboard-userconfig}
+ DEPENDS frontend/package.json
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend
+ COMMENT "dashboard frontend dependencies are being installed"
+@@ -119,7 +119,7 @@
+
+ add_npm_command(
+ OUTPUT "${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend/dist"
+- COMMAND DASHBOARD_FRONTEND_LANGS="${DASHBOARD_FRONTEND_LANGS}" npm run build:localize -- ${npm_args}
++ COMMAND DASHBOARD_FRONTEND_LANGS="${DASHBOARD_FRONTEND_LANGS}" yarn run build:localize ${npm_args}
+ DEPENDS ${frontend_src} frontend/node_modules
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend
+ COMMENT "dashboard frontend is being created"
+--- a/src/pybind/mgr/dashboard/frontend/package.json
++++ b/src/pybind/mgr/dashboard/frontend/package.json
+@@ -142,8 +142,5 @@
+ "ts-node": "9.0.0",
+ "tslint": "6.1.3",
+ "typescript": "4.1.6"
+- },
+- "resolutions": {
+- "fsevents": "2.1.3"
+ }
+ }
diff --git a/repo/ceph/20-pci.patch b/repo/ceph/20-pci.patch
new file mode 100644
index 0000000..c16e276
--- /dev/null
+++ b/repo/ceph/20-pci.patch
@@ -0,0 +1,63 @@
+Musl patch for pci
+
+diff -Nurp a/src/spdk/dpdk/drivers/bus/pci/linux/pci_uio.c b/src/spdk/dpdk/drivers/bus/pci/linux/pci_uio.c
+--- a/src/spdk/dpdk/drivers/bus/pci/linux/pci_uio.c 2020-11-21 13:07:44.255206657 +0000
++++ b/src/spdk/dpdk/drivers/bus/pci/linux/pci_uio.c 2020-11-21 13:04:06.488285583 +0000
+@@ -14,6 +14,32 @@
+
+ #if defined(RTE_ARCH_X86)
+ #include <sys/io.h>
++#if defined(__GLIBC__)
++#define pci_uio_outl_p outl_p
++#define pci_uio_outw_p outw_p
++#define pci_uio_outb_p outb_p
++#else
++static inline void
++pci_uio_outl_p(unsigned int value, unsigned short int port)
++{
++ __asm__ __volatile__ ("outl %0,%w1\noutb %%al,$0x80" : : "a" (value),
++ "Nd" (port));
++}
++
++static inline void
++pci_uio_outw_p(unsigned short int value, unsigned short int port)
++{
++ __asm__ __volatile__ ("outw %w0,%w1\noutb %%al,$0x80" : : "a" (value),
++ "Nd" (port));
++}
++
++static inline void
++pci_uio_outb_p(unsigned char value, unsigned short int port)
++{
++ __asm__ __volatile__ ("outb %b0,%w1\noutb %%al,$0x80" : : "a" (value),
++ "Nd" (port));
++}
++#endif
+ #endif
+
+ #include <rte_string_fns.h>
+@@ -528,21 +554,21 @@ pci_uio_ioport_write(struct rte_pci_iopo
+ if (len >= 4) {
+ size = 4;
+ #if defined(RTE_ARCH_X86)
+- outl_p(*(const uint32_t *)s, reg);
++ pci_uio_outl_p(*(const uint32_t *)s, reg);
+ #else
+ *(volatile uint32_t *)reg = *(const uint32_t *)s;
+ #endif
+ } else if (len >= 2) {
+ size = 2;
+ #if defined(RTE_ARCH_X86)
+- outw_p(*(const uint16_t *)s, reg);
++ pci_uio_outw_p(*(const uint16_t *)s, reg);
+ #else
+ *(volatile uint16_t *)reg = *(const uint16_t *)s;
+ #endif
+ } else {
+ size = 1;
+ #if defined(RTE_ARCH_X86)
+- outb_p(*s, reg);
++ pci_uio_outb_p(*s, reg);
+ #else
+ *(volatile uint8_t *)reg = *s;
+ #endif
diff --git a/repo/ceph/30-32bit_fix.patch.noauto b/repo/ceph/30-32bit_fix.patch.noauto
new file mode 100644
index 0000000..aba21d6
--- /dev/null
+++ b/repo/ceph/30-32bit_fix.patch.noauto
@@ -0,0 +1,110 @@
+32bit specific patches
+
+diff -uNr ceph-15.2.4/src/client/Client.cc ceph-15.2.4-arm32_fix/src/client/Client.cc
+--- ceph-15.2.4/src/client/Client.cc 2020-07-01 01:10:51.000000000 +0930
++++ ceph-15.2.4-arm32_fix/src/client/Client.cc 2020-11-21 22:11:16.061796876 +1030
+@@ -10948,7 +10948,7 @@
+ ldout(cct, 20) << __func__ << " " << in << " " << in->ino << " -> " << in->ll_ref << dendl;
+ }
+
+-int Client::_ll_put(Inode *in, uint64_t num)
++int Client::_ll_put(Inode *in, size_t num)
+ {
+ in->ll_put(num);
+ ldout(cct, 20) << __func__ << " " << in << " " << in->ino << " " << num << " -> " << in->ll_ref << dendl;
+@@ -10989,7 +10989,7 @@
+ }
+ }
+
+-bool Client::_ll_forget(Inode *in, uint64_t count)
++bool Client::_ll_forget(Inode *in, size_t count)
+ {
+ inodeno_t ino = in->ino;
+
+@@ -11018,7 +11018,7 @@
+ return last;
+ }
+
+-bool Client::ll_forget(Inode *in, uint64_t count)
++bool Client::ll_forget(Inode *in, size_t count)
+ {
+ std::lock_guard lock(client_lock);
+ return _ll_forget(in, count);
+diff -uNr ceph-15.2.4/src/mds/PurgeQueue.h ceph-15.2.4-arm32_fix/src/mds/PurgeQueue.h
+--- ceph-15.2.4/src/mds/PurgeQueue.h 2020-07-01 01:10:51.000000000 +0930
++++ ceph-15.2.4-arm32_fix/src/mds/PurgeQueue.h 2020-11-21 22:11:16.065796889 +1030
+@@ -219,6 +219,6 @@
+ size_t purge_item_journal_size;
+
+ uint64_t ops_high_water = 0;
+- uint64_t files_high_water = 0;
++ size_t files_high_water = 0;
+ };
+ #endif
+diff -uNr ceph-15.2.4/src/test/common/test_json_formattable.cc ceph-15.2.4-arm32_fix/src/test/common/test_json_formattable.cc
+--- ceph-15.2.4/src/test/common/test_json_formattable.cc 2020-07-01 01:10:51.000000000 +0930
++++ ceph-15.2.4-arm32_fix/src/test/common/test_json_formattable.cc 2020-11-21 22:11:16.065796889 +1030
+@@ -371,7 +371,7 @@
+
+ struct2() {
+ void *p = (void *)this;
+- long i = (long)p;
++ unsigned long i = (unsigned long)p;
+ v.resize((i >> 16) % 16 + 1);
+ }
+
+diff -uNr ceph-15.2.4/src/test/libcephfs/ceph_pthread_self.h ceph-15.2.4-arm32_fix/src/test/libcephfs/ceph_pthread_self.h
+--- ceph-15.2.4/src/test/libcephfs/ceph_pthread_self.h 2020-07-01 01:10:51.000000000 +0930
++++ ceph-15.2.4-arm32_fix/src/test/libcephfs/ceph_pthread_self.h 2020-11-21 22:11:16.066796893 +1030
+@@ -25,7 +25,7 @@
+ static_assert(std::is_convertible_v<decltype(me), uint64_t> ||
+ std::is_pointer_v<decltype(me)>,
+ "we need to use pthread_self() for the owner parameter");
+- return reinterpret_cast<uint64_t>(me);
++ return reinterpret_cast<uint64_t>((uint64_t) me);
+ }
+
+ #endif
+diff -uNr ceph-15.2.4/src/test/rbd_mirror/image_deleter/test_mock_TrashWatcher.cc ceph-15.2.4-arm32_fix/src/test/rbd_mirror/image_deleter/test_mock_TrashWatcher.cc
+--- ceph-15.2.4/src/test/rbd_mirror/image_deleter/test_mock_TrashWatcher.cc 2020-07-01 01:10:51.000000000 +0930
++++ ceph-15.2.4-arm32_fix/src/test/rbd_mirror/image_deleter/test_mock_TrashWatcher.cc 2020-11-21 22:11:16.066796893 +1030
+@@ -162,7 +162,7 @@
+ int r) {
+ bufferlist bl;
+ encode(last_image_id, bl);
+- encode(static_cast<size_t>(1024), bl);
++ encode(static_cast<uint64_t>(1024), bl);
+
+ bufferlist out_bl;
+ encode(images, out_bl);
+diff -Nurp a/src/client/Client.h b/src/client/Client.h
+--- a/src/client/Client.h
++++ b/src/client/Client.h
+@@ -525,7 +525,7 @@
+ int ll_lookupx(Inode *parent, const char *name, Inode **out,
+ struct ceph_statx *stx, unsigned want, unsigned flags,
+ const UserPerm& perms);
+- bool ll_forget(Inode *in, uint64_t count);
++ bool ll_forget(Inode *in, size_t count);
+ bool ll_put(Inode *in);
+ int ll_get_snap_ref(snapid_t snap);
+
+@@ -1241,7 +1241,7 @@
+ void _fragmap_remove_stopped_mds(Inode *in, mds_rank_t mds);
+
+ void _ll_get(Inode *in);
+- int _ll_put(Inode *in, uint64_t num);
++ int _ll_put(Inode *in, size_t num);
+ void _ll_drop_pins();
+
+ Fh *_create_fh(Inode *in, int flags, int cmode, const UserPerm& perms);
+@@ -1405,7 +1405,7 @@
+ int _lookup_parent(Inode *in, const UserPerm& perms, Inode **parent=NULL);
+ int _lookup_name(Inode *in, Inode *parent, const UserPerm& perms);
+ int _lookup_vino(vinodeno_t ino, const UserPerm& perms, Inode **inode=NULL);
+- bool _ll_forget(Inode *in, uint64_t count);
++ bool _ll_forget(Inode *in, size_t count);
+
+ void collect_and_send_metrics();
+ void collect_and_send_global_metrics();
+
diff --git a/repo/ceph/30-cypress.patch.noauto b/repo/ceph/30-cypress.patch.noauto
new file mode 100644
index 0000000..fecf055
--- /dev/null
+++ b/repo/ceph/30-cypress.patch.noauto
@@ -0,0 +1,14 @@
+remove cypress as not availiable on 32bit platforms
+
+diff -Nurp a/src/pybind/mgr/dashboard/frontend/package.json b/src/pybind/mgr/dashboard/frontend/package.json
+--- a/src/pybind/mgr/dashboard/frontend/package.json 2021-04-03 08:58:07.611941559 +0100
++++ b/src/pybind/mgr/dashboard/frontend/package.json 2021-04-03 08:59:13.903122038 +0100
+@@ -119,8 +119,6 @@
+ "@types/node": "12.12.62",
+ "@types/simplebar": "5.1.1",
+ "codelyzer": "6.0.1",
+- "cypress": "5.3.0",
+- "cypress-multi-reporters": "1.4.0",
+ "html-linter": "1.1.1",
+ "htmllint-cli": "0.0.7",
+ "identity-obj-proxy": "3.0.0",
diff --git a/repo/ceph/30-ubuntu-32bit-fixes.patch.noauto b/repo/ceph/30-ubuntu-32bit-fixes.patch.noauto
new file mode 100644
index 0000000..9b9318d
--- /dev/null
+++ b/repo/ceph/30-ubuntu-32bit-fixes.patch.noauto
@@ -0,0 +1,137 @@
+Description: Misc fixes for 32 bit architecture builds.
+Author: James Page <james.page@ubuntu.com>
+Forwarded: no
+
+--- a/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc
++++ b/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc
+@@ -235,7 +235,8 @@ bool Replayer<I>::get_replay_status(std:
+
+ json_spirit::mObject root_obj;
+ root_obj["replay_state"] = replay_state;
+- root_obj["remote_snapshot_timestamp"] = remote_snap_info->timestamp.sec();
++ root_obj["remote_snapshot_timestamp"] = static_cast<uint64_t>(
++ remote_snap_info->timestamp.sec());
+
+ auto matching_remote_snap_id = util::compute_remote_snap_id(
+ m_state_builder->local_image_ctx->image_lock,
+@@ -249,8 +250,8 @@ bool Replayer<I>::get_replay_status(std:
+ // use the timestamp from the matching remote image since
+ // the local snapshot would just be the time the snapshot was
+ // synced and not the consistency point in time.
+- root_obj["local_snapshot_timestamp"] =
+- matching_remote_snap_it->second.timestamp.sec();
++ root_obj["local_snapshot_timestamp"] = static_cast<uint64_t>(
++ matching_remote_snap_it->second.timestamp.sec());
+ }
+
+ matching_remote_snap_it = m_state_builder->remote_image_ctx->snap_info.find(
+@@ -258,7 +259,8 @@ bool Replayer<I>::get_replay_status(std:
+ if (m_remote_snap_id_end != CEPH_NOSNAP &&
+ matching_remote_snap_it !=
+ m_state_builder->remote_image_ctx->snap_info.end()) {
+- root_obj["syncing_snapshot_timestamp"] = remote_snap_info->timestamp.sec();
++ root_obj["syncing_snapshot_timestamp"] = static_cast<uint64_t>(
++ remote_snap_info->timestamp.sec());
+ root_obj["syncing_percent"] = static_cast<uint64_t>(
+ 100 * m_local_mirror_snap_ns.last_copied_object_number /
+ static_cast<float>(std::max<uint64_t>(1U, m_local_object_count)));
+--- a/src/s3select/include/s3select_functions.h
++++ b/src/s3select/include/s3select_functions.h
+@@ -585,7 +585,7 @@ struct _fn_diff_timestamp : public base_
+ {
+ boost::gregorian::date_period dp =
+ boost::gregorian::date_period( val_dt1.timestamp()->date(), val_dt2.timestamp()->date());
+- result->set_value( dp.length().days() );
++ result->set_value( (int64_t)dp.length().days() );
+ }
+ else if (strcmp(val_date_part.str(), "hours") == 0)
+ {
+--- a/src/os/bluestore/BlueFS.cc
++++ b/src/os/bluestore/BlueFS.cc
+@@ -3744,11 +3744,11 @@ int BlueFS::do_replay_recovery_read(File
+
+ size_t BlueFS::probe_alloc_avail(int dev, uint64_t alloc_size)
+ {
+- size_t total = 0;
+- auto iterated_allocation = [&](size_t off, size_t len) {
++ uint64_t total = 0;
++ auto iterated_allocation = [&](uint64_t off, uint64_t len) {
+ //only count in size that is alloc_size aligned
+- size_t dist_to_alignment;
+- size_t offset_in_block = off & (alloc_size - 1);
++ uint64_t dist_to_alignment;
++ uint64_t offset_in_block = off & (alloc_size - 1);
+ if (offset_in_block == 0)
+ dist_to_alignment = 0;
+ else
+--- a/src/tools/neorados.cc
++++ b/src/tools/neorados.cc
+@@ -146,7 +146,7 @@ void create(R::RADOS& r, const std::vect
+ obj, pname));
+ }
+
+-inline constexpr std::size_t io_size = 4 << 20;
++inline constexpr std::uint64_t io_size = 4 << 20;
+
+ void write(R::RADOS& r, const std::vector<std::string>& p, s::yield_context y)
+ {
+@@ -156,7 +156,7 @@ void write(R::RADOS& r, const std::vecto
+
+ bs::error_code ec;
+ std::unique_ptr<char[]> buf = std::make_unique<char[]>(io_size);
+- std::size_t off = 0;
++ std::uint64_t off = 0;
+ boost::io::ios_exception_saver ies(std::cin);
+
+ std::cin.exceptions(std::istream::badbit);
+@@ -203,7 +203,7 @@ void read(R::RADOS& r, const std::vector
+ obj, pname));
+ }
+
+- std::size_t off = 0;
++ std::uint64_t off = 0;
+ ceph::buffer::list bl;
+ while (auto toread = std::max(len - off, io_size)) {
+ R::ReadOp op;
+--- a/src/tools/cephfs_mirror/FSMirror.cc
++++ b/src/tools/cephfs_mirror/FSMirror.cc
+@@ -334,7 +334,7 @@ void FSMirror::handle_acquire_directory(
+ std::scoped_lock locker(m_lock);
+ m_directories.emplace(dir_path);
+ m_service_daemon->add_or_update_fs_attribute(m_filesystem.fscid, SERVICE_DAEMON_DIR_COUNT_KEY,
+- m_directories.size());
++ static_cast<uint64_t>(m_directories.size()));
+
+ for (auto &[peer, peer_replayer] : m_peer_replayers) {
+ dout(10) << ": peer=" << peer << dendl;
+@@ -352,7 +352,7 @@ void FSMirror::handle_release_directory(
+ if (it != m_directories.end()) {
+ m_directories.erase(it);
+ m_service_daemon->add_or_update_fs_attribute(m_filesystem.fscid, SERVICE_DAEMON_DIR_COUNT_KEY,
+- m_directories.size());
++ static_cast<uint64_t>(m_directories.size()));
+ for (auto &[peer, peer_replayer] : m_peer_replayers) {
+ dout(10) << ": peer=" << peer << dendl;
+ peer_replayer->remove_directory(dir_path);
+--- a/src/librbd/object_map/DiffRequest.cc
++++ b/src/librbd/object_map/DiffRequest.cc
+@@ -175,7 +175,7 @@ void DiffRequest<I>::handle_load_object_
+ m_object_map.resize(num_objs);
+ }
+
+- size_t prev_object_diff_state_size = m_object_diff_state->size();
++ uint64_t prev_object_diff_state_size = m_object_diff_state->size();
+ if (prev_object_diff_state_size < num_objs) {
+ // the diff state should be the largest of all snapshots in the set
+ m_object_diff_state->resize(num_objs);
+--- a/src/SimpleRADOSStriper.cc
++++ b/src/SimpleRADOSStriper.cc
+@@ -140,7 +140,7 @@ int SimpleRADOSStriper::remove()
+ return 0;
+ }
+
+-int SimpleRADOSStriper::truncate(uint64_t size)
++int SimpleRADOSStriper::truncate(size_t size)
+ {
+ d(5) << size << dendl;
+
diff --git a/repo/ceph/31-32bit_fix_tests.patch.noauto b/repo/ceph/31-32bit_fix_tests.patch.noauto
new file mode 100644
index 0000000..939c550
--- /dev/null
+++ b/repo/ceph/31-32bit_fix_tests.patch.noauto
@@ -0,0 +1,66 @@
+--- a/src/test/objectstore/test_bdev.cc
++++ b/src/test/objectstore/test_bdev.cc
+@@ -54,8 +54,8 @@
+ BlockDevice::create(g_ceph_context, bdev.path, NULL, NULL,
+ [](void* handle, void* aio) {}, NULL));
+ bufferlist bl;
+- // writing a bit less than 4GB
+- for (auto i = 0; i < 4000; i++) {
++ // writing a bit less than 1GB
++ for (auto i = 0; i < 1000; i++) {
+ string s(1048576, 'a' + (i % 28));
+ bl.append(s);
+ }
+--- a/src/test/objectstore/test_bluefs.cc
++++ b/src/test/objectstore/test_bluefs.cc
+@@ -237,7 +237,7 @@
+ }
+
+ TEST(BlueFS, very_large_write) {
+- // we'll write a ~5G file, so allocate more than that for the whole fs
++ // we'll write a ~1G file, so allocate more than that for the whole fs
+ uint64_t size = 1048576 * 1024 * 6ull;
+ TempBdev bdev{size};
+ BlueFS fs(g_ceph_context);
+@@ -260,12 +260,12 @@
+ BlueFS::FileWriter *h;
+ ASSERT_EQ(0, fs.mkdir("dir"));
+ ASSERT_EQ(0, fs.open_for_write("dir", "bigfile", &h, false));
+- for (unsigned i = 0; i < 3*1024*1048576ull / sizeof(buf); ++i) {
++ for (unsigned i = 0; i < 1*1024*1048576ull / sizeof(buf); ++i) {
+ h->append(buf, sizeof(buf));
+ total_written += sizeof(buf);
+ }
+ fs.fsync(h);
+- for (unsigned i = 0; i < 2*1024*1048576ull / sizeof(buf); ++i) {
++ for (unsigned i = 0; i < 1*1024*1048576ull / sizeof(buf); ++i) {
+ h->append(buf, sizeof(buf));
+ total_written += sizeof(buf);
+ }
+@@ -278,7 +278,7 @@
+ bufferlist bl;
+ BlueFS::FileReaderBuffer readbuf(10485760);
+ ASSERT_EQ(h->file->fnode.size, total_written);
+- for (unsigned i = 0; i < 3*1024*1048576ull / sizeof(buf); ++i) {
++ for (unsigned i = 0; i < 1*1024*1048576ull / sizeof(buf); ++i) {
+ bl.clear();
+ fs.read(h, &readbuf, i * sizeof(buf), sizeof(buf), &bl, NULL);
+ int r = memcmp(buf, bl.c_str(), sizeof(buf));
+@@ -288,7 +288,7 @@
+ }
+ ASSERT_EQ(0, r);
+ }
+- for (unsigned i = 0; i < 2*1024*1048576ull / sizeof(buf); ++i) {
++ for (unsigned i = 0; i < 1*1024*1048576ull / sizeof(buf); ++i) {
+ bl.clear();
+ fs.read(h, &readbuf, i * sizeof(buf), sizeof(buf), &bl, NULL);
+ int r = memcmp(buf, bl.c_str(), sizeof(buf));
+@@ -313,7 +313,7 @@
+ }
+
+ TEST(BlueFS, very_large_write2) {
+- // we'll write a ~5G file, so allocate more than that for the whole fs
++ // we'll write a ~1G file, so allocate more than that for the whole fs
+ uint64_t size_full = 1048576 * 1024 * 6ull;
+ uint64_t size = 1048576 * 1024 * 5ull;
+ TempBdev bdev{ size_full };
diff --git a/repo/ceph/32-PurgeQueue.cc-cast.patch b/repo/ceph/32-PurgeQueue.cc-cast.patch
new file mode 100644
index 0000000..19a0719
--- /dev/null
+++ b/repo/ceph/32-PurgeQueue.cc-cast.patch
@@ -0,0 +1,85 @@
+Submitted as: https://github.com/ceph/ceph/pull/41235
+
+commit 953e7dc0f911f84a4bb377aee45b22e2ffad6867
+Author: Duncan Bellamy <dunk@denkimushi.com>
+Date: Sat May 8 11:52:35 2021 +0100
+
+ mds: PurgeQueue.cc add static cast for 32bit compilation
+
+ files_high_water is defined as uint64_t but when compiling on 32bit these max functions
+ fail as they are both not considered uint64_t by gcc 10 even though they are
+
+ files_high_water = std::max(files_high_water,
+ static_cast<uint64_t>(in_flight.size()));
+
+ Fixes: https://tracker.ceph.com/issues/50707
+
+ Signed-off-by: Duncan Bellamy <dunk@denkimushi.com>
+
+diff --git a/src/mds/PurgeQueue.cc b/src/mds/PurgeQueue.cc
+index 977be2c118..3104a3ccc4 100644
+--- a/src/mds/PurgeQueue.cc
++++ b/src/mds/PurgeQueue.cc
+@@ -7,9 +7,9 @@
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+- * License version 2.1, as published by the Free Software
++ * License version 2.1, as published by the Free Software
+ * Foundation. See file COPYING.
+- *
++ *
+ */
+
+ #include "common/debug.h"
+@@ -594,8 +594,8 @@ void PurgeQueue::_execute_item(
+
+ in_flight[expire_to] = item;
+ logger->set(l_pq_executing, in_flight.size());
+- files_high_water = std::max(files_high_water,
+- static_cast<uint64_t>(in_flight.size()));
++ files_high_water = std::max<uint64_t>(files_high_water,
++ in_flight.size());
+ logger->set(l_pq_executing_high_water, files_high_water);
+ auto ops = _calculate_ops(item);
+ ops_in_flight += ops;
+@@ -662,8 +662,8 @@ void PurgeQueue::_execute_item(
+ logger->set(l_pq_executing_ops_high_water, ops_high_water);
+ in_flight.erase(expire_to);
+ logger->set(l_pq_executing, in_flight.size());
+- files_high_water = std::max(files_high_water,
+- static_cast<uint64_t>(in_flight.size()));
++ files_high_water = std::max<uint64_t>(files_high_water,
++ in_flight.size());
+ logger->set(l_pq_executing_high_water, files_high_water);
+ return;
+ }
+@@ -716,19 +716,19 @@ void PurgeQueue::_execute_item_complete(
+
+ in_flight.erase(iter);
+ logger->set(l_pq_executing, in_flight.size());
+- files_high_water = std::max(files_high_water,
+- static_cast<uint64_t>(in_flight.size()));
++ files_high_water = std::max<uint64_t>(files_high_water,
++ in_flight.size());
+ logger->set(l_pq_executing_high_water, files_high_water);
+ dout(10) << "in_flight.size() now " << in_flight.size() << dendl;
+
+- uint64_t write_pos = journaler.get_write_pos();
+- uint64_t read_pos = journaler.get_read_pos();
+- uint64_t expire_pos = journaler.get_expire_pos();
+- uint64_t item_num = (write_pos - (in_flight.size() ? expire_pos : read_pos))
++ uint64_t write_pos = journaler.get_write_pos();
++ uint64_t read_pos = journaler.get_read_pos();
++ uint64_t expire_pos = journaler.get_expire_pos();
++ uint64_t item_num = (write_pos - (in_flight.size() ? expire_pos : read_pos))
+ / purge_item_journal_size;
+- dout(10) << "left purge items in journal: " << item_num
+- << " (purge_item_journal_size/write_pos/read_pos/expire_pos) now at "
+- << "(" << purge_item_journal_size << "/" << write_pos << "/" << read_pos
++ dout(10) << "left purge items in journal: " << item_num
++ << " (purge_item_journal_size/write_pos/read_pos/expire_pos) now at "
++ << "(" << purge_item_journal_size << "/" << write_pos << "/" << read_pos
+ << "/" << expire_pos << ")" << dendl;
+
+ logger->set(l_pq_item_in_journal, item_num);
diff --git a/repo/ceph/32-upstream32bit.patch b/repo/ceph/32-upstream32bit.patch
new file mode 100644
index 0000000..917cd03
--- /dev/null
+++ b/repo/ceph/32-upstream32bit.patch
@@ -0,0 +1,92 @@
+commit 72a5993da70955182a73755ddba35005a6d9fc11
+Author: Kefu Chai <kchai@redhat.com>
+Date: Tue Apr 27 18:24:24 2021 +0800
+
+ cls/rbd, librbd: use uint64_t for sparse_size
+
+ the size of `size_t` is varies from architecture to architecture. the
+ C++ standard only requires it to be able to represent the maximum possible
+ size of object of any type. on 32-bit architectures, it's very likely a
+ 32-bit unsigned integer. to ensure the interoperability between the
+ 64-bit systems and 32-bit systems, we should use a type with explicitly
+ defined size.
+
+ also, we don't define the dencoder for size_t. so on systems where
+ size_t is not backed by uint32_t or uint64_t, the tree does not compile.
+
+ in this change, use uint64_t for sparse_size. and leave
+ `C_SparsifyObject::m_sparse_size` intact. as the latter should be able
+ to be promoted to uint64_t when necessary.
+
+ this change is backward compatible on 64-bit systems.
+
+ Signed-off-by: Kefu Chai <kchai@redhat.com>
+
+diff --git a/src/cls/rbd/cls_rbd.cc b/src/cls/rbd/cls_rbd.cc
+index 33910b7df5..e3e05d85ed 100644
+--- a/src/cls/rbd/cls_rbd.cc
++++ b/src/cls/rbd/cls_rbd.cc
+@@ -7996,7 +7996,7 @@ int namespace_list(cls_method_context_t hctx, bufferlist *in, bufferlist *out)
+ */
+ int sparsify(cls_method_context_t hctx, bufferlist *in, bufferlist *out)
+ {
+- size_t sparse_size;
++ uint64_t sparse_size;
+ bool remove_empty;
+ try {
+ auto iter = in->cbegin();
+diff --git a/src/cls/rbd/cls_rbd_client.cc b/src/cls/rbd/cls_rbd_client.cc
+index cefa1fed79..fee3ac8923 100644
+--- a/src/cls/rbd/cls_rbd_client.cc
++++ b/src/cls/rbd/cls_rbd_client.cc
+@@ -2974,7 +2974,7 @@ int namespace_list(librados::IoCtx *ioctx,
+ return namespace_list_finish(&iter, entries);
+ }
+
+-void sparsify(librados::ObjectWriteOperation *op, size_t sparse_size,
++void sparsify(librados::ObjectWriteOperation *op, uint64_t sparse_size,
+ bool remove_empty)
+ {
+ bufferlist bl;
+@@ -2983,7 +2983,7 @@ void sparsify(librados::ObjectWriteOperation *op, size_t sparse_size,
+ op->exec("rbd", "sparsify", bl);
+ }
+
+-int sparsify(librados::IoCtx *ioctx, const std::string &oid, size_t sparse_size,
++int sparsify(librados::IoCtx *ioctx, const std::string &oid, uint64_t sparse_size,
+ bool remove_empty)
+ {
+ librados::ObjectWriteOperation op;
+diff --git a/src/cls/rbd/cls_rbd_client.h b/src/cls/rbd/cls_rbd_client.h
+index 12b34c4832..ef2b05fd84 100644
+--- a/src/cls/rbd/cls_rbd_client.h
++++ b/src/cls/rbd/cls_rbd_client.h
+@@ -652,9 +652,9 @@ int sparse_copyup(librados::IoCtx *ioctx, const std::string &oid,
+ const std::map<uint64_t, uint64_t> &extent_map,
+ ceph::buffer::list data);
+
+-void sparsify(librados::ObjectWriteOperation *op, size_t sparse_size,
++void sparsify(librados::ObjectWriteOperation *op, uint64_t sparse_size,
+ bool remove_empty);
+-int sparsify(librados::IoCtx *ioctx, const std::string &oid, size_t sparse_size,
++int sparsify(librados::IoCtx *ioctx, const std::string &oid, uint64_t sparse_size,
+ bool remove_empty);
+
+ } // namespace cls_client
+diff --git a/src/librbd/WatchNotifyTypes.h b/src/librbd/WatchNotifyTypes.h
+index ca0b40f28f..4fad31ffac 100644
+--- a/src/librbd/WatchNotifyTypes.h
++++ b/src/librbd/WatchNotifyTypes.h
+@@ -410,10 +410,10 @@ struct MigratePayload : public AsyncRequestPayloadBase {
+ };
+
+ struct SparsifyPayload : public AsyncRequestPayloadBase {
+- size_t sparse_size = 0;
++ uint64_t sparse_size = 0;
+
+ SparsifyPayload() {}
+- SparsifyPayload(const AsyncRequestId &id, size_t sparse_size)
++ SparsifyPayload(const AsyncRequestId &id, uint64_t sparse_size)
+ : AsyncRequestPayloadBase(id), sparse_size(sparse_size) {
+ }
+
diff --git a/repo/ceph/32-upstream32bitcleanup.patch b/repo/ceph/32-upstream32bitcleanup.patch
new file mode 100644
index 0000000..1fe036e
--- /dev/null
+++ b/repo/ceph/32-upstream32bitcleanup.patch
@@ -0,0 +1,143 @@
+submitted as https://github.com/ceph/ceph/pull/41239
+
+commit 558adef26a2149b0dd644a2c9a7e2db8d370b556
+Author: Kefu Chai <kchai@redhat.com>
+Date: Sat May 8 21:02:54 2021 +0800
+
+ librbd/deep_copy: cast uint64_t to size_t for constructing SparseBufferlistExtent
+
+ SparseBufferlistExtent's ctor accepts size_t, so, on a 32-bit platform,
+ the parameter would be narrowed before passing to the ctor, and GCC
+ complains at seeing this:
+
+ /builds/a16bitsysop/aports/community/ceph/src/ceph-16.2.3/src/librbd/deep_copy/ObjectCopyRequest.cc:789:60: warning: narrowing conversion of 'object_extent.striper::LightweightObjectExtent::length'
+ from 'uint64_t' {aka 'long long unsigned int'} to 'size_t' {aka 'unsigned int'} [-Wnarrowing]
+ 789 | {io::SPARSE_EXTENT_STATE_ZEROED, object_extent.length});
+ | ~~~~~~~~~~~~~~^~~~~~
+
+ this change make this cast explicit and silences the warning.
+
+ Signed-off-by: Kefu Chai <kchai@redhat.com>
+
+diff --git a/src/librbd/deep_copy/ObjectCopyRequest.cc b/src/librbd/deep_copy/ObjectCopyRequest.cc
+index e86ed5ea1c..efc6749536 100644
+--- a/src/librbd/deep_copy/ObjectCopyRequest.cc
++++ b/src/librbd/deep_copy/ObjectCopyRequest.cc
+@@ -614,7 +614,8 @@ void ObjectCopyRequest<I>::merge_write_ops() {
+
+ m_snapshot_sparse_bufferlist[src_snap_seq].insert(
+ object_extent.offset, object_extent.length,
+- {io::SPARSE_EXTENT_STATE_DATA, object_extent.length,\
++ {io::SPARSE_EXTENT_STATE_DATA,
++ static_cast<size_t>(object_extent.length),
+ std::move(sub_bl)});
+
+ buffer_offset += object_extent.length;
+diff --git a/src/librbd/io/CopyupRequest.cc b/src/librbd/io/CopyupRequest.cc
+index d70851409f..a3af713151 100644
+--- a/src/librbd/io/CopyupRequest.cc
++++ b/src/librbd/io/CopyupRequest.cc
+@@ -711,7 +711,9 @@ int CopyupRequest<I>::prepare_copyup_data() {
+
+ sparse_bufferlist.insert(
+ object_offset, object_length,
+- {SPARSE_EXTENT_STATE_DATA, object_length, std::move(sub_bl)});
++ {SPARSE_EXTENT_STATE_DATA,
++ static_cast<size_t>(object_length),
++ std::move(sub_bl)});
+ }
+ } else {
+ // copyup that will concurrently written to the HEAD revision with the
+commit 130fdf7bcfd2b4c5a5b34809952b69b70e9c11a4
+Author: Kefu Chai <kchai@redhat.com>
+Date: Sat May 8 20:59:07 2021 +0800
+
+ mgr/PyModule: use Py_ssize_t for the PyList index
+
+ also silences the warnings like:
+
+ mgr/PyModule.cc:574:30: warning: comparison of integer expressions of different signedness: 'unsigned int' and 'Py_ssize_t' {aka 'int'} [-Wsign-compare]
+ 574 | for (unsigned i = 0; i < PyList_Size(p); ++i) {
+ | ~~^~~~~~~~~~~~~~~~
+
+ Signed-off-by: Kefu Chai <kchai@redhat.com>
+
+diff --git a/src/mgr/PyModule.cc b/src/mgr/PyModule.cc
+index 28c76fe7ed..ff1ff85e7e 100644
+--- a/src/mgr/PyModule.cc
++++ b/src/mgr/PyModule.cc
+@@ -562,7 +562,7 @@ int PyModule::load_options()
+ }
+ p = PyDict_GetItemString(pOption, "enum_allowed");
+ if (p && PyObject_TypeCheck(p, &PyList_Type)) {
+- for (unsigned i = 0; i < PyList_Size(p); ++i) {
++ for (Py_ssize_t i = 0; i < PyList_Size(p); ++i) {
+ auto q = PyList_GetItem(p, i);
+ if (q) {
+ auto r = PyObject_Str(q);
+@@ -573,7 +573,7 @@ int PyModule::load_options()
+ }
+ p = PyDict_GetItemString(pOption, "see_also");
+ if (p && PyObject_TypeCheck(p, &PyList_Type)) {
+- for (unsigned i = 0; i < PyList_Size(p); ++i) {
++ for (Py_ssize_t i = 0; i < PyList_Size(p); ++i) {
+ auto q = PyList_GetItem(p, i);
+ if (q && PyObject_TypeCheck(q, &PyUnicode_Type)) {
+ option.see_also.insert(PyUnicode_AsUTF8(q));
+@@ -582,7 +582,7 @@ int PyModule::load_options()
+ }
+ p = PyDict_GetItemString(pOption, "tags");
+ if (p && PyObject_TypeCheck(p, &PyList_Type)) {
+- for (unsigned i = 0; i < PyList_Size(p); ++i) {
++ for (Py_ssize_t i = 0; i < PyList_Size(p); ++i) {
+ auto q = PyList_GetItem(p, i);
+ if (q && PyObject_TypeCheck(q, &PyUnicode_Type)) {
+ option.tags.insert(PyUnicode_AsUTF8(q));
+commit 3bf4b32c9bd15652b24bc4b8c8ea07fb6bb04357
+Author: Kefu Chai <kchai@redhat.com>
+Date: Sat May 8 20:51:19 2021 +0800
+
+ os/bluestore: print size_t using %xz
+
+ we cannot assume that size_t is an alias of "long"
+
+ Signed-off-by: Kefu Chai <kchai@redhat.com>
+
+diff --git a/src/os/bluestore/Allocator.cc b/src/os/bluestore/Allocator.cc
+index 75f3172ca5..3428545414 100644
+--- a/src/os/bluestore/Allocator.cc
++++ b/src/os/bluestore/Allocator.cc
+@@ -81,8 +81,8 @@ public:
+ f->open_object_section("free");
+ char off_hex[30];
+ char len_hex[30];
+- snprintf(off_hex, sizeof(off_hex) - 1, "0x%lx", off);
+- snprintf(len_hex, sizeof(len_hex) - 1, "0x%lx", len);
++ snprintf(off_hex, sizeof(off_hex) - 1, "0x%zx", off);
++ snprintf(len_hex, sizeof(len_hex) - 1, "0x%zx", len);
+ f->dump_string("offset", off_hex);
+ f->dump_string("length", len_hex);
+ f->close_section();
+commit 3af466ee84209896f8671046c837350e736f15de
+Author: Kefu Chai <kchai@redhat.com>
+Date: Sat May 8 20:50:08 2021 +0800
+
+ client: print int64_t using PRId64
+
+ we cannot assume that int64_t is an alias of "long"
+
+ Signed-off-by: Kefu Chai <kchai@redhat.com>
+
+diff --git a/src/client/Client.cc b/src/client/Client.cc
+index acdd8f0934..7352824f6c 100644
+--- a/src/client/Client.cc
++++ b/src/client/Client.cc
+@@ -12772,7 +12772,7 @@ size_t Client::_vxattrcb_cluster_fsid(Inode *in, char *val, size_t size)
+ size_t Client::_vxattrcb_client_id(Inode *in, char *val, size_t size)
+ {
+ auto name = messenger->get_myname();
+- return snprintf(val, size, "%s%ld", name.type_str(), name.num());
++ return snprintf(val, size, "%s%" PRId64, name.type_str(), name.num());
+ }
+
+ #define CEPH_XATTR_NAME(_type, _name) "ceph." #_type "." #_name
diff --git a/repo/ceph/35-fix_ErasureCodeShec.patch b/repo/ceph/35-fix_ErasureCodeShec.patch
new file mode 100644
index 0000000..0ab2cc2
--- /dev/null
+++ b/repo/ceph/35-fix_ErasureCodeShec.patch
@@ -0,0 +1,17 @@
+patch by Vladimir Bashkirtsev
+
+diff -uNr ceph-15.2.4/src/erasure-code/shec/ErasureCodeShec.cc ceph-15.2.4-fix_ErasureCodeShec/src/erasure-code/shec/ErasureCodeShec.cc
+--- ceph-15.2.4/src/erasure-code/shec/ErasureCodeShec.cc 2020-07-01 01:10:51.000000000 +0930
++++ ceph-15.2.4-fix_ErasureCodeShec/src/erasure-code/shec/ErasureCodeShec.cc 2020-11-14 00:46:20.029488684 +1030
+@@ -197,7 +197,10 @@
+ }
+ unsigned int k = get_data_chunk_count();
+ unsigned int m = get_chunk_count() - k;
+- unsigned blocksize = (*chunks.begin()).second.length();
++ unsigned blocksize = 0;
++ if (chunks.size() > 0) {
++ blocksize = (*chunks.begin()).second.length();
++ }
+ for (unsigned int i = 0; i < k + m; i++) {
+ if (chunks.find(i) == chunks.end()) {
+ bufferlist tmp;
diff --git a/repo/ceph/37-fix_tests.patch b/repo/ceph/37-fix_tests.patch
new file mode 100644
index 0000000..169f6ef
--- /dev/null
+++ b/repo/ceph/37-fix_tests.patch
@@ -0,0 +1,86 @@
+patch by Vladimir Bashkirtsev
+increase timeouts for armv7 ci
+
+diff -uNr ceph-15.2.4/src/test/CMakeLists.txt ceph-15.2.4-fix_tests/src/test/CMakeLists.txt
+--- ceph-15.2.4/src/test/CMakeLists.txt 2020-07-01 01:10:51.000000000 +0930
++++ ceph-15.2.4-fix_tests/src/test/CMakeLists.txt 2020-11-08 17:37:15.788767448 +1030
+@@ -528,11 +528,17 @@
+ # Run rbd-unit-tests separate so they an run in parallel
+ # For values see: src/include/rbd/features.h
+ add_ceph_test(run-rbd-unit-tests-N.sh ${CMAKE_CURRENT_SOURCE_DIR}/run-rbd-unit-tests.sh N)
++ set_tests_properties(run-rbd-unit-tests-N.sh PROPERTIES TIMEOUT 7200)
+ add_ceph_test(run-rbd-unit-tests-0.sh ${CMAKE_CURRENT_SOURCE_DIR}/run-rbd-unit-tests.sh 0)
++ set_tests_properties(run-rbd-unit-tests-0.sh PROPERTIES TIMEOUT 7200)
+ add_ceph_test(run-rbd-unit-tests-1.sh ${CMAKE_CURRENT_SOURCE_DIR}/run-rbd-unit-tests.sh 1)
++ set_tests_properties(run-rbd-unit-tests-1.sh PROPERTIES TIMEOUT 7200)
+ add_ceph_test(run-rbd-unit-tests-61.sh ${CMAKE_CURRENT_SOURCE_DIR}/run-rbd-unit-tests.sh 61)
++ set_tests_properties(run-rbd-unit-tests-61.sh PROPERTIES TIMEOUT 7200)
+ add_ceph_test(run-rbd-unit-tests-109.sh ${CMAKE_CURRENT_SOURCE_DIR}/run-rbd-unit-tests.sh 109)
++ set_tests_properties(run-rbd-unit-tests-109.sh PROPERTIES TIMEOUT 7200)
+ add_ceph_test(run-rbd-unit-tests-127.sh ${CMAKE_CURRENT_SOURCE_DIR}/run-rbd-unit-tests.sh 127)
++ set_tests_properties(run-rbd-unit-tests-127.sh PROPERTIES TIMEOUT 7200)
+ if(FREEBSD)
+ add_ceph_test(rbd-ggate.sh ${CMAKE_CURRENT_SOURCE_DIR}/rbd-ggate.sh)
+ endif(FREEBSD)
+@@ -546,6 +552,7 @@
+ #add_ceph_test(test_pidfile.sh ${CMAKE_CURRENT_SOURCE_DIR}/test_pidfile.sh)
+
+ add_ceph_test(smoke.sh ${CMAKE_CURRENT_SOURCE_DIR}/smoke.sh)
++set_tests_properties(smoke.sh PROPERTIES TIMEOUT 14400)
+
+ set_property(
+ TEST ${tox_tests}
+diff -uNr ceph-15.2.4/src/test/encoding/CMakeLists.txt ceph-15.2.4-fix_tests/src/test/encoding/CMakeLists.txt
+--- ceph-15.2.4/src/test/encoding/CMakeLists.txt 2020-07-01 01:10:51.000000000 +0930
++++ ceph-15.2.4-fix_tests/src/test/encoding/CMakeLists.txt 2020-11-08 17:37:15.789767451 +1030
+@@ -1,3 +1,5 @@
+ # scripts
+ add_ceph_test(check-generated.sh ${CMAKE_CURRENT_SOURCE_DIR}/check-generated.sh)
++set_tests_properties(check-generated.sh PROPERTIES TIMEOUT 18000)
+ add_ceph_test(readable.sh ${CMAKE_CURRENT_SOURCE_DIR}/readable.sh)
++set_tests_properties(readable.sh PROPERTIES TIMEOUT 18000)
+diff -uNr ceph-15.2.4/src/test/mgr/CMakeLists.txt ceph-15.2.4-fix_tests/src/test/mgr/CMakeLists.txt
+--- ceph-15.2.4/src/test/mgr/CMakeLists.txt 2020-07-01 01:10:51.000000000 +0930
++++ ceph-15.2.4-fix_tests/src/test/mgr/CMakeLists.txt 2020-11-08 17:37:15.790767454 +1030
+@@ -9,6 +9,7 @@
+ if(WITH_MGR_DASHBOARD_FRONTEND)
+ if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64|arm|ARM")
+ add_ceph_test(mgr-dashboard-frontend-unittests ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/run-frontend-unittests.sh)
++ set_tests_properties(mgr-dashboard-frontend-unittests PROPERTIES TIMEOUT 72000)
+ endif(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64|arm|ARM")
+
+ add_ceph_test(mgr-dashboard-smoke.sh ${CMAKE_CURRENT_SOURCE_DIR}/mgr-dashboard-smoke.sh)
+diff -uNr ceph-15.2.4/src/test/objectstore/CMakeLists.txt ceph-15.2.4-fix_tests/src/test/objectstore/CMakeLists.txt
+--- ceph-15.2.4/src/test/objectstore/CMakeLists.txt 2020-07-01 01:10:51.000000000 +0930
++++ ceph-15.2.4-fix_tests/src/test/objectstore/CMakeLists.txt 2020-11-08 17:37:15.791767457 +1030
+@@ -131,6 +131,7 @@
+ test_bluefs.cc
+ )
+ add_ceph_unittest(unittest_bluefs)
++ set_tests_properties(unittest_bluefs PROPERTIES TIMEOUT 7200)
+ target_link_libraries(unittest_bluefs os global)
+
+ # unittest_bluestore_types
+diff -uNr ceph-15.2.4/src/test/osd/CMakeLists.txt ceph-15.2.4-fix_tests/src/test/osd/CMakeLists.txt
+--- ceph-15.2.4/src/test/osd/CMakeLists.txt 2020-07-01 01:10:51.000000000 +0930
++++ ceph-15.2.4-fix_tests/src/test/osd/CMakeLists.txt 2020-11-08 17:41:54.515606236 +1030
+@@ -35,6 +35,7 @@
+
+ # scripts
+ add_ceph_test(safe-to-destroy.sh ${CMAKE_CURRENT_SOURCE_DIR}/safe-to-destroy.sh)
++set_tests_properties(safe-to-destroy.sh PROPERTIES TIMEOUT 7200)
+
+ # unittest_osdmap
+ add_executable(unittest_osdmap
+diff -uNr ceph-15.2.4/src/test/osd/TestOSDScrub.cc ceph-15.2.4-fix_tests/src/test/osd/TestOSDScrub.cc
+--- ceph-15.2.4/src/test/osd/TestOSDScrub.cc 2020-07-01 01:10:51.000000000 +0930
++++ ceph-15.2.4-fix_tests/src/test/osd/TestOSDScrub.cc 2020-11-08 17:37:15.793767463 +1030
+@@ -70,7 +70,7 @@
+ g_ceph_context->_conf.set_val("osd_scrub_begin_hour", "0");
+ g_ceph_context->_conf.set_val("osd_scrub_end_hour", "24");
+ g_ceph_context->_conf.apply_changes(nullptr);
+- tm tm;
++ tm tm = {0};
+ tm.tm_isdst = -1;
+ strptime("2015-01-16 12:05:13", "%Y-%m-%d %H:%M:%S", &tm);
+ utime_t now = utime_t(mktime(&tm), 0);
diff --git a/repo/ceph/42-no-virtualenvs.patch b/repo/ceph/42-no-virtualenvs.patch
new file mode 100644
index 0000000..541b338
--- /dev/null
+++ b/repo/ceph/42-no-virtualenvs.patch
@@ -0,0 +1,71 @@
+based on gentoo patch
+use system node instead of nodeenv installing one as only availiable for x86 with musl
+
+--- a/cmake/modules/AddCephTest.cmake
++++ b/cmake/modules/AddCephTest.cmake
+@@ -68,14 +68,6 @@
+ endif()
+ string(REPLACE ";" "," tox_envs "${tox_envs}")
+ find_package(Python3 QUIET REQUIRED)
+- add_custom_command(
+- OUTPUT ${venv_path}/bin/activate
+- COMMAND ${CMAKE_SOURCE_DIR}/src/tools/setup-virtualenv.sh --python="${Python3_EXECUTABLE}" ${venv_path}
+- WORKING_DIRECTORY ${tox_path}
+- COMMENT "preparing venv for ${name}")
+- add_custom_target(${name}-venv
+- DEPENDS ${venv_path}/bin/activate)
+- add_dependencies(tests ${name}-venv)
+ add_test(
+ NAME ${test_name}
+ COMMAND ${CMAKE_SOURCE_DIR}/src/script/run_tox.sh
+--- a/src/ceph-volume/CMakeLists.txt
++++ b/src/ceph-volume/CMakeLists.txt
+@@ -8,22 +8,6 @@
+ add_subdirectory(plugin/zfs)
+ endif()
+
+-# Required for running ceph-volume inventory in a vstart environment
+-set(CEPH_VOLUME_VIRTUALENV ${CEPH_BUILD_VIRTUALENV}/ceph-volume-virtualenv)
+-
+-add_custom_command(
+- OUTPUT ${CEPH_VOLUME_VIRTUALENV}/bin/python
+- COMMAND ${CMAKE_SOURCE_DIR}/src/tools/setup-virtualenv.sh --python=${Python3_EXECUTABLE} ${CEPH_VOLUME_VIRTUALENV}
+- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/ceph-volume
+- COMMENT "ceph-volume venv is being created")
+-
+-add_custom_command(
+- OUTPUT ${CEPH_VOLUME_VIRTUALENV}/bin/ceph-volume
+- DEPENDS ${CEPH_VOLUME_VIRTUALENV}/bin/python
+- COMMAND . ${CEPH_VOLUME_VIRTUALENV}/bin/activate && ${CEPH_VOLUME_VIRTUALENV}/bin/python setup.py develop && deactivate
+- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/ceph-volume
+- COMMENT "${CMAKE_SOURCE_DIR}/src/ceph-volume")
+-
+ add_custom_target(ceph-volume-venv-setup
+ DEPENDS ${CEPH_VOLUME_VIRTUALENV}/bin/ceph-volume)
+
+--- a/src/pybind/mgr/dashboard/CMakeLists.txt
++++ b/src/pybind/mgr/dashboard/CMakeLists.txt
+@@ -5,9 +5,6 @@
+ set(multi_kw COMMAND DEPENDS)
+ cmake_parse_arguments(NC "${options}" "${single_kw}" "${multi_kw}" ${ARGN})
+ string(REPLACE ";" " " command "${NC_COMMAND}")
+- if(NC_NODEENV)
+- string(REGEX REPLACE "^(.*(npm|npx) .*)$" ". ${mgr-dashboard-nodeenv-dir}/bin/activate && \\1 && deactivate" command ${command})
+- endif()
+ string(REPLACE " " ";" command "${command}")
+ add_custom_command(
+ OUTPUT "${NC_OUTPUT}"
+@@ -51,11 +48,8 @@
+ set(node_mirror_opt "--mirror=$ENV{NODE_MIRROR}")
+ endif()
+ add_custom_command(
+- OUTPUT "${mgr-dashboard-nodeenv-dir}/bin/npm"
+- COMMAND ${CMAKE_SOURCE_DIR}/src/tools/setup-virtualenv.sh --python=${MGR_PYTHON_EXECUTABLE} ${mgr-dashboard-nodeenv-dir}
+- COMMAND ${mgr-dashboard-nodeenv-dir}/bin/pip install nodeenv
+- COMMAND ${mgr-dashboard-nodeenv-dir}/bin/nodeenv --verbose ${node_mirror_opt} -p --node=12.18.2
+- COMMAND mkdir ${mgr-dashboard-nodeenv-dir}/.npm
++ OUTPUT "/usr/bin/npm"
++ COMMAND /usr/bin/nodeenv -p --node=system
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ COMMENT "dashboard nodeenv is being installed"
+ )
diff --git a/repo/ceph/43-LogClock.h.patch b/repo/ceph/43-LogClock.h.patch
new file mode 100644
index 0000000..8cd02e5
--- /dev/null
+++ b/repo/ceph/43-LogClock.h.patch
@@ -0,0 +1,18 @@
+reported as issue
+https://tracker.ceph.com/issues/50133
+
+needed for 32bit platforms
+
+--- aa/src/log/LogClock.h
++++ bb/src/log/LogClock.h
+@@ -12,10 +12,6 @@
+ #include "include/ceph_assert.h"
+ #include "common/ceph_time.h"
+
+-#ifndef suseconds_t
+-typedef long suseconds_t;
+-#endif
+-
+ namespace ceph {
+ namespace logging {
+ namespace _logclock {
diff --git a/repo/ceph/44-aarch64-erasure.patch b/repo/ceph/44-aarch64-erasure.patch
new file mode 100644
index 0000000..421decc
--- /dev/null
+++ b/repo/ceph/44-aarch64-erasure.patch
@@ -0,0 +1,129 @@
+merged as:
+https://github.com/ceph/isa-l/commit/bee5180a1517f8b5e70b02fcd66790c623536c5d
+
+--- a/src/isa-l/erasure_code/aarch64/gf_2vect_mad_neon.S
++++ b/src/isa-l/erasure_code/aarch64/gf_2vect_mad_neon.S
+@@ -360,7 +360,8 @@
+ sub x_dest1, x_dest1, x_tmp
+ sub x_dest2, x_dest2, x_tmp
+
+- ldr x_const, =const_tbl
++ adrp x_const, const_tbl
++ add x_const, x_const, :lo12:const_tbl
+ sub x_const, x_const, x_tmp
+ ldr q_tmp, [x_const, #16]
+
+@@ -394,7 +395,7 @@
+ mov w_ret, #1
+ ret
+
+-.section .data
++.section .rodata
+ .balign 8
+ const_tbl:
+ .dword 0x0000000000000000, 0x0000000000000000
+--- a/src/isa-l/erasure_code/aarch64/gf_3vect_mad_neon.S
++++ b/src/isa-l/erasure_code/aarch64/gf_3vect_mad_neon.S
+@@ -332,7 +332,8 @@
+ sub x_dest2, x_dest2, x_tmp
+ sub x_dest3, x_dest3, x_tmp
+
+- ldr x_const, =const_tbl
++ adrp x_const, const_tbl
++ add x_const, x_const, :lo12:const_tbl
+ sub x_const, x_const, x_tmp
+ ldr q_tmp, [x_const, #16]
+
+@@ -374,7 +375,7 @@
+ mov w_ret, #1
+ ret
+
+-.section .data
++.section .rodata
+ .balign 8
+ const_tbl:
+ .dword 0x0000000000000000, 0x0000000000000000
+--- a/src/isa-l/erasure_code/aarch64/gf_4vect_mad_neon.S
++++ b/src/isa-l/erasure_code/aarch64/gf_4vect_mad_neon.S
+@@ -397,7 +397,8 @@
+ sub x_dest3, x_dest3, x_tmp
+ sub x_dest4, x_dest4, x_tmp
+
+- ldr x_const, =const_tbl
++ adrp x_const, const_tbl
++ add x_const, x_const, :lo12:const_tbl
+ sub x_const, x_const, x_tmp
+ ldr q_tmp, [x_const, #16]
+
+@@ -448,7 +449,7 @@
+ mov w_ret, #1
+ ret
+
+-.section .data
++.section .rodata
+ .balign 8
+ const_tbl:
+ .dword 0x0000000000000000, 0x0000000000000000
+--- a/src/isa-l/erasure_code/aarch64/gf_5vect_mad_neon.S
++++ b/src/isa-l/erasure_code/aarch64/gf_5vect_mad_neon.S
+@@ -463,7 +463,8 @@
+ sub x_dest4, x_dest4, x_tmp
+ sub x_dest5, x_dest5, x_tmp
+
+- ldr x_const, =const_tbl
++ adrp x_const, const_tbl
++ add x_const, x_const, :lo12:const_tbl
+ sub x_const, x_const, x_tmp
+ ldr q_tmp, [x_const, #16]
+
+@@ -527,7 +528,7 @@
+ mov w_ret, #1
+ ret
+
+-.section .data
++.section .rodata
+ .balign 8
+ const_tbl:
+ .dword 0x0000000000000000, 0x0000000000000000
+--- a/src/isa-l/erasure_code/aarch64/gf_6vect_mad_neon.S
++++ b/src/isa-l/erasure_code/aarch64/gf_6vect_mad_neon.S
+@@ -526,7 +526,8 @@
+ sub x_dest5, x_dest5, x_tmp
+ sub x_dest6, x_dest6, x_tmp
+
+- ldr x_const, =const_tbl
++ adrp x_const, const_tbl
++ add x_const, x_const, :lo12:const_tbl
+ sub x_const, x_const, x_tmp
+ ldr q_tmp, [x_const, #16]
+
+@@ -602,7 +603,7 @@
+ mov w_ret, #1
+ ret
+
+-.section .data
++.section .rodata
+ .balign 8
+ const_tbl:
+ .dword 0x0000000000000000, 0x0000000000000000
+--- a/src/isa-l/erasure_code/aarch64/gf_vect_mad_neon.S
++++ b/src/isa-l/erasure_code/aarch64/gf_vect_mad_neon.S
+@@ -281,7 +281,8 @@
+ mov x_src, x_src_end
+ sub x_dest1, x_dest1, x_tmp
+
+- ldr x_const, =const_tbl
++ adrp x_const, const_tbl
++ add x_const, x_const, :lo12:const_tbl
+ sub x_const, x_const, x_tmp
+ ldr q_tmp, [x_const, #16]
+
+@@ -307,7 +308,7 @@
+ mov w_ret, #1
+ ret
+
+-.section .data
++.section .rodata
+ .balign 8
+ const_tbl:
+ .dword 0x0000000000000000, 0x0000000000000000
diff --git a/repo/ceph/44-cmake-buildtype.patch b/repo/ceph/44-cmake-buildtype.patch
new file mode 100644
index 0000000..7112ce1
--- /dev/null
+++ b/repo/ceph/44-cmake-buildtype.patch
@@ -0,0 +1,38 @@
+updated: https://github.com/ceph/ceph/commit/6e4481316884f08daad624c1d997378daedf410e
+
+commit a7e3ece459111d157a20d05de3a92cf4dab6bde6
+Author: Kefu Chai <kchai@redhat.com>
+Date: Thu Jul 1 15:24:50 2021 +0800
+
+ cmake: set CMAKE_BUILD_TYPE only if .git exists
+
+ distros intend to fine tune the CFLAGS and CXXFLAGS by themselves, see
+
+ - https://git.alpinelinux.org/abuild/tree/abuild.conf
+ - https://wiki.archlinux.org/title/CMake_package_guidelines#CMake_undesired_behaviors
+ - https://github.com/Debian/debhelper/blob/5d1bb29841043d8e47ebbdd043e6cd086cad508e/lib/Debian/Debhelper/Buildsystem/cmake.pm#L16
+
+ so instead of setting a CMAKE_BUILD_TYPE when building from a
+ dist tarball, let's just leave it empty.
+
+ Signed-off-by: Kefu Chai <kchai@redhat.com>
+
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 760a2ceb0c..6f35e87f90 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -156,12 +156,8 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL Clang)
+ endif()
+ endif(CMAKE_CXX_COMPILER_ID STREQUAL GNU)
+
+-if(NOT CMAKE_BUILD_TYPE)
+- if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
+- set(default_build_type "Debug")
+- else()
+- set(default_build_type "RelWithDebInfo")
+- endif()
++if(NOT DEFINED CMAKE_BUILD_TYPE AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
++ set(default_build_type "Debug")
+ set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE
+ STRING "Default BUILD_TYPE is Debug, other options are: RelWithDebInfo, Release, and MinSizeRel." FORCE)
+ endif()
diff --git a/repo/ceph/44-missing-include.patch b/repo/ceph/44-missing-include.patch
new file mode 100644
index 0000000..f944255
--- /dev/null
+++ b/repo/ceph/44-missing-include.patch
@@ -0,0 +1,16 @@
+submitted as:
+https://github.com/ceph/ceph/pull/41470
+
+diff --git a/src/rgw/rgw_string.h b/src/rgw/rgw_string.h
+index 257daa9c1..90e64f98a 100644
+--- a/src/rgw/rgw_string.h
++++ b/src/rgw/rgw_string.h
+@@ -8,6 +8,8 @@
+ #include <stdlib.h>
+ #include <limits.h>
+ #include <string_view>
++#include <string>
++#include <stdexcept>
+
+ #include <boost/container/small_vector.hpp>
+
diff --git a/repo/ceph/44-staticcast.patch b/repo/ceph/44-staticcast.patch
new file mode 100644
index 0000000..ebe8bbf
--- /dev/null
+++ b/repo/ceph/44-staticcast.patch
@@ -0,0 +1,13 @@
+submitted as https://github.com/ceph/ceph/pull/40582
+
+--- a/src/common/buffer.cc
++++ b/src/common/buffer.cc
+@@ -2268,7 +2268,7 @@
+
+ void ceph::buffer::list::page_aligned_appender::_refill(size_t len) {
+ const size_t alloc = \
+- std::max((size_t)min_alloc, (len + CEPH_PAGE_SIZE - 1) & CEPH_PAGE_MASK);
++ std::max(static_cast<size_t>(min_alloc), static_cast<size_t>((len + CEPH_PAGE_SIZE - 1) & CEPH_PAGE_MASK));
+ auto new_back = \
+ ptr_node::create(buffer::create_page_aligned(alloc));
+ new_back->set_length(0); // unused, so far.
diff --git a/repo/ceph/ceph-user.pre-install b/repo/ceph/ceph-user.pre-install
new file mode 100644
index 0000000..bae4f09
--- /dev/null
+++ b/repo/ceph/ceph-user.pre-install
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+addgroup ceph -g 167 -S 2>/dev/null
+adduser ceph -u 167 -S -G ceph -s /sbin/nologin -h /var/lib/ceph -g "Ceph Daemons" 2> /dev/null
+exit 0
diff --git a/repo/ceph/ceph.confd b/repo/ceph/ceph.confd
new file mode 100644
index 0000000..32737b1
--- /dev/null
+++ b/repo/ceph/ceph.confd
@@ -0,0 +1,17 @@
+# Original source: https://gitweb.gentoo.org/repo/gentoo.git/tree/sys-cluster/ceph/files/ceph.confd-r5
+
+# Example
+
+# default ceph conf file
+#ceph_conf="/etc/ceph/ceph.conf"
+
+# Set RADOSGW_WANT_NAME_PARAM=y in order to make the init script add
+# a --name=client.${RC_SVCNAME} parameter to command_args for radosgw.*
+# service instances. This will make the service use a key by the name
+# of client.${RC_SVCNAME} instead of the default client.admin key.
+# A setting like this in the ceph config file can be used to customize
+# the rgw_data and keyring paths used by radosgw instances:
+# [client]
+# rgw_data = /var/lib/ceph/radosgw/$cluster-$id
+# keyring = /var/lib/ceph/radosgw/$cluster-$id/keyring
+RADOSGW_WANT_NAME_PARAM=n
diff --git a/repo/ceph/ceph.initd b/repo/ceph/ceph.initd
new file mode 100644
index 0000000..c522efa
--- /dev/null
+++ b/repo/ceph/ceph.initd
@@ -0,0 +1,118 @@
+#!/sbin/openrc-run
+
+# Original source: https://gitweb.gentoo.org/repo/gentoo.git/tree/sys-cluster/ceph/files/ceph.initd-r12
+
+# make sure /etc/conf.d/ceph gets loaded for ceph-mon etc
+_CONFD_FILE="${RC_SERVICE%/*}/../conf.d/${RC_SVCNAME%-*}"
+if [ -r "${_CONFD_FILE}" ]; then
+ . "${_CONFD_FILE}" || exit 1
+fi
+
+: "${ceph_conf:=/etc/ceph/ceph.conf}"
+daemon_type="${RC_SVCNAME#ceph-}"
+daemon_type="${daemon_type%%.*}"
+daemon_id="${RC_SVCNAME#ceph-*.}"
+daemon_id="${daemon_id:-0}"
+: "${rundir:=/run/ceph}"
+: "${user:=ceph}"
+: "${group:=ceph}"
+: "${rc_ulimit:=-n 1048576 -u 1048576}"
+
+pidfile="${rundir}/supervisor-${daemon_type}.${daemon_id}.pid"
+daemon_pidfile="${rundir}/${daemon_type}.${daemon_id}.pid"
+
+command="/usr/bin/${RC_SVCNAME%%.*}"
+command_args="-i ${daemon_id} --pid-file ${daemon_pidfile} -c ${ceph_conf}"
+extra_commands="${extra_commands} reload"
+command_args_foreground="--foreground"
+
+retry="${CEPH_TERMTIMEOUT:-TERM/120/KILL/5}"
+start_stop_daemon_args="--user ${user} --group ${group}"
+supervise_daemon_args="--user ${user} --group ${group}"
+
+: "${supervisor:=supervise-daemon}"
+: "${stdout:=/var/log/ceph/ceph}"
+: "${stderr:=/var/log/ceph/ceph}"
+: "${respawn_delay:=10}"
+: "${respawn_max:=5}"
+: "${respawn_period:=1800}"
+
+: "${osd_respawn_delay:=15}"
+: "{osd_respawn_max:=10}"
+
+: "{radosgw_respawn_max:=5}"
+: "${radosgw_respawn_period:=30}"
+
+depend() {
+ use dns logger
+ after net ntpd ntp-client chronyd
+ before netmount
+}
+
+is_type_valid() {
+ case ${daemon_type} in
+ mon|mds|osd|mgr|radosgw) return 0;;
+ *) return 1;;
+ esac
+}
+
+start_pre() {
+ local log_dir
+ export CEPH_CONF="${ceph_conf}"
+
+ checkpath -d -q -o "${user}:${group}" "${rundir}"
+
+ if ! is_type_valid ;then
+ eerror "Please give valid Ceph Server Type: mds, mon, osd"
+ return 1
+
+ elif pgrep -f "[c]eph-${daemon_type} -i ${daemon_id} "; then
+ eerror "${daemon_type}.${daemon_id} is still running, refusing to start"
+ return 1
+ fi
+
+ if [ -n "${bluestore_osd_fsid}" ]; then
+ einfo "Mounting Bluestore"
+ ceph-volume lvm activate "${daemon_id}" "${bluestore_osd_fsid}" --no-systemd
+ fi
+
+ if [ "${daemon_type}" = radosgw ] && [ "${RADOSGW_WANT_NAME_PARAM}" = y ]; then
+ command_args="${command_args} --name client.${daemon_id}"
+ fi
+
+ local arg_name arg_val repl_arg_name
+ for arg_name in stdout stderr respawn_delay respawn_max respawn_period; do
+ eval arg_val="\${${daemon_type}_${arg_name}}"
+
+ if [ -z "${arg_val}" ]; then
+ eval arg_val="\${${arg_name}}"
+ else
+ eval "${arg_name}=\"${arg_val}\""
+ fi
+
+ if [ "${arg_name}" = "stderr" ] || [ "${arg_name}" = "stdout" ]; then
+ local log_file log_postfix
+ log_postfix=".${daemon_id}-${arg_name}.log"
+ log_file="${arg_val}"
+
+ if [ "${log_file}" != /dev/null ]; then
+ log_file="${log_file}${log_postfix}"
+
+ log_dir="$(dirname "${log_file}")"
+ checkpath -m 0755 -o "${user}:${group}" -d "${log_dir}"
+ fi
+
+ repl_arg_name="$(printf -- "%s\n" "${arg_name}" | tr _ -)"
+ supervise_daemon_args="${supervise_daemon_args} --${repl_arg_name}=${log_file}"
+ fi
+ done
+}
+
+reload() {
+ ebegin "Reloading Ceph ${daemon_type}.${daemon_id}"
+ start-stop-daemon --signal 1 "${start_stop_daemon_args}"
+ eend ${?}
+}
+
+# vim:ft=gentoo-init-d:ts=4:sts=4:sw=4:noet:
+
diff --git a/repo/ceph/ceph.xibuild b/repo/ceph/ceph.xibuild
new file mode 100644
index 0000000..65d71fa
--- /dev/null
+++ b/repo/ceph/ceph.xibuild
@@ -0,0 +1,120 @@
+#!/bin/sh
+
+NAME="ceph"
+DESC="Ceph is a distributed object store and file system"
+
+MAKEDEPS="acl argp-standalone bc boost btrfs-progs bzip2 cmake cryptsetup cunit curl cython diffutils doxygen eudev expat fcgi flex fmt fuse fuse git graphviz grep gperf jq keyutils leveldb libaio libcap-ng libedit librdkafka libnl libtirpc libtool libxml2 linux-headers lua lvm2 lz4 nodejs nss oath-toolkit libldap openssl procps-ng python python-prettytable python-sphinx rabbitmq-c readline ninja snappy sqlite3 userspace-rcu xfsprogs xmlstarlet yarn yasm cryptsetup e2fsprogs parted util-linux xfsprogs fuse snappy lz4 lvm2 xmlstarlet python-coverage python-flake8 python-nodeenv python-nose python-pytest python-tox "
+
+PKG_VER=16.2.9
+SOURCE="https://download.ceph.com/tarballs/ceph_$PKG_VER.orig.tar.gz"
+
+ADDITIONAL="
+10-musl-fixes.patch
+11-dump_time_header_impl.patch
+11-parse_rfc1123_alt.patch
+11-s3_expiration_header.patch
+12-package.json-resolutions.patch
+20-pci.patch
+32-PurgeQueue.cc-cast.patch
+32-upstream32bit.patch
+32-upstream32bitcleanup.patch
+35-fix_ErasureCodeShec.patch
+37-fix_tests.patch
+42-no-virtualenvs.patch
+43-LogClock.h.patch
+44-aarch64-erasure.patch
+44-cmake-buildtype.patch
+44-missing-include.patch
+44-staticcast.patch
+ceph.confd
+ceph.initd
+"
+
+_py3_sitelib() {
+ python -c "import site; print(site.getsitepackages()[0])"
+}
+
+prepare() {
+ apply_patches
+
+ # delete bundled boost as >300mb and using system boost
+ rm -rf src/boost
+}
+
+build() {
+ export CEPH_BUILD_VIRTUALENV="$BUILD_ROOT"
+
+ # builders keep failing when -jN == nproc
+ export MAKEFLAGS="$MAKEFLAGS -j$((JOBS<12 ? JOBS : 12))"
+
+ # use alternate registry as original can timeout for arm32bit
+ export NPM_REGISTRY=https://registry.npmjs.org
+
+ cmake -B build -G Ninja \
+ -DCMAKE_BUILD_TYPE=MinSizeRel \
+ -DLUA_LIBRARIES=/usr/lib/liblua.so \
+ -DALLOCATOR=libc \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_INSTALL_LOCALSTATEDIR=/var \
+ -DCMAKE_INSTALL_SYSCONFDIR=/etc \
+ -DWITH_REENTRANT_STRSIGNAL=ON \
+ -DWITH_THREAD_SAFE_RES_QUERY=ON \
+ -DWITH_MANPAGE=ON \
+ -DWITH_SYSTEM_BOOST=ON \
+ -DWITH_SYSTEM_NPM=ON \
+ -DWITH_LTTNG=OFF \
+ -DWITH_RDMA=OFF \
+ -DWITH_SYSTEMD=OFF \
+ -DWITH_SPDK=OFF \
+ -DWITH_BABELTRACE=OFF \
+ -DWITH_RADOSGW_AMQP_ENDPOINT=OFF \
+ -DWITH_TESTS=OFF
+ mkdir -p build/src/pybind/mgr/dashboard/cypress
+ cmake --build build
+
+}
+
+package() {
+ # free up some space before install
+ rm -rf build/src/pybind/mgr/dashboard/cypress
+ rm -rf src/pybind/mgr/dashboard/frontend/node_modules
+
+ DESTDIR="$PKG_DEST" cmake --install build
+ # yarn creates an empty usr/local/bin
+ rm -rf "${pkgdir:?}"/usr/local
+
+ # fix /usr permission
+ chmod 755 "$PKG_DEST/usr"
+
+ # remove dashboard angular app source
+ rm -rf "$PKG_DEST"/usr/share/ceph/mgr/dashboard/frontend/src
+
+ # remove the upstream init file and put in openrc ones
+ rm -f "$PKG_DEST"/etc/init.d/ceph
+ install -D -m 755 "$BUILD_ROOT"/"ceph".initd "$PKG_DEST"/etc/init.d/ceph
+ install -D -m 644 "$BUILD_ROOT"/"ceph".confd "$PKG_DEST"/etc/conf.d/ceph
+
+ # move mount.* binaries to /sbin
+ mkdir -p "$PKG_DEST"/sbin
+ mv "$PKG_DEST"/usr/sbin/mount.* "$PKG_DEST"/sbin
+
+ install -m 644 -D src/etc-rbdmap "$PKG_DEST"/etc/ceph/rbdmap
+ install -m 644 -D src/logrotate.conf "$PKG_DEST"/etc/logrotate.d/ceph
+ install -m 644 -D etc/sysctl/90-ceph-osd.conf "$PKG_DEST"/etc/sysctl.d/90-ceph-osd.conf
+
+ # udev rules
+ install -m 644 -D udev/50-rbd.rules "$PKG_DEST"/etc/udev/rules.d/50-rbd.rules
+ # sudoers.d
+ install -m 600 -D sudoers.d/ceph-smartctl "$PKG_DEST"/etc/sudoers.d/ceph-smartctl
+
+ # delete systemd related stuff
+ rm "$PKG_DEST"/usr/sbin/ceph-volume-systemd
+
+ # move docs to docs
+ mkdir -p "$PKG_DEST"/usr/share/doc/ceph/dashboard
+ mv "$PKG_DEST"/usr/share/ceph/mgr/dashboard/*.rst "$PKG_DEST"/usr/share/doc/ceph/dashboard/
+ mv "$PKG_DEST"/usr/share/ceph/mgr/cephadm/HACKING.rst "$PKG_DEST"/usr/share/doc/ceph/cephadm-HACKING.rst
+}
+
+# TODO split this into other packages
diff --git a/repo/clucene/clucene-core-2.3.3.4-install_contribs_lib.patch b/repo/clucene/clucene-core-2.3.3.4-install_contribs_lib.patch
new file mode 100644
index 0000000..8fbb3c7
--- /dev/null
+++ b/repo/clucene/clucene-core-2.3.3.4-install_contribs_lib.patch
@@ -0,0 +1,42 @@
+diff -NaurpBb clucene-core-2.3.3.4/CMakeLists.txt clucene-core-2.3.3.4-mod/CMakeLists.txt
+--- clucene-core-2.3.3.4/CMakeLists.txt 2011-03-17 03:21:07.000000000 +0300
++++ clucene-core-2.3.3.4-mod/CMakeLists.txt 2011-08-16 16:56:55.968268152 +0400
+@@ -163,7 +163,7 @@ IF ( BUILD_CONTRIBS )
+ SET(BUILD_CONTRIBS_LIB 1)
+ ENDIF ( BUILD_CONTRIBS )
+ IF ( BUILD_CONTRIBS_LIB )
+- ADD_SUBDIRECTORY (src/contribs-lib EXCLUDE_FROM_ALL)
++ ADD_SUBDIRECTORY (src/contribs-lib)
+ ENDIF ( BUILD_CONTRIBS_LIB )
+
+
+diff -NaurpBb clucene-core-2.3.3.4/src/contribs-lib/CMakeLists.txt clucene-core-2.3.3.4-mod/src/contribs-lib/CMakeLists.txt
+--- clucene-core-2.3.3.4/src/contribs-lib/CMakeLists.txt 2011-03-17 03:21:07.000000000 +0300
++++ clucene-core-2.3.3.4-mod/src/contribs-lib/CMakeLists.txt 2011-08-16 17:14:13.499275499 +0400
+@@ -106,9 +106,26 @@ add_library(clucene-contribs-lib SHARED
+ )
+ TARGET_LINK_LIBRARIES(clucene-contribs-lib ${clucene_contrib_extra_libs})
+
++#install public headers.
++FOREACH(file ${HEADERS})
++ get_filename_component(apath ${file} PATH)
++ get_filename_component(aname ${file} NAME)
++ file(RELATIVE_PATH relpath ${CMAKE_SOURCE_DIR}/src/contribs-lib ${apath})
++ IF ( NOT aname MATCHES "^_.*" )
++ install(FILES ${file}
++ DESTINATION include/${relpath}
++ COMPONENT development)
++ ENDIF ( NOT aname MATCHES "^_.*" )
++ENDFOREACH(file)
++
+ #set properties on the libraries
+ SET_TARGET_PROPERTIES(clucene-contribs-lib PROPERTIES
+ VERSION ${CLUCENE_VERSION}
+ SOVERSION ${CLUCENE_SOVERSION}
+ COMPILE_DEFINITIONS_DEBUG _DEBUG
+ )
++
++#and install library
++install(TARGETS clucene-contribs-lib
++ DESTINATION ${LIB_DESTINATION}
++ COMPONENT runtime )
diff --git a/repo/clucene/clucene-core-2.3.3.4-pkgconfig.patch b/repo/clucene/clucene-core-2.3.3.4-pkgconfig.patch
new file mode 100644
index 0000000..aff20d7
--- /dev/null
+++ b/repo/clucene/clucene-core-2.3.3.4-pkgconfig.patch
@@ -0,0 +1,12 @@
+diff -up clucene-core-2.3.3.4/src/core/libclucene-core.pc.cmake.pkgconfig_sys_includes clucene-core-2.3.3.4/src/core/libclucene-core.pc.cmake
+--- clucene-core-2.3.3.4/src/core/libclucene-core.pc.cmake.pkgconfig_sys_includes 2011-03-16 19:21:07.000000000 -0500
++++ clucene-core-2.3.3.4/src/core/libclucene-core.pc.cmake 2012-03-19 09:01:00.689263954 -0500
+@@ -6,6 +6,6 @@ includedir=${prefix}/include:${prefix}/i
+ Name: libclucene
+ Description: CLucene - a C++ search engine, ported from the popular Apache Lucene
+ Version: @CLUCENE_VERSION_MAJOR@.@CLUCENE_VERSION_MINOR@.@CLUCENE_VERSION_REVISION@.@CLUCENE_VERSION_PATCH@
+-Libs: -L${prefix}/@LIB_DESTINATION@/ -lclucene-core
+-Cflags: -I${prefix}/include -I${prefix}/include/CLucene/ext
++Libs: -L${prefix}/@LIB_DESTINATION@/ -lclucene-core -lclucene-shared
++Cflags: -I${prefix}/include -I${prefix}/include/CLucene/ext -I@LUCENE_SYS_INCLUDES@
+ ~
diff --git a/repo/clucene/clucene.xibuild b/repo/clucene/clucene.xibuild
new file mode 100644
index 0000000..2d57c38
--- /dev/null
+++ b/repo/clucene/clucene.xibuild
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+NAME="clucene"
+DESC="A C++ port of Lucene"
+
+MAKEDEPS="cmake zlib boost ninja"
+
+PKG_VER=2.3.3.4
+SOURCE="https://downloads.sourceforge.net/clucene/clucene-core-$PKG_VER.tar.gz"
+
+ADDITIONAL="
+clucene-core-2.3.3.4-install_contribs_lib.patch
+clucene-core-2.3.3.4-pkgconfig.patch
+"
+
+prepare () {
+ apply_patches
+}
+
+build() {
+ cmake -B build -G Ninja \
+ -DCMAKE_BUILD_TYPE=MinSizeRel \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DBUILD_CONTRIBS_LIB=ON \
+ -DLIB_DESTINATION=/usr/lib \
+ -DLUCENE_SYS_INCLUDES=/usr/lib \
+ .
+ cmake --build build
+}
+
+check() {
+ cd build
+ CTEST_OUTPUT_ON_FAILURE=TRUE ctest
+ cd $BUILD_ROOT
+}
+
+package() {
+ DESTDIR="$PKG_DEST" cmake --install build
+ rm -r "$PKG_DEST"/usr/lib/CLuceneConfig.cmake
+}
diff --git a/repo/cppunit/cppunit.xibuild b/repo/cppunit/cppunit.xibuild
new file mode 100644
index 0000000..99260b3
--- /dev/null
+++ b/repo/cppunit/cppunit.xibuild
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+NAME="cppunit"
+DESC="C++ unit testing framework"
+
+MAKEDEPS=""
+
+PKG_VER=1.15.1
+SOURCE="https://dev-www.libreoffice.org/src/cppunit-$PKG_VER.tar.gz"
+
+build() {
+ LIBS="-ldl" ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var
+ make
+}
+
+check() {
+ make check
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/cryptsetup/cryptsetup.xibuild b/repo/cryptsetup/cryptsetup.xibuild
new file mode 100644
index 0000000..a4b989d
--- /dev/null
+++ b/repo/cryptsetup/cryptsetup.xibuild
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+NAME="cryptsetup"
+DESC="Userspace setup tool for transparent encryption of block devices using the Linux 2.6 cryptoapi"
+
+MAKEDEPS="make argon2 openssl"
+DEPS="util-linux musl popt device-mapper "
+
+PKG_VER=2.4.3
+SOURCE="https://www.kernel.org/pub/linux/utils/cryptsetup/v${PKG_VER%.*}/cryptsetup-$PKG_VER.tar.gz"
+ADDITIONAL="dmcrypt.initd dmcrypt.confd "
+
+build () {
+ ./configure \
+ --prefix=/usr \
+ --bindir=/usr/bin \
+ --sysconfdir=/etc \
+ --disable-static \
+ --enable-libargon2 \
+ --with-crypto_backend=openssl \
+ --disable-external-tokens \
+ --disable-ssh-token
+
+ make
+}
+
+package () {
+ make DESTDIR=$PKG_DEST install
+ install -Dm644 "$srcdir"/dmcrypt.confd "$PKG_DEST"/etc/conf.d/dmcrypt
+ install -Dm755 "$srcdir"/dmcrypt.initd "$PKG_DEST"/etc/init.d/dmcrypt
+
+ mkdir -p "$PKG_DEST"/usr/share/doc/cryptsetup/
+ install -m644 README.md FAQ docs/v$PKG_VER-ReleaseNotes \
+ "$PKG_DEST"/usr/share/doc/cryptsetup/
+
+}
diff --git a/repo/cryptsetup/dmcrypt.confd b/repo/cryptsetup/dmcrypt.confd
new file mode 100644
index 0000000..642ff08
--- /dev/null
+++ b/repo/cryptsetup/dmcrypt.confd
@@ -0,0 +1,111 @@
+# /etc/conf.d/dmcrypt
+
+# For people who run dmcrypt on top of some other layer (like raid),
+# use rc_need to specify that requirement. See the runscript(8) man
+# page for more information.
+
+#--------------------
+# Instructions
+#--------------------
+
+# Note regarding the syntax of this file. This file is *almost* bash,
+# but each line is evaluated separately. Separate swaps/targets can be
+# specified. The init-script which reads this file assumes that a
+# swap= or target= line starts a new section, similar to lilo or grub
+# configuration.
+
+# Note when using gpg keys and /usr on a separate partition, you will
+# have to copy /usr/bin/gpg to /bin/gpg so that it will work properly
+# and ensure that gpg has been compiled statically.
+# See http://bugs.gentoo.org/90482 for more information.
+
+# Note that the init-script which reads this file detects whether your
+# partition is LUKS or not. No mkfs is run unless you specify a makefs
+# option.
+
+# Global options:
+#----------------
+
+# How long to wait for each timeout (in seconds).
+dmcrypt_key_timeout=1
+
+# Max number of checks to perform (see dmcrypt_key_timeout).
+#dmcrypt_max_timeout=300
+
+# Number of password retries.
+dmcrypt_retries=5
+
+# Arguments:
+#-----------
+# target=<name> == Mapping name for partition.
+# swap=<name> == Mapping name for swap partition.
+# source='<dev>' == Real device for partition.
+# Note: You can (and should) specify a tag like UUID
+# for blkid (see -t option). This is safer than using
+# the full path to the device.
+# key='</path/to/keyfile>[:<mode>]' == Fullpath from / or from inside removable media.
+# remdev='<dev>' == Device that will be assigned to removable media.
+# gpg_options='<opts>' == Default are --quiet --decrypt
+# options='<opts>' == cryptsetup, for LUKS you can only use --readonly
+# loop_file='<file>' == Loopback file.
+# Note: If you omit $source, then a free loopback will
+# be looked up automatically.
+# pre_mount='cmds' == commands to execute before mounting partition.
+# post_mount='cmds' == commands to execute after mounting partition.
+#-----------
+# Supported Modes
+# gpg == decrypt and pipe key into cryptsetup.
+# Note: new-line character must not be part of key.
+# Command to erase \n char: 'cat key | tr -d '\n' > cleanKey'
+
+#--------------------
+# dm-crypt examples
+#--------------------
+
+## swap
+# Swap partitions. These should come first so that no keys make their
+# way into unencrypted swap.
+# If no options are given, they will default to: -c aes -h sha1 -d /dev/urandom
+# If no makefs is given then mkswap will be assumed
+#swap=crypt-swap
+#source='/dev/hda2'
+
+## /home with passphrase
+#target=crypt-home
+#source='/dev/hda5'
+
+## /home with regular keyfile
+#target=crypt-home
+#source='/dev/hda5'
+#key='/full/path/to/homekey'
+
+## /home with gpg protected key
+#target=crypt-home
+#source='/dev/hda5'
+#key='/full/path/to/homekey:gpg'
+
+## /home with regular keyfile on removable media(such as usb-stick)
+#target=crypt-home
+#source='/dev/hda5'
+#key='/full/path/to/homekey'
+#remdev='/dev/sda1'
+
+## /home with gpg protected key on removable media(such as usb-stick)
+#target=crypt-home
+#source='/dev/hda5'
+#key='/full/path/to/homekey:gpg'
+#remdev='/dev/sda1'
+
+## /tmp with regular keyfile
+#target=crypt-tmp
+#source='/dev/hda6'
+#key='/full/path/to/tmpkey'
+#pre_mount='/sbin/mkreiserfs -f -f ${dev}'
+#post_mount='chown root:root ${mount_point}; chmod 1777 ${mount_point}'
+
+## Loopback file example
+#target='crypt-loop-home'
+#source='/dev/loop0'
+#loop_file='/mnt/crypt/home'
+
+# The file must be terminated by a newline. Or leave this comment last.
diff --git a/repo/cryptsetup/dmcrypt.initd b/repo/cryptsetup/dmcrypt.initd
new file mode 100644
index 0000000..85c77f7
--- /dev/null
+++ b/repo/cryptsetup/dmcrypt.initd
@@ -0,0 +1,339 @@
+#!/sbin/openrc-run
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+depend() {
+ before checkfs fsck
+
+ if grep -qs ^swap= "${conf_file}" ; then
+ before swap
+ fi
+}
+
+# We support multiple dmcrypt instances based on $SVCNAME
+conf_file="/etc/conf.d/${SVCNAME}"
+
+# Get splash helpers if available.
+if [ -e /sbin/splash-functions.sh ] ; then
+ . /sbin/splash-functions.sh
+fi
+
+# Setup mappings for an individual target/swap
+# Note: This relies on variables localized in the main body below.
+dm_crypt_execute() {
+ local dev ret mode foo
+
+ if [ -z "${target}" -a -z "${swap}" ] ; then
+ return
+ fi
+
+ # Set up default values.
+ : ${dmcrypt_key_timeout:=1}
+ : ${dmcrypt_max_timeout:=300}
+ : ${dmcrypt_retries:=5}
+
+ # Handle automatic look up of the source path.
+ if [ -z "${source}" -a -n "${loop_file}" ] ; then
+ source=$(losetup --show -f "${loop_file}")
+ fi
+ case ${source} in
+ *=*)
+ source="$(findfs ${source})"
+ ;;
+ esac
+ if [ -z "${source}" ] || [ ! -e "${source}" ] ; then
+ ewarn "source \"${source}\" for ${target} missing, skipping..."
+ return
+ fi
+
+ if [ -n "${target}" ] ; then
+ # let user set options, otherwise leave empty
+ : ${options:=' '}
+ elif [ -n "${swap}" ] ; then
+ if cryptsetup isLuks ${source} 2>/dev/null ; then
+ ewarn "The swap you have defined is a LUKS partition. Aborting crypt-swap setup."
+ return
+ fi
+ target=${swap}
+ # swap contents do not need to be preserved between boots, luks not required.
+ # suspend2 users should have initramfs's init handling their swap partition either way.
+ : ${options:='-c aes -h sha1 -d /dev/urandom'}
+ : ${pre_mount:='mkswap ${dev}'}
+ fi
+
+ if [ -n "${loop_file}" ] ; then
+ dev="/dev/mapper/${target}"
+ ebegin " Setting up loop device ${source}"
+ losetup ${source} ${loop_file}
+ fi
+
+ # cryptsetup:
+ # open <device> <name> # <device> is $source
+ # create <name> <device> # <name> is $target
+ local arg1="create" arg2="${target}" arg3="${source}"
+ if cryptsetup isLuks ${source} 2>/dev/null ; then
+ arg1="open"
+ arg2="${source}"
+ arg3="${target}"
+ fi
+
+ # Older versions reported:
+ # ${target} is active:
+ # Newer versions report:
+ # ${target} is active[ and is in use.]
+ if cryptsetup status ${target} | egrep -q ' is active' ; then
+ einfo "dm-crypt mapping ${target} is already configured"
+ return
+ fi
+ splash svc_input_begin ${SVCNAME} >/dev/null 2>&1
+
+ # Handle keys
+ if [ -n "${key}" ] ; then
+ read_abort() {
+ # some colors
+ local ans savetty resettty
+ [ -z "${NORMAL}" ] && eval $(eval_ecolors)
+ einfon " $1? (${WARN}yes${NORMAL}/${GOOD}No${NORMAL}) "
+ shift
+ # This is ugly as s**t. But POSIX doesn't provide `read -t`, so
+ # we end up having to implement our own crap with stty/etc...
+ savetty=$(stty -g)
+ resettty='stty ${savetty}; trap - EXIT HUP INT TERM'
+ trap 'eval "${resettty}"' EXIT HUP INT TERM
+ stty -icanon
+ stty min 0 time "$(( $2 * 10 ))"
+ ans=$(dd count=1 bs=1 2>/dev/null) || ans=''
+ eval "${resettty}"
+ if [ -z "${ans}" ] ; then
+ printf '\r'
+ else
+ echo
+ fi
+ case ${ans} in
+ [yY]) return 0;;
+ *) return 1;;
+ esac
+ }
+
+ # Notes: sed not used to avoid case where /usr partition is encrypted.
+ mode=${key##*:} && ( [ "${mode}" = "${key}" ] || [ -z "${mode}" ] ) && mode=reg
+ key=${key%:*}
+ case "${mode}" in
+ gpg|reg)
+ # handle key on removable device
+ if [ -n "${remdev}" ] ; then
+ # temp directory to mount removable device
+ local mntrem="${RC_SVCDIR}/dm-crypt-remdev.$$"
+ if [ ! -d "${mntrem}" ] ; then
+ if ! mkdir -p "${mntrem}" ; then
+ ewarn "${source} will not be decrypted ..."
+ einfo "Reason: Unable to create temporary mount point '${mntrem}'"
+ return
+ fi
+ fi
+ i=0
+ einfo "Please insert removable device for ${target}"
+ while [ ${i} -lt ${dmcrypt_max_timeout} ] ; do
+ foo=""
+ if mount -n -o ro "${remdev}" "${mntrem}" 2>/dev/null >/dev/null ; then
+ # keyfile exists?
+ if [ ! -e "${mntrem}${key}" ] ; then
+ umount -n "${mntrem}"
+ rmdir "${mntrem}"
+ einfo "Cannot find ${key} on removable media."
+ read_abort "Abort" ${dmcrypt_key_timeout} && return
+ else
+ key="${mntrem}${key}"
+ break
+ fi
+ else
+ [ -e "${remdev}" ] \
+ && foo="mount failed" \
+ || foo="mount source not found"
+ fi
+ : $((i += 1))
+ read_abort "Stop waiting after $i attempts (${foo})" -t 1 && return
+ done
+ else # keyfile ! on removable device
+ if [ ! -e "${key}" ] ; then
+ ewarn "${source} will not be decrypted ..."
+ einfo "Reason: keyfile ${key} does not exist."
+ return
+ fi
+ fi
+ ;;
+ *)
+ ewarn "${source} will not be decrypted ..."
+ einfo "Reason: mode ${mode} is invalid."
+ return
+ ;;
+ esac
+ else
+ mode=none
+ fi
+ ebegin " ${target} using: ${options} ${arg1} ${arg2} ${arg3}"
+ if [ "${mode}" = "gpg" ] ; then
+ : ${gpg_options:='-q -d'}
+ # gpg available ?
+ if command -v gpg >/dev/null ; then
+ i=0
+ while [ ${i} -lt ${dmcrypt_retries} ] ; do
+ # paranoid, don't store key in a variable, pipe it so it stays very little in ram unprotected.
+ # save stdin stdout stderr "values"
+ timeout ${dmcrypt_max_timeout} gpg ${gpg_options} ${key} 2>/dev/null | \
+ cryptsetup --key-file - ${options} ${arg1} ${arg2} ${arg3}
+ ret=$?
+ # The timeout command exits 124 when it times out.
+ [ ${ret} -eq 0 -o ${ret} -eq 124 ] && break
+ : $(( i += 1 ))
+ done
+ eend ${ret} "failure running cryptsetup"
+ else
+ ewarn "${source} will not be decrypted ..."
+ einfo "Reason: cannot find gpg application."
+ einfo "You have to install gnupg first."
+ einfo "If you have /usr on its own partition, try copying gpg to /bin ."
+ fi
+ else
+ if [ "${mode}" = "reg" ] ; then
+ cryptsetup ${options} -d ${key} ${arg1} ${arg2} ${arg3}
+ ret=$?
+ eend ${ret} "failure running cryptsetup"
+ else
+ cryptsetup ${options} ${arg1} ${arg2} ${arg3}
+ ret=$?
+ eend ${ret} "failure running cryptsetup"
+ fi
+ fi
+ if [ -d "${mntrem}" ] ; then
+ umount -n ${mntrem} 2>/dev/null >/dev/null
+ rmdir ${mntrem} 2>/dev/null >/dev/null
+ fi
+ splash svc_input_end ${SVCNAME} >/dev/null 2>&1
+
+ if [ ${ret} -ne 0 ] ; then
+ cryptfs_status=1
+ else
+ if [ -n "${pre_mount}" ] ; then
+ dev="/dev/mapper/${target}"
+ eval ebegin \"" pre_mount: ${pre_mount}"\"
+ eval "${pre_mount}" > /dev/null
+ ewend $? || cryptfs_status=1
+ fi
+ fi
+}
+
+# Lookup optional bootparams
+get_bootparam_val() {
+ # We're given something like:
+ # foo=bar=cow
+ # Return the "bar=cow" part.
+ case $1 in
+ *=*)
+ echo "${1#*=}"
+ ;;
+ esac
+}
+
+start() {
+ local header=true cryptfs_status=0
+ local gpg_options key loop_file target targetline options pre_mount post_mount source swap remdev
+
+ local x
+ for x in $(cat /proc/cmdline) ; do
+ case "${x}" in
+ key_timeout=*)
+ dmcrypt_key_timeout=$(get_bootparam_val "${x}")
+ ;;
+ esac
+ done
+
+ while read targetline <&3 ; do
+ case ${targetline} in
+ # skip comments and blank lines
+ ""|"#"*) continue ;;
+ # skip service-specific openrc configs #377927
+ rc_*) continue ;;
+ esac
+
+ ${header} && ebegin "Setting up dm-crypt mappings"
+ header=false
+
+ # check for the start of a new target/swap
+ case ${targetline} in
+ target=*|swap=*)
+ # If we have a target queued up, then execute it
+ dm_crypt_execute
+
+ # Prepare for the next target/swap by resetting variables
+ unset gpg_options key loop_file target options pre_mount post_mount source swap remdev
+ ;;
+
+ gpg_options=*|remdev=*|key=*|loop_file=*|options=*|pre_mount=*|post_mount=*|source=*)
+ if [ -z "${target}${swap}" ] ; then
+ ewarn "Ignoring setting outside target/swap section: ${targetline}"
+ continue
+ fi
+ ;;
+
+ dmcrypt_*=*)
+ # ignore global options
+ continue
+ ;;
+
+ *)
+ ewarn "Skipping invalid line in ${conf_file}: ${targetline}"
+ ;;
+ esac
+
+ # Queue this setting for the next call to dm_crypt_execute
+ eval "${targetline}"
+ done 3< ${conf_file}
+
+ # If we have a target queued up, then execute it
+ dm_crypt_execute
+
+ ewend ${cryptfs_status} "Failed to setup dm-crypt devices"
+}
+
+stop() {
+ local line header
+
+ # Break down all mappings
+ header=true
+ egrep "^(target|swap)=" ${conf_file} | \
+ while read line ; do
+ ${header} && einfo "Removing dm-crypt mappings"
+ header=false
+
+ target= swap=
+ eval ${line}
+
+ [ -n "${swap}" ] && target=${swap}
+ if [ -z "${target}" ] ; then
+ ewarn "invalid line in ${conf_file}: ${line}"
+ continue
+ fi
+
+ ebegin " ${target}"
+ cryptsetup remove ${target}
+ eend $?
+ done
+
+ # Break down loop devices
+ header=true
+ grep '^source=./dev/loop' ${conf_file} | \
+ while read line ; do
+ ${header} && einfo "Detaching dm-crypt loop devices"
+ header=false
+
+ source=
+ eval ${line}
+
+ ebegin " ${source}"
+ losetup -d "${source}"
+ eend $?
+ done
+
+ return 0
+}
diff --git a/repo/cunit/cunit.xibuild b/repo/cunit/cunit.xibuild
new file mode 100644
index 0000000..3b4b04f
--- /dev/null
+++ b/repo/cunit/cunit.xibuild
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+NAME="cunit"
+DESC="Automated testing framework for C"
+
+MAKEDEPS=" automake autoconf libtool bash"
+
+PKG_VER=2.1-3
+SOURCE="https://downloads.sourceforge.net/project/cunit/CUnit/$PKG_VER/CUnit-$PKG_VER.tar.bz2"
+
+ADDITIONAL="
+path-makefile.patch
+"
+
+prepare() {
+ apply_patches
+
+ libtoolize --force --copy
+ aclocal
+ autoheader
+ automake --add-missing --include-deps --copy
+ autoconf
+ sed -i "s/@VERSION@-@RELEASE@/$PKG_VER/" cunit.pc.in
+}
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --includedir=/usr/include \
+ --datarootdir=/usr/share \
+ --libdir=/usr/lib \
+ --enable-debug \
+ --enable-examples \
+ --enable-automated \
+ --enable-basic \
+ --enable-test \
+ --disable-static
+ make
+}
+
+check() {
+ make check
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/cunit/path-makefile.patch b/repo/cunit/path-makefile.patch
new file mode 100644
index 0000000..a55bcd1
--- /dev/null
+++ b/repo/cunit/path-makefile.patch
@@ -0,0 +1,31 @@
+diff --git a/doc/Makefile.am b/doc/Makefile.am
+index a864d46..1c15fc0 100644
+--- a/doc/Makefile.am
++++ b/doc/Makefile.am
+@@ -1,6 +1,6 @@
+ ## Process this file with automake to produce Makefile.in
+
+-docdir = $(prefix)/doc/@PACKAGE@
++docdir = $(datarootdir)/doc/@PACKAGE@
+
+ doc_DATA = \
+ CUnit_doc.css \
+@@ -13,4 +13,4 @@ doc_DATA = \
+ test_registry.html \
+ writing_tests.html
+
+-SUBDIRS = headers
+\ No newline at end of file
++SUBDIRS = headers
+diff --git a/doc/headers/Makefile.am b/doc/headers/Makefile.am
+index 9926e8b..3c5f1ba 100644
+--- a/doc/headers/Makefile.am
++++ b/doc/headers/Makefile.am
+@@ -1,6 +1,6 @@
+ ## Process this file with automake to produce Makefile.in
+
+-dochdrdir = $(prefix)/doc/@PACKAGE@/headers
++dochdrdir = $(includedir)/@PACKAGE@/headers
+
+ INCLUDE_FILES = \
+ Automated.h \
diff --git a/repo/cython/cython-test-fix.patch b/repo/cython/cython-test-fix.patch
new file mode 100644
index 0000000..58ddce1
--- /dev/null
+++ b/repo/cython/cython-test-fix.patch
@@ -0,0 +1,23 @@
+From 9bc0abecb3a08ea13313200a51f1ee26a65e5be3 Mon Sep 17 00:00:00 2001
+From: Stefan Behnel <stefan_ml@behnel.de>
+Date: Sat, 3 Apr 2021 08:23:44 +0200
+Subject: [PATCH] Make a helper function in a C++ test correctly propagate
+ exceptions so that it won't have to spit out compiler warnings.
+
+---
+ tests/run/cpp_stl_conversion.pyx | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/run/cpp_stl_conversion.pyx b/tests/run/cpp_stl_conversion.pyx
+index 5278c677ae..ccebc700ee 100644
+--- a/tests/run/cpp_stl_conversion.pyx
++++ b/tests/run/cpp_stl_conversion.pyx
+@@ -15,7 +15,7 @@ py_set = set
+ py_xrange = xrange
+ py_unicode = unicode
+
+-cdef string add_strings(string a, string b):
++cdef string add_strings(string a, string b) except *:
+ return a + b
+
+ def normalize(bytes b):
diff --git a/repo/cython/cython.xibuild b/repo/cython/cython.xibuild
new file mode 100644
index 0000000..aebe286
--- /dev/null
+++ b/repo/cython/cython.xibuild
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+NAME="cython"
+DESC="Cython is an optimising static compiler for both the Python & the extended Cython programming languages."
+
+MAKEDEPS="python"
+
+PKG_VER=0.29.24
+SOURCE="https://github.com/cython/cython/archive/$PKG_VER.tar.gz"
+
+ADDITIONAL="
+cython-test-fix.patch
+"
+
+prepare () {
+ apply_patches
+}
+
+build() {
+ python3 setup.py build
+}
+
+package() {
+ python3 setup.py install --prefix=/usr --root="$PKG_DEST"
+
+ install -Dm 644 LICENSE.txt "$PKG_DEST/usr/share/licenses/cython/license"
+ install -Dm 644 README.rst "$PKG_DEST/usr/share/doc/cython/readme.rst"
+}
+
diff --git a/repo/extra-cmake-modules/extra-cmake-modules.xibuild b/repo/extra-cmake-modules/extra-cmake-modules.xibuild
new file mode 100644
index 0000000..1c58956
--- /dev/null
+++ b/repo/extra-cmake-modules/extra-cmake-modules.xibuild
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+NAME="extra-cmake-modules"
+DESC="Extra CMake modules"
+
+MAKEDEPS="python-sphinx ninja python-docutils python-pygments python-babel python-pytz python-jinja python-packaging python-imagesize "
+
+PKG_VER=5.93.0
+SOURCE="https://download.kde.org/stable/frameworks/${PKG_VER%.*}/extra-cmake-modules-$PKG_VER.tar.xz"
+
+build() {
+ cmake -B build -G Ninja \
+ -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DSphinx_BUILD_EXECUTABLE=/usr/bin/sphinx-build
+ cmake --build build
+}
+
+package() {
+ DESTDIR="$PKG_DEST" cmake --build build --target install
+}
+
diff --git a/repo/fcgi/fcgi.xibuild b/repo/fcgi/fcgi.xibuild
new file mode 100644
index 0000000..f022411
--- /dev/null
+++ b/repo/fcgi/fcgi.xibuild
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+NAME="fcgi"
+DESC="FAST CGI(fcgi) is a language independent, high performant extension to CGI"
+
+MAKEDEPS="libtool autoconf automake"
+
+PKG_VER=2.4.2
+SOURCE="https://github.com/FastCGI-Archives/fcgi2/archive/$PKG_VER.tar.gz"
+
+build() {
+ export LIBS="-lm"
+ ./autogen.sh
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --enable-shared
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
diff --git a/repo/findutils/findutils.xibuild b/repo/findutils/findutils.xibuild
index 1dbc9d3..73d7660 100644
--- a/repo/findutils/findutils.xibuild
+++ b/repo/findutils/findutils.xibuild
@@ -11,9 +11,11 @@ build () {
make defconfig
make xargs
make find
+ make fmt
}
package () {
install -Dm755 find $PKG_DEST/usr/bin/find
+ install -Dm755 fmt $PKG_DEST/usr/bin/fmt
install -Dm755 xargs $PKG_DEST/usr/bin/xargs
}
diff --git a/repo/font-dejavu/45-dejavu.conf b/repo/font-dejavu/45-dejavu.conf
new file mode 100644
index 0000000..a5c3d9d
--- /dev/null
+++ b/repo/font-dejavu/45-dejavu.conf
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+
+ <alias>
+ <family>DejaVu Sans</family>
+ <default>
+ <family>sans-serif</family>
+ </default>
+ </alias>
+
+ <alias>
+ <family>DejaVu Sans Mono</family>
+ <default>
+ <family>monospace</family>
+ </default>
+ </alias>
+
+ <alias>
+ <family>DejaVu Serif</family>
+ <default>
+ <family>serif</family>
+ </default>
+ </alias>
+
+</fontconfig>
diff --git a/repo/font-dejavu/90-tt-dejavu.conf b/repo/font-dejavu/90-tt-dejavu.conf
new file mode 100644
index 0000000..c722d39
--- /dev/null
+++ b/repo/font-dejavu/90-tt-dejavu.conf
@@ -0,0 +1,228 @@
+<?xml version='1.0'?>
+<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
+<fontconfig>
+
+ <!-- DejaVu Sans -->
+ <match target="font">
+ <test name="force_autohint">
+ <bool>false</bool>
+ </test>
+ <test name="family">
+ <string>DejaVu Sans</string>
+ </test>
+ <edit name="antialias" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hinting" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hintstyle" mode="assign">
+ <const>hintslight</const>
+ </edit>
+ <edit name="autohint" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="force_autohint">
+ <bool>false</bool>
+ </test>
+ <test name="family">
+ <string>DejaVu Sans</string>
+ </test>
+ <test name="pixelsize" compare="less">
+ <double>7.5</double>
+ </test>
+ <edit name="antialias" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hinting" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hintstyle" mode="assign">
+ <const>hintnone</const>
+ </edit>
+ <edit name="autohint" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+ <!-- DejaVu Sans Condensed -->
+ <match target="font">
+ <test name="force_autohint">
+ <bool>false</bool>
+ </test>
+ <test name="family">
+ <string>DejaVu Sans Condensed</string>
+ </test>
+ <edit name="antialias" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hinting" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hintstyle" mode="assign">
+ <const>hintslight</const>
+ </edit>
+ <edit name="autohint" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="force_autohint">
+ <bool>false</bool>
+ </test>
+ <test name="family">
+ <string>DejaVu Sans Condensed</string>
+ </test>
+ <test name="pixelsize" compare="less">
+ <double>7.5</double>
+ </test>
+ <edit name="antialias" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hinting" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hintstyle" mode="assign">
+ <const>hintnone</const>
+ </edit>
+ <edit name="autohint" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+ <!-- DejaVu Sans Mono -->
+ <match target="font">
+ <test name="force_autohint">
+ <bool>false</bool>
+ </test>
+ <test name="family">
+ <string>DejaVu Sans Mono</string>
+ </test>
+ <edit name="antialias" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hinting" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hintstyle" mode="assign">
+ <const>hintslight</const>
+ </edit>
+ <edit name="autohint" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="force_autohint">
+ <bool>false</bool>
+ </test>
+ <test name="family">
+ <string>DejaVu Sans Mono</string>
+ </test>
+ <test name="pixelsize" compare="more">
+ <double>7.5</double>
+ </test>
+ <test name="pixelsize" compare="less">
+ <double>14.5</double>
+ </test>
+ <edit name="antialias" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hinting" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hintstyle" mode="assign">
+ <const>hintfull</const>
+ </edit>
+ <edit name="autohint" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="force_autohint">
+ <bool>false</bool>
+ </test>
+ <test name="family">
+ <string>DejaVu Sans Mono</string>
+ </test>
+ <test name="pixelsize" compare="less">
+ <double>7.5</double>
+ </test>
+ <edit name="antialias" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hinting" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hintstyle" mode="assign">
+ <const>hintnone</const>
+ </edit>
+ <edit name="autohint" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family">
+ <string>DejaVu Sans Mono</string>
+ </test>
+ <test name="pixelsize" compare="less_eq">
+ <double>12.0</double>
+ </test>
+ <edit name="lcd_filter" mode="assign">
+ <const>lcdlegacy</const>
+ </edit>
+ </match>
+
+ <!-- DejaVu Serif -->
+ <match target="font">
+ <test name="force_autohint">
+ <bool>false</bool>
+ </test>
+ <test name="family">
+ <string>DejaVu Serif</string>
+ </test>
+ <edit name="antialias" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hinting" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hintstyle" mode="assign">
+ <const>hintslight</const>
+ </edit>
+ <edit name="autohint" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="force_autohint">
+ <bool>false</bool>
+ </test>
+ <test name="family">
+ <string>DejaVu Serif</string>
+ </test>
+ <test name="pixelsize" compare="less">
+ <double>7.5</double>
+ </test>
+ <edit name="antialias" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hinting" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hintstyle" mode="assign">
+ <const>hintnone</const>
+ </edit>
+ <edit name="autohint" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+</fontconfig>
diff --git a/repo/font-dejavu/font-dejavu.xibuild b/repo/font-dejavu/font-dejavu.xibuild
new file mode 100644
index 0000000..53f1ac7
--- /dev/null
+++ b/repo/font-dejavu/font-dejavu.xibuild
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+NAME="font-dejavu"
+DESC="Font family based on the Bitstream Vera Fonts with a wider range of characters"
+
+MAKEDEPS="font-util"
+
+PKG_VER=2.37
+SOURCE="https://downloads.sourceforge.net/project/dejavu/dejavu/$PKG_VER/dejavu-fonts-ttf-$PKG_VER.tar.bz2"
+
+ADDITIONAL="
+45-dejavu.conf
+90-tt-dejavu.conf
+"
+
+package() {
+ mkdir -p "$PKG_DEST"/usr/share/fonts/ttf-dejavu \
+ "$PKG_DEST"/etc/fonts/conf.avail \
+ "$PKG_DEST"/etc/fonts/conf.d
+
+ install -m644 "$BUILD_ROOT"/dejavu-fonts-ttf-$PKG_VER/ttf/*.ttf \
+ "$BUILD_ROOT"/dejavu-lgc-fonts-ttf-$PKG_VER/ttf/*.ttf \
+ "$PKG_DEST"/usr/share/fonts/ttf-dejavu
+
+ install -m644 "$BUILD_ROOT"/dejavu-fonts-ttf-$PKG_VER/fontconfig/*.conf \
+ "$BUILD_ROOT"/dejavu-lgc-fonts-ttf-$PKG_VER/fontconfig/*.conf \
+ "$PKG_DEST"/etc/fonts/conf.avail
+
+ cd "$PKG_DEST"/etc/fonts/conf.d
+ for j in "$BUILD_ROOT"/*.conf; do
+ install -m644 "$j" "$PKG_DEST"/etc/fonts/conf.avail/
+ ln -sf /etc/fonts/conf.avail/${j##*/}
+ done
+}
+
diff --git a/repo/font-liberation/30-liberation-mono.conf b/repo/font-liberation/30-liberation-mono.conf
new file mode 100644
index 0000000..7cab434
--- /dev/null
+++ b/repo/font-liberation/30-liberation-mono.conf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE fontconfig SYSTEM "../fonts.dtd">
+<fontconfig>
+
+ <!-- Microsoft -->
+ <alias binding="same">
+ <family>Courier New</family>
+ <accept>
+ <family>Liberation Mono</family>
+ </accept>
+ </alias>
+ <alias binding="same">
+ <family>Liberation Mono</family>
+ <default>
+ <family>Courier New</family>
+ </default>
+ </alias>
+
+</fontconfig>
diff --git a/repo/font-liberation/30-liberation-sans.conf b/repo/font-liberation/30-liberation-sans.conf
new file mode 100644
index 0000000..648974a
--- /dev/null
+++ b/repo/font-liberation/30-liberation-sans.conf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE fontconfig SYSTEM "../fonts.dtd">
+<fontconfig>
+
+ <!-- Microsoft -->
+ <alias binding="same">
+ <family>Arial</family>
+ <accept>
+ <family>Liberation Sans</family>
+ </accept>
+ </alias>
+ <alias binding="same">
+ <family>Liberation Sans</family>
+ <default>
+ <family>Arial</family>
+ </default>
+ </alias>
+
+</fontconfig>
diff --git a/repo/font-liberation/30-liberation-serif.conf b/repo/font-liberation/30-liberation-serif.conf
new file mode 100644
index 0000000..dac6a60
--- /dev/null
+++ b/repo/font-liberation/30-liberation-serif.conf
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE fontconfig SYSTEM "../fonts.dtd">
+<fontconfig>
+
+ <!-- Microsoft -->
+ <alias binding="same">
+ <family>Times New Roman</family>
+ <accept>
+ <family>Liberation Serif</family>
+ </accept>
+ </alias>
+ <alias binding="same">
+ <family>Liberation Serif</family>
+ <default>
+ <family>Times New Roman</family>
+ </default>
+ </alias>
+
+</fontconfig>
diff --git a/repo/font-liberation/45-liberation.conf b/repo/font-liberation/45-liberation.conf
new file mode 100644
index 0000000..4c41678
--- /dev/null
+++ b/repo/font-liberation/45-liberation.conf
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+
+ <alias>
+ <family>Liberation Mono</family>
+ <default>
+ <family>monospace</family>
+ </default>
+ </alias>
+
+ <alias>
+ <family>Liberation Sans</family>
+ <default>
+ <family>sans-serif</family>
+ </default>
+ </alias>
+
+ <alias>
+ <family>Liberation Serif</family>
+ <default>
+ <family>serif</family>
+ </default>
+ </alias>
+
+</fontconfig>
diff --git a/repo/font-liberation/90-liberation.conf b/repo/font-liberation/90-liberation.conf
new file mode 100644
index 0000000..6c7736d
--- /dev/null
+++ b/repo/font-liberation/90-liberation.conf
@@ -0,0 +1,191 @@
+<?xml version='1.0'?>
+<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
+<fontconfig>
+
+ <!-- Liberation Mono -->
+ <match target="font">
+ <test name="force_autohint">
+ <bool>false</bool>
+ </test>
+ <test name="family">
+ <string>Liberation Mono</string>
+ </test>
+ <edit name="antialias" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hinting" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hintstyle" mode="assign">
+ <const>hintslight</const>
+ </edit>
+ <edit name="autohint" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="force_autohint">
+ <bool>false</bool>
+ </test>
+ <test name="family">
+ <string>Liberation Mono</string>
+ </test>
+ <test name="pixelsize" compare="more">
+ <double>10.5</double>
+ </test>
+ <test name="pixelsize" compare="less">
+ <double>13.5</double>
+ </test>
+ <edit name="autohint" mode="assign">
+ <bool>false</bool>
+ </edit>
+ <edit name="antialias" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hinting" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hintstyle" mode="assign">
+ <const>hintfull</const>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="force_autohint">
+ <bool>false</bool>
+ </test>
+ <test name="family">
+ <string>Liberation Mono</string>
+ </test>
+ <test name="pixelsize" compare="more">
+ <double>15.5</double>
+ </test>
+ <test name="pixelsize" compare="less">
+ <double>17.5</double>
+ </test>
+ <edit name="autohint" mode="assign">
+ <bool>false</bool>
+ </edit>
+ <edit name="antialias" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hinting" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hintstyle" mode="assign">
+ <const>hintfull</const>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="force_autohint">
+ <bool>false</bool>
+ </test>
+ <test name="family">
+ <string>Liberation Mono</string>
+ </test>
+ <test name="pixelsize" compare="more">
+ <double>19.5</double>
+ </test>
+ <test name="pixelsize" compare="less">
+ <double>22.5</double>
+ </test>
+ <edit name="autohint" mode="assign">
+ <bool>false</bool>
+ </edit>
+ <edit name="antialias" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hinting" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hintstyle" mode="assign">
+ <const>hintfull</const>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="family">
+ <string>Liberation Mono</string>
+ </test>
+ <test name="pixelsize" compare="less_eq">
+ <double>12.0</double>
+ </test>
+ <edit name="lcd_filter" mode="assign">
+ <const>lcdlegacy</const>
+ </edit>
+ </match>
+
+ <!-- Liberation Sans -->
+ <match target="font">
+ <test name="force_autohint">
+ <bool>false</bool>
+ </test>
+ <test name="family">
+ <string>Liberation Sans</string>
+ </test>
+ <edit name="antialias" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hinting" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hintstyle" mode="assign">
+ <const>hintslight</const>
+ </edit>
+ <edit name="autohint" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+ <match target="font">
+ <test name="force_autohint">
+ <bool>false</bool>
+ </test>
+ <test name="family">
+ <string>Liberation Sans</string>
+ </test>
+ <test name="pixelsize" compare="less">
+ <double>12.5</double>
+ </test>
+ <edit name="autohint" mode="assign">
+ <bool>false</bool>
+ </edit>
+ <edit name="antialias" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hinting" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hintstyle" mode="assign">
+ <const>hintfull</const>
+ </edit>
+ <edit name="lcd_filter" mode="assign">
+ <const>lcdlegacy</const>
+ </edit>
+ </match>
+
+ <!-- Liberation Serif -->
+ <match target="font">
+ <test name="force_autohint">
+ <bool>false</bool>
+ </test>
+ <test name="family">
+ <string>Liberation Serif</string>
+ </test>
+ <edit name="antialias" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hinting" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hintstyle" mode="assign">
+ <const>hintslight</const>
+ </edit>
+ <edit name="autohint" mode="assign">
+ <bool>false</bool>
+ </edit>
+ </match>
+
+</fontconfig>
diff --git a/repo/font-liberation/font-liberation.xibuild b/repo/font-liberation/font-liberation.xibuild
new file mode 100644
index 0000000..b9921ec
--- /dev/null
+++ b/repo/font-liberation/font-liberation.xibuild
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+NAME="font-liberation"
+DESC="Fonts to replace commonly used Microsoft Windows fonts"
+
+MAKEDEPS=""
+
+PKG_VER=2.1.5
+SOURCE="https://github.com/liberationfonts/liberation-fonts/files/7261482/liberation-fonts-ttf-$PKG_VER.tar.gz"
+
+ADDITIONAL="
+30-liberation-mono.conf
+30-liberation-sans.conf
+30-liberation-serif.conf
+45-liberation.conf
+90-liberation.conf
+"
+
+package() {
+ install -D -m644 ./*.ttf -t "$PKG_DEST"/usr/share/fonts/liberation/
+
+ mkdir -p "$PKG_DEST"/etc/fonts/conf.d
+
+ local i; for i in "$BUILD_ROOT"/*.conf; do
+ install -D -m644 "$i" -t "$PKG_DEST"/etc/fonts/conf.avail/
+ ln -s ../conf.avail/${i##*/} "$PKG_DEST"/etc/fonts/conf.d/${i##*/}
+ done
+}
+
+
diff --git a/repo/fuse/fix-realpath.patch b/repo/fuse/fix-realpath.patch
new file mode 100644
index 0000000..0099173
--- /dev/null
+++ b/repo/fuse/fix-realpath.patch
@@ -0,0 +1,28 @@
+--- a/util/fusermount.c
++++ B/util/fusermount.c
+@@ -1322,19 +1322,16 @@
+
+ origmnt = argv[optind];
+
+- drop_privs();
+ mnt = fuse_mnt_resolve_path(progname, origmnt);
+- if (mnt != NULL) {
+- res = chdir("/");
+- if (res == -1) {
+- fprintf(stderr, "%s: failed to chdir to '/'\n", progname);
+- exit(1);
+- }
+- }
+- restore_privs();
+ if (mnt == NULL)
+ exit(1);
+
++ res = chdir("/");
++ if (res == -1) {
++ fprintf(stderr, "%s: failed to chdir to '/'\n", progname);
++ exit(1);
++ }
++
+ umask(033);
+ if (unmount)
+ goto do_unmount;
diff --git a/repo/fuse/fuse.xibuild b/repo/fuse/fuse.xibuild
new file mode 100644
index 0000000..849ac99
--- /dev/null
+++ b/repo/fuse/fuse.xibuild
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+NAME="fuse"
+DESC="A library that makes it possible to implement a filesystem in a userspace program."
+
+MAKEDEPS=" gettext"
+
+PKG_VER=2.9.9
+SOURCE="https://github.com/libfuse/libfuse/releases/download/fuse-$PKG_VER/fuse-$PKG_VER.tar.gz"
+
+ADDITIONAL="
+fix-realpath.patch
+"
+
+prepare () {
+ apply_patches
+}
+
+build() {
+ UDEV_RULES_PATH='/lib/udev/rules.d' ./configure \
+ --prefix=/usr \
+ --enable-static \
+ --enable-shared \
+ --disable-example \
+ --enable-lib \
+ --enable-util \
+ --bindir=/bin
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+ rm -r "$PKG_DEST"/dev "$PKG_DEST"/etc/init.d
+}
+
diff --git a/repo/gomuks/gomuks.xibuild b/repo/gomuks/gomuks.xibuild
new file mode 100644
index 0000000..bb9c184
--- /dev/null
+++ b/repo/gomuks/gomuks.xibuild
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+NAME="gomuks"
+DESC="terminal-based Matrix client written in Go"
+
+MAKEDEPS="go"
+
+PKG_VER=0.2.4
+SOURCE="https://github.com/tulir/gomuks/archive/v$PKG_VER.tar.gz"
+
+build() {
+ go build
+}
+
+package() {
+ install -Dm755 gomuks "$PKG_DEST/usr/bin/gomuks"
+ install -Dm644 README.md "$PKG_DEST/usr/share/doc/gomuks/README.md"
+}
+
diff --git a/repo/gpgme/0003-python310.patch b/repo/gpgme/0003-python310.patch
new file mode 100644
index 0000000..e607cc4
--- /dev/null
+++ b/repo/gpgme/0003-python310.patch
@@ -0,0 +1,335 @@
+Taken from the Arch Repo
+GPGME fails to detect python 3.10 currently, this patch fixes that
+Patch has not been upstreamed as of right now
+diff -upr gpgme-1.16.0.orig/configure gpgme-1.16.0/configure
+--- gpgme-1.16.0.orig/configure 2021-06-24 20:10:50.000000000 +0300
++++ gpgme-1.16.0/configure 2021-12-01 00:12:24.383952330 +0200
+@@ -19625,7 +19625,7 @@ $as_echo_n "checking for $am_display_PYT
+ if ${am_cv_python_version+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+- am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"`
++ am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:4])"`
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5
+ $as_echo "$am_cv_python_version" >&6; }
+@@ -19666,7 +19666,7 @@ else:
+ # <https://github.com/pypa/virtualenv/issues/118>
+ try:
+ from platform import python_implementation
+- if python_implementation() == 'CPython' and sys.version[:3] == '2.7':
++ if python_implementation() == 'CPython' and sys.version[:4] == '2.7':
+ can_use_sysconfig = 0
+ except ImportError:
+ pass"
+@@ -19875,7 +19875,7 @@ variable to configure. See \`\`configure
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5
+ $as_echo_n "checking for the distutils Python package... " >&6; }
+ ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
+- if test -z "$ac_distutils_result"; then
++ if test $? -eq 0; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ else
+@@ -19933,7 +19933,7 @@ EOD`
+ ac_python_version=$PYTHON_VERSION
+ else
+ ac_python_version=`$PYTHON -c "import sys; \
+- print (sys.version[:3])"`
++ print (sys.version[:4])"`
+ fi
+ fi
+
+@@ -20255,7 +20255,7 @@ $as_echo_n "checking for $am_display_PYT
+ if ${am_cv_python_version+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+- am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"`
++ am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:4])"`
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5
+ $as_echo "$am_cv_python_version" >&6; }
+@@ -20296,7 +20296,7 @@ else:
+ # <https://github.com/pypa/virtualenv/issues/118>
+ try:
+ from platform import python_implementation
+- if python_implementation() == 'CPython' and sys.version[:3] == '2.7':
++ if python_implementation() == 'CPython' and sys.version[:4] == '2.7':
+ can_use_sysconfig = 0
+ except ImportError:
+ pass"
+@@ -20505,7 +20505,7 @@ variable to configure. See \`\`configure
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5
+ $as_echo_n "checking for the distutils Python package... " >&6; }
+ ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
+- if test -z "$ac_distutils_result"; then
++ if test $? -eq 0; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ else
+@@ -20563,7 +20563,7 @@ EOD`
+ ac_python_version=$PYTHON_VERSION
+ else
+ ac_python_version=`$PYTHON -c "import sys; \
+- print (sys.version[:3])"`
++ print (sys.version[:4])"`
+ fi
+ fi
+
+@@ -20885,7 +20885,7 @@ $as_echo_n "checking for $am_display_PYT
+ if ${am_cv_python_version+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+- am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"`
++ am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:4])"`
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5
+ $as_echo "$am_cv_python_version" >&6; }
+@@ -20926,7 +20926,7 @@ else:
+ # <https://github.com/pypa/virtualenv/issues/118>
+ try:
+ from platform import python_implementation
+- if python_implementation() == 'CPython' and sys.version[:3] == '2.7':
++ if python_implementation() == 'CPython' and sys.version[:4] == '2.7':
+ can_use_sysconfig = 0
+ except ImportError:
+ pass"
+@@ -21135,7 +21135,7 @@ variable to configure. See \`\`configure
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5
+ $as_echo_n "checking for the distutils Python package... " >&6; }
+ ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
+- if test -z "$ac_distutils_result"; then
++ if test $? -eq 0; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ else
+@@ -21193,7 +21193,7 @@ EOD`
+ ac_python_version=$PYTHON_VERSION
+ else
+ ac_python_version=`$PYTHON -c "import sys; \
+- print (sys.version[:3])"`
++ print (sys.version[:4])"`
+ fi
+ fi
+
+@@ -21515,7 +21515,7 @@ $as_echo_n "checking for $am_display_PYT
+ if ${am_cv_python_version+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+- am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"`
++ am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:4])"`
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5
+ $as_echo "$am_cv_python_version" >&6; }
+@@ -21556,7 +21556,7 @@ else:
+ # <https://github.com/pypa/virtualenv/issues/118>
+ try:
+ from platform import python_implementation
+- if python_implementation() == 'CPython' and sys.version[:3] == '2.7':
++ if python_implementation() == 'CPython' and sys.version[:4] == '2.7':
+ can_use_sysconfig = 0
+ except ImportError:
+ pass"
+@@ -21765,7 +21765,7 @@ variable to configure. See \`\`configure
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5
+ $as_echo_n "checking for the distutils Python package... " >&6; }
+ ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
+- if test -z "$ac_distutils_result"; then
++ if test $? -eq 0; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ else
+@@ -21823,7 +21823,7 @@ EOD`
+ ac_python_version=$PYTHON_VERSION
+ else
+ ac_python_version=`$PYTHON -c "import sys; \
+- print (sys.version[:3])"`
++ print (sys.version[:4])"`
+ fi
+ fi
+
+@@ -22145,7 +22145,7 @@ $as_echo_n "checking for $am_display_PYT
+ if ${am_cv_python_version+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+- am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"`
++ am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:4])"`
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5
+ $as_echo "$am_cv_python_version" >&6; }
+@@ -22186,7 +22186,7 @@ else:
+ # <https://github.com/pypa/virtualenv/issues/118>
+ try:
+ from platform import python_implementation
+- if python_implementation() == 'CPython' and sys.version[:3] == '2.7':
++ if python_implementation() == 'CPython' and sys.version[:4] == '2.7':
+ can_use_sysconfig = 0
+ except ImportError:
+ pass"
+@@ -22395,7 +22395,7 @@ variable to configure. See \`\`configure
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5
+ $as_echo_n "checking for the distutils Python package... " >&6; }
+ ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
+- if test -z "$ac_distutils_result"; then
++ if test $? -eq 0; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ else
+@@ -22453,7 +22453,7 @@ EOD`
+ ac_python_version=$PYTHON_VERSION
+ else
+ ac_python_version=`$PYTHON -c "import sys; \
+- print (sys.version[:3])"`
++ print (sys.version[:4])"`
+ fi
+ fi
+
+@@ -22775,7 +22775,7 @@ $as_echo_n "checking for $am_display_PYT
+ if ${am_cv_python_version+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+- am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"`
++ am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:4])"`
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5
+ $as_echo "$am_cv_python_version" >&6; }
+@@ -22816,7 +22816,7 @@ else:
+ # <https://github.com/pypa/virtualenv/issues/118>
+ try:
+ from platform import python_implementation
+- if python_implementation() == 'CPython' and sys.version[:3] == '2.7':
++ if python_implementation() == 'CPython' and sys.version[:4] == '2.7':
+ can_use_sysconfig = 0
+ except ImportError:
+ pass"
+@@ -23025,7 +23025,7 @@ variable to configure. See \`\`configure
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5
+ $as_echo_n "checking for the distutils Python package... " >&6; }
+ ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
+- if test -z "$ac_distutils_result"; then
++ if test $? -eq 0; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ else
+@@ -23083,7 +23083,7 @@ EOD`
+ ac_python_version=$PYTHON_VERSION
+ else
+ ac_python_version=`$PYTHON -c "import sys; \
+- print (sys.version[:3])"`
++ print (sys.version[:4])"`
+ fi
+ fi
+
+@@ -23291,13 +23291,13 @@ $as_echo "$as_me: WARNING:
+
+ if test -n "$PYTHON"; then
+ # If the user set $PYTHON, use it and don't search something else.
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version is >= 3.9" >&5
+-$as_echo_n "checking whether $PYTHON version is >= 3.9... " >&6; }
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version is >= 3.10" >&5
++$as_echo_n "checking whether $PYTHON version is >= 3.10... " >&6; }
+ prog="import sys
+ # split strings by '.' and convert to numeric. Append some zeros
+ # because we need at least 4 digits for the hex conversion.
+ # map returns an iterator in Python 3.0 and a list in 2.x
+-minver = list(map(int, '3.9'.split('.'))) + [0, 0, 0]
++minver = list(map(int, '3.10'.split('.'))) + [0, 0, 0]
+ minverhex = 0
+ # xrange is not present in Python 3.0 and range returns an iterator
+ for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i]
+@@ -23318,19 +23318,19 @@ fi
+ else
+ # Otherwise, try each interpreter until we find one that satisfies
+ # VERSION.
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 3.9" >&5
+-$as_echo_n "checking for a Python interpreter with version >= 3.9... " >&6; }
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 3.10" >&5
++$as_echo_n "checking for a Python interpreter with version >= 3.10... " >&6; }
+ if ${am_cv_pathless_PYTHON+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+
+- for am_cv_pathless_PYTHON in python3.9 none; do
++ for am_cv_pathless_PYTHON in python3.10 none; do
+ test "$am_cv_pathless_PYTHON" = none && break
+ prog="import sys
+ # split strings by '.' and convert to numeric. Append some zeros
+ # because we need at least 4 digits for the hex conversion.
+ # map returns an iterator in Python 3.0 and a list in 2.x
+-minver = list(map(int, '3.9'.split('.'))) + [0, 0, 0]
++minver = list(map(int, '3.10'.split('.'))) + [0, 0, 0]
+ minverhex = 0
+ # xrange is not present in Python 3.0 and range returns an iterator
+ for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i]
+@@ -23405,7 +23405,7 @@ $as_echo_n "checking for $am_display_PYT
+ if ${am_cv_python_version+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+- am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"`
++ am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:4])"`
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5
+ $as_echo "$am_cv_python_version" >&6; }
+@@ -23446,7 +23446,7 @@ else:
+ # <https://github.com/pypa/virtualenv/issues/118>
+ try:
+ from platform import python_implementation
+- if python_implementation() == 'CPython' and sys.version[:3] == '2.7':
++ if python_implementation() == 'CPython' and sys.version[:4] == '2.7':
+ can_use_sysconfig = 0
+ except ImportError:
+ pass"
+@@ -23655,7 +23655,7 @@ variable to configure. See \`\`configure
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5
+ $as_echo_n "checking for the distutils Python package... " >&6; }
+ ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
+- if test -z "$ac_distutils_result"; then
++ if test $? -eq 0; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ else
+@@ -23713,7 +23713,7 @@ EOD`
+ ac_python_version=$PYTHON_VERSION
+ else
+ ac_python_version=`$PYTHON -c "import sys; \
+- print (sys.version[:3])"`
++ print (sys.version[:4])"`
+ fi
+ fi
+
+@@ -24035,7 +24035,7 @@ $as_echo_n "checking for $am_display_PYT
+ if ${am_cv_python_version+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+- am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"`
++ am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:4])"`
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5
+ $as_echo "$am_cv_python_version" >&6; }
+@@ -24076,7 +24076,7 @@ else:
+ # <https://github.com/pypa/virtualenv/issues/118>
+ try:
+ from platform import python_implementation
+- if python_implementation() == 'CPython' and sys.version[:3] == '2.7':
++ if python_implementation() == 'CPython' and sys.version[:4] == '2.7':
+ can_use_sysconfig = 0
+ except ImportError:
+ pass"
+@@ -24285,7 +24285,7 @@ variable to configure. See \`\`configure
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5
+ $as_echo_n "checking for the distutils Python package... " >&6; }
+ ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
+- if test -z "$ac_distutils_result"; then
++ if test $? -eq 0; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ else
+@@ -24343,7 +24343,7 @@ EOD`
+ ac_python_version=$PYTHON_VERSION
+ else
+ ac_python_version=`$PYTHON -c "import sys; \
+- print (sys.version[:3])"`
++ print (sys.version[:4])"`
+ fi
+ fi
+
diff --git a/repo/gpgme/gpgme.post-upgrade b/repo/gpgme/gpgme.post-upgrade
new file mode 100644
index 0000000..fafc49c
--- /dev/null
+++ b/repo/gpgme/gpgme.post-upgrade
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+ver_old="$2"
+
+if [ "$(apk version -t "$ver_old" '1.15.1-r3')" = '<' ]; then
+ cat >&2 <<-EOF
+ *
+ * gpgme, gpgmepp and qgpgme don't install a full GnuPG suite (gnupg package)
+ * anymore, but only gpg. However, some programs using gpgme needs more GnuPG
+ * components. If you encounter a problem, install gnupg package and report it
+ * on https://gitlab.alpinelinux.org/alpine/aports/-/issues/.
+ *
+ EOF
+fi
+
+exit 0
diff --git a/repo/gpgme/gpgme.xibuild b/repo/gpgme/gpgme.xibuild
new file mode 100644
index 0000000..920f251
--- /dev/null
+++ b/repo/gpgme/gpgme.xibuild
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+NAME="gpgme"
+DESC="gnupg made easy"
+
+MAKEDEPS="python swig libgpg-error libassuan qt5-qtbase gnupg"
+
+PKG_VER=1.17.1
+SOURCE="https://www.gnupg.org/ftp/gcrypt/gpgme/gpgme-$PKG_VER.tar.bz2"
+
+ADDITIONAL="
+0003-python310.patch
+"
+
+prepare () {
+ apply_patches
+}
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var \
+ --enable-languages="cl cpp qt" \
+ --enable-static \
+ --disable-gpg-test \
+ --disable-g13-test \
+ --disable-gpgsm-test \
+ --disable-gpgconf-test
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/gpgme/gpgmepp.post-upgrade b/repo/gpgme/gpgmepp.post-upgrade
new file mode 100644
index 0000000..fafc49c
--- /dev/null
+++ b/repo/gpgme/gpgmepp.post-upgrade
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+ver_old="$2"
+
+if [ "$(apk version -t "$ver_old" '1.15.1-r3')" = '<' ]; then
+ cat >&2 <<-EOF
+ *
+ * gpgme, gpgmepp and qgpgme don't install a full GnuPG suite (gnupg package)
+ * anymore, but only gpg. However, some programs using gpgme needs more GnuPG
+ * components. If you encounter a problem, install gnupg package and report it
+ * on https://gitlab.alpinelinux.org/alpine/aports/-/issues/.
+ *
+ EOF
+fi
+
+exit 0
diff --git a/repo/gpgme/qgpgme.post-upgrade b/repo/gpgme/qgpgme.post-upgrade
new file mode 100644
index 0000000..fafc49c
--- /dev/null
+++ b/repo/gpgme/qgpgme.post-upgrade
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+ver_old="$2"
+
+if [ "$(apk version -t "$ver_old" '1.15.1-r3')" = '<' ]; then
+ cat >&2 <<-EOF
+ *
+ * gpgme, gpgmepp and qgpgme don't install a full GnuPG suite (gnupg package)
+ * anymore, but only gpg. However, some programs using gpgme needs more GnuPG
+ * components. If you encounter a problem, install gnupg package and report it
+ * on https://gitlab.alpinelinux.org/alpine/aports/-/issues/.
+ *
+ EOF
+fi
+
+exit 0
diff --git a/repo/heimdal/005_all_heimdal-suid_fix.patch b/repo/heimdal/005_all_heimdal-suid_fix.patch
new file mode 100644
index 0000000..0524db6
--- /dev/null
+++ b/repo/heimdal/005_all_heimdal-suid_fix.patch
@@ -0,0 +1,20 @@
+--- appl/su/Makefile.am 2005-06-16 18:27:46.000000000 +0200
++++ b/appl/su/Makefile.am 2005-06-27 23:25:21.000000000 +0200
+@@ -7,6 +7,7 @@
+ bin_PROGRAMS = su
+ bin_SUIDS = su
+ su_SOURCES = su.c supaths.h
++su_LDFLAGS = -Wl,-z,now
+ man_MANS = su.1
+
+ LDADD = $(LIB_kafs) \
+--- appl/otp/Makefile.am 2005-06-16 18:28:46.000000000 +0200
++++ b/appl/otp/Makefile.am 2005-06-27 23:25:40.000000000 +0200
+@@ -8,6 +8,7 @@
+ bin_SUIDS = otp
+ otp_SOURCES = otp.c otp_locl.h
+ otpprint_SOURCES = otpprint.c otp_locl.h
++otp_LDFLAGS = -Wl,-z,now
+
+ man_MANS = otp.1 otpprint.1
+
diff --git a/repo/heimdal/CVE-2018-16860.patch b/repo/heimdal/CVE-2018-16860.patch
new file mode 100644
index 0000000..6424b9e
--- /dev/null
+++ b/repo/heimdal/CVE-2018-16860.patch
@@ -0,0 +1,147 @@
+From c6257cc2c842c0faaeb4ef34e33890ee88c4cbba Mon Sep 17 00:00:00 2001
+From: Isaac Boukris <iboukris@gmail.com>
+Date: Tue, 14 May 2019 09:03:18 -0400
+Subject: [PATCH] CVE-2018-16860 Heimdal KDC: Reject PA-S4U2Self with unkeyed
+ checksum
+
+S4U2Self is an extension to Kerberos used in Active Directory to allow
+a service to request a kerberos ticket to itself from the Kerberos Key
+Distribution Center (KDC) for a non-Kerberos authenticated user
+(principal in Kerboros parlance). This is useful to allow internal
+code paths to be standardized around Kerberos.
+
+S4U2Proxy (constrained-delegation) is an extension of this mechanism
+allowing this impersonation to a second service over the network. It
+allows a privileged server that obtained a S4U2Self ticket to itself
+to then assert the identity of that principal to a second service and
+present itself as that principal to get services from the second
+service.
+
+There is a flaw in Samba's AD DC in the Heimdal KDC. When the Heimdal
+KDC checks the checksum that is placed on the S4U2Self packet by the
+server to protect the requested principal against modification, it
+does not confirm that the checksum algorithm that protects the user
+name (principal) in the request is keyed. This allows a
+man-in-the-middle attacker who can intercept the request to the KDC to
+modify the packet by replacing the user name (principal) in the
+request with any desired user name (principal) that exists in the KDC
+and replace the checksum protecting that name with a CRC32 checksum
+(which requires no prior knowledge to compute).
+
+This would allow a S4U2Self ticket requested on behalf of user name
+(principal) user@EXAMPLE.COM to any service to be changed to a
+S4U2Self ticket with a user name (principal) of
+Administrator@EXAMPLE.COM. This ticket would then contain the PAC of
+the modified user name (principal).
+
+==================
+CVSSv3 calculation
+==================
+
+CVSS:3.0/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H (7.5)
+
+=========================
+Workaround and Mitigation
+=========================
+
+If server does not take privileged actions based on Kerberos tickets
+obtained by S4U2Self nor obtains Kerberos tickets via further
+S4U2Proxy requests then this issue cannot be exploited.
+
+Note that the path to an exploit is not generic, the KDC is not harmed
+by the malicious checksum, it is the client service requesting the
+ticket being mislead, because it trusted the KDC to return the correct
+ticket and PAC.
+
+It is out of scope for Samba to describe all of the possible tool
+chains that might be vulnerable. Here are two examples of possible
+exploits in order to explain the issue more clearly.
+
+1). SFU2Self might be used by a web service authenticating an end user
+via OAuth, Shibboleth, or other protocols to obtain a S4U2Self
+Kerberos service ticket for use by any Kerberos service principal the
+web service has a keytab for. One example is acquiring an AFS token
+by requesting an afs/cell@REALM service ticket for a client via
+SFU2Self. With this exploit an organization that deploys a KDC built
+from Heimdal (be it Heimdal directly or vendor versions such as found
+in Samba) is vulnerable to privilege escalation attacks.
+
+2). If a server authenticates users using X509 certificates, and then
+uses S4U2Self to obtain a Kerberos service ticket on behalf of the
+user (principal) in order to authorize access to local resources, a
+man-in-the-middle attacker could allow a non-privilaged user to access
+privilaged resources being protected by the server, or privilaged
+resources being protected by a second server, if the first server uses
+the S4U2Proxy extension in order to get a new Kerberos service ticket
+to obtain access to the second server.
+
+In both these scenarios under conditions allowing man-in-the-middle
+active network protocol manipulation, a malicious user could
+authenticate using the non-Kerborized credentials of an unprivileged
+user, and then elevate its privileges by intercepting the packet from
+the server to the KDC and changing the requested user name (principal).
+
+The only Samba clients that use S4U2Self are:
+
+- the "net ads kerberos pac dump" (debugging) tool.
+
+- the CIFS proxy in the deprecated/developer-only NTVFS file
+server. Note this code is not compiled or enabled by default.
+
+In particular, winbindd does *not* use S4U2Self.
+
+Finally, MIT Kerberos and so therefore the experimental MIT KDC backend
+for Samba AD is understood not to be impacted.
+
+===============
+Further Reading
+===============
+
+There is more detail on and a description of the protocols in
+
+[MS-SFU]: Kerberos Protocol Extensions: Service for User and Constrained
+Delegation Protocol
+https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-sfu/
+
+=======
+Credits
+=======
+
+Originally reported by Isaac Boukris and Andrew Bartlett of the Samba
+Team and Catalyst.
+
+Patches provided by Isaac Boukris.
+
+Advisory written by Andrew Bartlett of the Samba Team and Catalyst,
+with contributions from Isaac Boukris, Jeffrey Altman and Jeremy
+Allison.
+
+BUG: https://bugzilla.samba.org/show_bug.cgi?id=13685
+Change-Id: I4ac69ebf0503eb999a7d497a2c30fe4d293a8cc8
+Signed-off-by: Isaac Boukris <iboukris@gmail.com>
+Reviewed-by: Andrew Bartlett <abartlet@samba.org>
+Signed-off-by: Andrew Bartlett <abartlet@samba.org>
+Reviewed-by: Jeffrey Altman <jaltman@auristor.com>
+Signed-off-by: Jeffrey Altman <jaltman@auristor.com>
+---
+ kdc/krb5tgs.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/kdc/krb5tgs.c b/kdc/krb5tgs.c
+index 8318bc0025..14943077a4 100644
+--- a/kdc/krb5tgs.c
++++ b/kdc/krb5tgs.c
+@@ -2031,6 +2031,13 @@ tgs_build_reply(krb5_context context,
+ goto out;
+ }
+
++ if (!krb5_checksum_is_keyed(context, self.cksum.cksumtype)) {
++ free_PA_S4U2Self(&self);
++ kdc_log(context, config, 0, "Reject PA-S4U2Self with unkeyed checksum");
++ ret = KRB5KRB_AP_ERR_INAPP_CKSUM;
++ goto out;
++ }
++
+ ret = _krb5_s4u2self_to_checksumdata(context, &self, &datack);
+ if (ret)
+ goto out;
diff --git a/repo/heimdal/autoconf-270.patch b/repo/heimdal/autoconf-270.patch
new file mode 100644
index 0000000..05cdc09
--- /dev/null
+++ b/repo/heimdal/autoconf-270.patch
@@ -0,0 +1,27 @@
+commit 22352b90e78e2d162b98b5ef6c84672c397be40a
+Author: Lars Wendler <polynomial-c@gentoo.org>
+Date: Wed Mar 17 17:49:18 2021 +0100
+
+ autoconf-2.70 fix
+
+ autoconf-2.70 and newer are more strict with quoting etc. and thus generate
+ a broken configure file:
+
+ configure: 20855: Syntax error: ")" unexpected (expecting "fi")
+
+ Gentoo-bug: https://bugs.gentoo.org/776241
+ Signed-off-by: Lars Wendler <polynomial-c@gentoo.org>
+
+diff --git a/cf/check-var.m4 b/cf/check-var.m4
+index 2fd7bca6f..71d6f70ca 100644
+--- a/cf/check-var.m4
++++ b/cf/check-var.m4
+@@ -20,7 +20,7 @@ AC_MSG_RESULT($ac_foo)
+ if test "$ac_foo" = yes; then
+ AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_[]$1), 1,
+ [Define if you have the `]$1[' variable.])
+- m4_ifval([$2], AC_CHECK_DECLS([$1],[],[],[$2]))
++ m4_ifval([$2], [AC_CHECK_DECLS([$1],[],[],[$2])])
+ fi
+ ])
+
diff --git a/repo/heimdal/heimdal-kadmind.initd b/repo/heimdal/heimdal-kadmind.initd
new file mode 100755
index 0000000..73f2381
--- /dev/null
+++ b/repo/heimdal/heimdal-kadmind.initd
@@ -0,0 +1,24 @@
+#!/sbin/openrc-run
+# Copyright 1999-2004 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/app-crypt/heimdal/files/heimdal-kadmind,v 1.3 2004/09/13 22:44:54 solar Exp $
+
+depend() {
+ need net
+ use heimdal-kdc
+ after logger
+}
+
+start() {
+ ebegin "Starting heimdal kadmind"
+ /usr/sbin/kadmind &
+ echo $! > /var/run/heimdal-kadmind.pid
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping heimdal kadmind"
+ start-stop-daemon --stop --quiet --exec \
+ /usr/sbin/kadmind
+ eend $?
+}
diff --git a/repo/heimdal/heimdal-kdc.initd b/repo/heimdal/heimdal-kdc.initd
new file mode 100755
index 0000000..32288c4
--- /dev/null
+++ b/repo/heimdal/heimdal-kdc.initd
@@ -0,0 +1,23 @@
+#!/sbin/openrc-run
+# Copyright 1999-2004 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/app-crypt/heimdal/files/heimdal-kdc,v 1.2 2004/09/13 15:40:34 dragonheart Exp $
+
+depend() {
+ need net
+ after logger
+}
+
+start() {
+ ebegin "Starting heimdal kdc"
+ start-stop-daemon --start --quiet --exec \
+ /usr/sbin/kdc -- --detach
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping heimdal kdc"
+ start-stop-daemon --stop --quiet --exec \
+ /usr/sbin/kdc
+ eend $?
+}
diff --git a/repo/heimdal/heimdal-kpasswdd.initd b/repo/heimdal/heimdal-kpasswdd.initd
new file mode 100755
index 0000000..5fc21e0
--- /dev/null
+++ b/repo/heimdal/heimdal-kpasswdd.initd
@@ -0,0 +1,24 @@
+#!/sbin/openrc-run
+# Copyright 1999-2004 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/app-crypt/heimdal/files/heimdal-kpasswdd,v 1.3 2004/09/13 22:44:54 solar Exp $
+
+depend() {
+ need net
+ use heimdal-kdc
+ after logger
+}
+
+start() {
+ ebegin "Starting heimdal kpasswdd"
+ start-stop-daemon --background --start --quiet --exec \
+ /usr/sbin/kpasswdd
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping heimdal kpasswdd"
+ start-stop-daemon --stop --quiet --exec \
+ /usr/sbin/kpasswdd
+ eend $?
+}
diff --git a/repo/heimdal/heimdal.xibuild b/repo/heimdal/heimdal.xibuild
new file mode 100644
index 0000000..6d0e31c
--- /dev/null
+++ b/repo/heimdal/heimdal.xibuild
@@ -0,0 +1,82 @@
+#!/bin/sh
+
+NAME="heimdal"
+DESC="Iplementation of Kerberos 5"
+
+MAKEDEPS="xipkg openssl e2fsprogs autoconf automake bash gawk libtool ncurses perl readline sqlite3 texinfo perl-json gdbm "
+
+PKG_VER=7.7.0
+SOURCE="https://github.com/heimdal/heimdal/releases/download/heimdal-$PKG_VER/heimdal-$PKG_VER.tar.gz"
+
+ADDITIONAL="
+005_all_heimdal-suid_fix.patch
+CVE-2018-16860.patch
+autoconf-270.patch
+heimdal-kadmind.initd
+heimdal-kdc.initd
+heimdal-kpasswdd.initd
+heimdal_missing-include.patch
+silence-include-headers-redirect-warnings.patch
+"
+
+prepare() {
+ [ -e /usr/lib/libasn1.so ] && xi -yl remove heimdal
+ apply_patches
+ sh ./autogen.sh
+}
+
+build() {
+ export LDFLAGS="$LDFLAGS -Wl,--as-needed"
+
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --enable-shared=yes \
+ --without-x \
+ --without-berkeley-db \
+ --with-readline-lib=/usr/lib \
+ --with-readline-include=/usr/include/readline \
+ --with-sqlite3=/usr \
+ --without-openssl \
+ --with-db-type-preference=
+
+ # make sure we use system version
+ rm -r lib/sqlite lib/com_err
+
+ # workarount a parallell build issue
+ make -C lib/asn1 der-protos.h der-private.h
+ make -C lib/kadm5 kadm5-protos.h kadm5-private.h kadm5_err.h
+ make -C lib/krb5 krb5-protos.h krb5-private.h krb5_err.h krb_err.h \
+ heim_err.h k524_err.h
+ make -C lib/hx509 hx509-private.h hx509-protos.h
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" exec_prefix=/usr sysconfdir=/etc \
+ mandir=/usr/share/man infodir=/usr/share/info datadir=/var/lib/heimdal \
+ localstatedir=/var/lib/heimdal libexecdir=/usr/sbin install
+
+
+ install -m755 -D "$BUILD_ROOT"/heimdal-kadmind.initd \
+ "$PKG_DEST"/etc/init.d/heimdal-kadmind
+ install -m755 -D "$BUILD_ROOT"/heimdal-kdc.initd \
+ "$PKG_DEST"/etc/init.d/heimdal-kdc
+ install -m755 -D "$BUILD_ROOT"/heimdal-kpasswdd.initd \
+ "$PKG_DEST"/etc/init.d/heimdal-kpasswdd
+
+ for i in 1 3 5 8; do
+ rm -rf "$PKG_DEST"/usr/share/man/cat$i
+ done
+
+ # Remove conflicts
+ # e2fsprogs
+ rm -f "$PKG_DEST"/usr/bin/compile_et \
+ "$PKG_DEST"/usr/share/man/man1/compile_et.1
+
+ # Compress info pages
+ for page in heimdal hx509; do
+ gzip -9 "$PKG_DEST"/usr/share/info/$page.info
+ done
+}
diff --git a/repo/heimdal/heimdal_missing-include.patch b/repo/heimdal/heimdal_missing-include.patch
new file mode 100644
index 0000000..8cca906
--- /dev/null
+++ b/repo/heimdal/heimdal_missing-include.patch
@@ -0,0 +1,11 @@
+--- lib/base/test_base.c 2011-09-30 15:58:45.000000000 +0300
++++ b/lib/base/test_base.c 2011-12-27 23:04:50.482955923 +0200
+@@ -39,6 +39,8 @@
+ #include "heimbase.h"
+ #include "heimbasepriv.h"
+
++#include <stdlib.h>
++
+ static void
+ memory_free(heim_object_t obj)
+ {
diff --git a/repo/heimdal/silence-include-headers-redirect-warnings.patch b/repo/heimdal/silence-include-headers-redirect-warnings.patch
new file mode 100644
index 0000000..4505096
--- /dev/null
+++ b/repo/heimdal/silence-include-headers-redirect-warnings.patch
@@ -0,0 +1,80 @@
+From 2eb67c91834a21e68c90380254c7c10ffe03a7ca Mon Sep 17 00:00:00 2001
+From: Leonardo Arena <rnalrd@alpinelinux.org>
+Date: Thu, 14 Apr 2022 08:47:15 +0000
+Subject: [PATCH] silence include header warnings
+
+---
+ cf/roken-frag.m4 | 1 -
+ configure | 2 +-
+ lib/ipc/hi_locl.h | 2 +-
+ lib/krb5/krb5_locl.h | 2 +-
+ lib/roken/getifaddrs.c | 2 +-
+ 5 files changed, 4 insertions(+), 5 deletions(-)
+
+diff --git a/cf/roken-frag.m4 b/cf/roken-frag.m4
+index f22b43a..589b2cc 100644
+--- a/cf/roken-frag.m4
++++ b/cf/roken-frag.m4
+@@ -73,7 +73,6 @@ AC_CHECK_HEADERS([\
+ stdint.h \
+ sys/auxv.h \
+ sys/bswap.h \
+- sys/errno.h \
+ sys/ioctl.h \
+ sys/mman.h \
+ sys/param.h \
+diff --git a/configure b/configure
+index 4cefc43..bc3bf78 100755
+--- a/configure
++++ b/configure
+@@ -17965,7 +17965,7 @@ for ac_header in \
+ stdint.h \
+ sys/auxv.h \
+ sys/bswap.h \
+- sys/errno.h \
++ errno.h \
+ sys/ioctl.h \
+ sys/mman.h \
+ sys/param.h \
+diff --git a/lib/ipc/hi_locl.h b/lib/ipc/hi_locl.h
+index 7efe6ca..3195b44 100644
+--- a/lib/ipc/hi_locl.h
++++ b/lib/ipc/hi_locl.h
+@@ -41,7 +41,7 @@
+ #include <sys/un.h>
+ #endif
+
+-#include <sys/poll.h>
++#include <poll.h>
+
+ #include <ctype.h>
+ #include <stdio.h>
+diff --git a/lib/krb5/krb5_locl.h b/lib/krb5/krb5_locl.h
+index b64f3a9..f62c40d 100644
+--- a/lib/krb5/krb5_locl.h
++++ b/lib/krb5/krb5_locl.h
+@@ -44,7 +44,7 @@
+ #include <ctype.h>
+
+ #ifdef HAVE_POLL_H
+-#include <sys/poll.h>
++#include <poll.h>
+ #endif
+
+ #include <krb5-types.h>
+diff --git a/lib/roken/getifaddrs.c b/lib/roken/getifaddrs.c
+index cc949b0..a82adc5 100644
+--- a/lib/roken/getifaddrs.c
++++ b/lib/roken/getifaddrs.c
+@@ -120,7 +120,7 @@ struct mbuf;
+ #include <linux/rtnetlink.h>
+ #include <sys/types.h>
+ #include <sys/socket.h>
+-#include <sys/poll.h>
++#include <poll.h>
+ #include <netpacket/packet.h>
+ #include <net/ethernet.h> /* the L2 protocols */
+ #include <sys/uio.h>
+--
+2.35.1
+
diff --git a/repo/hunspell/CVE-2019-16707.patch b/repo/hunspell/CVE-2019-16707.patch
new file mode 100644
index 0000000..649eef5
--- /dev/null
+++ b/repo/hunspell/CVE-2019-16707.patch
@@ -0,0 +1,22 @@
+From ac938e2ecb48ab4dd21298126c7921689d60571b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
+Date: Tue, 12 Nov 2019 20:03:15 +0000
+Subject: [PATCH] invalid read memory access #624
+
+---
+ src/hunspell/suggestmgr.cxx | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/hunspell/suggestmgr.cxx b/src/hunspell/suggestmgr.cxx
+index dba084e9..c23f165a 100644
+--- a/src/hunspell/suggestmgr.cxx
++++ b/src/hunspell/suggestmgr.cxx
+@@ -2040,7 +2040,7 @@ int SuggestMgr::leftcommonsubstring(
+ int l2 = su2.size();
+ // decapitalize dictionary word
+ if (complexprefixes) {
+- if (su1[l1 - 1] == su2[l2 - 1])
++ if (l1 && l2 && su1[l1 - 1] == su2[l2 - 1])
+ return 1;
+ } else {
+ unsigned short idx = su2.empty() ? 0 : (su2[0].h << 8) + su2[0].l;
diff --git a/repo/hunspell/hunspell.xibuild b/repo/hunspell/hunspell.xibuild
new file mode 100644
index 0000000..d020614
--- /dev/null
+++ b/repo/hunspell/hunspell.xibuild
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+NAME="hunspell"
+DESC="Spell checker and morphological analyzer library and program"
+
+MAKEDEPS="gettext ncurses readline autoconf automake libtool"
+
+PKG_VER=1.7.0
+SOURCE="https://github.com/hunspell/hunspell/archive/v$PKG_VER.tar.gz"
+
+ADDITIONAL="
+CVE-2019-16707.patch
+"
+
+prepare() {
+ apply_patches
+ autoreconf -vif
+}
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --with-ui \
+ --with-readline \
+ --disable-static \
+ --without-included-gettext
+ make
+}
+
+check() {
+ make check
+}
+
+package() {
+ make -j1 DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/hyphen/hyphen.xibuild b/repo/hyphen/hyphen.xibuild
new file mode 100644
index 0000000..a73915b
--- /dev/null
+++ b/repo/hyphen/hyphen.xibuild
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+NAME="hyphen"
+DESC="Library for high quality hyphenation and justification"
+
+MAKEDEPS="perl"
+
+PKG_VER=2.8.8
+SOURCE="https://downloads.sourceforge.net/hunspell/hyphen-$PKG_VER.tar.gz"
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --disable-static \
+ --disable-dependency-tracking \
+ --enable-fast-install
+ make
+}
+
+package() {
+ make -j1 DESTDIR="$PKG_DEST" install
+}
diff --git a/repo/i2pd/i2pd.xibuild b/repo/i2pd/i2pd.xibuild
index 78532c4..d1e9e51 100644
--- a/repo/i2pd/i2pd.xibuild
+++ b/repo/i2pd/i2pd.xibuild
@@ -41,6 +41,6 @@ package () {
}
postinstall () {
- adduser -S -D -H -h /var/lib/i2p -s /sbin/nologin -g tor tor 2>/dev/null
+ useradd -r -m -U -d /var/lib/i2pd -s /sbin/nologin i2pd
return 0
}
diff --git a/repo/inih/inih.xibuild b/repo/inih/inih.xibuild
new file mode 100644
index 0000000..e01b046
--- /dev/null
+++ b/repo/inih/inih.xibuild
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+NAME="inih"
+DESC="Simple .INI file parser for embedded systems"
+
+MAKEDEPS=" meson"
+
+PKG_VER=55
+SOURCE="https://github.com/benhoyt/inih/archive/r$PKG_VER.tar.gz"
+
+prepare() {
+ sed -i "s|@PKGVER@|$PKG_VER|" meson.build
+}
+
+build() {
+ meson --prefix=/usr \
+ -Ddefault_library=both \
+ -Ddistro_install=true \
+ -Dwith_INIReader=true \
+ -Dmulti-line_entries=true \
+ -Dutf-8_bom=true \
+ -Dinline_comments=true \
+ -Duse_heap=false \
+ . output
+ meson compile ${JOBS:+-j ${JOBS}} -C output
+}
+
+package() {
+ DESTDIR="$PKG_DEST" meson install --no-rebuild -C output
+}
+
diff --git a/repo/junit/junit.xibuild b/repo/junit/junit.xibuild
new file mode 100644
index 0000000..1e7bcf4
--- /dev/null
+++ b/repo/junit/junit.xibuild
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+NAME="junit"
+DESC="A programmer-oriented testing framework for Java"
+
+MAKEDEPS=""
+
+PKG_VER=4.13.2
+SOURCE="https://search.maven.org/remotecontent?filepath=junit/junit/$PKG_VER/junit-$PKG_VER.jar"
+
+package() {
+ local _javadir=/usr/share/java
+ install -dm755 "$PKG_DEST"$_javadir
+ install -m644 "$BUILD_ROOT"/junit-$PKG_VER.jar "$PKG_DEST"$_javadir
+ cd "$PKG_DEST"$_javadir
+ ln -s junit-$PKG_VER.jar junit.jar
+}
+
diff --git a/repo/kconfig/kconfig.xibuild b/repo/kconfig/kconfig.xibuild
new file mode 100644
index 0000000..8c83613
--- /dev/null
+++ b/repo/kconfig/kconfig.xibuild
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+NAME="kconfig"
+DESC="Configuration system"
+
+MAKEDEPS="doxygen extra-cmake-modules graphviz qt5-qtdeclarative qt5-qttools ninja"
+
+PKG_VER=5.93.0
+SOURCE="https://download.kde.org/stable/frameworks/${PKG_VER%.*}/kconfig-$PKG_VER.tar.xz"
+
+build() {
+ cmake -B build -G Ninja \
+ -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib \
+ -DBUILD_QCH=ON
+ cmake --build build
+}
+
+package() {
+ cd $BUILD_ROOT
+ DESTDIR="$PKG_DEST" cmake --install build
+}
+
diff --git a/repo/leveldb/leveldb.xibuild b/repo/leveldb/leveldb.xibuild
new file mode 100644
index 0000000..b5f4757
--- /dev/null
+++ b/repo/leveldb/leveldb.xibuild
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+NAME="leveldb"
+DESC="A fast and lightweight key/value database library by Google"
+
+MAKEDEPS=" cmake snappy"
+
+PKG_VER=1.22
+SOURCE="https://github.com/google/leveldb/archive/$PKG_VER.tar.gz"
+
+build() {
+ mkdir build && cd build
+ cmake .. \
+ -DCMAKE_BUILD_TYPE=MinSizeRel \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DLEVELDB_BUILD_TESTS=ON \
+ -DLEVELDB_INSTALL=ON \
+ -DBUILD_SHARED_LIBS=ON
+ make
+}
+
+check() {
+ make test
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+ mkdir -p "$PKG_DEST"/usr/share/doc
+ cp -a ../doc "$PKG_DEST"/usr/share/doc/leveldb
+}
+
diff --git a/repo/libabw/libabw.xibuild b/repo/libabw/libabw.xibuild
new file mode 100644
index 0000000..101afac
--- /dev/null
+++ b/repo/libabw/libabw.xibuild
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+NAME="libabw"
+DESC="Import filter and tools for AbiWord documents"
+
+MAKEDEPS="doxygen gperf perl librevenge libxml2 zlib"
+
+PKG_VER=0.1.3
+SOURCE="https://dev-www.libreoffice.org/src/libabw/libabw-$PKG_VER.tar.xz"
+
+build() {
+ export CPPFLAGS='-DBOOST_ERROR_CODE_HEADER_ONLY -DBOOST_SYSTEM_NO_DEPRECATED'
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
+tools() {
+ amove usr/bin
+}
+
diff --git a/repo/libcdr/libcdr.xibuild b/repo/libcdr/libcdr.xibuild
new file mode 100644
index 0000000..8e83891
--- /dev/null
+++ b/repo/libcdr/libcdr.xibuild
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+NAME="libcdr"
+DESC="Import filter and tools for Corel DRAW files"
+
+MAKEDEPS="boost doxygen icu lcms2 zlib librevenge"
+
+PKG_VER=0.1.7
+SOURCE="https://dev-www.libreoffice.org/src/libcdr/libcdr-$PKG_VER.tar.xz"
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var
+ make
+}
+
+check() {
+ make check
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
diff --git a/repo/libepubgen/libepubgen.xibuild b/repo/libepubgen/libepubgen.xibuild
new file mode 100644
index 0000000..2a4c9a6
--- /dev/null
+++ b/repo/libepubgen/libepubgen.xibuild
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+NAME="libepubgen"
+DESC="EPUB generator for librevenge."
+
+MAKEDEPS="librevenge libxml2 doxygen"
+
+PKG_VER=0.1.1
+SOURCE="https://download.sourceforge.net/project/libepubgen/libepubgen-$PKG_VER/libepubgen-$PKG_VER.tar.bz2"
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info
+ make
+}
+
+check() {
+ make check
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/libetonyek/libetonyek.xibuild b/repo/libetonyek/libetonyek.xibuild
new file mode 100644
index 0000000..5df35af
--- /dev/null
+++ b/repo/libetonyek/libetonyek.xibuild
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+NAME="libetonyek"
+DESC="Import filter and tools for Apple Keynote presentations"
+
+MAKEDEPS=" glm boost librevenge libxml2 zlib liblangtag gperf doxygen mdds"
+
+PKG_VER=0.1.10
+SOURCE="https://dev-www.libreoffice.org/src/libetonyek/libetonyek-$PKG_VER.tar.xz"
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var \
+ --disable-werror \
+ --with-mdds=1.5 \
+ --disable-static
+ make
+}
+
+check() {
+ make check
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
diff --git a/repo/libexttextcat/libexttextcat.xibuild b/repo/libexttextcat/libexttextcat.xibuild
new file mode 100644
index 0000000..ac006cf
--- /dev/null
+++ b/repo/libexttextcat/libexttextcat.xibuild
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+NAME="libexttextcat"
+DESC="An N-Gram-Based Text Categorization library"
+
+MAKEDEPS=""
+
+PKG_VER=3.4.6
+SOURCE="https://dev-www.libreoffice.org/src/libexttextcat/libexttextcat-$PKG_VER.tar.xz"
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var
+ make
+}
+
+check() {
+ make check
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/libfreehand/fix-build.patch b/repo/libfreehand/fix-build.patch
new file mode 100644
index 0000000..2a612f4
--- /dev/null
+++ b/repo/libfreehand/fix-build.patch
@@ -0,0 +1,13 @@
+diff --git a/src/lib/libfreehand_utils.cpp b/src/lib/libfreehand_utils.cpp
+index 439c457..32f23e0 100644
+--- a/src/lib/libfreehand_utils.cpp
++++ b/src/lib/libfreehand_utils.cpp
+@@ -162,7 +162,7 @@ void libfreehand::_appendUTF16(librevenge::RVNGString &text, std::vector<unsigne
+ while (j < length)
+ {
+ UChar32 c;
+- U16_NEXT(s, j, length, c)
++ U16_NEXT(s, j, length, c);
+ unsigned char outbuf[U8_MAX_LENGTH+1];
+ int i = 0;
+ U8_APPEND_UNSAFE(&outbuf[0], i, c);
diff --git a/repo/libfreehand/libfreehand.xibuild b/repo/libfreehand/libfreehand.xibuild
new file mode 100644
index 0000000..779bfca
--- /dev/null
+++ b/repo/libfreehand/libfreehand.xibuild
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+NAME="libfreehand"
+DESC="Import filter and tools for Adobe FreeHand documents"
+
+MAKEDEPS="libxml2 lcms2 icu gperf perl doxygen librevenge zlib"
+
+PKG_VER=0.1.2
+SOURCE="https://dev-www.libreoffice.org/src/libfreehand/libfreehand-$PKG_VER.tar.xz"
+
+ADDITIONAL="
+fix-build.patch
+parentheses-gcc8-fix.patch
+"
+
+prepare() {
+ apply_patches
+}
+
+build() {
+ export CXXFLAGS="$CXXFLAGS -Wno-error=deprecated-copy"
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var
+ make
+}
+
+check() {
+ make check
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/libfreehand/parentheses-gcc8-fix.patch b/repo/libfreehand/parentheses-gcc8-fix.patch
new file mode 100644
index 0000000..7af1b05
--- /dev/null
+++ b/repo/libfreehand/parentheses-gcc8-fix.patch
@@ -0,0 +1,13 @@
+diff --git a/src/lib/FHCollector.cpp b/src/lib/FHCollector.cpp
+index 874ab46edf..a5ab52ed9a 100644
+--- a/src/lib/FHCollector.cpp
++++ b/src/lib/FHCollector.cpp
+@@ -1907,7 +1907,7 @@ void libfreehand::FHCollector::_outputDisplayText(const libfreehand::FHDisplayTe
+ textObjectProps.insert("svg:width", width);
+ for (int i=0; i<4; ++i) // osnola: let assume that there is no padding
+ {
+- char const *(padding[])= {"fo:padding-left","fo:padding-right","fo:padding-top","fo:padding-bottom"};
++ char const *padding[]= {"fo:padding-left","fo:padding-right","fo:padding-top","fo:padding-bottom"};
+ textObjectProps.insert(padding[i],0,librevenge::RVNG_POINT);
+ }
+ if (!FH_ALMOST_ZERO(rotation))
diff --git a/repo/libixion/fix.patch b/repo/libixion/fix.patch
new file mode 100644
index 0000000..8b4b363
--- /dev/null
+++ b/repo/libixion/fix.patch
@@ -0,0 +1,11 @@
+--- a/src/libixion/model_context.cpp
++++ b/src/libixion/model_context.cpp
+@@ -17,7 +17,7 @@
+
+ namespace ixion {
+
+-model_context::input_cell::input_cell(nullptr_t) : type(celltype_t::empty) {}
++model_context::input_cell::input_cell(std::nullptr_t p) : type(celltype_t::empty) {}
+ model_context::input_cell::input_cell(bool b) : type(celltype_t::boolean)
+ {
+ value.boolean = b;
diff --git a/repo/libixion/libixion.xibuild b/repo/libixion/libixion.xibuild
new file mode 100644
index 0000000..7f38a07
--- /dev/null
+++ b/repo/libixion/libixion.xibuild
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+NAME="libixion"
+DESC="A general purpose formula parser & interpreter"
+
+MAKEDEPS=" boost mdds"
+
+PKG_VER=0.16.1
+SOURCE="https://kohei.us/files/ixion/src/libixion-$PKG_VER.tar.xz"
+
+ADDITIONAL="
+fix.patch
+"
+
+prepare() {
+ apply_patches
+}
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var \
+ --disable-python
+ make
+}
+
+check() {
+ make check
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/liblangtag/liblangtag.xibuild b/repo/liblangtag/liblangtag.xibuild
new file mode 100644
index 0000000..9e7b01f
--- /dev/null
+++ b/repo/liblangtag/liblangtag.xibuild
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+NAME="liblangtag"
+DESC="Interface library to access/deal with tags for identifying languages"
+
+MAKEDEPS="glib gobject-introspection libtool libxml2 gtk-doc"
+
+PKG_VER=0.6.3
+SOURCE="https://bitbucket.org/tagoh/liblangtag/downloads/liblangtag-$PKG_VER.tar.bz2"
+
+build() {
+ ./configure --prefix=/usr
+ make
+}
+
+check() {
+ make -k check
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/libmspub/libmspub.xibuild b/repo/libmspub/libmspub.xibuild
new file mode 100644
index 0000000..2fc5051
--- /dev/null
+++ b/repo/libmspub/libmspub.xibuild
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+NAME="libmspub"
+DESC="Import filter and tools for MS Publisher files"
+
+MAKEDEPS="boost librevenge zlib icu libwpd libwpg doxygen"
+
+PKG_VER=0.1.4
+SOURCE="https://dev-www.libreoffice.org/src/libmspub/libmspub-$PKG_VER.tar.xz"
+
+ADDITIONAL="
+musl.patch
+"
+
+prepare() {
+ apply_patches
+}
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
diff --git a/repo/libmspub/musl.patch b/repo/libmspub/musl.patch
new file mode 100644
index 0000000..f800e2f
--- /dev/null
+++ b/repo/libmspub/musl.patch
@@ -0,0 +1,12 @@
+diff --git a/src/lib/MSPUBMetaData.h b/src/lib/MSPUBMetaData.h
+index 9167f4f..4456c2a 100644
+--- a/src/lib/MSPUBMetaData.h
++++ b/src/lib/MSPUBMetaData.h
+@@ -13,6 +13,7 @@
+ #include <map>
+ #include <utility>
+ #include <vector>
++#include <sys/types.h> /* for uintX_t types */
+
+ #include <librevenge/librevenge.h>
+
diff --git a/repo/libmwaw/libmwaw.xibuild b/repo/libmwaw/libmwaw.xibuild
new file mode 100644
index 0000000..dbea1ac
--- /dev/null
+++ b/repo/libmwaw/libmwaw.xibuild
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+NAME="libmwaw"
+DESC="Import filter and tools for old Mac documents"
+
+MAKEDEPS="librevenge zlib doxygen"
+
+PKG_VER=0.3.21
+SOURCE="https://downloads.sourceforge.net/project/libmwaw/libmwaw/libmwaw-$PKG_VER/libmwaw-$PKG_VER.tar.bz2"
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
diff --git a/repo/libnfs/fix-includes.patch b/repo/libnfs/fix-includes.patch
new file mode 100644
index 0000000..6d599b4
--- /dev/null
+++ b/repo/libnfs/fix-includes.patch
@@ -0,0 +1,10 @@
+--- a/include/nfsc/libnfs.h
++++ b/include/nfsc/libnfs.h
+@@ -28,6 +28,7 @@
+ #endif
+
+ #include <stdint.h>
++#include <sys/time.h>
+ #if defined(__ANDROID__) || defined(AROS) || defined(__PPU__) \
+ || ( defined(__APPLE__) && defined(__MACH__) )
+ #include <sys/time.h>
diff --git a/repo/libnfs/libnfs.xibuild b/repo/libnfs/libnfs.xibuild
new file mode 100644
index 0000000..582fc31
--- /dev/null
+++ b/repo/libnfs/libnfs.xibuild
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+NAME="libnfs"
+DESC="Client library for accessing NFS shares"
+
+MAKEDEPS="autoconf automake m4 libtool"
+
+PKG_VER=5.0.1
+SOURCE="https://github.com/sahlberg/libnfs/archive/libnfs-$PKG_VER.tar.gz"
+
+ADDITIONAL="
+fix-includes.patch
+"
+
+prepare() {
+ apply_patches
+ ./bootstrap
+}
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+ rm -f "$PKG_DEST"/usr/lib/*.a
+}
diff --git a/repo/libnumbertext/libnumbertext.xibuild b/repo/libnumbertext/libnumbertext.xibuild
new file mode 100644
index 0000000..c7861e0
--- /dev/null
+++ b/repo/libnumbertext/libnumbertext.xibuild
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+NAME="libnumbertext"
+DESC="Number to number name and money text conversion library"
+
+MAKEDEPS=""
+
+PKG_VER=1.0.7
+SOURCE="https://github.com/Numbertext/libnumbertext/releases/download/$PKG_VER/libnumbertext-$PKG_VER.tar.xz"
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var \
+ --disable-static \
+ --disable-werror
+ make
+}
+
+check() {
+ make check
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/libodfgen/libodfgen.xibuild b/repo/libodfgen/libodfgen.xibuild
new file mode 100644
index 0000000..0a21705
--- /dev/null
+++ b/repo/libodfgen/libodfgen.xibuild
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+NAME="libodfgen"
+DESC="Import filter and tools for Open Document Format"
+
+MAKEDEPS="boost librevenge libxml2 pkg-config doxygen"
+
+PKG_VER=0.1.8
+SOURCE="https://sourceforge.net/projects/libwpd/files/libodfgen/libodfgen-$PKG_VER/libodfgen-$PKG_VER.tar.xz"
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var \
+ --enable-fast-install
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/liborcus/fix-include.patch b/repo/liborcus/fix-include.patch
new file mode 100644
index 0000000..407ef03
--- /dev/null
+++ b/repo/liborcus/fix-include.patch
@@ -0,0 +1,10 @@
+--- a/include/orcus/global.hpp
++++ b/include/orcus/global.hpp
+@@ -11,6 +11,7 @@
+ #include "types.hpp"
+ #include "env.hpp"
+
++#include <limits>
+ #include <memory>
+ #include <functional>
+
diff --git a/repo/liborcus/liborcus.xibuild b/repo/liborcus/liborcus.xibuild
new file mode 100644
index 0000000..7c43ca0
--- /dev/null
+++ b/repo/liborcus/liborcus.xibuild
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+NAME="liborcus"
+DESC="Library for processing spreadsheet documents"
+
+MAKEDEPS="boost mdds libixion zlib"
+
+PKG_VER=0.16.1
+SOURCE="https://kohei.us/files/orcus/src/liborcus-$PKG_VER.tar.xz"
+
+ADDITIONAL="
+fix-include.patch
+"
+
+prepare () {
+ apply_patches
+}
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var \
+ --disable-python
+ make
+}
+
+check() {
+ make check
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/libpagemaker/libpagemaker.xibuild b/repo/libpagemaker/libpagemaker.xibuild
new file mode 100644
index 0000000..a189f76
--- /dev/null
+++ b/repo/libpagemaker/libpagemaker.xibuild
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+NAME="libpagemaker"
+DESC="Import filter and tools for PageMaker"
+
+MAKEDEPS="boost librevenge doxygen"
+
+PKG_VER=0.0.4
+SOURCE="https://dev-www.libreoffice.org/src/libpagemaker/libpagemaker-$PKG_VER.tar.xz"
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var \
+ --disable-werror
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
diff --git a/repo/libqxp/libqxp.xibuild b/repo/libqxp/libqxp.xibuild
new file mode 100644
index 0000000..51bb5a0
--- /dev/null
+++ b/repo/libqxp/libqxp.xibuild
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+NAME="libqxp"
+DESC="Library that parses the file format of QuarkXPress documents."
+
+MAKEDEPS="librevenge icu doxygen"
+
+PKG_VER=0.0.2
+SOURCE="https://dev-www.libreoffice.org/src/libqxp/libqxp-$PKG_VER.tar.xz"
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info
+ make
+}
+
+check() {
+ make check
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/librdkafka/librdkafka.xibuild b/repo/librdkafka/librdkafka.xibuild
new file mode 100644
index 0000000..74845fc
--- /dev/null
+++ b/repo/librdkafka/librdkafka.xibuild
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+NAME="librdkafka"
+DESC="The Apache Kafka C/C++ library"
+
+MAKEDEPS="bash openssl libsasl lz4 zlib zstd rapidjson"
+
+PKG_VER=1.8.2
+SOURCE="https://github.com/edenhill/librdkafka/archive/v$PKG_VER.tar.gz"
+
+build() {
+ ./configure --prefix=/usr
+ make
+}
+
+check() {
+ make check
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/libreoffice/autoconf-boost-macros.patch b/repo/libreoffice/autoconf-boost-macros.patch
new file mode 100644
index 0000000..41dda98
--- /dev/null
+++ b/repo/libreoffice/autoconf-boost-macros.patch
@@ -0,0 +1,152 @@
+Fix language context when testing linking against boost, by moving
+the AC_LANG_PUSH and AC_LANG_POP macros into a macro-wide scope for the
+AX_BOOST_FOO macros.
+
+Upstream: Pending
+--- libreoffice-7.2.2.2.orig/m4/ax_boost_date_time.m4
++++ libreoffice-7.2.2.2/m4/ax_boost_date_time.m4
+@@ -62,15 +62,15 @@
+ LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
+ export LDFLAGS
+
++ AC_LANG_PUSH([C++])
++
+ AC_CACHE_CHECK(whether the Boost::Date_Time library is available,
+ ax_cv_boost_date_time,
+- [AC_LANG_PUSH([C++])
+- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <boost/date_time/gregorian/gregorian_types.hpp>]],
++ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <boost/date_time/gregorian/gregorian_types.hpp>]],
+ [[using namespace boost::gregorian; date d(2002,Jan,10);
+ return 0;
+ ]])],
+ ax_cv_boost_date_time=yes, ax_cv_boost_date_time=no)
+- AC_LANG_POP([C++])
+ ])
+ if test "x$ax_cv_boost_date_time" = "xyes"; then
+ AC_DEFINE(HAVE_BOOST_DATE_TIME,,[define if the Boost::Date_Time library is available])
+@@ -110,4 +110,6 @@
+ CPPFLAGS="$CPPFLAGS_SAVED"
+ LDFLAGS="$LDFLAGS_SAVED"
+ fi
++
++ AC_LANG_POP([C++])
+ ])
+--- libreoffice-7.2.2.2.orig/m4/ax_boost_filesystem.m4
++++ libreoffice-7.2.2.2/m4/ax_boost_filesystem.m4
+@@ -67,15 +67,15 @@
+ LIBS="$LIBS $BOOST_SYSTEM_LIB"
+ export LIBS
+
++ AC_LANG_PUSH([C++])
++
+ AC_CACHE_CHECK(whether the Boost::Filesystem library is available,
+ ax_cv_boost_filesystem,
+- [AC_LANG_PUSH([C++])
+- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <boost/filesystem/path.hpp>]],
++ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <boost/filesystem/path.hpp>]],
+ [[using namespace boost::filesystem;
+ path my_path( "foo/bar/data.txt" );
+ return 0;]])],
+ ax_cv_boost_filesystem=yes, ax_cv_boost_filesystem=no)
+- AC_LANG_POP([C++])
+ ])
+ if test "x$ax_cv_boost_filesystem" = "xyes"; then
+ AC_DEFINE(HAVE_BOOST_FILESYSTEM,,[define if the Boost::Filesystem library is available])
+@@ -115,4 +115,6 @@
+ LDFLAGS="$LDFLAGS_SAVED"
+ LIBS="$LIBS_SAVED"
+ fi
++
++ AC_LANG_POP([C++])
+ ])
+--- libreoffice-7.2.2.2.orig/m4/ax_boost_iostreams.m4
++++ libreoffice-7.2.2.2/m4/ax_boost_iostreams.m4
+@@ -61,10 +61,11 @@
+ LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
+ export LDFLAGS
+
++ AC_LANG_PUSH([C++])
++
+ AC_CACHE_CHECK(whether the Boost::IOStreams library is available,
+ ax_cv_boost_iostreams,
+- [AC_LANG_PUSH([C++])
+- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <boost/iostreams/filtering_stream.hpp>
++ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <boost/iostreams/filtering_stream.hpp>
+ @%:@include <boost/range/iterator_range.hpp>
+ ]],
+ [[std::string input = "Hello World!";
+@@ -73,7 +74,6 @@
+ return 0;
+ ]])],
+ ax_cv_boost_iostreams=yes, ax_cv_boost_iostreams=no)
+- AC_LANG_POP([C++])
+ ])
+ if test "x$ax_cv_boost_iostreams" = "xyes"; then
+ AC_DEFINE(HAVE_BOOST_IOSTREAMS,,[define if the Boost::IOStreams library is available])
+@@ -113,4 +113,6 @@
+ CPPFLAGS="$CPPFLAGS_SAVED"
+ LDFLAGS="$LDFLAGS_SAVED"
+ fi
++
++ AC_LANG_POP([C++])
+ ])
+--- libreoffice-7.2.2.2.orig/m4/ax_boost_locale.m4
++++ libreoffice-7.2.2.2/m4/ax_boost_locale.m4
+@@ -62,9 +62,11 @@
+ LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
+ export LDFLAGS
+
++ AC_LANG_PUSH([C++])
++
+ AC_CACHE_CHECK(whether the Boost::Locale library is available,
+ ax_cv_boost_locale,
+- [AC_LANG_PUSH([C++])
++ [
+ CXXFLAGS_SAVE=$CXXFLAGS
+
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <boost/locale.hpp>]],
+@@ -72,7 +74,6 @@
+ std::locale::global(gen(""));]])],
+ ax_cv_boost_locale=yes, ax_cv_boost_locale=no)
+ CXXFLAGS=$CXXFLAGS_SAVE
+- AC_LANG_POP([C++])
+ ])
+ if test "x$ax_cv_boost_locale" = "xyes"; then
+ AC_SUBST(BOOST_CPPFLAGS)
+@@ -116,4 +117,6 @@
+ CPPFLAGS="$CPPFLAGS_SAVED"
+ LDFLAGS="$LDFLAGS_SAVED"
+ fi
++
++ AC_LANG_POP([C++])
+ ])
+--- libreoffice-7.2.2.2.orig/m4/ax_boost_system.m4
++++ libreoffice-7.2.2.2/m4/ax_boost_system.m4
+@@ -64,9 +64,11 @@
+ LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
+ export LDFLAGS
+
++ AC_LANG_PUSH([C++])
++
+ AC_CACHE_CHECK(whether the Boost::System library is available,
+ ax_cv_boost_system,
+- [AC_LANG_PUSH([C++])
++ [
+ CXXFLAGS_SAVE=$CXXFLAGS
+ CXXFLAGS=
+
+@@ -74,7 +76,6 @@
+ [[boost::system::error_category *a = 0;]])],
+ ax_cv_boost_system=yes, ax_cv_boost_system=no)
+ CXXFLAGS=$CXXFLAGS_SAVE
+- AC_LANG_POP([C++])
+ ])
+ if test "x$ax_cv_boost_system" = "xyes"; then
+ AC_SUBST(BOOST_CPPFLAGS)
+@@ -118,4 +119,6 @@
+ CPPFLAGS="$CPPFLAGS_SAVED"
+ LDFLAGS="$LDFLAGS_SAVED"
+ fi
++
++ AC_LANG_POP([C++])
+ ])
diff --git a/repo/libreoffice/disable-liborcus-unittest.patch b/repo/libreoffice/disable-liborcus-unittest.patch
new file mode 100644
index 0000000..318d508
--- /dev/null
+++ b/repo/libreoffice/disable-liborcus-unittest.patch
@@ -0,0 +1,13 @@
+--- a/sc/qa/unit/subsequent_filters-test.cxx
++++ b/sc/qa/unit/subsequent_filters-test.cxx
+@@ -2546,7 +2546,9 @@
+ CPPUNIT_ASSERT_MESSAGE("Style Name1 : Doesn't have Attribute background, but it should have.",
+ pStyleSheet->GetItemSet().HasItem(ATTR_BACKGROUND, &pItem));
+ const SvxBrushItem* pBackground = static_cast<const SvxBrushItem*>(pItem);
+- CPPUNIT_ASSERT_EQUAL(Color(254, 255, 204), pBackground->GetColor());
++ /* This test fails with liborcus >= 0.13.3
++ * CPPUNIT_ASSERT_EQUAL(Color(254, 255, 204), pBackground->GetColor());
++ */
+
+ CPPUNIT_ASSERT_MESSAGE("Style Name1 : Doesn't have Attribute border, but it should have.",
+ pStyleSheet->GetItemSet().HasItem(ATTR_BORDER, &pItem));
diff --git a/repo/libreoffice/fix-execinfo.patch b/repo/libreoffice/fix-execinfo.patch
new file mode 100644
index 0000000..84f3687
--- /dev/null
+++ b/repo/libreoffice/fix-execinfo.patch
@@ -0,0 +1,34 @@
+--- a/sal/osl/unx/backtrace.h
++++ b/sal/osl/unx/backtrace.h
+@@ -20,7 +20,7 @@
+ #ifndef INCLUDED_SAL_OSL_UNX_BACKTRACE_H
+ #define INCLUDED_SAL_OSL_UNX_BACKTRACE_H
+
+-#if defined (LINUX)
++#if defined (LINUX) && defined (__GLIBC__)
+
+ #include <execinfo.h>
+
+--- a/sal/osl/unx/signal.cxx
++++ b/sal/osl/unx/signal.cxx
+@@ -36,7 +36,7 @@
+
+ #endif /* MACOSX */
+
+-#ifdef LINUX
++#if defined(LINUX) && defined(__GLIBC__)
+ #include <execinfo.h>
+ #include <link.h>
+ #define INCLUDE_BACKTRACE
+
+--- a/sal/osl/unx/backtrace.c
++++ b/sal/osl/unx/backtrace.c
+@@ -279,7 +279,7 @@ void backtrace_symbols_fd( void **buffer, int size, int fd )
+ }
+ }
+
+-#elif !defined LINUX && !defined MACOSX && !defined IOS
++#elif !defined LINUX && !defined MACOSX && !defined IOS && !defined(__GLIBC__)
+
+ int backtrace( void **buffer, int max_frames )
+ {
diff --git a/repo/libreoffice/libreoffice-base.xibuild b/repo/libreoffice/libreoffice-base.xibuild
new file mode 100644
index 0000000..b38a445
--- /dev/null
+++ b/repo/libreoffice/libreoffice-base.xibuild
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+DEPS="libreoffice-common"
+DESC="LibreOffice - Database frontend"
+
+splitname="base"
+
+package () {
+ libreoffice_split $splitname
+ add_from_main usr/lib/libreoffice/share/xdg/$splitname.desktop
+}
diff --git a/repo/libreoffice/libreoffice-calc.xibuild b/repo/libreoffice/libreoffice-calc.xibuild
new file mode 100644
index 0000000..c7bc5b2
--- /dev/null
+++ b/repo/libreoffice/libreoffice-calc.xibuild
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+DEPS="libreoffice-common"
+DESC="LibreOffice - Spreadsheet"
+
+splitname="calc"
+
+package () {
+ libreoffice_split $splitname
+ add_from_main usr/lib/libreoffice/share/xdg/$splitname.desktop
+}
diff --git a/repo/libreoffice/libreoffice-common.xibuild b/repo/libreoffice/libreoffice-common.xibuild
new file mode 100644
index 0000000..b726db5
--- /dev/null
+++ b/repo/libreoffice/libreoffice-common.xibuild
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+DEPS="libreoffice-common"
+DESC="LibreOffice - Common Files"
+
+splitname="common"
+
+package () {
+ libreoffice_split $splitname
+}
diff --git a/repo/libreoffice/libreoffice-draw.xibuild b/repo/libreoffice/libreoffice-draw.xibuild
new file mode 100644
index 0000000..cc73569
--- /dev/null
+++ b/repo/libreoffice/libreoffice-draw.xibuild
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+DEPS="libreoffice-common"
+DESC="LibreOffice - Drawing application"
+
+splitname="draw"
+
+package () {
+ libreoffice_split $splitname
+ add_from_main usr/lib/libreoffice/share/xdg/$splitname.desktop
+}
diff --git a/repo/libreoffice/libreoffice-impress.xibuild b/repo/libreoffice/libreoffice-impress.xibuild
new file mode 100644
index 0000000..482203c
--- /dev/null
+++ b/repo/libreoffice/libreoffice-impress.xibuild
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+DEPS="libreoffice-common"
+DESC="LibreOffice - Presentation application"
+
+splitname="impress"
+
+package () {
+ libreoffice_split $splitname
+ add_from_main usr/lib/libreoffice/share/xdg/$splitname.desktop
+}
diff --git a/repo/libreoffice/libreoffice-math.xibuild b/repo/libreoffice/libreoffice-math.xibuild
new file mode 100644
index 0000000..8b4d0a4
--- /dev/null
+++ b/repo/libreoffice/libreoffice-math.xibuild
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+DEPS="libreoffice-common"
+DESC="LibreOffice - Equation Editor"
+
+splitname="math"
+
+package () {
+ libreoffice_split $splitname
+ add_from_main usr/lib/libreoffice/share/xdg/$splitname.desktop
+}
diff --git a/repo/libreoffice/libreoffice-postgres.xibuild b/repo/libreoffice/libreoffice-postgres.xibuild
new file mode 100644
index 0000000..2cac487
--- /dev/null
+++ b/repo/libreoffice/libreoffice-postgres.xibuild
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+DEPS="libreoffice-common"
+DESC="LibreOffice - Connector for postgresql database"
+
+splitname="postgresql"
+
+package () {
+ libreoffice_split $splitname
+}
diff --git a/repo/libreoffice/libreoffice-sdk.xibuild b/repo/libreoffice/libreoffice-sdk.xibuild
new file mode 100644
index 0000000..2106fb0
--- /dev/null
+++ b/repo/libreoffice/libreoffice-sdk.xibuild
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+DEPS="libreoffice-common"
+DESC="LibreOffice - SDK"
+
+splitname="sdk"
+
+package () {
+ libreoffice_split $splitname
+}
diff --git a/repo/libreoffice/libreoffice-writer.xibuild b/repo/libreoffice/libreoffice-writer.xibuild
new file mode 100644
index 0000000..e2c1b74
--- /dev/null
+++ b/repo/libreoffice/libreoffice-writer.xibuild
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+DEPS="libreoffice-common"
+DESC="LibreOffice - Word Processor"
+
+splitname="writer"
+
+package () {
+ libreoffice_split $splitname
+ add_from_main usr/lib/libreoffice/share/xdg/$splitname.desktop
+}
diff --git a/repo/libreoffice/libreoffice.xibuild b/repo/libreoffice/libreoffice.xibuild
new file mode 100644
index 0000000..2cdf242
--- /dev/null
+++ b/repo/libreoffice/libreoffice.xibuild
@@ -0,0 +1,136 @@
+#!/bin/sh
+
+NAME="libreoffice"
+DESC="LibreOffice - Meta package for the full office suite"
+
+MAKEDEPS="apache-ant apr autoconf automake bison bluez boost box2d clucene cppunit cups doxygen findutils flex freetype2 glew glm glu gperf gpgme gst-plugins-base gstreamer gtk3 harfbuzz hunspell hyphen icu junit kconfig lcms2 libabw libcdr libepubgen libetonyek libexecinfo libexttextcat libfreehand libjpeg-turbo libmspub libmwaw libnumbertext libodfgen liborcus libpagemaker libqxp libstaroffice libvisio libwpd libwpg libwps libxml2 libxrandr libxrender libxslt libzmf mdds mythes neon nss libldap openssl perl perl-archive-zip poppler python qt5-qtbase redland sed tar ucpp unixodbc vigra xmlsec xz zip zxing-cpp adoptopenjdk11"
+
+PKG_VER=7.2.6.2
+
+addsrcurl="https://dev-www.libreoffice.org/src"
+case $PKG_VER in
+*.*.*.*) v=${PKG_VER%.*};;
+*.*.*) v=$PKG_VER;;
+esac
+
+SOURCE="https://download.documentfoundation.org/libreoffice/src/$v/libreoffice-$PKG_VER.tar.xz"
+ADDITIONAL="
+ https://download.documentfoundation.org/libreoffice/src/$v/libreoffice-dictionaries-$PKG_VER.tar.xz
+ https://download.documentfoundation.org/libreoffice/src/$v/libreoffice-translations-$PKG_VER.tar.xz
+ $addsrcurl/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip
+ $addsrcurl/3404ab6b1792ae5f16bbd603bd1e1d03-libformula-1.1.7.zip
+ $addsrcurl/35c94d2df8893241173de1d16b6034c0-swingExSrc.zip
+ $addsrcurl/39bb3fcea1514f1369fcfc87542390fd-sacjava-1.3.zip
+ $addsrcurl/3bdf40c0d199af31923e900d082ca2dd-libfonts-1.1.6.zip
+ $addsrcurl/798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip
+ $addsrcurl/8ce2fcd72becf06c41f7201d15373ed9-librepository-1.1.6.zip
+ $addsrcurl/97b2d4dba862397f446b217e2b623e71-libloader-1.1.6.zip
+ $addsrcurl/ace6ab49184e329db254e454a010f56d-libxml-1.1.7.zip
+ $addsrcurl/ba2930200c9f019c2d93a8c88c651a0f-flow-engine-0.9.4.zip
+ $addsrcurl/beeca87be45ec87d241ddd0e1bad80c1-bsh-2.0b6-src.zip
+ $addsrcurl/d8bd5eed178db6e2b18eeed243f85aa8-flute-1.1.6.zip
+ $addsrcurl/db60e4fde8dd6d6807523deb71ee34dc-liblayout-0.2.10.zip
+ $addsrcurl/eeb2c7ddf0d302fba4bfc6e97eac9624-libbase-1.1.6.zip
+ $addsrcurl/f94d9870737518e3b597f9265f4e9803-libserializer-1.1.6.zip
+ $addsrcurl/commons-logging-1.2-src.tar.gz
+ $addsrcurl/dtoa-20180411.tgz
+ $addsrcurl/lxml-4.1.1.tgz
+ $addsrcurl/pdfium-4500.tar.bz2
+ $addsrcurl/skia-m90-45c57e116ee0ce214bdf78405a4762722e4507d9.tar.xz
+ $addsrcurl/QR-Code-generator-1.4.0.tar.gz
+ $addsrcurl/libcmis-0.5.2.tar.xz
+ https://dev-www.libreoffice.org/extern/185d60944ea767075d27247c3162b3bc-unowinreg.dll
+ https://dev-www.libreoffice.org/extern/f543e6e2d7275557a839a164941c0a86e5f2c3f2a0042bfc434c88c6dde9e140-opens___.ttf
+
+autoconf-boost-macros.patch
+disable-liborcus-unittest.patch
+fix-execinfo.patch
+linux-musl.patch
+musl-libintl.patch
+musl-stacksize.patch
+pld-skia-patches.patch
+poppler-22.03.patch
+remove-backtrace.patch
+skia-freetype2.11.diff
+"
+
+unpack() {
+ mkdir -p "$BUILD_ROOT"
+ for u in libreoffice-*.tar.xz; do
+ unxz -c "$s" | tar -C "$BUILD_ROOT" -x
+ done
+}
+
+prepare() {
+ unpack
+ mv "$BUILD_ROOT/skia-freetype2.11.diff" external/skia/"skia-freetype2.11.patch"
+
+ apply_patches
+ NOCONFIGURE=1 ./autogen.sh
+}
+
+build() {
+ export CFLAGS="$CFLAGS -O2"
+ export CPPFLAGS="$CPPFLAGS -O2"
+ export CXXFLAGS="$CXXFLAGS -O2"
+
+ # boost-1.59
+ export CPPFLAGS="$CPPFLAGS -DBOOST_ERROR_CODE_HEADER_ONLY -DBOOST_SYSTEM_NO_DEPRECATED"
+
+ export JAVA_HOME=/usr/lib/jvm/adoptopenjdk11
+ java_conf="
+ "
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var \
+ --disable-online-update \
+ --disable-fetch-external \
+ --disable-dependency-tracking \
+ --enable-release-build \
+ --enable-split-app-modules \
+ --enable-python=system \
+ --with-tls=nss \
+ --with-system-libs \
+ --with-system-dicts \
+ --with-system-ucpp \
+ --with-external-dict-dir=/usr/share/hunspell \
+ --with-external-hyph-dir=/usr/share/hyphen \
+ --with-external-tar="$BUILD_ROOT" \
+ --without-system-jars \
+ --without-system-libcmis \
+ --without-junit \
+ --without-fonts \
+ --without-system-sane \
+ --without-myspell-dicts \
+ --disable-firebird-sdbc \
+ --disable-coinmp \
+ --disable-lpsolve \
+ --enable-gtk3 \
+ --enable-odk \
+ --enable-skia \
+ --enable-gtk3-kde5 \
+ --enable-kf5 \
+ --enable-qt5 \
+ --with-jdk-home=$JAVA_HOME \
+ --with-ant-home=/usr/share/java/apache-ant \
+ --with-java
+
+ make build-nocheck
+}
+
+package() {
+ make DESTDIR="$PKG_DEST"/../all distro-pack-install
+}
+
+libreoffice_split() {
+ local i
+ grep "^[^% ]" $BUILD_ROOT/file-lists/${1}_list.txt | sort -u | while IFS= read -r i; do
+ [ "$i" ] || continue
+ dirname="$(dirname $i)"
+ [ -d "$PKG_DEST/$dirname" ] || install -dm755 "$PKG_DEST/$dirname"
+ add_from_main $i
+ done
+}
diff --git a/repo/libreoffice/linux-musl.patch b/repo/libreoffice/linux-musl.patch
new file mode 100644
index 0000000..9e192bc
--- /dev/null
+++ b/repo/libreoffice/linux-musl.patch
@@ -0,0 +1,60 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -612,7 +612,7 @@
+ fi
+ ;;
+
+-linux-gnu*|k*bsd*-gnu*)
++linux-gnu*|linux-musl*|k*bsd*-gnu*)
+ using_freetype_fontconfig=yes
+ using_x11=yes
+ build_skia=yes
+@@ -4353,7 +4353,7 @@
+ esac
+ ;;
+
+-linux-gnu*)
++linux-gnu*|linux-musl*)
+ COM=GCC
+ USING_X11=TRUE
+ OS=LINUX
+@@ -7672,7 +7672,7 @@
+ test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
+ ;;
+
+- linux-gnu*)
++ linux-gnu*|linux-musl*)
+ JAVAINC="-I$JAVA_HOME/include"
+ JAVAINC="$JAVAINC -I$JAVA_HOME/include/linux"
+ test -d "$JAVA_HOME/include/native_thread" && JAVAINC="$JAVAINC -I$JAVA_HOME/include/native_thread"
+@@ -10260,21 +10260,6 @@
+ AC_SUBST(ENABLE_LIBNUMBERTEXT)
+ AC_SUBST(LIBNUMBERTEXT_CFLAGS)
+
+-dnl ***************************************
+-dnl testing libc version for Linux...
+-dnl ***************************************
+-if test "$_os" = "Linux"; then
+- AC_MSG_CHECKING([whether libc is >= 2.1.1])
+- exec 6>/dev/null # no output
+- AC_CHECK_LIB(c, gnu_get_libc_version, HAVE_LIBC=yes; export HAVE_LIBC)
+- exec 6>&1 # output on again
+- if test "$HAVE_LIBC"; then
+- AC_MSG_RESULT([yes])
+- else
+- AC_MSG_ERROR([no, upgrade libc])
+- fi
+-fi
+-
+ dnl =========================================
+ dnl Check for uuidgen
+ dnl =========================================
+@@ -12812,7 +12812,7 @@
+
+ case "$host_os" in
+
+- aix*|dragonfly*|freebsd*|linux-gnu*|*netbsd*|openbsd*)
++ aix*|dragonfly*|freebsd*|linux-gnu*|linux-musl*|*netbsd*|openbsd*)
+ if test "$ENABLE_JAVA" != ""; then
+ pathmunge "$JAVA_HOME/bin" "after"
+ fi
diff --git a/repo/libreoffice/musl-libintl.patch b/repo/libreoffice/musl-libintl.patch
new file mode 100644
index 0000000..ceaaaff
--- /dev/null
+++ b/repo/libreoffice/musl-libintl.patch
@@ -0,0 +1,15 @@
+diff --git a/unotools/Library_utl.mk b/unotools/Library_utl.mk
+index 0bfcbad..99acee1 100644
+--- a/unotools/Library_utl.mk
++++ b/unotools/Library_utl.mk
+@@ -16,6 +16,10 @@ $(eval $(call gb_Library_use_externals,utl,\
+ boost_locale \
+ ))
+
++$(eval $(call gb_Library_add_libs,utl,\
++ -lintl \
++))
++
+ $(eval $(call gb_Library_use_custom_headers,utl,\
+ officecfg/registry \
+ ))
diff --git a/repo/libreoffice/musl-stacksize.patch b/repo/libreoffice/musl-stacksize.patch
new file mode 100644
index 0000000..5e72205
--- /dev/null
+++ b/repo/libreoffice/musl-stacksize.patch
@@ -0,0 +1,40 @@
+--- a/sal/osl/unx/thread.cxx
++++ b/sal/osl/unx/thread.cxx
+@@ -250,7 +250,7 @@
+ short nFlags)
+ {
+ Thread_Impl* pImpl;
+-#if defined OPENBSD || ((defined MACOSX || defined LINUX) && !ENABLE_RUNTIME_OPTIMIZATIONS)
++#if defined OPENBSD || ((defined MACOSX || defined LINUX) && !ENABLE_RUNTIME_OPTIMIZATIONS) || (defined LINUX && !defined __GLIBC__)
+ pthread_attr_t attr;
+ size_t stacksize;
+ #endif
+
+@@ -266,7 +266,7 @@
+
+ pthread_mutex_lock (&(pImpl->m_Lock));
+
+-#if defined OPENBSD || ((defined MACOSX || defined LINUX) && !ENABLE_RUNTIME_OPTIMIZATIONS)
++#if defined OPENBSD || ((defined MACOSX || defined LINUX) && !ENABLE_RUNTIME_OPTIMIZATIONS) || (defined LINUX && !defined __GLIBC__)
+ if (pthread_attr_init(&attr) != 0)
+ return nullptr;
+
+@@ -283,7 +283,7 @@
+
+ if ((nRet = pthread_create (
+ &(pImpl->m_hThread),
+-#if defined OPENBSD || ((defined MACOSX || defined LINUX) && !ENABLE_RUNTIME_OPTIMIZATIONS)
++#if defined OPENBSD || ((defined MACOSX || defined LINUX) && !ENABLE_RUNTIME_OPTIMIZATIONS) || (defined LINUX && !defined __GLIBC__)
+ &attr,
+ #else
+ PTHREAD_ATTR_DEFAULT,
+
+@@ -301,7 +301,7 @@
+ return nullptr;
+ }
+
+-#if defined OPENBSD || ((defined MACOSX || defined LINUX) && !ENABLE_RUNTIME_OPTIMIZATIONS)
++#if defined OPENBSD || ((defined MACOSX || defined LINUX) && !ENABLE_RUNTIME_OPTIMIZATIONS) || (defined LINUX && !defined __GLIBC__)
+ pthread_attr_destroy(&attr);
+ #endif
+
diff --git a/repo/libreoffice/pld-skia-patches.patch b/repo/libreoffice/pld-skia-patches.patch
new file mode 100644
index 0000000..b54dfe4
--- /dev/null
+++ b/repo/libreoffice/pld-skia-patches.patch
@@ -0,0 +1,10 @@
+--- libreoffice-7.2.2.2/external/skia/UnpackedTarball_skia.mk.orig 2021-08-10 19:27:48.000000000 +0200
++++ libreoffice-7.2.2.2/external/skia/UnpackedTarball_skia.mk 2021-08-12 18:09:22.813517161 +0200
+@@ -41,6 +41,7 @@
+ fix-warnings.patch.1 \
+ disable-freetype-colrv1.1 \
+ windows-libraries-system32.patch.1 \
++ skia-freetype2.11.patch \
+
+ $(eval $(call gb_UnpackedTarball_set_patchlevel,skia,1))
+
diff --git a/repo/libreoffice/poppler-22.03.patch b/repo/libreoffice/poppler-22.03.patch
new file mode 100644
index 0000000..daa16a2
--- /dev/null
+++ b/repo/libreoffice/poppler-22.03.patch
@@ -0,0 +1,39 @@
+Patch-Source: https://github.com/archlinux/svntogit-packages/blob/2c89c1f968a5f8a6f260a4b91f19f43fae433520/trunk/poppler-22.03.0.patch
+edited to add <memory> import
+diff --git a/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx b/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx
+index ad6320139..e5f6d9c68 100644
+--- a/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx
++++ b/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx
+@@ -28,6 +28,8 @@
+ #include <config_folders.h> //LIBO_SHARE_FOLDER
+ #endif
+
++#include <memory>
++
+ FILE* g_binary_out=stderr;
+
+ static const char *ownerPassword = "\001";
+@@ -138,6 +138,15 @@ int main(int argc, char **argv)
+ _setmode( _fileno( g_binary_out ), _O_BINARY );
+ #endif
+
++#if POPPLER_CHECK_VERSION(22, 3, 0)
++ PDFDoc aDoc( std::make_unique<GooString>(pFileName),
++ GooString(pOwnerPasswordStr),
++ GooString(pUserPasswordStr) );
++
++ PDFDoc aErrDoc( std::make_unique<GooString>(pErrFileName),
++ GooString(pOwnerPasswordStr),
++ GooString(pUserPasswordStr) );
++#else
+ PDFDoc aDoc( pFileName,
+ pOwnerPasswordStr,
+ pUserPasswordStr );
+@@ -145,6 +154,7 @@ int main(int argc, char **argv)
+ PDFDoc aErrDoc( pErrFileName,
+ pOwnerPasswordStr,
+ pUserPasswordStr );
++#endif
+
+ // Check various permissions for aDoc.
+ PDFDoc &rDoc = aDoc.isOk()? aDoc: aErrDoc;
diff --git a/repo/libreoffice/remove-backtrace.patch b/repo/libreoffice/remove-backtrace.patch
new file mode 100644
index 0000000..f4eda53
--- /dev/null
+++ b/repo/libreoffice/remove-backtrace.patch
@@ -0,0 +1,163 @@
+diff --git a/sal/Library_sal.mk b/sal/Library_sal.mk
+index d783c84e3..555efd664 100644
+--- a/sal/Library_sal.mk
++++ b/sal/Library_sal.mk
+@@ -156,7 +156,6 @@ endif
+
+ ifneq ($(OS),WNT)
+ $(eval $(call gb_Library_add_exception_objects,sal,\
+- sal/osl/unx/backtraceapi \
+ sal/osl/unx/conditn \
+ sal/osl/unx/file \
+ sal/osl/unx/file_error_transl \
+diff --git a/sal/osl/all/log.cxx b/sal/osl/all/log.cxx
+index c493f4ddf..f8f4fab62 100644
+--- a/sal/osl/all/log.cxx
++++ b/sal/osl/all/log.cxx
+@@ -283,9 +283,6 @@ void sal_detail_log(
+ ? nStrLen : 0));
+ }
+ s << message;
+- if (backtraceDepth != 0) {
+- s << " at:\n" << osl::detail::backtraceAsString(backtraceDepth);
+- }
+
+ #if defined ANDROID
+ int android_log_level;
+diff --git a/sal/osl/unx/backtraceapi.cxx b/sal/osl/unx/backtraceapi.cxx
+deleted file mode 100644
+index d11128353..000000000
+--- a/sal/osl/unx/backtraceapi.cxx
++++ /dev/null
+@@ -1,72 +0,0 @@
+-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+-/*
+- * This file is part of the LibreOffice project.
+- *
+- * This Source Code Form is subject to the terms of the Mozilla Public
+- * License, v. 2.0. If a copy of the MPL was not distributed with this
+- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+- */
+-
+-#include <sal/config.h>
+-
+-#include <cassert>
+-#include <cstdlib>
+-#include <limits>
+-#include <memory>
+-
+-#include <o3tl/runtimetooustring.hxx>
+-#include <rtl/ustrbuf.hxx>
+-#include <rtl/ustring.hxx>
+-#include <sal/types.h>
+-#include <sal/backtrace.hxx>
+-
+-#include "backtrace.h"
+-#include <backtraceasstring.hxx>
+-
+-namespace {
+-
+-struct FreeGuard {
+- FreeGuard(char ** theBuffer): buffer(theBuffer) {}
+-
+- ~FreeGuard() { std::free(buffer); }
+-
+- char ** buffer;
+-};
+-
+-}
+-
+-OUString osl::detail::backtraceAsString(sal_uInt32 maxDepth) {
+- std::unique_ptr<sal::BacktraceState> backtrace = sal::backtrace_get( maxDepth );
+- return sal::backtrace_to_string( backtrace.get());
+-}
+-
+-std::unique_ptr<sal::BacktraceState> sal::backtrace_get(sal_uInt32 maxDepth)
+-{
+- assert(maxDepth != 0);
+- auto const maxInt = static_cast<unsigned int>(
+- std::numeric_limits<int>::max());
+- if (maxDepth > maxInt) {
+- maxDepth = static_cast<sal_uInt32>(maxInt);
+- }
+- auto b1 = new void *[maxDepth];
+- int n = backtrace(b1, static_cast<int>(maxDepth));
+- return std::unique_ptr<BacktraceState>(new BacktraceState{ b1, n });
+-}
+-
+-OUString sal::backtrace_to_string(BacktraceState* backtraceState)
+-{
+- FreeGuard b2(backtrace_symbols(backtraceState->buffer, backtraceState->nDepth));
+- if (b2.buffer == nullptr) {
+- return OUString();
+- }
+- OUStringBuffer b3;
+- for (int i = 0; i != backtraceState->nDepth; ++i) {
+- if (i != 0) {
+- b3.append("\n");
+- }
+- b3.append(o3tl::runtimeToOUString(b2.buffer[i]));
+- }
+- return b3.makeStringAndClear();
+-}
+-
+-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+diff --git a/svl/source/notify/lstner.cxx b/svl/source/notify/lstner.cxx
+index 40a59960a..3efcc004c 100644
+--- a/svl/source/notify/lstner.cxx
++++ b/svl/source/notify/lstner.cxx
+@@ -80,13 +80,6 @@ void SfxListener::StartListening(SfxBroadcaster& rBroadcaster, DuplicateHandling
+ {
+ bool bListeningAlready = IsListening( rBroadcaster );
+
+-#ifdef DBG_UTIL
+- if (bListeningAlready && eDuplicateHanding == DuplicateHandling::Unexpected)
+- {
+- auto f = maCallStacks.find( &rBroadcaster );
+- SAL_WARN("svl", "previous StartListening call came from: " << sal::backtrace_to_string(f->second.get()));
+- }
+-#endif
+ assert(!(bListeningAlready && eDuplicateHanding == DuplicateHandling::Unexpected) && "duplicate listener, try building with DBG_UTIL to find the other insert site.");
+
+ if (!bListeningAlready || eDuplicateHanding != DuplicateHandling::Prevent)
+diff --git a/sw/source/core/attr/calbck.cxx b/sw/source/core/attr/calbck.cxx
+index 3f4253cd2..8af3ee184 100644
+--- a/sw/source/core/attr/calbck.cxx
++++ b/sw/source/core/attr/calbck.cxx
+@@ -170,18 +170,6 @@ bool SwModify::GetInfo( SfxPoolItem& rInfo ) const
+ void SwModify::Add( SwClient* pDepend )
+ {
+ DBG_TESTSOLARMUTEX();
+-#ifdef DBG_UTIL
+- // You should not EVER use SwModify directly in new code:
+- // - Preexisting SwModifys should only ever be used via sw::BroadcastingModify.
+- // This includes sw::BroadcastMixin, which is the long-term target (without
+- // SwModify).
+- // - New classes should use sw::BroadcastMixin alone.
+- if(!dynamic_cast<sw::BroadcastingModify*>(this))
+- {
+- auto pBT = sal::backtrace_get(20);
+- SAL_WARN("sw.core", "Modify that is not broadcasting used!\n" << sal::backtrace_to_string(pBT.get()));
+- }
+-#endif
+
+ if(pDepend->m_pRegisteredIn == this)
+ return;
+diff --git a/sw/source/core/docnode/node.cxx b/sw/source/core/docnode/node.cxx
+index 4f7b18ba3..fbd2eb361 100644
+--- a/sw/source/core/docnode/node.cxx
++++ b/sw/source/core/docnode/node.cxx
+@@ -1164,13 +1164,6 @@ void SwContentNode::SwClientNotify( const SwModify&, const SfxHint& rHint)
+ // This makes the crude "WhichId" type divert from the true type, which is bad.
+ // Thus we are asserting here, but falling back to an proper
+ // hint instead. so that we at least will not spread such poison further.
+-#ifdef DBG_UTIL
+- if(pLegacyHint->m_pNew != pLegacyHint->m_pOld)
+- {
+- auto pBT = sal::backtrace_get(20);
+- SAL_WARN("sw.core", "UpdateAttr not matching! " << sal::backtrace_to_string(pBT.get()));
+- }
+-#endif
+ assert(pLegacyHint->m_pNew == pLegacyHint->m_pOld);
+ assert(dynamic_cast<const SwUpdateAttr*>(pLegacyHint->m_pNew));
+ const SwUpdateAttr aFallbackHint(0,0,0);
diff --git a/repo/libreoffice/skia-freetype2.11.diff b/repo/libreoffice/skia-freetype2.11.diff
new file mode 100644
index 0000000..97be7f2
--- /dev/null
+++ b/repo/libreoffice/skia-freetype2.11.diff
@@ -0,0 +1,37 @@
+--- skia/src/ports/SkFontHost_FreeType_common.cpp.orig 2021-03-01 15:53:09.178606791 +0100
++++ skia/src/ports/SkFontHost_FreeType_common.cpp 2021-08-12 17:48:32.358901987 +0200
+@@ -665,8 +665,13 @@
+ canvas->drawPaint(paint);
+ break;
+ }
++#if FREETYPE_MAJOR == 2 && FREETYPE_MINOR >= 11
++ case FT_COLR_PAINTFORMAT_TRANSFORM: {
++ SkMatrix transform = ToSkMatrix(colrv1_paint.u.transform.affine);
++#else
+ case FT_COLR_PAINTFORMAT_TRANSFORMED: {
+ SkMatrix transform = ToSkMatrix(colrv1_paint.u.transformed.affine);
++#endif
+
+ canvas->concat(transform);
+ break;
+@@ -760,12 +765,20 @@
+ traverse_result = colrv1_start_glyph(canvas, palette, face, paint.u.colr_glyph.glyphID,
+ FT_COLOR_NO_ROOT_TRANSFORM);
+ break;
++#if FREETYPE_MAJOR == 2 && FREETYPE_MINOR >= 11
++ case FT_COLR_PAINTFORMAT_TRANSFORM:
++#else
+ case FT_COLR_PAINTFORMAT_TRANSFORMED:
++#endif
+ canvas->saveLayer(nullptr, nullptr);
+ // Traverse / draw operation will apply transform.
+ colrv1_draw_paint(canvas, palette, face, paint);
+ traverse_result =
++#if FREETYPE_MAJOR == 2 && FREETYPE_MINOR >= 11
++ colrv1_traverse_paint(canvas, palette, face, paint.u.transform.paint);
++#else
+ colrv1_traverse_paint(canvas, palette, face, paint.u.transformed.paint);
++#endif
+ canvas->restore();
+ break;
+ case FT_COLR_PAINTFORMAT_ROTATE:
diff --git a/repo/librevenge/librevenge.xibuild b/repo/librevenge/librevenge.xibuild
new file mode 100644
index 0000000..3c5c224
--- /dev/null
+++ b/repo/librevenge/librevenge.xibuild
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+NAME="librevenge"
+DESC="Base library for writing document import filters"
+
+MAKEDEPS="boost zlib cppunit doxygen"
+
+PKG_VER=0.0.4
+SOURCE="https://sourceforge.net/projects/libwpd/files/librevenge/librevenge-$PKG_VER/librevenge-$PKG_VER.tar.xz"
+
+build() {
+ # workaround for boost-1.59
+ # http://sourceforge.net/p/libwpd/tickets/6/
+ # http://sourceforge.net/p/libwpd/librevenge/ci/0beee70d1bf52f0d81b60ee8c373e477991fe546/
+ export CPPFLAGS=-DBOOST_ERROR_CODE_HEADER_ONLY
+
+ CXXFLAGS="$CXXFLAGS -Wno-error=implicit-fallthrough -Wno-error=parentheses" \
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var \
+ --disable-dependency-tracking \
+ --enable-fast-install
+ make
+}
+
+check() {
+ make check
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/libstaroffice/fix-maybe-uninitialized.patch b/repo/libstaroffice/fix-maybe-uninitialized.patch
new file mode 100644
index 0000000..b4f1ec9
--- /dev/null
+++ b/repo/libstaroffice/fix-maybe-uninitialized.patch
@@ -0,0 +1,11 @@
+--- a/src/lib/StarGraphicStruct.cxx
++++ b/src/lib/StarGraphicStruct.cxx
+@@ -152,7 +152,7 @@
+ {
+ if (!pattern) return false;
+ STOFFVec2i sz(8,8);
+- unsigned tmpBufferPosition, tmpDIBFileSize;
++ unsigned tmpBufferPosition, tmpDIBFileSize = 0;
+ auto tmpDIBBuffer=createAndInitBMPData(sz, tmpDIBFileSize, tmpBufferPosition);
+ if (!tmpDIBBuffer) return false;
+
diff --git a/repo/libstaroffice/libstaroffice.xibuild b/repo/libstaroffice/libstaroffice.xibuild
new file mode 100644
index 0000000..47c0985
--- /dev/null
+++ b/repo/libstaroffice/libstaroffice.xibuild
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+NAME="libstaroffice"
+DESC="Import filter for StarOffice documents"
+
+MAKEDEPS="zlib boost librevenge doxygen"
+
+PKG_VER=0.0.7
+SOURCE="https://github.com/fosnola/libstaroffice/releases/download/$PKG_VER/libstaroffice-$PKG_VER.tar.xz"
+
+ADDITIONAL="
+fix-maybe-uninitialized.patch
+"
+
+prepare() {
+ apply_patches
+}
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
diff --git a/repo/liburing/liburing.xibuild b/repo/liburing/liburing.xibuild
new file mode 100644
index 0000000..16dea1e
--- /dev/null
+++ b/repo/liburing/liburing.xibuild
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+NAME="liburing"
+DESC="Linux kernel io_uring access library"
+
+MAKEDEPS="linux-headers"
+
+PKG_VER=2.1
+SOURCE="https://git.kernel.dk/cgit/liburing/snapshot/liburing-$PKG_VER.tar.gz"
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --mandir=/usr/share/man
+}
+
+check() {
+ make test
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/libvisio/libvisio.xibuild b/repo/libvisio/libvisio.xibuild
new file mode 100644
index 0000000..28d1145
--- /dev/null
+++ b/repo/libvisio/libvisio.xibuild
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+NAME="libvisio"
+DESC="Import filter and tools for MS Visio Diagrams"
+
+MAKEDEPS="doxygen gperf perl icu librevenge libxml2"
+
+PKG_VER=0.1.7
+SOURCE="https://dev-www.libreoffice.org/src/libvisio/libvisio-$PKG_VER.tar.xz"
+
+build() {
+ # boost -1.59
+ export CPPFLAGS='-DBOOST_ERROR_CODE_HEADER_ONLY -DBOOST_SYSTEM_NO_DEPRECATED'
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var
+ make
+}
+
+check() {
+ make check
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
diff --git a/repo/libwpd/libwpd-gcc11.patch b/repo/libwpd/libwpd-gcc11.patch
new file mode 100644
index 0000000..6fcad1e
--- /dev/null
+++ b/repo/libwpd/libwpd-gcc11.patch
@@ -0,0 +1,25 @@
+diff --git a/src/lib/WPXContentListener.cpp b/src/lib/WPXContentListener.cpp
+index ab0f9b1..0b559e6 100644
+--- a/src/lib/WPXContentListener.cpp
++++ b/src/lib/WPXContentListener.cpp
+@@ -23,6 +23,7 @@
+ * Corel Corporation or Corel Corporation Limited."
+ */
+
++#include <cstddef>
+ #include "WPXContentListener.h"
+ #include "WPXPageSpan.h"
+ #include "libwpd_internal.h"
+diff --git a/src/lib/WPXTable.cpp b/src/lib/WPXTable.cpp
+index 0ad202a..3ff35e1 100644
+--- a/src/lib/WPXTable.cpp
++++ b/src/lib/WPXTable.cpp
+@@ -25,6 +25,8 @@
+ * Corel Corporation or Corel Corporation Limited."
+ */
+
++#include <cstddef>
++
+ #include "WPXTable.h"
+
+ #include "libwpd_internal.h"
diff --git a/repo/libwpd/libwpd.xibuild b/repo/libwpd/libwpd.xibuild
new file mode 100644
index 0000000..a50c109
--- /dev/null
+++ b/repo/libwpd/libwpd.xibuild
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+NAME="libwpd"
+DESC="Import filter and tools for WordPerfect Documents"
+
+MAKEDEPS=" librevenge doxygen"
+
+PKG_VER=0.10.3
+SOURCE="https://downloads.sourceforge.net/project/libwpd/libwpd/libwpd-$PKG_VER/libwpd-$PKG_VER.tar.bz2"
+
+ADDITIONAL="
+libwpd-gcc11.patch
+"
+
+prepare() {
+ apply_patches
+}
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/libwpg/libwpg.xibuild b/repo/libwpg/libwpg.xibuild
new file mode 100644
index 0000000..85c77b3
--- /dev/null
+++ b/repo/libwpg/libwpg.xibuild
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+NAME="libwpg"
+DESC="Import filter and tools for WordPerfect Graphics"
+
+MAKEDEPS=" doxygen librevenge libwpd"
+
+PKG_VER=0.3.3
+SOURCE="https://downloads.sourceforge.net/project/libwpg/libwpg/libwpg-$PKG_VER/libwpg-$PKG_VER.tar.bz2"
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
+tools() {
+ mkdir -p "$PKG_DEST"/usr
+ mv "$PKG_DEST"/usr/bin "$PKG_DEST"/usr
+}
+
diff --git a/repo/libwps/libwps.xibuild b/repo/libwps/libwps.xibuild
new file mode 100644
index 0000000..7b7e262
--- /dev/null
+++ b/repo/libwps/libwps.xibuild
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+NAME="libwps"
+DESC="Import filter and tools for Microsoft Works files"
+
+MAKEDEPS=" librevenge doxygen"
+
+PKG_VER=0.4.12
+SOURCE="https://downloads.sourceforge.net/project/libwps/libwps/libwps-$PKG_VER/libwps-$PKG_VER.tar.bz2"
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
diff --git a/repo/libzmf/libzmf.xibuild b/repo/libzmf/libzmf.xibuild
new file mode 100644
index 0000000..1965f42
--- /dev/null
+++ b/repo/libzmf/libzmf.xibuild
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+NAME="libzmf"
+DESC="Import filter and tools for Zoner Callisto/Draw documents"
+
+MAKEDEPS="boost icu libpng zlib librevenge doxygen"
+
+PKG_VER=0.0.2
+SOURCE="https://dev-www.libreoffice.org/src/libzmf/libzmf-$PKG_VER.tar.xz"
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var \
+ --disable-werror
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/linux-headers/linux-headers.xibuild b/repo/linux-headers/linux-headers.xibuild
index be97e70..77849f8 100644
--- a/repo/linux-headers/linux-headers.xibuild
+++ b/repo/linux-headers/linux-headers.xibuild
@@ -4,7 +4,7 @@ MAKEDEPS="make cpio bc perl libelf kmod xmlto xz"
DEPS="pahole"
DESC="Linux kernel headers"
-PKG_VER=5.18.2
+PKG_VER=5.18.3
SOURCE=https://cdn.kernel.org/pub/linux/kernel/v${PKG_VER%%.*}.x/linux-$PKG_VER.tar.xz
build () {
diff --git a/repo/linux-libre/linux-libre.xibuild b/repo/linux-libre/linux-libre.xibuild
index a4b883f..32e6a31 100644
--- a/repo/linux-libre/linux-libre.xibuild
+++ b/repo/linux-libre/linux-libre.xibuild
@@ -3,7 +3,7 @@
MAKEDEPS="make bc linux-headers cpio"
DEPS="sbase kmod"
-PKG_VER=5.18.2
+PKG_VER=5.18.3
SOURCE=https://cdn.kernel.org/pub/linux/kernel/v${PKG_VER%%.*}.x/linux-$PKG_VER.tar.xz
ADDITIONAL="
fix-sbase-coreutils.patch
diff --git a/repo/linux/linux.xibuild b/repo/linux/linux.xibuild
index 6571211..b3a119c 100644
--- a/repo/linux/linux.xibuild
+++ b/repo/linux/linux.xibuild
@@ -3,7 +3,7 @@
MAKEDEPS="make bc cpio linux-headers"
DEPS="sbase kmod"
-PKG_VER=5.18.2
+PKG_VER=5.18.3
SOURCE=https://cdn.kernel.org/pub/linux/kernel/v${PKG_VER%%.*}.x/linux-$PKG_VER.tar.xz
ADDITIONAL="
fix-sbase-coreutils.patch
diff --git a/repo/lua/lua.xibuild b/repo/lua/lua.xibuild
index 167fd70..738241d 100644
--- a/repo/lua/lua.xibuild
+++ b/repo/lua/lua.xibuild
@@ -35,26 +35,42 @@ prepare () {
}
build () {
- ./configure \
+ ./configure \
--prefix=/usr
cd src
CFLAGS="$CFLAGS -DLUA_USE_LINUX -DLUA_COMPAT_5_2" \
SYSLDFLAGS="$LDFLAGS" \
+ LIB_LIBS="-lpthread -lm -ldl -lreadline" \
RPATH="/usr/lib" make
}
package () {
cd ..
sed -i "s/INSTALL= install -p/INSTALL= install/g" Makefile
- make V=${PKG_VER%.*} \
- INSTALL_TOP="$PKG_DEST"/usr \
- INSTALL_INC="$PKG_DEST"/usr/include/lua${PKG_VER%.*} \
- INSTALL_LIB="$PKG_DEST"/usr/lib/lua${PKG_VER%.*} install
+ mkdir -p $PKG_DEST/usr/lib
+ mkdir -p $PKG_DEST/usr/bin
+ make V=$PKG_VER \
+ INSTALL_TOP="$PKG_DEST/usr" \
+ INSTALL_INC="$PKG_DEST/usr/include" \
+ INSTALL_LIB="$PKG_DEST/usr/lib" \
+ install
+ install -D -m 644 src/liblua.so.5.4.4.4 "$PKG_DEST"/usr/lib/liblua.so.5.4.4.4
+ ln -sf liblua.so.5.4.4.4 $PKG_DEST/usr/lib/liblua.so.5.4.4
+ ln -sf liblua.so.5.4.4.4 $PKG_DEST/usr/lib/liblua.so
- mkdir -p $PKG_DEST/usr/share/doc/lua-$PKG_VER
- for s in html css gif png; do
- cp doc/*.$s $PKG_DEST/usr/share/doc/lua-$PKG_VER
- done
- install -Dm644 lua5.4.pc "$PKG_DEST"/usr/lib/pkgconfig/lua5.4.pc
+
+ install -D -m 644 lua5.4.pc "$PKG_DEST"/usr/lib/pkgconfig/lua${PKG_VER%.*}.pc
+ install -D -m 644 doc/lua.1 "$PKG_DEST"/usr/share/man/man1/lua$PKG_VER
+ install -D -m 644 doc/luac.1 "$PKG_DEST"/usr/share/man/man1/luac$PKG_VER
+
+ mkdir -p "$PKG_DEST"/usr/share/doc/lua5-3/
+ install -m644 doc/*.html doc/*.css doc/logo.gif doc/cover.png \
+ "$PKG_DEST"/usr/share/doc/lua5-3/
+
+ ln -s lua${PKG_VER%.*} "$PKG_DEST"/usr/bin/lua
+ ln -s luac${PKG_VER%.*}.a "$PKG_DEST"/usr/bin/luac
+ ln -s lua${PKG_VER%.*}.pc "$PKG_DEST"/usr/lib/pkgconfig/lua.pc
+ ln -s lua${PKG_VER} "$PKG_DEST"/usr/share/man/man1/lua.1
+ ln -s luac${PKG_VER} "$PKG_DEST"/usr/share/man/man1/luac.1
}
diff --git a/repo/lua5-1/lua5-1.xibuild b/repo/lua5-1/lua5-1.xibuild
index 5fc5f80..4788aa7 100644
--- a/repo/lua5-1/lua5-1.xibuild
+++ b/repo/lua5-1/lua5-1.xibuild
@@ -45,7 +45,7 @@ build () {
SYSLDFLAGS="$LDFLAGS" \
LIB_LIBS="-lpthread -lm -ldl" \
RPATH="/usr/lib" \
- V=${PKG_VER%.*} alpine_all
+ V=${PKG_VER%.*}
}
package () {
@@ -55,7 +55,6 @@ package () {
INSTALL_TOP="$PKG_DEST/usr" \
INSTALL_INC="$PKG_DEST/usr/include" \
INSTALL_LIB="$PKG_DEST/usr/lib" \
- alpine_install
install -D -m 644 etc/lua.pc "$PKG_DEST"/usr/lib/pkgconfig/lua5.1.pc
install -D -m 644 doc/lua.1 "$PKG_DEST"/usr/share/man/man1/lua5.1.1
@@ -65,13 +64,5 @@ package () {
install -m644 doc/*.html doc/*.css doc/logo.gif doc/cover.png \
"$PKG_DEST"/usr/share/doc/lua5-1/
- # Create symlinks without version suffix.
- ln -s lua5.1 "$PKG_DEST"/usr/bin/lua
- ln -s luac5.1 "$PKG_DEST"/usr/bin/luac
- ln -s lua5.1.pc "$PKG_DEST"/usr/lib/pkgconfig/lua.pc
- ln -s lua5.1.1 "$PKG_DEST"/usr/share/man/man1/lua.1
- ln -s luac5.1.1 "$PKG_DEST"/usr/share/man/man1/luac.1
-
-
install -m644 -D etc/lua.pc $PKG_DEST/usr/lib/pkgconfig/lua5.1.pc
}
diff --git a/repo/lvm2/device-mapper-udev.post-install b/repo/lvm2/device-mapper-udev.post-install
new file mode 100644
index 0000000..95a3590
--- /dev/null
+++ b/repo/lvm2/device-mapper-udev.post-install
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+udevadm control --reload-rules
+udevadm trigger
+
+exit 0
diff --git a/repo/lvm2/device-mapper-udev.post-upgrade b/repo/lvm2/device-mapper-udev.post-upgrade
new file mode 100644
index 0000000..95a3590
--- /dev/null
+++ b/repo/lvm2/device-mapper-udev.post-upgrade
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+udevadm control --reload-rules
+udevadm trigger
+
+exit 0
diff --git a/repo/lvm2/device-mapper.xibuild b/repo/lvm2/device-mapper.xibuild
new file mode 100644
index 0000000..ed259e6
--- /dev/null
+++ b/repo/lvm2/device-mapper.xibuild
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+DESC="Device mapper userspace library and tools from LVM2"
+DEPS="lvm2"
+
+package () {
+ install -Dm755 "$BUILD_ROOT"/dmeventd.initd "$PKG_DEST"/etc/init.d/dmeventd
+
+ add_from_main sbin/dmeventd
+ add_from_main "usr/lib/libdevmapper.a"
+ add_from_main "lib/libdevmapper-event.so.*"
+ add_from_main "sbin/dm*"
+ add_from_main "usr/sbin/dm*"
+ add_from_main "lib/libdevmapper.so.*"
+ rm -f "$PKG_DEST"/usr/sbin/dmstats
+
+}
diff --git a/repo/lvm2/dmeventd.initd b/repo/lvm2/dmeventd.initd
new file mode 100644
index 0000000..c46f8ba
--- /dev/null
+++ b/repo/lvm2/dmeventd.initd
@@ -0,0 +1,26 @@
+#!/sbin/openrc-run
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/sys-fs/lvm2/files/dmeventd.initd-2.02.67-r1,v 1.3 2014/02/08 21:17:46 robbat2 Exp $
+
+PIDFILE=/run/dmeventd.pid
+BIN=/sbin/dmeventd
+
+depend() {
+ # As of .67-r1, we call ALL lvm start/stop scripts with --sysinit, that
+ # means dmeventd is NOT notified, as it cannot be safely running
+ after lvm device-mapper
+}
+
+start() {
+ ebegin "Starting dmeventd"
+ start-stop-daemon --start --exec $BIN --pidfile $PIDFILE
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping dmeventd"
+ start-stop-daemon --stop --exec $BIN --pidfile $PIDFILE
+ eend $?
+}
+
diff --git a/repo/lvm2/fix-stdio-usage.patch b/repo/lvm2/fix-stdio-usage.patch
new file mode 100644
index 0000000..5ac99fd
--- /dev/null
+++ b/repo/lvm2/fix-stdio-usage.patch
@@ -0,0 +1,49 @@
+--- ./tools/lvmcmdline.c
++++ ./tools/lvmcmdline.c
+@@ -1252,7 +1252,7 @@
+ int err = is_valid_fd(STDERR_FILENO);
+
+ if (!is_valid_fd(STDIN_FILENO) &&
+- !(stdin = fopen(_PATH_DEVNULL, "r"))) {
++ !freopen(_PATH_DEVNULL, "r", stdin)) {
+ if (err)
+ perror("stdin stream open");
+ else
+@@ -1262,7 +1262,7 @@
+ }
+
+ if (!is_valid_fd(STDOUT_FILENO) &&
+- !(stdout = fopen(_PATH_DEVNULL, "w"))) {
++ !freopen(_PATH_DEVNULL, "w", stdout)) {
+ if (err)
+ perror("stdout stream open");
+ /* else no stdout */
+@@ -1270,7 +1270,7 @@
+ }
+
+ if (!is_valid_fd(STDERR_FILENO) &&
+- !(stderr = fopen(_PATH_DEVNULL, "w"))) {
++ !freopen(_PATH_DEVNULL, "w", stderr)) {
+ printf("stderr stream open: %s\n",
+ strerror(errno));
+ return 0;
+--- ./lib/commands/toolcontext.c
++++ ./lib/commands/toolcontext.c
+@@ -1869,7 +1869,7 @@
+ /* FIXME Make this configurable? */
+ reset_lvm_errno(1);
+
+-#ifndef VALGRIND_POOL
++#if !defined(VALGRIND_POOL) && defined(__GLIBC__)
+ /* Set in/out stream buffering before glibc */
+ if (set_buffering
+ #ifdef SYS_gettid
+@@ -2274,7 +2274,7 @@
+
+ if (cmd->pending_delete_mem)
+ dm_pool_destroy(cmd->pending_delete_mem);
+-#ifndef VALGRIND_POOL
++#if !defined(VALGRIND_POOL) && defined(__GLIBC__)
+ if (cmd->linebuffer) {
+ /* Reset stream buffering to defaults */
+ if (is_valid_fd(STDIN_FILENO) &&
diff --git a/repo/lvm2/library_dir-default-config.patch b/repo/lvm2/library_dir-default-config.patch
new file mode 100644
index 0000000..6e3b958
--- /dev/null
+++ b/repo/lvm2/library_dir-default-config.patch
@@ -0,0 +1,10 @@
+--- ./conf/example.conf.in.orig
++++ ./conf/example.conf.in
+@@ -694,6 +694,7 @@
+ # Configuration option global/library_dir.
+ # Search this directory first for shared libraries.
+ # This configuration option does not have a default value defined.
++ library_dir="/lib/device-mapper"
+
+ # Configuration option global/locking_library.
+ # The external locking library to use for locking_type 2.
diff --git a/repo/lvm2/lvm.confd b/repo/lvm2/lvm.confd
new file mode 100644
index 0000000..9d150f6
--- /dev/null
+++ b/repo/lvm2/lvm.confd
@@ -0,0 +1,5 @@
+# LVM should normally only be started after mdadm-raid is available
+# this is because LVM physical volumes are very often MD devices.
+
+rc_after="mdadm-raid"
+
diff --git a/repo/lvm2/lvm.initd b/repo/lvm2/lvm.initd
new file mode 100644
index 0000000..db6adbe
--- /dev/null
+++ b/repo/lvm2/lvm.initd
@@ -0,0 +1,38 @@
+#!/sbin/openrc-run
+
+depend() {
+ before checkfs fsck swap
+ after hwdrivers modules device-mapper
+}
+
+dm_in_proc() {
+ local rc=0 i=
+ for i in devices misc; do
+ grep -qs 'device-mapper' /proc/$i
+ rc=$(($rc + $?))
+ done
+ return $rc
+}
+
+start() {
+ local rc=0 msg=
+ ebegin "Setting up the Logical Volume Manager"
+ if [ -e /proc/modules ] && ! dm_in_proc; then
+ modprobe dm-mod 2>/dev/null
+ fi
+ if [ -d /proc/lvm ] || dm_in_proc; then
+ vgscan --mknodes --ignorelockingfailure >/dev/null 2>&1
+ vgchange --sysinit --activate y >/dev/null 2>&1
+ rc=$?
+ else
+ rc=1
+ fi
+ eend $rc
+}
+
+stop() {
+ ebegin "Shutting down the Logical Volume Manager"
+ vgchange --ignorelockingfailure -a n >/dev/null 2>&1
+ eend $?
+}
+
diff --git a/repo/lvm2/lvm2.xibuild b/repo/lvm2/lvm2.xibuild
new file mode 100644
index 0000000..1d7f0bd
--- /dev/null
+++ b/repo/lvm2/lvm2.xibuild
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+NAME="lvm2"
+DESC="Logical Volume Manager 2 utilities"
+
+MAKEDEPS="linux-headers libaio util-linux"
+
+PKG_VER=2.02.187
+SOURCE="https://mirrors.kernel.org/sourceware/lvm2/LVM2.$PKG_VER.tgz"
+
+ADDITIONAL="
+dmeventd.initd
+fix-stdio-usage.patch
+library_dir-default-config.patch
+lvm.confd
+lvm.initd
+mallinfo.patch
+mlockall-default-config.patch
+"
+
+prepare() {
+ apply_patches
+ sed -i "s/fmt -1/fmt/" make.tmpl.in
+ sed -i "s/@MKDIR_P@/mkdir -p/" make.tmpl.in
+ sed -i "s/@INSTALL@/install/" make.tmpl.in
+ sed -i "s/\$(INSTALL) -p/\$(INSTALL)/" make.tmpl.in
+ autoreconf -vif
+}
+
+build() {
+ # during cross-compilation malloc test goes wrong
+ export ac_cv_func_malloc_0_nonnull=yes
+ export ac_cv_func_realloc_0_nonnull=yes
+
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --libdir=/lib \
+ --sbindir=/sbin \
+ --localstatedir=/var \
+ --disable-nls \
+ --disable-readline \
+ --enable-pkgconfig \
+ --enable-applib \
+ --with-thin=internal \
+ --enable-dmeventd \
+ --enable-cmdlib \
+ --with-thin-check=/sbin/thin_check \
+ --with-thin-dump=/sbin/thin_dump \
+ --with-thin-repair=/sbin/thin_repair \
+ --with-dmeventd-path=/sbin/dmeventd \
+ --enable-udev_rules \
+ CLDFLAGS="$LDFLAGS" \
+ SHELL="/bin/bash"
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install || return 1
+ install -d "$PKG_DEST"/etc/lvm/archive "$PKG_DEST"/etc/lvm/backup
+ install -Dm755 "$BUILD_ROOT"/lvm.initd "$PKG_DEST"/etc/init.d/lvm
+ install -Dm644 "$BUILD_ROOT"/lvm.confd "$PKG_DEST"/etc/conf.d/lvm
+ install -Dm644 "$BUILD_ROOT"/lvm.confd "$PKG_DEST"/etc/conf.d/lvm
+ ln -s libdevmapper.so.1.02 "$PKG_DEST"/lib/libdevmapper.so
+}
diff --git a/repo/lvm2/mallinfo.patch b/repo/lvm2/mallinfo.patch
new file mode 100644
index 0000000..471a6b2
--- /dev/null
+++ b/repo/lvm2/mallinfo.patch
@@ -0,0 +1,11 @@
+--- ./lib/mm/memlock.c.orig 2015-03-09 11:18:41.560028850 -0100
++++ ./lib/mm/memlock.c 2015-03-09 11:19:54.504373309 -0100
+@@ -137,7 +137,7 @@
+
+ static void _allocate_memory(void)
+ {
+-#ifndef VALGRIND_POOL
++#if !defined(VALGRIND_POOL) && defined(__GLIBC__)
+ void *stack_mem;
+ struct rlimit limit;
+ int i, area = 0, missing = _size_malloc_tmp, max_areas = 32, hblks;
diff --git a/repo/lvm2/mlockall-default-config.patch b/repo/lvm2/mlockall-default-config.patch
new file mode 100644
index 0000000..305ddee
--- /dev/null
+++ b/repo/lvm2/mlockall-default-config.patch
@@ -0,0 +1,22 @@
+--- ./conf/example.conf.in.orig
++++ ./conf/example.conf.in
+@@ -1352,7 +1352,7 @@
+ # Use the old behavior of mlockall to pin all memory.
+ # Prior to version 2.02.62, LVM used mlockall() to pin the whole
+ # process's memory while activating devices.
+- use_mlockall = 0
++ use_mlockall = 1
+
+ # Configuration option activation/monitoring.
+ # Monitor LVs that are activated.
+--- ./lib/config/defaults.h.orig
++++ ./lib/config/defaults.h
+@@ -55,7 +55,7 @@
+ #define DEFAULT_LVMLOCKD_LOCK_RETRIES 3
+ #define DEFAULT_LVMETAD_UPDATE_WAIT_TIME 10
+ #define DEFAULT_PRIORITISE_WRITE_LOCKS 1
+-#define DEFAULT_USE_MLOCKALL 0
++#define DEFAULT_USE_MLOCKALL 1
+ #define DEFAULT_METADATA_READ_ONLY 0
+ #define DEFAULT_LVDISPLAY_SHOWS_FULL_DEVICE_PATH 0
+ #define DEFAULT_UNKNOWN_DEVICE_NAME "[unknown]"
diff --git a/repo/mdds/mdds.xibuild b/repo/mdds/mdds.xibuild
new file mode 100644
index 0000000..d2555a5
--- /dev/null
+++ b/repo/mdds/mdds.xibuild
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+NAME="mdds"
+DESC="Multi-dimensional data index algorithm"
+
+MAKEDEPS=" boost"
+
+PKG_VER=1.7.0
+SOURCE="https://kohei.us/files/mdds/src/mdds-$PKG_VER.tar.bz2"
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var
+ make
+}
+
+check() {
+ make check
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+ install -d 755 "$PKG_DEST"/usr/lib
+ mv "$PKG_DEST"/usr/share/pkgconfig "$PKG_DEST"/usr/lib/
+}
+
diff --git a/repo/mythes/mythes.xibuild b/repo/mythes/mythes.xibuild
new file mode 100644
index 0000000..07a5ba4
--- /dev/null
+++ b/repo/mythes/mythes.xibuild
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+NAME="mythes"
+DESC="A simple thesaurus"
+
+MAKEDEPS=" perl hunspell"
+
+PKG_VER=1.2.4
+SOURCE="https://downloads.sourceforge.net/hunspell/mythes-$PKG_VER.tar.gz"
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --disable-static \
+ --disable-dependency-tracking \
+ --enable-fast-install
+ make
+}
+
+package() {
+ make -j1 DESTDIR="$PKG_DEST" install
+}
diff --git a/repo/nodejs/nodejs.xibuild b/repo/nodejs/nodejs.xibuild
index b4918c8..bcccc70 100644
--- a/repo/nodejs/nodejs.xibuild
+++ b/repo/nodejs/nodejs.xibuild
@@ -26,8 +26,7 @@ build () {
--openssl-use-def-ca-store \
--with-icu-default-data-dir=$(icu-config --icudatadir) \
--with-intl=small-icu \
- --without-corepack \
- --without-npm
+ --without-corepack
make
}
diff --git a/repo/numactl/musl.patch b/repo/numactl/musl.patch
new file mode 100644
index 0000000..009233f
--- /dev/null
+++ b/repo/numactl/musl.patch
@@ -0,0 +1,21 @@
+--- numactl-2.0.11/syscall.c.orig
++++ numactl-2.0.11/syscall.c
+@@ -115,14 +115,16 @@
+
+ #endif
+
+-#if defined(__GLIBC__) && __GLIBC_PREREQ(2, 11)
++#if defined(__GLIBC__)
++# if __GLIBC_PREREQ(2,11)
+
+ /* glibc 2.11 seems to have working 6 argument sycall. Use the
+ glibc supplied syscall in this case.
+ The version cut-off is rather arbitary and could be probably
+ earlier. */
+
+-#define syscall6 syscall
++# define syscall6 syscall
++#endif
+ #elif defined(__x86_64__)
+ /* 6 argument calls on x86-64 are often buggy in both glibc and
+ asm/unistd.h. Add a working version here. */
diff --git a/repo/numactl/numactl.xibuild b/repo/numactl/numactl.xibuild
new file mode 100644
index 0000000..aa4aaf1
--- /dev/null
+++ b/repo/numactl/numactl.xibuild
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+NAME="numactl"
+DESC="Simple NUMA policy support"
+
+MAKEDEPS="autoconf automake libtool linux-headers"
+
+PKG_VER=2.0.14
+SOURCE="https://github.com/numactl/numactl/archive/v$PKG_VER.tar.gz"
+
+ADDITIONAL="
+musl.patch
+"
+
+prepare() {
+ apply_patches
+
+ ./autogen.sh
+}
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --mandir=/usr/share/man
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+ rm -r "$PKG_DEST"/usr/share/man/man2
+}
diff --git a/repo/oath-toolkit/oath-toolkit.xibuild b/repo/oath-toolkit/oath-toolkit.xibuild
new file mode 100644
index 0000000..e5c77e0
--- /dev/null
+++ b/repo/oath-toolkit/oath-toolkit.xibuild
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+NAME="oath-toolkit"
+DESC="OATH Toolkit One-time password components"
+
+MAKEDEPS="pam libxml2 xmlsec autoconf automake libtool gtk2"
+
+PKG_VER=2.6.7
+SOURCE="https://download.savannah.gnu.org/releases/oath-toolkit/oath-toolkit-$PKG_VER.tar.gz"
+
+prepare() {
+ autoreconf --force --install
+}
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
diff --git a/repo/openttd/openttd.xibuild b/repo/openttd/openttd.xibuild
new file mode 100644
index 0000000..db2ac42
--- /dev/null
+++ b/repo/openttd/openttd.xibuild
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+NAME="openttd"
+DESC="Open source version of the Transport Tycoon Deluxe simulator"
+
+MAKEDEPS="cmake fontconfig fluidsynth freetype2 icu libpng lzo ninja sdl2 xz zlib"
+
+PKG_VER=12.2
+SOURCE="https://cdn.openttd.org/openttd-releases/$PKG_VER/openttd-$PKG_VER-source.tar.xz"
+
+build() {
+ cmake -B build \
+ -G "Ninja" \
+ -DCMAKE_INSTALL_BINDIR=bin \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_DATADIR=share/games \
+ -DGLOBAL_DATA_DIR=share/games/openttd \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DReleaseBuild=ON
+ cmake --build build
+}
+
+package() {
+ DESTDIR="$PKG_DEST" cmake --build build --target install
+}
diff --git a/repo/parted/fix-includes.patch b/repo/parted/fix-includes.patch
new file mode 100644
index 0000000..c6eff0e
--- /dev/null
+++ b/repo/parted/fix-includes.patch
@@ -0,0 +1,10 @@
+--- parted-3.1.orig/libparted/fs/xfs/platform_defs.h
++++ parted-3.1/libparted/fs/xfs/platform_defs.h
+@@ -35,6 +35,7 @@
+ #define __XFS_PLATFORM_DEFS_H__
+
+ #include <stdio.h>
++#include <fcntl.h>
+ #include <stdarg.h>
+ #include <assert.h>
+ #include <endian.h>
diff --git a/repo/parted/fix-libintl-header-s390x.patch b/repo/parted/fix-libintl-header-s390x.patch
new file mode 100644
index 0000000..68ae7d2
--- /dev/null
+++ b/repo/parted/fix-libintl-header-s390x.patch
@@ -0,0 +1,58 @@
+From 4b2a566a3e007184d3ee9ce5b399a63eebbdadc3 Mon Sep 17 00:00:00 2001
+From: "Tuan M. Hoang" <tmhoang@flatglobe.org>
+Date: Thu, 23 Feb 2017 07:53:02 +0000
+Subject: [PATCH] main/parted: disable nls on s390x
+
+Because we build with --disable-nls by default, we need to remove libintl.h in
+these files on s390x. This is specific for DASD devices only on s390x.
+---
+ libparted/labels/dasd.c | 2 +-
+ libparted/labels/fdasd.c | 2 +-
+ libparted/labels/vtoc.c | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/libparted/labels/dasd.c b/libparted/labels/dasd.c
+index fa9414f..5acf844 100644
+--- a/libparted/labels/dasd.c
++++ b/libparted/labels/dasd.c
+@@ -40,8 +40,8 @@
+ #include <parted/fdasd.h>
+ #include <arch/linux.h>
+
+-#include <libintl.h>
+ #if ENABLE_NLS
++# include <libintl.h>
+ # define _(String) dgettext (PACKAGE, String)
+ #else
+ # define _(String) (String)
+diff --git a/libparted/labels/fdasd.c b/libparted/labels/fdasd.c
+index 1f87937..e6a9086 100644
+--- a/libparted/labels/fdasd.c
++++ b/libparted/labels/fdasd.c
+@@ -24,8 +24,8 @@
+
+ #include <parted/parted.h>
+
+-#include <libintl.h>
+ #if ENABLE_NLS
++# include <libintl.h>
+ # define _(String) dgettext (PACKAGE, String)
+ #else
+ # define _(String) (String)
+diff --git a/libparted/labels/vtoc.c b/libparted/labels/vtoc.c
+index fdfa94f..64ba149 100644
+--- a/libparted/labels/vtoc.c
++++ b/libparted/labels/vtoc.c
+@@ -12,8 +12,8 @@
+
+ #include <parted/parted.h>
+
+-#include <libintl.h>
+ #if ENABLE_NLS
++# include <libintl.h>
+ # define _(String) dgettext (PACKAGE, String)
+ #else
+ # define _(String) (String)
+--
+2.11.1
+
diff --git a/repo/parted/make-tests.patch b/repo/parted/make-tests.patch
new file mode 100644
index 0000000..edadee9
--- /dev/null
+++ b/repo/parted/make-tests.patch
@@ -0,0 +1,45 @@
+diff --git a/tests/Makefile.in b/tests/Makefile.in
+index 11baba0..2288cc7 100644
+--- a/tests/Makefile.in
++++ b/tests/Makefile.in
+@@ -1622,16 +1622,12 @@ TEST_EXTENSIONS = .sh
+ SH_LOG_COMPILER = $(SHELL)
+ TESTS = \
+ help-version.sh \
+- t0000-basic.sh \
+- t0001-tiny.sh \
+ t0010-script-no-ctrl-chars.sh \
+ t0100-print.sh \
+ t0101-print-empty.sh \
+ t0200-gpt.sh \
+ t0201-gpt.sh \
+ t0202-gpt-pmbr.sh \
+- t0203-gpt-tiny-device-abort.sh \
+- t0203-gpt-shortened-device-primary-valid.sh \
+ t0203-gpt-create-on-min-sized-device.sh \
+ t0205-gpt-list-clobbers-pmbr.sh \
+ t0206-gpt-print-with-corrupt-primary-clobbers-pmbr.sh \
+@@ -1644,14 +1640,9 @@ TESTS = \
+ t0213-mkpart-start-negative.sh \
+ t0220-gpt-msftres.sh \
+ t0250-gpt.sh \
+- t0251-gpt-unicode.sh \
+ t0280-gpt-corrupt.sh \
+- t0281-gpt-grow.sh \
+- t0282-gpt-move-backup.sh \
+- t0283-overlap-partitions.sh \
+ t0300-dos-on-gpt.sh \
+ t0301-overwrite-gpt-pmbr.sh \
+- t0350-mac-PT-increases-sector-size.sh \
+ t0400-loop-clobber-infloop.sh \
+ t0500-dup-clobber.sh \
+ t0501-duplicate.sh \
+@@ -1673,8 +1664,6 @@ TESTS = \
+ t3200-resize-partition.sh \
+ t3200-type-change.sh \
+ t3300-palo-prep.sh \
+- t3310-flags.sh \
+- t3400-whole-disk-FAT-partition.sh \
+ t4000-sun-raid-type.sh \
+ t4001-sun-vtoc.sh \
+ t4100-msdos-partition-limits.sh \
diff --git a/repo/parted/parted-include-sysmacros.patch b/repo/parted/parted-include-sysmacros.patch
new file mode 100644
index 0000000..52ec588
--- /dev/null
+++ b/repo/parted/parted-include-sysmacros.patch
@@ -0,0 +1,10 @@
+--- a/libparted/arch/linux.c
++++ b/libparted/arch/linux.c
+@@ -38,6 +38,7 @@
+ #include <sys/ioctl.h>
+ #include <sys/stat.h>
+ #include <sys/types.h>
++#include <sys/sysmacros.h>
+ #include <sys/utsname.h> /* for uname() */
+ #include <scsi/scsi.h>
+ #include <assert.h>
diff --git a/repo/parted/parted.xibuild b/repo/parted/parted.xibuild
new file mode 100644
index 0000000..1fd2222
--- /dev/null
+++ b/repo/parted/parted.xibuild
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+NAME="parted"
+DESC="Utility to create, destroy, resize, check and copy partitions"
+
+MAKEDEPS="readline ncurses lvm2 bash util-linux"
+
+PKG_VER=3.4
+SOURCE="https://ftp.gnu.org/gnu/parted/parted-$PKG_VER.tar.xz"
+
+ADDITIONAL="
+fix-includes.patch
+fix-libintl-header-s390x.patch
+make-tests.patch
+parted-include-sysmacros.patch
+skip-duplicate-bsd-test-on-s390x.patch
+"
+
+prepare () {
+ apply_patches
+}
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --enable-debug \
+ --disable-nls \
+ --disable-static \
+ --enable-shared
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+ rm -rf "$PKG_DEST"/usr/lib/charset.alias
+ rmdir -p "$PKG_DEST"/usr/lib 2>/dev/null || true
+}
diff --git a/repo/parted/skip-duplicate-bsd-test-on-s390x.patch b/repo/parted/skip-duplicate-bsd-test-on-s390x.patch
new file mode 100644
index 0000000..6920ee2
--- /dev/null
+++ b/repo/parted/skip-duplicate-bsd-test-on-s390x.patch
@@ -0,0 +1,16 @@
+diff --git a/tests/t0501-duplicate.sh b/tests/t0501-duplicate.sh
+index 66d321a..0520131 100644
+--- a/tests/t0501-duplicate.sh
++++ b/tests/t0501-duplicate.sh
+@@ -18,7 +18,11 @@
+
+ . "${srcdir=.}/init.sh"; path_prepend_ ../parted .
+
++arch=$(uname -m)
+ for t in msdos gpt bsd; do
++ if [ "$t" = bsd ] && [ "$arch" = "s390x" ]; then
++ continue
++ fi
+ duplicate $t || fail=1
+ done
+
diff --git a/repo/perl-archive-zip/perl-archive-zip.xibuild b/repo/perl-archive-zip/perl-archive-zip.xibuild
new file mode 100644
index 0000000..b6a2738
--- /dev/null
+++ b/repo/perl-archive-zip/perl-archive-zip.xibuild
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+NAME="perl-archive-zip"
+DESC="Provide a perl interface to ZIP archive files."
+
+MAKEDEPS="perl"
+
+PKG_VER=1.68
+SOURCE="https://cpan.metacpan.org/authors/id/P/PH/PHRED/Archive-Zip-$PKG_VER.tar.gz"
+
+prepare() {
+ default_prepare
+ export CFLAGS=$(perl -MConfig -E 'say $Config{ccflags}')
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+}
+
+build() {
+ export CFLAGS=$(perl -MConfig -E 'say $Config{ccflags}')
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ make test
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+ find "$PKG_DEST" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
diff --git a/repo/perl-json/perl-json.xibuild b/repo/perl-json/perl-json.xibuild
new file mode 100644
index 0000000..6791825
--- /dev/null
+++ b/repo/perl-json/perl-json.xibuild
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+NAME="perl-json"
+DESC="Perl module implementing a JSON encoder/decoder"
+
+MAKEDEPS=""
+
+PKG_VER=4.05
+SOURCE="https://cpan.metacpan.org/authors/id/I/IS/ISHIGAKI/JSON-$PKG_VER.tar.gz"
+
+build() {
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ make test
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+ find "$PKG_DEST" -name perllocal.pod -delete
+ find "$PKG_DEST" -name .packlist -delete
+}
+
diff --git a/repo/python-colorama/python-colorama.xibuild b/repo/python-colorama/python-colorama.xibuild
new file mode 100644
index 0000000..e5d588a
--- /dev/null
+++ b/repo/python-colorama/python-colorama.xibuild
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+MAKEDEPS="python"
+DEPS="%deps%"
+
+PKG_VER=0.4.4
+SOURCE=https://files.pythonhosted.org/packages/source/c/colorama/colorama-$PKG_VER.tar.gz
+DESC="Cross-platform colored terminal text."
+
+build() {
+ python setup.py build
+}
+
+package () {
+ python setup.py install --root="$PKG_DEST" --optimize=1
+}
diff --git a/repo/python-coverage/python-coverage.xibuild b/repo/python-coverage/python-coverage.xibuild
new file mode 100644
index 0000000..5a53e22
--- /dev/null
+++ b/repo/python-coverage/python-coverage.xibuild
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+MAKEDEPS="python"
+DEPS="python-tomli"
+
+PKG_VER=6.4.1
+SOURCE=https://files.pythonhosted.org/packages/source/c/coverage/coverage-$PKG_VER.tar.gz
+MAKEDEPS="python"
+DESC="Code coverage measurement for Python"
+
+build() {
+ python setup.py build
+}
+
+package () {
+ python setup.py install --root="$PKG_DEST" --optimize=1
+}
diff --git a/repo/python-filelock/python-filelock.xibuild b/repo/python-filelock/python-filelock.xibuild
new file mode 100644
index 0000000..be1f033
--- /dev/null
+++ b/repo/python-filelock/python-filelock.xibuild
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+MAKEDEPS="python"
+DEPS="python-furo python-sphinx python-sphinx-python-autodoc-python-typehints python-covdefaults python-coverage python-pytest python-pytest-python-cov python-pytest-python-timeout"
+
+PKG_VER=3.7.1
+SOURCE=https://files.pythonhosted.org/packages/source/f/filelock/filelock-$PKG_VER.tar.gz
+DESC="A platform independent file lock."
+
+build() {
+ python setup.py build
+}
+
+package () {
+ python setup.py install --root="$PKG_DEST" --optimize=1
+}
diff --git a/repo/python-flake8/python-flake8.xibuild b/repo/python-flake8/python-flake8.xibuild
new file mode 100644
index 0000000..6a7b5ec
--- /dev/null
+++ b/repo/python-flake8/python-flake8.xibuild
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+MAKEDEPS="python"
+DEPS="python-mccabe python-pycodestyle python-pyflakes python-importlib-python-metadata"
+
+PKG_VER=4.0.1
+SOURCE=https://files.pythonhosted.org/packages/source/f/flake8/flake8-$PKG_VER.tar.gz
+MAKEDEPS="python"
+DESC="the modular source code checker: pep8 pyflakes and co"
+
+build() {
+ python setup.py build
+}
+
+package () {
+ python setup.py install --root="$PKG_DEST" --optimize=1
+}
diff --git a/repo/python-flaky/python-flaky.xibuild b/repo/python-flaky/python-flaky.xibuild
new file mode 100644
index 0000000..ae5c89c
--- /dev/null
+++ b/repo/python-flaky/python-flaky.xibuild
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+MAKEDEPS="python"
+DEPS="%deps%"
+
+PKG_VER=3.7.0
+SOURCE=https://files.pythonhosted.org/packages/source/f/flaky/flaky-$PKG_VER.tar.gz
+DESC="Plugin for nose or pytest that automatically reruns flaky tests."
+
+build() {
+ python setup.py build
+}
+
+package () {
+ python setup.py install --root="$PKG_DEST" --optimize=1
+}
diff --git a/repo/python-freezegun/python-freezegun.xibuild b/repo/python-freezegun/python-freezegun.xibuild
new file mode 100644
index 0000000..3ad94c7
--- /dev/null
+++ b/repo/python-freezegun/python-freezegun.xibuild
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+MAKEDEPS="python"
+DEPS="python-python-python-dateutil"
+
+PKG_VER=1.2.1
+SOURCE=https://files.pythonhosted.org/packages/source/f/freezegun/freezegun-$PKG_VER.tar.gz
+DESC="Let your Python tests travel through time"
+
+build() {
+ python setup.py build
+}
+
+package () {
+ python setup.py install --root="$PKG_DEST" --optimize=1
+}
diff --git a/repo/python-incremental/python-incremental.xibuild b/repo/python-incremental/python-incremental.xibuild
new file mode 100644
index 0000000..62befa6
--- /dev/null
+++ b/repo/python-incremental/python-incremental.xibuild
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+MAKEDEPS="python"
+DEPS="python-click python-twisted"
+
+PKG_VER=21.3.0
+SOURCE=https://files.pythonhosted.org/packages/source/i/incremental/incremental-$PKG_VER.tar.gz
+MAKEDEPS="python"
+DESC="A small library that versions your Python projects."
+
+build() {
+ python setup.py build
+}
+
+package () {
+ python setup.py install --root="$PKG_DEST" --optimize=1
+}
diff --git a/repo/python-nodeenv/python-nodeenv.xibuild b/repo/python-nodeenv/python-nodeenv.xibuild
new file mode 100644
index 0000000..530099c
--- /dev/null
+++ b/repo/python-nodeenv/python-nodeenv.xibuild
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+MAKEDEPS="python"
+DEPS="%deps%"
+
+PKG_VER=1.6.0
+SOURCE=https://files.pythonhosted.org/packages/source/n/nodeenv/nodeenv-$PKG_VER.tar.gz
+MAKEDEPS="python"
+DESC="Node.js virtual environment builder"
+
+build() {
+ python setup.py build
+}
+
+package () {
+ python setup.py install --root="$PKG_DEST" --optimize=1
+}
diff --git a/repo/python-nose/python-nose.xibuild b/repo/python-nose/python-nose.xibuild
new file mode 100644
index 0000000..58b8651
--- /dev/null
+++ b/repo/python-nose/python-nose.xibuild
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+MAKEDEPS="python"
+DEPS="%deps%"
+
+PKG_VER=1.3.7
+SOURCE=https://files.pythonhosted.org/packages/source/n/nose/nose-$PKG_VER.tar.gz
+MAKEDEPS="python"
+DESC="nose extends unittest to make testing easier"
+
+build() {
+ python setup.py build
+}
+
+package () {
+ python setup.py install --root="$PKG_DEST" --optimize=1
+}
diff --git a/repo/python-pathlib2/python-pathlib2.xibuild b/repo/python-pathlib2/python-pathlib2.xibuild
new file mode 100644
index 0000000..4934169
--- /dev/null
+++ b/repo/python-pathlib2/python-pathlib2.xibuild
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+MAKEDEPS="python"
+DEPS="python-six python-scandir python-typing"
+
+PKG_VER=2.3.7.post1
+SOURCE=https://files.pythonhosted.org/packages/source/p/pathlib2/pathlib2-$PKG_VER.tar.gz
+DESC="Object-oriented filesystem paths"
+
+build() {
+ python setup.py build
+}
+
+package () {
+ python setup.py install --root="$PKG_DEST" --optimize=1
+}
diff --git a/repo/python-pluggy/python-pluggy.xibuild b/repo/python-pluggy/python-pluggy.xibuild
new file mode 100644
index 0000000..c55a6f9
--- /dev/null
+++ b/repo/python-pluggy/python-pluggy.xibuild
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+MAKEDEPS="python"
+DEPS="python-importlib-python-metadata python-pre-python-commit python-pytest python-pytest-python-benchmark"
+
+PKG_VER=1.0.0
+SOURCE=https://files.pythonhosted.org/packages/source/p/pluggy/pluggy-$PKG_VER.tar.gz
+DESC="plugin and hook calling mechanisms for python"
+
+build() {
+ python setup.py build
+}
+
+package () {
+ python setup.py install --root="$PKG_DEST" --optimize=1
+}
diff --git a/repo/python-prettytable/python-prettytable.xibuild b/repo/python-prettytable/python-prettytable.xibuild
new file mode 100644
index 0000000..cbcb02b
--- /dev/null
+++ b/repo/python-prettytable/python-prettytable.xibuild
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+MAKEDEPS="python"
+DEPS="python-wcwidth python-importlib-python-metadata python-pytest python-pytest-python-cov python-pytest-python-lazy-python-fixture"
+
+PKG_VER=3.3.0
+SOURCE=https://files.pythonhosted.org/packages/source/p/prettytable/prettytable-$PKG_VER.tar.gz
+MAKEDEPS="python"
+DESC="A simple Python library for easily displaying tabular data in a visually appealing ASCII table format"
+
+build() {
+ python setup.py build
+}
+
+package () {
+ python setup.py install --root="$PKG_DEST" --optimize=1
+}
diff --git a/repo/python-psutil/python-psutil.xibuild b/repo/python-psutil/python-psutil.xibuild
new file mode 100644
index 0000000..d75d236
--- /dev/null
+++ b/repo/python-psutil/python-psutil.xibuild
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+MAKEDEPS="python"
+DEPS="python-ipaddress python-mock python-enum34 python-pywin32 python-wmi"
+
+PKG_VER=5.9.1
+SOURCE=https://files.pythonhosted.org/packages/source/p/psutil/psutil-$PKG_VER.tar.gz
+DESC="Cross-platform lib for process and system monitoring in Python."
+
+build() {
+ python setup.py build
+}
+
+package () {
+ python setup.py install --root="$PKG_DEST" --optimize=1
+}
diff --git a/repo/python-pytest/python-pytest.xibuild b/repo/python-pytest/python-pytest.xibuild
new file mode 100644
index 0000000..ee9b399
--- /dev/null
+++ b/repo/python-pytest/python-pytest.xibuild
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+MAKEDEPS="python"
+DEPS="python-iniconfig python-packaging python-tomli python-atomicwrites python-colorama python-argcomplete python-hypothesis python-mock python-nose python-pygments python-xmlschema"
+
+PKG_VER=7.1.2
+SOURCE=https://files.pythonhosted.org/packages/source/p/pytest/pytest-$PKG_VER.tar.gz
+DESC="pytest: simple powerful testing with Python"
+
+build() {
+ python setup.py build
+}
+
+package () {
+ python setup.py install --root="$PKG_DEST" --optimize=1
+}
diff --git a/repo/python-toml/python-toml.xibuild b/repo/python-toml/python-toml.xibuild
new file mode 100644
index 0000000..390cf6f
--- /dev/null
+++ b/repo/python-toml/python-toml.xibuild
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+MAKEDEPS="python"
+DEPS="%deps%"
+
+PKG_VER=0.10.2
+SOURCE=https://files.pythonhosted.org/packages/source/t/toml/toml-$PKG_VER.tar.gz
+DESC="Python Library for Tom's Obvious, Minimal Language"
+
+build() {
+ python setup.py build
+}
+
+package () {
+ python setup.py install --root="$PKG_DEST" --optimize=1
+}
diff --git a/repo/python-tomli/python-tomli.xibuild b/repo/python-tomli/python-tomli.xibuild
index 7d2a8aa..5cc4d43 100644
--- a/repo/python-tomli/python-tomli.xibuild
+++ b/repo/python-tomli/python-tomli.xibuild
@@ -1,12 +1,12 @@
#!/bin/sh
NAME="python-tomli"
-DESC="Lil' TOML parser"
+DESC="A lil' TOML parser"
-MAKEDEPS="python-installer"
+MAKEDEPS="python python-installer"
PKG_VER=2.0.1
-SOURCE="https://files.pythonhosted.org/packages/source/t/tomli/tomli-$PKG_VER.tar.gz"
+SOURCE=https://files.pythonhosted.org/packages/source/t/tomli/tomli-$PKG_VER.tar.gz
ADDITIONAL="https://files.pythonhosted.org/packages/py3/t/tomli/tomli-$PKG_VER-py3-none-any.whl"
build() {
diff --git a/repo/python-towncrier/python-towncrier.xibuild b/repo/python-towncrier/python-towncrier.xibuild
new file mode 100644
index 0000000..43c09d4
--- /dev/null
+++ b/repo/python-towncrier/python-towncrier.xibuild
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+MAKEDEPS="python python-incremental"
+DEPS="python-click python-click-python-default-python-group python-incremental python-jinja2 python-setuptools python-toml python-tomli python-packaging"
+
+PKG_VER=21.9.0
+SOURCE=https://files.pythonhosted.org/packages/source/t/towncrier/towncrier-$PKG_VER.tar.gz
+DESC="Building newsfiles for your project."
+
+build() {
+ python setup.py build
+}
+
+package () {
+ python setup.py install --root="$PKG_DEST" --optimize=1
+}
diff --git a/repo/python-tox/python-tox.xibuild b/repo/python-tox/python-tox.xibuild
new file mode 100644
index 0000000..b17d07c
--- /dev/null
+++ b/repo/python-tox/python-tox.xibuild
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+MAKEDEPS="python"
+DEPS="python-filelock python-packaging python-pluggy python-py python-six python-toml python-virtualenv python-colorama python-importlib-python-metadata python-pygments-python-github-python-lexers python-sphinx python-sphinxcontrib-python-autoprogram python-towncrier python-flaky python-freezegun python-pytest python-pytest-python-cov python-pytest-python-mock python-pytest-python-randomly python-psutil python-pathlib2"
+
+PKG_VER=3.25.0
+SOURCE=https://files.pythonhosted.org/packages/source/t/tox/tox-$PKG_VER.tar.gz
+DESC="tox is a generic virtualenv management and test command line tool"
+
+build() {
+ python setup.py build
+}
+
+package () {
+ python setup.py install --root="$PKG_DEST" --optimize=1
+}
diff --git a/repo/python-urllib3/python-urllib3.xibuild b/repo/python-urllib3/python-urllib3.xibuild
index cac9aff..e7e8a88 100644
--- a/repo/python-urllib3/python-urllib3.xibuild
+++ b/repo/python-urllib3/python-urllib3.xibuild
@@ -1,10 +1,10 @@
#!/bin/sh
MAKEDEPS="python"
-DEPS="python-idna python-certifi "
+DEPS="python-brotlicffi python-brotli python-brotlipy python-pyOpenSSL python-cryptography python-idna python-certifi python-ipaddress python-PySocks"
-PKG_VER=1.26.8
-SOURCE=https://files.pythonhosted.org/packages/b0/b1/7bbf5181f8e3258efae31702f5eab87d8a74a72a0aa78bc8c08c1466e243/urllib3-$PKG_VER.tar.gz
+PKG_VER=1.26.9
+SOURCE=https://files.pythonhosted.org/packages/source/u/urllib3/urllib3-$PKG_VER.tar.gz
DESC="HTTP library with thread-safe connection pooling, file post, and more."
build() {
diff --git a/repo/python-virtualenv/python-virtualenv.xibuild b/repo/python-virtualenv/python-virtualenv.xibuild
new file mode 100644
index 0000000..36323ef
--- /dev/null
+++ b/repo/python-virtualenv/python-virtualenv.xibuild
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+MAKEDEPS="python"
+DEPS="python-distlib python-filelock python-platformdirs python-six python-pathlib2 python-importlib-python-resources python-importlib-python-metadata python-proselint python-sphinx python-sphinx-python-argparse python-sphinx-python-rtd-python-theme python-towncrier python-coverage python-coverage-python-enable-python-subprocess python-flaky python-pytest python-pytest-python-env python-pytest-python-freezegun python-pytest-python-mock python-pytest-python-randomly python-pytest-python-timeout python-packaging"
+
+PKG_VER=20.14.1
+SOURCE=https://files.pythonhosted.org/packages/source/v/virtualenv/virtualenv-$PKG_VER.tar.gz
+DESC="Virtual Python Environment builder"
+
+build() {
+ python setup.py build
+}
+
+package () {
+ python setup.py install --root="$PKG_DEST" --optimize=1
+}
diff --git a/repo/qemu/0006-linux-user-signal.c-define-__SIGRTMIN-MAX-for-non-GN.patch b/repo/qemu/0006-linux-user-signal.c-define-__SIGRTMIN-MAX-for-non-GN.patch
new file mode 100644
index 0000000..528b5d5
--- /dev/null
+++ b/repo/qemu/0006-linux-user-signal.c-define-__SIGRTMIN-MAX-for-non-GN.patch
@@ -0,0 +1,37 @@
+From 8fbb4e6797ed67310b74cbaaa061269db45a5b71 Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Tue, 29 Apr 2014 15:51:31 +0200
+Subject: [PATCH] linux-user/signal.c: define __SIGRTMIN/MAX for non-GNU
+ platforms
+
+The __SIGRTMIN and __SIGRTMAX are glibc internals and are not available
+on all platforms, so we define those if they are missing.
+
+This is needed for musl libc.
+
+Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
+---
+ linux-user/signal.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/linux-user/signal.c b/linux-user/signal.c
+index 5ca6d62b15..e917c16d91 100644
+--- a/linux-user/signal.c
++++ b/linux-user/signal.c
+@@ -25,6 +25,13 @@
+ #include "trace.h"
+ #include "signal-common.h"
+
++#ifndef __SIGRTMIN
++#define __SIGRTMIN 32
++#endif
++#ifndef __SIGRTMAX
++#define __SIGRTMAX (NSIG-1)
++#endif
++
+ static struct target_sigaction sigact_table[TARGET_NSIG];
+
+ static void host_signal_handler(int host_signum, siginfo_t *info,
+--
+2.23.0
+
diff --git a/repo/qemu/80-kvm.rules b/repo/qemu/80-kvm.rules
new file mode 100644
index 0000000..e61b48f
--- /dev/null
+++ b/repo/qemu/80-kvm.rules
@@ -0,0 +1 @@
+KERNEL=="kvm", GROUP="kvm", MODE="0666"
diff --git a/repo/qemu/CVE-2021-20255.patch b/repo/qemu/CVE-2021-20255.patch
new file mode 100644
index 0000000..970c00c
--- /dev/null
+++ b/repo/qemu/CVE-2021-20255.patch
@@ -0,0 +1,43 @@
+CVE-2021-20255 patch adapted from QEMU patch by Stefan Weil
+
+Link: https://bugzilla.redhat.com/show_bug.cgi?id=1930646
+
+Signed-off-by: Neha Agarwal <nehaagarwal@microsoft.com>
+---
+diff --git a/hw/net/eepro100.c b/hw/net/eepro100.c
+index 16e95ef9cc..2474cf3dc2 100644
+--- a/hw/net/eepro100.c
++++ b/hw/net/eepro100.c
+@@ -279,6 +279,9 @@ typedef struct {
+ /* Quasi static device properties (no need to save them). */
+ uint16_t stats_size;
+ bool has_extended_tcb_support;
++
++ /* Flag to avoid recursions. */
++ bool busy;
+ } EEPRO100State;
+
+ /* Word indices in EEPROM. */
+@@ -837,6 +840,14 @@ static void action_command(EEPRO100State *s)
+ Therefore we limit the number of iterations. */
+ unsigned max_loop_count = 16;
+
++ if (s->busy) {
++ /* Prevent recursions. */
++ logout("recursion in %s:%u\n", __FILE__, __LINE__);
++ return;
++ }
++
++ s->busy = true;
++
+ for (;;) {
+ bool bit_el;
+ bool bit_s;
+@@ -933,6 +944,7 @@ static void action_command(EEPRO100State *s)
+ }
+ TRACE(OTHER, logout("CU list empty\n"));
+ /* List is empty. Now CU is idle or suspended. */
++ s->busy = false;
+ }
+
+ static void eepro100_cu_command(EEPRO100State * s, uint8_t val)
diff --git a/repo/qemu/MAP_SYNC-fix.patch b/repo/qemu/MAP_SYNC-fix.patch
new file mode 100644
index 0000000..e13609d
--- /dev/null
+++ b/repo/qemu/MAP_SYNC-fix.patch
@@ -0,0 +1,22 @@
+diff --git a/util/mmap-alloc.c b/util/mmap-alloc.c
+index f7f177d..7598960 100644
+--- a/util/mmap-alloc.c
++++ b/util/mmap-alloc.c
+@@ -10,14 +10,16 @@
+ * later. See the COPYING file in the top-level directory.
+ */
+
++#include "qemu/osdep.h"
++
+ #ifdef CONFIG_LINUX
+ #include <linux/mman.h>
++#include <asm-generic/mman.h> /* for ppc64le */
+ #else /* !CONFIG_LINUX */
+ #define MAP_SYNC 0x0
+ #define MAP_SHARED_VALIDATE 0x0
+ #endif /* CONFIG_LINUX */
+
+-#include "qemu/osdep.h"
+ #include "qemu/mmap-alloc.h"
+ #include "qemu/host-utils.h"
+
diff --git a/repo/qemu/bridge.conf b/repo/qemu/bridge.conf
new file mode 100644
index 0000000..27c31c3
--- /dev/null
+++ b/repo/qemu/bridge.conf
@@ -0,0 +1,9 @@
+# This should have the following permissions: root:qemu 0640
+
+# Allow users in the "qemu" group to add devices to "br0".
+#allow br0
+
+# Uncomment the following line to allow users in the "bob"
+# group to have permissions defined in it, iff it has the
+# following permissions: root:bob 0640
+#include /etc/qemu/bob.conf
diff --git a/repo/qemu/fix-sockios-header.patch b/repo/qemu/fix-sockios-header.patch
new file mode 100644
index 0000000..1f3cd76
--- /dev/null
+++ b/repo/qemu/fix-sockios-header.patch
@@ -0,0 +1,13 @@
+diff --git a/linux-user/syscall.c b/linux-user/syscall.c
+index 43d0562..afa0ac4 100644
+--- a/linux-user/syscall.c
++++ b/linux-user/syscall.c
+@@ -59,6 +59,7 @@ int __clone2(int (*fn)(void *), void *child_stack_base,
+ #include <linux/icmp.h>
+ #include <linux/icmpv6.h>
+ #include <linux/errqueue.h>
++#include <linux/sockios.h>
+ #include <linux/random.h>
+ #include "qemu-common.h"
+ #ifdef CONFIG_TIMERFD
+ #include <sys/timerfd.h>
diff --git a/repo/qemu/guest-agent-shutdown.patch b/repo/qemu/guest-agent-shutdown.patch
new file mode 100644
index 0000000..ddf3fdf
--- /dev/null
+++ b/repo/qemu/guest-agent-shutdown.patch
@@ -0,0 +1,32 @@
+--- a/qga/commands-posix.c 2021-04-30 14:07:31.202337082 +0000
++++ b/qga/commands-posix.c 2021-04-30 14:10:05.253272361 +0000
+@@ -84,6 +84,7 @@ static void ga_wait_child(pid_t pid, int
+ void qmp_guest_shutdown(bool has_mode, const char *mode, Error **errp)
+ {
+ const char *shutdown_flag;
++ const char *fallback_cmd = NULL;
+ Error *local_err = NULL;
+ pid_t pid;
+ int status;
+@@ -91,10 +92,13 @@ void qmp_guest_shutdown(bool has_mode, c
+ slog("guest-shutdown called, mode: %s", mode);
+ if (!has_mode || strcmp(mode, "powerdown") == 0) {
+ shutdown_flag = "-P";
++ fallback_cmd = "/sbin/poweroff";
+ } else if (strcmp(mode, "halt") == 0) {
+ shutdown_flag = "-H";
++ fallback_cmd = "/sbin/halt";
+ } else if (strcmp(mode, "reboot") == 0) {
+ shutdown_flag = "-r";
++ fallback_cmd = "/sbin/reboot";
+ } else {
+ error_setg(errp,
+ "mode is invalid (valid values are: halt|powerdown|reboot");
+@@ -111,6 +115,7 @@ void qmp_guest_shutdown(bool has_mode, c
+
+ execle("/sbin/shutdown", "shutdown", "-h", shutdown_flag, "+0",
+ "hypervisor initiated shutdown", (char *)NULL, environ);
++ execle(fallback_cmd, fallback_cmd, (char*)NULL, environ);
+ _exit(EXIT_FAILURE);
+ } else if (pid < 0) {
+ error_setg_errno(errp, errno, "failed to create child process");
diff --git a/repo/qemu/mips-softfloat.patch b/repo/qemu/mips-softfloat.patch
new file mode 100644
index 0000000..28c264a
--- /dev/null
+++ b/repo/qemu/mips-softfloat.patch
@@ -0,0 +1,35 @@
+This patch is needed due to our mips64 build uses softfloat. Qemu will not
+build without this patch.
+
+diff --git a/tests/fp/fp-bench.c b/tests/fp/fp-bench.c
+index 4ba5e1d..313256c 100644
+--- a/tests/fp/fp-bench.c
++++ b/tests/fp/fp-bench.c
+@@ -479,6 +479,7 @@ static void QEMU_NORETURN die_host_rounding(enum rounding rounding)
+ exit(EXIT_FAILURE);
+ }
+
++#ifndef __mips_soft_float
+ static void set_host_precision(enum rounding rounding)
+ {
+ int rhost;
+@@ -507,6 +508,7 @@ static void set_host_precision(enum rounding rounding)
+ die_host_rounding(rounding);
+ }
+ }
++#endif
+
+ static void set_soft_precision(enum rounding rounding)
+ {
+@@ -596,9 +598,11 @@ static void parse_args(int argc, char *argv[])
+
+ /* set precision and rounding mode based on the tester */
+ switch (tester) {
++#ifndef __mips_soft_float
+ case TESTER_HOST:
+ set_host_precision(rounding);
+ break;
++#endif
+ case TESTER_SOFT:
+ set_soft_precision(rounding);
+ switch (precision) {
diff --git a/repo/qemu/musl-initialise-msghdr.patch b/repo/qemu/musl-initialise-msghdr.patch
new file mode 100644
index 0000000..17b441c
--- /dev/null
+++ b/repo/qemu/musl-initialise-msghdr.patch
@@ -0,0 +1,16 @@
+Patch-Source: https://github.com/void-linux/void-packages/blob/master/srcpkgs/qemu/patches/musl-initialize-msghdr.patch
+Ref: https://github.com/void-linux/void-packages/issues/23557
+
+diff --git linux-user/syscall.c linux-user/syscall.c
+index 945fc25..8d8b68a 100644
+--- a/linux-user/syscall.c
++++ b/linux-user/syscall.c
+@@ -3071,7 +3071,7 @@ static abi_long do_sendrecvmsg_locked(int fd, struct target_msghdr *msgp,
+ int flags, int send)
+ {
+ abi_long ret, len;
+- struct msghdr msg;
++ struct msghdr msg = {0};
+ abi_ulong count;
+ struct iovec *vec;
+ abi_ulong target_vec;
diff --git a/repo/qemu/qemu-guest-agent.confd b/repo/qemu/qemu-guest-agent.confd
new file mode 100644
index 0000000..228c032
--- /dev/null
+++ b/repo/qemu/qemu-guest-agent.confd
@@ -0,0 +1,7 @@
+# Specifies the transport method used to communicate to QEMU on the host side
+# Default: virtio-serial
+#GA_METHOD="virtio-serial"
+
+# Specifies the device path for the communications back to QEMU on the host
+# Default: /dev/virtio-ports/org.qemu.guest_agent.0
+#GA_PATH="/dev/virtio-ports/org.qemu.guest_agent.0"
diff --git a/repo/qemu/qemu-guest-agent.initd b/repo/qemu/qemu-guest-agent.initd
new file mode 100644
index 0000000..aaf7de3
--- /dev/null
+++ b/repo/qemu/qemu-guest-agent.initd
@@ -0,0 +1,6 @@
+#!/sbin/openrc-run
+
+name="QEMU Guest Agent"
+pidfile="/run/qemu-ga.pid"
+command="/usr/bin/qemu-ga"
+command_args="-m ${GA_METHOD:-virtio-serial} -p ${GA_PATH:-/dev/virtio-ports/org.qemu.guest_agent.0} -l /var/log/qemu-ga.log -d"
diff --git a/repo/qemu/qemu.xibuild b/repo/qemu/qemu.xibuild
new file mode 100644
index 0000000..4f9327b
--- /dev/null
+++ b/repo/qemu/qemu.xibuild
@@ -0,0 +1,127 @@
+#!/bin/sh
+
+NAME="qemu"
+DESC="QEMU is a generic machine emulator and virtualizer"
+
+MAKEDEPS=" meson bash alsa-lib bison curl flex glib glib gnutls gtk3 libaio libcap libcap-ng libjpeg-turbo libnfs libpng libseccomp libssh2 liburing libusb libxml2 linux-headers lzo ncurses numactl perl pulseaudio python python-sphinx sdl2 snappy spice texinfo usbredir util-linux vde2 virglrenderer vte3 xfsprogs zlib zlib zstd zstd ceph"
+
+PKG_VER=7.0.0
+SOURCE="https://wiki.qemu-project.org/download/qemu-$PKG_VER.tar.xz"
+
+ADDITIONAL="
+0006-linux-user-signal.c-define-__SIGRTMIN-MAX-for-non-GN.patch
+80-kvm.rules
+CVE-2021-20255.patch
+MAP_SYNC-fix.patch
+bridge.conf
+fix-sockios-header.patch
+guest-agent-shutdown.patch
+mips-softfloat.patch
+musl-initialise-msghdr.patch
+qemu-guest-agent.confd
+qemu-guest-agent.initd
+qemu.post-install
+qemu.pre-install
+qemu.pre-upgrade
+xattr_size_max.patch
+"
+
+prepare () {
+ apply_patches
+}
+
+compile_common() {
+ CFLAGS="$CFLAGS -O2" "$BUILD_ROOT"/configure \
+ --prefix=/usr \
+ --localstatedir=/var \
+ --sysconfdir=/etc \
+ --libexecdir=/usr/lib/qemu \
+ --python=/usr/bin/python \
+ --disable-glusterfs \
+ --disable-debug-info \
+ --disable-bsd-user \
+ --disable-werror \
+ --disable-xen \
+ --enable-kvm \
+ --enable-seccomp \
+ --cc="${CC:-gcc}" \
+ "$@"
+ make ARFLAGS="rc"
+}
+
+build() {
+ mkdir -p "$BUILD_ROOT"/build
+ cd "$BUILD_ROOT"/build
+ CFLAGS="$CFLAGS -O2" "$BUILD_ROOT"/configure \
+ --prefix=/usr \
+ --localstatedir=/var \
+ --sysconfdir=/etc \
+ --libexecdir=/usr/lib/qemu \
+ --python=/usr/bin/python \
+ --disable-glusterfs \
+ --disable-debug-info \
+ --disable-bsd-user \
+ --disable-werror \
+ --disable-xen \
+ --enable-kvm \
+ --enable-seccomp \
+ --cc="${CC:-gcc}" \
+ --disable-linux-user \
+ --audio-drv-list=oss,alsa,sdl,pa \
+ --enable-cap-ng \
+ --enable-curl \
+ --enable-curses \
+ --enable-docs \
+ --enable-gtk \
+ --enable-guest-agent \
+ --enable-libnfs \
+ --enable-libssh \
+ --enable-linux-aio \
+ --enable-lzo \
+ --enable-modules \
+ --enable-numa \
+ --enable-pie \
+ --enable-sdl \
+ --enable-snappy \
+ --enable-spice \
+ --enable-tpm \
+ --enable-usb-redir \
+ --enable-vde \
+ --enable-vhost-net \
+ --enable-virglrenderer \
+ --enable-virtfs \
+ --enable-vnc \
+ --enable-vnc-jpeg \
+ --enable-vnc-png \
+ --enable-zstd \
+ --enable-rbd \
+ --tls-priority=@QEMU,SYSTEM
+ make ARFLAGS="rc"
+}
+
+package() {
+ cd "$BUILD_ROOT"/build
+ make DESTDIR="$PKG_DEST" install
+
+ install -Dm640 -g qemu "$BUILD_ROOT"/bridge.conf \
+ "$PKG_DEST"/etc/qemu/bridge.conf
+
+ install -Dm644 "$BUILD_ROOT"/80-kvm.rules \
+ "$PKG_DEST"/lib/udev/rules.d/80-kvm.rules
+
+ # qemu-bridge-helper needs suid to create tunX devices;
+ # allow only users in the qemu group to run it.
+ chmod 04710 "$PKG_DEST"/usr/lib/qemu/qemu-bridge-helper
+ chgrp qemu "$PKG_DEST"/usr/lib/qemu/qemu-bridge-helper
+
+ # Do not install HTML docs.
+ rm -rf "$PKG_DEST"/usr/share/doc
+ # remove accel-qtest-* modules, not needed for package
+ rm -f "$PKG_DEST"/usr/lib/qemu/accel-qtest-*
+}
+
+postinstall () {
+ addgroup -S -g 34 kvm 2>/dev/null || true
+ addgroup -S -g 36 qemu 2>/dev/null || true
+ adduser -S -H -h /dev/null -u 36 -G kvm -s /sbin/nologin qemu 2>/dev/null || true
+}
diff --git a/repo/qemu/xattr_size_max.patch b/repo/qemu/xattr_size_max.patch
new file mode 100644
index 0000000..1a33cbf
--- /dev/null
+++ b/repo/qemu/xattr_size_max.patch
@@ -0,0 +1,15 @@
+diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
+index faebd91..a0f15b6 100644
+--- a/hw/9pfs/9p.c
++++ b/hw/9pfs/9p.c
+@@ -25,6 +25,10 @@
+ #include "trace.h"
+ #include "migration/migration.h"
+
++#ifdef __linux__
++#include <linux/limits.h> /* for XATTR_SIZE_MAX */
++#endif
++
+ int open_fd_hw;
+ int total_open_fd;
+ static int open_fd_rc;
diff --git a/repo/qt5-qtscript/qt5-qtscript.xibuild b/repo/qt5-qtscript/qt5-qtscript.xibuild
new file mode 100644
index 0000000..00cd115
--- /dev/null
+++ b/repo/qt5-qtscript/qt5-qtscript.xibuild
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+NAME="qt5-qtscript"
+DESC="Qt5 - QtScript component"
+
+MAKEDEPS="qt5-qtbase linux-headers"
+
+PKG_VER=5.15.3_git20210316
+_commit="5cec94b2c1503f106f4ef4778d016410ebb86211"
+SOURCE="https://invent.kde.org/qt/qt/qtscript/-/archive/$_commit/qtscript-$_commit.tar.gz"
+
+ADDITIONAL="
+qtscript-everywhere-src-5.10.1-sgidefs.patch
+qtscript-s390x.patch
+"
+
+prepare() {
+ apply_patches
+ mkdir .git
+}
+
+build() {
+ qmake-qt5
+ make
+}
+
+package() {
+ make INSTALL_ROOT="$PKG_DEST" install
+
+ find "$PKG_DEST/usr/lib" -type f -name '*.prl' \
+ -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;
+
+ install -d "$PKG_DEST"/usr/share/licenses
+ ln -s /usr/share/licenses/qt5-base "$PKG_DEST"/usr/share/licenses/qt5-qtscript
+}
+
diff --git a/repo/qt5-qtscript/qtscript-everywhere-src-5.10.1-sgidefs.patch b/repo/qt5-qtscript/qtscript-everywhere-src-5.10.1-sgidefs.patch
new file mode 100644
index 0000000..01ef14d
--- /dev/null
+++ b/repo/qt5-qtscript/qtscript-everywhere-src-5.10.1-sgidefs.patch
@@ -0,0 +1,11 @@
+--- qtscript-everywhere-src-5.10.1/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h.orig
++++ qtscript-everywhere-src-5.10.1/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h
+@@ -389,7 +389,7 @@
+
+ #if (defined(mips) || defined(__mips__) || defined(MIPS) || defined(_MIPS_))
+ #define WTF_CPU_MIPS 1
+-#include <sgidefs.h>
++#include <asm/sgidefs.h>
+ #if defined(__MIPSEB__)
+ #define WTF_CPU_BIG_ENDIAN 1
+ #endif
diff --git a/repo/qt5-qtscript/qtscript-s390x.patch b/repo/qt5-qtscript/qtscript-s390x.patch
new file mode 100644
index 0000000..9c81f76
--- /dev/null
+++ b/repo/qt5-qtscript/qtscript-s390x.patch
@@ -0,0 +1,32 @@
+diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h
+index 96942c7..61b64a2 100644
+--- a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h
++++ b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h
+@@ -226,6 +226,18 @@
+ #define WTF_CPU_SPARC 1
+ #endif
+
++/* CPU(S390X) - S390 64-bit */
++#if defined(__s390x__)
++#define WTF_CPU_S390X 1
++#define WTF_CPU_BIG_ENDIAN 1
++#endif
++
++/* CPU(S390) - S390 32-bit */
++#if defined(__s390__) && !defined(__s390x__)
++#define WTF_CPU_S390 1
++#define WTF_CPU_BIG_ENDIAN 1
++#endif
++
+ /* CPU(X86) - i386 / x86 32-bit */
+ #if defined(__i386__) \
+ || defined(i386) \
+@@ -960,7 +972,7 @@
+ #if !defined(WTF_USE_JSVALUE64) && !defined(WTF_USE_JSVALUE32) && !defined(WTF_USE_JSVALUE32_64)
+ #if (CPU(X86_64) && !CPU(X32) && (OS(UNIX) || OS(WINDOWS) || OS(SOLARIS) || OS(HPUX))) || (CPU(IA64) && !CPU(IA64_32)) || CPU(ALPHA) || CPU(AIX64) || CPU(SPARC64) || CPU(MIPS64) || CPU(AARCH64) || CPU(RISCV64)
+ #define WTF_USE_JSVALUE64 1
+-#elif CPU(ARM) || CPU(PPC64) || CPU(RISCV32)
++#elif CPU(ARM) || CPU(PPC64) || CPU(RISCV32) || CPU(S390X)
+ #define WTF_USE_JSVALUE32 1
+ #elif OS(WINDOWS) && COMPILER(MINGW)
+ /* Using JSVALUE32_64 causes padding/alignement issues for JITStubArg
diff --git a/repo/qtchooser/qt5.conf b/repo/qtchooser/qt5.conf
new file mode 100644
index 0000000..edaadeb
--- /dev/null
+++ b/repo/qtchooser/qt5.conf
@@ -0,0 +1,2 @@
+/usr/lib/qt5/bin
+/usr/lib
diff --git a/repo/qtchooser/qt6.conf b/repo/qtchooser/qt6.conf
new file mode 100644
index 0000000..e75ca15
--- /dev/null
+++ b/repo/qtchooser/qt6.conf
@@ -0,0 +1,2 @@
+/usr/lib/qt6/bin
+/usr/lib
diff --git a/repo/qtchooser/qtchooser.xibuild b/repo/qtchooser/qtchooser.xibuild
new file mode 100644
index 0000000..b2c9a98
--- /dev/null
+++ b/repo/qtchooser/qtchooser.xibuild
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+NAME="qtchooser"
+DESC="Wrap the other Qt tools by searching for different instances of Qt on the system"
+
+MAKEDEPS=""
+
+PKG_VER=66
+SOURCE="https://download.qt.io/official_releases/qtchooser/qtchooser-$PKG_VER.tar.xz"
+
+ADDITIONAL="
+qt5.conf
+qt6.conf
+"
+
+prepare () {
+ sed -i "s/install -m 644 -p/install -m 644/g" Makefile
+ sed -i "s/install -m 755 -p/install -m 755/g" src/qtchooser/Makefile
+}
+
+build() {
+ bindir=/usr/lib/qtchooser/ make
+}
+
+package() {
+ INSTALL_ROOT="$PKG_DEST" make install
+
+ install -d "$PKG_DEST"/etc/xdg/qtchooser
+ install -m644 "$BUILD_ROOT"/qt5.conf \
+ "$PKG_DEST"/etc/xdg/qtchooser/
+ install -m644 "$BUILD_ROOT"/qt6.conf \
+ "$PKG_DEST"/etc/xdg/qtchooser/
+
+ # Set the default Qt
+ ln -s /etc/xdg/qtchooser/qt5.conf \
+ "$PKG_DEST"/etc/xdg/qtchooser/default.conf
+}
diff --git a/repo/rabbitmq-c/rabbitmq-c.xibuild b/repo/rabbitmq-c/rabbitmq-c.xibuild
new file mode 100644
index 0000000..996fd53
--- /dev/null
+++ b/repo/rabbitmq-c/rabbitmq-c.xibuild
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+NAME="rabbitmq-c"
+DESC="RabbitMQ C client"
+
+MAKEDEPS="popt openssl cmake xmlto doxygen ninja"
+
+PKG_VER=0.11.0
+SOURCE="https://github.com/alanxz/rabbitmq-c/archive/v$PKG_VER.tar.gz"
+
+build() {
+ cmake -B build -G Ninja \
+ -DCMAKE_BUILD_TYPE=MinSizeRel \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib \
+ -DCMAKE_C_FLAGS="$CFLAGS" \
+ -DBUILD_STATIC_LIBS=ON \
+ -DBUILD_SHARED_LIBS=ON \
+ -DENABLE_SSL_SUPPORT=ON \
+ -DBUILD_TESTS=ON \
+ -DBUILD_TOOLS=ON
+ cmake --build build
+}
+
+package() {
+ DESTDIR="$PKG_DEST" cmake --build build --target install
+ rm -f "$PKG_DEST"/usr/lib/*.a
+}
+
diff --git a/repo/scratch/scratch.xibuild b/repo/scratch/scratch.xibuild
new file mode 100644
index 0000000..2e4bf5b
--- /dev/null
+++ b/repo/scratch/scratch.xibuild
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+NAME="scratch"
+DESC="Create and share your own interactive stories, games, music and art"
+
+MAKEDEPS="make pango glib cairo"
+DEPS="squeak-vm"
+
+PKG_VER=1.4.0.7
+SOURCE="https://download.scratch.mit.edu/scratch-$PKG_VER.src.tar.gz"
+
+build() {
+ make build
+}
+
+package() {
+ install -Dm755 src/scratch "$PKG_DEST"/usr/bin/scratch
+ install -Dm644 Scratch.image "$PKG_DEST"/usr/lib/scratch/Scratch.image
+ install -m644 Scratch.ini "$PKG_DEST"/usr/lib/scratch/Scratch.ini
+ install -Dm644 src/scratch.desktop "$PKG_DEST"/usr/share/applications/scratch.desktop
+ install -Dm644 src/man/scratch.1.gz "$PKG_DEST"/usr/share/man/man1/scratch.1.gz
+ install -Dm644 src/scratch.xml "$PKG_DEST"/usr/share/mime/packages/scratch.xml
+ install -D -m644 src/icons/128x128/scratch.png "$PKG_DEST"/usr/share/icons/hicolor/128x128/apps/scratch.png
+
+ mv Help/ locale/ Media/ Projects/ README Plugins/ "$PKG_DEST/usr/lib/scratch/"
+}
+
diff --git a/repo/spice/failing-tests.patch b/repo/spice/failing-tests.patch
new file mode 100644
index 0000000..a32e034
--- /dev/null
+++ b/repo/spice/failing-tests.patch
@@ -0,0 +1,43 @@
+diff --git a/server/tests/meson.build b/server/tests/meson.build
+index 09ba0f2..9833746 100644
+--- a/server/tests/meson.build
++++ b/server/tests/meson.build
+@@ -52,7 +52,6 @@
+ ['test-channel', true, 'cpp'],
+ ['test-stream-device', true, 'cpp'],
+ ['test-set-ticket', true],
+- ['test-listen', true],
+ ['test-record', true],
+ ['test-display-no-ssl', false],
+ ['test-display-streaming', false],
+@@ -62,10 +61,6 @@
+ ['test-display-width-stride', false],
+ ]
+
+-if spice_server_has_sasl
+- tests += [['test-sasl', true]]
+-endif
+-
+ if spice_server_has_smartcard == true
+ tests += [['test-smartcard', true, 'cpp']]
+ endif
+--- a/server/tests/meson.build
++++ b/server/tests/meson.build
+@@ -42,7 +42,6 @@
+ ['test-dispatcher', true, 'cpp'],
+ ['test-options', true],
+ ['test-stat', true],
+- ['test-agent-msg-filter', true],
+ ['test-loop', true],
+ ['test-qxl-parsing', true],
+ ['test-leaks', true],
+--- a/server/tests/meson.build
++++ b/server/tests/meson.build
+@@ -44,7 +44,6 @@
+ ['test-stat', true],
+ ['test-loop', true],
+ ['test-qxl-parsing', true],
+- ['test-leaks', true],
+ ['test-vdagent', true],
+ ['test-fail-on-null-core-interface', true],
+ ['test-empty-success', true],
diff --git a/repo/spice/fix-build.patch b/repo/spice/fix-build.patch
new file mode 100644
index 0000000..76c2c31
--- /dev/null
+++ b/repo/spice/fix-build.patch
@@ -0,0 +1,7 @@
+diff --git a/doxygen.sh a/doxygen.sh
+new file mode 100755
+index 0000000000..1a2485251c
+--- /dev/null
++++ a/doxygen.sh
+@@ -0,0 +1 @@
++#!/bin/sh
diff --git a/repo/spice/spice-server.xibuild b/repo/spice/spice-server.xibuild
new file mode 100644
index 0000000..4571110
--- /dev/null
+++ b/repo/spice/spice-server.xibuild
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+DESC="Server library for SPICE"
+
+package () {
+ add_from_main "usr/lib/*server.so.*"
+}
+
diff --git a/repo/spice/spice.xibuild b/repo/spice/spice.xibuild
new file mode 100644
index 0000000..16ea6d2
--- /dev/null
+++ b/repo/spice/spice.xibuild
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+NAME="spice"
+DESC="Implements the SPICE protocol"
+
+MAKEDEPS="meson spice-protocol glib gdk-pixbuf pixman openssl libjpeg-turbo zlib opus gstreamer gst-plugins-base orc lz4 libsasl python-six python-pyparsing"
+
+PKG_VER=0.15.0
+SOURCE="https://www.spice-space.org/download/releases/spice-server/spice-$PKG_VER.tar.bz2"
+
+ADDITIONAL="
+failing-tests.patch
+fix-build.patch
+"
+
+prepare () {
+ apply_patches
+}
+
+build() {
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --localstatedir=/var --libdir=/usr/lib
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
diff --git a/repo/squeak-vm/sqVirtualMachine.patch b/repo/squeak-vm/sqVirtualMachine.patch
new file mode 100644
index 0000000..37b4699
--- /dev/null
+++ b/repo/squeak-vm/sqVirtualMachine.patch
@@ -0,0 +1,49 @@
+--- a/Cross/vm/sqVirtualMachine.c
++++ b/Cross/vm/sqVirtualMachine.c
+@@ -485,10 +485,7 @@
+ /* This lives here for now but belongs somewhere else.
+ * platforms/Cross/vm/sqStuff.c??
+ */
+-#define STDOUT_STACK_SZ 5
+-static int stdoutStackIdx = -1;
+-static FILE stdoutStack[STDOUT_STACK_SZ];
+-
++
+ /* N.B. As of cygwin 1.5.25 fopen("crash.dmp","a") DOES NOT WORK! crash.dmp
+ * contains garbled output as if the file pointer gets set to the start of the
+ * file, not the end. So we synthesize our own append mode.
+@@ -521,10 +518,6 @@
+
+ FILE *output;
+
+- if (stdoutStackIdx + 2 >= STDOUT_STACK_SZ) {
+- fprintf(stderr,"output file stack is full.\n");
+- return;
+- }
+ switch ((unsigned)filenameOrStdioIndex) {
+ case STDOUT_FILENO: output = stdout; break;
+ case STDERR_FILENO: output = stderr; break;
+@@ -536,17 +529,11 @@
+ return;
+ }
+ }
+- stdoutStack[++stdoutStackIdx] = *stdout;
+- *stdout = *output;
+ }
+
+ void
+ popOutputFile()
+ {
+- if (stdoutStackIdx < 0) {
+- fprintf(stderr,"output file stack is empty.\n");
+- return;
+- }
+ fflush(stdout);
+ if (fileno(stdout) > STDERR_FILENO) {
+ /* as of Feb 2011 with fclose@@GLIBC_2.1 under e.g. CentOS 5.3, fclose
+@@ -558,5 +545,4 @@
+ fclose(stdout);
+ #endif
+ }
+- *stdout = stdoutStack[stdoutStackIdx--];
+ }
diff --git a/repo/squeak-vm/squeak-vm.xibuild b/repo/squeak-vm/squeak-vm.xibuild
new file mode 100644
index 0000000..f6a7738
--- /dev/null
+++ b/repo/squeak-vm/squeak-vm.xibuild
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+NAME="squeak-vm"
+DESC="Full-featured implementation of the Smalltalk programming language and environment"
+
+MAKEDEPS=" make cmake"
+
+PKG_VER=4.10.2.2614
+SOURCE="http://squeakvm.org/unix/release/Squeak-$PKG_VER-src.tar.gz"
+
+ADDITIONAL="
+sqVirtualMachine.patch
+"
+
+prepare () {
+ apply_patches
+}
+
+build() {
+ ./unix/cmake/configure \
+ --prefix=/usr \
+ --without-quartz \
+ --with-x \
+ --enable-mpg-mmx
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/tor/tor.post-upgrade b/repo/tor/tor.post-upgrade
deleted file mode 100644
index ff00aab..0000000
--- a/repo/tor/tor.post-upgrade
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-
-ver_new="$1"
-ver_old="$2"
-
-if [ "$(apk version -t "$ver_old" "0.2.8.7-r0")" = "<" ]; then
- cat 1>&2 <<-EOF
- *
- * Tor runscript has been updated to start tor under unprivileged user "tor"
- * by default. If it fails to start due to permissions error, then change owner
- * of files in the DataDirectory (default is /var/lib/tor) to the tor user:
- * chown -R tor /var/lib/tor
- *
- * If you need tor to bind a privileged port (e.g. 80), then add "User tor"
- * to /etc/tor/torrc. Tor will be started under root, but then setuid to the
- * tor user and drop privileges.
- *
- EOF
-fi
-
-exit 0
diff --git a/repo/tor/tor.pre-install b/repo/tor/tor.pre-install
deleted file mode 100644
index cdeb7b4..0000000
--- a/repo/tor/tor.pre-install
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-
-adduser -S -D -H -h /var/lib/tor -s /sbin/nologin -g tor tor 2>/dev/null
-
-exit 0
diff --git a/repo/tor/tor.xibuild b/repo/tor/tor.xibuild
index 940da31..86c0eb1 100644
--- a/repo/tor/tor.xibuild
+++ b/repo/tor/tor.xibuild
@@ -44,3 +44,8 @@ package() {
"$PKG_DEST"/etc/conf.d/"tor"
}
+
+postinstall () {
+ useradd -r -m -U -d /var/lib/tor -s /sbin/nologin -g tor tor
+ return 0
+}
diff --git a/repo/ucpp/ucpp.xibuild b/repo/ucpp/ucpp.xibuild
new file mode 100644
index 0000000..2bc3154
--- /dev/null
+++ b/repo/ucpp/ucpp.xibuild
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+NAME="ucpp"
+DESC="C preprocessor which is embeddable, quick, light and C99 compliant"
+
+MAKEDEPS=""
+
+PKG_VER=1.3.5
+SOURCE="https://gitlab.com/scarabeusiv/ucpp"
+
+prepare () {
+ autoreconf -vif
+}
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --disable-static
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/unixodbc/unixodbc.xibuild b/repo/unixodbc/unixodbc.xibuild
new file mode 100644
index 0000000..b1aa749
--- /dev/null
+++ b/repo/unixodbc/unixodbc.xibuild
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+NAME="unixodbc"
+DESC="ODBC is an open specification to access Data Sources"
+
+MAKEDEPS=" readline"
+
+PKG_VER=2.3.9
+SOURCE="http://www.unixodbc.org/unixODBC-$PKG_VER.tar.gz"
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --disable-nls \
+ --enable-gui=no \
+ --enable-static
+ make
+}
+
+package() {
+ make -j1 DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/usbredir/usbredir.xibuild b/repo/usbredir/usbredir.xibuild
new file mode 100644
index 0000000..9e87d9b
--- /dev/null
+++ b/repo/usbredir/usbredir.xibuild
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+NAME="usbredir"
+DESC="USB network redirection protocol libraries"
+
+MAKEDEPS="libusb meson glib"
+
+PKG_VER=0.12.0
+SOURCE="https://www.spice-space.org/download/usbredir/usbredir-$PKG_VER.tar.xz"
+
+build() {
+ meson --prefix=/usr \
+ . output
+ meson compile ${JOBS:+-j ${JOBS}} -C output
+}
+
+check() {
+ meson test --no-rebuild -v -C output
+}
+
+package() {
+ DESTDIR="$PKG_DEST" meson install --no-rebuild -C output
+}
+
diff --git a/repo/userspace-rcu/userspace-rcu.xibuild b/repo/userspace-rcu/userspace-rcu.xibuild
new file mode 100644
index 0000000..6f73da6
--- /dev/null
+++ b/repo/userspace-rcu/userspace-rcu.xibuild
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+NAME="userspace-rcu"
+DESC="Userspace RCU (read-copy-update) library"
+
+MAKEDEPS="bash perl"
+
+PKG_VER=0.12.2
+SOURCE="https://lttng.org/files/urcu/userspace-rcu-$PKG_VER.tar.bz2"
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var
+ make V=1
+}
+
+check() {
+ make check
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+ install -Dm644 LICENSE "$PKG_DEST"/usr/share/licenses/userspace-rcu/LICENSE
+}
diff --git a/repo/util-linux/util-linux.xibuild b/repo/util-linux/util-linux.xibuild
index 6df5289..2197c9e 100644
--- a/repo/util-linux/util-linux.xibuild
+++ b/repo/util-linux/util-linux.xibuild
@@ -8,12 +8,15 @@ SOURCE=https://cdn.kernel.org/pub/linux/utils/util-linux/v$(echo $PKG_VER | cut
DESC="System Utilities for Linux"
build () {
- ./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \
- --bindir=/usr/bin \
- --libdir=/usr/lib \
- --docdir=/usr/share/doc/util-linux-$PKG_VER\
- --disable-static \
- --runstatedir=/run
+ ./configure \
+ --prefix=/usr \
+ --disable-silent-rules \
+ --enable-newgrp \
+ --disable-uuidd \
+ --disable-nls \
+ --disable-tls \
+ --disable-chfn-chsh \
+ --with-vendordir=/usr/lib
make
}
diff --git a/repo/vde2/inline.patch b/repo/vde2/inline.patch
new file mode 100644
index 0000000..b11840f
--- /dev/null
+++ b/repo/vde2/inline.patch
@@ -0,0 +1,21 @@
+diff --git a/src/vde_switch/fstp.c b/src/vde_switch/fstp.c
+index ac5e313..26c5a67 100644
+--- a/src/vde_switch/fstp.c
++++ b/src/vde_switch/fstp.c
+@@ -30,14 +30,14 @@ static int numports;
+ #ifdef FSTP
+ #include <fstp.h>
+ /*********************** sending macro used by FSTP & Core ******************/
+-void inline ltonstring(unsigned long l,unsigned char *s) {
++static void ltonstring(unsigned long l,unsigned char *s) {
+ s[3]=l; l>>=8;
+ s[2]=l; l>>=8;
+ s[1]=l; l>>=8;
+ s[0]=l;
+ }
+
+-unsigned long inline nstringtol(unsigned char *s) {
++static unsigned long nstringtol(unsigned char *s) {
+ return (s[0]<<24)+(s[1]<<16)+(s[2]<<8)+s[3];
+ }
+
diff --git a/repo/vde2/musl-build-fix.patch b/repo/vde2/musl-build-fix.patch
new file mode 100644
index 0000000..c03459c
--- /dev/null
+++ b/repo/vde2/musl-build-fix.patch
@@ -0,0 +1,15 @@
+diff --git a/src/vdetaplib/libvdetap.c b/src/vdetaplib/libvdetap.c
+index 00cd401..c70f290 100644
+--- a/src/vdetaplib/libvdetap.c
++++ b/src/vdetaplib/libvdetap.c
+@@ -121,6 +121,10 @@ int open(const char *path, int flags, ...)
+ return native_open(path, flags, data);
+ }
+
++/* musl apparently defines open64 as a macro */
++#ifdef open64
++#undef open64
++#endif
+ int open64(const char *path, int flags, ...)
+ {
+ va_list ap;
diff --git a/repo/vde2/vde2.post-down b/repo/vde2/vde2.post-down
new file mode 100644
index 0000000..be5f5b3
--- /dev/null
+++ b/repo/vde2/vde2.post-down
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+VDE_SWITCH=/usr/bin/vde_switch
+SLIRPVDE=/usr/bin/slirpvde
+
+# this is not an interesting stanza for us
+if [ -z "$IF_VDE2_SWITCH" -a -z "$IF_VDE2_PLUG" -a -z "$IF_VDE2_SLIRP" ]; then
+ exit 0
+fi
+
+PIDFILE="/var/run/vde2/$IFACE-plug.pid"
+CTLFILE="/var/run/vde2/$IFACE.ctl"
+if [ -f $PIDFILE ]; then
+ start-stop-daemon --stop --quiet --pidfile $PIDFILE
+ rm -f $PIDFILE
+fi
+
+PIDFILE="/var/run/vde2/$IFACE-slirp.pid"
+if [ -f $PIDFILE ]; then
+ start-stop-daemon --stop --quiet --pidfile $PIDFILE \
+ --exec $SLIRPVDE
+ rm -f $PIDFILE
+fi
+
+PIDFILE="/var/run/vde2/$IFACE.pid"
+CTLDIR="/var/run/vde2/$IFACE.ctl"
+if [ -f $PIDFILE ]; then
+ start-stop-daemon --stop --quiet --pidfile $PIDFILE \
+ --exec $VDE_SWITCH
+ rm -f $PIDFILE
+
+ # set the tap interface to non-persistant, see #568363
+ vde_tunctl -b -d $IFACE 1>/dev/null
+fi
+
+rm -rf $CTLDIR
+rm -f $CTLDIR.*
diff --git a/repo/vde2/vde2.pre-install b/repo/vde2/vde2.pre-install
new file mode 100644
index 0000000..3c3e08d
--- /dev/null
+++ b/repo/vde2/vde2.pre-install
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+addgroup -S vde2-net 2>/dev/null
+adduser -S -D -H -h /var/run/vde2 -s /sbin/nologin -G vde2-net -g vde2-net vde2-net 2>/dev/null
+
+exit 0
diff --git a/repo/vde2/vde2.pre-up b/repo/vde2/vde2.pre-up
new file mode 100644
index 0000000..991b382
--- /dev/null
+++ b/repo/vde2/vde2.pre-up
@@ -0,0 +1,74 @@
+#!/bin/sh
+
+VDE_SWITCH=/usr/bin/vde_switch
+VDE_PLUG=/usr/bin/vde_plug
+SLIRPVDE=/usr/bin/slirpvde
+DPIPE=/usr/bin/dpipe
+RUNDIR=/var/run/vde2
+
+USER=vde2-net
+GROUP=vde2-net
+
+if [ ! -x $VDE_SWITCH ] || [ ! -x $SLIRPVDE ]; then
+ exit 0
+fi
+
+# this is not an interesting stanza for us
+if [ -z "$IF_VDE2_SWITCH" -a -z "$IF_VDE2_PLUG" -a -z "$IF_VDE2_SLIRP" ]; then
+ exit 0
+fi
+
+
+# Create directory if missing
+if [ ! -d $RUNDIR ]; then
+ mkdir -p $RUNDIR
+ chown vde2-net:vde2-net $RUNDIR
+ chmod 2770 $RUNDIR
+fi
+
+# vde2-switch [-|<args>]
+if [ -n "$IF_VDE2_SWITCH" ]; then
+ set -- $IF_VDE2_SWITCH
+ test "$1" = "-" && shift
+ PIDFILE="$RUNDIR/$IFACE.pid"
+ CTLDIR="$RUNDIR/$IFACE.ctl"
+ MGMTFILE="$RUNDIR/$IFACE.mgmt"
+
+ if [ "$METHOD" = "manual" ]; then
+ TAPOPTS=""
+ else
+ TAPOPTS="-t $IFACE"
+ fi
+
+ # block to make sure the interface exists, see #568363
+ vde_tunctl -b -t $IFACE 1>/dev/null
+
+ start-stop-daemon --start --quiet --pidfile $PIDFILE \
+ --exec $VDE_SWITCH -- \
+ -s $CTLDIR -m 660 -g $GROUP -p $PIDFILE $TAPOPTS \
+ -M $MGMTFILE --mgmtmode 660 -d "$@"
+fi
+
+# vde2-plug <dpipe_cmd2>
+if [ -n "$IF_VDE2_PLUG" ]; then
+ set -- $IF_VDE2_PLUG
+ PIDFILE="$RUNDIR/$IFACE-plug.pid"
+ CTLDIR="$RUNDIR/$IFACE.ctl"
+
+ start-stop-daemon --start --quiet --pidfile $PIDFILE \
+ --make-pidfile --background \
+ --exec $DPIPE -- $VDE_PLUG -g $GROUP -m 660 $CTLDIR = "$@"
+fi
+
+# vde2-slirp [-|<args>]
+if [ -n "$IF_VDE2_SLIRP" ]; then
+ set -- $IF_VDE2_SLIRP
+ test "$1" = "-" && shift
+ PIDFILE="$RUNDIR/$IFACE-slirp.pid"
+ CTLDIR="$RUNDIR/$IFACE.ctl"
+
+ start-stop-daemon --start --quiet --pidfile $PIDFILE \
+ --chuid $USER \
+ --exec $SLIRPVDE -- \
+ -s $CTLDIR -m 660 -p $PIDFILE -d "$@"
+fi
diff --git a/repo/vde2/vde2.xibuild b/repo/vde2/vde2.xibuild
new file mode 100644
index 0000000..6809cc4
--- /dev/null
+++ b/repo/vde2/vde2.xibuild
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+NAME="vde2"
+DESC="VDE: Virtual Distributed Ethernet. User mode networking for QEMU, UML, etc."
+
+MAKEDEPS="linux-headers openssl libpcap python"
+
+PKG_VER=2.3.2
+SOURCE="https://downloads.sourceforge.net/project/vde/vde2/$PKG_VER/vde2-$PKG_VER.tar.gz"
+
+ADDITIONAL="
+inline.patch
+musl-build-fix.patch
+vde2.post-down
+vde2.pre-install
+vde2.pre-up
+vde_cryptcab-compile-against-openssl-1.1.0.patch
+"
+
+prepare() {
+ apply_patches
+}
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc
+ make -C src/common
+ make -j1 -C src/lib
+ make
+}
+
+package() {
+ cd "$BUILD_ROOT"
+ make -j1 DESTDIR="$PKG_DEST" install
+
+ install -Dm755 "$BUILD_ROOT"/vde2.pre-up \
+ "$PKG_DEST"/etc/network/if-pre-up.d/vde2
+ install -Dm755 "$BUILD_ROOT"/vde2.post-down \
+ "$PKG_DEST"/etc/network/if-post-down.d/vde2
+}
diff --git a/repo/vde2/vde_cryptcab-compile-against-openssl-1.1.0.patch b/repo/vde2/vde_cryptcab-compile-against-openssl-1.1.0.patch
new file mode 100644
index 0000000..227312e
--- /dev/null
+++ b/repo/vde2/vde_cryptcab-compile-against-openssl-1.1.0.patch
@@ -0,0 +1,92 @@
+--- a/src/vde_cryptcab/cryptcab.c 2011-11-23 16:41:17.000000000 +0000
++++ b/src/vde_cryptcab/cryptcab.c 2017-03-20 22:54:20.452975075 +0000
+@@ -22,7 +22,7 @@
+ exit(1);
+ }
+
+-static EVP_CIPHER_CTX ctx;
++static EVP_CIPHER_CTX *ctx;
+ static int ctx_initialized = 0;
+ static int encryption_disabled = 0;
+ static int nfd;
+@@ -30,6 +30,10 @@
+ static struct vde_open_args open_args={.port=0,.group=NULL,.mode=0700};
+ static int verbose = 0;
+
++#if OPENSSL_VERSION_NUMBER < 0x10100000
++#define EVP_CIPHER_CTX_reset(x) EVP_CIPHER_CTX_cleanup(x)
++#endif
++
+ void vc_printlog(int priority, const char *format, ...)
+ {
+ va_list arg;
+@@ -103,19 +107,21 @@
+ }
+
+ if (!ctx_initialized) {
+- EVP_CIPHER_CTX_init (&ctx);
++ ctx = EVP_CIPHER_CTX_new ();
++ if (!ctx)
++ return -1;
+ ctx_initialized = 1;
+ }
+
+- EVP_EncryptInit (&ctx, EVP_bf_cbc (), p->key, p->iv);
+- if (EVP_EncryptUpdate (&ctx, dst, &olen, src, len) != 1)
++ EVP_EncryptInit (ctx, EVP_bf_cbc (), p->key, p->iv);
++ if (EVP_EncryptUpdate (ctx, dst, &olen, src, len) != 1)
+ {
+ fprintf (stderr,"error in encrypt update\n");
+ olen = -1;
+ goto cleanup;
+ }
+
+- if (EVP_EncryptFinal (&ctx, dst + olen, &tlen) != 1)
++ if (EVP_EncryptFinal (ctx, dst + olen, &tlen) != 1)
+ {
+ fprintf (stderr,"error in encrypt final\n");
+ olen = -1;
+@@ -124,7 +130,7 @@
+ olen += tlen;
+
+ cleanup:
+- EVP_CIPHER_CTX_cleanup(&ctx);
++ EVP_CIPHER_CTX_reset(ctx);
+ return olen;
+ }
+
+@@ -138,19 +144,21 @@
+ }
+
+ if (!ctx_initialized) {
+- EVP_CIPHER_CTX_init (&ctx);
++ ctx = EVP_CIPHER_CTX_new ();
++ if (!ctx)
++ return -1;
+ ctx_initialized = 1;
+ }
+
+- EVP_DecryptInit (&ctx, EVP_bf_cbc (), p->key, p->iv);
+- if (EVP_DecryptUpdate (&ctx, dst, &olen, src, len) != 1)
++ EVP_DecryptInit (ctx, EVP_bf_cbc (), p->key, p->iv);
++ if (EVP_DecryptUpdate (ctx, dst, &olen, src, len) != 1)
+ {
+ fprintf (stderr,"error in decrypt update\n");
+ olen = -1;
+ goto cleanup;
+ }
+
+- if (EVP_DecryptFinal (&ctx, dst + olen, &tlen) != 1)
++ if (EVP_DecryptFinal (ctx, dst + olen, &tlen) != 1)
+ {
+ fprintf (stderr,"error in decrypt final\n");
+ olen = -1;
+@@ -159,7 +167,7 @@
+ olen += tlen;
+
+ cleanup:
+- EVP_CIPHER_CTX_cleanup(&ctx);
++ EVP_CIPHER_CTX_reset (ctx);
+ return olen;
+ }
+
diff --git a/repo/vigra/vigra.xibuild b/repo/vigra/vigra.xibuild
new file mode 100644
index 0000000..5b304f2
--- /dev/null
+++ b/repo/vigra/vigra.xibuild
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+NAME="vigra"
+DESC="An image processing and analysis library"
+
+MAKEDEPS=" tiff libjpeg-turbo libpng boost cmake doxygen"
+
+PKG_VER=1.11.1
+SOURCE="https://github.com/ukoethe/vigra"
+
+build() {
+ cmake . \
+ -DCMAKE_BUILD_TYPE=None \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DDOCINSTALL=share/doc
+ make
+}
+
+package() {
+ make install DESTDIR="$PKG_DEST"
+
+ mkdir -p "$PKG_DEST"/usr/lib/cmake
+ mv "$PKG_DEST"/usr/lib/vigra "$PKG_DEST"/usr/lib/cmake
+}
+
diff --git a/repo/virglrenderer/virglrenderer.xibuild b/repo/virglrenderer/virglrenderer.xibuild
new file mode 100644
index 0000000..6096c51
--- /dev/null
+++ b/repo/virglrenderer/virglrenderer.xibuild
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+NAME="virglrenderer"
+DESC="A virtual 3D GPU library, that allows the guest operating system to use the host GPU to accelerate 3D rendering"
+
+MAKEDEPS="meson file libdrm mesa libepoxy python check"
+
+PKG_VER=0.9.1
+SOURCE="https://gitlab.freedesktop.org/virgl/virglrenderer/-/archive/virglrenderer-$PKG_VER/virglrenderer-virglrenderer-$PKG_VER.tar.gz"
+
+build() {
+ meson --prefix=/usr \
+ -Dtests=true \
+ . output
+ meson compile ${JOBS:+-j ${JOBS}} -C output
+}
+
+package() {
+ DESTDIR="$PKG_DEST" meson install --no-rebuild -C output
+}
diff --git a/repo/vte3/fix-W_EXITCODE.patch b/repo/vte3/fix-W_EXITCODE.patch
new file mode 100644
index 0000000..ae6e5e4
--- /dev/null
+++ b/repo/vte3/fix-W_EXITCODE.patch
@@ -0,0 +1,17 @@
+Source: https://mail-archives.apache.org/mod_mbox/mesos-reviews/201610.mbox/%3C20161014170728.1720.54446@reviews.apache.org%3E
+Upstream: No
+Reason: fixes compilation with musl that doesn't define W* macros.
+
+--- a/src/widget.cc
++++ b/src/widget.cc
+@@ -31,6 +31,10 @@
+ #include "vteptyinternal.hh"
+ #include "debug.h"
+
++#ifndef W_EXITCODE
++#define W_EXITCODE(ret, sig) ((ret) << 8 | (sig))
++#endif
++
+ using namespace std::literals;
+
+ namespace vte {
diff --git a/repo/vte3/syscall.patch b/repo/vte3/syscall.patch
new file mode 100644
index 0000000..2564b80
--- /dev/null
+++ b/repo/vte3/syscall.patch
@@ -0,0 +1,15 @@
+upstream report:
+https://gitlab.gnome.org/GNOME/vte/-/issues/342
+
+diff --git a/src/missing.hh b/src/missing.hh
+index d5d0484..5738813 100644
+--- a/src/missing.hh
++++ b/src/missing.hh
+@@ -35,6 +35,7 @@ char* strchrnul(char const* s,
+ #endif
+
+ #ifdef __linux__
++#include <sys/syscall.h>
+
+ /* BEGIN
+ * The following is copied from systemd/src/basic/missing_syscall_def.h (LGPL2.1+)
diff --git a/repo/vte3/vte3.xibuild b/repo/vte3/vte3.xibuild
new file mode 100644
index 0000000..9d490a1
--- /dev/null
+++ b/repo/vte3/vte3.xibuild
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+NAME="vte3"
+DESC="Virtual Terminal Emulator library"
+
+MAKEDEPS="bash gnutls gobject-introspection gperf gtk3 gtk2 icu intltool libxml2 linux-headers meson ncurses pango pcre2 vala"
+
+PKG_VER=0.68.0
+SOURCE="https://gitlab.gnome.org/GNOME/vte/-/archive/$PKG_VER/vte-$PKG_VER.tar.gz"
+
+ADDITIONAL="
+fix-W_EXITCODE.patch
+syscall.patch
+"
+
+prepare () {
+ apply_patches
+}
+
+build() {
+ meson --prefix=/usr \
+ -Ddocs=false \
+ -D_systemd=false \
+ . output
+ meson compile ${JOBS:+-j ${JOBS}} -C output
+}
+
+check() {
+ meson test --no-rebuild -v -C output
+}
+
+package() {
+ DESTDIR="$PKG_DEST" meson install --no-rebuild -C output
+}
+
diff --git a/repo/vym/vym.xibuild b/repo/vym/vym.xibuild
new file mode 100644
index 0000000..aee3564
--- /dev/null
+++ b/repo/vym/vym.xibuild
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+NAME="vym"
+DESC="View Your Mind (VYM) is a cross-platform concept mapping software"
+
+MAKEDEPS=" qtchooser qt5-qtscript qt5-qtsvg"
+
+PKG_VER=2.8.8
+SOURCE="https://sourceforge.net/projects/vym/files/$PKG_VER/vym-$PKG_VER.tar.bz2/download"
+
+build() {
+ qmake PREFIX=/usr/share
+}
+
+package() {
+ # Install files
+ make INSTALL_ROOT=$PKG_DEST install
+}
+
diff --git a/repo/xfsprogs/fix-mmap.patch b/repo/xfsprogs/fix-mmap.patch
new file mode 100644
index 0000000..d0740f6
--- /dev/null
+++ b/repo/xfsprogs/fix-mmap.patch
@@ -0,0 +1,32 @@
+diff --git a/io/mmap.c b/io/mmap.c
+index f9383e5..12f3fff 100644
+--- a/io/mmap.c
++++ b/io/mmap.c
+@@ -4,10 +4,10 @@
+ * All Rights Reserved.
+ */
+
+-#include "command.h"
+-#include "input.h"
+ #include <sys/mman.h>
+ #include <signal.h>
++#include "command.h"
++#include "input.h"
+ #include "init.h"
+ #include "io.h"
+
+@@ -20,6 +20,14 @@ static cmdinfo_t mwrite_cmd;
+ static cmdinfo_t mremap_cmd;
+ #endif /* HAVE_MREMAP */
+
++#ifndef HAVE_MAP_SYNC
++#define MAP_SYNC 0
++#define MAP_SHARED_VALIDATE 0
++#else
++#include <asm-generic/mman.h>
++#include <asm-generic/mman-common.h>
++#endif /* HAVE_MAP_SYNC */
++
+ mmap_region_t *maptable;
+ int mapcount;
+ mmap_region_t *mapping;
diff --git a/repo/xfsprogs/missing-signal.h.patch b/repo/xfsprogs/missing-signal.h.patch
new file mode 100644
index 0000000..9ce7314
--- /dev/null
+++ b/repo/xfsprogs/missing-signal.h.patch
@@ -0,0 +1,12 @@
+diff --git a/include/linux.h b/include/linux.h
+index 7bf59e0..ee25ec9 100644
+--- a/include/linux.h
++++ b/include/linux.h
+@@ -21,6 +21,7 @@
+ #include <asm/types.h>
+ #include <mntent.h>
+ #include <fcntl.h>
++#include <signal.h> /* For SIGKILL */
+ #if defined(HAVE_FALLOCATE)
+ #include <linux/falloc.h>
+ #endif
diff --git a/repo/xfsprogs/xfsprogs.xibuild b/repo/xfsprogs/xfsprogs.xibuild
new file mode 100644
index 0000000..08812da
--- /dev/null
+++ b/repo/xfsprogs/xfsprogs.xibuild
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+NAME="xfsprogs"
+DESC="XFS filesystem utilities"
+
+MAKEDEPS="attr bash gzip inih linux-headers python userspace-rcu util-linux"
+
+PKG_VER=5.15.0
+SOURCE="https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/xfsprogs-$PKG_VER.tar.gz"
+
+ADDITIONAL="
+fix-mmap.patch
+missing-signal.h.patch
+"
+
+prepare () {
+ apply_patches
+}
+
+build() {
+ export DEBUG=-DNDEBUG
+ export OPTIMIZER="$CFLAGS"
+ ./configure \
+ --prefix=/usr \
+ --sbindir=/sbin \
+ --libexecdir=/usr/lib \
+ --enable-gettext=no
+ make SHELL=/bin/bash
+}
+
+package() {
+ make -j1 DIST_ROOT="$PKG_DEST" install install-dev
+ find "$PKG_DEST" -name *.la -delete
+ mv "$PKG_DEST"/sbin "$PKG_DEST"/usr
+ mkdir -p "$PKG_DEST"/sbin
+ for i in mkfs.xfs fsck.xfs xfs_repair; do
+ mv "$PKG_DEST"/usr/sbin/$i "$PKG_DEST"/sbin/
+ done
+ chown -R root:root "$PKG_DEST"/*
+}
diff --git a/repo/xmlsec/xmlsec.xibuild b/repo/xmlsec/xmlsec.xibuild
new file mode 100644
index 0000000..fccb9cc
--- /dev/null
+++ b/repo/xmlsec/xmlsec.xibuild
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+NAME="xmlsec"
+DESC="C based implementation for XML Signature Syntax and Processing and XML Encryption Syntax and Processing"
+
+MAKEDEPS=" libxml2 libxslt openssl nss autoconf automake libtool"
+
+PKG_VER=1.2.33
+SOURCE="https://github.com/lsh123/xmlsec"
+
+prepare() {
+ autoreconf -fi
+}
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --disable-static \
+ --enable-pkgconfig \
+ --with-openssl=/usr \
+ --without-gnutls \
+ --without-gcrypt \
+ --with-default-crypto=openssl
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
diff --git a/repo/xmlstarlet/xmlstarlet.xibuild b/repo/xmlstarlet/xmlstarlet.xibuild
new file mode 100644
index 0000000..3a979ae
--- /dev/null
+++ b/repo/xmlstarlet/xmlstarlet.xibuild
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+NAME="xmlstarlet"
+DESC="A set of tools to transform, query, validate, and edit XML documents"
+
+MAKEDEPS="ghostscript libxml2 libxslt"
+
+PKG_VER=1.6.1
+SOURCE="https://sourceforge.net/projects/xmlstar/files/xmlstarlet/$PKG_VER/xmlstarlet-$PKG_VER.tar.gz/download"
+
+build() {
+ LIBXSLT_PREFIX=/usr \
+ LIBXML_PREFIX=/usr \
+ ./configure \
+ --prefix=/usr \
+ --enable-build-docs
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+ ln -s xml $PKG_DEST/usr/bin/xmlstarlet
+ install -Dm0644 Copyright $PKG_DEST/usr/share/licenses/xmlstarlet/COPYING
+}
+
diff --git a/repo/yarn/yarn.xibuild b/repo/yarn/yarn.xibuild
new file mode 100644
index 0000000..900a18f
--- /dev/null
+++ b/repo/yarn/yarn.xibuild
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+NAME="yarn"
+DESC="Fast, reliable, and secure dependency management for Node.js"
+
+MAKEDEPS=""
+
+PKG_VER=1.22.18
+SOURCE="https://yarnpkg.com/downloads/$PKG_VER/yarn-v$PKG_VER.tar.gz"
+
+package() {
+ local destdir="usr/share/node_modules/yarn"
+
+ mkdir -p "$PKG_DEST"/$destdir
+ cp -R "$BUILD_ROOT"/* "$PKG_DEST"/$destdir/
+
+ # Remove windows specific files.
+ rm "$PKG_DEST"/$destdir/bin/*.cmd
+
+ mkdir -p "$PKG_DEST"/usr/bin
+ ln -s /$destdir/bin/yarn "$PKG_DEST"/usr/bin/yarn
+ ln -s /$destdir/bin/yarn "$PKG_DEST"/usr/bin/yarnpkg
+}
+
diff --git a/repo/yasm/74184586228af6c362f970c84fce58da3fcbdec8.patch b/repo/yasm/74184586228af6c362f970c84fce58da3fcbdec8.patch
new file mode 100644
index 0000000..3ec24e6
--- /dev/null
+++ b/repo/yasm/74184586228af6c362f970c84fce58da3fcbdec8.patch
@@ -0,0 +1,18 @@
+commit 74184586228af6c362f970c84fce58da3fcbdec8
+Author: Matt Oliver <protogonoi@gmail.com>
+Date: Tue Apr 4 00:34:47 2017 +1000
+
+ fix memory errors when using gas processor with coff object output.
+
+diff --git a/modules/objfmts/coff/coff-objfmt.c b/modules/objfmts/coff/coff-objfmt.c
+index 6fcb0e3c..8f753bfe 100644
+--- a/modules/objfmts/coff/coff-objfmt.c
++++ b/modules/objfmts/coff/coff-objfmt.c
+@@ -290,6 +290,7 @@ coff_common_create(yasm_object *object)
+ objfmt_coff->done_prolog = 0;
+ objfmt_coff->unwind = NULL;
+ objfmt_coff->ssym_imagebase = NULL;
++ objfmt_coff->def_sym = NULL;
+
+ return objfmt_coff;
+ }
diff --git a/repo/yasm/yasm.xibuild b/repo/yasm/yasm.xibuild
new file mode 100644
index 0000000..f6c12b5
--- /dev/null
+++ b/repo/yasm/yasm.xibuild
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+NAME="yasm"
+DESC="A rewrite of NASM to allow for multiple syntax supported (NASM, TASM, GAS, etc.)"
+
+MAKEDEPS=""
+
+PKG_VER=1.3.0
+SOURCE="http://www.tortall.net/projects/yasm/releases/yasm-$PKG_VER.tar.gz"
+
+ADDITIONAL="
+74184586228af6c362f970c84fce58da3fcbdec8.patch
+"
+
+prepare() {
+ apply_patches
+}
+
+build() {
+ ./configure \
+ --prefix=/usr
+ make
+}
+
+check() {
+ make -j1 check
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+ install -Dm644 COPYING "$PKG_DEST"/usr/share/licenses/yasm/COPYING
+}
+
diff --git a/repo/zenity/zenity.xibuild b/repo/zenity/zenity.xibuild
new file mode 100644
index 0000000..7bf2909
--- /dev/null
+++ b/repo/zenity/zenity.xibuild
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+NAME="zenity"
+DESC="Display dialog boxes from the command line and shell scripts"
+
+MAKEDEPS="gtk2 gtk3 intltool libxml2 libnotify itstool"
+
+PKG_VER=3.32.0
+SOURCE="https://download.gnome.org/sources/zenity/${PKG_VER%.*}/zenity-$PKG_VER.tar.xz"
+
+build() {
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc
+ make
+}
+
+package() {
+ make DESTDIR="$PKG_DEST" install
+}
+
diff --git a/repo/zxing-cpp/zxing-cpp.xibuild b/repo/zxing-cpp/zxing-cpp.xibuild
new file mode 100644
index 0000000..04eccd0
--- /dev/null
+++ b/repo/zxing-cpp/zxing-cpp.xibuild
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+NAME="zxing-cpp"
+DESC="C++ port of ZXing"
+
+MAKEDEPS="cmake"
+
+PKG_VER=1.2.0
+SOURCE="https://github.com/nu-book/zxing-cpp/archive/v$PKG_VER/zxing-cpp-v$PKG_VER.tar.gz"
+
+build() {
+ cmake -B build \
+ -DCMAKE_BUILD_TYPE=None \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib
+ cmake --build build
+}
+
+check() {
+ cd build
+ CTEST_OUTPUT_ON_FAILURE=TRUE ctest
+ cd $BUILD_ROOT
+}
+
+package() {
+ DESTDIR="$PKG_DEST" cmake --install build
+}
+
diff --git a/repo/zynaddsubfx/cmake-build-type-none.patch b/repo/zynaddsubfx/cmake-build-type-none.patch
new file mode 100644
index 0000000..74e64a7
--- /dev/null
+++ b/repo/zynaddsubfx/cmake-build-type-none.patch
@@ -0,0 +1,47 @@
+Index: src/CMakeLists.txt
+===================================================================
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -185,7 +185,6 @@ option (BuildForDebug "Include gdb debug
+ option (IncludeWhatYouUse "Check for useless includes" OFF)
+ mark_as_advanced(IncludeWhatYouUse)
+
+-set(CMAKE_BUILD_TYPE "Release")
+
+
+ set (BuildOptions_x86_64AMD
+@@ -321,34 +320,6 @@ if(NOT AVOID_ASM)
+ add_definitions(-DASM_F2I_YES)
+ endif()
+
+-if (BuildForDebug)
+- set (CMAKE_BUILD_TYPE "Debug")
+- set (CMAKE_CXX_FLAGS_DEBUG ${BuildOptionsDebug})
+- message (STATUS "Building for ${CMAKE_BUILD_TYPE}, flags: ${CMAKE_CXX_FLAGS_DEBUG}")
+-else (BuildForDebug)
+- set (CMAKE_BUILD_TYPE "Release")
+-
+- set (CMAKE_CXX_FLAGS_RELEASE ${BuildOptionsBasic})
+-
+- if (BuildForAMD_X86_64)
+- set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${BuildOptions_x86_64AMD}")
+- endif (BuildForAMD_X86_64)
+-
+- if (BuildForCore2_X86_64)
+- set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${BuildOptions_X86_64Core2}")
+- endif (BuildForCore2_X86_64)
+-
+- if (SUPPORT_SSE)
+- set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${BuildOptions_SSE}")
+- endif (SUPPORT_SSE)
+-
+- if (SUPPORT_NEON AND NOT NoNeonPlease)
+- set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${BuildOptions_NEON}")
+- endif (SUPPORT_NEON AND NOT NoNeonPlease)
+-
+- message (STATUS "Building for ${CMAKE_BUILD_TYPE}, flags: ${CMAKE_CXX_FLAGS_RELEASE}")
+-endif (BuildForDebug)
+-
+ if(NOT (${CMAKE_SYSTEM_NAME} STREQUAL "Windows"))
+ add_definitions(-fPIC)
+ endif()
diff --git a/repo/zynaddsubfx/fix-bogus-strstr.patch b/repo/zynaddsubfx/fix-bogus-strstr.patch
new file mode 100644
index 0000000..8588045
--- /dev/null
+++ b/repo/zynaddsubfx/fix-bogus-strstr.patch
@@ -0,0 +1,16 @@
+Source: @pullmoll
+Upstream: no
+Reason: This piece of code is ill-conceived and cannot work. Remove it.
+
+--- a/rtosc/src/dispatch.c 2019-03-10 17:16:45.000000000 +0100
++++ b/rtosc/src/dispatch.c 2020-03-29 09:02:42.916119722 +0200
+@@ -289,8 +289,7 @@
+ return false;
+ } else if(type == 4) {
+ //extract substring
+- const char *sub=NULL;
+- return strstr(a,sub);
++ return false;
+ } else if(type == RTOSC_MATCH_OPTIONS || type == 6) {
+ return false;
+ } else if(type == RTOSC_MATCH_ENUMERATED) {
diff --git a/repo/zynaddsubfx/fix-memset.patch b/repo/zynaddsubfx/fix-memset.patch
new file mode 100644
index 0000000..1439804
--- /dev/null
+++ b/repo/zynaddsubfx/fix-memset.patch
@@ -0,0 +1,11 @@
+--- a/src/globals.h 2015-06-28 00:25:59.000000000 +0200
++++ b/src/globals.h 2015-10-03 15:34:18.914712672 +0200
+@@ -25,6 +25,8 @@
+ #ifndef GLOBALS_H
+ #define GLOBALS_H
+
++#include <string.h> /* memset(3) */
++
+ #if defined(__clang__)
+ #define REALTIME __attribute__((annotate("realtime")))
+ #define NONREALTIME __attribute__((annotate("nonrealtime")))
diff --git a/repo/zynaddsubfx/zynaddsubfx.xibuild b/repo/zynaddsubfx/zynaddsubfx.xibuild
new file mode 100644
index 0000000..228806b
--- /dev/null
+++ b/repo/zynaddsubfx/zynaddsubfx.xibuild
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+NAME="zynaddsubfx"
+DESC="Opensource software synthesizer capable of making a countless number of instruments."
+
+MAKEDEPS="cmake jack fltk portaudio mxml sndio bash-completion liblo libxpm"
+DEPS="less "
+
+PKG_VER=3.0.5
+SOURCE="https://downloads.sourceforge.net/project/zynaddsubfx/zynaddsubfx/$PKG_VER/zynaddsubfx-$PKG_VER.tar.bz2"
+ADDITIONAL="
+cmake-build-type-none.patch
+fix-bogus-strstr.patch
+fix-memset.patch
+"
+prepare () {
+ apply_patches
+ sed -e '/-DASM_F2I_YES/d' -i src/CMakeLists.txt
+
+ sed -e 's/COMMAND.*lv2-ttl-generator/COMMAND lv2-ttl-generator/g' -i \
+ src/Plugin/AlienWah/CMakeLists.txt \
+ src/Plugin/Chorus/CMakeLists.txt \
+ src/Plugin/Distortion/CMakeLists.txt \
+ src/Plugin/DynamicFilter/CMakeLists.txt \
+ src/Plugin/Echo/CMakeLists.txt \
+ src/Plugin/Phaser/CMakeLists.txt \
+ src/Plugin/Reverb/CMakeLists.txt \
+ src/Plugin/ZynAddSubFX/CMakeLists.txt
+
+ sed -i -e 's;gcc ;${CC} ;' \
+ -e 's;.fltk-config --cflags.;& ${CFLAGS};' \
+ -e 's;.fltk-config --ldflags.;& ${LDFLAGS};' \
+ ExternalPrograms/Spliter/Makefile \
+ ExternalPrograms/Controller/Makefile
+}
+
+build () {
+ cmake -B build \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DDefaultOutput=jack \
+ -DDefaultInput=jack \
+ -DGuiModule=fltk
+ cmake --build build &&
+ make -C ExternalPrograms/Spliter &&
+ make -C ExternalPrograms/Controller
+}
+
+package () {
+ DESTDIR="$PKG_DEST" cmake --install build
+}