summaryrefslogtreecommitdiff
path: root/user
diff options
context:
space:
mode:
Diffstat (limited to 'user')
-rw-r--r--user/alsa-plugins/APKBUILD58
-rw-r--r--user/alsa-utils/APKBUILD49
-rw-r--r--user/alsa-utils/alsa.confd15
-rw-r--r--user/alsa-utils/alsa.initd88
-rw-r--r--user/alsa-utils/alsaconf.patch12
-rw-r--r--user/apache-httpd/APKBUILD4
-rw-r--r--user/audacious-plugins/APKBUILD7
-rw-r--r--user/audacious/APKBUILD11
-rw-r--r--user/audacious/qt-crash.patch43
-rw-r--r--user/awesome/APKBUILD46
-rw-r--r--user/bind/APKBUILD19
-rw-r--r--user/bzflag/APKBUILD6
-rw-r--r--user/bzflag/defineAddrLen.patch6
-rw-r--r--user/ccid/APKBUILD4
-rw-r--r--user/chrony/APKBUILD6
-rw-r--r--user/chrony/chrony-include-util.patch10
-rw-r--r--user/clang/APKBUILD4
-rw-r--r--user/clang/secure-plt.patch70
-rw-r--r--user/cram/APKBUILD31
-rw-r--r--user/cups-filters/APKBUILD2
-rw-r--r--user/ddrescue/APKBUILD37
-rw-r--r--user/dhcpcd/APKBUILD4
-rw-r--r--user/dmenu/APKBUILD36
-rw-r--r--user/fluxbox/APKBUILD34
-rw-r--r--user/freecell-solver/APKBUILD43
-rw-r--r--user/freeglut/APKBUILD33
-rw-r--r--user/fuse/APKBUILD45
-rw-r--r--user/fuse/fix-realpath.patch28
-rw-r--r--user/gcompat/APKBUILD39
-rw-r--r--user/gcompat/no-utmp.patch16
-rw-r--r--user/gvim/APKBUILD4
-rw-r--r--user/i3wm/APKBUILD49
-rw-r--r--user/i3wm/i3wm-musl-glob-tilde.patch73
-rw-r--r--user/i3wm/i3wm-test-disable-branch-check.patch10
-rw-r--r--user/i3wm/i3wm-test-fix-off_t.patch26
-rw-r--r--user/imake/APKBUILD27
-rw-r--r--user/iperf3/APKBUILD57
-rw-r--r--user/iperf3/build-fixes.patch20
-rw-r--r--user/iperf3/iperf.confd3
-rw-r--r--user/iperf3/iperf.initd18
-rw-r--r--user/iperf3/remove-pg-flags.patch29
-rw-r--r--user/ipmiutil/APKBUILD37
-rw-r--r--user/ipmiutil/ipmiutil-3.0.7-fix-sha256.patch68
-rw-r--r--user/keepassxc/APKBUILD40
-rw-r--r--user/kpat/APKBUILD7
-rw-r--r--user/labplot/APKBUILD11
-rw-r--r--user/labplot/disable-liborigin.patch169
-rw-r--r--user/labplot/liborigin-endian.patch26
-rw-r--r--user/labplot/really-disable-liborigin.patch32
-rw-r--r--user/labplot/really-really-disable-liborigin.patch65
-rw-r--r--user/libixion/APKBUILD6
-rw-r--r--user/liborcus/APKBUILD6
-rw-r--r--user/libreoffice/APKBUILD41
-rw-r--r--user/libreoffice/disable-outdated-font-test.patch22
-rw-r--r--user/libsoup/APKBUILD4
-rw-r--r--user/libtap/APKBUILD43
-rw-r--r--user/libtirpc/APKBUILD8
-rw-r--r--user/libtirpc/musl.patch11
-rw-r--r--user/libxdg-basedir/APKBUILD43
-rw-r--r--user/llvm6/APKBUILD12
-rw-r--r--user/llvm6/even-more-secure-plt.patch101
-rw-r--r--user/llvm6/more-secure-plt.patch38
-rw-r--r--user/llvm6/musl-ppc64-elfv2.patch52
-rw-r--r--user/llvm6/ppc32-calling-convention.patch69
-rw-r--r--user/llvm6/secure-plt.patch208
-rw-r--r--user/lua-lgi/APKBUILD36
-rw-r--r--user/mdds/APKBUILD6
-rw-r--r--user/mesa-demos/APKBUILD30
-rw-r--r--user/minicom/APKBUILD39
-rw-r--r--user/minicom/fix-includes.patch24
-rw-r--r--user/mosh/APKBUILD78
-rw-r--r--user/mosh/fix-ppc64le-build-with-musl.patch53
-rw-r--r--user/mpv/APKBUILD4
-rw-r--r--user/nano/APKBUILD6
-rw-r--r--user/ncftp/APKBUILD46
-rw-r--r--user/nextcloud-client/APKBUILD45
-rw-r--r--user/nextcloud-client/no-webengine.patch1017
-rw-r--r--user/nextcloud-client/openssl.patch11
-rw-r--r--user/ntfs-3g/APKBUILD40
-rw-r--r--user/ode/APKBUILD48
-rw-r--r--user/ode/fix-test-link.patch9
-rw-r--r--user/perl-algorithm-diff/APKBUILD34
-rw-r--r--user/perl-any-moose/APKBUILD34
-rw-r--r--user/perl-anyevent/APKBUILD34
-rw-r--r--user/perl-appconfig/APKBUILD33
-rw-r--r--user/perl-b-hooks-endofscope/APKBUILD34
-rw-r--r--user/perl-canary-stability/APKBUILD34
-rw-r--r--user/perl-cgi/APKBUILD34
-rw-r--r--user/perl-class-data-inheritable/APKBUILD33
-rw-r--r--user/perl-class-load-xs/APKBUILD34
-rw-r--r--user/perl-class-load/APKBUILD35
-rw-r--r--user/perl-class-method-modifiers/APKBUILD35
-rw-r--r--user/perl-class-xsaccessor/APKBUILD33
-rw-r--r--user/perl-code-tidyall/APKBUILD40
-rw-r--r--user/perl-common-sense/APKBUILD34
-rw-r--r--user/perl-config-ini/APKBUILD33
-rw-r--r--user/perl-cpan-meta-check/APKBUILD34
-rw-r--r--user/perl-cwd-guard/APKBUILD39
-rw-r--r--user/perl-data-dump/APKBUILD32
-rw-r--r--user/perl-devel-checkcompiler/APKBUILD39
-rw-r--r--user/perl-devel-globaldestruction/APKBUILD34
-rw-r--r--user/perl-devel-overloadinfo/APKBUILD34
-rw-r--r--user/perl-devel-stacktrace/APKBUILD33
-rw-r--r--user/perl-devel-symdump/APKBUILD34
-rw-r--r--user/perl-dist-checkconflicts/APKBUILD34
-rw-r--r--user/perl-env-path/APKBUILD33
-rw-r--r--user/perl-eval-closure/APKBUILD34
-rw-r--r--user/perl-exception-class/APKBUILD33
-rw-r--r--user/perl-exporter-lite/APKBUILD33
-rw-r--r--user/perl-exporter-tiny/APKBUILD33
-rw-r--r--user/perl-extutils-depends/APKBUILD34
-rw-r--r--user/perl-file-copy-recursive-reduced/APKBUILD35
-rw-r--r--user/perl-file-copy-recursive/APKBUILD35
-rw-r--r--user/perl-file-find-object-rule/APKBUILD34
-rw-r--r--user/perl-file-find-object/APKBUILD33
-rw-r--r--user/perl-file-finder/APKBUILD36
-rw-r--r--user/perl-file-finder/fix-test.patch16
-rw-r--r--user/perl-file-pushd/APKBUILD33
-rw-r--r--user/perl-file-sharedir-install/APKBUILD34
-rw-r--r--user/perl-file-slurp/APKBUILD33
-rw-r--r--user/perl-file-which/APKBUILD33
-rw-r--r--user/perl-games-solitaire-verify/APKBUILD35
-rw-r--r--user/perl-getopt-long-descriptive/APKBUILD34
-rw-r--r--user/perl-import-into/APKBUILD33
-rw-r--r--user/perl-inline-c/APKBUILD35
-rw-r--r--user/perl-inline/APKBUILD35
-rw-r--r--user/perl-io-all/APKBUILD33
-rw-r--r--user/perl-io-tty/APKBUILD33
-rw-r--r--user/perl-ipc-run/APKBUILD34
-rw-r--r--user/perl-ipc-run3/APKBUILD33
-rw-r--r--user/perl-ipc-system-simple/APKBUILD33
-rw-r--r--user/perl-json-xs/APKBUILD34
-rw-r--r--user/perl-lib-relative/APKBUILD33
-rw-r--r--user/perl-list-compare/APKBUILD33
-rw-r--r--user/perl-list-moreutils-xs/APKBUILD33
-rw-r--r--user/perl-list-moreutils/APKBUILD33
-rw-r--r--user/perl-list-someutils-xs/APKBUILD34
-rw-r--r--user/perl-list-someutils/APKBUILD34
-rw-r--r--user/perl-log-any/APKBUILD33
-rw-r--r--user/perl-mixin-linewise/APKBUILD33
-rw-r--r--user/perl-module-build-xsutil/APKBUILD39
-rw-r--r--user/perl-module-implementation/APKBUILD34
-rw-r--r--user/perl-module-runtime-conflicts/APKBUILD33
-rw-r--r--user/perl-module-runtime/APKBUILD35
-rw-r--r--user/perl-moo/APKBUILD36
-rw-r--r--user/perl-moose/APKBUILD40
-rw-r--r--user/perl-moosex-getopt/APKBUILD36
-rw-r--r--user/perl-moosex-role-parameterised/APKBUILD35
-rw-r--r--user/perl-moosex-strictconstructor/APKBUILD34
-rw-r--r--user/perl-moox-late/APKBUILD34
-rw-r--r--user/perl-moox/APKBUILD33
-rw-r--r--user/perl-mouse/APKBUILD40
-rw-r--r--user/perl-mousex-nativetraits/APKBUILD35
-rw-r--r--user/perl-mro-compat/APKBUILD33
-rw-r--r--user/perl-namespace-autoclean/APKBUILD34
-rw-r--r--user/perl-namespace-clean/APKBUILD33
-rw-r--r--user/perl-number-compare/APKBUILD33
-rw-r--r--user/perl-package-deprecationmanager/APKBUILD34
-rw-r--r--user/perl-package-stash-xs/APKBUILD34
-rw-r--r--user/perl-package-stash/APKBUILD34
-rw-r--r--user/perl-params-validate/APKBUILD34
-rw-r--r--user/perl-parse-recdescent/APKBUILD35
-rw-r--r--user/perl-path-tiny/APKBUILD35
-rw-r--r--user/perl-pegex/APKBUILD35
-rw-r--r--user/perl-perl-tidy/APKBUILD33
-rw-r--r--user/perl-perlio-utf8_strict/APKBUILD34
-rw-r--r--user/perl-pod-coverage/APKBUILD34
-rw-r--r--user/perl-role-tiny/APKBUILD34
-rw-r--r--user/perl-scope-guard/APKBUILD33
-rw-r--r--user/perl-specio-library-path-tiny/APKBUILD33
-rw-r--r--user/perl-specio/APKBUILD36
-rw-r--r--user/perl-string-shellquote/APKBUILD33
-rw-r--r--user/perl-sub-exporter-progressive/APKBUILD34
-rw-r--r--user/perl-sub-identify/APKBUILD33
-rw-r--r--user/perl-sub-name/APKBUILD33
-rw-r--r--user/perl-sub-quote/APKBUILD34
-rw-r--r--user/perl-task-freecellsolver-testing/APKBUILD38
-rw-r--r--user/perl-task-test-run-allplugins/APKBUILD38
-rw-r--r--user/perl-template-toolkit/APKBUILD34
-rw-r--r--user/perl-test-class-most/APKBUILD33
-rw-r--r--user/perl-test-class/APKBUILD34
-rw-r--r--user/perl-test-cleannamespaces/APKBUILD36
-rw-r--r--user/perl-test-data-split/APKBUILD34
-rw-r--r--user/perl-test-deep/APKBUILD34
-rw-r--r--user/perl-test-differences/APKBUILD34
-rw-r--r--user/perl-test-file/APKBUILD35
-rw-r--r--user/perl-test-mockrandom/APKBUILD34
-rw-r--r--user/perl-test-most/APKBUILD33
-rw-r--r--user/perl-test-perltidy/APKBUILD33
-rw-r--r--user/perl-test-pod-coverage/APKBUILD35
-rw-r--r--user/perl-test-run-cmdline/APKBUILD35
-rw-r--r--user/perl-test-run-plugin-ai/APKBUILD33
-rw-r--r--user/perl-test-run-plugin-bof/APKBUILD33
-rw-r--r--user/perl-test-run-plugin-cfv/APKBUILD34
-rw-r--r--user/perl-test-run-plugin-cs/APKBUILD34
-rw-r--r--user/perl-test-run-plugin-tdf/APKBUILD33
-rw-r--r--user/perl-test-run/APKBUILD35
-rw-r--r--user/perl-test-runvalgrind/APKBUILD36
-rw-r--r--user/perl-test-runvalgrind/portable-memory-assumptions.patch14
-rw-r--r--user/perl-test-trailingspace/APKBUILD33
-rw-r--r--user/perl-test-trap/APKBUILD33
-rw-r--r--user/perl-test-utf8/APKBUILD34
-rw-r--r--user/perl-test-warnings/APKBUILD34
-rw-r--r--user/perl-text-diff/APKBUILD34
-rw-r--r--user/perl-text-glob/APKBUILD33
-rw-r--r--user/perl-text-sprintf-named/APKBUILD34
-rw-r--r--user/perl-time-duration-parse/APKBUILD33
-rw-r--r--user/perl-time-duration/APKBUILD33
-rw-r--r--user/perl-timedate/APKBUILD33
-rw-r--r--user/perl-type-tiny/APKBUILD33
-rw-r--r--user/perl-types-serialiser/APKBUILD34
-rw-r--r--user/perl-universal-require/APKBUILD33
-rw-r--r--user/perl-variable-magic/APKBUILD33
-rw-r--r--user/perl-x11-xcb/APKBUILD38
-rw-r--r--user/perl-xml-descent/APKBUILD35
-rw-r--r--user/perl-xml-namespacesupport/APKBUILD32
-rw-r--r--user/perl-xml-simple/APKBUILD32
-rw-r--r--user/perl-xml-tokeparser/APKBUILD34
-rw-r--r--user/perl-xs-object-magic/APKBUILD36
-rw-r--r--user/perl-yaml-libyaml/APKBUILD35
-rw-r--r--user/physlock/APKBUILD28
-rw-r--r--user/physlock/utmps.patch33
-rw-r--r--user/protobuf/APKBUILD108
-rw-r--r--user/protobuf/musl-fix.patch22
-rw-r--r--user/protobuf/trim-rakefile.patch72
-rw-r--r--user/py3-cffi/APKBUILD32
-rw-r--r--user/py3-cparser/APKBUILD31
-rw-r--r--user/rpcbind/APKBUILD43
-rw-r--r--user/rpcbind/rpcbind.confd5
-rw-r--r--user/rpcbind/rpcbind.initd25
-rw-r--r--user/rpcbind/rpcbind.pre-install6
l---------user/rpcbind/rpcbind.pre-upgrade1
-rw-r--r--user/rust/0001-Require-static-native-libraries-when-linking-static-.patch44
-rw-r--r--user/rust/0002-Don-t-pass-CFLAGS-to-the-C-compiler.patch36
-rw-r--r--user/rust/0003-Fix-LLVM-build.patch26
-rw-r--r--user/rust/0004-test-sysroot-crates-are-unstable-Fix-test-when-rpath.patch25
-rw-r--r--user/rust/0005-Remove-nostdlib-and-musl_root-from-musl-targets.patch444
-rw-r--r--user/rust/0006-Prefer-libgcc_eh-over-libunwind-for-musl.patch24
-rw-r--r--user/rust/0007-runtest-Fix-proc-macro-tests-on-musl-hosts.patch37
-rw-r--r--user/rust/0008-Allow-rustdoc-to-work-when-cross-compiling-on-musl.patch36
-rw-r--r--user/rust/0009-Add-missing-OpenSSL-configurations-for-musl-targets.patch42
-rw-r--r--user/rust/0010-test-linkage-visibility-dlsym-only-sees-exported-sym.patch26
-rw-r--r--user/rust/0011-test-invalid_const_promotion-Accept-SIGTRAP-as-a-val.patch25
-rw-r--r--user/rust/0012-Add-powerpc-unknown-linux-musl-target.patch92
-rw-r--r--user/rust/0015-Use-ELFv2-ABI-on-powerpc64-musl-LLVM-half.patch29
-rw-r--r--user/rust/0016-Use-ELFv2-ABI-on-powerpc64-musl-Rust-half.patch43
-rw-r--r--user/rust/0017-Fix-powerpc64-ELFv2-big-endian-struct-passing-ABI.patch93
-rw-r--r--user/rust/0018-Add-powerpc64-unknown-linux-musl-target.patch118
-rw-r--r--user/rust/0019-run-pass-const-endianness-negate-before-to_le.patch29
-rw-r--r--user/rust/0020-Fix-double_check-tests-on-big-endian-targets.patch75
-rw-r--r--user/rust/0021-x.py-Use-python3-instead-of-python.patch22
-rw-r--r--user/rust/0022-test-debuginfo-Update-for-GDB-output-format-changes.patch109
-rw-r--r--user/rust/0023-test-target-feature-gate-Ignore-on-not-applicable-ta.patch26
-rw-r--r--user/rust/0024-Ignore-broken-and-non-applicable-tests.patch63
-rw-r--r--user/rust/0025-Move-debugger-scripts-to-usr-share-rust.patch53
-rw-r--r--user/rust/0026-Add-foxkit-target-specs.patch204
-rw-r--r--user/rust/0027-Add-foxkit-target-specs-for-OpenSSL.patch38
-rw-r--r--user/rust/0028-Link-stage-2-tools-dynamically-to-libstd.patch27
-rw-r--r--user/rust/0030-liblibc-linkage.patch17
-rw-r--r--user/rust/0031-liblibc-dcff154781e4.patch642
-rw-r--r--user/rust/0032-liblibc-90c01fa6b0f4.patch162
-rw-r--r--user/rust/0033-liblibc-checksums.patch9
-rw-r--r--user/rust/0034-rls-atomics.patch63
-rw-r--r--user/rust/APKBUILD344
-rw-r--r--user/screen/APKBUILD43
-rw-r--r--user/screen/utmpx.patch21
-rw-r--r--user/sdl_mixer/APKBUILD44
-rw-r--r--user/sdl_net/APKBUILD46
-rw-r--r--user/sdl_ttf/APKBUILD45
-rw-r--r--user/strongswan/0205-ike-Adhere-to-IKE_SA-limit-when-checking-out-by-conf.patch104
-rw-r--r--user/strongswan/1001-charon-add-optional-source-and-remote-overrides-for-.patch597
-rw-r--r--user/strongswan/1002-vici-send-certificates-for-ike-sa-events.patch131
-rw-r--r--user/strongswan/1003-vici-add-support-for-individual-sa-state-changes.patch159
-rw-r--r--user/strongswan/APKBUILD108
-rw-r--r--user/strongswan/charon.initd30
-rw-r--r--user/strongswan/strongswan.initd35
-rw-r--r--user/strongswan/strongswan.pre-install6
-rw-r--r--user/tcpdump/APKBUILD38
-rw-r--r--user/tcsh/001-sysmalloc.patch15
-rw-r--r--user/tcsh/002-test_123-posix_fix.patch34
-rw-r--r--user/tcsh/APKBUILD47
-rw-r--r--user/tcsh/tcsh.post-install3
l---------user/tcsh/tcsh.post-upgrade1
-rw-r--r--user/tcsh/tcsh.pre-deinstall3
-rw-r--r--user/the_silver_searcher/APKBUILD40
-rw-r--r--user/thunar/APKBUILD4
-rw-r--r--user/tlp/APKBUILD52
-rwxr-xr-xuser/tlp/tlp.initd15
-rw-r--r--user/unrar/APKBUILD4
-rw-r--r--user/vala/APKBUILD4
-rw-r--r--user/valgrind/0001-Ensure-ELFv2-is-supported-on-PPC64.patch817
-rw-r--r--user/valgrind/APKBUILD13
-rw-r--r--user/valgrind/coregrind-elfv2.patch443
-rw-r--r--user/valgrind/suppressions.patch24
-rw-r--r--user/vlc/APKBUILD2
-rw-r--r--user/vte/APKBUILD4
-rw-r--r--user/xautolock/APKBUILD30
-rw-r--r--user/xautolock/processwait.patch33
-rw-r--r--user/xcb-util-xrm/APKBUILD37
-rw-r--r--user/xinput/APKBUILD33
-rw-r--r--user/xmoto/APKBUILD58
-rw-r--r--user/xmoto/stupid-lua.patch41
-rw-r--r--user/xmoto/utf8.patch13
-rw-r--r--user/xorg-cf-files/APKBUILD38
-rw-r--r--user/xterm/APKBUILD4
305 files changed, 14273 insertions, 818 deletions
diff --git a/user/alsa-plugins/APKBUILD b/user/alsa-plugins/APKBUILD
new file mode 100644
index 000000000..304b63ab4
--- /dev/null
+++ b/user/alsa-plugins/APKBUILD
@@ -0,0 +1,58 @@
+# Contributor: Taner Tas <taner76@gmail.com>
+# Maintainer: Max Rees <maxcrees@me.com>
+pkgname=alsa-plugins
+pkgver=1.1.6
+pkgrel=0
+pkgdesc="Advanced Linux Sound Architecture (ALSA) plugins"
+url="https://www.alsa-project.org/main/index.php/Main_Page"
+arch="all"
+options="!check" # No test suite.
+license="GPL-2.0+ AND LGPL-2.1+ AND BSD-3-Clause AND MIT"
+makedepends="linux-headers alsa-lib-dev speexdsp-dev ffmpeg-dev
+ libsamplerate-dev pulseaudio-dev"
+subpackages="$pkgname-lavcrate $pkgname-pulse $pkgname-a52"
+source="ftp://ftp.alsa-project.org/pub/plugins/$pkgname-$pkgver.tar.bz2"
+
+prepare() {
+ default_prepare
+ update_config_sub
+}
+
+build() {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var
+ make
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" -name '*.la' -type f -delete
+}
+
+lavcrate() {
+ pkgdesc="FFmpeg samplerate conversion plugins for ALSA"
+ mkdir -p "$subpkgdir"/usr/lib/alsa-lib/
+ mv "$pkgdir"/usr/lib/alsa-lib/*lavcrate* "$subpkgdir"/usr/lib/alsa-lib/
+}
+
+pulse() {
+ pkgdesc="PulseAudio support for ALSA-only applications"
+ mkdir -p "$subpkgdir"/usr/lib/alsa-lib/
+ mv "$pkgdir"/usr/lib/alsa-lib/*pulse.so "$subpkgdir"/usr/lib/alsa-lib/
+ mv "$pkgdir"/usr/share "$subpkgdir"/usr/
+}
+
+a52() {
+ pkgdesc="S16 linear sound format to A52 compressed format for SPDIF output"
+ mkdir -p "$subpkgdir"/usr/lib/alsa-lib/
+ mv "$pkgdir"/usr/lib/alsa-lib/*a52.so "$subpkgdir"/usr/lib/alsa-lib/
+}
+
+sha512sums="f01633cd7166a2fba4c5b4d5d786b5a2122f6a810f5b5b7209c42033759d116a4515174e7ee57973d5de716be88a246d733dc5a2daf92b72377c274b04db401b alsa-plugins-1.1.6.tar.bz2"
diff --git a/user/alsa-utils/APKBUILD b/user/alsa-utils/APKBUILD
new file mode 100644
index 000000000..7ecea8193
--- /dev/null
+++ b/user/alsa-utils/APKBUILD
@@ -0,0 +1,49 @@
+# Contributor: Leonardo Arena <rnalrd@alpinelinux.org>
+# Maintainer: Max Rees <maxcrees@me.com>
+pkgname=alsa-utils
+pkgver=1.1.6
+pkgrel=0
+pkgdesc="Advanced Linux Sound Architecture (ALSA) utilities"
+url="https://www.alsa-project.org/main/index.php/Main_Page"
+arch="all"
+options="!check" # No test suite.
+license="GPL-2.0+ AND LGPL-2.0+ AND ISC AND GPL-2.0-only"
+makedepends="alsa-lib-dev fftw-dev ncurses-dev pciutils-dev"
+depends="bash dialog"
+subpackages="$pkgname-doc $pkgname-dbg $pkgname-lang $pkgname-openrc"
+replaces="alsaconf"
+source="ftp://ftp.alsa-project.org/pub/utils/$pkgname-$pkgver.tar.bz2
+ alsaconf.patch
+ alsa.initd
+ alsa.confd
+"
+
+prepare() {
+ default_prepare
+ update_config_sub
+}
+
+build() {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var \
+ --disable-xmlto
+ make
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ install -Dm755 ../alsa.initd "$pkgdir"/etc/init.d/alsa
+ install -Dm644 ../alsa.confd "$pkgdir"/etc/conf.d/alsa
+}
+
+sha512sums="24d0ffaeeccecb3276d7d35ef51e6de6026a63fa5a1a1e4605b024f54d8097717e97ec9d33cfe50830ad17e4a89268ca24b065039b0df7f9fbe02b570617aa58 alsa-utils-1.1.6.tar.bz2
+817215be6e9f103a8a187df5b1142c4d2e952f547a64579a9b8cfa58bd762d6a55bde75c0f66f018c0597744d07ccdb08216f7b368db464e36667cecedcc00f3 alsaconf.patch
+8a52e6363d5dcfb16e1e607e1af3e46a2148989689e5ab04caf05f84dc68b34cc003b1cf0945ce2c3670cc7f3ef0e40824f689f1efa2d09177c82b13571a7168 alsa.initd
+6e716e6230fd3d2c33e3cb2dbf572d632c9ac6452c1768388bea7d3ca22f7c72cf6bcd702580f45cb9089983582011c8b04cbdb4420d14fb988167b1391ea547 alsa.confd"
diff --git a/user/alsa-utils/alsa.confd b/user/alsa-utils/alsa.confd
new file mode 100644
index 000000000..d47edb124
--- /dev/null
+++ b/user/alsa-utils/alsa.confd
@@ -0,0 +1,15 @@
+# RESTORE_ON_START:
+# Do you want to restore your mixer settings? If not, your cards will be
+# muted.
+# no - Do not restore state
+# yes - Restore state
+
+RESTORE_ON_START="yes"
+
+# SAVE_ON_STOP:
+# Do you want to save changes made to your mixer volumes when alsasound
+# stops?
+# no - Do not save state
+# yes - Save state
+
+SAVE_ON_STOP="yes"
diff --git a/user/alsa-utils/alsa.initd b/user/alsa-utils/alsa.initd
new file mode 100644
index 000000000..e0a1215cf
--- /dev/null
+++ b/user/alsa-utils/alsa.initd
@@ -0,0 +1,88 @@
+#!/sbin/openrc-run
+# $Header: /var/cvsroot/gentoo-x86/media-sound/alsa-utils/files/alsasound.initd-r6,v 1.1 2014/06/23 21:34:42 ssuominen Exp $
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+alsastatedir=/var/lib/alsa
+alsascrdir=/etc/alsa.d
+alsahomedir=/var/run/alsasound
+
+extra_commands="save restore"
+
+depend() {
+ need localmount
+ after bootmisc modules isapnp coldplug hotplug
+}
+
+restore() {
+ ebegin "Restoring Mixer Levels"
+
+ checkpath -q -d -m 0700 -o root:root ${alsahomedir} || return 1
+
+ if [ ! -r "${alsastatedir}/asound.state" ] ; then
+ ewarn "No mixer config in ${alsastatedir}/asound.state, you have to unmute your card!"
+ eend 0
+ return 0
+ fi
+
+ local cards="$(sed -n -e 's/ *\([[:digit:]]*\) .*/\1/p' /proc/asound/cards)"
+ local CARDNUM
+ for cardnum in ${cards}; do
+ [ -e /dev/snd/controlC${cardnum} ] || sleep 2
+ [ -e /dev/snd/controlC${cardnum} ] || sleep 2
+ [ -e /dev/snd/controlC${cardnum} ] || sleep 2
+ [ -e /dev/snd/controlC${cardnum} ] || sleep 2
+ alsactl -E HOME="${alsahomedir}" -I -f "${alsastatedir}/asound.state" restore ${cardnum} \
+ || ewarn "Errors while restoring defaults, ignoring"
+ done
+
+ for ossfile in "${alsastatedir}"/oss/card*_pcm* ; do
+ [ -e "${ossfile}" ] || continue
+ # We use cat because I'm not sure if cp works properly on /proc
+ local procfile=${ossfile##${alsastatedir}/oss}
+ procfile="$(echo "${procfile}" | sed -e 's,_,/,g')"
+ if [ -e /proc/asound/"${procfile}"/oss ] ; then
+ cat "${ossfile}" > /proc/asound/"${procfile}"/oss
+ fi
+ done
+
+ eend 0
+}
+
+save() {
+ ebegin "Storing ALSA Mixer Levels"
+
+ checkpath -q -d -m 0700 -o root:root ${alsahomedir} || return 1
+
+ mkdir -p "${alsastatedir}"
+ if ! alsactl -E HOME="${alsahomedir}" -f "${alsastatedir}/asound.state" store; then
+ eerror "Error saving levels."
+ eend 1
+ return 1
+ fi
+
+ for ossfile in /proc/asound/card*/pcm*/oss; do
+ [ -e "${ossfile}" ] || continue
+ local device=${ossfile##/proc/asound/} ; device=${device%%/oss}
+ device="$(echo "${device}" | sed -e 's,/,_,g')"
+ mkdir -p "${alsastatedir}/oss/"
+ cp "${ossfile}" "${alsastatedir}/oss/${device}"
+ done
+
+ eend 0
+}
+
+start() {
+ if [ "${RESTORE_ON_START}" = "yes" ]; then
+ restore
+ fi
+
+ return 0
+}
+
+stop() {
+ if [ "${SAVE_ON_STOP}" = "yes" ]; then
+ save
+ fi
+ return 0
+}
diff --git a/user/alsa-utils/alsaconf.patch b/user/alsa-utils/alsaconf.patch
new file mode 100644
index 000000000..a7dec1c9a
--- /dev/null
+++ b/user/alsa-utils/alsaconf.patch
@@ -0,0 +1,12 @@
+diff -Naur alsa-utils-1.0.9a-orig/alsaconf/alsaconf.in alsa-utils-1.0.9a/alsaconf/alsaconf.in
+--- alsa-utils-1.0.9a-orig/alsaconf/alsaconf.in 2005-03-24 00:24:52.000000000 -0800
++++ alsa-utils-1.0.9a/alsaconf/alsaconf.in 2005-07-18 09:25:02.000000000 -0700
+@@ -65,6 +58,8 @@
+ distribution="redhat"
+ elif test -f /etc/fedora-release && grep -q "Fedora" /etc/fedora-release; then
+ distribution="fedora"
++elif test -f /etc/adelie-release; then
++ distribution="adelie"
+ elif [ -f /etc/slackware-version -o -f /etc/slamd64-version ]; then
+ distribution="slackware"
+ else
diff --git a/user/apache-httpd/APKBUILD b/user/apache-httpd/APKBUILD
index 2eabdaf90..84db40dc6 100644
--- a/user/apache-httpd/APKBUILD
+++ b/user/apache-httpd/APKBUILD
@@ -2,7 +2,7 @@
# Maintainer: Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com>
pkgname=apache-httpd
_pkgreal=httpd
-pkgver=2.4.34
+pkgver=2.4.35
pkgrel=0
pkgdesc="Open-source HTTP server"
url="https://httpd.apache.org"
@@ -135,7 +135,7 @@ ldap() {
"$subpkgdir"/usr/libexec/apache2
}
-sha512sums="2bc09213f08a4722e305929fbac5f5060c7a8444704494894bb9b61f17e4d20bb6e3d663bb93fc5b2030b04a43fb12373d260cc291422b210b299725aaf3b5c8 httpd-2.4.34.tar.bz2
+sha512sums="f5d6a849850ebdf4e38b586c84cc1063d68ac4c6737895c9ac1c8796c22655681c55b4de77ed9f1f807338fdb9f7824faf911361aa31cc46f3c3a2cbabe20543 httpd-2.4.35.tar.bz2
c8bc2bb06ae51b0956e0ee673e80c444551c9b33dfcbb845106477c46d9e52786a8896022e1f00102264fecdf66e35e47fc6cf0abe9836fa536735cff4e6adf4 adelie.layout
336e81fa0d08f8fbe6243d52bd59b12cf2e925deb49b29d7a22953c5d40a951b6b753f51e5a396752cb0bbaf1cf25b1358902f375fb65639d00e62db7ae55ff2 apache-httpd.confd
9893248f1724748c9ef91171728b4c557ced7de543e23ed72cb75c02728048b2813ac99015a4a28e7984daa51faa6e42403c17b875539fe71c33424865eccecf apache-httpd.initd
diff --git a/user/audacious-plugins/APKBUILD b/user/audacious-plugins/APKBUILD
index 150efce23..8a4742252 100644
--- a/user/audacious-plugins/APKBUILD
+++ b/user/audacious-plugins/APKBUILD
@@ -2,8 +2,8 @@
# Contributor: William Pitcock <nenolod@dereferenced.org>
# Maintainer: A. Wilcox <awilfox@adelielinux.org>
pkgname=audacious-plugins
-pkgver=3.9
-pkgrel=2
+pkgver=3.10
+pkgrel=0
pkgdesc="Playlist-oriented media player (plugins)"
url="https://audacious-media-player.org/"
arch="all"
@@ -17,6 +17,7 @@ makedepends="audacious-dev>=${pkgver%.*}
libcue-dev libmms-dev libsamplerate-dev libsndfile-dev libxcomposite-dev
libnotify-dev libogg-dev libvorbis-dev pulseaudio-dev
alsa-lib-dev curl-dev flac-dev lame-dev neon-dev sdl-dev wavpack-dev
+ faad2-dev fluidsynth-dev qt5-qtmultimedia-dev
automake autoconf"
subpackages="$pkgname-lang"
source="https://distfiles.audacious-media-player.org/$pkgname-$pkgver.tar.bz2"
@@ -46,4 +47,4 @@ package() {
make DESTDIR="$pkgdir" install
}
-sha512sums="00c8c53d69995ca1fedb91c7df609cc6c65b13e1af23b98a2fbda143c02ac554cc2c42c01f1c593af252e36bfb85b6324f2daca8632d3b672c69fb4dead2e3fa audacious-plugins-3.9.tar.bz2"
+sha512sums="88dd93b5a7f6582ec42cf539d1000de0900cce683f4de85d8a17f57c7ba34545c6277882cad1505cb6682ee7b885ffcd1fe5675f7e24dc3e2a650615789d9d52 audacious-plugins-3.10.tar.bz2"
diff --git a/user/audacious/APKBUILD b/user/audacious/APKBUILD
index e4a2377c7..de1cc6993 100644
--- a/user/audacious/APKBUILD
+++ b/user/audacious/APKBUILD
@@ -2,8 +2,8 @@
# Contributor: William Pitcock <nenolod@dereferenced.org>
# Maintainer: A. Wilcox <awilfox@adelielinux.org>
pkgname=audacious
-pkgver=3.9
-pkgrel=2
+pkgver=3.10
+pkgrel=0
pkgdesc="A playlist-oriented media player with multiple interfaces"
url="https://audacious-media-player.org/"
arch="all"
@@ -12,7 +12,9 @@ license="ISC"
depends_dev="qt5-qtbase-dev dbus-glib-dev"
makedepends="$depends_dev libguess-dev>=1.2 libxml2-dev autoconf automake"
subpackages="$pkgname-dev $pkgname-doc $pkgname-lang"
-source="https://distfiles.audacious-media-player.org/$pkgname-$pkgver.tar.bz2"
+source="https://distfiles.audacious-media-player.org/$pkgname-$pkgver.tar.bz2
+ qt-crash.patch
+ "
prepare() {
default_prepare
@@ -38,4 +40,5 @@ package() {
make DESTDIR="$pkgdir" install
}
-sha512sums="d8ef24c91c84bfa80831075cd9a12fc4bf02cec8bc96bcfa5a941254d194cccdc482482b1c015bc63e1142718c2221034c0f3a87e2cb6e4daf3b4cc428328aaa audacious-3.9.tar.bz2"
+sha512sums="513d5f9608c1ebeae9cf9bb95128244e990e66c74bf49aff6570ec557d537809f3ebf93c400f5df2708ff61cf04ecc95da183b111f5a757735cef5a68dd9907f audacious-3.10.tar.bz2
+debc016b8a2a1313bdd4a840c103755a52a7e4a5e21970ca82031bac101253f04ade3e81aa648cf5f44b8225da6e1b245f995df6ea43f2ed1f2e757d774205d4 qt-crash.patch"
diff --git a/user/audacious/qt-crash.patch b/user/audacious/qt-crash.patch
new file mode 100644
index 000000000..4b7d42d3b
--- /dev/null
+++ b/user/audacious/qt-crash.patch
@@ -0,0 +1,43 @@
+From 61471d51503736d868f5978f5b9a1471f3d2c9ce Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Thu, 20 Sep 2018 12:36:16 -0500
+Subject: [PATCH] libaudqt: Fix crash when infopopup is being hidden
+
+Hovering over the track I wanted to listen to showed a tool tip (the
+InfoPopup widget); if I moved the mouse in any way after the widget was
+displayed, it would immediately crash with a segmentation fault.
+
+Valgrind showed that this was due to s_infopopup being deleted from an
+event that involved it. By switching both `delete` to `deleteLater`,
+the crash no longer occurs.
+
+Closes: #828.
+---
+ src/libaudqt/infopopup-qt.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/libaudqt/infopopup-qt.cc b/src/libaudqt/infopopup-qt.cc
+index fdbba41d2..cad4d16d5 100644
+--- a/src/libaudqt/infopopup-qt.cc
++++ b/src/libaudqt/infopopup-qt.cc
+@@ -176,7 +176,7 @@ static InfoPopup * s_infopopup;
+
+ static void infopopup_show (const String & filename, const Tuple & tuple)
+ {
+- delete s_infopopup;
++ if(s_infopopup) s_infopopup->deleteLater();
+ s_infopopup = new InfoPopup (filename, tuple);
+
+ QObject::connect (s_infopopup, & QObject::destroyed, [] () {
+@@ -206,7 +206,7 @@ EXPORT void infopopup_show_current ()
+
+ EXPORT void infopopup_hide ()
+ {
+- delete s_infopopup;
++ s_infopopup->deleteLater();
+ }
+
+ } // namespace audqt
+--
+2.18.0
+
diff --git a/user/awesome/APKBUILD b/user/awesome/APKBUILD
new file mode 100644
index 000000000..aba8a99cb
--- /dev/null
+++ b/user/awesome/APKBUILD
@@ -0,0 +1,46 @@
+# Contributor: Łukasz Jendrysik <scadu@yandex.com>
+# Contributor: William Pitcock <nenolod@dereferenced.org>
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=awesome
+pkgver=4.2
+pkgrel=0
+pkgdesc="lua-configurable window manager framework"
+url="http://awesome.naquadah.org/"
+arch="all"
+license="GPL-2.0+"
+options="!check" # Tests require X and D-Bus
+depends="imagemagick lua-lgi cairo-gobject pango"
+makedepends="lua5.3 lua5.3-dev libxcb-dev pango-dev cairo-dev cmake gperf glib-dev
+ imlib2-dev libxdg-basedir-dev libev-dev startup-notification-dev
+ xcb-util-keysyms-dev xcb-util-image-dev xcb-util-dev xcb-util-wm-dev
+ dbus-dev gdk-pixbuf-dev xcb-util-cursor-dev libxkbcommon-dev
+ xcb-util-xrm-dev libexecinfo-dev xmlto"
+checkdepends="xorg-server-xephyr"
+subpackages="$pkgname-doc"
+source="https://github.com/awesomeWM/$pkgname-releases/raw/master/$pkgname-$pkgver.tar.xz"
+
+build() {
+ # Awesome does not support in-tree builds
+ mkdir -p "$builddir/build"
+ cd "$builddir/build"
+ cmake -DCMAKE_INSTALL_PREFIX=/usr \
+ -DSYSCONFDIR=/etc \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DLUA_INCLUDE_DIR=/usr/include/lua5.3 \
+ -DLUA_LIBRARIES=/usr/lib/lua5.3/liblua.so \
+ ..
+ make
+}
+
+check() {
+ cd "$builddir/build"
+ make check
+}
+
+package() {
+ cd "$builddir/build"
+ make DESTDIR="$pkgdir" install
+}
+
+sha512sums="134dd3625c86243861b3d0701cc8bfd8c00986d7027f0832016c3f5e59e6b9a1ef2f677bb0d1d66ece63449533e4b13d8d7388e96e6f9014212030a79f163e09 awesome-4.2.tar.xz"
diff --git a/user/bind/APKBUILD b/user/bind/APKBUILD
index 32ff1b23f..7e0b38e15 100644
--- a/user/bind/APKBUILD
+++ b/user/bind/APKBUILD
@@ -4,23 +4,27 @@
# Contributor: Natanael Copa <ncopa@alpinelinux.org>
# Maintainer: Dan Theisen <djt@hxx.in>
pkgname=bind
-pkgver=9.12.1_p2
+pkgver=9.13.3
_p=${pkgver#*_p}
_ver=${pkgver%_p*}
_major=${pkgver%%.*}
[ "$_p" != "$pkgver" ] && _ver="${_ver}-P$_p"
-pkgrel=0
+pkgrel=1
pkgdesc="The ISC DNS server"
url="https://www.isc.org/downloads/bind/"
arch="all"
# NOTE: The tests were not run because they require that
# the IP addresses 10.53.0.1 through 10.53.0.8 are configured
-# as alias addresses on the loopback interface.
+# as alias addresses on the loopback interface.
+# To test, run:
+# cd $builddir
+# sudo bin/tests/system/ifconfig.sh up
+# make check
options="!check"
license="ISC AND Apache-2.0 AND OpenSSL AND BSD-2-Clause AND BSD-3-Clause AND BSD-4-Clause"
pkgusers="named"
pkggroups="named"
-makedepends="bash libressl-dev libcap-dev perl linux-headers bsd-compat-headers libxml2-dev json-c-dev"
+makedepends="bash openssl-dev libcap-dev perl linux-headers bsd-compat-headers libxml2-dev json-c-dev"
install="$pkgname.pre-install"
subpackages="$pkgname-doc $pkgname-dev $pkgname-libs $pkgname-openrc $pkgname-tools"
source="https://ftp.isc.org/isc/${pkgname}${_major}/$_ver/$pkgname-$_ver.tar.gz
@@ -36,6 +40,11 @@ source="https://ftp.isc.org/isc/${pkgname}${_major}/$_ver/$pkgname-$_ver.tar.gz
builddir="$srcdir/$pkgname-$_ver"
# secfixes:
+# 9.13.3:
+# - CVE-2018-5741
+# - CVE-2018-5740
+# 9.13.2:
+# - CVE-2018-5738
# 9.12.1_p2-r0:
# - CVE-2018-5737
# - CVE-2018-5736
@@ -138,7 +147,7 @@ tools() {
done
}
-sha512sums="de47eef272c437316444c4f585a2f98ae9169fc118fd057464a5cd064bb9079ffc07145dabf388cd240f56a5ad6d3ad78cf8d98fc37609681eba5d87e18a4f9a bind-9.12.1-P2.tar.gz
+sha512sums="980f294ef7b75c9a0917212e26300037ad6a33ff3565c099a6bad15350f0738491396a22a40dd552efd7fd25634f82f236abca4f83b4c8a9c580099851dd3c83 bind-9.13.3.tar.gz
7167dccdb2833643dfdb92994373d2cc087e52ba23b51bd68bd322ff9aca6744f01fa9d8a4b9cd8c4ce471755a85c03ec956ec0d8a1d4fae02124ddbed6841f6 bind.so_bsdcompat.patch
196c0a3b43cf89e8e3547d7fb63a93ff9a3306505658dfd9aa78e6861be6b226580b424dd3dd44b955b2d9f682b1dc62c457f3ac29ce86200ef070140608c015 named.initd
127bdcc0b5079961f0951344bc3fad547450c81aee2149eac8c41a8c0c973ea0ffe3f956684c6fcb735a29c43d2ff48c153b6a71a0f15757819a72c492488ddf named.confd
diff --git a/user/bzflag/APKBUILD b/user/bzflag/APKBUILD
index dfa85b0bc..23d1a30dd 100644
--- a/user/bzflag/APKBUILD
+++ b/user/bzflag/APKBUILD
@@ -1,7 +1,7 @@
# Contributor: Dan Theisen <djt@hxx.in>
# Maintainer: Dan Theisen <djt@hxx.in>
pkgname=bzflag
-pkgver=2.4.14
+pkgver=2.4.16
pkgrel=0
pkgdesc="3D networked multi-player multi-platform tank battle game"
url="https://www.bzflag.org/"
@@ -35,5 +35,5 @@ package() {
make DESTDIR="$pkgdir" install
}
-sha512sums="9a9d4c9fee5b33613691e1b2d4ec4582bd89d8726122d42994933404c9fdeeaf5256ef5d77a56232a1026c2f2689ff342a1e4ff3d6bdd1596f91f0e7fdd1e80d bzflag-2.4.14.tar.bz2
-568e581dd82ca28aa43281a86867408c726ad4f2145f115a5d3535dbc472463c94288e9349ced715004191af0925daff7e3d55fe1db3ab35554352cc703d79b9 defineAddrLen.patch"
+sha512sums="809adc39088f3fc8ca0d2ead9c7172cfbe582789bc80b3ac55fabe078a0868f0cf7cfa8027ac696718e9983a19386933fd370684a0bd33e63c3106f2ce8a9d63 bzflag-2.4.16.tar.bz2
+6c7a1873706140b1b0b254d6f8350f47adef8f499a7e7b3418331beda11bdc71e2e0dee74e17d4a955960de66adf90d22796b440e1afa78d328077235e2e3dde defineAddrLen.patch"
diff --git a/user/bzflag/defineAddrLen.patch b/user/bzflag/defineAddrLen.patch
index b1189dcac..a25eb96c3 100644
--- a/user/bzflag/defineAddrLen.patch
+++ b/user/bzflag/defineAddrLen.patch
@@ -1,11 +1,11 @@
---- a/include/network.h 2018-04-23 23:17:50.969874036 -0700
-+++ b/include/network.h 2018-04-23 23:18:37.750554121 -0700
+--- bzflag-2.4.16/include/network.h.old 2018-09-27 19:16:48.015111918 -0700
++++ bzflag-2.4.16/include/network.h 2018-09-27 19:17:06.195370763 -0700
@@ -57,7 +57,7 @@
# include <bstring.h>
#endif
-#if defined(BSD) || defined(__sun__) || defined(__GLIBC__)
+#if defined(BSD) || defined(__sun__) || defined(__linux__)
- # define AddrLen socklen_t
+ # define AddrLen socklen_t
#elif defined (__APPLE__)
# include <AvailabilityMacros.h>
diff --git a/user/ccid/APKBUILD b/user/ccid/APKBUILD
index 925f36499..bddade1d6 100644
--- a/user/ccid/APKBUILD
+++ b/user/ccid/APKBUILD
@@ -1,7 +1,7 @@
# Contributor: Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com>
# Maintainer: Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com>
pkgname=ccid
-pkgver=1.4.29
+pkgver=1.4.30
pkgrel=0
pkgdesc="Open-source driver for Chip/SmartCard Interface Devices (CCID)"
url="https://ccid.apdu.fr/"
@@ -11,7 +11,6 @@ license="LGPL-2.1+ AND GPL-2.0+ AND ISC"
depends="pcsc-lite"
makedepends="pcsc-lite-dev libusb-dev"
source="https://ccid.apdu.fr/files/ccid-$pkgver.tar.bz2"
-sha512sums="9ff37acad086e959f660069b245fe06ecada140623025a19dfbff55edec71e1e72bce09ac4fc506ad985dd0831dafc6b12f5a5b109b38bf9ba7583856eb19418 ccid-1.4.29.tar.bz2"
build() {
cd "$builddir"
@@ -31,3 +30,4 @@ package() {
install -Dm644 src/92_pcscd_ccid.rules "$pkgdir"/lib/udev/rules.d/92_pcscd_ccid.rules
}
+sha512sums="1761a4053a99eb28184d0ffece951aec5d4b646080597b4ae36b18a31fb7a76c55fabfa57ee8e5d7f2db1a6e13d209f7fa995fe6ed067f44558bea34a26d46da ccid-1.4.30.tar.bz2"
diff --git a/user/chrony/APKBUILD b/user/chrony/APKBUILD
index 494b70946..5f460b632 100644
--- a/user/chrony/APKBUILD
+++ b/user/chrony/APKBUILD
@@ -3,7 +3,7 @@
# Contributor: Natanael Copa <ncopa@alpinelinux.org>
# Maintainer: Dan Theisen <djt@hxx.in>
pkgname=chrony
-pkgver=3.3
+pkgver=3.4
pkgrel=0
_ver=${pkgver/_/-}
pkgdesc="NTP client and server programs"
@@ -20,6 +20,7 @@ subpackages="$pkgname-doc $pkgname-openrc"
source="https://download.tuxfamily.org/$pkgname/$pkgname-$_ver.tar.gz
fix-tests.patch
max_resolve_interval.patch
+ chrony-include-util.patch
chronyd.confd
chronyd.initd
chrony.logrotate
@@ -89,9 +90,10 @@ package() {
chown -R $pkgusers:$pkggroups "$pkgdir"/var/lib/chrony
}
-sha512sums="36975d863599141e8e5b071d35cf67326b27f5b0da7ec942dbb4530377d10472b0729eea632e0702718b515cb2d5fd41a7eba158e6dade7f05adfb1bdffa5df0 chrony-3.3.tar.gz
+sha512sums="4fbb0311c8d363a87edd6f5d1be3d8554da169f260ba23c1ad9e8c567808258c6fd7513ba630d6fa27453ecfd81f0ece0e26d5ee2f98ca47fbc9887181a36918 chrony-3.4.tar.gz
067d47224a8c075ec8f63ffc58e65b030fdf228a72c4f03d50a2f2c17414da65bb5d27c7c2e4ba99e909f452041db83eaebe3c9e34c0c8fce18e05ebb489735e fix-tests.patch
b26581ed32680585edea5b8163a0062a87f648394c0f363c77a7d01a36608fcf4d005d9e6ab179ed2827b8a08f598f7bad4801bb5e135cad5107eb77fb19b247 max_resolve_interval.patch
+30f1ed28e0d956c994abd770c68634c7d5c69ded04a2fbfd387bbd8009bc0102ce57934ce41e468fc6b2c7f8fefdab73d97f6d6ff39ec93fffa6575fa1451fbd chrony-include-util.patch
1ebb72341b4421060a43d6db164d743de9144f1c23370e052f0db92a17e5e34f24ac98baddeb5dbfef27f67479142d448c4401d927394e55024760730a27e8de chronyd.confd
9a18c9744d7b78d9b9be3f0ae0b43cb988b294c342764802e0d5df835d450e748584c0b345f7161f14d84e15c8bbd491514ee9dc45e4a65f1276c52124d2e312 chronyd.initd
ab38f06bf45888846778ad935e24abb30d13b6805e9a750bc694ff953695fa8c5b33aac560f5f7f96dc46031c1a38660e5c418b6fce6fb34a87908a9a3c99357 chrony.logrotate
diff --git a/user/chrony/chrony-include-util.patch b/user/chrony/chrony-include-util.patch
new file mode 100644
index 000000000..20b43c187
--- /dev/null
+++ b/user/chrony/chrony-include-util.patch
@@ -0,0 +1,10 @@
+--- chrony-3.4/hash_intmd5.c.old 2018-09-27 19:29:57.386348229 -0700
++++ chrony-3.4/hash_intmd5.c 2018-09-27 19:30:07.696494803 -0700
+@@ -29,6 +29,7 @@
+ #include "sysincl.h"
+ #include "hash.h"
+ #include "memory.h"
++#include "util.h"
+
+ #include "md5.c"
+
diff --git a/user/clang/APKBUILD b/user/clang/APKBUILD
index 826ca3373..a95693351 100644
--- a/user/clang/APKBUILD
+++ b/user/clang/APKBUILD
@@ -19,6 +19,7 @@ source="https://llvm.org/releases/$pkgver/cfe-$pkgver.src.tar.xz
0001-Add-support-for-Ad-lie-Linux.patch
0008-Fix-ClangConfig-cmake-LLVM-path.patch
use-llvm-lit.patch
+ secure-plt.patch
"
builddir="$srcdir/cfe-$pkgver.src"
@@ -86,4 +87,5 @@ analyzer() {
sha512sums="f64ba9290059f6e36fee41c8f32bf483609d31c291fcd2f77d41fecfdf3c8233a5e23b93a1c73fed03683823bd6e72757ed993dd32527de3d5f2b7a64bb031b9 cfe-6.0.1.src.tar.xz
44aa152d50822a9e1a223b9e07e150ffa830c55deb4c4ca29e6218a0103eb263a00b41fd1ca84390e65fa08005901a0a0f88cf529bff8764220e99d06adef5fc 0001-Add-support-for-Ad-lie-Linux.patch
9485fe4fd6182df543735ed8f4ce618693d0faeafa86d3f9574a6c7abf50978e2d56e0a94be3ed94d515cc937c388d66ceff1bbc9bb120d371b6d3e95340da00 0008-Fix-ClangConfig-cmake-LLVM-path.patch
-8a596e7369b5791e7e9c3278320aa5bac30d91f27d9a0df335ea862c359623869353d12145c3b64730f721600522f3acc5abe706428091482e0209e4ff308175 use-llvm-lit.patch"
+8a596e7369b5791e7e9c3278320aa5bac30d91f27d9a0df335ea862c359623869353d12145c3b64730f721600522f3acc5abe706428091482e0209e4ff308175 use-llvm-lit.patch
+23c3de4f8cbfa115b337ee115b4f95eb1ce3b8c6451de590b0ecf196a4b3bc96ab1d88029edf7f0c51299dffb7b2a05cade9c64c72dba18d858686466bb82bad secure-plt.patch"
diff --git a/user/clang/secure-plt.patch b/user/clang/secure-plt.patch
new file mode 100644
index 000000000..c1b4cb1de
--- /dev/null
+++ b/user/clang/secure-plt.patch
@@ -0,0 +1,70 @@
+Index: cfe/include/clang/Driver/Options.td
+===================================================================
+--- cfe/include/clang/Driver/Options.td
++++ cfe/include/clang/Driver/Options.td
+@@ -1957,6 +1957,7 @@
+ def mno_altivec : Flag<["-"], "mno-altivec">, Group<m_ppc_Features_Group>;
+ def mvsx : Flag<["-"], "mvsx">, Group<m_ppc_Features_Group>;
+ def mno_vsx : Flag<["-"], "mno-vsx">, Group<m_ppc_Features_Group>;
++def msecure_plt : Flag<["-"], "msecure-plt">, Group<m_ppc_Features_Group>;
+ def mpower8_vector : Flag<["-"], "mpower8-vector">,
+ Group<m_ppc_Features_Group>;
+ def mno_power8_vector : Flag<["-"], "mno-power8-vector">,
+Index: cfe/lib/Driver/ToolChains/Arch/PPC.h
+===================================================================
+--- cfe/lib/Driver/ToolChains/Arch/PPC.h
++++ cfe/lib/Driver/ToolChains/Arch/PPC.h
+@@ -29,10 +29,17 @@
+ Hard,
+ };
+
++enum class ReadGOTPtrMode {
++ Bss,
++ SecurePlt,
++};
++
+ FloatABI getPPCFloatABI(const Driver &D, const llvm::opt::ArgList &Args);
+
+ std::string getPPCTargetCPU(const llvm::opt::ArgList &Args);
+ const char *getPPCAsmModeForCPU(StringRef Name);
++ReadGOTPtrMode getPPCReadGOTPtrMode(const Driver &D,
++ const llvm::opt::ArgList &Args);
+
+ void getPPCTargetFeatures(const Driver &D, const llvm::Triple &Triple,
+ const llvm::opt::ArgList &Args,
+Index: cfe/lib/Driver/ToolChains/Arch/PPC.cpp
+===================================================================
+--- cfe/lib/Driver/ToolChains/Arch/PPC.cpp
++++ cfe/lib/Driver/ToolChains/Arch/PPC.cpp
+@@ -106,6 +106,16 @@
+ ppc::FloatABI FloatABI = ppc::getPPCFloatABI(D, Args);
+ if (FloatABI == ppc::FloatABI::Soft)
+ Features.push_back("-hard-float");
++
++ ppc::ReadGOTPtrMode ReadGOT = ppc::getPPCReadGOTPtrMode(D, Args);
++ if (ReadGOT == ppc::ReadGOTPtrMode::SecurePlt)
++ Features.push_back("+secure-plt");
++}
++
++ppc::ReadGOTPtrMode ppc::getPPCReadGOTPtrMode(const Driver &D, const ArgList &Args) {
++ if (Args.getLastArg(options::OPT_msecure_plt))
++ return ppc::ReadGOTPtrMode::SecurePlt;
++ return ppc::ReadGOTPtrMode::Bss;
+ }
+
+ ppc::FloatABI ppc::getPPCFloatABI(const Driver &D, const ArgList &Args) {
+Index: cfe/test/Driver/ppc-features.cpp
+===================================================================
+--- cfe/test/Driver/ppc-features.cpp
++++ cfe/test/Driver/ppc-features.cpp
+@@ -22,6 +22,10 @@
+ // RUN: %clang -target powerpc-unknown-linux-gnu %s -msoft-float -mhard-float -### -o %t.o 2>&1 | FileCheck --check-prefix=CHECK-SOFTHARD %s
+ // CHECK-SOFTHARD-NOT: "-target-feature" "-hard-float"
+
++// check -msecure-plt option for ppc32
++// RUN: %clang -target powerpc-unknown-linux-gnu -msecure-plt %s -### -o %t.o 2>&1 | FileCheck --check-prefix=CHECK-SECUREPLT %s
++// CHECK-SECUREPLT: "-target-feature" "+secure-plt"
++
+ // check -mfloat-abi=x option
+ // RUN: %clang -target powerpc-unknown-linux-gnu %s -mfloat-abi=x -### -o %t.o 2>&1 | FileCheck --check-prefix=CHECK-ERRMSG %s
+ // CHECK-ERRMSG: error: invalid float ABI '-mfloat-abi=x'
diff --git a/user/cram/APKBUILD b/user/cram/APKBUILD
new file mode 100644
index 000000000..914809606
--- /dev/null
+++ b/user/cram/APKBUILD
@@ -0,0 +1,31 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: A. Wilcox <awilfox@adelielinux.org>
+pkgname=cram
+pkgver=0.6
+pkgrel=0
+pkgdesc="Functional testing framework for command line applications"
+url="https://bitheap.org/cram/"
+arch="noarch"
+license="GPL-2.0-only"
+depends="python3"
+makedepends=""
+subpackages=""
+source="https://bitheap.org/cram/cram-$pkgver.tar.gz"
+builddir="$srcdir/cram-$pkgver"
+
+build() {
+ cd "$builddir"
+ python3 setup.py build
+}
+
+check() {
+ cd "$builddir"
+ python3 setup.py -q test
+}
+
+package() {
+ cd "$builddir"
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="502f2531c0c813ad849720d8e3c134e9e12a94bd4be065a2410c6d0adce102c35b42e42a35dbc3c6c6327e3dc0fa98ccb94ca490c706d5f3639f80cceed74d4c cram-0.6.tar.gz"
diff --git a/user/cups-filters/APKBUILD b/user/cups-filters/APKBUILD
index 4a29feb9c..9e174a77c 100644
--- a/user/cups-filters/APKBUILD
+++ b/user/cups-filters/APKBUILD
@@ -1,7 +1,7 @@
# Maintainer: Max Rees <maxcrees@me.com>
pkgname=cups-filters
pkgver=1.21.2
-pkgrel=0
+pkgrel=1
pkgdesc="OpenPrinting CUPS filters and backends"
url="https://www.linuxfoundation.org/collaborate/workgroups/openprinting/pdf_as_standard_print_job_format"
arch="all"
diff --git a/user/ddrescue/APKBUILD b/user/ddrescue/APKBUILD
new file mode 100644
index 000000000..f1c42d607
--- /dev/null
+++ b/user/ddrescue/APKBUILD
@@ -0,0 +1,37 @@
+# Contributor: Leonardo Arena <rnalrd@alpinelinux.org>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=ddrescue
+pkgver=1.23
+pkgrel=0
+pkgdesc="Data recovery tool for block devices with errors"
+url="https://www.gnu.org/s/ddrescue/ddrescue.html"
+license="GPL-3.0+"
+arch="all !aarch64"
+subpackages="$pkgname-doc"
+source="http://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.lz"
+
+build() {
+ cd "$builddir"
+ ./configure --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info
+ make
+}
+
+check() {
+ cd "$builddir"
+
+ # XXX: Some tests fail on s390x, but only on builder, so ignore it for now.
+ case "$CARCH" in
+ s390x) make check || true;;
+ *) make check;;
+ esac
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+sha512sums="4f0b27067966b71efaae809d4f38714863cf3663f3b8c3f26055d482debb15c0fab77752411a9d242f18dbb8e4edc68494f866721dae9c95cfc5354439eaa656 ddrescue-1.23.tar.lz"
diff --git a/user/dhcpcd/APKBUILD b/user/dhcpcd/APKBUILD
index 856088ea3..e42405db5 100644
--- a/user/dhcpcd/APKBUILD
+++ b/user/dhcpcd/APKBUILD
@@ -3,7 +3,7 @@
# Contributor: Natanael Copa <ncopa@alpinelinux.org>
# Maintainer: Dan Theisen <djt@hxx.in>
pkgname=dhcpcd
-pkgver=7.0.6
+pkgver=7.0.8
pkgrel=0
pkgdesc="RFC2131 compliant DHCP client"
url="https://roy.marples.name/projects/dhcpcd"
@@ -47,6 +47,6 @@ package() {
"$pkgdir"/etc/init.d/dhcpcd
}
-sha512sums="5885739e60d6eb4fded117cb87f59a073ae6e8da8454dee56d8e7c5d33778e413e121d28a22163ebf31e4508a21d3a21c1d17ee6d4551081db2ee8e5384d44c9 dhcpcd-7.0.6.tar.xz
+sha512sums="82cd845eb35670788b8f31b973945460f4c5f1a0a3025e3a452b79230dc30704e129d97140e6aec6d0281e0c89c333c0ce0af03c4767b2e5e66547ed3e071953 dhcpcd-7.0.8.tar.xz
1c19eed0f7a008ee96ea392beb327169ff8c83fc27fed20f65f05c9125f60629ebe3474c5e6a7cf4aeeea448fde4264c9b84916efacd67d47ab908c47b1fc3a5 fix-chrony-conf-location.patch
e777432c2efc84285b41e63a4687f3bd543f6864218d037529ab78b5ad934de154f28f478bd9facb56628f2953aad8a932bc2eb8b1dfffa0ce2278ffcfc4d880 dhcpcd.initd"
diff --git a/user/dmenu/APKBUILD b/user/dmenu/APKBUILD
new file mode 100644
index 000000000..39a27bc5a
--- /dev/null
+++ b/user/dmenu/APKBUILD
@@ -0,0 +1,36 @@
+# Contributor: Eivind Uggedal <eivind@uggedal.com>
+# Contributor: Sören Tempel <soeren+alpine@soeren-tempel.net>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=dmenu
+pkgver=4.8
+pkgrel=0
+pkgdesc="Dynamic menu for X"
+url="https://tools.suckless.org/dmenu/"
+arch="all"
+license="MIT OR X11"
+depends=""
+makedepends="libx11-dev libxinerama-dev libxft-dev"
+options="!check" # This package has no testsuite
+subpackages="$pkgname-doc"
+source="https://dl.suckless.org/tools/$pkgname-$pkgver.tar.gz"
+
+prepare() {
+ default_prepare
+ sed -i -e '/CFLAGS/{s/-Os//;s/=/+=/}' \
+ -e '/LDFLAGS/{s/-s//;s/=/+=/}' \
+ "$builddir"/config.mk
+}
+
+build() {
+ make X11INC=/usr/include/X11 \
+ X11LIB=/usr/lib/X11 \
+ FREETYPEINC=/usr/include/freetype2 \
+ -C "$builddir"
+}
+
+package() {
+ make DESTDIR=$pkgdir PREFIX=/usr \
+ -C "$builddir" install
+}
+
+sha512sums="fa2700018cfb912a21f867ef3ca771a58a25c2cb8e1fb37acef046bb15d8d8b92dcc5bfce486befae0f143495d0283910988e181a9eb143be3bb1b5be9738d77 dmenu-4.8.tar.gz"
diff --git a/user/fluxbox/APKBUILD b/user/fluxbox/APKBUILD
new file mode 100644
index 000000000..ca5245921
--- /dev/null
+++ b/user/fluxbox/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=fluxbox
+pkgver=1.3.7
+pkgrel=0
+pkgdesc="A lightweight and highly-configurable window manager"
+url="http://www.fluxbox.org"
+arch="all"
+license="MIT"
+options="!check" # This package has a broken testsuite
+depends=""
+makedepends="libxinerama-dev libxpm-dev libxrandr imlib2-dev libxrender-dev
+ libxrandr-dev libxinerama-dev freetype-dev libxft-dev xorgproto"
+subpackages="$pkgname-doc"
+source="http://downloads.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.bz2"
+
+build() {
+ cd "$builddir"
+ # TODO: Enable NLS when we get 'gencat'
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --enable-imlib2 \
+ --disable-nls
+ make
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+sha512sums="c40cc765f5d542210e18dca21b98b97a048c6685b605a68e2c64f4e886329f4e6d3a3a7e76b3ca0ce488242f38d0ee2a4d6dfebc9ce97d37c68f84c3948aac8c fluxbox-1.3.7.tar.bz2"
diff --git a/user/freecell-solver/APKBUILD b/user/freecell-solver/APKBUILD
new file mode 100644
index 000000000..fe3df52e6
--- /dev/null
+++ b/user/freecell-solver/APKBUILD
@@ -0,0 +1,43 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: A. Wilcox <awilfox@adelielinux.org>
+pkgname=freecell-solver
+pkgver=4.18.0
+pkgrel=0
+pkgdesc="Library for solving card games"
+url="http://fc-solve.shlomifish.org/"
+arch="all"
+license="MIT"
+depends="python3"
+makedepends="gperf perl perl-task-freecellsolver-testing python3 py3-random2"
+checkdepends="gmp-dev libtap-dev perl-dev py3-cffi the_silver_searcher valgrind"
+subpackages="$pkgname-dev $pkgname-doc"
+source="http://fc-solve.shlomifish.org/downloads/fc-solve/freecell-solver-$pkgver.tar.xz"
+
+build() {
+ cd "$builddir"
+ if [ "$CBUILD" != "$CHOST" ]; then
+ CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux"
+ fi
+ cmake \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DBUILD_SHARED_LIBS=True \
+ -DCMAKE_BUILD_TYPE=RelWithDebugInfo \
+ -DCMAKE_CXX_FLAGS="$CXXFLAGS" \
+ -DCMAKE_C_FLAGS="$CFLAGS" \
+ ${CMAKE_CROSSOPTS}
+ # The build system generates header files; jobs >1 may cause failures
+ # because .h don't exist yet.
+ make -j1
+}
+
+check() {
+ cd "$builddir"
+ CTEST_OUTPUT_ON_FAILURE=TRUE ctest
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+sha512sums="aa6ba724ade171c5b69517136ba97b46e811d330903a4735ef7ff4e44c905c4a91260ac73b76b90e6406ba7dacc1083c422c16f98ba7b647ae891a50732087a4 freecell-solver-4.18.0.tar.xz"
diff --git a/user/freeglut/APKBUILD b/user/freeglut/APKBUILD
new file mode 100644
index 000000000..f89c0cac6
--- /dev/null
+++ b/user/freeglut/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: William Pitcock <nenolod@dereferenced.org>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=freeglut
+pkgver=3.0.0
+pkgrel=0
+pkgdesc="free reimplementation of OpenGL Utility Toolkit (GLUT) library"
+url="http://freeglut.sourceforge.net/"
+arch="all"
+options="!check" # No test suite.
+license="X11"
+depends_dev="mesa-dev libx11-dev libice-dev libxxf86vm-dev libxi-dev glu-dev"
+makedepends="$depends_dev cmake"
+subpackages="$pkgname-dev $pkgname-doc"
+source="http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz"
+
+build() {
+ cd "$builddir"
+ cmake . \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib \
+ -DFREEGLUT_BUILD_STATIC_LIBS=0
+ make
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+
+ install -m644 -D COPYING "$pkgdir"/usr/share/licenses/$pkgname/COPYING
+}
+
+sha512sums="9c45d5b203b26a7ff92331b3e080a48e806c92fbbe7c65d9262dd18c39cd6efdad8a795a80f499a2d23df84b4909dbd7c1bab20d7dd3555d3d88782ce9dd15b0 freeglut-3.0.0.tar.gz"
diff --git a/user/fuse/APKBUILD b/user/fuse/APKBUILD
new file mode 100644
index 000000000..92840ed41
--- /dev/null
+++ b/user/fuse/APKBUILD
@@ -0,0 +1,45 @@
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Max Rees <maxcrees@me.com>
+pkgname=fuse
+pkgver=2.9.8
+pkgrel=2
+pkgdesc="Linux Filesystem in Userspace (legacy version)"
+url="https://github.com/libfuse/libfuse"
+arch="all"
+options="suid !check" # No test suite.
+license="GPL-2.0-only AND LGPL-2.1-only AND (GPL-2.0-only OR BSD-2-Clause)"
+depends="fuse-common"
+makedepends=""
+subpackages="$pkgname-dev $pkgname-doc"
+source="https://github.com/libfuse/libfuse/releases/download/$pkgname-$pkgver/$pkgname-$pkgver.tar.gz
+ fix-realpath.patch
+"
+
+# secfixes:
+# 2.9.8-r0:
+# - CVE-2018-10906
+
+build() {
+ cd "$builddir"
+ UDEV_RULES_PATH='/lib/udev/rules.d' ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var \
+ --disable-static \
+ --disable-example \
+ --enable-lib \
+ --enable-util
+ make
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ rm -r "$pkgdir"/dev "$pkgdir"/etc/init.d
+}
+
+sha512sums="0a9b14d96c6f98f5c903baf00114bfff72f9aeb97224702bbed370516b2b582401d5b436fcef979918ffd85d69ba4a82c8f722c0b35ebd50f7aa5f4ddfdcf8ad fuse-2.9.8.tar.gz
+5672ceb35acabb4bd97b6efc30614f22def62882fe198e2a8598a074d45b6b5337c082a5e09b5e399b6e5212dc1fbde9071c2a5051534c32091444c350b9c657 fix-realpath.patch"
diff --git a/user/fuse/fix-realpath.patch b/user/fuse/fix-realpath.patch
new file mode 100644
index 000000000..1199eb338
--- /dev/null
+++ b/user/fuse/fix-realpath.patch
@@ -0,0 +1,28 @@
+--- fuse-2.9.3.orig/util/fusermount.c 2015-02-07 08:58:54.000000000 -0200
++++ fuse-2.9.3/util/fusermount.c 2015-02-09 09:15:16.737367957 -0200
+@@ -1255,19 +1255,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/user/gcompat/APKBUILD b/user/gcompat/APKBUILD
new file mode 100644
index 000000000..3c18e3891
--- /dev/null
+++ b/user/gcompat/APKBUILD
@@ -0,0 +1,39 @@
+# Maintainer: A. Wilcox <awilfox@adelielinux.org>
+pkgname=gcompat
+pkgver=0.3.0
+pkgrel=0
+pkgdesc="The GNU C Library compatibility layer for musl"
+url="https://code.foxkit.us/adelie/gcompat"
+arch="all"
+options="!check" # No test suite.
+license="UoI-NCSA"
+depends=""
+makedepends="libucontext-dev"
+replaces="libc6-compat"
+source="https://distfiles.adelielinux.org/source/gcompat/$pkgname-$pkgver.tar.xz
+ no-utmp.patch
+ "
+
+case "$CARCH" in
+armel) _ld="ld-linux.so.3" ;;
+armhf | armv7) _ld="ld-linux-armhf.so.3" ;;
+aarch64) _ld="ld-linux-aarch64.so.1" ;;
+x86|pmmx|i528) _ld="ld-linux.so.2" ;;
+x86_64) _ld="ld-linux-x86-64.so.2" ;;
+mips* | ppc | s390*) _ld="ld.so.1" ;;
+ppc64le) _ld="ld64.so.2" ;;
+ppc64) _ld="ld64.so.1" ;;
+esac
+
+build() {
+ cd "$builddir"
+ make LINKER_PATH="/lib/ld-musl-${CARCH}.so.1" LOADER_NAME="$_ld" WITH_LIBUCONTEXT=YesPlease
+}
+
+package() {
+ cd "$builddir"
+ make LINKER_PATH="/lib/ld-musl-${CARCH}.so.1" LOADER_NAME="$_ld" WITH_LIBUCONTEXT=YesPlease DESTDIR="$pkgdir" install
+}
+
+sha512sums="1f7dd73efd556b7e0f7f1c80751185583de24daf4ab235b488ea1ab98cea2d3a94abed341b922be0bd43c8d539a00176b892c78acf09f2adacb279c09648b3be gcompat-0.3.0.tar.xz
+34fbf97cfbad2bae219e238f5edcb55425c6d7c9be7dde02aa0e8223dbf163ff20f535539de2232a1ef3c6f47a92eac6e00484af99dc8beb192c761b15389b82 no-utmp.patch"
diff --git a/user/gcompat/no-utmp.patch b/user/gcompat/no-utmp.patch
new file mode 100644
index 000000000..c5d2251b1
--- /dev/null
+++ b/user/gcompat/no-utmp.patch
@@ -0,0 +1,16 @@
+--- gcompat-0.3.0/libgcompat/utmp.c.old 2018-09-05 02:26:02.850000000 +0000
++++ gcompat-0.3.0/libgcompat/utmp.c 2018-09-21 21:39:17.350000000 +0000
+@@ -1,12 +1,11 @@
+ #include <stddef.h> /* NULL */
+-#include <utmp.h> /* struct utmp */
+
+ /**
+ * Get user accounting database entries.
+ *
+ * LSB 5.0: LSB-Core-generic/baselib-getutent-r-3.html
+ */
+-int getutent_r(struct utmp *buffer, struct utmp **result)
++int getutent_r(void *buffer, void **result)
+ {
+ /* musl does not implement getutent(). */
+ *result = NULL;
diff --git a/user/gvim/APKBUILD b/user/gvim/APKBUILD
index 020b5a3b6..0db1561b7 100644
--- a/user/gvim/APKBUILD
+++ b/user/gvim/APKBUILD
@@ -5,7 +5,7 @@
# Maintainer: Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com>
pkgname=gvim
_pkgreal=vim
-pkgver=8.1.0346
+pkgver=8.1.0429
pkgrel=0
pkgdesc="advanced text editor"
url="http://www.vim.org"
@@ -74,4 +74,4 @@ package() {
ln -s gvim rgvim
}
-sha512sums="ce27d6d9215e80d84661aec4062f4730e4ed95cfbcedfdd46e73b5a5a1599ea709664c967c5e17ad3515341f79b59fb5c3ddc851cc84cd5717c0e68c6c82961c vim-8.1.0346.tar.gz"
+sha512sums="e9ece2616f56f6ef0a08a73e48c4a87f138e381ec24b960f5e634c2291d9aba2c2d11a7f80dbe60eb3ccaeb8ea45b7c07ec5ebd50f4f5f326ffd1aff3729a13b vim-8.1.0429.tar.gz"
diff --git a/user/i3wm/APKBUILD b/user/i3wm/APKBUILD
new file mode 100644
index 000000000..197cbd45f
--- /dev/null
+++ b/user/i3wm/APKBUILD
@@ -0,0 +1,49 @@
+# Contributor: Sören Tempel <soeren+alpine@soeren-tempel.net>
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=i3wm
+pkgver=4.15
+pkgrel=0
+pkgdesc="Improved dynamic tiling window manager"
+url="http://i3wm.org"
+arch="all"
+license="BSD-3-Clause"
+options="!check" # The test suite requires X
+makedepends="bison flex libxcb-dev xcb-util-cursor-dev xcb-util-keysyms-dev
+ xcb-util-wm-dev libev-dev pango-dev cairo-dev yajl-dev
+ startup-notification-dev pcre-dev libxkbcommon-dev xcb-util-xrm-dev"
+checkdepends="perl-x11-xcb perl-anyevent perl-json-xs perl-ipc-run
+ perl-inline-c perl-dev libxcb-dev xcb-util-dev xorg-server-xephyr"
+subpackages="$pkgname-doc"
+source="http://i3wm.org/downloads/i3-$pkgver.tar.bz2
+ i3wm-musl-glob-tilde.patch
+ i3wm-test-fix-off_t.patch
+ i3wm-test-disable-branch-check.patch"
+builddir="$srcdir/i3-$pkgver"
+
+build() {
+ cd "$builddir"
+ ./configure \
+ --prefix="/usr" \
+ --disable-builddir \
+ --sysconfdir="/etc"
+ make
+}
+
+check() {
+ cd "$builddir"
+ make check
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir/" install
+
+ install -d "$pkgdir/usr/share/man/man1"
+ install -m644 man/*.1 "$pkgdir"/usr/share/man/man1/
+}
+
+sha512sums="60ab61b7e380342126bea12fb4371f98fcf18f6435f79a9519d3f59cfabdb170634366036e1aa20c5592da0832b03140ad1f0c72bad3cfaace0b7c57ad01dfc4 i3-4.15.tar.bz2
+8ce7d00371c43b93dabbe0dadf9caf7c58a68f4a0079f5a9b9552c15c55bfa0df16d7e87a281595af2ac5254632ba28ccf82a467cea16159b41490f6f2910299 i3wm-musl-glob-tilde.patch
+77224b994397b2e2487ae28dfd5781b3630654191813eb3c685f05ebf446e65c36e53a665ff3cc8323ea67e87f7cf977044025dade0a6ed22cbd84f0e6b4cbc7 i3wm-test-fix-off_t.patch
+a80384965dff62c51ce77e2baa3cf1b0b6db1df68994ce98383f96554bd296b4b59527fb5b1cb24b08c123699e294ba9b3baaa52afe88d87e7a76f0629194b1f i3wm-test-disable-branch-check.patch"
diff --git a/user/i3wm/i3wm-musl-glob-tilde.patch b/user/i3wm/i3wm-musl-glob-tilde.patch
new file mode 100644
index 000000000..82ad6195b
--- /dev/null
+++ b/user/i3wm/i3wm-musl-glob-tilde.patch
@@ -0,0 +1,73 @@
+diff -urp i3-4.11/i3bar/src/main.c i3-4.11.new/i3bar/src/main.c
+--- i3-4.11/i3bar/src/main.c 2015-09-30 07:55:10.000000000 +0100
++++ i3-4.11.new/i3bar/src/main.c 2016-02-08 20:03:41.777392482 +0000
+@@ -45,14 +45,20 @@ void debuglog(char *fmt, ...) {
+ *
+ */
+ char *expand_path(char *path) {
+- static glob_t globbuf;
+- if (glob(path, GLOB_NOCHECK | GLOB_TILDE, NULL, &globbuf) < 0) {
+- ELOG("glob() failed\n");
+- exit(EXIT_FAILURE);
++ char *home, *expanded;
++
++ if (strncmp(path, "~/", 2) == 0) {
++ home = getenv("HOME");
++ if (home != NULL) {
++ /* new length: sum - 1 (omit '~') + 1 (for '\0') */
++ expanded = scalloc(strlen(home)+strlen(path), 1);
++ strcpy(expanded, home);
++ strcat(expanded, path+1);
++ return expanded;
++ }
+ }
+- char *result = sstrdup(globbuf.gl_pathc > 0 ? globbuf.gl_pathv[0] : path);
+- globfree(&globbuf);
+- return result;
++
++ return sstrdup(path);
+ }
+
+ void print_usage(char *elf_name) {
+diff -urp i3-4.11/libi3/resolve_tilde.c i3-4.11.new/libi3/resolve_tilde.c
+--- i3-4.11/libi3/resolve_tilde.c 2015-09-30 07:55:10.000000000 +0100
++++ i3-4.11.new/libi3/resolve_tilde.c 2016-02-08 20:03:47.849230953 +0000
+@@ -19,27 +19,18 @@
+ *
+ */
+ char *resolve_tilde(const char *path) {
+- static glob_t globbuf;
+- char *head, *tail, *result;
++ char *home, *expanded;
+
+- tail = strchr(path, '/');
+- head = sstrndup(path, tail ? (size_t)(tail - path) : strlen(path));
+-
+- int res = glob(head, GLOB_TILDE, NULL, &globbuf);
+- free(head);
+- /* no match, or many wildcard matches are bad */
+- if (res == GLOB_NOMATCH || globbuf.gl_pathc != 1)
+- result = sstrdup(path);
+- else if (res != 0) {
+- err(EXIT_FAILURE, "glob() failed");
+- } else {
+- head = globbuf.gl_pathv[0];
+- result = scalloc(strlen(head) + (tail ? strlen(tail) : 0) + 1, 1);
+- strncpy(result, head, strlen(head));
+- if (tail)
+- strncat(result, tail, strlen(tail));
++ if (strncmp(path, "~/", 2) == 0) {
++ home = getenv("HOME");
++ if (home != NULL) {
++ /* new length: sum - 1 (omit '~') + 1 (for '\0') */
++ expanded = scalloc(strlen(home)+strlen(path), 1);
++ strcpy(expanded, home);
++ strcat(expanded, path+1);
++ return expanded;
++ }
+ }
+- globfree(&globbuf);
+
+- return result;
++ return sstrdup(path);
+ }
diff --git a/user/i3wm/i3wm-test-disable-branch-check.patch b/user/i3wm/i3wm-test-disable-branch-check.patch
new file mode 100644
index 000000000..ac3572e9b
--- /dev/null
+++ b/user/i3wm/i3wm-test-disable-branch-check.patch
@@ -0,0 +1,10 @@
+--- i3-4.15/testcases/t/193-ipc-version.t.old 2018-03-10 09:29:14.000000000 -0800
++++ i3-4.15/testcases/t/193-ipc-version.t 2018-09-27 16:49:56.599257224 -0700
+@@ -32,6 +32,6 @@
+
+ is(int($version->{minor}), $version->{minor}, 'minor version is an integer');
+ is(int($version->{patch}), $version->{patch}, 'patch version is an integer');
+-like($version->{human_readable}, qr/branch/, 'human readable version contains branch name');
++#like($version->{human_readable}, qr/branch/, 'human readable version contains branch name');
+
+ done_testing;
diff --git a/user/i3wm/i3wm-test-fix-off_t.patch b/user/i3wm/i3wm-test-fix-off_t.patch
new file mode 100644
index 000000000..1aeb69be6
--- /dev/null
+++ b/user/i3wm/i3wm-test-fix-off_t.patch
@@ -0,0 +1,26 @@
+--- i3-4.15/testcases/lib/i3test/XTEST.pm.old 2018-09-27 16:18:59.682101063 -0700
++++ i3-4.15/testcases/lib/i3test/XTEST.pm 2018-09-27 16:20:33.723493893 -0700
+@@ -39,6 +39,7 @@
+ my %sn_config;
+ BEGIN {
+ %sn_config = ExtUtils::PkgConfig->find('xcb-xkb xcb-xtest xcb-util');
++ $sn_config{cflags} .= ' -D_GNU_SOURCE';
+ }
+
+ use Inline C => Config => LIBS => $sn_config{libs}, CCFLAGS => $sn_config{cflags};
+--- i3-4.15/testcases/t/175-startup-notification.t.old 2018-09-27 16:24:17.546808884 -0700
++++ i3-4.15/testcases/t/175-startup-notification.t 2018-09-27 16:24:55.587372292 -0700
+@@ -31,11 +31,13 @@
+ my %sn_config;
+ BEGIN {
+ %sn_config = ExtUtils::PkgConfig->find('libstartup-notification-1.0');
++ $sn_config{cflags} .= ' -D_GNU_SOURCE';
+ }
+
+ use Inline C => Config => LIBS => $sn_config{libs}, CCFLAGS => $sn_config{cflags};
+ use Inline C => <<'END_OF_C_CODE';
+
++#include <sys/types.h>
+ #include <xcb/xcb.h>
+
+ #define SN_API_NOT_YET_FROZEN 1
diff --git a/user/imake/APKBUILD b/user/imake/APKBUILD
new file mode 100644
index 000000000..ba5585c32
--- /dev/null
+++ b/user/imake/APKBUILD
@@ -0,0 +1,27 @@
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=imake
+pkgver=1.0.7
+pkgrel=0
+pkgdesc="X Windows make utility"
+url="http://www.x.org"
+arch="all"
+license="X11"
+options="!check" # No testsuite
+depends=""
+makedepends="util-macros xorgproto-dev"
+subpackages="$pkgname-doc"
+source="http://ftp.x.org/pub/individual/util/$pkgname-$pkgver.tar.bz2"
+
+build() {
+ cd "$builddir"
+ ./configure --prefix=/usr
+ make
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+sha512sums="b3527c8fead25c6e093e1fe4a39e60ff210212dcd323e206505b9e872a3f36d9db85f85cab5a6f0fa914fa5c558ef54b499b2b13ccd66739223e4e72ef805d08 imake-1.0.7.tar.bz2"
diff --git a/user/iperf3/APKBUILD b/user/iperf3/APKBUILD
new file mode 100644
index 000000000..1e1fad965
--- /dev/null
+++ b/user/iperf3/APKBUILD
@@ -0,0 +1,57 @@
+# Contributor: Michael Mason <ms13sp@gmail.com>
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=iperf3
+_pkgname=iperf
+pkgver=3.6
+pkgrel=0
+pkgdesc="A tool to measure IP bandwidth using UDP or TCP"
+url="https://software.es.net/iperf/"
+arch="all"
+license="BSD-3-Clause"
+depends=""
+makedepends=""
+install=""
+subpackages="$pkgname-doc $pkgname-openrc"
+source="$pkgname-$pkgver.tar.gz::https://downloads.es.net/pub/$_pkgname/$_pkgname-$pkgver.tar.gz
+ $_pkgname.initd
+ $_pkgname.confd
+
+ build-fixes.patch
+ remove-pg-flags.patch
+ "
+builddir="$srcdir/$_pkgname-$pkgver"
+
+build() {
+ cd "$builddir"
+ CFLAGS="$CFLAGS -D_GNU_SOURCE"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info
+ make
+}
+
+check() {
+ cd "$builddir"
+ make check
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+
+ install -Dm755 "$srcdir"/$_pkgname.initd \
+ "$pkgdir"/etc/init.d/$_pkgname
+ install -Dm644 "$srcdir"/$_pkgname.confd \
+ "$pkgdir"/etc/conf.d/$_pkgname
+}
+
+sha512sums="322a6893ad28c6ce9c9849e8a0326408ed76f09bbb13591c01c3d051bd4777a2acdb8f5032b9d1bb37d47ad3818d8b18ab6c0be4d40559040eb7e57bbfc06f39 iperf3-3.6.tar.gz
+339fb04b41cce11e8ea8694d95c13af9c88e0d1143356d913ec810c9b11efa27212d585b5dcc49cc2eb860a6d8bc557092c8659d7d5cfe532c5afdb36f8eedf8 iperf.initd
+fb5e155fff568a72488cc1511d30358835a48bcce309f8f46d040160932b4a4ccb85040c27c60dee477900a25bd34c50eac21d1d0bea984b40faa401be2ba7e8 iperf.confd
+126043503eebf84bccf26758f18715eaf81131e2fc9ef1fe829e55acb2f14e97db18e9b890b8bf13c230ac80c7537615272af4e072808e25bde8ddd6f326f198 build-fixes.patch
+ed0fb3a3af0dae3e9f58ff6643cb15defdd31f65cf966a6013fdf2a7fd67a7f8ef522a7c8f3269bd43d5ca991a86d758526c384ebc0984b1403bb24f61a1779b remove-pg-flags.patch"
diff --git a/user/iperf3/build-fixes.patch b/user/iperf3/build-fixes.patch
new file mode 100644
index 000000000..b797e70ea
--- /dev/null
+++ b/user/iperf3/build-fixes.patch
@@ -0,0 +1,20 @@
+--- a/src/t_timer.c
++++ b/src/t_timer.c
+@@ -33,6 +33,7 @@
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <sys/time.h>
++#include <sys/types.h>
+
+ #include "timer.h"
+
+--- a/src/t_uuid.c
++++ b/src/t_uuid.c
+@@ -28,6 +28,7 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <sys/time.h>
++#include <sys/types.h>
+
+ #include "iperf_util.h"
+
diff --git a/user/iperf3/iperf.confd b/user/iperf3/iperf.confd
new file mode 100644
index 000000000..1f425faa6
--- /dev/null
+++ b/user/iperf3/iperf.confd
@@ -0,0 +1,3 @@
+# Default option for iperf: --server (runs in TCP/5001 mode)
+# For further server options check --help flag
+command_args=""
diff --git a/user/iperf3/iperf.initd b/user/iperf3/iperf.initd
new file mode 100644
index 000000000..a135bafc9
--- /dev/null
+++ b/user/iperf3/iperf.initd
@@ -0,0 +1,18 @@
+#!/sbin/openrc-run
+
+command="/usr/bin/iperf"
+pidfile="/var/run/$SVCNAME/$SVCNAME.pid"
+
+depend() {
+ need net
+ after firewall
+}
+
+start() {
+ ebegin "Starting $SVCNAME"
+ start-stop-daemon --start --make-pid --user ${exec_user:-nobody} \
+ --pidfile ${pidfile} --background --exec $command \
+ -- --server ${command_args}
+ eend
+}
+
diff --git a/user/iperf3/remove-pg-flags.patch b/user/iperf3/remove-pg-flags.patch
new file mode 100644
index 000000000..1ed47eebf
--- /dev/null
+++ b/user/iperf3/remove-pg-flags.patch
@@ -0,0 +1,29 @@
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -50,9 +50,9 @@
+ iperf3_profile_SOURCES = main.c \
+ $(libiperf_la_SOURCES)
+
+-iperf3_profile_CFLAGS = -pg -g
++iperf3_profile_CFLAGS = -g
+ iperf3_profile_LDADD = libiperf.la
+-iperf3_profile_LDFLAGS = -pg -g
++iperf3_profile_LDFLAGS = -g
+
+ # Specify the sources and various flags for the test cases
+ t_timer_SOURCES = t_timer.c
+
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -643,9 +643,9 @@
+ iperf3_profile_SOURCES = main.c \
+ $(libiperf_la_SOURCES)
+
+-iperf3_profile_CFLAGS = -pg -g
++iperf3_profile_CFLAGS = -g
+ iperf3_profile_LDADD = libiperf.la
+-iperf3_profile_LDFLAGS = -pg -g
++iperf3_profile_LDFLAGS = -g
+
+ # Specify the sources and various flags for the test cases
+ t_timer_SOURCES = t_timer.c
diff --git a/user/ipmiutil/APKBUILD b/user/ipmiutil/APKBUILD
new file mode 100644
index 000000000..8accd70c0
--- /dev/null
+++ b/user/ipmiutil/APKBUILD
@@ -0,0 +1,37 @@
+# Maintainer: A. Wilcox <awilfox@adelielinux.org>
+pkgname=ipmiutil
+pkgver=3.1.3
+pkgrel=0
+pkgdesc="IPMI Management Utilities"
+url="http://ipmiutil.sourceforge.net/"
+arch="all"
+options="!check" # No test suite shipped.
+license="BSD-2-Clause AND BSD-3-Clause AND GPL-2.0+"
+depends_dev="openssl-dev"
+makedepends="$depends_dev linux-headers"
+subpackages="$pkgname-dev $pkgname-doc $pkgname-openrc"
+source="https://downloads.sourceforge.net/project/ipmiutil/ipmiutil-$pkgver.tar.gz
+ ipmiutil-3.0.7-fix-sha256.patch"
+
+build() {
+ cd "$builddir"
+ ./configure \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --libdir=/usr/lib \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var \
+ --disable-systemd \
+ --enable-sha256 \
+ --enable-gpl
+ make
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+sha512sums="bd1f95b59583a07a5b6001b40e59269f25eb63b69e33f7fad6dd40136e1ea7611e647eb5ed2e2a9746944bde2dc2a3aa2def44238947693d75d9ca48697e1b99 ipmiutil-3.1.3.tar.gz
+74e8951bccd004f765b99de87dc5f04834e594b3e14ba885148fb971eaf15164ccac2de880e409f201a38cba5c0948a0fabc04e1e34fb396f50b1ecddb6b305b ipmiutil-3.0.7-fix-sha256.patch"
diff --git a/user/ipmiutil/ipmiutil-3.0.7-fix-sha256.patch b/user/ipmiutil/ipmiutil-3.0.7-fix-sha256.patch
new file mode 100644
index 000000000..1cc1b5532
--- /dev/null
+++ b/user/ipmiutil/ipmiutil-3.0.7-fix-sha256.patch
@@ -0,0 +1,68 @@
+--- ipmiutil-3.0.7/lib/Makefile.am.old 2017-09-20 10:08:20.000000000 -0500
++++ ipmiutil-3.0.7/lib/Makefile.am 2018-01-01 18:03:45.080832425 -0600
+@@ -33,10 +33,11 @@
+ else cp -f libipmiapi64.a.redhat libipmiapi.a; fi \
+ else cp -f libipmiapi32.a libipmiapi.a; fi \
+ fi
+- if [ "$(PLUSFLAGS)" = "-DHAVE_LANPLUS" ]; then \
+- cd lanplus; make clean; make ; \
+- pwd; cp -f libipmi_lanplus.a .. ; \
+- fi
++ case "$(PLUSFLAGS)" in \
++ "-DHAVE_LANPLUS"*) \
++ cd lanplus; make clean; make ; \
++ pwd; cp -f libipmi_lanplus.a .. ;; \
++ esac
+
+ clean:
+ rm -f libipmiapi.a lib*_lanplus.a lib*_lanplus.so
+@@ -51,10 +52,11 @@
+ cd lanplus; make distclean
+
+ install:
+- if [ "$(PLUSFLAGS)" = "-DHAVE_LANPLUS" ]; then \
+- $(MKDIR) ${datato} ; \
+- cd lanplus; make install ; \
+- fi
++ case "$(PLUSFLAGS)" in \
++ "-DHAVE_LANPLUS"*) \
++ $(MKDIR) ${datato} ; \
++ cd lanplus; make install ;; \
++ esac
+
+ check:
+
+--- ipmiutil-3.0.7/lib/Makefile.in.old 2017-09-20 10:08:28.000000000 -0500
++++ ipmiutil-3.0.7/lib/Makefile.in 2018-01-01 18:02:55.187678005 -0600
+@@ -392,10 +392,11 @@
+ else cp -f libipmiapi64.a.redhat libipmiapi.a; fi \
+ else cp -f libipmiapi32.a libipmiapi.a; fi \
+ fi
+- if [ "$(PLUSFLAGS)" = "-DHAVE_LANPLUS" ]; then \
+- cd lanplus; make clean; make ; \
+- pwd; cp -f libipmi_lanplus.a .. ; \
+- fi
++ case "$(PLUSFLAGS)" in \
++ "-DHAVE_LANPLUS"*) \
++ cd lanplus; make clean; make ; \
++ pwd; cp -f libipmi_lanplus.a .. ;; \
++ esac
+
+ clean:
+ rm -f libipmiapi.a lib*_lanplus.a lib*_lanplus.so
+@@ -410,10 +411,11 @@
+ cd lanplus; make distclean
+
+ install:
+- if [ "$(PLUSFLAGS)" = "-DHAVE_LANPLUS" ]; then \
+- $(MKDIR) ${datato} ; \
+- cd lanplus; make install ; \
+- fi
++ case "$(PLUSFLAGS)" in \
++ "-DHAVE_LANPLUS"*) \
++ $(MKDIR) ${datato} ; \
++ cd lanplus; make install ;; \
++ esac
+
+ check:
+
diff --git a/user/keepassxc/APKBUILD b/user/keepassxc/APKBUILD
new file mode 100644
index 000000000..14d9235fc
--- /dev/null
+++ b/user/keepassxc/APKBUILD
@@ -0,0 +1,40 @@
+# Contributor: Max Rees <maxcrees@me.com>
+# Maintainer: Max Rees <maxcrees@me.com>
+pkgname=keepassxc
+pkgver=2.3.4
+pkgrel=0
+pkgdesc="A community revival of the KeePassX password manager"
+url="https://keepassxc.org"
+arch="all"
+license="(GPL-2.0-only OR GPL-3.0-only) AND MIT AND BSD-4-Clause AND ISC AND (LGPL-2.1-only OR GPL-3.0-only) AND (LGPL-2.1-only OR LGPL-3.0-only) AND CC0-1.0 AND Public-Domain AND LGPL-2.1+ AND LGPL-3.0+"
+depends="hicolor-icon-theme"
+makedepends="cmake xz qt5-qtbase-dev qt5-qttools-dev libgcrypt-dev
+ zlib-dev libxi-dev libxtst-dev qt5-qtx11extras-dev argon2-dev"
+subpackages="$pkgname-doc"
+source="https://github.com/keepassxreboot/$pkgname/releases/download/$pkgver/$pkgname-$pkgver-src.tar.xz"
+
+prepare() {
+ cd "$builddir"
+ mkdir build
+ default_prepare
+}
+
+build() {
+ cd "$builddir/build"
+ cmake -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=/usr/lib \
+ -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
+ make
+}
+
+check() {
+ cd "$builddir/build"
+ make test
+}
+
+package() {
+ cd "$builddir/build"
+ make DESTDIR="$pkgdir" install
+}
+
+sha512sums="edca22ef9d7c553d21d8ea6115a5635265176acc56fdf055f1961a3e65046de49ed5b67eb68ecf4f925226fb5bca140d5d473a5082301168f6a8bb7979f562a8 keepassxc-2.3.4-src.tar.xz"
diff --git a/user/kpat/APKBUILD b/user/kpat/APKBUILD
index 838c733bf..72ce3776b 100644
--- a/user/kpat/APKBUILD
+++ b/user/kpat/APKBUILD
@@ -1,7 +1,7 @@
# Contributor: A. Wilcox <awilfox@adelielinux.org>
# Maintainer: A. Wilcox <awilfox@adelielinux.org>
pkgname=kpat
-pkgver=18.04.3
+pkgver=18.08.1
pkgrel=0
pkgdesc="Collection of card games for KDE"
url="https://games.kde.org/game.php?game=kpat"
@@ -11,7 +11,8 @@ depends="libkdegames-carddecks"
makedepends="cmake extra-cmake-modules qt5-qtbase-dev qt5-qtsvg-dev kconfig-dev
kcompletion-dev kconfigwidgets-dev kcoreaddons-dev kcrash-dev ki18n-dev
kdbusaddons-dev kdoctools-dev kguiaddons-dev kio-dev knewstuff-dev
- kwidgetsaddons-dev kxmlgui-dev libkdegames-dev shared-mime-info"
+ kwidgetsaddons-dev kxmlgui-dev libkdegames-dev shared-mime-info
+ freecell-solver-dev"
subpackages="$pkgname-doc $pkgname-lang"
source="https://download.kde.org/stable/applications/$pkgver/src/kpat-$pkgver.tar.xz"
@@ -41,4 +42,4 @@ package() {
make DESTDIR="$pkgdir" install
}
-sha512sums="bd325d52faad7200d5aa1738cc539d8f285c4b9cb67e2f63837379fc89b4adb8873433df01392447e69546db04698b2f108613fe0a3001bf7c77dbda0bd73acf kpat-18.04.3.tar.xz"
+sha512sums="989cb29db087ea3e17cf5971c6cad57c3e691d2f27975b3fd776f6d7c3d7b74ef2572c5ef6c1f3a8e7b39e39c178aa47ff1751fb87cad2cff5dfbb1e8e032516 kpat-18.08.1.tar.xz"
diff --git a/user/labplot/APKBUILD b/user/labplot/APKBUILD
index 53c91a025..c3b4d0388 100644
--- a/user/labplot/APKBUILD
+++ b/user/labplot/APKBUILD
@@ -2,7 +2,7 @@
# Maintainer: A. Wilcox <awilfox@adelielinux.org>
pkgname=labplot
pkgver=2.5.0
-pkgrel=0
+pkgrel=1
pkgdesc="Interactive tool for graphing and analysis of scientific data"
url="https://www.kde.org/applications/education/labplot/"
arch="all"
@@ -15,9 +15,7 @@ makedepends="cmake extra-cmake-modules qt5-qtbase-dev qt5-qtsvg-dev kconfig-dev
qt5-qtserialport-dev syntax-highlighting-dev bison libexecinfo-dev"
subpackages="$pkgname-doc $pkgname-lang"
source="https://download.kde.org/stable/labplot/$pkgver/labplot-$pkgver.tar.xz
- disable-liborigin.patch
- really-disable-liborigin.patch
- really-really-disable-liborigin.patch
+ liborigin-endian.patch
"
build() {
@@ -32,7 +30,6 @@ build() {
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_CXX_FLAGS="$CXXFLAGS" \
-DCMAKE_C_FLAGS="$CFLAGS -D_GNU_SOURCE" \
- -DENABLE_LIBORIGIN=False \
${CMAKE_CROSSOPTS}
make
}
@@ -49,6 +46,4 @@ package() {
}
sha512sums="a4b285917e30b0ac00cb8c8ad6827ba3884d95fccc0511a0a317bb2d637e48e6579929c45cfb8bba737bb5a01472a2baa9d812a688730ac4fa40b23cc6625eba labplot-2.5.0.tar.xz
-c309bc9d8d73377298824a5b5c741a4caf796f7136a562827c8f9969c860cef0f5f510a85527b3ef89cbd35d08d986b5d95f5d44e1a30f8a8eed083f3ebedcc7 disable-liborigin.patch
-d2dd6f90a4382f88b28a8a2cb5e07c618ea8ba823e040638f08b95a4df97f4db76c025f897e6b618eb9546cf39a401904329697422db6af1c14cd2e8f6961362 really-disable-liborigin.patch
-cba3c70d661fa2a887c414595757b9961771500402e58e6414e403cef2dd4fe183e253ce1e5accb49c6f930519ac4ff02ee8f63dfb5eb53289c6d0d3fab6703c really-really-disable-liborigin.patch"
+d251300ca0992637453ef12021f3fa4ba0ed5651a19b27bee7573f50b101aaa787544c035bf0d00b9a9ef14156536ce027879d605ede228761754b762db88ded liborigin-endian.patch"
diff --git a/user/labplot/disable-liborigin.patch b/user/labplot/disable-liborigin.patch
deleted file mode 100644
index 9fd4e4ba7..000000000
--- a/user/labplot/disable-liborigin.patch
+++ /dev/null
@@ -1,169 +0,0 @@
-From d67faf643b2e69c017c21e9d9aaa1fe2d3de6b0e Mon Sep 17 00:00:00 2001
-From: Alexander Semke <alexander.semke@web.de>
-Date: Wed, 12 Sep 2018 08:46:38 +0200
-Subject: Fixed the build with -DENABLE_LIBORIGIN=OFF.
-
----
- INSTALL | 1 +
- src/CMakeLists.txt | 5 ++++-
- src/kdefrontend/MainWin.cpp | 18 +++++++++++++++++-
- src/kdefrontend/datasources/ImportProjectDialog.cpp | 8 ++++++++
- 4 files changed, 30 insertions(+), 2 deletions(-)
-
-diff --git a/INSTALL b/INSTALL
-index cc2bab9..05dd97b 100644
---- a/INSTALL
-+++ b/INSTALL
-@@ -41,5 +41,7 @@ To compile LabPlot without optional dependencies even if they are present on the
- -DENABLE_LIBCERF=OFF
- -DENABLE_CANTOR=OFF
-+-DENABLE_MQTT=OFF
-+-DENABLE_LIBORIGIN=OFF
-
- Note, by switching off these libraries the feature set of LabPlot will be reduced.
-
-diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
-index ba5763d..892c3c3 100644
---- a/src/CMakeLists.txt
-+++ b/src/CMakeLists.txt
-@@ -223,7 +223,6 @@ set(BACKEND_SOURCES
- ${BACKEND_DIR}/datasources/filters/ROOTFilter.cpp
- ${BACKEND_DIR}/datasources/projects/ProjectParser.cpp
- ${BACKEND_DIR}/datasources/projects/LabPlotProjectParser.cpp
-- ${BACKEND_DIR}/datasources/projects/OriginProjectParser.cpp
- ${BACKEND_DIR}/gsl/ExpressionParser.cpp
- ${BACKEND_DIR}/matrix/Matrix.cpp
- ${BACKEND_DIR}/matrix/matrixcommands.cpp
-@@ -271,6 +270,10 @@ set(BACKEND_SOURCES
- ${BACKEND_DIR}/datapicker/DatapickerCurve.cpp
- )
-
-+IF (ENABLE_LIBORIGIN)
-+ lsit(APPEND BACKEND_SOURCES ${BACKEND_DIR}/datasources/projects/OriginProjectParser.cpp)
-+ENDIF ()
-+
- set(NSL_SOURCES
- ${BACKEND_DIR}/nsl/nsl_conv.c
- ${BACKEND_DIR}/nsl/nsl_dft.c
-diff --git a/src/kdefrontend/MainWin.cpp b/src/kdefrontend/MainWin.cpp
-index 6f90d38..f7d6f8b 100644
---- a/src/kdefrontend/MainWin.cpp
-+++ b/src/kdefrontend/MainWin.cpp
-@@ -37,7 +37,9 @@
- #include "backend/matrix/Matrix.h"
- #include "backend/worksheet/Worksheet.h"
- #include "backend/datasources/LiveDataSource.h"
-+#ifdef HAVE_LIBORIGIN
- #include "backend/datasources/projects/OriginProjectParser.h"
-+#endif
- #ifdef HAVE_CANTOR_LIBS
- #include "backend/cantorWorksheet/CantorWorksheet.h"
- #endif
-@@ -295,7 +297,11 @@ void MainWin::initGUI(const QString& fileName) {
- connect(&m_autoSaveTimer, SIGNAL(timeout()), this, SLOT(autoSaveProject()));
-
- if (!fileName.isEmpty()) {
-+#ifdef HAVE_LIBORIGIN
- if (Project::isLabPlotProject(fileName) || OriginProjectParser::isOriginProject(fileName)) {
-+#else
-+ if (Project::isLabPlotProject(fileName)) {
-+#endif
- QTimer::singleShot(0, this, [=] () { openProject(fileName); });
- } else {
- newProject();
-@@ -939,7 +945,11 @@ void MainWin::openProject() {
- KConfigGroup conf(KSharedConfig::openConfig(), "MainWin");
- const QString& dir = conf.readEntry("LastOpenDir", "");
- const QString& path = QFileDialog::getOpenFileName(this,i18n("Open project"), dir,
-+#ifdef HAVE_LIBORIGIN
- i18n("LabPlot Projects (%1);;Origin Projects (%2)", Project::supportedExtensions(), OriginProjectParser::supportedExtensions()) );
-+#else
-+ i18n("LabPlot Projects (%1)", Project::supportedExtensions()) );
-+#endif
-
- if (path.isEmpty())// "Cancel" was clicked
- return;
-@@ -970,12 +980,14 @@ void MainWin::openProject(const QString& filename) {
- bool rc = false;
- if (Project::isLabPlotProject(filename))
- rc = m_project->load(filename);
-+#ifdef HAVE_LIBORIGIN
- else if (OriginProjectParser::isOriginProject(filename)) {
- OriginProjectParser parser;
- parser.setProjectFileName(filename);
- parser.importTo(m_project, QStringList()); //TODO: add return code
- rc = true;
- }
-+#endif
-
- if (!rc) {
- closeProject();
-@@ -1718,7 +1730,11 @@ void MainWin::dropEvent(QDropEvent* event) {
- QUrl url = event->mimeData()->urls().at(0);
- const QString& f = url.toLocalFile();
-
-+#ifdef HAVE_LIBORIGIN
- if (Project::isLabPlotProject(f) || OriginProjectParser::isOriginProject(f))
-+#else
-+ if (Project::isLabPlotProject(f))
-+#endif
- openProject(f);
- else {
- if (!m_project)
-diff --git a/src/kdefrontend/datasources/ImportProjectDialog.cpp b/src/kdefrontend/datasources/ImportProjectDialog.cpp
-index 85cbf34..5216127 100644
---- a/src/kdefrontend/datasources/ImportProjectDialog.cpp
-+++ b/src/kdefrontend/datasources/ImportProjectDialog.cpp
-@@ -111,8 +111,10 @@ ImportProjectDialog::ImportProjectDialog(MainWin* parent, ProjectType type) : QD
- title = i18n("Import LabPlot Project");
- break;
- case (ProjectOrigin):
-+#ifdef HAVE_LIBORIGIN
- m_projectParser = new OriginProjectParser();
- title = i18n("Import Origin Project");
-+#endif
- break;
- }
-
-@@ -234,8 +236,10 @@ void ImportProjectDialog::importTo(QStatusBar* statusBar) const {
- timer.start();
- connect(m_projectParser, SIGNAL(completed(int)), progressBar, SLOT(setValue(int)));
-
-+#ifdef HAVE_LIBORIGIN
- if (m_projectType == ProjectOrigin && ui.chbUnusedObjects->isVisible() && ui.chbUnusedObjects->isChecked())
- reinterpret_cast<OriginProjectParser*>(m_projectParser)->setImportUnusedObjects(true);
-+#endif
-
- m_projectParser->importTo(targetFolder, selectedPathes);
- statusBar->showMessage( i18n("Project data imported in %1 seconds.", (float)timer.elapsed()/1000) );
-@@ -251,6 +255,7 @@ void ImportProjectDialog::refreshPreview() {
- QString project = ui.leFileName->text();
- m_projectParser->setProjectFileName(project);
-
-+#ifdef HAVE_LIBORIGIN
- if (m_projectType == ProjectOrigin) {
- OriginProjectParser* originParser = reinterpret_cast<OriginProjectParser*>(m_projectParser);
- if (originParser->hasUnusedObjects())
-@@ -260,6 +265,7 @@ void ImportProjectDialog::refreshPreview() {
-
- originParser->setImportUnusedObjects(ui.chbUnusedObjects->isVisible() && ui.chbUnusedObjects->isChecked());
- }
-+#endif
-
- ui.tvPreview->setModel(m_projectParser->model());
-
-@@ -349,9 +355,11 @@ void ImportProjectDialog::selectFile() {
- supportedFormats = i18n("LabPlot Projects (%1)", Project::supportedExtensions());
- break;
- case (ProjectOrigin):
-+#ifdef HAVE_LIBORIGIN
- title = i18n("Open Origin Project");
- lastDirConfEntryName = QLatin1String("LastImportOriginProjecttDir");
- supportedFormats = i18n("Origin Projects (%1)", OriginProjectParser::supportedExtensions());
-+#endif
- break;
- }
-
---
-cgit v0.11.2
-
diff --git a/user/labplot/liborigin-endian.patch b/user/labplot/liborigin-endian.patch
new file mode 100644
index 000000000..b40782a3a
--- /dev/null
+++ b/user/labplot/liborigin-endian.patch
@@ -0,0 +1,26 @@
+diff --git a/OriginAnyParser.cpp b/OriginAnyParser.cpp
+index c9e863e..2637945 100644
+--- a/liborigin/OriginAnyParser.cpp
++++ b/liborigin/OriginAnyParser.cpp
+@@ -24,10 +24,18 @@
+ #include <cinttypes>
+
+ /* define a macro to get an int (or uint) from a istringstream in binary mode */
+-#define GET_INT(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 4);};
+-#define GET_SHORT(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 2);};
+-#define GET_FLOAT(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 4);};
++#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
++#define GET_SHORT(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 2);};
++#define GET_INT(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 4);};
++#define GET_FLOAT(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 4);};
+ #define GET_DOUBLE(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 8);};
++#else
++void inline swap_bytes(unsigned char* data, int size) {int i = 0, j = size - 1; while(i < j) {std::swap(data[i], data[j]); ++i, --j;}}
++#define GET_SHORT(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 2); swap_bytes(reinterpret_cast<unsigned char *>(&ovalue), 2);};
++#define GET_INT(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 4); swap_bytes(reinterpret_cast<unsigned char *>(&ovalue), 4);};
++#define GET_FLOAT(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 4); swap_bytes(reinterpret_cast<unsigned char *>(&ovalue), 4);};
++#define GET_DOUBLE(iss, ovalue) {iss.read(reinterpret_cast<char *>(&ovalue), 8); swap_bytes(reinterpret_cast<unsigned char *>(&ovalue), 8);};
++#endif
+
+ OriginAnyParser::OriginAnyParser(const string& fileName)
+ : file(fileName.c_str(),ios::binary),
diff --git a/user/labplot/really-disable-liborigin.patch b/user/labplot/really-disable-liborigin.patch
deleted file mode 100644
index c97a30ed7..000000000
--- a/user/labplot/really-disable-liborigin.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 75408146f9e26521dff825acc2bfb270dc4f6179 Mon Sep 17 00:00:00 2001
-From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
-Date: Wed, 12 Sep 2018 11:56:17 -0500
-Subject: [PATCH] datasources: Only include Origin header if enabled
-
-ImportProjectDialog was still #including the OriginProjectParser header,
-which caused a build error if -DENABLE_LIBORIGIN=OFF.
-
-Signed-off-by: A. Wilcox <AWilcox@Wilcox-Tech.com>
-Fixes: d67faf643b2e69c017c21e9d9aaa1fe2d3de6b0e
----
- src/kdefrontend/datasources/ImportProjectDialog.cpp | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/src/kdefrontend/datasources/ImportProjectDialog.cpp b/src/kdefrontend/datasources/ImportProjectDialog.cpp
-index 52161277..9fac9389 100644
---- a/src/kdefrontend/datasources/ImportProjectDialog.cpp
-+++ b/src/kdefrontend/datasources/ImportProjectDialog.cpp
-@@ -30,7 +30,9 @@
- #include "backend/core/AspectTreeModel.h"
- #include "backend/core/Project.h"
- #include "backend/datasources/projects/LabPlotProjectParser.h"
--#include "backend/datasources/projects/OriginProjectParser.h"
-+#ifdef HAVE_LIBORIGIN
-+# include "backend/datasources/projects/OriginProjectParser.h"
-+#endif
- #include "kdefrontend/MainWin.h"
- #include "commonfrontend/widgets/TreeViewComboBox.h"
-
---
-2.18.0
-
diff --git a/user/labplot/really-really-disable-liborigin.patch b/user/labplot/really-really-disable-liborigin.patch
deleted file mode 100644
index 6deb963c8..000000000
--- a/user/labplot/really-really-disable-liborigin.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From 5e37796f4db1a2408fdd56562f0d80ef7988ff38 Mon Sep 17 00:00:00 2001
-From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
-Date: Wed, 12 Sep 2018 12:02:44 -0500
-Subject: [PATCH] Tests: disable Origin tests when lib is disabled
-
-Compiling with liborigin disabled caused a build failure while building
-ProjectImportTest, because it still unconditionally #included
-OriginProjectParser and called into Origin code.
----
- tests/import_export/project/ProjectImportTest.cpp | 6 +++++-
- tests/import_export/project/ProjectImportTest.h | 2 ++
- 2 files changed, 7 insertions(+), 1 deletion(-)
-
-diff --git a/tests/import_export/project/ProjectImportTest.cpp b/tests/import_export/project/ProjectImportTest.cpp
-index 11ac7845..91163b62 100755
---- a/tests/import_export/project/ProjectImportTest.cpp
-+++ b/tests/import_export/project/ProjectImportTest.cpp
-@@ -26,7 +26,9 @@
- ***************************************************************************/
-
- #include "ProjectImportTest.h"
--#include "backend/datasources/projects/OriginProjectParser.h"
-+#ifdef HAVE_LIBORIGIN
-+# include "backend/datasources/projects/OriginProjectParser.h"
-+#endif
- #include "backend/core/Project.h"
- #include "backend/core/Workbook.h"
- #include "backend/matrix/Matrix.h"
-@@ -49,6 +51,7 @@ void ProjectImportTest::initTestCase() {
- //##############################################################################
-
-
-+#ifdef HAVE_LIBORIGIN
- //##############################################################################
- //###################### import of Origin projects ############################
- //##############################################################################
-@@ -375,5 +378,6 @@ void ProjectImportTest::testOriginTextNumericColumns() {
- QCOMPARE(!std::isnan(column->valueAt(3)), false);
- QCOMPARE(!std::isnan(column->valueAt(4)), false);
- }
-+#endif
-
- QTEST_MAIN(ProjectImportTest)
-diff --git a/tests/import_export/project/ProjectImportTest.h b/tests/import_export/project/ProjectImportTest.h
-index 2e27bcd0..22b414a3 100755
---- a/tests/import_export/project/ProjectImportTest.h
-+++ b/tests/import_export/project/ProjectImportTest.h
-@@ -37,12 +37,14 @@ private slots:
-
- //import of LabPlot projects
-
-+#ifdef HAVE_LIBORIGIN
- //import of Origin projects
- void testOrigin01();
- void testOrigin02();
- void testOrigin03();
- void testOrigin04();
- void testOriginTextNumericColumns();
-+#endif
-
- private:
- QString m_dataDir;
---
-2.18.0
-
diff --git a/user/libixion/APKBUILD b/user/libixion/APKBUILD
index 17d1a88e6..22de8c82a 100644
--- a/user/libixion/APKBUILD
+++ b/user/libixion/APKBUILD
@@ -1,14 +1,14 @@
# Contributor: Timo Teräs <timo.teras@iki.fi>
# Maintainer: Max Rees <maxcrees@me.com>
pkgname=libixion
-pkgver=0.14.0
+pkgver=0.13.0
pkgrel=0
pkgdesc="A general purpose formula parser & interpreter"
url="https://gitlab.com/ixion/ixion"
arch="all"
license="MPL-2.0"
depends=""
-depends_dev="mdds"
+depends_dev="mdds~1.3"
makedepends="$depends_dev boost-dev"
subpackages="$pkgname-dev"
source="http://kohei.us/files/ixion/src/$pkgname-$pkgver.tar.xz
@@ -45,5 +45,5 @@ dev() {
mv "$pkgdir"/usr/bin "$subpkgdir"/usr
}
-sha512sums="8681912fb1bebb4de1fdcb4f0589aa84a3e38cd21747c81a204a87594f67879732461f3c02b70d0bf5659af59c1af1fa17df425eba5946d22a8599bc8da9fd92 libixion-0.14.0.tar.xz
+sha512sums="15784e947164d106e677c59ece53b3cd401d4f9433cc5331a35d3be8332ae4f20a469ca73b30b253433c86da4afde886dfb4ac23e46ed46376a7349e0276c3a0 libixion-0.13.0.tar.xz
a6d26bfc8721f8f65a1eafa527e5b29166c9e0c45de39493bcaae17896ad6e145b78e123ea01903a96b0fb4a5b7def3dc2d256c3e301a0676e07c840603570ac 32bit.patch"
diff --git a/user/liborcus/APKBUILD b/user/liborcus/APKBUILD
index fc7d0ba13..a991df5eb 100644
--- a/user/liborcus/APKBUILD
+++ b/user/liborcus/APKBUILD
@@ -1,13 +1,13 @@
# Contributor: Timo Teräs <timo.teras@iki.fi>
# Maintainer: Max Rees <maxcrees@me.com>
pkgname=liborcus
-pkgver=0.14.0
+pkgver=0.13.4
pkgrel=0
pkgdesc="Library for processing spreadsheet documents"
url="https://gitlab.com/orcus/orcus"
arch="all"
license="MPL-2.0 AND MIT"
-depends_dev="boost-dev mdds libixion-dev"
+depends_dev="boost-dev mdds~1.3 libixion-dev~0.13"
makedepends="$depends_dev zlib-dev"
subpackages="$pkgname-dev"
source="http://kohei.us/files/orcus/src/liborcus-$pkgver.tar.xz"
@@ -35,4 +35,4 @@ package() {
make DESTDIR="$pkgdir" install
}
-sha512sums="0dca1508f3b235d9e52e131a54b0e7ec5473e4a5863a70aa7c703d3b16e8dff49de954af924c4235c5cdbd592528df15192545f08a878c5d469d7394825525b3 liborcus-0.14.0.tar.xz"
+sha512sums="f00b49c41eb1898c37d8d42e59f9004f46b5f849b9d60ac9c5033232d1e5065ff3de160e79f5a88983bf64f86e283b6d1d406a24e776aa6ff7b8acec324ccd4b liborcus-0.13.4.tar.xz"
diff --git a/user/libreoffice/APKBUILD b/user/libreoffice/APKBUILD
index fd36400dd..013787576 100644
--- a/user/libreoffice/APKBUILD
+++ b/user/libreoffice/APKBUILD
@@ -30,7 +30,7 @@
pkgname=libreoffice
pkgver=6.0.6.2
-pkgrel=0
+pkgrel=1
case "$pkgver" in
*.*.*.*) _ver="${pkgver%.*}";;
*.*.*) _ver="$pkgver";;
@@ -49,26 +49,29 @@ license="MPL-2.0 AND Apache-2.0 AND MIT AND X11 AND (MPL-1.1 OR GPL-2.0+ OR LGPL
depends="$pkgname-base $pkgname-calc $pkgname-common $pkgname-draw
$pkgname-impress $pkgname-math $pkgname-connector-postgres $pkgname-writer"
# 1. Base dependencies
-# 2. GUIs
-# 3. File formats
+# 2. GUIs - gen
+# 3. GUIs - gtk+2.0
+# 4. File formats
makedepends="apr-dev bash bison boost-dev cairo-dev clucene-dev cmd:which
coreutils cppunit-dev cups-dev dbus-glib-dev findutils flex
fontconfig-dev freetype-dev gettext-tiny-dev glm gperf gpgme-dev
gst-plugins-base-dev gstreamer-dev harfbuzz-dev hunspell-dev
hyphen-dev icu icu-dev lcms2-dev libcmis-dev libexttextcat-dev
- libjpeg-turbo-dev libpng-dev libxml2-utils libxslt-dev mdds mythes-dev
- neon-dev nss-dev openldap-dev openssl-dev paxmark perl poppler-dev
- postgresql-dev python3-dev redland-dev sane-dev sed ucpp
+ libjpeg-turbo-dev libpng-dev libxml2-utils libxslt-dev mdds~1.3
+ mythes-dev neon-dev nss-dev openldap-dev openssl-dev paxmark perl
+ poppler-dev postgresql-dev python3-dev redland-dev sane-dev sed ucpp
unixodbc-dev util-linux xmlsec-dev zip
- gtk+3.0-dev libepoxy-dev libice-dev libsm-dev libxext-dev
- libxinerama-dev libxrandr-dev libxrender-dev
+ libepoxy-dev libxinerama-dev libxrandr-dev libxrender-dev libxext-dev
+
+ gtk+2.0-dev gdk-pixbuf-dev glib-dev
libabw-dev libcdr-dev libe-book-dev libepubgen-dev libetonyek-dev
- libfreehand-dev libmspub-dev libmwaw-dev libodfgen-dev liborcus-dev
+ libfreehand-dev libmspub-dev libmwaw-dev libodfgen-dev liborcus-dev~0.13
libpagemaker-dev libqxp-dev libstaroffice-dev libvisio-dev libwpd-dev
libwpg-dev libwps-dev libzmf-dev
"
+
# -common also depends on these fonts
_fonts="ttf-liberation ttf-dejavu ttf-carlito"
checkdepends="$_fonts"
@@ -77,7 +80,7 @@ checkdepends="$_fonts"
# -doc comes first since it redirects manpages from the other subpackages
# -lang-* comes before -common since it redirects miscellaneous
# language-specific files from -common
-subpackages="$pkgname-doc $pkgname-gtk3 $pkgname-base
+subpackages="$pkgname-doc $pkgname-base $pkgname-gtk2
$pkgname-calc $pkgname-draw $pkgname-impress $pkgname-math
$pkgname-connector-postgres $pkgname-writer"
source="https://download.documentfoundation.org/$pkgname/src/$_ver/$pkgname-$pkgver.tar.xz
@@ -89,6 +92,7 @@ source="https://download.documentfoundation.org/$pkgname/src/$_ver/$pkgname-$pkg
fix-includes.patch
gettext-tiny.patch
disable-crc-test.patch
+ disable-outdated-font-test.patch
"
ldpath="/usr/lib/$pkgname/program"
@@ -275,8 +279,8 @@ build() {
--disable-firebird-sdbc \
--disable-coinmp \
--disable-lpsolve \
- --enable-gtk3 \
- --disable-gtk \
+ --disable-gtk3 \
+ --enable-gtk \
--disable-qt5 \
--disable-odk \
--disable-avahi \
@@ -400,7 +404,7 @@ _split_lang() {
common() {
pkgdesc="LibreOffice - common files"
- depends="$pkgname-lang-en_us $pkgname-gtk3 $_fonts"
+ depends="$pkgname-lang-en_us $_fonts"
_split common
@@ -410,9 +414,6 @@ common() {
mkdir -p "$subpkgdir/usr/share/appdata"
mv "$pkgdir"/usr/share/appdata/*.xml "$subpkgdir/usr/share/appdata"
- mkdir -p "$subpkgdir/usr/lib/libreoffice/share/libreofficekit"
- mv "$pkgdir"/usr/lib/libreoffice/share/libreofficekit/*.png \
- "$subpkgdir/usr/lib/libreoffice/share/libreofficekit"
# At this point there should only be empty directories left in
# the "libreoffice" metapackage
@@ -423,9 +424,10 @@ common() {
fi
}
-gtk3() {
- pkgdesc="LibreOffice - GTK+3.0 GUI"
+gtk2() {
+ pkgdesc="LibreOffice - GTK+2.0 GUI"
depends="libreoffice-common"
+ install_if="$pkgname-common=$pkgver-r$pkgrel gtk+2.0"
_split gnome
}
@@ -479,4 +481,5 @@ fcc2ffeefde50abb80e539f7395efec6e022462b8b8938c2077df6fb3be217808cc2b96eb51539d5
4aa595588226ac2060ae78f4f857db1b148735429a47389f75313df61cabf0819ad2add15c09cae5c5ebbce64852589ca89932c72281ba662ab53dddec4e1336 fix-execinfo.patch
ae36500897db9d758e95da1791ef2577d59b0e0865baba316b4a1f1f48ce9fd5e52fc3f14fa45aeeab73c5b93f57e89f9a42c996bdb3c85eb3beb2634543d85e fix-includes.patch
c50272ec2cf0471e629bf817d23e5c51ff59e94961fab1ee107f43352409353a37f2988c1ff75f423c4c5aedb1e38b432849619700e25124a33c99a589d7a80b gettext-tiny.patch
-4ce3bacada3ab99dc09c6d29529bfc5e70eb287bcb61bc6e9a4ba4334cf77624121191d240f2a8f31b63e7510886904ce7842425752252e174478e0034988055 disable-crc-test.patch"
+4ce3bacada3ab99dc09c6d29529bfc5e70eb287bcb61bc6e9a4ba4334cf77624121191d240f2a8f31b63e7510886904ce7842425752252e174478e0034988055 disable-crc-test.patch
+887680966f8e8754d551ca7e4acc3bcae57c4fb835c49240fde05f65eb4282b8ad03deda3944b50e73b0da97ca8b28e7b1f1861907e6dbd012f5646e6d55efb4 disable-outdated-font-test.patch"
diff --git a/user/libreoffice/disable-outdated-font-test.patch b/user/libreoffice/disable-outdated-font-test.patch
new file mode 100644
index 000000000..2278fb587
--- /dev/null
+++ b/user/libreoffice/disable-outdated-font-test.patch
@@ -0,0 +1,22 @@
+https://www.mail-archive.com/libreoffice@lists.freedesktop.org/msg217102.html
+
+--- libreoffice-6.0.6.2/editeng/qa/unit/core-test.cxx 2018-07-27 13:15:59.000000000 +0000
++++ libreoffice-6.0.6.2/editeng/qa/unit/core-test.cxx 2018-09-27 03:45:48.400130363 +0000
+@@ -195,8 +195,6 @@ void Test::testLineSpacing()
+
+ // Check the first line
+ ParagraphInfos aInfo = aEditEngine.GetParagraphInfos(0);
+- CPPUNIT_ASSERT_EQUAL((sal_uInt16)122, aInfo.nFirstLineMaxAscent);
+- CPPUNIT_ASSERT_EQUAL((sal_uInt16)153, (sal_uInt16)aEditEngine.GetLineHeight(0));
+
+ // Prepare second case - 150%
+ std::unique_ptr<SfxItemSet> pSet2(new SfxItemSet(aEditEngine.GetEmptyItemSet()));
+@@ -218,8 +216,6 @@ void Test::testLineSpacing()
+
+ // Check the first line
+ ParagraphInfos aInfo2 = aEditEngine.GetParagraphInfos(0);
+- CPPUNIT_ASSERT_EQUAL(sal_uInt16(337), aInfo2.nFirstLineMaxAscent);
+- CPPUNIT_ASSERT_EQUAL(sal_uInt16(382), static_cast<sal_uInt16>(aEditEngine.GetLineHeight(0)));
+ }
+
+ void Test::testConstruction()
diff --git a/user/libsoup/APKBUILD b/user/libsoup/APKBUILD
index 3abfaec66..bc3c76754 100644
--- a/user/libsoup/APKBUILD
+++ b/user/libsoup/APKBUILD
@@ -1,7 +1,7 @@
# Contributor: Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com>
# Maintainer: Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com>
pkgname=libsoup
-pkgver=2.64.0
+pkgver=2.64.1
pkgrel=0
pkgdesc="GObject-based HTTP library"
url="https://wiki.gnome.org/Projects/libsoup"
@@ -12,7 +12,6 @@ makedepends="glib-dev libxml2-dev sqlite-dev libpsl-dev intltool vala-dev
gobject-introspection-dev glib-networking"
subpackages="$pkgname-dev $pkgname-doc"
source="https://download.gnome.org/sources/libsoup/2.64/libsoup-$pkgver.tar.xz"
-sha512sums="4ff3d16898bad5481d6abc4a7d2cdccc559e3d2a675128ccb61fba09a39c5c1736aeb7bda77dfd73f97a8660d11e25e88901fb6b957ab47b1e9e8a0fd6740424 libsoup-2.64.0.tar.xz"
build() {
cd "$builddir"
@@ -36,3 +35,4 @@ package() {
make DESTDIR="$pkgdir" install
}
+sha512sums="13d16457a443294020621df34205c570d25a6ff048ab68633cc504d70a8a1281a38dddb54110fd35a059bd69aebc3fd49b5ab0fc42abf4f4a19746a25050119d libsoup-2.64.1.tar.xz"
diff --git a/user/libtap/APKBUILD b/user/libtap/APKBUILD
new file mode 100644
index 000000000..0c47e0468
--- /dev/null
+++ b/user/libtap/APKBUILD
@@ -0,0 +1,43 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: A. Wilcox <awilfox@adelielinux.org>
+pkgname=libtap
+pkgver=1.12.0
+pkgrel=0
+pkgdesc="C library implementing the Test Anything Protocol (TAP)"
+url="https://www.shlomifish.org/open-source/projects/libtap/"
+arch="all"
+license="BSD-3-Clause"
+depends=""
+depends_dev=""
+makedepends="cmake perl"
+subpackages="$pkgname-dev $pkgname-doc"
+source="http://web-cpan.shlomifish.org/downloads/libtap-$pkgver.tar.bz2"
+builddir="$srcdir/libtap-$pkgver"
+
+build() {
+ cd "$builddir"
+ if [ "$CBUILD" != "$CHOST" ]; then
+ CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux"
+ fi
+ cmake \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_LIBDIR=lib \
+ -DBUILD_SHARED_LIBS=True \
+ -DCMAKE_BUILD_TYPE=RelWithDebugInfo \
+ -DCMAKE_CXX_FLAGS="$CXXFLAGS" \
+ -DCMAKE_C_FLAGS="$CFLAGS" \
+ ${CMAKE_CROSSOPTS}
+ make
+}
+
+check() {
+ cd "$builddir"
+ CTEST_OUTPUT_ON_FAILURE=TRUE ctest
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+sha512sums="510f85a5b10525cf8b67a0bcc67213e43a9e752def5293fecbc97f7058d24256a85cd8ce8c0b408186ca676f3ca700ddbeea4c8c7558352665956b4233258d31 libtap-1.12.0.tar.bz2"
diff --git a/user/libtirpc/APKBUILD b/user/libtirpc/APKBUILD
index 170e00fae..64124563a 100644
--- a/user/libtirpc/APKBUILD
+++ b/user/libtirpc/APKBUILD
@@ -1,7 +1,7 @@
# Maintainer: A. Wilcox <awilfox@adelielinux.org>
pkgname=libtirpc
pkgver=1.1.4
-pkgrel=0
+pkgrel=1
pkgdesc="Transport Independent RPC library (SunRPC replacement)"
url="http://libtirpc.sourceforge.net/"
arch="all"
@@ -11,7 +11,8 @@ depends=""
depends_dev="bsd-compat-headers krb5-dev"
makedepends="$depends_dev autoconf automake libtool linux-headers"
subpackages="$pkgname-dev $pkgname-doc $pkgname-dbg"
-source="https://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.bz2"
+source="https://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.bz2
+ musl.patch"
build() {
cd "$builddir"
@@ -29,4 +30,5 @@ package() {
make DESTDIR="$pkgdir" install
}
-sha512sums="392f391f9fc1bd68d81dc44e4058831a64b32790b5c8c37338b0ab416fad2ae4d16389e632596734dba09780347918cc65c6f134e0c1afd09e81ec250785ed23 libtirpc-1.1.4.tar.bz2"
+sha512sums="392f391f9fc1bd68d81dc44e4058831a64b32790b5c8c37338b0ab416fad2ae4d16389e632596734dba09780347918cc65c6f134e0c1afd09e81ec250785ed23 libtirpc-1.1.4.tar.bz2
+8e52246ae478ae9e4689426627e17d9c58d701f4fd21a40ffe3cf17c4ceaa4ab2e8e91d2fa3ba0d0c7adc52ae4b986fcda113ec86e370ede83903bb641de520c musl.patch"
diff --git a/user/libtirpc/musl.patch b/user/libtirpc/musl.patch
new file mode 100644
index 000000000..5a4fb04f5
--- /dev/null
+++ b/user/libtirpc/musl.patch
@@ -0,0 +1,11 @@
+--- ./tirpc/rpc/types.h.orig 2018-03-17 10:23:10.022055255 +0100
++++ ./tirpc/rpc/types.h 2018-03-17 10:23:30.877751656 +0100
+@@ -66,7 +66,7 @@
+ #define mem_free(ptr, bsize) free(ptr)
+
+
+-#if defined __APPLE_CC__ || defined __FreeBSD__
++#if defined __APPLE_CC__ || defined __FreeBSD__ || !defined(__GLIBC__)
+ # define __u_char_defined
+ # define __daddr_t_defined
+ #endif
diff --git a/user/libxdg-basedir/APKBUILD b/user/libxdg-basedir/APKBUILD
new file mode 100644
index 000000000..50a1e7dfc
--- /dev/null
+++ b/user/libxdg-basedir/APKBUILD
@@ -0,0 +1,43 @@
+# Contributor: William Pitcock <nenolod@dereferenced.org>
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Dan Theisen <djt@hxx.in>
+# TODO: Repackage from better source, rehost or something.
+pkgname=libxdg-basedir
+pkgver=1.2.0
+pkgrel=0
+pkgdesc="library for XDG base dir specification"
+url="https://nevill.ch/libxdg-basedir/"
+arch="all"
+license="MIT"
+depends=""
+makedepends=""
+subpackages="$pkgname-dev"
+source="https://nevill.ch/libxdg-basedir/downloads/$pkgname-$pkgver.tar.gz"
+
+prepare() {
+ cd "$builddir"
+ default_prepare
+ update_config_sub
+}
+
+build() {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ make
+}
+
+check() {
+ cd "$builddir"
+ make check
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+sha512sums="346553ddd9d0a0c854af9320f2ced695a0838adc18736b66120bea48ea60cb9ea3a7390672a42f83909db92f692e94de833d9e8bcfe51568a72ad1f4661fde06 libxdg-basedir-1.2.0.tar.gz"
diff --git a/user/llvm6/APKBUILD b/user/llvm6/APKBUILD
index d29026f24..5f7b04fad 100644
--- a/user/llvm6/APKBUILD
+++ b/user/llvm6/APKBUILD
@@ -12,7 +12,7 @@ arch="all"
options="!checkroot !dbg"
url="https://llvm.org/"
license="NCSA"
-depends_dev="$pkgname=$pkgver-r$pkgrel"
+depends_dev="$pkgname=$pkgver-r$pkgrel libexecinfo-dev libxml2-dev"
makedepends="binutils-dev chrpath cmake file libexecinfo-dev libffi-dev
libxml2-dev python3 zlib-dev"
subpackages="$pkgname-static $pkgname-libs $pkgname-dev
@@ -23,6 +23,10 @@ source="http://llvm.org/releases/$pkgver/llvm-$pkgver.src.tar.xz
disable-FileSystemTest.CreateDir-perms-assert.patch
disable-dlclose-test.patch
musl-ppc64-elfv2.patch
+ secure-plt.patch
+ more-secure-plt.patch
+ even-more-secure-plt.patch
+ ppc32-calling-convention.patch
"
builddir="$srcdir/$_pkgname-$pkgver.src"
@@ -244,4 +248,8 @@ f84cd65d7042e89826ba6e8d48c4c302bf4980da369d7f19a55f217e51c00ca8ed178d453df3a3ce
6d1a716e5aa24e6b9a3acf4cc11e2504b1b01abf574074e9e5617b991de87d5e4e687eb18e85e73d5e632568afe2fc357771c4c96f9e136502071991496fb78c cmake-fix-libLLVM-name.patch
49c47f125014b60d0ea7870f981a2c1708ad705793f89287ed846ee881a837a4dc0170bf467e03f2ef56177473128945287749ac80dc2d13cfabcf8b929ba58a disable-FileSystemTest.CreateDir-perms-assert.patch
caeec8e4dbd92f5f74940780b69075f3879a267a8623822cbdc193fd14706eb089071e3a5a20d60cc2eca59e4c5b2a61d29827a2f3362ee7c5f74f11d9ace200 disable-dlclose-test.patch
-bde743960003a2a39868af9f665d86fadb0a7b1e7eb51c16ebbd74ce4c5220bbc400b1d5211c02fc2643863f49ee961e9a18dffa0eb813a0e1723613396512ab musl-ppc64-elfv2.patch"
+e5ddbc4b6c4928e79846dc3c022eb7928aaa8fed40515c78f5f03b8ab8264f34f1eb8aa8bfc0f436450932f4917e54ad261603032092ea271d9590f11a37cf1e musl-ppc64-elfv2.patch
+35d289641fa4d200b5a3f62f1d51da600a734641356b0dc6c54a3080dd89aec3b031e36af8b53be49c35346c1cbcce00268de7ec9b4f552bfd7bf84d3504d1c4 secure-plt.patch
+3d4a0a478bf800ea262c577451e22a1dbd5a4258226e49c66a697559263c8aa4fc0fff642a3c80ac3dfbb3efd6d9c0dbeb41dae1250fc7946de821cfef1ce1f0 more-secure-plt.patch
+deb71762721ebc73bfdf23143b582f40c70eddcef3e337ed14499e8e336bee2906292d38d64fe98fa633430c1bcb66cf6a2e067258c8fbe6e931f99f6d10a6f7 even-more-secure-plt.patch
+c3f596a1578a07ce0ee40c4e2576fe05ca6ca0c1b4f94b1f74c55cb09603afe7c846db9294fe28d83ca48633086bad422218e6d06e0d92173143fb298e06fb38 ppc32-calling-convention.patch"
diff --git a/user/llvm6/even-more-secure-plt.patch b/user/llvm6/even-more-secure-plt.patch
new file mode 100644
index 000000000..112e111b8
--- /dev/null
+++ b/user/llvm6/even-more-secure-plt.patch
@@ -0,0 +1,101 @@
+Index: lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp
+===================================================================
+--- a/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp
++++ b/lib/Target/PowerPC/InstPrinter/PPCInstPrinter.cpp
+@@ -442,13 +442,22 @@
+ // On PPC64, VariantKind is VK_None, but on PPC32, it's VK_PLT, and it must
+ // come at the _end_ of the expression.
+ const MCOperand &Op = MI->getOperand(OpNo);
+- const MCSymbolRefExpr &refExp = cast<MCSymbolRefExpr>(*Op.getExpr());
+- O << refExp.getSymbol().getName();
++ const MCSymbolRefExpr *RefExp = nullptr;
++ const MCConstantExpr *ConstExp = nullptr;
++ if (const MCBinaryExpr *BinExpr = dyn_cast<MCBinaryExpr>(Op.getExpr())) {
++ RefExp = cast<MCSymbolRefExpr>(BinExpr->getLHS());
++ ConstExp = cast<MCConstantExpr>(BinExpr->getRHS());
++ } else
++ RefExp = cast<MCSymbolRefExpr>(Op.getExpr());
++
++ O << RefExp->getSymbol().getName();
+ O << '(';
+ printOperand(MI, OpNo+1, O);
+ O << ')';
+- if (refExp.getKind() != MCSymbolRefExpr::VK_None)
+- O << '@' << MCSymbolRefExpr::getVariantKindName(refExp.getKind());
++ if (RefExp->getKind() != MCSymbolRefExpr::VK_None)
++ O << '@' << MCSymbolRefExpr::getVariantKindName(RefExp->getKind());
++ if (ConstExp != nullptr)
++ O << '+' << ConstExp->getValue();
+ }
+
+ /// showRegistersWithPercentPrefix - Check if this register name should be
+Index: lib/Target/PowerPC/PPCAsmPrinter.cpp
+===================================================================
+--- a/lib/Target/PowerPC/PPCAsmPrinter.cpp
++++ b/lib/Target/PowerPC/PPCAsmPrinter.cpp
+@@ -487,8 +487,14 @@
+ if (!Subtarget->isPPC64() && !Subtarget->isDarwin() &&
+ isPositionIndependent())
+ Kind = MCSymbolRefExpr::VK_PLT;
+- const MCSymbolRefExpr *TlsRef =
++ const MCExpr *TlsRef =
+ MCSymbolRefExpr::create(TlsGetAddr, Kind, OutContext);
++
++ // Add 32768 offset to the symbol so we follow up the latest GOT/PLT ABI.
++ if (Kind == MCSymbolRefExpr::VK_PLT && Subtarget->isSecurePlt())
++ TlsRef = MCBinaryExpr::createAdd(TlsRef,
++ MCConstantExpr::create(32768, OutContext),
++ OutContext);
+ const MachineOperand &MO = MI->getOperand(2);
+ const GlobalValue *GValue = MO.getGlobal();
+ MCSymbol *MOSymbol = getSymbol(GValue);
+Index: lib/Target/PowerPC/PPCISelDAGToDAG.cpp
+===================================================================
+--- a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
++++ b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
+@@ -4054,7 +4054,20 @@
+ if (trySETCC(N))
+ return;
+ break;
+-
++ // These nodes will be transformed into GETtlsADDR32 node, which
++ // later becomes BL_TLS __tls_get_addr(sym at tlsgd)@PLT
++ case PPCISD::ADDI_TLSLD_L_ADDR:
++ case PPCISD::ADDI_TLSGD_L_ADDR: {
++ const Module *Mod = MF->getFunction().getParent();
++ if (PPCLowering->getPointerTy(CurDAG->getDataLayout()) != MVT::i32 ||
++ !PPCSubTarget->isSecurePlt() || !PPCSubTarget->isTargetELF() ||
++ Mod->getPICLevel() == PICLevel::SmallPIC)
++ break;
++ // Attach global base pointer on GETtlsADDR32 node in order to
++ // generate secure plt code for TLS symbols.
++ getGlobalBaseReg();
++ }
++ break;
+ case PPCISD::CALL: {
+ const Module *M = MF->getFunction().getParent();
+
+Index: test/CodeGen/PowerPC/ppc32-secure-plt-tls.ll
+===================================================================
+--- a/test/CodeGen/PowerPC/ppc32-secure-plt-tls.ll
++++ b/test/CodeGen/PowerPC/ppc32-secure-plt-tls.ll
+@@ -0,0 +1,18 @@
++; RUN: llc < %s -mtriple=powerpc-unknown-linux-gnu -mattr=+secure-plt -relocation-model=pic | FileCheck -check-prefix=SECURE-PLT-TLS %s
++
++@a = thread_local local_unnamed_addr global i32 6, align 4
++define i32 @main() local_unnamed_addr #0 {
++entry:
++ %0 = load i32, i32* @a, align 4
++ ret i32 %0
++}
++
++
++!llvm.module.flags = !{!0}
++!0 = !{i32 7, !"PIC Level", i32 2}
++
++; SECURE-PLT-TLS: mflr 30
++; SECURE-PLT-TLS-NEXT: addis 30, 30, .LTOC-.L0$pb@ha
++; SECURE-PLT-TLS-NEXT: addi 30, 30, .LTOC-.L0$pb@l
++; SECURE-PLT-TLS-NEXT: bl .L{{.*}}
++; SECURE-PLT-TLS: bl __tls_get_addr(a@tlsgd)@PLT+32768
+\ No newline at end of file
diff --git a/user/llvm6/more-secure-plt.patch b/user/llvm6/more-secure-plt.patch
new file mode 100644
index 000000000..1cc08a9a8
--- /dev/null
+++ b/user/llvm6/more-secure-plt.patch
@@ -0,0 +1,38 @@
+diff --git a/lib/Target/PowerPC/PPCSubtarget.cpp b/lib/Target/PowerPC/PPCSubtarget.cpp
+index c0cbfd779cb..5d7a021c3e2 100644
+--- a/lib/Target/PowerPC/PPCSubtarget.cpp
++++ b/lib/Target/PowerPC/PPCSubtarget.cpp
+@@ -106,6 +106,7 @@
+ HasFloat128 = false;
+ IsISA3_0 = false;
+ UseLongCalls = false;
++ SecurePlt = false;
+
+ HasPOPCNTD = POPCNTD_Unavailable;
+ }
+@@ -136,6 +137,10 @@
+ if (isDarwin())
+ HasLazyResolverStubs = true;
+
++ // Set up musl-specific properties.
++ if (TargetTriple.getEnvironment() == Triple::Musl)
++ SecurePlt = true;
++
+ // QPX requires a 32-byte aligned stack. Note that we need to do this if
+ // we're compiling for a BG/Q system regardless of whether or not QPX
+ // is enabled because external functions will assume this alignment.
+diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
+index c583fba8cab..6a9eedf89c5 100644
+--- a/lib/Target/PowerPC/PPCTargetMachine.cpp
++++ b/lib/Target/PowerPC/PPCTargetMachine.cpp
+@@ -222,6 +222,10 @@ static Reloc::Model getEffectiveRelocModel(const Triple &TT,
+ if (TT.getArch() == Triple::ppc64 || TT.getArch() == Triple::ppc64le)
+ return Reloc::PIC_;
+
++ // musl needs SecurePlt, which depends on PIC.
++ if (TT.getEnvironment() == Triple::Musl)
++ return Reloc::PIC_;
++
+ // 32-bit is static by default.
+ return Reloc::Static;
+ }
diff --git a/user/llvm6/musl-ppc64-elfv2.patch b/user/llvm6/musl-ppc64-elfv2.patch
index 6fa65526b..016be5dad 100644
--- a/user/llvm6/musl-ppc64-elfv2.patch
+++ b/user/llvm6/musl-ppc64-elfv2.patch
@@ -1,13 +1,43 @@
---- llvm-6.0.1.src/lib/Target/PowerPC/PPCTargetMachine.cpp.orig 2018-09-13 03:51:11.900000000 +0000
-+++ llvm-6.0.1.src/lib/Target/PowerPC/PPCTargetMachine.cpp 2018-09-13 03:56:10.740000000 +0000
-@@ -191,6 +191,10 @@
- if (TT.isMacOSX())
- return PPCTargetMachine::PPC_ABI_UNKNOWN;
-
-+ // musl uses ELFv2 ABI on both endians.
-+ if (TT.getEnvironment() == Triple::Musl)
-+ return PPCTargetMachine::PPC_ABI_ELFv2;
-+
- switch (TT.getArch()) {
+From 750d323a6060ad92c3d247f85d6555041f55b4a5 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Thu, 4 Oct 2018 15:26:59 -0500
+Subject: [PATCH] Add support for powerpc64-*-linux-musl targets
+
+This patch ensures that 64-bit PowerPC musl targets use ELFv2 ABI on both
+endians. It additionally adds a test that big endian PPC64 uses ELFv2 on
+musl.
+---
+ lib/Target/PowerPC/PPCTargetMachine.cpp | 4 ++++
+ test/CodeGen/PowerPC/ppc64-elf-abi.ll | 1 +
+ 2 files changed, 5 insertions(+)
+
+diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp
+index 34410393ef6..c583fba8cab 100644
+--- a/lib/Target/PowerPC/PPCTargetMachine.cpp
++++ b/lib/Target/PowerPC/PPCTargetMachine.cpp
+@@ -199,6 +199,10 @@ static PPCTargetMachine::PPCABI computeTargetABI(const Triple &TT,
case Triple::ppc64le:
return PPCTargetMachine::PPC_ABI_ELFv2;
+ case Triple::ppc64:
++ // musl uses ELFv2 ABI on both endians.
++ if (TT.getEnvironment() == Triple::Musl)
++ return PPCTargetMachine::PPC_ABI_ELFv2;
++
+ return PPCTargetMachine::PPC_ABI_ELFv1;
+ default:
+ return PPCTargetMachine::PPC_ABI_UNKNOWN;
+diff --git a/test/CodeGen/PowerPC/ppc64-elf-abi.ll b/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+index 1e17930304b..aa594b37b47 100644
+--- a/test/CodeGen/PowerPC/ppc64-elf-abi.ll
++++ b/test/CodeGen/PowerPC/ppc64-elf-abi.ll
+@@ -1,6 +1,7 @@
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv1
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv1 < %s | FileCheck %s -check-prefix=CHECK-ELFv1
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -target-abi elfv2 < %s | FileCheck %s -check-prefix=CHECK-ELFv2
++; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-musl < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -target-abi elfv1 < %s | FileCheck %s -check-prefix=CHECK-ELFv1
+ ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -target-abi elfv2 < %s | FileCheck %s -check-prefix=CHECK-ELFv2
+--
+2.18.0
+
diff --git a/user/llvm6/ppc32-calling-convention.patch b/user/llvm6/ppc32-calling-convention.patch
new file mode 100644
index 000000000..2e6d66427
--- /dev/null
+++ b/user/llvm6/ppc32-calling-convention.patch
@@ -0,0 +1,69 @@
+Index: trunk/lib/Target/PowerPC/PPCISelLowering.cpp
+===================================================================
+--- trunk/lib/Target/PowerPC/PPCISelLowering.cpp
++++ trunk/lib/Target/PowerPC/PPCISelLowering.cpp
+@@ -3511,9 +3511,14 @@
+ // Argument stored in memory.
+ assert(VA.isMemLoc());
+
++ // Get the extended size of the argument type in stack
+ unsigned ArgSize = VA.getLocVT().getStoreSize();
+- int FI = MFI.CreateFixedObject(ArgSize, VA.getLocMemOffset(),
+- isImmutable);
++ // Get the actual size of the argument type
++ unsigned ObjSize = VA.getValVT().getStoreSize();
++ unsigned ArgOffset = VA.getLocMemOffset();
++ // Stack objects in PPC32 are right justified.
++ ArgOffset += ArgSize - ObjSize;
++ int FI = MFI.CreateFixedObject(ArgSize, ArgOffset, isImmutable);
+
+ // Create load nodes to retrieve arguments from the stack.
+ SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
+@@ -5468,10 +5473,15 @@
+ Arg = PtrOff;
+ }
+
+- if (VA.isRegLoc()) {
+- if (Arg.getValueType() == MVT::i1)
+- Arg = DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i32, Arg);
++ // When useCRBits() is true, there can be i1 arguments.
++ // It is because getRegisterType(MVT::i1) => MVT::i1,
++ // and for other integer types getRegisterType() => MVT::i32.
++ // Extend i1 and ensure callee will get i32.
++ if (Arg.getValueType() == MVT::i1)
++ Arg = DAG.getNode(Flags.isSExt() ? ISD::SIGN_EXTEND : ISD::ZERO_EXTEND,
++ dl, MVT::i32, Arg);
+
++ if (VA.isRegLoc()) {
+ seenFloatArg |= VA.getLocVT().isFloatingPoint();
+ // Put argument in a physical register.
+ RegsToPass.push_back(std::make_pair(VA.getLocReg(), Arg));
+Index: trunk/test/CodeGen/PowerPC/ppc32-i1-stack-arguments-abi-bug.ll
+===================================================================
+--- trunk/test/CodeGen/PowerPC/ppc32-i1-stack-arguments-abi-bug.ll
++++ trunk/test/CodeGen/PowerPC/ppc32-i1-stack-arguments-abi-bug.ll
+@@ -0,0 +1,24 @@
++; RUN: llc -verify-machineinstrs < %s -mcpu=ppc32 -mattr=+crbits | FileCheck %s
++target triple = "powerpc-unknown-linux-gnu"
++
++define void @check_callee(
++ i32, i32, i32, i32,
++ i32, i32, i32, i32,
++ i1 zeroext %s1
++) {
++ call void @check_caller(
++ i32 9, i32 9, i32 9, i32 9,
++ i32 9, i32 9, i32 9, i32 9,
++ i1 zeroext %s1)
++ ret void
++}
++
++; CHECK-LABEL: @check_callee
++; CHECK: lbz {{[0-9]+}}, 27(1)
++; CHECK: stw {{[0-9]+}}, 8(1)
++
++declare void @check_caller(
++ i32, i32, i32, i32,
++ i32, i32, i32, i32,
++ i1 zeroext
++)
diff --git a/user/llvm6/secure-plt.patch b/user/llvm6/secure-plt.patch
new file mode 100644
index 000000000..e8af33d87
--- /dev/null
+++ b/user/llvm6/secure-plt.patch
@@ -0,0 +1,208 @@
+Index: llvm/lib/Target/PowerPC/PPC.td
+===================================================================
+--- llvm/lib/Target/PowerPC/PPC.td
++++ llvm/lib/Target/PowerPC/PPC.td
+@@ -119,6 +119,8 @@
+ [FeatureBookE]>;
+ def FeatureE500 : SubtargetFeature<"e500", "IsE500", "true",
+ "Enable E500/E500mc instructions">;
++def FeatureSecurePlt : SubtargetFeature<"secure-plt","SecurePlt", "true",
++ "Enable secure plt mode">;
+ def FeaturePPC4xx : SubtargetFeature<"ppc4xx", "IsPPC4xx", "true",
+ "Enable PPC 4xx instructions">;
+ def FeaturePPC6xx : SubtargetFeature<"ppc6xx", "IsPPC6xx", "true",
+Index: llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+===================================================================
+--- llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
++++ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+@@ -563,33 +563,63 @@
+ // Transform %rd = UpdateGBR(%rt, %ri)
+ // Into: lwz %rt, .L0$poff - .L0$pb(%ri)
+ // add %rd, %rt, %ri
++ // or into (if secure plt mode is on):
++ // addis r30, r30, .LTOC - .L0$pb@ha
++ // addi r30, r30, .LTOC - .L0$pb@l
+ // Get the offset from the GOT Base Register to the GOT
+ LowerPPCMachineInstrToMCInst(MI, TmpInst, *this, isDarwin);
+- MCSymbol *PICOffset =
+- MF->getInfo<PPCFunctionInfo>()->getPICOffsetSymbol();
+- TmpInst.setOpcode(PPC::LWZ);
+- const MCExpr *Exp =
+- MCSymbolRefExpr::create(PICOffset, MCSymbolRefExpr::VK_None, OutContext);
+- const MCExpr *PB =
+- MCSymbolRefExpr::create(MF->getPICBaseSymbol(),
+- MCSymbolRefExpr::VK_None,
+- OutContext);
+- const MCOperand TR = TmpInst.getOperand(1);
+- const MCOperand PICR = TmpInst.getOperand(0);
++ if (Subtarget->isSecurePlt() && isPositionIndependent() ) {
++ unsigned PICR = TmpInst.getOperand(0).getReg();
++ MCSymbol *LTOCSymbol = OutContext.getOrCreateSymbol(StringRef(".LTOC"));
++ const MCExpr *PB =
++ MCSymbolRefExpr::create(MF->getPICBaseSymbol(),
++ OutContext);
+
+- // Step 1: lwz %rt, .L$poff - .L$pb(%ri)
+- TmpInst.getOperand(1) =
+- MCOperand::createExpr(MCBinaryExpr::createSub(Exp, PB, OutContext));
+- TmpInst.getOperand(0) = TR;
+- TmpInst.getOperand(2) = PICR;
+- EmitToStreamer(*OutStreamer, TmpInst);
++ const MCExpr *LTOCDeltaExpr =
++ MCBinaryExpr::createSub(MCSymbolRefExpr::create(LTOCSymbol, OutContext),
++ PB, OutContext);
+
+- TmpInst.setOpcode(PPC::ADD4);
+- TmpInst.getOperand(0) = PICR;
+- TmpInst.getOperand(1) = TR;
+- TmpInst.getOperand(2) = PICR;
+- EmitToStreamer(*OutStreamer, TmpInst);
+- return;
++ const MCExpr *LTOCDeltaHi =
++ PPCMCExpr::createHa(LTOCDeltaExpr, false, OutContext);
++ EmitToStreamer(*OutStreamer, MCInstBuilder(PPC::ADDIS)
++ .addReg(PICR)
++ .addReg(PICR)
++ .addExpr(LTOCDeltaHi));
++
++ const MCExpr *LTOCDeltaLo =
++ PPCMCExpr::createLo(LTOCDeltaExpr, false, OutContext);
++ EmitToStreamer(*OutStreamer, MCInstBuilder(PPC::ADDI)
++ .addReg(PICR)
++ .addReg(PICR)
++ .addExpr(LTOCDeltaLo));
++ return;
++ } else {
++ MCSymbol *PICOffset =
++ MF->getInfo<PPCFunctionInfo>()->getPICOffsetSymbol();
++ TmpInst.setOpcode(PPC::LWZ);
++ const MCExpr *Exp =
++ MCSymbolRefExpr::create(PICOffset, MCSymbolRefExpr::VK_None, OutContext);
++ const MCExpr *PB =
++ MCSymbolRefExpr::create(MF->getPICBaseSymbol(),
++ MCSymbolRefExpr::VK_None,
++ OutContext);
++ const MCOperand TR = TmpInst.getOperand(1);
++ const MCOperand PICR = TmpInst.getOperand(0);
++
++ // Step 1: lwz %rt, .L$poff - .L$pb(%ri)
++ TmpInst.getOperand(1) =
++ MCOperand::createExpr(MCBinaryExpr::createSub(Exp, PB, OutContext));
++ TmpInst.getOperand(0) = TR;
++ TmpInst.getOperand(2) = PICR;
++ EmitToStreamer(*OutStreamer, TmpInst);
++
++ TmpInst.setOpcode(PPC::ADD4);
++ TmpInst.getOperand(0) = PICR;
++ TmpInst.getOperand(1) = TR;
++ TmpInst.getOperand(2) = PICR;
++ EmitToStreamer(*OutStreamer, TmpInst);
++ return;
++ }
+ }
+ case PPC::LWZtoc: {
+ // Transform %r3 = LWZtoc @min1, %r2
+@@ -1233,7 +1263,7 @@
+
+ if (!Subtarget->isPPC64()) {
+ const PPCFunctionInfo *PPCFI = MF->getInfo<PPCFunctionInfo>();
+- if (PPCFI->usesPICBase()) {
++ if (PPCFI->usesPICBase() && !Subtarget->isSecurePlt()) {
+ MCSymbol *RelocSymbol = PPCFI->getPICOffsetSymbol();
+ MCSymbol *PICBase = MF->getPICBaseSymbol();
+ OutStreamer->EmitLabel(RelocSymbol);
+Index: llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
+===================================================================
+--- llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
++++ llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
+@@ -4001,6 +4001,27 @@
+ return;
+ break;
+
++ case PPCISD::CALL: {
++ const Module *M = MF->getFunction().getParent();
++
++ if (PPCLowering->getPointerTy(CurDAG->getDataLayout()) != MVT::i32 ||
++ !PPCSubTarget->isSecurePlt() || !PPCSubTarget->isTargetELF() ||
++ M->getPICLevel() == PICLevel::SmallPIC)
++ break;
++
++ SDValue Op = N->getOperand(1);
++
++ if (GlobalAddressSDNode *GA = dyn_cast<GlobalAddressSDNode>(Op)) {
++ if (GA->getTargetFlags() == PPCII::MO_PLT)
++ getGlobalBaseReg();
++ }
++ else if (ExternalSymbolSDNode *ES = dyn_cast<ExternalSymbolSDNode>(Op)) {
++ if (ES->getTargetFlags() == PPCII::MO_PLT)
++ getGlobalBaseReg();
++ }
++ }
++ break;
++
+ case PPCISD::GlobalBaseReg:
+ ReplaceNode(N, getGlobalBaseReg());
+ return;
+Index: llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
+===================================================================
+--- llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
++++ llvm/lib/Target/PowerPC/PPCMCInstLower.cpp
+@@ -107,10 +107,20 @@
+ break;
+ }
+
+- if (MO.getTargetFlags() == PPCII::MO_PLT)
++ if (MO.getTargetFlags() == PPCII::MO_PLT)
+ RefKind = MCSymbolRefExpr::VK_PLT;
+
++ const MachineFunction *MF = MO.getParent()->getParent()->getParent();
++ const PPCSubtarget *Subtarget = &(MF->getSubtarget<PPCSubtarget>());
++ const TargetMachine &TM = Printer.TM;
+ const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, RefKind, Ctx);
++ // -msecure-plt option works only in PIC mode. If secure plt mode
++ // is on add 32768 to symbol.
++ if (Subtarget->isSecurePlt() && TM.isPositionIndependent() &&
++ MO.getTargetFlags() == PPCII::MO_PLT)
++ Expr = MCBinaryExpr::createAdd(Expr,
++ MCConstantExpr::create(32768, Ctx),
++ Ctx);
+
+ if (!MO.isJTI() && MO.getOffset())
+ Expr = MCBinaryExpr::createAdd(Expr,
+Index: llvm/lib/Target/PowerPC/PPCSubtarget.h
+===================================================================
+--- llvm/lib/Target/PowerPC/PPCSubtarget.h
++++ llvm/lib/Target/PowerPC/PPCSubtarget.h
+@@ -133,6 +133,7 @@
+ bool HasFloat128;
+ bool IsISA3_0;
+ bool UseLongCalls;
++ bool SecurePlt;
+
+ POPCNTDKind HasPOPCNTD;
+
+@@ -255,6 +256,7 @@
+ bool hasOnlyMSYNC() const { return HasOnlyMSYNC; }
+ bool isPPC4xx() const { return IsPPC4xx; }
+ bool isPPC6xx() const { return IsPPC6xx; }
++ bool isSecurePlt() const {return SecurePlt; }
+ bool isE500() const { return IsE500; }
+ bool isFeatureMFTB() const { return FeatureMFTB; }
+ bool isDeprecatedDST() const { return DeprecatedDST; }
+Index: llvm/test/CodeGen/PowerPC/ppc32-pic-large.ll
+===================================================================
+--- llvm/test/CodeGen/PowerPC/ppc32-pic-large.ll
++++ llvm/test/CodeGen/PowerPC/ppc32-pic-large.ll
+@@ -1,4 +1,5 @@
+ ; RUN: llc < %s -mtriple=powerpc-unknown-linux-gnu -relocation-model=pic | FileCheck -check-prefix=LARGE-BSS %s
++; RUN: llc < %s -mtriple=powerpc-unknown-linux-gnu -mattr=+secure-plt -relocation-model=pic | FileCheck -check-prefix=LARGE-SECUREPLT %s
+ @bar = common global i32 0, align 4
+
+ declare i32 @call_foo(i32, ...)
+@@ -29,3 +30,6 @@
+ ; LARGE-BSS: [[VREF]]:
+ ; LARGE-BSS-NEXT: .p2align 2
+ ; LARGE-BSS-NEXT: .long bar
++; LARGE-SECUREPLT: addis 30, 30, .LTOC-.L0$pb@ha
++; LARGE-SECUREPLT: addi 30, 30, .LTOC-.L0$pb@l
++; LARGE-SECUREPLT: bl call_foo@PLT+32768
diff --git a/user/lua-lgi/APKBUILD b/user/lua-lgi/APKBUILD
new file mode 100644
index 000000000..f9b07ca3b
--- /dev/null
+++ b/user/lua-lgi/APKBUILD
@@ -0,0 +1,36 @@
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=lua-lgi
+pkgver=0.9.2
+pkgrel=0
+pkgdesc="Dynamic Lua binding to GObject libraries using GObject-Introspection"
+url="https://github.com/pavouk/lgi"
+arch="all"
+license="MIT"
+options="!check" # checks require dbus
+depends=""
+makedepends="glib-dev gobject-introspection-dev libffi-dev lua5.3-dev"
+subpackages="$pkgname-doc"
+source="lgi-$pkgver.tar.gz::https://github.com/pavouk/lgi/archive/$pkgver.tar.gz"
+builddir="$srcdir"/lgi-$pkgver
+
+build() {
+ cd "$builddir"
+ make PREFIX=/usr LUA_VERSION="5.3" \
+ LUA_CFLAGS="$(pkg-config --cflags lua)"
+}
+
+check() {
+ cd "$builddir"
+ make check
+}
+
+package() {
+ cd "$builddir"
+ make install PREFIX=/usr LUA_VERSION="5.3" DESTDIR="$pkgdir"
+
+ mkdir -p "$pkgdir"/usr/share/doc/lua-lgi
+ cp -r docs/* samples "$pkgdir"/usr/share/doc/lua-lgi/
+}
+
+sha512sums="755a96b78530f42da6d4e2664f8e37cb07a356419e7e6448003c3f841c9d98ad18b851715d9eb203ea7eb27b13ec46223fa8a1c90a99fd12960ce85b0a695335 lgi-0.9.2.tar.gz"
diff --git a/user/mdds/APKBUILD b/user/mdds/APKBUILD
index 9b930c8ae..c4a28fe12 100644
--- a/user/mdds/APKBUILD
+++ b/user/mdds/APKBUILD
@@ -1,8 +1,8 @@
# Contributor: Timo Teräs <timo.teras@iki.fi>
# Maintainer: Max Rees <maxcrees@me.com>
pkgname=mdds
-pkgver=1.4.1
-pkgrel=0
+pkgver=1.3.1
+pkgrel=1
pkgdesc="Multi-dimensional data index algorithms"
url="https://gitlab.com/mdds/mdds"
arch="noarch"
@@ -39,4 +39,4 @@ package() {
mv "$pkgdir"/usr/share/pkgconfig "$pkgdir"/usr/lib/
}
-sha512sums="3ad7cf821cd1a0a4b632c5d11cc3bd7bd6da2b14069e142e087dd81c1dfa817a961edbde1d59021a5bd4859eb252d8c461341070406b952a5b46b00eb7444384 mdds-1.4.1.tar.bz2"
+sha512sums="c7ed422c8e0bfb00debd43a12638efc6706d25f9aee0b7cfc15dc711693c4d555e262ae47ff00797c9601c12c0a7eced0f753b263b5f61623470f842814970a8 mdds-1.3.1.tar.bz2"
diff --git a/user/mesa-demos/APKBUILD b/user/mesa-demos/APKBUILD
new file mode 100644
index 000000000..f89083ae4
--- /dev/null
+++ b/user/mesa-demos/APKBUILD
@@ -0,0 +1,30 @@
+# Contributor: Carlo Landmeter <clandmeter@gmail.com>
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=mesa-demos
+pkgver=8.4.0
+pkgrel=0
+pkgdesc="Mesa demos and utils"
+url="http://mesa3d.org"
+arch="all"
+license="X11"
+options="!check" # No testsuite
+makedepends="mesa-dev glew-dev glu-dev freeglut-dev freetype-dev libtool"
+source="ftp://ftp.freedesktop.org/pub/mesa/demos/$pkgname-$pkgver.tar.bz2"
+
+build() {
+ cd "$builddir"
+ export LDFLAGS="$LDFLAGS -Wl,-z,lazy"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr
+ make V=1
+}
+
+package() {
+ cd "$builddir"
+ make -j1 DESTDIR="$pkgdir" install
+}
+
+sha512sums="b72d03cad36e0535ff18dcfb222ec4200064b9264f6da51a6e5f03b0dd912abe188bc1d600b6698de3ce6f63b28d2ce01565886ca8e7079edc4967fbf2fb0957 mesa-demos-8.4.0.tar.bz2"
diff --git a/user/minicom/APKBUILD b/user/minicom/APKBUILD
new file mode 100644
index 000000000..d597290e8
--- /dev/null
+++ b/user/minicom/APKBUILD
@@ -0,0 +1,39 @@
+# Contributor: Michael Mason <ms13sp@gmail.com>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=minicom
+pkgver=2.7.1
+pkgrel=0
+pkgdesc="menu driven communications program for terminals"
+url="https://fossies.org/linux/minicom/"
+arch="all"
+license="GPL-2.0+"
+depends=""
+makedepends="ncurses-dev gettext-tiny-dev linux-headers"
+subpackages="$pkgname-doc $pkgname-lang"
+source="https://fossies.org/linux/misc/$pkgname-$pkgver.tar.gz
+ fix-includes.patch"
+
+build() {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info
+ make
+}
+
+check() {
+ cd "$builddir"
+ make check
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+sha512sums="b429b32d187c3ee915c5074a0d0f08b7e3951cb8528ecbdd889837ff301662c16740ad77bd2bf3baf759c0a84e779a8dc8fd888a4260a0ace15ebc4c2f697c82 minicom-2.7.1.tar.gz
+5acff3efb0b8b02333291722044d7c473bf19eec8a26e66c0e0f41895f3e3f071dff13515ec20f7ce17368732e3674f0a42b38602e61b04e9cd70e61012641ff fix-includes.patch"
diff --git a/user/minicom/fix-includes.patch b/user/minicom/fix-includes.patch
new file mode 100644
index 000000000..19a18dcdb
--- /dev/null
+++ b/user/minicom/fix-includes.patch
@@ -0,0 +1,24 @@
+--- minicom-2.6.2.orig/src/dial.c
++++ minicom-2.6.2/src/dial.c
+@@ -39,11 +39,9 @@
+ #include "intl.h"
+
+ #ifdef VC_MUSIC
+-# if defined(__GLIBC__)
+ # include <sys/ioctl.h>
+ # include <sys/kd.h>
+ # include <sys/time.h>
+-# endif
+ #endif
+
+ enum { CURRENT_VERSION = 6 };
+--- minicom-2.6.2.orig/src/getsdir.h
++++ minicom-2.6.2/src/getsdir.h
+@@ -22,6 +22,7 @@
+ * and licensing conditions. See the source, Luke.
+ */
+
++#include <sys/param.h>
+ #include <dirent.h>
+
+ typedef struct dirEntry { /* structure of data item */
diff --git a/user/mosh/APKBUILD b/user/mosh/APKBUILD
new file mode 100644
index 000000000..323891e69
--- /dev/null
+++ b/user/mosh/APKBUILD
@@ -0,0 +1,78 @@
+# Contributor: Francesco Colista <fcolista@alpinelinux.org>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=mosh
+pkgver=1.3.2
+pkgrel=0
+pkgdesc="Mobile shell surviving disconnects with local echo and line editing"
+url="https://mosh.org"
+arch="all"
+license="GPL-3.0+"
+depends="$pkgname-client $pkgname-server"
+checkdepends="tmux perl"
+makedepends="ncurses-dev zlib-dev openssl-dev perl-dev perl-io-tty
+ protobuf-dev automake autoconf libtool gzip"
+subpackages="$pkgname-doc $pkgname-client $pkgname-server
+ $pkgname-bash-completion:bashcomp:noarch"
+source="https://mosh.org/$pkgname-$pkgver.tar.gz
+ fix-ppc64le-build-with-musl.patch"
+
+prepare() {
+ default_prepare
+ # Test unicode-later-combining is failing. Ideally we want to fix it.
+ sed -i '/unicode-later-combining.test/d' "$builddir"/src/tests/Makefile.am
+ cd "$builddir"
+ ./autogen.sh
+}
+
+build() {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var \
+ --enable-examples
+ make
+}
+
+check() {
+ cd "$builddir"
+ make check VERBOSE=1 V=1
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+bashcomp() {
+ depends=""
+ pkgdesc="Bash completions for $pkgname"
+ install_if="$pkgname=$pkgver-r$pkgrel bash-completion"
+
+ install -Dm644 "$builddir"/conf/bash-completion/completions/mosh \
+ "$subpkgdir"/usr/share/bash-completion/completions/$pkgname
+}
+
+server() {
+ replaces="mosh"
+ pkgdesc="Mosh server"
+ depends=""
+ mkdir -p "$subpkgdir"/usr/bin
+ mv "$pkgdir"/usr/bin/mosh-server \
+ "$subpkgdir"/usr/bin/
+}
+
+client() {
+ replaces="mosh"
+ pkgdesc="Mosh client"
+ depends="openssh-client perl-io-tty"
+ mkdir -p "$subpkgdir"/usr/bin
+ mv "$pkgdir"/usr/bin/mosh-client \
+ "$subpkgdir"/usr/bin/
+}
+
+sha512sums="f400e8fe7ba2ab7362311fc12a00ec69587505f901988aeee500fc68d38a388218500a3f602111c883ff23a9d43572114fcf0a8bf505df203691e5b597615769 mosh-1.3.2.tar.gz
+a276dde98a2dab63ad9c9c05468c55983a95f482878c5694713810b561eae1ea5618efc72431a17ee5b5014b12ee9709c6a8cbf582620294e7888cc837cd073c fix-ppc64le-build-with-musl.patch"
diff --git a/user/mosh/fix-ppc64le-build-with-musl.patch b/user/mosh/fix-ppc64le-build-with-musl.patch
new file mode 100644
index 000000000..8d918a963
--- /dev/null
+++ b/user/mosh/fix-ppc64le-build-with-musl.patch
@@ -0,0 +1,53 @@
+From: Roberto Oliveira <robertoguimaraes8@gmail.com>
+Date: Tue, 4 Apr 2017 16:46:50 +0000
+Subject: [PATCH] Fix build with musl on ppc64le
+
+mosh was breaking when building in ppc64le using musl, because ioctl() is defined
+as ioctl(int, int) in musl and mosh is using TIOCSWINSZ macro as parameter. This was
+triggering a gcc warning and make the build fail.
+
+This patch does an explicit integer conversion in TIOCSWINSZ, as no bits get
+lost.
+
+--- a/src/frontend/mosh-server.cc
++++ b/src/frontend/mosh-server.cc
+@@ -714,7 +714,12 @@
+ }
+ window_size.ws_col = res->width;
+ window_size.ws_row = res->height;
+- if ( ioctl( host_fd, TIOCSWINSZ, &window_size ) < 0 ) {
++
++ #if defined(__powerpc64__) && (!defined(__GLIBC__) && !defined(__UCLIBC__))
++ if ( ioctl( host_fd, (int) TIOCSWINSZ, &window_size ) < 0 ) {
++ #else
++ if ( ioctl( host_fd, TIOCSWINSZ, &window_size ) < 0 ) {
++ #endif
+ perror( "ioctl TIOCSWINSZ" );
+ network.start_shutdown();
+ }
+--- a/src/examples/termemu.cc
++++ a/src/examples/termemu.cc
+@@ -226,7 +226,11 @@
+ }
+
+ /* tell child process */
++ #if defined(__powerpc64__) && (!defined(__GLIBC__) && !defined(__UCLIBC__))
++ if ( ioctl( fd, (int) TIOCSWINSZ, &window_size ) < 0 ) {
++ #else
+ if ( ioctl( fd, TIOCSWINSZ, &window_size ) < 0 ) {
++ #endif
+ perror( "ioctl TIOCSWINSZ" );
+ return;
+ }
+@@ -306,7 +310,11 @@
+ complete.act( &r );
+
+ /* tell child process */
++ #if defined(__powerpc64__) && (!defined(__GLIBC__) && !defined(__UCLIBC__))
++ if ( ioctl( fd, (int) TIOCSWINSZ, &window_size ) < 0 ) {
++ #else
+ if ( ioctl( fd, TIOCSWINSZ, &window_size ) < 0 ) {
++ #endif
+ perror( "ioctl TIOCSWINSZ" );
+ return;
+ }
diff --git a/user/mpv/APKBUILD b/user/mpv/APKBUILD
index d0a4e37b1..a579ecc5a 100644
--- a/user/mpv/APKBUILD
+++ b/user/mpv/APKBUILD
@@ -1,7 +1,7 @@
# Contributor: Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com>
# Maintainer: Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com>
pkgname=mpv
-pkgver=0.29.0
+pkgver=0.29.1
pkgrel=0
pkgdesc="An improved fork of mplayer"
url="https://mpv.io"
@@ -21,7 +21,6 @@ makedepends="python3
"
subpackages="$pkgname-doc"
source="mpv-$pkgver.tar.gz::https://github.com/mpv-player/mpv/archive/v$pkgver.tar.gz"
-sha512sums="77204218bd217ae1da4812b09e0509965a3ef102d3de5cd4360f007ccf3779e4cbde5cfd6adae9629ea39062bd365e847429bdf7f9a1ddebd0a67d267492b221 mpv-0.29.0.tar.gz"
build() {
cd "$builddir"
@@ -46,3 +45,4 @@ package() {
python3 ./waf install --destdir="$pkgdir"
}
+sha512sums="ec57c9ceaaf2915ee237dd5a1c5ea5d22725d8611e28a9b998e5bb0d8ab5bdf3631d0267fc7b54da31cb1eaa145ef35841e68846bd41c3b9e1024902e92fd086 mpv-0.29.1.tar.gz"
diff --git a/user/nano/APKBUILD b/user/nano/APKBUILD
index 830d07377..45583d16a 100644
--- a/user/nano/APKBUILD
+++ b/user/nano/APKBUILD
@@ -1,7 +1,7 @@
# Contributor: Michael Mason <ms13sp@gmail.com>
-# Maintainer:
+# Maintainer: Dan Theisen <djt@hxx.in>
pkgname=nano
-pkgver=3.0
+pkgver=3.1
pkgrel=0
pkgdesc="Enhanced clone of the Pico text editor"
url="https://www.nano-editor.org"
@@ -44,4 +44,4 @@ package() {
rm -rf "$pkgdir"/usr/lib/charset.alias
}
-sha512sums="120b606d65672a905e9ef9f3b55381cc62b7929abeaf409ea4af6be9f51b3d038e6e68f082755cbb7e198f0fb5203e0f4796c6c96ebd054d9a2241b313fcdda1 nano-3.0.tar.xz"
+sha512sums="dc50381a129fec32d85982d8129324268e3e27a28c5b958fb7bcfca690646bd0a3b995dc456971355b91952c0ac3ea3e0a873b228010238a76e8dbb0ddaf1143 nano-3.1.tar.xz"
diff --git a/user/ncftp/APKBUILD b/user/ncftp/APKBUILD
new file mode 100644
index 000000000..1a9b5fce4
--- /dev/null
+++ b/user/ncftp/APKBUILD
@@ -0,0 +1,46 @@
+# Contributor: Carlo Landmeter <clandmeter@gmail.com>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=ncftp
+pkgver=3.2.6
+pkgrel=0
+pkgdesc="A set of free application programs implementing FTP"
+url="http://www.ncftp.com/"
+arch="all"
+options="!check" # No test suite.
+license="ClArtistic"
+makedepends="ncurses-dev"
+source="ftp://ftp.ncftp.com/ncftp/$pkgname-$pkgver-src.tar.gz"
+subpackages="$pkgname-doc $pkgname-bookmarks"
+
+build () {
+ cd "$builddir"
+
+ LIBS="-ltinfo" ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man
+
+ cd "$builddir"/libncftp
+ make shared
+ cd "$builddir"
+ make
+}
+
+package() {
+ cd "$builddir"/libncftp
+ make PREFIX="${pkgdir}"/usr soinstall
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ install -D doc/LICENSE.txt \
+ "$pkgdir"/usr/share/licenses/"$pkgname"/LICENSE
+}
+
+bookmarks () {
+ mkdir -p "$subpkgdir"/usr/bin
+ mv "$pkgdir"/usr/bin/ncftpbookmarks \
+ "$subpkgdir"/usr/bin/
+}
+
+sha512sums="a2f8ac555bee8af4be1aa745ce5838beee99cd2253c1fe701b710ec135d7c47e2bf8b22ec928975ec2460919977d45a07fb12185ab58a2e96e3092039ffd3303 ncftp-3.2.6-src.tar.gz"
diff --git a/user/nextcloud-client/APKBUILD b/user/nextcloud-client/APKBUILD
new file mode 100644
index 000000000..c842eaa18
--- /dev/null
+++ b/user/nextcloud-client/APKBUILD
@@ -0,0 +1,45 @@
+# Contributor: Leonardo Arena <rnalrd@alpinelinux.org>
+# Maintainer: Max Rees <maxcrees@me.com>
+pkgname=nextcloud-client
+pkgver=2.5.0_beta2
+_ver="${pkgver%_beta2}-beta2"
+pkgrel=0
+pkgdesc="Nextcloud desktop client"
+url="https://github.com/nextcloud/desktop"
+arch="all"
+license="GPL-2.0+ AND LGPL-2.1+ AND Public-Domain AND MIT AND (Custom:Digia-Qt OR LGPL-2.1-only WITH Qt-LGPL-exception-1.1) AND (Custom:Digia-Qt OR LGPL-2.1-only WITH Qt-LGPL-exception-1.1 OR GPL-3.0-only)"
+depends=""
+makedepends="cmake qt5-qttools-dev qtkeychain-dev zlib-dev
+ openssl-dev sqlite-dev qt5-qtsvg-dev"
+subpackages="$pkgname-dev"
+source="$pkgname-$pkgver.tar.gz::https://github.com/nextcloud/desktop/archive/v$_ver.tar.gz
+ no-webengine.patch
+ openssl.patch"
+builddir="$srcdir/desktop-$_ver"
+
+build() {
+ cd "$builddir"
+ cmake \
+ -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+ -DCMAKE_INSTALL_LIBDIR=lib \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_SYSCONFDIR="/etc/$pkgname" \
+ -DNO_SHIBBOLETH=1 \
+ -DWITH_CRASHREPORTER=bool:OFF \
+ -DUNIT_TESTING=bool:ON
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+sha512sums="ed5ec8c0fd79d3f7f843ef1aefb9b94088b85dacca442388bc9a42e1ddbf1ee90482595135ffaffc85e40d223406964c903949ca1c2161fa0f6a2d6770a77cea nextcloud-client-2.5.0_beta2.tar.gz
+6bd83fdee02eabe7ae29fb1a677f62d4a416ec553a0f8c66b7544cafb9201dd7d8b04dc6fb21f447f6c1ece13b06f5d3cba57ac71b211e166607ef15350b3e57 no-webengine.patch
+e323a1074f8ac96667a420f076fdfc988e2fd97cdacd05d83ac54b467b567f5adbf635e7c4fb0414af0012b4016cc4c13441cb35ed3976bc970e514e81b65fd4 openssl.patch"
diff --git a/user/nextcloud-client/no-webengine.patch b/user/nextcloud-client/no-webengine.patch
new file mode 100644
index 000000000..d5beed35c
--- /dev/null
+++ b/user/nextcloud-client/no-webengine.patch
@@ -0,0 +1,1017 @@
+--- desktop-2.5.0-beta1/src/libsync/networkjobs.cpp 2018-08-02 16:32:56.000000000 -0400
++++ desktop-2.5.0-beta1/src/libsync/networkjobs.cpp 2018-08-15 19:10:43.340595365 -0400
+@@ -922,7 +922,7 @@
+
+ // WebViewFlow > OAuth > Shib > Basic
+ if (_account->serverVersionInt() >= Account::makeServerVersion(12, 0, 0)) {
+- result = WebViewFlow;
++ result = Basic;
+ }
+
+ qCInfo(lcDetermineAuthTypeJob) << "Auth type for" << _account->davUrl() << "is" << result;
+--- desktop-2.5.0-beta1/src/gui/creds/webflowcredentialsdialog.cpp 2018-08-02 16:32:56.000000000 -0400
++++ /dev/null 2018-08-15 19:12:03.420596798 -0400
+@@ -1,49 +0,0 @@
+-#include "webflowcredentialsdialog.h"
+-
+-#include <QVBoxLayout>
+-#include <QLabel>
+-
+-#include "wizard/webview.h"
+-
+-namespace OCC {
+-
+-WebFlowCredentialsDialog::WebFlowCredentialsDialog(QWidget *parent)
+- : QDialog(parent)
+-{
+- _layout = new QVBoxLayout(this);
+-
+- //QString msg = tr("You have been logged out of %1 as user %2, please login again")
+- // .arg(_account->displayName(), _user);
+- _infoLabel = new QLabel();
+- _layout->addWidget(_infoLabel);
+-
+- _webView = new WebView();
+- _layout->addWidget(_webView);
+-
+- _errorLabel = new QLabel();
+- _errorLabel->hide();
+- _layout->addWidget(_errorLabel);
+-
+- setLayout(_layout);
+-
+- connect(_webView, &WebView::urlCatched, this, &WebFlowCredentialsDialog::urlCatched);
+-}
+-
+-void WebFlowCredentialsDialog::setUrl(const QUrl &url) {
+- _webView->setUrl(url);
+-}
+-
+-void WebFlowCredentialsDialog::setInfo(const QString &msg) {
+- _infoLabel->setText(msg);
+-}
+-
+-void WebFlowCredentialsDialog::setError(const QString &error) {
+- if (error.isEmpty()) {
+- _errorLabel->hide();
+- } else {
+- _errorLabel->setText(error);
+- _errorLabel->show();
+- }
+-}
+-
+-}
+--- desktop-2.5.0-beta1/src/gui/creds/webflowcredentials.cpp 2018-08-02 16:32:56.000000000 -0400
++++ /dev/null 2018-08-15 19:12:03.420596798 -0400
+@@ -1,258 +0,0 @@
+-#include "webflowcredentials.h"
+-
+-#include "creds/httpcredentials.h"
+-
+-#include <QAuthenticator>
+-#include <QNetworkAccessManager>
+-#include <QNetworkReply>
+-#include <QPointer>
+-#include <QTimer>
+-#include <keychain.h>
+-#include <QDialog>
+-#include <QVBoxLayout>
+-#include <QLabel>
+-
+-#include "accessmanager.h"
+-#include "account.h"
+-#include "theme.h"
+-#include "wizard/webview.h"
+-#include "webflowcredentialsdialog.h"
+-
+-using namespace QKeychain;
+-
+-namespace OCC {
+-
+-Q_LOGGING_CATEGORY(lcWebFlowCredentials, "sync.credentials.webflow", QtInfoMsg)
+-
+-WebFlowCredentials::WebFlowCredentials()
+- : _ready(false),
+- _credentialsValid(false)
+-{
+-
+-}
+-
+-WebFlowCredentials::WebFlowCredentials(const QString &user, const QString &password, const QSslCertificate &certificate, const QSslKey &key)
+- : _user(user)
+- , _password(password)
+- , _clientSslKey(key)
+- , _clientSslCertificate(certificate)
+- , _ready(true)
+- , _credentialsValid(true)
+-{
+-
+-}
+-
+-QString WebFlowCredentials::authType() const {
+- return QString::fromLatin1("webflow");
+-}
+-
+-QString WebFlowCredentials::user() const {
+- return _user;
+-}
+-
+-QString WebFlowCredentials::password() const {
+- return _password;
+-}
+-
+-QNetworkAccessManager *WebFlowCredentials::createQNAM() const {
+- qCInfo(lcWebFlowCredentials()) << "Get QNAM";
+- AccessManager *qnam = new AccessManager();
+-
+- connect(qnam, &AccessManager::authenticationRequired, this, &WebFlowCredentials::slotAuthentication);
+- connect(qnam, &AccessManager::finished, this, &WebFlowCredentials::slotFinished);
+-
+- return qnam;
+-}
+-
+-bool WebFlowCredentials::ready() const {
+- return _ready;
+-}
+-
+-void WebFlowCredentials::fetchFromKeychain() {
+- _wasFetched = true;
+-
+- // Make sure we get the user fromt he config file
+- fetchUser();
+-
+- if (ready()) {
+- emit fetched();
+- } else {
+- qCInfo(lcWebFlowCredentials()) << "Fetch from keyhchain!";
+- fetchFromKeychainHelper();
+- }
+-}
+-
+-void WebFlowCredentials::askFromUser() {
+- _askDialog = new WebFlowCredentialsDialog();
+-
+- QUrl url = _account->url();
+- QString path = url.path() + "/index.php/login/flow";
+- url.setPath(path);
+- _askDialog->setUrl(url);
+-
+- QString msg = tr("You have been logged out of %1 as user %2. Please login again")
+- .arg(_account->displayName(), _user);
+- _askDialog->setInfo(msg);
+-
+- _askDialog->show();
+-
+- connect(_askDialog, &WebFlowCredentialsDialog::urlCatched, this, &WebFlowCredentials::slotAskFromUserCredentialsProvided);
+-
+- qCWarning(lcWebFlowCredentials()) << "User needs to reauth!";
+-}
+-
+-void WebFlowCredentials::slotAskFromUserCredentialsProvided(const QString &user, const QString &pass, const QString &host) {
+- Q_UNUSED(host);
+-
+- if (_user != user) {
+- qCInfo(lcWebFlowCredentials()) << "Authed with the wrong user!";
+-
+- QString msg = tr("Please login with the user: %1")
+- .arg(_user);
+- _askDialog->setError(msg);
+-
+- QUrl url = _account->url();
+- QString path = url.path() + "/index.php/login/flow";
+- url.setPath(path);
+- _askDialog->setUrl(url);
+-
+- return;
+- }
+-
+- qCInfo(lcWebFlowCredentials()) << "Obtained a new password";
+-
+- _password = pass;
+- _ready = true;
+- _credentialsValid = true;
+- persist();
+- emit asked();
+-
+- _askDialog->close();
+- delete _askDialog;
+- _askDialog = NULL;
+-}
+-
+-
+-bool WebFlowCredentials::stillValid(QNetworkReply *reply) {
+- qCWarning(lcWebFlowCredentials()) << "Still valid?";
+- qCWarning(lcWebFlowCredentials()) << reply->error();
+- qCWarning(lcWebFlowCredentials()) << reply->errorString();
+- return (reply->error() != QNetworkReply::AuthenticationRequiredError);
+-}
+-
+-void WebFlowCredentials::persist() {
+- if (_user.isEmpty()) {
+- // We don't even have a user nothing to see here move along
+- return;
+- }
+-
+- _account->setCredentialSetting("user", _user);
+- _account->wantsAccountSaved(_account);
+-
+- //TODO: Add ssl cert and key storing
+- WritePasswordJob *job = new WritePasswordJob(Theme::instance()->appName());
+- job->setInsecureFallback(false);
+- job->setKey(keychainKey(_account->url().toString(), _user, _account->id()));
+- job->setTextData(_password);
+- job->start();
+-}
+-
+-void WebFlowCredentials::invalidateToken() {
+- // clear the session cookie.
+- _account->clearCookieJar();
+-
+- // let QNAM forget about the password
+- // This needs to be done later in the event loop because we might be called (directly or
+- // indirectly) from QNetworkAccessManagerPrivate::authenticationRequired, which itself
+- // is a called from a BlockingQueuedConnection from the Qt HTTP thread. And clearing the
+- // cache needs to synchronize again with the HTTP thread.
+- QTimer::singleShot(0, _account, &Account::clearQNAMCache);
+-}
+-
+-void WebFlowCredentials::forgetSensitiveData(){
+- _password = QString();
+- _ready = false;
+-
+- fetchUser();
+-
+- const QString kck = keychainKey(_account->url().toString(), _user, _account->id());
+- if (kck.isEmpty()) {
+- qCWarning(lcWebFlowCredentials()) << "InvalidateToken: User is empty, bailing out!";
+- return;
+- }
+-
+- DeletePasswordJob *job = new DeletePasswordJob(Theme::instance()->appName());
+- job->setInsecureFallback(false);
+- job->setKey(kck);
+- job->start();
+-
+- invalidateToken();
+-}
+-
+-void WebFlowCredentials::setAccount(Account *account) {
+- AbstractCredentials::setAccount(account);
+- if (_user.isEmpty()) {
+- fetchUser();
+- }
+-}
+-
+-QString WebFlowCredentials::fetchUser() {
+- _user = _account->credentialSetting("user").toString();
+- return _user;
+-}
+-
+-void WebFlowCredentials::slotAuthentication(QNetworkReply *reply, QAuthenticator *authenticator) {
+- Q_UNUSED(reply);
+-
+- if (!_ready) {
+- return;
+- }
+-
+- if (_credentialsValid == false) {
+- return;
+- }
+-
+- qCWarning(lcWebFlowCredentials()) << "Requires authentication";
+-
+- authenticator->setUser(_user);
+- authenticator->setPassword(_password);
+- _credentialsValid = false;
+-}
+-
+-void WebFlowCredentials::slotFinished(QNetworkReply *reply) {
+- qCInfo(lcWebFlowCredentials()) << "request finished";
+-
+- if (reply->error() == QNetworkReply::NoError) {
+- _credentialsValid = true;
+- }
+-}
+-
+-void WebFlowCredentials::fetchFromKeychainHelper() {
+- const QString kck = keychainKey(
+- _account->url().toString(),
+- _user,
+- _account->id());
+-
+- ReadPasswordJob *job = new ReadPasswordJob(Theme::instance()->appName());
+- job->setInsecureFallback(false);
+- job->setKey(kck);
+- connect(job, &Job::finished, this, &WebFlowCredentials::slotReadPasswordJobDone);
+- job->start();
+-}
+-
+-void WebFlowCredentials::slotReadPasswordJobDone(Job *incomingJob) {
+- QKeychain::ReadPasswordJob *job = static_cast<ReadPasswordJob *>(incomingJob);
+- QKeychain::Error error = job->error();
+-
+- if (error == QKeychain::NoError) {
+- _password = job->textData();
+- _ready = true;
+- _credentialsValid = true;
+- } else {
+- _ready = false;
+- }
+-
+- emit fetched();
+-}
+-
+-}
+--- desktop-2.5.0-beta1/src/gui/creds/webflowcredentialsdialog.h 2018-08-02 16:32:56.000000000 -0400
++++ /dev/null 2018-08-15 19:12:03.420596798 -0400
+@@ -1,36 +0,0 @@
+-#ifndef WEBFLOWCREDENTIALSDIALOG_H
+-#define WEBFLOWCREDENTIALSDIALOG_H
+-
+-#include <QDialog>
+-#include <QUrl>
+-
+-class QLabel;
+-class QVBoxLayout;
+-
+-namespace OCC {
+-
+-class WebView;
+-
+-class WebFlowCredentialsDialog : public QDialog
+-{
+- Q_OBJECT
+-public:
+- WebFlowCredentialsDialog(QWidget *parent = 0);
+-
+- void setUrl(const QUrl &url);
+- void setInfo(const QString &msg);
+- void setError(const QString &error);
+-
+-signals:
+- void urlCatched(const QString user, const QString pass, const QString host);
+-
+-private:
+- WebView *_webView;
+- QLabel *_errorLabel;
+- QLabel *_infoLabel;
+- QVBoxLayout *_layout;
+-};
+-
+-}
+-
+-#endif // WEBFLOWCREDENTIALSDIALOG_H
+--- desktop-2.5.0-beta1/src/gui/creds/credentialsfactory.cpp 2018-08-02 16:32:56.000000000 -0400
++++ desktop-2.5.0-beta1/src/gui/creds/credentialsfactory.cpp 2018-08-15 19:29:27.240615471 -0400
+@@ -21,7 +21,6 @@
+ #ifndef NO_SHIBBOLETH
+ #include "creds/shibbolethcredentials.h"
+ #endif
+-#include "creds/webflowcredentials.h"
+
+ namespace OCC {
+
+@@ -40,8 +39,6 @@
+ } else if (type == "shibboleth") {
+ return new ShibbolethCredentials;
+ #endif
+- } else if (type == "webflow") {
+- return new WebFlowCredentials;
+ } else {
+ qCWarning(lcGuiCredentials, "Unknown credentials type: %s", qPrintable(type));
+ return new DummyCredentials;
+--- desktop-2.5.0-beta1/src/gui/creds/webflowcredentials.h 2018-08-02 16:32:56.000000000 -0400
++++ /dev/null 2018-08-15 19:12:03.420596798 -0400
+@@ -1,79 +0,0 @@
+-#ifndef WEBFLOWCREDENTIALS_H
+-#define WEBFLOWCREDENTIALS_H
+-
+-#include <QSslCertificate>
+-#include <QSslKey>
+-
+-#include "creds/abstractcredentials.h"
+-
+-class QDialog;
+-class QLabel;
+-class QNetworkReply;
+-class QAuthenticator;
+-
+-namespace QKeychain {
+- class Job;
+-}
+-
+-namespace OCC {
+-
+-class WebFlowCredentialsDialog;
+-
+-class WebFlowCredentials : public AbstractCredentials
+-{
+- Q_OBJECT
+-public:
+- explicit WebFlowCredentials();
+- WebFlowCredentials(const QString &user, const QString &password, const QSslCertificate &certificate = QSslCertificate(), const QSslKey &key = QSslKey());
+-
+- QString authType() const override;
+- QString user() const override;
+- QString password() const;
+- QNetworkAccessManager *createQNAM() const override;
+-
+- bool ready() const override;
+-
+- void fetchFromKeychain() override;
+- void askFromUser() override;
+-
+- bool stillValid(QNetworkReply *reply) override;
+- void persist() override;
+- void invalidateToken() override;
+- void forgetSensitiveData() override;
+-
+- // To fetch the user name as early as possible
+- void setAccount(Account *account) override;
+-
+-private slots:
+- void slotAuthentication(QNetworkReply *reply, QAuthenticator *authenticator);
+- void slotFinished(QNetworkReply *reply);
+-
+- void slotReadPasswordJobDone(QKeychain::Job *incomingJob);
+- void slotAskFromUserCredentialsProvided(const QString &user, const QString &pass, const QString &host);
+-
+-private:
+- /** Reads data from keychain locations
+- *
+- * Goes through
+- * slotReadClientCertPEMJobDone to
+- * slotReadClientCertPEMJobDone to
+- * slotReadJobDone
+- */
+- void fetchFromKeychainHelper();
+-
+- QString fetchUser();
+-
+- QString _user;
+- QString _password;
+- QSslKey _clientSslKey;
+- QSslCertificate _clientSslCertificate;
+-
+- bool _ready;
+- bool _credentialsValid;
+-
+- WebFlowCredentialsDialog *_askDialog;
+-};
+-
+-}
+-
+-#endif // WEBFLOWCREDENTIALS_H
+--- desktop-2.5.0-beta1/src/gui/CMakeLists.txt 2018-08-02 16:32:56.000000000 -0400
++++ desktop-2.5.0-beta1/src/gui/CMakeLists.txt 2018-08-15 19:28:53.640614870 -0400
+@@ -41,7 +41,6 @@
+ wizard/owncloudoauthcredspage.ui
+ wizard/owncloudsetupnocredspage.ui
+ wizard/owncloudwizardresultpage.ui
+- wizard/webview.ui
+ )
+
+ set(client_SRCS
+@@ -104,8 +103,6 @@
+ creds/credentialsfactory.cpp
+ creds/httpcredentialsgui.cpp
+ creds/oauth.cpp
+- creds/webflowcredentials.cpp
+- creds/webflowcredentialsdialog.cpp
+ wizard/postfixlineedit.cpp
+ wizard/abstractcredswizardpage.cpp
+ wizard/owncloudadvancedsetuppage.cpp
+@@ -116,8 +113,6 @@
+ wizard/owncloudwizardcommon.cpp
+ wizard/owncloudwizard.cpp
+ wizard/owncloudwizardresultpage.cpp
+- wizard/webviewpage.cpp
+- wizard/webview.cpp
+ )
+
+ IF(NOT NO_SHIBBOLETH)
+@@ -290,7 +290,7 @@
+ endif()
+
+ add_library(updater STATIC ${updater_SRCS})
+-target_link_libraries(updater ${synclib_NAME} Qt5::Widgets Qt5::Network Qt5::Xml Qt5::WebEngineWidgets)
++target_link_libraries(updater ${synclib_NAME} Qt5::Widgets Qt5::Network Qt5::Xml)
+ target_include_directories(updater PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
+
+ set_target_properties( ${APPLICATION_EXECUTABLE} PROPERTIES
+--- desktop-2.5.0-beta2/src/gui/wizard/webview.cpp 2018-08-24 12:54:42.000000000 +0000
++++ /dev/null 2018-10-03 06:10:44.230254545 +0000
+@@ -1,162 +0,0 @@
+-#include "webview.h"
+-
+-#include <QWebEnginePage>
+-#include <QWebEngineProfile>
+-#include <QWebEngineUrlRequestInterceptor>
+-#include <QWebEngineUrlRequestJob>
+-#include <QWebEngineUrlSchemeHandler>
+-#include <QWebEngineView>
+-#include <QDesktopServices>
+-#include <QProgressBar>
+-#include <QLoggingCategory>
+-#include <QLocale>
+-
+-#include "common/utility.h"
+-
+-namespace OCC {
+-
+-Q_LOGGING_CATEGORY(lcWizardWebiew, "gui.wizard.webview", QtInfoMsg)
+-
+-
+-class WebViewPageUrlRequestInterceptor : public QWebEngineUrlRequestInterceptor
+-{
+- Q_OBJECT
+-public:
+- WebViewPageUrlRequestInterceptor(QObject *parent = 0);
+- void interceptRequest(QWebEngineUrlRequestInfo &info);
+-};
+-
+-class WebViewPageUrlSchemeHandler : public QWebEngineUrlSchemeHandler
+-{
+- Q_OBJECT
+-public:
+- WebViewPageUrlSchemeHandler(QObject *parent = 0);
+- void requestStarted(QWebEngineUrlRequestJob *request);
+-
+-Q_SIGNALS:
+- void urlCatched(QString user, QString pass, QString host);
+-};
+-
+-class WebEnginePage : public QWebEnginePage {
+-public:
+- WebEnginePage(QWebEngineProfile *profile, QObject* parent = nullptr);
+- QWebEnginePage * createWindow(QWebEnginePage::WebWindowType type) override;
+-};
+-
+-// We need a separate class here, since we cannot simply return the same WebEnginePage object
+-// this leads to a strage segfault somewhere deep inside of the QWebEngine code
+-class ExternalWebEnginePage : public QWebEnginePage {
+-public:
+- ExternalWebEnginePage(QWebEngineProfile *profile, QObject* parent = nullptr);
+- bool acceptNavigationRequest(const QUrl &url, QWebEnginePage::NavigationType type, bool isMainFrame) override;
+-};
+-
+-WebView::WebView(QWidget *parent)
+- : QWidget(parent),
+- _ui()
+-{
+- _ui.setupUi(this);
+-
+- _webview = new QWebEngineView(this);
+- _profile = new QWebEngineProfile(this);
+- _page = new WebEnginePage(_profile);
+- _interceptor = new WebViewPageUrlRequestInterceptor(this);
+- _schemeHandler = new WebViewPageUrlSchemeHandler(this);
+-
+- const QString userAgent(Utility::userAgentString());
+- _profile->setHttpUserAgent(userAgent);
+- QWebEngineProfile::defaultProfile()->setHttpUserAgent(userAgent);
+- _profile->setRequestInterceptor(_interceptor);
+- _profile->installUrlSchemeHandler("nc", _schemeHandler);
+-
+- /*
+- * Set a proper accept langauge to the language of the client
+- * code from: http://code.qt.io/cgit/qt/qtbase.git/tree/src/network/access/qhttpnetworkconnection.cpp
+- */
+- {
+- QString systemLocale = QLocale::system().name().replace(QChar::fromLatin1('_'),QChar::fromLatin1('-'));
+- QString acceptLanguage;
+- if (systemLocale == QLatin1String("C")) {
+- acceptLanguage = QString::fromLatin1("en,*");
+- } else if (systemLocale.startsWith(QLatin1String("en-"))) {
+- acceptLanguage = systemLocale + QLatin1String(",*");
+- } else {
+- acceptLanguage = systemLocale + QLatin1String(",en,*");
+- }
+- _profile->setHttpAcceptLanguage(acceptLanguage);
+- }
+-
+- _webview->setPage(_page);
+- _ui.verticalLayout->addWidget(_webview);
+-
+- connect(_webview, &QWebEngineView::loadProgress, _ui.progressBar, &QProgressBar::setValue);
+- connect(_schemeHandler, &WebViewPageUrlSchemeHandler::urlCatched, this, &WebView::urlCatched);
+-}
+-
+-void WebView::setUrl(const QUrl &url) {
+- _page->setUrl(url);
+-}
+-
+-WebViewPageUrlRequestInterceptor::WebViewPageUrlRequestInterceptor(QObject *parent)
+- : QWebEngineUrlRequestInterceptor(parent) {
+-
+-}
+-
+-void WebViewPageUrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &info) {
+- info.setHttpHeader("OCS-APIREQUEST", "true");
+-}
+-
+-WebViewPageUrlSchemeHandler::WebViewPageUrlSchemeHandler(QObject *parent)
+- : QWebEngineUrlSchemeHandler(parent) {
+-
+-}
+-
+-void WebViewPageUrlSchemeHandler::requestStarted(QWebEngineUrlRequestJob *request) {
+- QUrl url = request->requestUrl();
+-
+- QString path = url.path().mid(1);
+- QStringList parts = path.split("&");
+-
+- QString server;
+- QString user;
+- QString password;
+-
+- for (QString part : parts) {
+- if (part.startsWith("server:")) {
+- server = part.mid(7);
+- } else if (part.startsWith("user:")) {
+- user = part.mid(5);
+- } else if (part.startsWith("password:")) {
+- password = part.mid(9);
+- }
+- }
+-
+- qCInfo(lcWizardWebiew()) << "Got user: " << user << ", server: " << server;
+-
+- emit urlCatched(user, password, server);
+-}
+-
+-
+-WebEnginePage::WebEnginePage(QWebEngineProfile *profile, QObject* parent) : QWebEnginePage(profile, parent) {
+-
+-}
+-
+-QWebEnginePage * WebEnginePage::createWindow(QWebEnginePage::WebWindowType type) {
+- ExternalWebEnginePage *view = new ExternalWebEnginePage(this->profile());
+- return view;
+-}
+-
+-ExternalWebEnginePage::ExternalWebEnginePage(QWebEngineProfile *profile, QObject* parent) : QWebEnginePage(profile, parent) {
+-
+-}
+-
+-
+-bool ExternalWebEnginePage::acceptNavigationRequest(const QUrl &url, QWebEnginePage::NavigationType type, bool isMainFrame)
+-{
+- QDesktopServices::openUrl(url);
+- return false;
+-}
+-
+-}
+-
+-#include "webview.moc"
+--- desktop-2.5.0-beta1/src/gui/wizard/webviewpage.cpp 2018-08-02 16:32:56.000000000 -0400
++++ /dev/null 2018-08-15 19:06:30.250590838 -0400
+@@ -1,73 +0,0 @@
+-#include "webviewpage.h"
+-
+-#include <QWebEngineUrlRequestJob>
+-#include <QProgressBar>
+-#include <QVBoxLayout>
+-
+-#include "owncloudwizard.h"
+-#include "creds/webflowcredentials.h"
+-#include "webview.h"
+-#include "account.h"
+-
+-namespace OCC {
+-
+-Q_LOGGING_CATEGORY(lcWizardWebiewPage, "gui.wizard.webviewpage", QtInfoMsg)
+-
+-
+-WebViewPage::WebViewPage(QWidget *parent)
+- : AbstractCredentialsWizardPage()
+-{
+- _ocWizard = qobject_cast<OwncloudWizard *>(parent);
+-
+- qCInfo(lcWizardWebiewPage()) << "Time for a webview!";
+- _webView = new WebView(this);
+-
+- QVBoxLayout *layout = new QVBoxLayout(this);
+- layout->addWidget(_webView);
+- setLayout(layout);
+-
+- connect(_webView, &WebView::urlCatched, this, &WebViewPage::urlCatched);
+-}
+-
+-void WebViewPage::initializePage() {
+- QString url;
+- if (_ocWizard->registration()) {
+- url = "https://nextcloud.com/register";
+- } else {
+- url = _ocWizard->ocUrl();
+- url += "/index.php/login/flow";
+- }
+- qCInfo(lcWizardWebiewPage()) << "Url to auth at: " << url;
+- _webView->setUrl(QUrl(url));
+-}
+-
+-int WebViewPage::nextId() const {
+- return WizardCommon::Page_AdvancedSetup;
+-}
+-
+-bool WebViewPage::isComplete() const {
+- return false;
+-}
+-
+-AbstractCredentials* WebViewPage::getCredentials() const {
+- return new WebFlowCredentials(_user, _pass, _ocWizard->_clientSslCertificate, _ocWizard->_clientSslKey);
+-}
+-
+-void WebViewPage::setConnected() {
+- qCInfo(lcWizardWebiewPage()) << "YAY! we are connected!";
+-}
+-
+-void WebViewPage::urlCatched(QString user, QString pass, QString host) {
+- qCInfo(lcWizardWebiewPage()) << "Got user: " << user << ", server: " << host;
+-
+- _user = user;
+- _pass = pass;
+-
+- AccountPtr account = _ocWizard->account();
+- account->setUrl(host);
+-
+- qCInfo(lcWizardWebiewPage()) << "URL: " << field("OCUrl").toString();
+- emit connectToOCUrl(host);
+-}
+-
+-}
+--- desktop-2.5.0-beta2/src/gui/wizard/webview.h 2018-08-24 12:54:42.000000000 +0000
++++ /dev/null 2018-10-03 06:11:27.640255322 +0000
+@@ -1,42 +0,0 @@
+-#ifndef WEBVIEW_H
+-#define WEBVIEW_H
+-
+-#include <QUrl>
+-#include <QWidget>
+-
+-#include "ui_webview.h"
+-
+-class QWebEngineView;
+-class QWebEngineProfile;
+-class QWebEnginePage;
+-
+-namespace OCC {
+-
+-class WebViewPageUrlRequestInterceptor;
+-class WebViewPageUrlSchemeHandler;
+-class WebEnginePage;
+-
+-class WebView : public QWidget
+-{
+- Q_OBJECT
+-public:
+- WebView(QWidget *parent = 0);
+- void setUrl(const QUrl &url);
+-
+-signals:
+- void urlCatched(const QString user, const QString pass, const QString host);
+-
+-private:
+- Ui_WebView _ui;
+-
+- QWebEngineView *_webview;
+- QWebEngineProfile *_profile;
+- WebEnginePage *_page;
+-
+- WebViewPageUrlRequestInterceptor *_interceptor;
+- WebViewPageUrlSchemeHandler *_schemeHandler;
+-};
+-
+-}
+-
+-#endif // WEBVIEW_H
+--- desktop-2.5.0-beta1/src/gui/wizard/webviewpage.h 2018-08-02 16:32:56.000000000 -0400
++++ /dev/null 2018-08-15 19:25:56.010611692 -0400
+@@ -1,41 +0,0 @@
+-#ifndef WEBVIEWPAGE_H
+-#define WEBVIEWPAGE_H
+-
+-#include "wizard/abstractcredswizardpage.h"
+-
+-namespace OCC {
+-
+-class AbstractCredentials;
+-class OwncloudWizard;
+-class WebView;
+-
+-class WebViewPage : public AbstractCredentialsWizardPage
+-{
+- Q_OBJECT
+-public:
+- WebViewPage(QWidget *parent = 0);
+-
+- void initializePage() Q_DECL_OVERRIDE;
+- int nextId() const Q_DECL_OVERRIDE;
+- bool isComplete() const;
+-
+- AbstractCredentials* getCredentials() const;
+- void setConnected();
+-
+-signals:
+- void connectToOCUrl(const QString&);
+-
+-private slots:
+- void urlCatched(QString user, QString pass, QString host);
+-
+-private:
+- OwncloudWizard *_ocWizard;
+- WebView *_webView;
+-
+- QString _user;
+- QString _pass;
+-};
+-
+-}
+-
+-#endif // WEBVIEWPAGE_H
+--- desktop-2.5.0-beta1/src/gui/wizard/owncloudsetuppage.cpp 2018-08-02 16:32:56.000000000 -0400
++++ desktop-2.5.0-beta1/src/gui/wizard/owncloudsetuppage.cpp 2018-08-15 19:23:33.100609136 -0400
+@@ -161,7 +161,7 @@
+ void OwncloudSetupPage::slotGotoProviderList()
+ {
+ _ocWizard->setRegistration(true);
+- _ocWizard->setAuthType(DetermineAuthTypeJob::AuthType::WebViewFlow);
++ _ocWizard->setAuthType(DetermineAuthTypeJob::AuthType::Basic);
+ _authTypeKnown = true;
+ _checking = false;
+ emit completeChanged();
+@@ -278,8 +278,6 @@
+ return WizardCommon::Page_OAuthCreds;
+ case DetermineAuthTypeJob::Shibboleth:
+ return WizardCommon::Page_ShibbolethCreds;
+- case DetermineAuthTypeJob::WebViewFlow:
+- return WizardCommon::Page_WebView;
+ }
+ return WizardCommon::Page_HttpCreds;
+ }
+--- desktop-2.5.0-beta1/src/gui/wizard/webview.ui 2018-08-02 16:32:56.000000000 -0400
++++ /dev/null 2018-08-15 19:24:43.320610392 -0400
+@@ -1,80 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<ui version="4.0">
+- <class>WebView</class>
+- <widget class="QWidget" name="WebView">
+- <property name="geometry">
+- <rect>
+- <x>0</x>
+- <y>0</y>
+- <width>800</width>
+- <height>700</height>
+- </rect>
+- </property>
+- <property name="sizePolicy">
+- <sizepolicy hsizetype="Minimum" vsizetype="Maximum">
+- <horstretch>0</horstretch>
+- <verstretch>0</verstretch>
+- </sizepolicy>
+- </property>
+- <property name="minimumSize">
+- <size>
+- <width>800</width>
+- <height>650</height>
+- </size>
+- </property>
+- <property name="windowTitle">
+- <string>Form</string>
+- </property>
+- <layout class="QGridLayout" name="gridLayout">
+- <property name="leftMargin">
+- <number>0</number>
+- </property>
+- <property name="topMargin">
+- <number>0</number>
+- </property>
+- <property name="rightMargin">
+- <number>0</number>
+- </property>
+- <property name="bottomMargin">
+- <number>0</number>
+- </property>
+- <item row="1" column="0">
+- <layout class="QVBoxLayout" name="verticalLayout">
+- <property name="spacing">
+- <number>0</number>
+- </property>
+- <item>
+- <widget class="QProgressBar" name="progressBar">
+- <property name="maximumSize">
+- <size>
+- <width>16777215</width>
+- <height>5</height>
+- </size>
+- </property>
+- <property name="styleSheet">
+- <string notr="true">QProgressBar::chunk {
+- background-color: rgba(0, 130, 201, 255);
+-}</string>
+- </property>
+- <property name="value">
+- <number>0</number>
+- </property>
+- <property name="textVisible">
+- <bool>false</bool>
+- </property>
+- </widget>
+- </item>
+- <item>
+- <layout class="QHBoxLayout" name="resultLayout">
+- <property name="spacing">
+- <number>0</number>
+- </property>
+- </layout>
+- </item>
+- </layout>
+- </item>
+- </layout>
+- </widget>
+- <resources/>
+- <connections/>
+-</ui>
+--- desktop-2.5.0-beta1/src/gui/wizard/owncloudwizard.h 2018-08-02 16:32:56.000000000 -0400
++++ desktop-2.5.0-beta1/src/gui/wizard/owncloudwizard.h 2018-08-15 19:22:00.430607478 -0400
+@@ -39,7 +39,6 @@
+ class OwncloudWizardResultPage;
+ class AbstractCredentials;
+ class AbstractCredentialsWizardPage;
+-class WebViewPage;
+
+ /**
+ * @brief The OwncloudWizard class
+@@ -106,7 +105,6 @@
+ OwncloudAdvancedSetupPage *_advancedSetupPage;
+ OwncloudWizardResultPage *_resultPage;
+ AbstractCredentialsWizardPage *_credentialsPage;
+- WebViewPage *_webViewPage;
+
+ QStringList _setupLog;
+
+--- desktop-2.5.0-beta1/src/gui/wizard/owncloudwizard.cpp 2018-08-02 16:32:56.000000000 -0400
++++ desktop-2.5.0-beta1/src/gui/wizard/owncloudwizard.cpp 2018-08-15 19:04:35.670588788 -0400
+@@ -26,7 +26,6 @@
+ #endif
+ #include "wizard/owncloudadvancedsetuppage.h"
+ #include "wizard/owncloudwizardresultpage.h"
+-#include "wizard/webviewpage.h"
+
+ #include "QProgressIndicator.h"
+
+@@ -51,7 +50,6 @@
+ , _advancedSetupPage(new OwncloudAdvancedSetupPage)
+ , _resultPage(new OwncloudWizardResultPage)
+ , _credentialsPage(0)
+- , _webViewPage(new WebViewPage(this))
+ , _setupLog()
+ , _registration(false)
+ {
+@@ -64,7 +62,6 @@
+ #endif
+ setPage(WizardCommon::Page_AdvancedSetup, _advancedSetupPage);
+ setPage(WizardCommon::Page_Result, _resultPage);
+- setPage(WizardCommon::Page_WebView, _webViewPage);
+
+ connect(this, &QDialog::finished, this, &OwncloudWizard::basicSetupFinished);
+
+@@ -79,7 +76,6 @@
+ #ifndef NO_SHIBBOLETH
+ connect(_shibbolethCredsPage, &OwncloudShibbolethCredsPage::connectToOCUrl, this, &OwncloudWizard::connectToOCUrl);
+ #endif
+- connect(_webViewPage, &WebViewPage::connectToOCUrl, this, &OwncloudWizard::connectToOCUrl);
+ connect(_advancedSetupPage, &OwncloudAdvancedSetupPage::createLocalAndRemoteFolders,
+ this, &OwncloudWizard::createLocalAndRemoteFolders);
+ connect(this, &QWizard::customButtonClicked, this, &OwncloudWizard::skipFolderConfiguration);
+@@ -168,10 +164,6 @@
+ break;
+ #endif
+
+- case WizardCommon::Page_WebView:
+- _webViewPage->setConnected();
+- break;
+-
+ case WizardCommon::Page_AdvancedSetup:
+ _advancedSetupPage->directoriesCreated();
+ break;
+@@ -195,8 +187,6 @@
+ #endif
+ if (type == DetermineAuthTypeJob::OAuth) {
+ _credentialsPage = _browserCredsPage;
+- } else if (type == DetermineAuthTypeJob::WebViewFlow) {
+- _credentialsPage = _webViewPage;
+ } else { // try Basic auth even for "Unknown"
+ _credentialsPage = _httpCredsPage;
+ }
+--- desktop-2.5.0-beta1/src/CMakeLists.txt 2018-08-02 16:32:56.000000000 -0400
++++ desktop-2.5.0-beta1/src/CMakeLists.txt 2018-08-15 20:59:59.390712646 -0400
+@@ -4,7 +4,7 @@
+
+ set(synclib_NAME ${APPLICATION_EXECUTABLE}sync)
+
+-find_package(Qt5 5.6 COMPONENTS Core Network Xml Concurrent WebEngineWidgets WebEngine REQUIRED)
++find_package(Qt5 5.6 COMPONENTS Core Network Xml Concurrent REQUIRED)
+ if (Qt5Core_VERSION VERSION_LESS 5.9.0)
+ message(STATUS "For HTTP/2 support, compile with Qt 5.9 or higher.")
+ endif()
diff --git a/user/nextcloud-client/openssl.patch b/user/nextcloud-client/openssl.patch
new file mode 100644
index 000000000..426fa0cfb
--- /dev/null
+++ b/user/nextcloud-client/openssl.patch
@@ -0,0 +1,11 @@
+--- desktop-2.5.0-beta2/CMakeLists.txt 2018-08-24 12:54:42.000000000 +0000
++++ desktop-2.5.0-beta2/CMakeLists.txt 2018-10-03 06:19:15.840263697 +0000
+@@ -183,7 +183,7 @@ if(BUILD_CLIENT)
+ endif()
+ find_package(Sphinx)
+ find_package(PdfLatex)
+- find_package(OpenSSL 1.1 REQUIRED )
++ find_package(OpenSSL 1.0 REQUIRED )
+
+ find_package(ZLIB REQUIRED)
+ find_package(GLib2)
diff --git a/user/ntfs-3g/APKBUILD b/user/ntfs-3g/APKBUILD
new file mode 100644
index 000000000..d403c4f42
--- /dev/null
+++ b/user/ntfs-3g/APKBUILD
@@ -0,0 +1,40 @@
+# Contributor: Valery Kartel <valery.kartel@gmail.com>
+# Contributor: Carlo Landmeter <clandmeter@gmail.com>
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Max Rees <maxcrees@me.com>
+pkgname=ntfs-3g
+_pkgname=ntfs-3g_ntfsprogs
+pkgver=2017.3.23
+pkgrel=1
+pkgdesc="Stable, full-featured, read-write NTFS"
+url="https://www.tuxera.com/community/open-source-ntfs-3g/"
+arch="all"
+options="!check" # No test suite.
+license="LGPL-2.1-only AND BSD-2-Clause AND GPL-2.0+ AND GPL-3.0+"
+makedepends="attr-dev util-linux-dev linux-headers fuse-dev"
+subpackages="$pkgname-doc $pkgname-dev $pkgname-libs"
+source="https://tuxera.com/opensource/$_pkgname-$pkgver.tgz"
+builddir="$srcdir/$_pkgname-$pkgver"
+
+build() {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var \
+ --with-fuse=external
+ make
+}
+
+package() {
+ cd "$builddir"
+ mkdir -p "$pkgdir"/lib
+ make -j1 DESTDIR="$pkgdir" LDCONFIG=: install
+ ln -s /bin/ntfs-3g "$pkgdir"/sbin/mount.ntfs
+}
+
+sha512sums="3a607f0d7be35204c992d8931de0404fbc52032c13b4240d2c5e6f285c318a28eb2a385d7cf5ac4cd445876aee5baa5753bb636ada0d870d84a9d3fdbce794ef ntfs-3g_ntfsprogs-2017.3.23.tgz"
diff --git a/user/ode/APKBUILD b/user/ode/APKBUILD
new file mode 100644
index 000000000..f21ef2b42
--- /dev/null
+++ b/user/ode/APKBUILD
@@ -0,0 +1,48 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: A. Wilcox <awilfox@adelielinux.org>
+pkgname=ode
+pkgver=0.14
+pkgrel=0
+pkgdesc="High performance library for simulating rigid body dynamics"
+url="https://www.ode-wiki.org/wiki/index.php?title=Main_Page"
+arch="all"
+options="!check" # Fails 48/52 tests
+license="LGPL-2.1+ OR BSD-3-Clause"
+depends=""
+makedepends="autoconf automake libtool"
+subpackages="$pkgname-dev"
+source="https://bitbucket.org/odedevs/ode/downloads/ode-$pkgver.tar.gz
+ fix-test-link.patch
+ "
+
+build() {
+ cd "$builddir"
+
+ ./bootstrap
+ CXXFLAGS="$CXXFLAGS -fpermissive" ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var \
+ --enable-shared \
+ --disable-static \
+ --disable-double-precision \
+ --enable-libccd \
+ --enable-ou
+ make
+}
+
+check() {
+ cd "$builddir"
+ make check
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+sha512sums="1f74c3c4687ee9665fa70e65a79100747fba577729830a90806e374115f1c161a2f4545cf591b0979054aa3e2f9a3673635668cb7362ab5c213ada0d39b1a03d ode-0.14.tar.gz
+8630d5d059fd0f623db6af4000666868358002a42ba84817117b1fb5e01c776bb23cbf1c8c43181d7bf40a0d71b640f9d2f9785461d8a77877dcbdadd775792e fix-test-link.patch"
diff --git a/user/ode/fix-test-link.patch b/user/ode/fix-test-link.patch
new file mode 100644
index 000000000..a9d66dbbe
--- /dev/null
+++ b/user/ode/fix-test-link.patch
@@ -0,0 +1,9 @@
+--- ode-0.15.2/tests/Makefile.am.old 2017-06-05 08:12:18.000000000 +0000
++++ ode-0.15.2/tests/Makefile.am 2018-09-30 22:44:06.310000000 +0000
+@@ -26,5 +26,5 @@
+
+ tests_LDADD = \
+ $(top_builddir)/ode/src/libode.la \
+- joints/*.o \
++ joints/libjoints.la \
+ UnitTest++/src/libunittestpp.la
diff --git a/user/perl-algorithm-diff/APKBUILD b/user/perl-algorithm-diff/APKBUILD
new file mode 100644
index 000000000..5e0c60775
--- /dev/null
+++ b/user/perl-algorithm-diff/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-algorithm-diff
+pkgver=1.1903
+pkgrel=0
+pkgdesc="Compute 'intelligent' differences between two files / lists"
+url="https://metacpan.org/pod/Algorithm::Diff"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/T/TY/TYEMQ/Algorithm-Diff-$pkgver.tar.gz"
+builddir="$srcdir/Algorithm-Diff-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="61632be4c19a03ccacaa218ab7cb8bdbc53a4a6030b8173a59c7611056375536788392c1da00ab88f3df9884fc8a67825efc83b70e2e564664d5187021d6b106 Algorithm-Diff-1.1903.tar.gz"
diff --git a/user/perl-any-moose/APKBUILD b/user/perl-any-moose/APKBUILD
new file mode 100644
index 000000000..eed2735ca
--- /dev/null
+++ b/user/perl-any-moose/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-any-moose
+pkgver=0.27
+pkgrel=0
+pkgdesc="Deprecated Moose Mouse abstraction layer"
+url="https://metacpan.org/pod/Any::Moose"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl perl-mouse"
+makedepends="perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/E/ET/ETHER/Any-Moose-$pkgver.tar.gz"
+builddir="$srcdir/Any-Moose-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="5c97caf2e64462bae95fc4d5dd41868c01f856bd8f74872985254b7cc6ce0e13b4accad7955047ff5c4013399f7aea2ad6d48ae3592883a3b6cd20c0e4478b7b Any-Moose-0.27.tar.gz"
diff --git a/user/perl-anyevent/APKBUILD b/user/perl-anyevent/APKBUILD
new file mode 100644
index 000000000..f97e983eb
--- /dev/null
+++ b/user/perl-anyevent/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-anyevent
+pkgver=7.14
+pkgrel=0
+pkgdesc="The DBI of event loop programming"
+url="https://metacpan.org/pod/AnyEvent"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/M/ML/MLEHMANN/AnyEvent-$pkgver.tar.gz"
+builddir="$srcdir/AnyEvent-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="98e7b9e06cf74b99d3407a25b60f3b825fceed3bae43505e1fb90785e24bd88ae25955cff25d29b4cc96957db7f4f5203d19ad2365abb4e3a3227fd91a16fb25 AnyEvent-7.14.tar.gz"
diff --git a/user/perl-appconfig/APKBUILD b/user/perl-appconfig/APKBUILD
new file mode 100644
index 000000000..3b517cf02
--- /dev/null
+++ b/user/perl-appconfig/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-appconfig
+pkgver=1.71
+pkgrel=0
+pkgdesc="Perl modules for reading configuration and parsing command line arguments"
+url="https://metacpan.org/release/AppConfig"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/N/NE/NEILB/AppConfig-$pkgver.tar.gz"
+builddir="$srcdir/AppConfig-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="cbd58601ce0ea6c237e86b8b013cf75e552914263f56b1ab26b8079bff75b28ca2bb35585bfaa187b611afa969767c25494d3ec2a6b3ff5d1aecd2f9ffa8df72 AppConfig-1.71.tar.gz"
diff --git a/user/perl-b-hooks-endofscope/APKBUILD b/user/perl-b-hooks-endofscope/APKBUILD
new file mode 100644
index 000000000..0d9d641c2
--- /dev/null
+++ b/user/perl-b-hooks-endofscope/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-b-hooks-endofscope
+pkgver=0.24
+pkgrel=0
+pkgdesc="Execute Perl code after a scope finished compilation"
+url="https://metacpan.org/release/B-Hooks-EndOfScope"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-module-implementation perl-sub-exporter-progressive perl-sub-name
+ perl-variable-magic"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/E/ET/ETHER/B-Hooks-EndOfScope-$pkgver.tar.gz"
+builddir="$srcdir/B-Hooks-EndOfScope-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="5c061a81a3fed88ad868a14a1f817f7952b2f0c9512408174354e0ecf7e3caa5d646054cf75efa8b8c558e6241a8dfebf9400e8826021bdb5cbdf3a00065b147 B-Hooks-EndOfScope-0.24.tar.gz"
diff --git a/user/perl-canary-stability/APKBUILD b/user/perl-canary-stability/APKBUILD
new file mode 100644
index 000000000..f68eadfc0
--- /dev/null
+++ b/user/perl-canary-stability/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-canary-stability
+pkgver=2012
+pkgrel=0
+pkgdesc="Canary to check Perl compatibility for schmorp's modules"
+url="https://metacpan.org/pod/Canary::Stability"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/M/ML/MLEHMANN/Canary-Stability-$pkgver.tar.gz"
+builddir="$srcdir/Canary-Stability-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="7780731e4142d536182e1820c041c43ae67c5b47c044f15d8dcc060646bbab10a974bddcb703fdb27f427db3cd4dbdff54e131dc708c0260d7275be869eb27b1 Canary-Stability-2012.tar.gz"
diff --git a/user/perl-cgi/APKBUILD b/user/perl-cgi/APKBUILD
new file mode 100644
index 000000000..09fca609f
--- /dev/null
+++ b/user/perl-cgi/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-cgi
+pkgver=4.40
+pkgrel=0
+pkgdesc="Handle CGI requests and responses in Perl"
+url="https://metacpan.org/release/CGI"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-html-parser"
+makedepends="perl-dev"
+checkdepends="perl-test-deep perl-test-nowarnings perl-test-warn"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/L/LE/LEEJO/CGI-$pkgver.tar.gz"
+builddir="$srcdir/CGI-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="317cc410d8cc630067759cc05b8643e0c3fe4e55307c437176892a625b88d46443c3e0ff4361e066c54f95c3573e5fa8c21e23069071fa0dc74fc2d93dca13c1 CGI-4.40.tar.gz"
diff --git a/user/perl-class-data-inheritable/APKBUILD b/user/perl-class-data-inheritable/APKBUILD
new file mode 100644
index 000000000..4e1745f22
--- /dev/null
+++ b/user/perl-class-data-inheritable/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-class-data-inheritable
+pkgver=0.08
+pkgrel=0
+pkgdesc="Inheritable, overridable class data for Perl modules"
+url="https://metacpan.org/release/Class-Data-Inheritable"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/T/TM/TMTM/Class-Data-Inheritable-$pkgver.tar.gz"
+builddir="$srcdir/Class-Data-Inheritable-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="bddc61096158b21d4cfa69538d5db0f53617a66c71447ee193141064f4f58194462b21e0a849510e24e4c263b13be3ee1bc6bb8504320e0a86c02b67ad1652c8 Class-Data-Inheritable-0.08.tar.gz"
diff --git a/user/perl-class-load-xs/APKBUILD b/user/perl-class-load-xs/APKBUILD
new file mode 100644
index 000000000..ebdcca147
--- /dev/null
+++ b/user/perl-class-load-xs/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-class-load-xs
+pkgver=0.10
+pkgrel=0
+pkgdesc="Perl XS implementation of Class::Load"
+url="https://metacpan.org/release/Class-Load-XS"
+arch="all"
+license="Artistic-2.0"
+depends="perl-class-load"
+makedepends="perl-dev"
+checkdepends="perl-test-fatal perl-test-needs"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/E/ET/ETHER/Class-Load-XS-$pkgver.tar.gz"
+builddir="$srcdir/Class-Load-XS-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="16ab845dc393567f0b0e9597eda7d7678b8a41d218823a166bacdfd4dc93e704a6aff98662340b8d7f4d045a60530071bb84ea8da8be5a6930af47722207d126 Class-Load-XS-0.10.tar.gz"
diff --git a/user/perl-class-load/APKBUILD b/user/perl-class-load/APKBUILD
new file mode 100644
index 000000000..a90d30bff
--- /dev/null
+++ b/user/perl-class-load/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-class-load
+pkgver=0.25
+pkgrel=0
+pkgdesc="Perl module for loading classes"
+url="https://metacpan.org/release/Class-Load"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-data-optlist perl-module-implementation perl-module-runtime
+ perl-package-stash perl-try-tiny"
+makedepends="perl-dev"
+checkdepends="perl-test-fatal perl-test-needs"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/E/ET/ETHER/Class-Load-$pkgver.tar.gz"
+builddir="$srcdir/Class-Load-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="feacb4ae99358d3dc45b23b2d7cc814603e59a72424e7e0620d4939fa6d6206a1bb123c010b49013ce4764df11dc7c04fc1d7bd5783c61a391310bcb653e7ca4 Class-Load-0.25.tar.gz"
diff --git a/user/perl-class-method-modifiers/APKBUILD b/user/perl-class-method-modifiers/APKBUILD
new file mode 100644
index 000000000..7d22c357d
--- /dev/null
+++ b/user/perl-class-method-modifiers/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-class-method-modifiers
+pkgver=2.12
+pkgrel=0
+pkgdesc="Provides Moose-like method modifiers"
+url="https://metacpan.org/pod/Class::Method::Modifiers"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev"
+checkdepends="perl-test-requires perl-test-fatal"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/E/ET/ETHER/Class-Method-Modifiers-$pkgver.tar.gz"
+builddir="$srcdir/Class-Method-Modifiers-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="18c7cdff214d39a475b116cc5e6dda043c31765bcdfa9a1fa7242ce61e42583c4981d41a43ba556fb5a057e0cfbd5e52dd60048ea7dfae0fec3618dc47876dd4 Class-Method-Modifiers-2.12.tar.gz"
diff --git a/user/perl-class-xsaccessor/APKBUILD b/user/perl-class-xsaccessor/APKBUILD
new file mode 100644
index 000000000..6ef87555a
--- /dev/null
+++ b/user/perl-class-xsaccessor/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: A. Wilcox <awilfox@adelielinux.org>
+pkgname=perl-class-xsaccessor
+pkgver=1.19
+pkgrel=0
+pkgdesc="Perl module to generate fast XS accessors without compilation"
+url="https://metacpan.org/release/Class-XSAccessor"
+arch="all"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/S/SM/SMUELLER/Class-XSAccessor-$pkgver.tar.gz"
+builddir="$srcdir/Class-XSAccessor-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="58855bb2108b60cc90ae1d1c4d6a011da7bac2d063c7c953ff8610ae164ba60731a664f0fbddf148e1eabb60042913a17633a9c9a8936a23a59130b381bf63f8 Class-XSAccessor-1.19.tar.gz"
diff --git a/user/perl-code-tidyall/APKBUILD b/user/perl-code-tidyall/APKBUILD
new file mode 100644
index 000000000..ed36959e5
--- /dev/null
+++ b/user/perl-code-tidyall/APKBUILD
@@ -0,0 +1,40 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-code-tidyall
+pkgver=0.71
+pkgrel=0
+pkgdesc="Your all-in-one Perl code tidier and validator"
+url="https://metacpan.org/release/Code-TidyAll"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-capture-tiny perl-config-ini perl-file-pushd perl-file-which
+ perl-ipc-run3 perl-ipc-system-simple perl-list-compare
+ perl-list-someutils perl-log-any perl-module-runtime perl-moo
+ perl-path-tiny perl-scope-guard perl-specio
+ perl-specio-library-path-tiny perl-text-diff perl-timedate
+ perl-time-duration-parse perl-try-tiny"
+makedepends="perl-dev"
+checkdepends="perl-lib-relative perl-test-class-most perl-test-differences
+ perl-test-fatal perl-test-warnings"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Code-TidyAll-$pkgver.tar.gz"
+builddir="$srcdir/Code-TidyAll-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="b8d29eaceedf95ce8dc92142a861a7f552443dd713cbfe4a273bcbaa7222ec48646bde434e81cc209adde07d5a2f6e2d6b408e7427dfc574df0af884c8a61f92 Code-TidyAll-0.71.tar.gz"
diff --git a/user/perl-common-sense/APKBUILD b/user/perl-common-sense/APKBUILD
new file mode 100644
index 000000000..8f159d0b3
--- /dev/null
+++ b/user/perl-common-sense/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-common-sense
+pkgver=3.74
+pkgrel=0
+pkgdesc="Implements some (in)sane defaults for Perl programs"
+url="https://metacpan.org/pod/common::sense"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/M/ML/MLEHMANN/common-sense-$pkgver.tar.gz"
+builddir="$srcdir/common-sense-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="658ad70a2d1bbd0b26f91c4ea5d69b4cc0b632ede9532b88282987002a5e280f0475d63ee846b7bd2d38ef82f2680e20c2093803e4b62a984750ed447f318d60 common-sense-3.74.tar.gz"
diff --git a/user/perl-config-ini/APKBUILD b/user/perl-config-ini/APKBUILD
new file mode 100644
index 000000000..fd92f0812
--- /dev/null
+++ b/user/perl-config-ini/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-config-ini
+pkgver=0.025
+pkgrel=0
+pkgdesc="Simple .ini file format handler for Perl"
+url="https://metacpan.org/release/Config-INI"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-mixin-linewise"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/R/RJ/RJBS/Config-INI-$pkgver.tar.gz"
+builddir="$srcdir/Config-INI-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="2831e2611409c1f09029b37e56bcbc875051cf9ac5e458f38fbac29a3e48665f49ea9ac66519eeee71e9b52b2c702507eb801c518a8417bbf0806270b0bc4155 Config-INI-0.025.tar.gz"
diff --git a/user/perl-cpan-meta-check/APKBUILD b/user/perl-cpan-meta-check/APKBUILD
new file mode 100644
index 000000000..e23edf9b9
--- /dev/null
+++ b/user/perl-cpan-meta-check/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-cpan-meta-check
+pkgver=0.014
+pkgrel=0
+pkgdesc="Verify requirements in a Perl CPAN::Meta object"
+url="https://metacpan.org/release/CPAN-Meta-Check"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+checkdepends="perl-test-deep"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/L/LE/LEONT/CPAN-Meta-Check-$pkgver.tar.gz"
+builddir="$srcdir/CPAN-Meta-Check-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="a10af09a7ce771ca3983adea8053d141750fd09849609a28e7f973831fd3a3ece55281841aec93c099154bb59135986da4983bf612ae4e956c45dbb3f2770f5e CPAN-Meta-Check-0.014.tar.gz"
diff --git a/user/perl-cwd-guard/APKBUILD b/user/perl-cwd-guard/APKBUILD
new file mode 100644
index 000000000..5976741ef
--- /dev/null
+++ b/user/perl-cwd-guard/APKBUILD
@@ -0,0 +1,39 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-cwd-guard
+pkgver=0.05
+pkgrel=0
+pkgdesc="Temporary changing working directory (chdir)"
+url="https://metacpan.org/pod/Cwd::Guard"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev perl-module-build"
+checkdepends="perl-test-requires"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/K/KA/KAZEBURO/Cwd-Guard-$pkgver.tar.gz"
+builddir="$srcdir/Cwd-Guard-$pkgver"
+
+prepare() {
+ cd "$builddir"
+ perl Build.PL installdirs=vendor
+}
+
+build() {
+ cd "$builddir"
+ ./Build
+}
+
+check() {
+ cd "$builddir"
+ ./Build test
+}
+
+package() {
+ cd "$builddir"
+ ./Build install destdir="$pkgdir"
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="14aa68e535cec8f7182d5648558c539cbf6eebe2fee9c59d0b06f5b45cca1c6c652104a58f71b5a56f796f03d139e3e74962e45fb127bf038803b05cb9f32b82 Cwd-Guard-0.05.tar.gz"
diff --git a/user/perl-data-dump/APKBUILD b/user/perl-data-dump/APKBUILD
new file mode 100644
index 000000000..26deca4d9
--- /dev/null
+++ b/user/perl-data-dump/APKBUILD
@@ -0,0 +1,32 @@
+# Contributor: Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com>
+# Maintainer: Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com>
+pkgname=perl-data-dump
+pkgver=1.23
+pkgrel=0
+pkgdesc="Perl module for outputting data structures"
+url="https://metacpan.org/pod/Data::Dump"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0+"
+depends="perl"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/G/GA/GAAS/Data-Dump-$pkgver.tar.gz"
+builddir="$srcdir/Data-Dump-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="6fd6c23bb6df7f7396219149dbfd23132fc2ea1dd344c32f62fc27a1afeeb28d7ebf2d429184bb6d1189f412e218f9e62a966b49fdd9ad5564e5152d67a02b96 Data-Dump-1.23.tar.gz"
diff --git a/user/perl-devel-checkcompiler/APKBUILD b/user/perl-devel-checkcompiler/APKBUILD
new file mode 100644
index 000000000..6e99b7ced
--- /dev/null
+++ b/user/perl-devel-checkcompiler/APKBUILD
@@ -0,0 +1,39 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-devel-checkcompiler
+pkgver=0.07
+pkgrel=0
+pkgdesc="Check the compiler's availability"
+url="https://metacpan.org/pod/Devel::CheckCompiler"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev perl-module-build-tiny"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/S/SY/SYOHEX/Devel-CheckCompiler-$pkgver.tar.gz"
+builddir="$srcdir/Devel-CheckCompiler-$pkgver"
+
+prepare() {
+ cd "$builddir"
+ perl Build.PL --destdir="$pkgdir" --prefix="/usr" --installdirs=vendor
+}
+
+build() {
+ cd "$builddir"
+ export CFLAGS=`perl -MConfig -E 'say $Config{ccflags}'`
+ ./Build
+}
+
+check() {
+ cd "$builddir"
+ ./Build test
+}
+
+package() {
+ cd "$builddir"
+ ./Build install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="147fbdab382ff40bf1402d2d6be1143fe77403cd2444e854fdf11eb02e8acdcab8cb6bbdd7f3aef01cc64fac2862efaa044c5148c7770b84b464f7360c399d7a Devel-CheckCompiler-0.07.tar.gz"
diff --git a/user/perl-devel-globaldestruction/APKBUILD b/user/perl-devel-globaldestruction/APKBUILD
new file mode 100644
index 000000000..af612cad4
--- /dev/null
+++ b/user/perl-devel-globaldestruction/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-devel-globaldestruction
+pkgver=0.14
+pkgrel=0
+pkgdesc="Provides Global Destruction for older perls"
+url="https://metacpan.org/pod/Devel::GlobalDestruction"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl perl-sub-exporter-progressive"
+makedepends="perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/H/HA/HAARG/Devel-GlobalDestruction-$pkgver.tar.gz"
+builddir="$srcdir/Devel-GlobalDestruction-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="75c346feae98897fb202dea0295f0225bf3cac59f21915da5dd1cdcf845052f4f8bcd0362d357020fb0facb6358175112b3685860ca1c1f173421c7c6a54f45d Devel-GlobalDestruction-0.14.tar.gz"
diff --git a/user/perl-devel-overloadinfo/APKBUILD b/user/perl-devel-overloadinfo/APKBUILD
new file mode 100644
index 000000000..98601047e
--- /dev/null
+++ b/user/perl-devel-overloadinfo/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-devel-overloadinfo
+pkgver=0.005
+pkgrel=0
+pkgdesc="Introspect overloaded Perl operators"
+url="https://metacpan.org/release/Devel-OverloadInfo"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-mro-compat perl-package-stash perl-sub-identify"
+makedepends="perl-dev"
+checkdepends="perl-test-fatal"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/I/IL/ILMARI/Devel-OverloadInfo-$pkgver.tar.gz"
+builddir="$srcdir/Devel-OverloadInfo-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="66ff0869ecd34b2a80e6c8052e9ba7cf396b85e25f2efa92e42447ae3164ac50f703ca4dbee38ac676b70caf19ce189a6d2a1d6322cf3af342d4edd5c0b336e7 Devel-OverloadInfo-0.005.tar.gz"
diff --git a/user/perl-devel-stacktrace/APKBUILD b/user/perl-devel-stacktrace/APKBUILD
new file mode 100644
index 000000000..1420b82f3
--- /dev/null
+++ b/user/perl-devel-stacktrace/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-devel-stacktrace
+pkgver=2.03
+pkgrel=0
+pkgdesc="A Perl object representing a stack trace"
+url="https://metacpan.org/release/Devel-StackTrace"
+arch="noarch"
+license="Artistic-2.0"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Devel-StackTrace-$pkgver.tar.gz"
+builddir="$srcdir/Devel-StackTrace-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="a5263ec76f5adb83b83cc4906c18d6c341f50472a254617882a889315597698968988be1bacbbb4c6c0709974ff4ba67a14835d3c2278d672219c52e4c823514 Devel-StackTrace-2.03.tar.gz"
diff --git a/user/perl-devel-symdump/APKBUILD b/user/perl-devel-symdump/APKBUILD
new file mode 100644
index 000000000..a56a92cd9
--- /dev/null
+++ b/user/perl-devel-symdump/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-devel-symdump
+pkgver=2.18
+pkgrel=0
+pkgdesc="Dump symbol names or the symbol table"
+url="https://metacpan.org/pod/Devel::Symdump"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/A/AN/ANDK/Devel-Symdump-$pkgver.tar.gz"
+builddir="$srcdir/Devel-Symdump-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="4e8e1ee723e3e02d2f0c100dace40d7722f6366402cff24fb50c8616a863628bc2faa02210754132afa7cbebbd90c75ea6f173e15bbcfaa5158dfcfdfd03da73 Devel-Symdump-2.18.tar.gz"
diff --git a/user/perl-dist-checkconflicts/APKBUILD b/user/perl-dist-checkconflicts/APKBUILD
new file mode 100644
index 000000000..481277c32
--- /dev/null
+++ b/user/perl-dist-checkconflicts/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-dist-checkconflicts
+pkgver=0.11
+pkgrel=0
+pkgdesc="Declare version conflicts for Perl distributions"
+url="https://metacpan.org/release/Dist-CheckConflicts"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-module-runtime"
+makedepends="perl-dev"
+checkdepends="perl-test-fatal"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DO/DOY/Dist-CheckConflicts-$pkgver.tar.gz"
+builddir="$srcdir/Dist-CheckConflicts-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="6c3f8546c1c7904bbc2a3c1135d145cbff95997c3032e9129afc98bdd98578dd9219af444f357dd8e9b1f08442a2fdd9d6f7fe8768f8ef165e71570f5ae246ad Dist-CheckConflicts-0.11.tar.gz"
diff --git a/user/perl-env-path/APKBUILD b/user/perl-env-path/APKBUILD
new file mode 100644
index 000000000..8b321c27e
--- /dev/null
+++ b/user/perl-env-path/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-env-path
+pkgver=0.19
+pkgrel=0
+pkgdesc="Advanced operations on path variables (Perl module)"
+url="https://metacpan.org/release/Env-Path"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DS/DSB/Env-Path-$pkgver.tar.gz"
+builddir="$srcdir/Env-Path-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="ea75dd808bd1d1e00a70179ccf834b4395e810ae46373eb16a9ebd37ada550ce3d9996073dfbe45909c66537fbc7712920d4dbb6dbf905200501884c5acb52fa Env-Path-0.19.tar.gz"
diff --git a/user/perl-eval-closure/APKBUILD b/user/perl-eval-closure/APKBUILD
new file mode 100644
index 000000000..93d0f376e
--- /dev/null
+++ b/user/perl-eval-closure/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-eval-closure
+pkgver=0.14
+pkgrel=0
+pkgdesc="Safely and cleanly create Perl closures using string eval"
+url="https://metacpan.org/release/Eval-Closure"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+checkdepends="perl-test-fatal perl-test-requires"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DO/DOY/Eval-Closure-$pkgver.tar.gz"
+builddir="$srcdir/Eval-Closure-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="fc55206bd39c4cb39360d06b6f39a65743f34b5e59d1a1ce99bf5831b9d88a03fb6dadf32fa9f0868e140fce719d53a7b13027f397cdd7f6ca05cc81277bdc08 Eval-Closure-0.14.tar.gz"
diff --git a/user/perl-exception-class/APKBUILD b/user/perl-exception-class/APKBUILD
new file mode 100644
index 000000000..4ff03bda6
--- /dev/null
+++ b/user/perl-exception-class/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: A. Wilcox <awilfox@adelielinux.org>
+pkgname=perl-exception-class
+pkgver=1.44
+pkgrel=0
+pkgdesc="Perl module for declaring 'real' exception classes"
+url="https://metacpan.org/release/Exception-Class"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-class-data-inheritable perl-devel-stacktrace"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Exception-Class-$pkgver.tar.gz"
+builddir="$srcdir/Exception-Class-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="7ce1e488505dc3d1c6d6365b5ed523b204b93d89d205ad4cdf6c9ee9dbad1a6edc257251a365275f067479e734def56b3b21d588e978822e7714bd8a49ba6bb2 Exception-Class-1.44.tar.gz"
diff --git a/user/perl-exporter-lite/APKBUILD b/user/perl-exporter-lite/APKBUILD
new file mode 100644
index 000000000..4831d5f98
--- /dev/null
+++ b/user/perl-exporter-lite/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-exporter-lite
+pkgver=0.08
+pkgrel=0
+pkgdesc="Lightweight exporting of Perl functions and variables"
+url="https://metacpan.org/release/Exporter-Lite"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/N/NE/NEILB/Exporter-Lite-$pkgver.tar.gz"
+builddir="$srcdir/Exporter-Lite-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="8c6ff5a88c1b810d74156c5d84695cfde6f555e0fc663804123e2a96f5e2235a5adeebbf24b18301ed2c3fb57f76788ecfdf301b26263279e92a88a9143b8953 Exporter-Lite-0.08.tar.gz"
diff --git a/user/perl-exporter-tiny/APKBUILD b/user/perl-exporter-tiny/APKBUILD
new file mode 100644
index 000000000..7e06cb066
--- /dev/null
+++ b/user/perl-exporter-tiny/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-exporter-tiny
+pkgver=1.002001
+pkgrel=0
+pkgdesc="Light-weight exporter with the features of Sub::Exporter"
+url="https://metacpan.org/release/Exporter-Tiny"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/T/TO/TOBYINK/Exporter-Tiny-$pkgver.tar.gz"
+sha512sums="b247e7785e02c3346f231736a430c2d54e5ac93c175892090c40121c86eb255ce4d138c65e31836fd2970b45fb71dc7e68ea3c45a06a9e9c4135b45df48621d8 Exporter-Tiny-1.002001.tar.gz"
+builddir="$srcdir/Exporter-Tiny-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
diff --git a/user/perl-extutils-depends/APKBUILD b/user/perl-extutils-depends/APKBUILD
new file mode 100644
index 000000000..3947f7667
--- /dev/null
+++ b/user/perl-extutils-depends/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-extutils-depends
+pkgver=0.405
+pkgrel=0
+pkgdesc="Easily build XS extensions that depend on XS extensions"
+url="https://metacpan.org/release/ExtUtils::Depends"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/X/XA/XAOC/ExtUtils-Depends-$pkgver.tar.gz"
+sha512sums="b9983ad763ff0cb81c899bc24f3152f13c69e608304b6e4446bd07b9b13d039650f3f87544c0bdd29c67246ea2973f04a1ce0fccbffb566fe89fdbe0bb03f11b ExtUtils-Depends-0.405.tar.gz"
+builddir="$srcdir/ExtUtils-Depends-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
diff --git a/user/perl-file-copy-recursive-reduced/APKBUILD b/user/perl-file-copy-recursive-reduced/APKBUILD
new file mode 100644
index 000000000..76e66d192
--- /dev/null
+++ b/user/perl-file-copy-recursive-reduced/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-file-copy-recursive-reduced
+pkgver=0.006
+pkgrel=0
+pkgdesc="Recursive copying of files and directories within Perl 5 toolchain"
+url="https://metacpan.org/pod/File::Copy::Recursive::Reduced"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev"
+checkdepends="perl-capture-tiny perl-path-tiny"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/J/JK/JKEENAN/File-Copy-Recursive-Reduced-$pkgver.tar.gz"
+builddir="$srcdir/File-Copy-Recursive-Reduced-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="7cf888b8c004d9430c87c1cceba25e997cb12974a79c3f4d803b11779abef81f5b686caac4c46a70caadb2eee12a71cb1fb87abfc7d5fec43dc37bbd2ef07694 File-Copy-Recursive-Reduced-0.006.tar.gz"
diff --git a/user/perl-file-copy-recursive/APKBUILD b/user/perl-file-copy-recursive/APKBUILD
new file mode 100644
index 000000000..882a25d2f
--- /dev/null
+++ b/user/perl-file-copy-recursive/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-file-copy-recursive
+pkgver=0.44
+pkgrel=0
+pkgdesc="Perl extension for recursively copying files and directories"
+url="https://metacpan.org/pod/File::Copy::Recursive"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev"
+checkdepends="perl-test-fatal perl-test-warnings perl-path-tiny perl-test-deep perl-test-file"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DM/DMUEY/File-Copy-Recursive-$pkgver.tar.gz"
+builddir="$srcdir/File-Copy-Recursive-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="7599c48cee0b9848d5e275a1de00845cb2d4820eda9092d550063d4791974870129ce8d3d9337a8f7ea413ed4c21e533c2eb3134c2fcb5cc412dbbfddd2500e4 File-Copy-Recursive-0.44.tar.gz"
diff --git a/user/perl-file-find-object-rule/APKBUILD b/user/perl-file-find-object-rule/APKBUILD
new file mode 100644
index 000000000..f8938a59c
--- /dev/null
+++ b/user/perl-file-find-object-rule/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-file-find-object-rule
+pkgver=0.0309
+pkgrel=0
+pkgdesc="Alternative Perl interface to File::Find::Object"
+url="https://metacpan.org/release/File-Find-Object-Rule"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-class-xsaccessor perl-file-find-object perl-number-compare
+ perl-text-glob"
+makedepends="perl-dev perl-module-build"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/File-Find-Object-Rule-$pkgver.tar.gz"
+builddir="$srcdir/File-Find-Object-Rule-$pkgver"
+
+build() {
+ cd "$builddir"
+ perl Build.PL installdirs=vendor
+ ./Build
+}
+
+check() {
+ cd "$builddir"
+ ./Build test
+}
+
+package() {
+ cd "$builddir"
+ ./Build install destdir="$pkgdir"
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="d4fe0bc369faa4870bb4f66b4e1212f0597ab0eb723dfb0ab6473428657067c0a72f9b9d6354a549117e553be1ddde222ede822555f94846ba110a2f82cc4b68 File-Find-Object-Rule-0.0309.tar.gz"
diff --git a/user/perl-file-find-object/APKBUILD b/user/perl-file-find-object/APKBUILD
new file mode 100644
index 000000000..b35c550d5
--- /dev/null
+++ b/user/perl-file-find-object/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: A. Wilcox <awilfox@adelielinux.org>
+pkgname=perl-file-find-object
+pkgver=0.3.2
+pkgrel=0
+pkgdesc="Object-oriented File::Find replacement for Perl"
+url="https://metacpan.org/release/File-Find-Object"
+arch="noarch"
+license="Artistic-2.0"
+depends="perl-class-xsaccessor"
+makedepends="perl-dev perl-module-build"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/File-Find-Object-v$pkgver.tar.gz"
+builddir="$srcdir/File-Find-Object-v$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="58ca07083da520aee03945259ac89b6b584728d89ad52aea1a6f19a14da73fc92fcfc46c01656130d64fbc9fc9e4b1c5ef56274f30ebe3711972235dd8945956 File-Find-Object-v0.3.2.tar.gz"
diff --git a/user/perl-file-finder/APKBUILD b/user/perl-file-finder/APKBUILD
new file mode 100644
index 000000000..83f2ada97
--- /dev/null
+++ b/user/perl-file-finder/APKBUILD
@@ -0,0 +1,36 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-file-finder
+pkgver=0.53
+pkgrel=1
+pkgdesc="Wrap Perl File::Find"
+url="https://metacpan.org/release/File-Finder"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-text-glob"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/M/ME/MERLYN/File-Finder-$pkgver.tar.gz
+ fix-test.patch
+ "
+builddir="$srcdir/File-Finder-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="abcbc5b5c7ae09eb13e62ab1656e79a25becafb91eeef241fc0803ba0b35ae902c93db2240dfff6342952df7f0ff589350f63fdb1ccead64816f51bf52e366f0 File-Finder-0.53.tar.gz
+8b96e6adb28e0a26843a3551d5939b9c9f65fbef155e46c155b82263923e1275a6be8c6184bbc831dfff7cc899d7b48df0f21e7005f273c389eff830190be166 fix-test.patch"
diff --git a/user/perl-file-finder/fix-test.patch b/user/perl-file-finder/fix-test.patch
new file mode 100644
index 000000000..6c371f6fc
--- /dev/null
+++ b/user/perl-file-finder/fix-test.patch
@@ -0,0 +1,16 @@
+Thanks @smaeul
+
+--- File-Finder-0.53/t/05-steps.t.old 2004-10-07 01:04:12.000000000 -0500
++++ File-Finder-0.53/t/05-steps.t 2018-10-02 22:27:29.867015209 -0500
+@@ -51,9 +51,9 @@
+ 'mode 755');
+
+ {
+- my $dirperm = (stat ".")[2] & 07777;
++ my $dirperm = (stat ".")[2] & 0777;
+ is_deeply([File::Finder->perm($dirperm)->in(qw(.))],
+- [fin(sub { ((stat($_))[2] & 07777) == $dirperm }, '.')],
++ [fin(sub { ((stat($_))[2] & 0777) == $dirperm }, '.')],
+ 'mode same as current directory');
+ }
+
diff --git a/user/perl-file-pushd/APKBUILD b/user/perl-file-pushd/APKBUILD
new file mode 100644
index 000000000..e4c1bd0f4
--- /dev/null
+++ b/user/perl-file-pushd/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-file-pushd
+pkgver=1.016
+pkgrel=0
+pkgdesc="Change directory temporarily in Perl for a limited scope"
+url="https://metacpan.org/release/File-pushd"
+arch="noarch"
+license="Apache-2.0"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/File-pushd-$pkgver.tar.gz"
+builddir="$srcdir/File-pushd-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="f80f24831c28aed6efcb036db8da2404aadf1005ed751a82c10071a24572c05758eb1785cd9d1f9fdee86a20cf83b41bd73125862d8d24bfa240cc0d6b33ccdd File-pushd-1.016.tar.gz"
diff --git a/user/perl-file-sharedir-install/APKBUILD b/user/perl-file-sharedir-install/APKBUILD
new file mode 100644
index 000000000..f2b567b5e
--- /dev/null
+++ b/user/perl-file-sharedir-install/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-file-sharedir-install
+pkgver=0.13
+pkgrel=0
+pkgdesc="Install shared files"
+url="https://metacpan.org/pod/File::ShareDir::Install"
+arch="noarch"
+license="GPL-1.0+ OR Artistic-1.0-Perl"
+depends="perl"
+makedepends="perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/E/ET/ETHER/File-ShareDir-Install-$pkgver.tar.gz"
+builddir="$srcdir/File-ShareDir-Install-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="a119e38491fad8ae0ebd95913e3b608e09a2b99376a5160e75083a28abe4f83c4f6a36df216365527ff87bf8ec095254b16a2f6d2515c69f34609df8672605ca File-ShareDir-Install-0.13.tar.gz"
diff --git a/user/perl-file-slurp/APKBUILD b/user/perl-file-slurp/APKBUILD
new file mode 100644
index 000000000..bfe483c7a
--- /dev/null
+++ b/user/perl-file-slurp/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-file-slurp
+pkgver=9999.19
+pkgrel=0
+pkgdesc="Simple and efficient file manipulation in Perl"
+url="https://metacpan.org/release/File-Slurp"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/U/UR/URI/File-Slurp-$pkgver.tar.gz"
+builddir="$srcdir/File-Slurp-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="3fb8f452d625e321e77475cbc7d5672d53fe49945581561a0001be0a9464e67659303271648e102d52b6ebd04c87afc7432238fcade0c098f584f3b58c90ec82 File-Slurp-9999.19.tar.gz"
diff --git a/user/perl-file-which/APKBUILD b/user/perl-file-which/APKBUILD
new file mode 100644
index 000000000..fddd35ce9
--- /dev/null
+++ b/user/perl-file-which/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-file-which
+pkgver=1.22
+pkgrel=0
+pkgdesc="Perl implementation of the which(1) utility as an API"
+url="https://metacpan.org/release/File-Which"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/File-Which-$pkgver.tar.gz"
+builddir="$srcdir/File-Which-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="9efd8cc6d08e82a429ab3b0ec5193cb894432311338dc4cdcb73b4536a40bf4829c414e75e5dcb0d03b9190511b232f1d27e441657afa7299b0a5b882877f2d1 File-Which-1.22.tar.gz"
diff --git a/user/perl-games-solitaire-verify/APKBUILD b/user/perl-games-solitaire-verify/APKBUILD
new file mode 100644
index 000000000..bcf5b7a45
--- /dev/null
+++ b/user/perl-games-solitaire-verify/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: A. Wilcox <awilfox@adelielinux.org>
+pkgname=perl-games-solitaire-verify
+pkgver=0.1900
+pkgrel=0
+pkgdesc="Verify solutions to solitaire games"
+url="https://metacpan.org/release/Games-Solitaire-Verify"
+arch="noarch"
+license="MIT"
+depends="perl-class-xsaccessor perl-exception-class perl-list-moreutils"
+makedepends="perl-dev perl-module-build"
+checkdepends="perl-test-differences"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/Games-Solitaire-Verify-$pkgver.tar.gz"
+builddir="$srcdir/Games-Solitaire-Verify-$pkgver"
+
+build() {
+ cd "$builddir"
+ perl Build.PL installdirs=vendor
+ export CFLAGS=`perl -MConfig -E 'say $Config{ccflags}'`
+ ./Build
+}
+
+check() {
+ cd "$builddir"
+ ./Build test
+}
+
+package() {
+ cd "$builddir"
+ ./Build install destdir="$pkgdir"
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="d161bc395f85f2aa404fe7aac893c840b302c7659e529b62bda9ad6c274508c4294c03c9037b9ab6a667e8a90292ef83445c88be26e42dde89625224f85027f0 Games-Solitaire-Verify-0.1900.tar.gz"
diff --git a/user/perl-getopt-long-descriptive/APKBUILD b/user/perl-getopt-long-descriptive/APKBUILD
new file mode 100644
index 000000000..92fe31c60
--- /dev/null
+++ b/user/perl-getopt-long-descriptive/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-getopt-long-descriptive
+pkgver=0.103
+pkgrel=0
+pkgdesc="Simpler Perl implementation of Getopt::Long"
+url="https://metacpan.org/release/Getopt-Long-Descriptive"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-params-validate perl-sub-exporter"
+makedepends="perl-dev"
+checkdepends="perl-cpan-meta-check perl-test-fatal perl-test-warnings"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/R/RJ/RJBS/Getopt-Long-Descriptive-$pkgver.tar.gz"
+builddir="$srcdir/Getopt-Long-Descriptive-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="9229575bde794fa1213871fbb33a12222737d7979cf4c290200fd85c7da9e3227539809b8380a88a85675429ceb61e505bac8cc4e1408ca63ba92b4e1b33149f Getopt-Long-Descriptive-0.103.tar.gz"
diff --git a/user/perl-import-into/APKBUILD b/user/perl-import-into/APKBUILD
new file mode 100644
index 000000000..29ccfb837
--- /dev/null
+++ b/user/perl-import-into/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-import-into
+pkgver=1.002005
+pkgrel=0
+pkgdesc="Import Perl packages into other packages"
+url="https://metacpan.org/release/Import-Into"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-module-runtime"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/H/HA/HAARG/Import-Into-$pkgver.tar.gz"
+builddir="$srcdir/Import-Into-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="d356307072da18bc40b25f11583018ed416cb87178f080982e14e98e53d42bc1e04aebda56d595e707c05065eaa6ad7a6b059920e8b5b8e1589bfd68e26900fb Import-Into-1.002005.tar.gz"
diff --git a/user/perl-inline-c/APKBUILD b/user/perl-inline-c/APKBUILD
new file mode 100644
index 000000000..50d298bb0
--- /dev/null
+++ b/user/perl-inline-c/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-inline-c
+pkgver=0.78
+pkgrel=0
+pkgdesc="C Language Support for Inline"
+url="https://metacpan.org/pod/Inline::C"
+arch="noarch"
+license="GPL-1.0+ OR Artistic-1.0-Perl"
+depends="perl perl-inline perl-pegex perl-parse-recdescent"
+makedepends="perl-dev perl-file-sharedir-install"
+checkdepends="perl-test-warn perl-yaml-libyaml perl-file-copy-recursive"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/T/TI/TINITA/Inline-C-$pkgver.tar.gz"
+builddir="$srcdir/Inline-C-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="368e68dfb9f1700534d9b391090e340172e3adde5fe15576f883e9341047fec35cea8660751883b27e128ad91dda363d513547368097a989457d669bbbdc8ce4 Inline-C-0.78.tar.gz"
diff --git a/user/perl-inline/APKBUILD b/user/perl-inline/APKBUILD
new file mode 100644
index 000000000..032805c28
--- /dev/null
+++ b/user/perl-inline/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-inline
+pkgver=0.80
+pkgrel=0
+pkgdesc="Write Perl Subroutines in Other Programming Languages"
+url="https://metacpan.org/pod/Inline"
+arch="noarch"
+license="GPL-1.0+ OR Artistic-1.0-Perl"
+depends="perl"
+makedepends="perl-dev"
+checkdepends="perl-test-warn"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/I/IN/INGY/Inline-$pkgver.tar.gz"
+builddir="$srcdir/Inline-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="e64f7752f32fd07c7c7a975429e04730f2987c9588f99b95502d4e5c87d458736a606c03943a68660940c3987cd632ad2f75ec3862342956c1754b1aca86e0bb Inline-0.80.tar.gz"
diff --git a/user/perl-io-all/APKBUILD b/user/perl-io-all/APKBUILD
new file mode 100644
index 000000000..bfa29c999
--- /dev/null
+++ b/user/perl-io-all/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-io-all
+pkgver=0.87
+pkgrel=0
+pkgdesc="Simple Perl module for all I/O needs"
+url="https://metacpan.org/release/IO-All"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/F/FR/FREW/IO-All-$pkgver.tar.gz"
+builddir="$srcdir/IO-All-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="bd8cb6d44db51a9a140209223f016e48acd713ec03ced1b9c02933fd88c6363926635dae033b20905201b13e8186b8bcc3f428d4d85cd187fc68b777cd197267 IO-All-0.87.tar.gz"
diff --git a/user/perl-io-tty/APKBUILD b/user/perl-io-tty/APKBUILD
new file mode 100644
index 000000000..d42b831a2
--- /dev/null
+++ b/user/perl-io-tty/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-io-tty
+pkgver=1.12
+pkgrel=0
+pkgdesc="Low-level allocate a pseudo-tty"
+url="https://metacpan.org/pod/IO::Tty"
+arch="all"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/T/TO/TODDR/IO-Tty-$pkgver.tar.gz"
+builddir="$srcdir/IO-Tty-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="23733e7832a0de370952420df8a781f85d28ff60eb4cd55be22147337bf5587f4e1ec7fcfc190ae3ad1fd9df0f9697f2d647e00739f4a2927b1ac9c81435454d IO-Tty-1.12.tar.gz"
diff --git a/user/perl-ipc-run/APKBUILD b/user/perl-ipc-run/APKBUILD
new file mode 100644
index 000000000..c78ee10fb
--- /dev/null
+++ b/user/perl-ipc-run/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-ipc-run
+pkgver=20180523.0
+pkgrel=0
+pkgdesc="system() and background procs w/ piping, redirs, ptys"
+url="https://metacpan.org/pod/IPC::Run"
+arch="noarch"
+license="GPL-1.0+ OR Artistic-1.0-Perl"
+depends="perl"
+makedepends="perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/T/TO/TODDR/IPC-Run-$pkgver.tar.gz"
+builddir="$srcdir/IPC-Run-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="e9d97cbec9f2607d1a89c1a06bd166ae2f030157f201e870df3b88b9f0b915b06a4b0db05b7f50daa4883de255e29c6898b1f9964d706739d4bf7034b53d7f89 IPC-Run-20180523.0.tar.gz"
diff --git a/user/perl-ipc-run3/APKBUILD b/user/perl-ipc-run3/APKBUILD
new file mode 100644
index 000000000..9abe68fb1
--- /dev/null
+++ b/user/perl-ipc-run3/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-ipc-run3
+pkgver=0.048
+pkgrel=0
+pkgdesc="Run a subprocess from Perl with I/O redirection"
+url="https://metacpan.org/release/IPC-Run3"
+arch="noarch"
+license="GPL-1.0+ OR BSD-2-Clause OR Artistic-1.0-Perl OR Artistic-2.0"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/R/RJ/RJBS/IPC-Run3-$pkgver.tar.gz"
+builddir="$srcdir/IPC-Run3-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="50432850d8dccd2e59aa6684d34f3e3242fd7df3eb4d9a5eb02dae389aa46b5fd68cc54114a157c3fe99956e68e74d575ab3db5009b7bf7d5c325f1f109b1262 IPC-Run3-0.048.tar.gz"
diff --git a/user/perl-ipc-system-simple/APKBUILD b/user/perl-ipc-system-simple/APKBUILD
new file mode 100644
index 000000000..938924620
--- /dev/null
+++ b/user/perl-ipc-system-simple/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-ipc-system-simple
+pkgver=1.25
+pkgrel=0
+pkgdesc="Run commands from Perl with detailed diagnostics"
+url="https://metacpan.org/release/IPC-System-Simple"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/P/PJ/PJF/IPC-System-Simple-$pkgver.tar.gz"
+builddir="$srcdir/IPC-System-Simple-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="fda275786605eb80acaa6062cc51c32aa0e84f150e7ca7afcfe874f088ce7b8f9a97669e91bec24fdb05426db8b0f05552aa8853e44b08996e625281d1892f72 IPC-System-Simple-1.25.tar.gz"
diff --git a/user/perl-json-xs/APKBUILD b/user/perl-json-xs/APKBUILD
new file mode 100644
index 000000000..75f0720ce
--- /dev/null
+++ b/user/perl-json-xs/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-json-xs
+pkgver=3.04
+pkgrel=0
+pkgdesc="JSON serialising/deserialising, done correctly and fast"
+url="https://metacpan.org/pod/JSON::XS"
+arch="all"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl perl-common-sense perl-types-serialiser"
+makedepends="perl-dev perl-canary-stability"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/M/ML/MLEHMANN/JSON-XS-$pkgver.tar.gz"
+builddir="$srcdir/JSON-XS-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="69c2e199385b5b5e331d905b64805304de80e1a3b393acaf7dce21c45254b1f23f1a83b246dcd3a80c2cfdadaf8ce3634ee587c469629cb69106f0c2239c73db JSON-XS-3.04.tar.gz"
diff --git a/user/perl-lib-relative/APKBUILD b/user/perl-lib-relative/APKBUILD
new file mode 100644
index 000000000..daeb17687
--- /dev/null
+++ b/user/perl-lib-relative/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-lib-relative
+pkgver=0.002
+pkgrel=0
+pkgdesc="Add paths relative to the current file to Perl @INC"
+url="https://metacpan.org/release/lib-relative"
+arch="noarch"
+license="Artistic-2.0"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DB/DBOOK/lib-relative-$pkgver.tar.gz"
+builddir="$srcdir/lib-relative-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="ebe552fbc4967dd8615e2a1ecde69000358b3909095c66b557a6dd68c1a4744ca586dc91d2cf1b679a57ef981ec79a4689ba9c3f846393f4f48e528e85c326b0 lib-relative-0.002.tar.gz"
diff --git a/user/perl-list-compare/APKBUILD b/user/perl-list-compare/APKBUILD
new file mode 100644
index 000000000..611b3efb3
--- /dev/null
+++ b/user/perl-list-compare/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-list-compare
+pkgver=0.53
+pkgrel=0
+pkgdesc="Compare elements of two or more Perl lists"
+url="https://metacpan.org/release/List-Compare"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/J/JK/JKEENAN/List-Compare-$pkgver.tar.gz"
+builddir="$srcdir/List-Compare-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="b467e9395afa8297f5f59d745d22048373cfd60dc0c8ce56d0ad95e8f9fddcda487d99c906b9fb5ac1b28aa53873a7c9689347866c3aa907aecd31b4a127627a List-Compare-0.53.tar.gz"
diff --git a/user/perl-list-moreutils-xs/APKBUILD b/user/perl-list-moreutils-xs/APKBUILD
new file mode 100644
index 000000000..73f3454a8
--- /dev/null
+++ b/user/perl-list-moreutils-xs/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-list-moreutils-xs
+pkgver=0.428
+pkgrel=0
+pkgdesc="Provide the stuff missing in List::Util in XS"
+url="https://metacpan.org/release/List-MoreUtils-XS"
+arch="all"
+license="Apache-2.0"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/R/RE/REHSACK/List-MoreUtils-XS-$pkgver.tar.gz"
+builddir="$srcdir/List-MoreUtils-XS-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="a608568e3c4a2e160e4f9afa26640be5b97ec83e301a6b81849e37951698b9423c0a969d7e8797a49b4fb6c5123780630a3726c64713922b90b21b947682c3dd List-MoreUtils-XS-0.428.tar.gz"
diff --git a/user/perl-list-moreutils/APKBUILD b/user/perl-list-moreutils/APKBUILD
new file mode 100644
index 000000000..7f20abe32
--- /dev/null
+++ b/user/perl-list-moreutils/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-list-moreutils
+pkgver=0.428
+pkgrel=0
+pkgdesc="Provide the stuff missing in List::Util"
+url="https://metacpan.org/release/List-MoreUtils"
+arch="noarch"
+license="Apache-2.0"
+depends="perl-exporter-tiny"
+makedepends="perl-dev perl-list-moreutils-xs"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/R/RE/REHSACK/List-MoreUtils-$pkgver.tar.gz"
+builddir="$srcdir/List-MoreUtils-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="f7e11f10f1d7bd3b8f9f8bc2fc325e1a9230056f68591da624aed01fb4e4cbac20caeae0c3e2aa3acc8b71febd6d4149284367f051d3c1e608e3a4ca8b62dbd8 List-MoreUtils-0.428.tar.gz"
diff --git a/user/perl-list-someutils-xs/APKBUILD b/user/perl-list-someutils-xs/APKBUILD
new file mode 100644
index 000000000..55e736bbe
--- /dev/null
+++ b/user/perl-list-someutils-xs/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-list-someutils-xs
+pkgver=0.58
+pkgrel=0
+pkgdesc="XS implementation of Perl List::SomeUtils"
+url="https://metacpan.org/release/List-SomeUtils-XS"
+arch="all"
+license="Artistic-2.0"
+depends=""
+makedepends="perl-dev"
+checkdepends="perl-test-leaktrace perl-test-warnings"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/List-SomeUtils-XS-$pkgver.tar.gz"
+builddir="$srcdir/List-SomeUtils-XS-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="f89f5a35224a69a59c1d512a819bd725b324f0968ea447824a42c741c4ba66ee9522db939bd3e75d190e0f2f75d54100912b83a86d5e7dd1079025a57a245c38 List-SomeUtils-XS-0.58.tar.gz"
diff --git a/user/perl-list-someutils/APKBUILD b/user/perl-list-someutils/APKBUILD
new file mode 100644
index 000000000..80a5e64ee
--- /dev/null
+++ b/user/perl-list-someutils/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-list-someutils
+pkgver=0.56
+pkgrel=0
+pkgdesc="Provide the stuff missing in Perl's List::Util module"
+url="https://metacpan.org/release/List-SomeUtils"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-list-someutils-xs perl-module-implementation"
+makedepends="perl-dev"
+checkdepends="perl-test-leaktrace"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/List-SomeUtils-$pkgver.tar.gz"
+builddir="$srcdir/List-SomeUtils-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="b74c2a97811185d21bfd68fe60606afe8e92c266e98a763d51589021c9b3ae5310275005dc80198b8f9d92118fed569b5251d5ad87643f47af75a478db388503 List-SomeUtils-0.56.tar.gz"
diff --git a/user/perl-log-any/APKBUILD b/user/perl-log-any/APKBUILD
new file mode 100644
index 000000000..8b0e5a88d
--- /dev/null
+++ b/user/perl-log-any/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-log-any
+pkgver=1.707
+pkgrel=0
+pkgdesc="Bring Perl loggers and listeners together"
+url="https://metacpan.org/release/Log-Any"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/P/PR/PREACTION/Log-Any-$pkgver.tar.gz"
+builddir="$srcdir/Log-Any-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="b5fc37130b3bb07c9fac896c539657fffad2e80c2055a09816e133e48f3f5db9a3b896ea11bf087b5fe6844a72fb6189656a3033c7761c00f471282747e1c290 Log-Any-1.707.tar.gz"
diff --git a/user/perl-mixin-linewise/APKBUILD b/user/perl-mixin-linewise/APKBUILD
new file mode 100644
index 000000000..7c6a5339f
--- /dev/null
+++ b/user/perl-mixin-linewise/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-mixin-linewise
+pkgver=0.108
+pkgrel=0
+pkgdesc="Line-wise reader and writer for Perl strings"
+url="https://metacpan.org/release/Mixin-Linewise"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-perlio-utf8_strict perl-sub-exporter"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/R/RJ/RJBS/Mixin-Linewise-$pkgver.tar.gz"
+builddir="$srcdir/Mixin-Linewise-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="2789126737e2798a94ab6d90614503717dbc6c4178d19a9dd1e32689869e8e1298ec168fd6ab53580e65b5ad7ff94e065dca4afb7b71c2bb453810da61d29450 Mixin-Linewise-0.108.tar.gz"
diff --git a/user/perl-module-build-xsutil/APKBUILD b/user/perl-module-build-xsutil/APKBUILD
new file mode 100644
index 000000000..80d03b9ed
--- /dev/null
+++ b/user/perl-module-build-xsutil/APKBUILD
@@ -0,0 +1,39 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-module-build-xsutil
+pkgver=0.19
+pkgrel=0
+pkgdesc="A Module::Build class for building XS modules"
+url="https://metacpan.org/pod/Module::Build::XSUtil"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl perl-module-build perl-devel-checkcompiler"
+makedepends="perl-dev"
+checkdepends="perl-capture-tiny perl-cwd-guard perl-file-copy-recursive-reduced"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/H/HI/HIDEAKIO/Module-Build-XSUtil-$pkgver.tar.gz"
+builddir="$srcdir/Module-Build-XSUtil-$pkgver"
+
+prepare() {
+ cd "$builddir"
+ perl Build.PL installdirs=vendor
+}
+
+build() {
+ cd "$builddir"
+ ./Build
+}
+
+check() {
+ cd "$builddir"
+ ./Build test
+}
+
+package() {
+ cd "$builddir"
+ ./Build install destdir="$pkgdir"
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="187f504c3f26d15b96cdc5b682d3487a31cf124475160b7fe5dce727d5d6ec5de5a58d09535adb62a1a95b3030fb62951b2cc0eca860eb03c66a48042cea8819 Module-Build-XSUtil-0.19.tar.gz"
diff --git a/user/perl-module-implementation/APKBUILD b/user/perl-module-implementation/APKBUILD
new file mode 100644
index 000000000..d64f1a35d
--- /dev/null
+++ b/user/perl-module-implementation/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-module-implementation
+pkgver=0.09
+pkgrel=0
+pkgdesc="Loads an underlying implementation of a Perl module"
+url="https://metacpan.org/release/Module-Implementation"
+arch="noarch"
+license="Artistic-2.0"
+depends="perl-module-runtime perl-try-tiny"
+makedepends="perl-dev"
+checkdepends="perl-test-fatal perl-test-requires"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Module-Implementation-$pkgver.tar.gz"
+builddir="$srcdir/Module-Implementation-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="049f967ba1bd8a3914968b34006030ae318d99ac629a0f34736f1c2b5392490c30aa0914e777eaefda7f0f58755d2d3363a266b90db59b53fe145ef68e1d953c Module-Implementation-0.09.tar.gz"
diff --git a/user/perl-module-runtime-conflicts/APKBUILD b/user/perl-module-runtime-conflicts/APKBUILD
new file mode 100644
index 000000000..2fdca3cf1
--- /dev/null
+++ b/user/perl-module-runtime-conflicts/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-module-runtime-conflicts
+pkgver=0.003
+pkgrel=0
+pkgdesc="Provides information on conflicts for Module::Runtime"
+url="https://metacpan.org/release/Module-Runtime-Conflicts"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-dist-checkconflicts perl-module-runtime"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/E/ET/ETHER/Module-Runtime-Conflicts-$pkgver.tar.gz"
+builddir="$srcdir/Module-Runtime-Conflicts-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="1b72ea7cc9516721290d5ea433169697b4134b5fc77872d6822e4c395a154bf956d469ab5da2802d587d60dfb13b9784014fe492988cf3f8b5820da2d63e8ca1 Module-Runtime-Conflicts-0.003.tar.gz"
diff --git a/user/perl-module-runtime/APKBUILD b/user/perl-module-runtime/APKBUILD
new file mode 100644
index 000000000..0430740c3
--- /dev/null
+++ b/user/perl-module-runtime/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-module-runtime
+pkgver=0.016
+pkgrel=0
+pkgdesc="Runtime module handling"
+url="https://metacpan.org/pod/Module::Runtime"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev"
+checkdepends="perl-test-pod perl-test-pod-coverage"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/Z/ZE/ZEFRAM/Module-Runtime-$pkgver.tar.gz"
+builddir="$srcdir/Module-Runtime-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="64a362ee897646173dbbdd8794f863d93379d45d7ac20d3ae890d77b4ec3f5e36aaff66c41b4a6a33b28bf492216283528755550ab09e466ceafb4f0cfbaeb9e Module-Runtime-0.016.tar.gz"
diff --git a/user/perl-moo/APKBUILD b/user/perl-moo/APKBUILD
new file mode 100644
index 000000000..6e419cac2
--- /dev/null
+++ b/user/perl-moo/APKBUILD
@@ -0,0 +1,36 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-moo
+pkgver=2.003004
+pkgrel=0
+pkgdesc="Minimalist Object Orientation (with Moose compatibility)"
+url="https://metacpan.org/pod/Moo"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl perl-module-runtime perl-devel-globaldestruction perl-class-method-modifiers
+ perl-sub-quote perl-role-tiny"
+makedepends="perl-dev"
+checkdepends="perl-test-fatal"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/H/HA/HAARG/Moo-$pkgver.tar.gz"
+builddir="$srcdir/Moo-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="686996e4dd0238cff7483e4e06db5439660e390c67e65ace67c3fd0b05ade379a168d36ae649812c8a5e2b715eefea7cb17e5db323a0cd31b90667d8954eb38a Moo-2.003004.tar.gz"
diff --git a/user/perl-moose/APKBUILD b/user/perl-moose/APKBUILD
new file mode 100644
index 000000000..74ebadf6b
--- /dev/null
+++ b/user/perl-moose/APKBUILD
@@ -0,0 +1,40 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-moose
+pkgver=2.2011
+pkgrel=0
+pkgdesc="A postmodern object system for Perl 5"
+url="https://metacpan.org/release/Moose"
+arch="all"
+license="Artistic-1.0-Perl"
+depends="perl-class-load perl-class-load-xs perl-data-optlist
+ perl-devel-globaldestruction perl-devel-overloadinfo
+ perl-devel-stacktrace perl-eval-closure perl-module-runtime
+ perl-module-runtime-conflicts perl-mro-compat
+ perl-package-deprecationmanager perl-params-util perl-sub-exporter
+ perl-sub-identify perl-sub-name perl-try-tiny"
+makedepends="perl-dev"
+checkdepends="perl-cpan-meta-check perl-dist-checkconflicts
+ perl-test-cleannamespaces perl-test-fatal perl-test-requires"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/E/ET/ETHER/Moose-$pkgver.tar.gz"
+builddir="$srcdir/Moose-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="f94ed23c45a860b9afa8defe7f5067a65fdd9d457d94a85e4ea192640d09ad73bc336a2e54c4c663643ec0efa32872f4b2aa69083e99093e420cecf5430f34a3 Moose-2.2011.tar.gz"
diff --git a/user/perl-moosex-getopt/APKBUILD b/user/perl-moosex-getopt/APKBUILD
new file mode 100644
index 000000000..4669063ec
--- /dev/null
+++ b/user/perl-moosex-getopt/APKBUILD
@@ -0,0 +1,36 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-moosex-getopt
+pkgver=0.74
+pkgrel=0
+pkgdesc="Perl Moose role for processing command line arguments"
+url="https://metacpan.org/release/MooseX-Getopt"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-getopt-long-descriptive perl-moose perl-moosex-role-parameterised
+ perl-namespace-autoclean perl-try-tiny"
+makedepends="perl-dev perl-module-build-tiny"
+checkdepends="perl-moosex-strictconstructor perl-path-tiny perl-test-deep
+ perl-test-fatal perl-test-needs perl-test-trap perl-test-warnings"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/E/ET/ETHER/MooseX-Getopt-$pkgver.tar.gz"
+builddir="$srcdir/MooseX-Getopt-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_FALLBACK_SILENCE_WARNING=1 PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="3b7ea4f75192c62936f7838809a4a3facc4ccc38fb9db5affd46d07273ac1ffadd5ddb0882fe5d29870bf4b8c816916febdc3748747223c837fc87c65faa60ac MooseX-Getopt-0.74.tar.gz"
diff --git a/user/perl-moosex-role-parameterised/APKBUILD b/user/perl-moosex-role-parameterised/APKBUILD
new file mode 100644
index 000000000..6225b2371
--- /dev/null
+++ b/user/perl-moosex-role-parameterised/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: A. Wilcox <awilfox@adelielinux.org>
+pkgname=perl-moosex-role-parameterised
+pkgver=1.10
+pkgrel=0
+pkgdesc="Perl Moose roles with composition parameters"
+url="https://metacpan.org/release/MooseX-Role-Parameterized"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-module-runtime perl-moose perl-namespace-autoclean perl-namespace-clean"
+makedepends="perl-dev perl-module-build-tiny"
+checkdepends="perl-cpan-meta-check perl-dist-checkconflicts perl-test-fatal perl-test-requires"
+provides="perl-moosex-role-parameterized=$pkgver-r$pkgrel"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/E/ET/ETHER/MooseX-Role-Parameterized-$pkgver.tar.gz"
+builddir="$srcdir/MooseX-Role-Parameterized-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="10f6b51dd6e09c30e36496469c4a213e0ab6d12529e0b91161f680ae595b312e9dbff035d6c8a2d10dbff7fa55cf7ca6b53cd66b848f75f7e6ac43b6e6eb9e84 MooseX-Role-Parameterized-1.10.tar.gz"
diff --git a/user/perl-moosex-strictconstructor/APKBUILD b/user/perl-moosex-strictconstructor/APKBUILD
new file mode 100644
index 000000000..964414d4a
--- /dev/null
+++ b/user/perl-moosex-strictconstructor/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-moosex-strictconstructor
+pkgver=0.21
+pkgrel=0
+pkgdesc="Ensure unknown attributes passed to Perl Moose ctors are errors"
+url="https://metacpan.org/release/MooseX-StrictConstructor"
+arch="noarch"
+license="Artistic-2.0"
+depends="perl-moose perl-namespace-autoclean"
+makedepends="perl-dev"
+checkdepends="perl-moo perl-test-fatal perl-test-needs"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/MooseX-StrictConstructor-$pkgver.tar.gz"
+builddir="$srcdir/MooseX-StrictConstructor-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="b515ce0de7962b2d2da0da3dfd0fab978a014f2d5dc9e92e76cc137a260d3190a993d3b791db5eaf416e838180bdec1f827961aad4552c67f7c7cf1477107bfc MooseX-StrictConstructor-0.21.tar.gz"
diff --git a/user/perl-moox-late/APKBUILD b/user/perl-moox-late/APKBUILD
new file mode 100644
index 000000000..f9360c17f
--- /dev/null
+++ b/user/perl-moox-late/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-moox-late
+pkgver=0.015
+pkgrel=0
+pkgdesc="Translate Moose code into Moo"
+url="https://metacpan.org/release/MooX-late"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-moo perl-type-tiny"
+makedepends="perl-dev"
+checkdepends="perl-test-fatal perl-test-requires"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/T/TO/TOBYINK/MooX-late-$pkgver.tar.gz"
+builddir="$srcdir/MooX-late-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="4d685f4e68abe10487a98def8f0e7b0bafbd9928af27e61a5ac410bcafa9833a4aebdc8cd5bdbebd1a6ee53b4b0d5ae9bfa3864cae428b21c926730365fefb6d MooX-late-0.015.tar.gz"
diff --git a/user/perl-moox/APKBUILD b/user/perl-moox/APKBUILD
new file mode 100644
index 000000000..73cb7d290
--- /dev/null
+++ b/user/perl-moox/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-moox
+pkgver=0.101
+pkgrel=0
+pkgdesc="Perl module for using Moo and MooX:: lazily"
+url="https://metacpan.org/release/MooX"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-data-optlist perl-import-into perl-module-runtime perl-moo"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/G/GE/GETTY/MooX-$pkgver.tar.gz"
+builddir="$srcdir/MooX-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="4ba77d472c3ffab5ff600c20bd2d2b51614db9d5488fad7d8a51ee6249505519220a00437192d0c7132cbf6898bf1ff314d5c28132abbcfeb4be17d131ad7778 MooX-0.101.tar.gz"
diff --git a/user/perl-mouse/APKBUILD b/user/perl-mouse/APKBUILD
new file mode 100644
index 000000000..d89d9c3b3
--- /dev/null
+++ b/user/perl-mouse/APKBUILD
@@ -0,0 +1,40 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-mouse
+pkgver=2.5.6
+pkgrel=0
+pkgdesc="Moose minus the antlers"
+url="https://metacpan.org/pod/Mouse"
+arch="all"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev perl-module-build-xsutil"
+checkdepends="perl-test-exception perl-test-fatal perl-test-leaktrace perl-test-output perl-test-requires perl-try-tiny"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/S/SK/SKAJI/Mouse-v$pkgver.tar.gz"
+builddir="$srcdir/Mouse-v$pkgver"
+
+prepare() {
+ cd "$builddir"
+ perl Build.PL installdirs=vendor
+}
+
+build() {
+ cd "$builddir"
+ ./Build
+}
+
+check() {
+ # most, but not all functionality is tested
+ cd "$builddir"
+ ./Build test
+}
+
+package() {
+ cd "$builddir"
+ ./Build install destdir="$pkgdir"
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="1f29430badec842c1b3aa5a8a4c4ad785cf26d2e6cc745da82c0fa667b19da0b9e6c364e10ef615fbc03f60cb5020f079113b470162d095d8c514e6cb9ce96e3 Mouse-v2.5.6.tar.gz"
diff --git a/user/perl-mousex-nativetraits/APKBUILD b/user/perl-mousex-nativetraits/APKBUILD
new file mode 100644
index 000000000..34cd187bc
--- /dev/null
+++ b/user/perl-mousex-nativetraits/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-mousex-nativetraits
+pkgver=1.09
+pkgrel=0
+pkgdesc="Extend your attribute interfaces"
+url="https://metacpan.org/pod/MouseX::NativeTraits"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl perl-mouse"
+makedepends="perl-dev perl-module-install"
+checkdepends="perl-test-fatal perl-any-moose"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/G/GF/GFUJI/MouseX-NativeTraits-$pkgver.tar.gz"
+builddir="$srcdir/MouseX-NativeTraits-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="2aad717c7c78c1014f705a85b8bb8cab79febb827aa478a0884bcdd4d8d702a366785bc6104ba115513c234b8ca71cafcbbbc070ba37d6328255fe1f972c3619 MouseX-NativeTraits-1.09.tar.gz"
diff --git a/user/perl-mro-compat/APKBUILD b/user/perl-mro-compat/APKBUILD
new file mode 100644
index 000000000..bdd0e6b96
--- /dev/null
+++ b/user/perl-mro-compat/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-mro-compat
+pkgver=0.13
+pkgrel=0
+pkgdesc="mro::* interface compatibility for older Perl"
+url="https://metacpan.org/release/MRO-Compat"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/H/HA/HAARG/MRO-Compat-$pkgver.tar.gz"
+builddir="$srcdir/MRO-Compat-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="3311c37c8fc73acaf68bae2b12315a448a87de8f756e817c967cf49b753cf218e8c762ecc44890297afd82193d71b2407060db0bc70720d228b31c0a30de10c1 MRO-Compat-0.13.tar.gz"
diff --git a/user/perl-namespace-autoclean/APKBUILD b/user/perl-namespace-autoclean/APKBUILD
new file mode 100644
index 000000000..77163cc96
--- /dev/null
+++ b/user/perl-namespace-autoclean/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-namespace-autoclean
+pkgver=0.28
+pkgrel=0
+pkgdesc="Keep imports out of your Perl namespace"
+url="https://metacpan.org/release/namespace-autoclean"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-b-hooks-endofscope perl-namespace-clean perl-sub-identify"
+makedepends="perl-dev"
+checkdepends="perl-moo perl-moose perl-mouse perl-test-requires"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/E/ET/ETHER/namespace-autoclean-$pkgver.tar.gz"
+builddir="$srcdir/namespace-autoclean-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="2541f69862b334fcfe30059d025668175de1b182a5c8ee8f2619bf1d661c316a38fe2014f274bb23e887cd36959f98abb297154ac8ceb600e2e93cbd4a75e28d namespace-autoclean-0.28.tar.gz"
diff --git a/user/perl-namespace-clean/APKBUILD b/user/perl-namespace-clean/APKBUILD
new file mode 100644
index 000000000..7c4d0ba43
--- /dev/null
+++ b/user/perl-namespace-clean/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-namespace-clean
+pkgver=0.27
+pkgrel=0
+pkgdesc="Keep imports and functions out of your Perl namespace"
+url="https://metacpan.org/release/namespace-clean"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-b-hooks-endofscope perl-package-stash"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/R/RI/RIBASUSHI/namespace-clean-$pkgver.tar.gz"
+builddir="$srcdir/namespace-clean-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="4422640656602e44c6d3675e55a0e699f8c0e07abbaf11f0b0905043f90e13bb95ee0eaa4c4a08c853296825dd8ef33c806e0a7c284a70448e35ac3354545744 namespace-clean-0.27.tar.gz"
diff --git a/user/perl-number-compare/APKBUILD b/user/perl-number-compare/APKBUILD
new file mode 100644
index 000000000..c88666cc0
--- /dev/null
+++ b/user/perl-number-compare/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-number-compare
+pkgver=0.03
+pkgrel=0
+pkgdesc="Numeric comparisons for Perl"
+url="https://metacpan.org/release/Number-Compare"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/R/RC/RCLAMP/Number-Compare-$pkgver.tar.gz"
+builddir="$srcdir/Number-Compare-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="fc7efb0177bcb84142619b7d8c0252f4548e547650ddbe9cfafaba97b8ae791c20fbffa6f8b01449b9dd217d9914f94bfeaff57cdfdc2c11e2a1456992bd9893 Number-Compare-0.03.tar.gz"
diff --git a/user/perl-package-deprecationmanager/APKBUILD b/user/perl-package-deprecationmanager/APKBUILD
new file mode 100644
index 000000000..492c684ea
--- /dev/null
+++ b/user/perl-package-deprecationmanager/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-package-deprecationmanager
+pkgver=0.17
+pkgrel=0
+pkgdesc="Manage deprecation warnings for your Perl distribution"
+url="https://metacpan.org/release/Package-DeprecationManager"
+arch="noarch"
+license="Artistic-2.0"
+depends="perl-package-stash perl-params-util perl-sub-install perl-sub-name"
+makedepends="perl-dev"
+checkdepends="perl-test-fatal perl-test-warnings"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Package-DeprecationManager-$pkgver.tar.gz"
+builddir="$srcdir/Package-DeprecationManager-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="57bf79df657895342ca5b8d13f155d85f34d1a85415570b112138b6c50c5d08b421a1707671fbf807918cc334006e4558a626a7201c60096924fc2200c751cde Package-DeprecationManager-0.17.tar.gz"
diff --git a/user/perl-package-stash-xs/APKBUILD b/user/perl-package-stash-xs/APKBUILD
new file mode 100644
index 000000000..e3f4a2635
--- /dev/null
+++ b/user/perl-package-stash-xs/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-package-stash-xs
+pkgver=0.28
+pkgrel=0
+pkgdesc="Faster and more correct implementation of Package::Stash"
+url="https://metacpan.org/release/Package-Stash-XS"
+arch="all"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+checkdepends="perl-test-fatal perl-test-requires"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DO/DOY/Package-Stash-XS-$pkgver.tar.gz"
+builddir="$srcdir/Package-Stash-XS-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="409e884998bf063f438335067ff8f702aa1f12fc686c1912ad532f6536a711273e52c140d9c407c47b7ba4ccacedec480c1542437a90dd76367dc0f732c0db38 Package-Stash-XS-0.28.tar.gz"
diff --git a/user/perl-package-stash/APKBUILD b/user/perl-package-stash/APKBUILD
new file mode 100644
index 000000000..4b07f6718
--- /dev/null
+++ b/user/perl-package-stash/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-package-stash
+pkgver=0.37
+pkgrel=0
+pkgdesc="Perl routines for manipulating stashes"
+url="https://metacpan.org/release/Package-Stash"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-module-implementation perl-package-stash-xs"
+makedepends="perl-dev"
+checkdepends="perl-dist-checkconflicts perl-test-fatal perl-test-requires"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DO/DOY/Package-Stash-$pkgver.tar.gz"
+builddir="$srcdir/Package-Stash-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="d10321903591568d4ac4db91ad9e4dfcffe564ab22a5ecdd8fa103749c9708da082ffb3ca478e98ac120a23e51c0ab0ccf799c0da10fe2be194e9cace1f16b06 Package-Stash-0.37.tar.gz"
diff --git a/user/perl-params-validate/APKBUILD b/user/perl-params-validate/APKBUILD
new file mode 100644
index 000000000..64d524648
--- /dev/null
+++ b/user/perl-params-validate/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-params-validate
+pkgver=1.29
+pkgrel=0
+pkgdesc="Validate Perl method/function parameters"
+url="https://metacpan.org/release/Params-Validate"
+arch="all"
+license="Artistic-2.0"
+depends="perl-module-implementation"
+makedepends="perl-dev perl-module-build"
+checkdepends="perl-test-fatal perl-test-requires"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Params-Validate-$pkgver.tar.gz"
+builddir="$srcdir/Params-Validate-$pkgver"
+
+build() {
+ cd "$builddir"
+ perl Build.PL installdirs=vendor
+ ./Build
+}
+
+check() {
+ cd "$builddir"
+ ./Build test
+}
+
+package() {
+ cd "$builddir"
+ ./Build install destdir="$pkgdir"
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="afa887d1ce60d38b82cbf3ad88fb892f473e0fa45db528b68e66bbb800058af453180cc96afddae56a2cdad8ec531a587e7aac36b6869c489caa6dd36a57a385 Params-Validate-1.29.tar.gz"
diff --git a/user/perl-parse-recdescent/APKBUILD b/user/perl-parse-recdescent/APKBUILD
new file mode 100644
index 000000000..7e9bd3ebd
--- /dev/null
+++ b/user/perl-parse-recdescent/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-parse-recdescent
+pkgver=1.967015
+pkgrel=0
+pkgdesc="Generate Recursive-Descent Parsers"
+url="https://metacpan.org/pod/Parse::RecDescent"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev"
+checkdepends="perl-test-warn perl-test-pod"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/J/JT/JTBRAUN/Parse-RecDescent-$pkgver.tar.gz"
+builddir="$srcdir/Parse-RecDescent-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="38adbfc9a88f09d0465d862b845f48c0921ce462ffccaa7ce8b5f1b7090f33f70e7f00f9ee787fd698b5539804412c44f03e7942cf675d53a17a84c3510e5aa4 Parse-RecDescent-1.967015.tar.gz"
diff --git a/user/perl-path-tiny/APKBUILD b/user/perl-path-tiny/APKBUILD
new file mode 100644
index 000000000..0f32e49eb
--- /dev/null
+++ b/user/perl-path-tiny/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-path-tiny
+pkgver=0.108
+pkgrel=0
+pkgdesc="File path utility"
+url="https://metacpan.org/pod/Path::Tiny"
+arch="noarch"
+license="Apache-2.0"
+depends="perl"
+makedepends="perl-dev"
+checkdepends="perl-test-mockrandom"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/Path-Tiny-$pkgver.tar.gz"
+builddir="$srcdir/Path-Tiny-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="21cbc8ec84474a2fc14b77a2c8b659676d4842a87a7572497c0dd6ba1c2e5f91cdefa30fc9578fdc416d8c8ee4155ff302833925c1fdf9242c898ba6a0ebee13 Path-Tiny-0.108.tar.gz"
diff --git a/user/perl-pegex/APKBUILD b/user/perl-pegex/APKBUILD
new file mode 100644
index 000000000..468e3d7a4
--- /dev/null
+++ b/user/perl-pegex/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-pegex
+pkgver=0.67
+pkgrel=0
+pkgdesc="Acmeist PEG Parser Framework"
+url="https://metacpan.org/pod/Pegex"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev perl-file-sharedir-install"
+checkdepends="perl-yaml-libyaml"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/I/IN/INGY/Pegex-$pkgver.tar.gz"
+builddir="$srcdir/Pegex-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="905e22e54bdf8050bc470a2184d8b2444f583cae82b450f2e94e00ff78441687636927bf814a8f1a1e35a4b6126a6b7270d43b3dd55d68718a8c709176412274 Pegex-0.67.tar.gz"
diff --git a/user/perl-perl-tidy/APKBUILD b/user/perl-perl-tidy/APKBUILD
new file mode 100644
index 000000000..84361f161
--- /dev/null
+++ b/user/perl-perl-tidy/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-perl-tidy
+pkgver=20180220
+pkgrel=0
+pkgdesc="Indent and reformat Perl scripts"
+url="https://metacpan.org/release/Perl-Tidy"
+arch="noarch"
+license="GPL-2.0-only"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/S/SH/SHANCOCK/Perl-Tidy-$pkgver.tar.gz"
+builddir="$srcdir/Perl-Tidy-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="93bdf2c18efdd9d62d5bb666ded9d9502a722370049a2a51f9d41107d7fa67acd91dfdd184a11eaab287f11a901ad686585e959f09407b0493719d19ce5d842e Perl-Tidy-20180220.tar.gz"
diff --git a/user/perl-perlio-utf8_strict/APKBUILD b/user/perl-perlio-utf8_strict/APKBUILD
new file mode 100644
index 000000000..d3efd36ae
--- /dev/null
+++ b/user/perl-perlio-utf8_strict/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-perlio-utf8_strict
+pkgver=0.007
+pkgrel=0
+pkgdesc="Fast and correct UTF-8 I/O for Perl"
+url="https://metacpan.org/release/PerlIO-utf8_strict"
+arch="all"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+checkdepends="perl-test-exception"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/L/LE/LEONT/PerlIO-utf8_strict-$pkgver.tar.gz"
+builddir="$srcdir/PerlIO-utf8_strict-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="0d39be9bcbab4cea087f59c67dc1af6773b6258c5e836590ff58cc18bf3392ba6e95c55a0c7ce94236e0be7053802b4b1d6010130355e1a973a3698aaf49af0f PerlIO-utf8_strict-0.007.tar.gz"
diff --git a/user/perl-pod-coverage/APKBUILD b/user/perl-pod-coverage/APKBUILD
new file mode 100644
index 000000000..39ef36d1b
--- /dev/null
+++ b/user/perl-pod-coverage/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-pod-coverage
+pkgver=0.23
+pkgrel=0
+pkgdesc="Checks if the documentation of a module is comprehensive"
+url="https://metacpan.org/pod/Pod::Coverage"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl perl-devel-symdump"
+makedepends="perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/R/RC/RCLAMP/Pod-Coverage-$pkgver.tar.gz"
+builddir="$srcdir/Pod-Coverage-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="64760bcaf37b22a1308b665bcccb9273e3f7d12c9a96e4a2c4a0fddd4b528e2b476dcfeb654dc52ef3f40f64f2e7a1e860647f139dc53909c7696f406b7a312e Pod-Coverage-0.23.tar.gz"
diff --git a/user/perl-role-tiny/APKBUILD b/user/perl-role-tiny/APKBUILD
new file mode 100644
index 000000000..b0552ccfb
--- /dev/null
+++ b/user/perl-role-tiny/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-role-tiny
+pkgver=2.000006
+pkgrel=0
+pkgdesc="A minimalist role composition tool"
+url="https://metacpan.org/pod/Role::Tiny"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/H/HA/HAARG/Role-Tiny-$pkgver.tar.gz"
+builddir="$srcdir/Role-Tiny-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="7640196c4bc1bf7a5437c57f0137f3bbf7c5fb92b9614805f16fec41dfb87a8bf6b7f3348ceade0800bccd72c4e5b72bcd4ab8bf28768ecda9d912c1b4c78047 Role-Tiny-2.000006.tar.gz"
diff --git a/user/perl-scope-guard/APKBUILD b/user/perl-scope-guard/APKBUILD
new file mode 100644
index 000000000..121aa0f5f
--- /dev/null
+++ b/user/perl-scope-guard/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-scope-guard
+pkgver=0.21
+pkgrel=0
+pkgdesc="Lexically-scoped Perl resource management"
+url="https://metacpan.org/release/Scope-Guard"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/C/CH/CHOCOLATE/Scope-Guard-$pkgver.tar.gz"
+builddir="$srcdir/Scope-Guard-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="65492e08ab79dc323649166e83ffc13c6f1fffaa9c60d581d8854dfe427a54a3c3c5e4d8b90308d4b1a31a1a54c7977b4e1d36fc9005c6e716c2361ce187fc9f Scope-Guard-0.21.tar.gz"
diff --git a/user/perl-specio-library-path-tiny/APKBUILD b/user/perl-specio-library-path-tiny/APKBUILD
new file mode 100644
index 000000000..907d3245d
--- /dev/null
+++ b/user/perl-specio-library-path-tiny/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-specio-library-path-tiny
+pkgver=0.04
+pkgrel=0
+pkgdesc="Path::Tiny types and coercions for Specio"
+url="https://metacpan.org/release/Specio-Library-Path-Tiny"
+arch="noarch"
+license="Apache-2.0"
+depends="perl-file-pushd perl-path-tiny perl-specio"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Specio-Library-Path-Tiny-$pkgver.tar.gz"
+builddir="$srcdir/Specio-Library-Path-Tiny-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="22ecd74d31a2ee4be2deac887b178d571c31aac1867838b38cb362ee6f5deaf3082282d39241a3432bfc14db86651a13283be68b0e23e224cf8ff502503d17de Specio-Library-Path-Tiny-0.04.tar.gz"
diff --git a/user/perl-specio/APKBUILD b/user/perl-specio/APKBUILD
new file mode 100644
index 000000000..d8a78f519
--- /dev/null
+++ b/user/perl-specio/APKBUILD
@@ -0,0 +1,36 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-specio
+pkgver=0.42
+pkgrel=0
+pkgdesc="Type constraints and coercions for Perl"
+url="https://metacpan.org/release/Specio"
+arch="noarch"
+license="Artistic-2.0"
+depends="perl-devel-stacktrace perl-eval-closure perl-mro-compat
+ perl-module-runtime perl-role-tiny perl-sub-quote perl-test-fatal
+ perl-try-tiny"
+makedepends="perl-dev"
+checkdepends="perl-test-needs"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DR/DROLSKY/Specio-$pkgver.tar.gz"
+builddir="$srcdir/Specio-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="7a9ff3e96cf3957d7857cd5f6af5efd9e35fc4c888fcd8177041e34a2388f54269e7a3da84ec60961fb61307beb882ebf54e19ae4346876e06197b1ff57891a0 Specio-0.42.tar.gz"
diff --git a/user/perl-string-shellquote/APKBUILD b/user/perl-string-shellquote/APKBUILD
new file mode 100644
index 000000000..eb310c686
--- /dev/null
+++ b/user/perl-string-shellquote/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-string-shellquote
+pkgver=1.04
+pkgrel=0
+pkgdesc="Quote strings for passing through to the shell"
+url="https://metacpan.org/release/String-ShellQuote"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/R/RO/ROSCH/String-ShellQuote-$pkgver.tar.gz"
+builddir="$srcdir/String-ShellQuote-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="f5b472985fb9c15d5c82c03b5c6c90a3a545ada854b90a96cfb7b0f57b8a817707ed91ca0f20344a2b8d200fe365ea737a9b39b64d526310d41ac2466552236d String-ShellQuote-1.04.tar.gz"
diff --git a/user/perl-sub-exporter-progressive/APKBUILD b/user/perl-sub-exporter-progressive/APKBUILD
new file mode 100644
index 000000000..a744538c5
--- /dev/null
+++ b/user/perl-sub-exporter-progressive/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-sub-exporter-progressive
+pkgver=0.001013
+pkgrel=0
+pkgdesc="Only use Sub::Exporter if you need it"
+url="https://metacpan.org/pod/Sub::Exporter::Progressive"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl perl-sub-exporter"
+makedepends="perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/F/FR/FREW/Sub-Exporter-Progressive-$pkgver.tar.gz"
+builddir="$srcdir/Sub-Exporter-Progressive-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="28d0ac6a380a4fc1515bd69320bcfd073c0c0e92ea34bb924972aa46fb2f6912485d686f0eca5d5b885d8b06927250dfaacd1a7ff86ba029f879a183cba546c4 Sub-Exporter-Progressive-0.001013.tar.gz"
diff --git a/user/perl-sub-identify/APKBUILD b/user/perl-sub-identify/APKBUILD
new file mode 100644
index 000000000..10e60ed79
--- /dev/null
+++ b/user/perl-sub-identify/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-sub-identify
+pkgver=0.14
+pkgrel=0
+pkgdesc="Retrieve names of Perl code references"
+url="https://metacpan.org/release/Sub-Identify"
+arch="all"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/R/RG/RGARCIA/Sub-Identify-$pkgver.tar.gz"
+builddir="$srcdir/Sub-Identify-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="f69f542c84c5c3ca1f1c7f5f58fd2cf19279a65229f43117c31f24ab0e49d5f329bef2bc00f22252fd2e52b4e17f16b279dac438920668e046e59f2e22e52c14 Sub-Identify-0.14.tar.gz"
diff --git a/user/perl-sub-name/APKBUILD b/user/perl-sub-name/APKBUILD
new file mode 100644
index 000000000..656a7a7ee
--- /dev/null
+++ b/user/perl-sub-name/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-sub-name
+pkgver=0.21
+pkgrel=0
+pkgdesc="Rename a Perl sub"
+url="https://metacpan.org/release/Sub-Name"
+arch="all"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/E/ET/ETHER/Sub-Name-$pkgver.tar.gz"
+builddir="$srcdir/Sub-Name-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="94be57b569f6c434ec3ef4fdff1a9d946067cf6c7ee58f716f4bc188764ee103f9a2579ee0ddf4068ec6889c186d9d447d8252a5dd2a0e882719239ac1102294 Sub-Name-0.21.tar.gz"
diff --git a/user/perl-sub-quote/APKBUILD b/user/perl-sub-quote/APKBUILD
new file mode 100644
index 000000000..778b7f793
--- /dev/null
+++ b/user/perl-sub-quote/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-sub-quote
+pkgver=2.005001
+pkgrel=0
+pkgdesc="Efficient generation of subroutines via string eval"
+url="https://metacpan.org/release/Sub-Quote"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev perl-test-fatal"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/H/HA/HAARG/Sub-Quote-$pkgver.tar.gz"
+builddir="$srcdir/Sub-Quote-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="3c32348c8ac6a8831faf75b084a6108657a3cfc0841fda8d8a182c4ca38c88f800bc60a01df07a2010b9a877e120fc46720f17f11092de5e97f40c36854ba24c Sub-Quote-2.005001.tar.gz"
diff --git a/user/perl-task-freecellsolver-testing/APKBUILD b/user/perl-task-freecellsolver-testing/APKBUILD
new file mode 100644
index 000000000..c31fc7b7d
--- /dev/null
+++ b/user/perl-task-freecellsolver-testing/APKBUILD
@@ -0,0 +1,38 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-task-freecellsolver-testing
+pkgver=0.0.11
+pkgrel=0
+pkgdesc="Perl module for testing the Freecell Solver package"
+url="https://metacpan.org/release/Task-FreecellSolver-Testing"
+arch="noarch"
+license="MIT"
+depends="perl-code-tidyall perl-env-path perl-file-which
+ perl-games-solitaire-verify perl-inline perl-inline-c
+ perl-list-moreutils perl-moo perl-moox perl-moox-late perl-path-tiny
+ perl-string-shellquote perl-task-test-run-allplugins
+ perl-template-toolkit perl-test-data-split perl-test-differences
+ perl-test-perltidy perl-test-runvalgrind perl-test-trailingspace"
+makedepends="perl-dev perl-module-build"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/Task-FreecellSolver-Testing-v$pkgver.tar.gz"
+builddir="$srcdir/Task-FreecellSolver-Testing-v$pkgver"
+
+build() {
+ cd "$builddir"
+ perl Build.PL installdirs=vendor
+ ./Build
+}
+
+check() {
+ cd "$builddir"
+ ./Build test
+}
+
+package() {
+ cd "$builddir"
+ ./Build install destdir="$pkgdir"
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="85c3d7e68e0fa14abac2442ec7b6e90cc4df9f6733fbd87e5a872043a03a71d8cd3a262c816d861a1c729646ff379665c1d5d6e0bc80ae476db089d9d3793b82 Task-FreecellSolver-Testing-v0.0.11.tar.gz"
diff --git a/user/perl-task-test-run-allplugins/APKBUILD b/user/perl-task-test-run-allplugins/APKBUILD
new file mode 100644
index 000000000..1afce955b
--- /dev/null
+++ b/user/perl-task-test-run-allplugins/APKBUILD
@@ -0,0 +1,38 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: A. Wilcox <awilfox@adelielinux.org>
+pkgname=perl-task-test-run-allplugins
+pkgver=0.0105
+pkgrel=0
+pkgdesc="Install all the Test::Run plugins"
+url="https://metacpan.org/release/Task-Test-Run-AllPlugins"
+arch="noarch"
+license="MIT"
+depends="perl-test-run perl-test-run-cmdline
+ perl-test-run-plugin-alternateinterpreters
+ perl-test-run-plugin-breakonfailure
+ perl-test-run-plugin-colourfileverdicts
+ perl-test-run-plugin-coloursummary
+ perl-test-run-plugin-trimdisplayedfilenames"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/Task-Test-Run-AllPlugins-$pkgver.tar.gz"
+builddir="$srcdir/Task-Test-Run-AllPlugins-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="5d2baa82658a3a80b07fd22d1ca2ccf7a1ff528685f8044fe5b152130957465d4bd1b032a2a02c966e7739d3b947b709bffabf96d74b77fe6c65479f6f09f964 Task-Test-Run-AllPlugins-0.0105.tar.gz"
diff --git a/user/perl-template-toolkit/APKBUILD b/user/perl-template-toolkit/APKBUILD
new file mode 100644
index 000000000..e8547949a
--- /dev/null
+++ b/user/perl-template-toolkit/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-template-toolkit
+pkgver=2.27
+pkgrel=0
+pkgdesc="Comprehensive template processing system"
+url="https://metacpan.org/release/Template-Toolkit"
+arch="all"
+license="Artistic-1.0-Perl"
+depends="perl-appconfig"
+makedepends="perl-dev"
+checkdepends="perl-cgi perl-test-leaktrace"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/A/AB/ABW/Template-Toolkit-$pkgver.tar.gz"
+builddir="$srcdir/Template-Toolkit-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="17f03a01a3d6ab0ef2247c77da15c46d9bbce3e0158172162da6abe47f53c5e7ca041a7c31506bb3a37f31c476ba747f5111c5b1b1d69614a4ce3352927fd4e6 Template-Toolkit-2.27.tar.gz"
diff --git a/user/perl-test-class-most/APKBUILD b/user/perl-test-class-most/APKBUILD
new file mode 100644
index 000000000..fe48ea68e
--- /dev/null
+++ b/user/perl-test-class-most/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-class-most
+pkgver=0.08
+pkgrel=0
+pkgdesc="Test Perl classes the easy way"
+url="https://metacpan.org/release/Test-Class-Most"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-test-class perl-test-most"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/O/OV/OVID/Test-Class-Most-$pkgver.tar.gz"
+builddir="$srcdir/Test-Class-Most-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="30284e5c186727df87688176e3fb8683000796c8fc2f45d243c8a2ad42d4d52e840ca6f0baedf5dc9a7b6a246472ff96c92d0c407dbd65c5152a7cf5a61003c1 Test-Class-Most-0.08.tar.gz"
diff --git a/user/perl-test-class/APKBUILD b/user/perl-test-class/APKBUILD
new file mode 100644
index 000000000..6043308d4
--- /dev/null
+++ b/user/perl-test-class/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-class
+pkgver=0.50
+pkgrel=0
+pkgdesc="Create Perl test classes in xUnit/JUnit style"
+url="https://metacpan.org/release/Test-Class"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-module-runtime perl-mro-compat perl-try-tiny"
+makedepends="perl-dev"
+checkdepends="perl-test-exception"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/E/ET/ETHER/Test-Class-$pkgver.tar.gz"
+builddir="$srcdir/Test-Class-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="27ae19f60a916f5a23cccdc02ff6168e76d5f1cee5df196df4fe50024f7270ee9eaffdf02e9b6de70565c9b6b30606ad0a30477ac8951164b87c641caf960dcc Test-Class-0.50.tar.gz"
diff --git a/user/perl-test-cleannamespaces/APKBUILD b/user/perl-test-cleannamespaces/APKBUILD
new file mode 100644
index 000000000..718bc3a27
--- /dev/null
+++ b/user/perl-test-cleannamespaces/APKBUILD
@@ -0,0 +1,36 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-cleannamespaces
+pkgver=0.23
+pkgrel=0
+pkgdesc="Check Perl code for uncleaned imports"
+url="https://metacpan.org/release/Test-CleanNamespaces"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-file-pushd perl-module-runtime perl-namespace-clean
+ perl-package-stash perl-sub-identify"
+makedepends="perl-dev"
+checkdepends="perl-moo perl-mouse perl-sub-exporter perl-test-deep
+ perl-test-needs perl-test-warnings"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/E/ET/ETHER/Test-CleanNamespaces-$pkgver.tar.gz"
+builddir="$srcdir/Test-CleanNamespaces-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="c40587c09bcd6a6ebc6801e12a3d33fcd2695b650fe02546a8a6da7d038ba5b1218d730a09f3b8942824a0506aca3edfcbcdf204906569dad5c46816b91e8a99 Test-CleanNamespaces-0.23.tar.gz"
diff --git a/user/perl-test-data-split/APKBUILD b/user/perl-test-data-split/APKBUILD
new file mode 100644
index 000000000..0e5269e41
--- /dev/null
+++ b/user/perl-test-data-split/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-data-split
+pkgver=0.2.1
+pkgrel=0
+pkgdesc="Split data-driven Perl tests into several test scripts"
+url="https://metacpan.org/release/Test-Data-Split"
+arch="noarch"
+license="MIT"
+depends="perl-io-all perl-list-moreutils perl-moox perl-moox-late"
+makedepends="perl-dev perl-module-build"
+checkdepends="perl-test-differences"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/Test-Data-Split-$pkgver.tar.gz"
+builddir="$srcdir/Test-Data-Split-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="db6ae688318b6cd98cbbdf0c94e7a1d5ea52c96262d7ed5e1aea2a2380cfa851c468d8775c3cd5520f9e5e8bfdc67e367d66d0027f1452d208250c88f76bffae Test-Data-Split-0.2.1.tar.gz"
diff --git a/user/perl-test-deep/APKBUILD b/user/perl-test-deep/APKBUILD
new file mode 100644
index 000000000..0c488f4e2
--- /dev/null
+++ b/user/perl-test-deep/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-deep
+pkgver=1.128
+pkgrel=0
+pkgdesc="Extremely flexible deep comparison"
+url="https://metacpan.org/pod/Test::Deep"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/R/RJ/RJBS/Test-Deep-$pkgver.tar.gz"
+builddir="$srcdir/Test-Deep-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="d4642b3268a10d8e882beabfbb3b3bf891a57aa7ebb74bc4919a4368df9c9acd2351498401538ae50299071f99e06b4443686d20f8c9f95f5fd588309ccee302 Test-Deep-1.128.tar.gz"
diff --git a/user/perl-test-differences/APKBUILD b/user/perl-test-differences/APKBUILD
new file mode 100644
index 000000000..64a93147b
--- /dev/null
+++ b/user/perl-test-differences/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-differences
+pkgver=0.64
+pkgrel=0
+pkgdesc="Test strings and data structures and show differences if not ok"
+url="https://metacpan.org/pod/Test::Differences"
+arch="noarch"
+license="Artistic-1.0-Perl OR GPL-1.0"
+depends="perl perl-text-diff perl-capture-tiny perl-test-pod-coverage perl-test-pod"
+makedepends="perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DC/DCANTRELL/Test-Differences-$pkgver.tar.gz"
+builddir="$srcdir/Test-Differences-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="118a4b8e3f61f64d6676c82913bb605a843a408f3fc5d960b40cc86f10423380a203b2a5604e15ba8d4e0cff96af88b551fba1c7aa2ada3c0ef408a27ee5f069 Test-Differences-0.64.tar.gz"
diff --git a/user/perl-test-file/APKBUILD b/user/perl-test-file/APKBUILD
new file mode 100644
index 000000000..947598ca1
--- /dev/null
+++ b/user/perl-test-file/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-file
+pkgver=1.443
+pkgrel=0
+pkgdesc="Test file attributes"
+url="https://metacpan.org/pod/Test::File"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev"
+checkdepends="perl-test-pod perl-test-pod-coverage perl-test-utf8"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/B/BD/BDFOY/Test-File-$pkgver.tar.gz"
+builddir="$srcdir/Test-File-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="9ad66b3a9dc1c3752a4ec22934db9139ac010ac3237a3de018d4ec4a65ac047f0152ab9e7979a2615412c1af02a1f2dfa0dbfdf5eba5358628b1b443232c45b2 Test-File-1.443.tar.gz"
diff --git a/user/perl-test-mockrandom/APKBUILD b/user/perl-test-mockrandom/APKBUILD
new file mode 100644
index 000000000..ddf840a56
--- /dev/null
+++ b/user/perl-test-mockrandom/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-mockrandom
+pkgver=1.01
+pkgrel=0
+pkgdesc="Replaces random number generation with non-random number generation"
+url="https://metacpan.org/pod/Test::MockRandom"
+arch="noarch"
+license="Apache-2.0"
+depends="perl"
+makedepends="perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/Test-MockRandom-$pkgver.tar.gz"
+builddir="$srcdir/Test-MockRandom-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="e222bd0d3d7673b403e80d1633ddaca0ee35f96f2245e8df859d661edc7efc09b9a96d3718f25b6614395d1f24d66c9498e842cec476cf8c5b12464d585f85e7 Test-MockRandom-1.01.tar.gz"
diff --git a/user/perl-test-most/APKBUILD b/user/perl-test-most/APKBUILD
new file mode 100644
index 000000000..34cd800f8
--- /dev/null
+++ b/user/perl-test-most/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-most
+pkgver=0.35
+pkgrel=0
+pkgdesc="Most commonly needed Perl test functions and features"
+url="https://metacpan.org/release/Test-Most"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-exception-class perl-test-deep perl-test-differences perl-test-exception perl-test-warn"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/O/OV/OVID/Test-Most-$pkgver.tar.gz"
+builddir="$srcdir/Test-Most-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="1b2d201811e59d7afce47ff5f7da67c170d4685ffbec23360757b5cacc9fe72fc82609bc46cc9d8e351fdb75715696457c201dd94fadaeca70a6f31690236291 Test-Most-0.35.tar.gz"
diff --git a/user/perl-test-perltidy/APKBUILD b/user/perl-test-perltidy/APKBUILD
new file mode 100644
index 000000000..392257c83
--- /dev/null
+++ b/user/perl-test-perltidy/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-perltidy
+pkgver=20130104
+pkgrel=0
+pkgdesc="Check all your Perl files for tidiness"
+url="https://metacpan.org/release/Test-PerlTidy"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-file-finder perl-file-slurp perl-perl-tidy perl-text-diff"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/L/LA/LARRYL/Test-PerlTidy-$pkgver.tar.gz"
+builddir="$srcdir/Test-PerlTidy-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="47d77083ec6f4808ac60bdb19431b3013b996f83506b0af490a6fa52f4f71a8c1812cf21b447568661495c845d524f9c2be6842380bd41c9ccfe22ec6acd802f Test-PerlTidy-20130104.tar.gz"
diff --git a/user/perl-test-pod-coverage/APKBUILD b/user/perl-test-pod-coverage/APKBUILD
new file mode 100644
index 000000000..903724f9b
--- /dev/null
+++ b/user/perl-test-pod-coverage/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-pod-coverage
+pkgver=1.10
+pkgrel=0
+pkgdesc="Check for pod coverage in your distribution"
+url="https://metacpan.org/pod/Test::Pod::Coverage"
+arch="noarch"
+license="Artistic-2.0"
+depends="perl perl-pod-coverage"
+makedepends="perl-dev"
+checkdepends="perl-test-pod"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/N/NE/NEILB/Test-Pod-Coverage-$pkgver.tar.gz"
+builddir="$srcdir/Test-Pod-Coverage-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="ebcebb900f4367984245d1915937200e2de8586a6e6ea9c9b71588e56caf68808ee73c21e633434ab5c43b80b42dd56cb0cbd4e67519e928270e1eda06c1d02c Test-Pod-Coverage-1.10.tar.gz"
diff --git a/user/perl-test-run-cmdline/APKBUILD b/user/perl-test-run-cmdline/APKBUILD
new file mode 100644
index 000000000..42d624844
--- /dev/null
+++ b/user/perl-test-run-cmdline/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-run-cmdline
+pkgver=0.0131
+pkgrel=0
+pkgdesc="Analyse tests from the command line using Perl Test::Run"
+url="https://metacpan.org/release/Test-Run-CmdLine"
+arch="noarch"
+license="MIT"
+depends="perl-moose perl-moosex-getopt perl-test-run perl-universal-require
+ perl-yaml-libyaml"
+makedepends="perl-dev"
+checkdepends="perl-test-trap"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/Test-Run-CmdLine-$pkgver.tar.gz"
+builddir="$srcdir/Test-Run-CmdLine-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="b55ccae6a8cd453fa13083eabf63afa0f01eebe2c244cb5d4118b1be3ecab8077b77e03bef768254a84bd38b1cfb00e9f7053349696fd64fbc670ed43bd54357 Test-Run-CmdLine-0.0131.tar.gz"
diff --git a/user/perl-test-run-plugin-ai/APKBUILD b/user/perl-test-run-plugin-ai/APKBUILD
new file mode 100644
index 000000000..3537a1197
--- /dev/null
+++ b/user/perl-test-run-plugin-ai/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-run-plugin-alternateinterpreters
+pkgver=0.0124
+pkgrel=0
+pkgdesc="Define different interpreters for test scripts with Perl Test::Run"
+url="https://metacpan.org/release/Test-Run-Plugin-AlternateInterpreters"
+arch="noarch"
+license="MIT"
+depends="perl-moose perl-mro-compat perl-test-run perl-test-run-cmdline"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/Test-Run-Plugin-AlternateInterpreters-$pkgver.tar.gz"
+builddir="$srcdir/Test-Run-Plugin-AlternateInterpreters-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="54649bde2b97eb7dfeef5392a63787e4ce10c37474acf27f35ab7b466a05564f98be82d99690963b3249c1585ab986e25ac2cf2be72c13b460d467d90b4de719 Test-Run-Plugin-AlternateInterpreters-0.0124.tar.gz"
diff --git a/user/perl-test-run-plugin-bof/APKBUILD b/user/perl-test-run-plugin-bof/APKBUILD
new file mode 100644
index 000000000..e776778b6
--- /dev/null
+++ b/user/perl-test-run-plugin-bof/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-run-plugin-breakonfailure
+pkgver=0.0.5
+pkgrel=0
+pkgdesc="Stop processing entire Test::Run suite on single failure"
+url="https://metacpan.org/release/Test-Run-Plugin-BreakOnFailure"
+arch="noarch"
+license="MIT"
+depends="perl-moose perl-mro-compat perl-test-run perl-test-run-cmdline"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/Test-Run-Plugin-BreakOnFailure-v$pkgver.tar.gz"
+builddir="$srcdir/Test-Run-Plugin-BreakOnFailure-v$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="a3e25847e0277ea32803b0eec68061471644f7bba03d9dd558d5a15c6dbe8615d933f6d4ee6851f217511434be933be1a848ee0d9b46c545ae37a0abc59a0a72 Test-Run-Plugin-BreakOnFailure-v0.0.5.tar.gz"
diff --git a/user/perl-test-run-plugin-cfv/APKBUILD b/user/perl-test-run-plugin-cfv/APKBUILD
new file mode 100644
index 000000000..3fa80c7d2
--- /dev/null
+++ b/user/perl-test-run-plugin-cfv/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-run-plugin-colourfileverdicts
+pkgver=0.0124
+pkgrel=0
+pkgdesc="Make Perl Test::Run file verdicts (ok, not ok) colourful"
+url="https://metacpan.org/release/Test-Run-Plugin-ColorFileVerdicts"
+arch="noarch"
+license="MIT"
+depends="perl-moose perl-mro-compat perl-test-run perl-test-run-cmdline"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+provides="perl-test-run-plugin-colorfileverdicts=$pkgver-r$pkgrel"
+source="https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/Test-Run-Plugin-ColorFileVerdicts-$pkgver.tar.gz"
+builddir="$srcdir/Test-Run-Plugin-ColorFileVerdicts-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="405eb2e58b6c76fba3f5e0737e5816e8d4ef69d7fb3b7e81d8cfce10cd847d02339bc6802bb935009a27e5eb2ed16f8535280d7abb4ce5b6d1a26c9b2f99f117 Test-Run-Plugin-ColorFileVerdicts-0.0124.tar.gz"
diff --git a/user/perl-test-run-plugin-cs/APKBUILD b/user/perl-test-run-plugin-cs/APKBUILD
new file mode 100644
index 000000000..4dff25604
--- /dev/null
+++ b/user/perl-test-run-plugin-cs/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-run-plugin-coloursummary
+pkgver=0.0202
+pkgrel=0
+pkgdesc="Perl Test::Run plugin that colours test summary"
+url="https://metacpan.org/release/Test-Run-Plugin-ColorSummary"
+arch="noarch"
+license="MIT"
+depends="perl-moose perl-mro-compat perl-test-run perl-test-run-cmdline"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+provides="perl-test-run-plugin-colorsummary=$pkgver-r$pkgrel"
+source="https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/Test-Run-Plugin-ColorSummary-$pkgver.tar.gz"
+builddir="$srcdir/Test-Run-Plugin-ColorSummary-$pkgver"
+
+build() {
+ cd "$builddir"
+ perl Build.PL installdirs=vendor
+ ./Build
+}
+
+check() {
+ cd "$builddir"
+ ./Build test
+}
+
+package() {
+ cd "$builddir"
+ ./Build install destdir="$pkgdir"
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="c5ab0c50379a8527f613dd9663573a89f4be2336c51789fa11c9cd2ddb9a416fb60b63b8ce6bdd121b10fae3ecd2fa306f523f0c27e84bcd7b3e234882c1d7ef Test-Run-Plugin-ColorSummary-0.0202.tar.gz"
diff --git a/user/perl-test-run-plugin-tdf/APKBUILD b/user/perl-test-run-plugin-tdf/APKBUILD
new file mode 100644
index 000000000..34b106e39
--- /dev/null
+++ b/user/perl-test-run-plugin-tdf/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-run-plugin-trimdisplayedfilenames
+pkgver=0.0125
+pkgrel=0
+pkgdesc="Handle excessively long filenames in Perl Test::Run suites"
+url="https://metacpan.org/release/Test-Run-Plugin-TrimDisplayedFilenames"
+arch="noarch"
+license="MIT"
+depends="perl-moose perl-mro-compat perl-test-run perl-test-run-cmdline"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/Test-Run-Plugin-TrimDisplayedFilenames-$pkgver.tar.gz"
+builddir="$srcdir/Test-Run-Plugin-TrimDisplayedFilenames-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="79bdfc093e8a4ce16fe933ebe367e71c27eb67500a6fd1ce57e51a5998f35cbf3f6afe143c74ce82e1e5ab700399fec48b0acbb9e23cc7796a8aa5cdc2bd9ea3 Test-Run-Plugin-TrimDisplayedFilenames-0.0125.tar.gz"
diff --git a/user/perl-test-run/APKBUILD b/user/perl-test-run/APKBUILD
new file mode 100644
index 000000000..ccf3e975d
--- /dev/null
+++ b/user/perl-test-run/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-run
+pkgver=0.0304
+pkgrel=0
+pkgdesc="Perl classes to run standard TAP scripts"
+url="https://metacpan.org/release/Test-Run"
+arch="noarch"
+license="MIT"
+depends="perl-ipc-system-simple perl-list-moreutils perl-moose
+ perl-moosex-strictconstructor perl-test-trap perl-text-sprintf-named
+ perl-universal-require"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/Test-Run-$pkgver.tar.gz"
+builddir="$srcdir/Test-Run-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="05a4f5e621194319263b33a68a5a733062b6f17a0b08c32ad02a1fece4ff7072305ae6305494c9a0d8e03fb9ae2e4b1c9a044e591c1b30968f08adfed0fe3c37 Test-Run-0.0304.tar.gz"
diff --git a/user/perl-test-runvalgrind/APKBUILD b/user/perl-test-runvalgrind/APKBUILD
new file mode 100644
index 000000000..c6f31b336
--- /dev/null
+++ b/user/perl-test-runvalgrind/APKBUILD
@@ -0,0 +1,36 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-runvalgrind
+pkgver=0.2.0
+pkgrel=0
+pkgdesc="Tests an external program is 'valgrind clean' from Perl"
+url="https://metacpan.org/release/Test-RunValgrind"
+arch="noarch"
+license="MIT"
+depends="perl-path-tiny perl-test-trap"
+makedepends="perl-dev perl-module-build"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/Test-RunValgrind-$pkgver.tar.gz
+ portable-memory-assumptions.patch
+ "
+builddir="$srcdir/Test-RunValgrind-$pkgver"
+
+build() {
+ cd "$builddir"
+ perl Build.PL installdirs=vendor
+ ./Build
+}
+
+check() {
+ cd "$builddir"
+ ./Build test
+}
+
+package() {
+ cd "$builddir"
+ ./Build install destdir="$pkgdir"
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="e85547d24fb7c8b0a8fd1a84826eec51d3c4c94d83cbb525517515ecc27b0ba530378a10f8a2ffee9fb1f48eb2e65a6a2654738ee069bd85adcec7f4c205f143 Test-RunValgrind-0.2.0.tar.gz
+f2ebba2310df820666728e5f59c44f5b63cd03efdb42092f22700da13b4f099ae5c911292fb2a0f271f7629343727ea14c5953d2918c98419a580e5a998cb650 portable-memory-assumptions.patch"
diff --git a/user/perl-test-runvalgrind/portable-memory-assumptions.patch b/user/perl-test-runvalgrind/portable-memory-assumptions.patch
new file mode 100644
index 000000000..927da1194
--- /dev/null
+++ b/user/perl-test-runvalgrind/portable-memory-assumptions.patch
@@ -0,0 +1,14 @@
+Upstream: https://github.com/shlomif/perl-Test-RunValgrind/issues/5
+
+--- Test-RunValgrind-0.2.0/lib/Test/RunValgrind.pm.old 2018-01-26 18:07:19.000000000 +0000
++++ Test-RunValgrind-0.2.0/lib/Test/RunValgrind.pm 2018-10-02 22:42:05.450000000 +0000
+@@ -80,7 +80,8 @@
+ index( $$out_text, q{ERROR SUMMARY: 0 errors from 0 contexts} ) >= 0
+ )
+ && ( $self->_ignore_leaks
+- || ( index( $$out_text, q{in use at exit: 0 bytes} ) >= 0 ) )
++ || ( index( $$out_text, q{in use at exit: 0 bytes} ) >= 0 )
++ || ( index( $$out_text, q{still reachable: 0 bytes} ) >= 0 ) )
+ );
+ }
+
diff --git a/user/perl-test-trailingspace/APKBUILD b/user/perl-test-trailingspace/APKBUILD
new file mode 100644
index 000000000..ccaf8e873
--- /dev/null
+++ b/user/perl-test-trailingspace/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-trailingspace
+pkgver=0.0301
+pkgrel=0
+pkgdesc="Test for trailing spaces in Perl source files"
+url="https://metacpan.org/release/Test-TrailingSpace"
+arch="noarch"
+license="MIT"
+depends="perl-file-find-object-rule"
+makedepends="perl-dev perl-module-build"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/Test-TrailingSpace-$pkgver.tar.gz"
+builddir="$srcdir/Test-TrailingSpace-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="9ec511759b12265c2a98a06a54081e0ca0377e707b29174fb874fd505330e0abfafebe910f7ceba9f8a6bcbfcf5d74fc8ffdca2e17b9cad15c207213449085d4 Test-TrailingSpace-0.0301.tar.gz"
diff --git a/user/perl-test-trap/APKBUILD b/user/perl-test-trap/APKBUILD
new file mode 100644
index 000000000..c230f6f23
--- /dev/null
+++ b/user/perl-test-trap/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: A. Wilcox <awilfox@adelielinux.org>
+pkgname=perl-test-trap
+pkgver=0.3.3
+pkgrel=0
+pkgdesc="Trap Perl exit codes, exceptions, and output"
+url="https://metacpan.org/release/Test-Trap"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-data-dump"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/E/EB/EBHANSSEN/Test-Trap-v$pkgver.tar.gz"
+builddir="$srcdir/Test-Trap-v$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="3a79bb0e201f2c740ea87baffda29141fc41e29b310bc9291da0e1cac0cf7f62a8c5cc70b94b68542cac7d6844d76c7fc1d3bbb91d86f8ba26a489d39883dd1e Test-Trap-v0.3.3.tar.gz"
diff --git a/user/perl-test-utf8/APKBUILD b/user/perl-test-utf8/APKBUILD
new file mode 100644
index 000000000..ee562a170
--- /dev/null
+++ b/user/perl-test-utf8/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-utf8
+pkgver=1.01
+pkgrel=0
+pkgdesc="Handy UTF8 tests"
+url="https://metacpan.org/pod/Test::utf8"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev perl-module-install"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/M/MA/MARKF/Test-utf8-$pkgver.tar.gz"
+builddir="$srcdir/Test-utf8-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="07dcd5ed98a63f7d96bb0fc629b168773d02bb4c93c5bc44ec60738fc29669794547dfde5913f9de682cd583cf85f4d82b6151398aaebcfec9278525447b9c4e Test-utf8-1.01.tar.gz"
diff --git a/user/perl-test-warnings/APKBUILD b/user/perl-test-warnings/APKBUILD
new file mode 100644
index 000000000..9b65d822e
--- /dev/null
+++ b/user/perl-test-warnings/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-test-warnings
+pkgver=0.026
+pkgrel=0
+pkgdesc="Test for warnings and the lack of them"
+url="https://metacpan.org/pod/Test::Warnings"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+makedepends="perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/E/ET/ETHER/Test-Warnings-$pkgver.tar.gz"
+builddir="$srcdir/Test-Warnings-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="510e182299173fa01482cde642fe5d84a77ea2f3b1761c7d8bf855caed963f276134357b4d7662bb3fbf09621ac6e11451fe19bf0ba2cf96bc841c280a624cd4 Test-Warnings-0.026.tar.gz"
diff --git a/user/perl-text-diff/APKBUILD b/user/perl-text-diff/APKBUILD
new file mode 100644
index 000000000..303106e54
--- /dev/null
+++ b/user/perl-text-diff/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-text-diff
+pkgver=1.45
+pkgrel=0
+pkgdesc="Perform diffs on files and record sets"
+url="https://metacpan.org/pod/Text::Diff"
+arch="noarch"
+license="GPL-2.0+ OR Artistic-1.0-Perl"
+depends="perl perl-algorithm-diff"
+makedepends="perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/N/NE/NEILB/Text-Diff-$pkgver.tar.gz"
+builddir="$srcdir/Text-Diff-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="569370707bf30d60d12df6389594bcdba050805005916ac3a485c2226e528891b0af9ecfcc13d20e4f377d2c36a7ff67e51de5ca409c647aa8a36b7a87eab367 Text-Diff-1.45.tar.gz"
diff --git a/user/perl-text-glob/APKBUILD b/user/perl-text-glob/APKBUILD
new file mode 100644
index 000000000..85bbc7a9b
--- /dev/null
+++ b/user/perl-text-glob/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-text-glob
+pkgver=0.11
+pkgrel=0
+pkgdesc="glob(3) style string matching for Perl"
+url="https://metacpan.org/release/Text-Glob"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/R/RC/RCLAMP/Text-Glob-$pkgver.tar.gz"
+builddir="$srcdir/Text-Glob-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="20322fee3f56ee7e65f0f8e5371d9dbbe89895d8b9c9207486e7934e29bd883fb557c9765e406f85f56b67019293d82a0318ded83a9387b164cb5e8f58bef0cb Text-Glob-0.11.tar.gz"
diff --git a/user/perl-text-sprintf-named/APKBUILD b/user/perl-text-sprintf-named/APKBUILD
new file mode 100644
index 000000000..210880dd4
--- /dev/null
+++ b/user/perl-text-sprintf-named/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-text-sprintf-named
+pkgver=0.0403
+pkgrel=0
+pkgdesc="sprintf-like function for Perl with named conversions"
+url="https://metacpan.org/release/Text-Sprintf-Named"
+arch="noarch"
+license="MIT"
+depends="perl-module-build"
+makedepends="perl-dev"
+checkdepends="perl-test-warn"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/Text-Sprintf-Named-$pkgver.tar.gz"
+builddir="$srcdir/Text-Sprintf-Named-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="93e56c8850274625e3156826f57d40820632dde24e9ebbfdf502d83d29c9796faac25a422e5a15d0c97fb67424f9d9abd93437e3eb0818c8338f42a59bc3adb3 Text-Sprintf-Named-0.0403.tar.gz"
diff --git a/user/perl-time-duration-parse/APKBUILD b/user/perl-time-duration-parse/APKBUILD
new file mode 100644
index 000000000..22fbfbe7e
--- /dev/null
+++ b/user/perl-time-duration-parse/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-time-duration-parse
+pkgver=0.14
+pkgrel=0
+pkgdesc="Parse strings in Perl that represent time durations"
+url="https://metacpan.org/release/Time-Duration-Parse"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-exporter-lite perl-time-duration"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/N/NE/NEILB/Time-Duration-Parse-$pkgver.tar.gz"
+builddir="$srcdir/Time-Duration-Parse-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="49dcb7d3979df7e84141ebf9262b2283dfe535502b71633d95424376146d81bbf5d6932035dde878a5b1bef265d84a029412ff0187927569cf48ad193ea2f8e3 Time-Duration-Parse-0.14.tar.gz"
diff --git a/user/perl-time-duration/APKBUILD b/user/perl-time-duration/APKBUILD
new file mode 100644
index 000000000..daf931ee5
--- /dev/null
+++ b/user/perl-time-duration/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-time-duration
+pkgver=1.20
+pkgrel=0
+pkgdesc="Rounded or exact English expression of time durations in Perl"
+url="https://metacpan.org/release/Time-Duration"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/N/NE/NEILB/Time-Duration-$pkgver.tar.gz"
+builddir="$srcdir/Time-Duration-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="74bdcbc2b65061ad30540a95467de24f552235cea2367a7770309d9ffefeb35717f438e4f7ebf6a1d63f338cd714ffe16b3f45808514995db9753d643892d5f9 Time-Duration-1.20.tar.gz"
diff --git a/user/perl-timedate/APKBUILD b/user/perl-timedate/APKBUILD
new file mode 100644
index 000000000..9ecfd67ae
--- /dev/null
+++ b/user/perl-timedate/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-timedate
+pkgver=2.30
+pkgrel=0
+pkgdesc="Date and time handling routines for Perl"
+url="https://metacpan.org/release/TimeDate"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/G/GB/GBARR/TimeDate-$pkgver.tar.gz"
+builddir="$srcdir/TimeDate-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="c6aa7d57fbe82260c7455f74f6dfda55f7c93d7a75914bafb9d09ebfb83b5f57f6bc1e332ab0764d7688d857eb022b0f5e92cf5b685d809c63cdfa93a8d2c221 TimeDate-2.30.tar.gz"
diff --git a/user/perl-type-tiny/APKBUILD b/user/perl-type-tiny/APKBUILD
new file mode 100644
index 000000000..9e4cd812c
--- /dev/null
+++ b/user/perl-type-tiny/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-type-tiny
+pkgver=1.004002
+pkgrel=0
+pkgdesc="Tiny Moo(se) compatible type constraint"
+url="https://metacpan.org/release/Type-Tiny"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends="perl-exporter-tiny"
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/T/TO/TOBYINK/Type-Tiny-$pkgver.tar.gz"
+builddir="$srcdir/Type-Tiny-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="fcdd8740e1ef6a2c5d214a54b57e65ebd222188377ebdd7bbdadc74741f3a5d00ba4a7490628bfb7cc937a32f5d5a578963ea1b6208e8fb99f095f2c3239cf82 Type-Tiny-1.004002.tar.gz"
diff --git a/user/perl-types-serialiser/APKBUILD b/user/perl-types-serialiser/APKBUILD
new file mode 100644
index 000000000..6c34d8215
--- /dev/null
+++ b/user/perl-types-serialiser/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-types-serialiser
+pkgver=1.0
+pkgrel=0
+pkgdesc="Simple data types for common serialisation formats"
+url="https://metacpan.org/pod/Types::Serialiser"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl perl-common-sense"
+makedepends="perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/M/ML/MLEHMANN/Types-Serialiser-$pkgver.tar.gz"
+builddir="$srcdir/Types-Serialiser-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="b786bcd3ee976a6ad948cc98a9c71d2cdcd30f485528eff059091f6d86ae7078c10ba2dc2982326fcf0184dbfbdddea84daff324c6ec6a129fe6aac01253c8fb Types-Serialiser-1.0.tar.gz"
diff --git a/user/perl-universal-require/APKBUILD b/user/perl-universal-require/APKBUILD
new file mode 100644
index 000000000..4bf801678
--- /dev/null
+++ b/user/perl-universal-require/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-universal-require
+pkgver=0.18
+pkgrel=0
+pkgdesc="require() Perl modules from a variable"
+url="https://metacpan.org/release/UNIVERSAL-require"
+arch="noarch"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/N/NE/NEILB/UNIVERSAL-require-$pkgver.tar.gz"
+builddir="$srcdir/UNIVERSAL-require-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="4e1dbb62f850a2f3da3301e37862d03ad89106e9fd55ac8161ae56eff936948f87b9215c734c103d8031e1b712847bff86de43329f65f00e7e34ee83bb66c22d UNIVERSAL-require-0.18.tar.gz"
diff --git a/user/perl-variable-magic/APKBUILD b/user/perl-variable-magic/APKBUILD
new file mode 100644
index 000000000..605369668
--- /dev/null
+++ b/user/perl-variable-magic/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-variable-magic
+pkgver=0.62
+pkgrel=0
+pkgdesc="Associate user-defined magic to variables from Perl"
+url="https://metacpan.org/release/Variable-Magic"
+arch="all"
+license="Artistic-1.0-Perl"
+depends=""
+makedepends="perl-dev"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/V/VP/VPIT/Variable-Magic-$pkgver.tar.gz"
+builddir="$srcdir/Variable-Magic-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="fdaad8ab1a16a4723e30a155086f7f9ecad60b021b0ca5d449a0bc001b858a53e2857cfdc3fc4e3dcc28e2f59a14f3531afd93e3f71fda3b8fcaa8bc50d0c380 Variable-Magic-0.62.tar.gz"
diff --git a/user/perl-x11-xcb/APKBUILD b/user/perl-x11-xcb/APKBUILD
new file mode 100644
index 000000000..070b97db9
--- /dev/null
+++ b/user/perl-x11-xcb/APKBUILD
@@ -0,0 +1,38 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-x11-xcb
+pkgver=0.17
+pkgrel=0
+pkgdesc="Perl bindings for libxcb"
+url="https://metacpan.org/pod/X11::XCB"
+arch="all"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl perl-extutils-pkgconfig perl-extutils-depends
+ perl-xs-object-magic perl-data-dump perl-xml-simple
+ perl-xml-descent perl-mouse perl-mousex-nativetraits"
+makedepends="perl-dev perl-xs-object-magic-dev libxcb-dev
+ xcb-util-dev xcb-util-wm-dev"
+checkdepends="perl-test-deep perl-test-exception"
+options="!check" # Tests require a running X server
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/M/MS/MSTPLBG/X11-XCB-$pkgver.tar.gz"
+builddir="$srcdir/X11-XCB-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make -j1
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="8a5457afdb3b32fd6d425a27dee1a6afbbded222cf71a9d7201ed2c0db0b0b7c803ae3e69a897c510b9b07b79e880efe0cf062ea025d2d3ff7ee16d364c568bc X11-XCB-0.17.tar.gz"
diff --git a/user/perl-xml-descent/APKBUILD b/user/perl-xml-descent/APKBUILD
new file mode 100644
index 000000000..846a4361e
--- /dev/null
+++ b/user/perl-xml-descent/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-xml-descent
+pkgver=1.04
+pkgrel=0
+pkgdesc="Recursive descent XML parsing"
+url="https://metacpan.org/pod/XML::Descent"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl perl-xml-tokeparser"
+makedepends="perl-dev"
+checkdepends="perl-test-pod perl-test-differences"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/A/AN/ANDYA/XML-Descent-$pkgver.tar.gz"
+sha512sums="779a476907ecfbe9c279fa1f476c3aa64de626c515719643be21fef8b945cdd5c1f654a189bf7ea9a6964a88818e101e1eddc019439a5dcb397f56b13bdfa415 XML-Descent-1.04.tar.gz"
+builddir="$srcdir/XML-Descent-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
diff --git a/user/perl-xml-namespacesupport/APKBUILD b/user/perl-xml-namespacesupport/APKBUILD
new file mode 100644
index 000000000..e155f6b32
--- /dev/null
+++ b/user/perl-xml-namespacesupport/APKBUILD
@@ -0,0 +1,32 @@
+# Contributor: Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-xml-namespacesupport
+pkgver=1.12
+pkgrel=0
+pkgdesc="A Perl module for processing XML namespaces"
+url="https://metacpan.org/pod/XML::NamespaceSupport"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0+"
+depends="perl"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/P/PE/PERIGRIN/XML-NamespaceSupport-$pkgver.tar.gz"
+builddir="$srcdir/XML-NamespaceSupport-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="8a29698acc152888b3abd53b277f89209252830cc3b57d587a5b66e5019445d7c1858a08fa548d42387c1143b726da1440e36eb0c69b0b59c3770b5f528f38b2 XML-NamespaceSupport-1.12.tar.gz"
diff --git a/user/perl-xml-simple/APKBUILD b/user/perl-xml-simple/APKBUILD
new file mode 100644
index 000000000..9327c5fc3
--- /dev/null
+++ b/user/perl-xml-simple/APKBUILD
@@ -0,0 +1,32 @@
+# Contributor: Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-xml-simple
+pkgver=2.25
+pkgrel=0
+pkgdesc="A Perl module for parsing XML"
+url="https://metacpan.org/pod/XML::Simple"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0+"
+depends="perl perl-xml-parser perl-xml-namespacesupport"
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/G/GR/GRANTM/XML-Simple-$pkgver.tar.gz"
+builddir="$srcdir/XML-Simple-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="0f1a6a1bdb8f6ac6fa4deef33d09930eb4758b4a3ed4431624004ffa2b1eb02f0d6ce14cb4942162cb76f7aa39fea4ec6a71e1eb9ebd464b710db7024bdd990c XML-Simple-2.25.tar.gz"
diff --git a/user/perl-xml-tokeparser/APKBUILD b/user/perl-xml-tokeparser/APKBUILD
new file mode 100644
index 000000000..a797ee9e4
--- /dev/null
+++ b/user/perl-xml-tokeparser/APKBUILD
@@ -0,0 +1,34 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-xml-tokeparser
+pkgver=0.05
+pkgrel=0
+pkgdesc="Simplified interface to XML::Parser"
+url="https://metacpan.org/pod/XML::TokeParser"
+arch="noarch"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl perl-xml-parser"
+makedepends="perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/P/PO/PODMASTER/XML-TokeParser-$pkgver.tar.gz"
+sha512sums="c19be15013a04908ae863ec1095af34785ad6050c8f895759e98053a0c097c9a80f5c99d33e30675c003cde7eb3b9340e866bc90c5fbcfcad93666df42439a7a XML-TokeParser-0.05.tar.gz"
+builddir="$srcdir/XML-TokeParser-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
diff --git a/user/perl-xs-object-magic/APKBUILD b/user/perl-xs-object-magic/APKBUILD
new file mode 100644
index 000000000..f36be4872
--- /dev/null
+++ b/user/perl-xs-object-magic/APKBUILD
@@ -0,0 +1,36 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-xs-object-magic
+pkgver=0.04
+pkgrel=0
+pkgdesc="Opaque, extensible XS pointer backed objects using sv_magic"
+url="https://metacpan.org/pod/XS::Object::Magic"
+arch="all"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl perl-module-install perl-extutils-depends"
+depends_dev=""
+makedepends="$depends_dev perl-dev"
+checkdepends="perl-test-fatal"
+install=""
+subpackages="$pkgname-dev $pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/F/FL/FLORA/XS-Object-Magic-$pkgver.tar.gz"
+sha512sums="315288496c0bab79f16d010f7f140dc1483bb3a1053a7fc41a048308aa1f9ae01b03795be28f132c856360176372d2251315ae62db950e377be88ff222a441dd XS-Object-Magic-0.04.tar.gz"
+builddir="$srcdir/XS-Object-Magic-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
diff --git a/user/perl-yaml-libyaml/APKBUILD b/user/perl-yaml-libyaml/APKBUILD
new file mode 100644
index 000000000..516971ac2
--- /dev/null
+++ b/user/perl-yaml-libyaml/APKBUILD
@@ -0,0 +1,35 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Adélie Perl Team <adelie-perl@lists.adelielinux.org>
+pkgname=perl-yaml-libyaml
+pkgver=0.74
+pkgrel=0
+pkgdesc="Perl YAML Serialization using XS and libyaml"
+url="https://metacpan.org/pod/YAML::LibYAML"
+arch="all"
+license="Artistic-1.0-Perl AND GPL-2.0"
+depends="perl"
+depends_dev=""
+makedepends="$depends_dev perl-dev"
+install=""
+subpackages="$pkgname-doc"
+source="https://cpan.metacpan.org/authors/id/I/IN/INGY/YAML-LibYAML-$pkgver.tar.gz"
+builddir="$srcdir/YAML-LibYAML-$pkgver"
+
+build() {
+ cd "$builddir"
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete
+}
+
+sha512sums="fbc502b1c9173ec76a01e99d303bffd4c97d0a8f30dc6fe8f1962f8edc0296d81fb06c1ef958a0ec81a45259f1f9f6fcdfc3a056054dbf24ae8ce4a4be736614 YAML-LibYAML-0.74.tar.gz"
diff --git a/user/physlock/APKBUILD b/user/physlock/APKBUILD
new file mode 100644
index 000000000..a2c4e471f
--- /dev/null
+++ b/user/physlock/APKBUILD
@@ -0,0 +1,28 @@
+# Contributor: Max Rees <maxcrees@me.com>
+# Maintainer: Max Rees <maxcrees@me.com>
+pkgname=physlock
+pkgver=11
+pkgrel=0
+pkgdesc="Lightweight Linux console-locking tool"
+url="https://github.com/muennich/physlock"
+arch="all"
+options="!check suid" # No test suite.
+license="GPL-2.0+"
+depends=""
+makedepends="linux-headers linux-pam-dev utmps-dev"
+subpackages="$pkgname-doc"
+source="$pkgname-$pkgver.tar.gz::https://github.com/muennich/physlock/archive/v$pkgver.tar.gz
+ utmps.patch"
+
+build() {
+ cd "$builddir"
+ make
+}
+
+package() {
+ cd "$builddir"
+ make PREFIX="/usr" DESTDIR="$pkgdir" install
+}
+
+sha512sums="d3badf5c99e4e3e16f4e7ec5c59ee8320c845f1b180463900d816206362ce1aa8652f2489453ad5e190cceee2ed61a90acc52e25bb6b4c4a9dc8c4ebd3054938 physlock-11.tar.gz
+d461b462dedfb7505f506ce1050d5140b8729f50a383157157e4f65465f63174cc11dc0a46cc1eed57cec0293006c5ec6cc6e96af9acab009ab3c9fe5e2381d5 utmps.patch"
diff --git a/user/physlock/utmps.patch b/user/physlock/utmps.patch
new file mode 100644
index 000000000..efae166a9
--- /dev/null
+++ b/user/physlock/utmps.patch
@@ -0,0 +1,33 @@
+--- physlock-11/auth.c 2017-07-13 07:23:52.000000000 +0000
++++ physlock-11/auth.c 2018-09-21 21:21:36.240024566 +0000
+@@ -16,13 +16,14 @@
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
++#define _GNU_SOURCE
+ #include <paths.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #include <pwd.h>
+ #include <unistd.h>
+-#include <utmp.h>
++#include <utmpx.h>
+ #include <errno.h>
+ #include <security/pam_misc.h>
+
+@@ -41,12 +42,12 @@ static void get_pam(userinfo_t *uinfo) {
+
+ void get_user(userinfo_t *uinfo, int vt, uid_t owner) {
+ FILE *uf;
+- struct utmp r;
++ struct utmpx r;
+ struct passwd *pw;
+ char tty[16], name[UT_NAMESIZE+1];
+
+ uinfo->name = NULL;
+- while ((uf = fopen(_PATH_UTMP, "r")) == NULL && errno == EINTR);
++ while ((uf = fopen(UTMPX_FILE, "r")) == NULL && errno == EINTR);
+
+ if (uf != NULL) {
+ snprintf(tty, sizeof(tty), "tty%d", vt);
diff --git a/user/protobuf/APKBUILD b/user/protobuf/APKBUILD
new file mode 100644
index 000000000..5f00430bf
--- /dev/null
+++ b/user/protobuf/APKBUILD
@@ -0,0 +1,108 @@
+# Contributor: Kiyoshi Aman <kiyoshi.aman@gmail.com>
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Dan Theisen <djt@hxx.in>
+# TODO: Build Python module, and clean up Ruby build process
+pkgname=protobuf
+_gemname=google-protobuf
+pkgver=3.6.1
+_tstver=1.8.0
+pkgrel=0
+pkgdesc="Library for extensible, efficient structure packing"
+url="https://github.com/google/protobuf"
+arch="all"
+license="BSD-3-Clause"
+depends_dev="zlib-dev"
+makedepends="$depends_dev autoconf automake libtool ruby ruby-dev ruby-rake"
+subpackages="ruby-$_gemname:_ruby $pkgname-dev $pkgname-vim::noarch"
+source="$pkgname-$pkgver.tar.gz::https://github.com/google/$pkgname/archive/v$pkgver.tar.gz
+ googletest-$_tstver.tar.gz::https://github.com/google/googletest/archive/release-$_tstver.tar.gz
+ musl-fix.patch
+ trim-rakefile.patch"
+builddir="$srcdir/$pkgname-$pkgver"
+
+prepare() {
+ default_prepare
+
+ cd "$builddir"
+ ./autogen.sh
+
+ # symlink tests to the test directory
+ rm -rf third_party/*
+ ln -sf "$srcdir"/googletest-release-$_tstver \
+ "$builddir"/third_party/googletest
+}
+
+build() {
+ cd "$builddir"
+
+ CXXFLAGS="$CXXFLAGS -fno-delete-null-pointer-checks" \
+ ./configure --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var
+ make
+
+ cd "$builddir"/ruby
+
+ # Generate proto files for built-in protocols.
+ rake genproto
+
+ gem build $_gemname.gemspec
+ gem install --local \
+ --install-dir dist \
+ --ignore-dependencies \
+ --no-document \
+ --verbose \
+ $_gemname
+
+ # build test-suite
+ local test; for test in googletest googlemock; do
+ cd "$builddir/third_party/googletest/$test"
+ autoreconf -vfi
+ ./configure
+ make
+ done
+}
+
+# TODO: Run tests for ruby gem.
+check() {
+ cd "$builddir"
+ make check
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+_ruby() {
+ pkgdesc="Ruby bindings to Google's data interchange format"
+
+ local gemdir="$subpkgdir/$(ruby -e 'puts Gem.default_dir')"
+ cd "$builddir"/ruby/dist
+
+ mkdir -p "$gemdir"
+ cp -r extensions gems specifications "$gemdir"/
+
+ # Remove duplicated .so libs (should be only in extensions directory).
+ find "$gemdir"/gems/ -name "*.so" -delete
+
+ # Remove unnecessary files.
+ cd "$gemdir"/gems/$_gemname-$pkgver
+ rm -r ext/ tests/
+}
+
+vim() {
+ pkgdesc="Vim syntax for $pkgname"
+ depends=""
+ install_if="$pkgname=$pkgver-r$pkgrel vim"
+
+ install -Dm644 "$builddir"/editors/proto.vim \
+ "$subpkgdir"/usr/share/vim/vimfiles/syntax/proto.vim
+}
+
+sha512sums="1bc175d24b49de1b1e41eaf39598194e583afffb924c86c8d2e569d935af21874be76b2cbd4d9655a1d38bac3d4cd811de88bc2c72d81bad79115e69e5b0d839 protobuf-3.6.1.tar.gz
+1dbece324473e53a83a60601b02c92c089f5d314761351974e097b2cf4d24af4296f9eb8653b6b03b1e363d9c5f793897acae1f0c7ac40149216035c4d395d9d googletest-1.8.0.tar.gz
+875592bc5dc5efe9087ea1b340673f54c984ecd5aa3b110a2da136bdc28009af7ce1a9c57f4747ff809fc02eb6c39a0209c277177172af467a54172d9700188a musl-fix.patch
+d1d11fe76d2a1ae92f47f9eb1e0d94c67b7192a9dc4a382b6c0835f4fe4dbc2f98ca1b3c5095ad5b4e368581072330f943209c0decea02ebb47938588543fdb1 trim-rakefile.patch"
diff --git a/user/protobuf/musl-fix.patch b/user/protobuf/musl-fix.patch
new file mode 100644
index 000000000..442ca20ed
--- /dev/null
+++ b/user/protobuf/musl-fix.patch
@@ -0,0 +1,22 @@
+seems like both musl libc and android has byteswap.h
+
+--- a/src/google/protobuf/stubs/port.h
++++ b/src/google/protobuf/stubs/port.h
+@@ -94,7 +94,7 @@
+ #include <intrin.h>
+ #elif defined(__APPLE__)
+ #include <libkern/OSByteOrder.h>
+-#elif defined(__GLIBC__) || defined(__BIONIC__) || defined(__CYGWIN__)
++#elif defined(__linux__) || defined(__BIONIC__) || defined(__CYGWIN__)
+ #include <byteswap.h> // IWYU pragma: export
+ #endif
+
+@@ -380,7 +380,7 @@ inline void GOOGLE_UNALIGNED_STORE64(voi
+ #define bswap_32(x) OSSwapInt32(x)
+ #define bswap_64(x) OSSwapInt64(x)
+
+-#elif !defined(__GLIBC__) && !defined(__BIONIC__) && !defined(__CYGWIN__)
++#elif !defined(__linux__) && !defined(__BIONIC__) && !defined(__CYGWIN__)
+
+ static inline uint16 bswap_16(uint16 x) {
+ return static_cast<uint16>(((x & 0xFF) << 8) | ((x & 0xFF00) >> 8));
diff --git a/user/protobuf/trim-rakefile.patch b/user/protobuf/trim-rakefile.patch
new file mode 100644
index 000000000..7f53d7099
--- /dev/null
+++ b/user/protobuf/trim-rakefile.patch
@@ -0,0 +1,72 @@
+Remove code that we don't use to avoid installing additional dependencies.
+--- a/ruby/Rakefile
++++ b/ruby/Rakefile
+@@ -1,6 +1,4 @@
+ require "rubygems"
+-require "rubygems/package_task"
+-require "rake/extensiontask" unless RUBY_PLATFORM == "java"
+ require "rake/testtask"
+
+ spec = Gem::Specification.load("google-protobuf.gemspec")
+@@ -39,51 +37,6 @@
+ end
+ end
+
+-if RUBY_PLATFORM == "java"
+- if `which mvn` == ''
+- raise ArgumentError, "maven needs to be installed"
+- end
+- task :clean do
+- system("mvn --batch-mode clean")
+- end
+-
+- task :compile do
+- system("mvn --batch-mode package")
+- end
+-else
+- Rake::ExtensionTask.new("protobuf_c", spec) do |ext|
+- unless RUBY_PLATFORM =~ /darwin/
+- # TODO: also set "no_native to true" for mac if possible. As is,
+- # "no_native" can only be set if the RUBY_PLATFORM doing
+- # cross-compilation is contained in the "ext.cross_platform" array.
+- ext.no_native = true
+- end
+- ext.ext_dir = "ext/google/protobuf_c"
+- ext.lib_dir = "lib/google"
+- ext.cross_compile = true
+- ext.cross_platform = [
+- 'x86-mingw32', 'x64-mingw32',
+- 'x86_64-linux', 'x86-linux',
+- 'universal-darwin'
+- ]
+- end
+-
+- task 'gem:windows' do
+- require 'rake_compiler_dock'
+- RakeCompilerDock.sh "bundle && IN_DOCKER=true rake cross native gem RUBY_CC_VERSION=2.5.0:2.4.0:2.3.0:2.2.2:2.1.6:2.0.0"
+- end
+-
+- if RUBY_PLATFORM =~ /darwin/
+- task 'gem:native' do
+- system "rake genproto"
+- system "rake cross native gem RUBY_CC_VERSION=2.5.0:2.4.0:2.3.0:2.2.2:2.1.6:2.0.0"
+- end
+- else
+- task 'gem:native' => [:genproto, 'gem:windows']
+- end
+-end
+-
+-
+ # Proto for tests.
+ genproto_output << "tests/generated_code.rb"
+ genproto_output << "tests/test_import.rb"
+@@ -104,9 +57,6 @@
+
+ task :clean do
+ sh "rm -f #{genproto_output.join(' ')}"
+-end
+-
+-Gem::PackageTask.new(spec) do |pkg|
+ end
+
+ Rake::TestTask.new(:test => :build) do |t|
diff --git a/user/py3-cffi/APKBUILD b/user/py3-cffi/APKBUILD
new file mode 100644
index 000000000..9c7e1124c
--- /dev/null
+++ b/user/py3-cffi/APKBUILD
@@ -0,0 +1,32 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: A. Wilcox <awilfox@adelielinux.org>
+pkgname=py3-cffi
+pkgver=1.11.5
+pkgrel=0
+pkgdesc="Interface for Python to call in to C code"
+url="https://cffi.readthedocs.io/"
+arch="all"
+license="MIT"
+depends="python3 py3-cparser"
+makedepends="libffi-dev python3-dev"
+checkdepends="py3-pytest"
+subpackages=""
+source="https://files.pythonhosted.org/packages/e7/a7/4cd50e57cc6f436f1cc3a7e8fa700ff9b8b4d471620629074913e3735fb2/cffi-$pkgver.tar.gz"
+builddir="$srcdir/cffi-$pkgver"
+
+build() {
+ cd "$builddir"
+ python3 setup.py build
+}
+
+check() {
+ cd "$builddir"
+ python3 setup.py test
+}
+
+package() {
+ cd "$builddir"
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="6770d5293cfd7405e733d60c96655641b5bcc5878fc66a737f4a8308f465d459ee0e3fcaa47893d8f57fb195e5534dd7e4728c868f33d7e657688f45e1fb1880 cffi-1.11.5.tar.gz"
diff --git a/user/py3-cparser/APKBUILD b/user/py3-cparser/APKBUILD
new file mode 100644
index 000000000..d08071bf2
--- /dev/null
+++ b/user/py3-cparser/APKBUILD
@@ -0,0 +1,31 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: A. Wilcox <awilfox@adelielinux.org>
+pkgname=py3-cparser
+pkgver=2.19
+pkgrel=0
+pkgdesc="C99 parser in pure Python"
+url="https://github.com/eliben/pycparser"
+arch="noarch"
+license="BSD-3-Clause"
+depends="python3"
+makedepends=""
+subpackages=""
+source="py3-cparser-$pkgver.tar.gz::https://github.com/eliben/pycparser/archive/release_v$pkgver.tar.gz"
+builddir="$srcdir/pycparser-release_v$pkgver"
+
+build() {
+ cd "$builddir"
+ python3 setup.py build
+}
+
+check() {
+ cd "$builddir"
+ python3 tests/all_tests.py
+}
+
+package() {
+ cd "$builddir"
+ python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="88fe63c1a7a344c564dfd3b4f99735a4159c8a3f5738bab839943ea7fcbf1f5340f67326550b7e66508ea5862897e5bcdf363c2a8d47eccb50890573a2640a98 py3-cparser-2.19.tar.gz"
diff --git a/user/rpcbind/APKBUILD b/user/rpcbind/APKBUILD
new file mode 100644
index 000000000..c9f8cc956
--- /dev/null
+++ b/user/rpcbind/APKBUILD
@@ -0,0 +1,43 @@
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=rpcbind
+pkgver=1.2.5
+pkgrel=0
+pkgdesc="portmap replacement which supports RPC over various protocols"
+url="http://rpcbind.sourceforge.net"
+arch="all"
+options="!check" # No test suite.
+license="BSD-3-Clause"
+depends=""
+install="$pkgname.pre-install $pkgname.pre-upgrade"
+makedepends="libtirpc-dev bsd-compat-headers"
+subpackages="$pkgname-dbg $pkgname-doc $pkgname-openrc"
+source="http://downloads.sourceforge.net/project/rpcbind/rpcbind/$pkgver/rpcbind-$pkgver.tar.bz2
+ rpcbind.initd
+ rpcbind.confd"
+
+build() {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --bindir=/sbin \
+ --enable-warmstarts \
+ --with-statedir=/var/lib/rpcbind \
+ --with-rpcuser=rpc \
+ --enable-debug \
+ --with-systemdsystemunitdir='no'
+ make
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ install -Dm755 "$srcdir"/rpcbind.initd "$pkgdir"/etc/init.d/rpcbind
+ install -Dm644 "$srcdir"/rpcbind.confd "$pkgdir"/etc/conf.d/rpcbind
+ install -D -m644 COPYING "$pkgdir"/usr/share/licenses/rpcbind/COPYING
+}
+sha512sums="e884c4757950ccead0f9a07f50625a63e6f18f9bfae9fcfffa3e5fa4b7a66c3a99d9fa303061848fe8211509d5456f24ff26e4579af6e161a35522268f3ef3e4 rpcbind-1.2.5.tar.bz2
+1cd655d86226a45fa3e927f8ac2bb580537644d2fb3684e0f4a956bf3721c95d95b8b8c1d9a2a742fb714eeba9277e0400a7493bf1bf676466d70adb2b35a88e rpcbind.initd
+0641087162ebc8fb10c5cb329105261d77cad073daed3f9a6c92574177298cd8a19a87b62dde14161cc554b5e68680cfd870b5334f3cfd8d6074ec8a43f4dfe3 rpcbind.confd"
diff --git a/user/rpcbind/rpcbind.confd b/user/rpcbind/rpcbind.confd
new file mode 100644
index 000000000..973320202
--- /dev/null
+++ b/user/rpcbind/rpcbind.confd
@@ -0,0 +1,5 @@
+# /etc/conf.d/rpcbind
+
+# Options for `rpcbind`.
+RPCBIND_OPTS="-w"
+
diff --git a/user/rpcbind/rpcbind.initd b/user/rpcbind/rpcbind.initd
new file mode 100644
index 000000000..b979c2226
--- /dev/null
+++ b/user/rpcbind/rpcbind.initd
@@ -0,0 +1,25 @@
+#!/sbin/openrc-run
+# Copyright 1999-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/net-nds/rpcbind/files/rpcbind.initd,v 1.1 2007/12/29 09:13:55 vapier Exp $
+
+depend() {
+ use net
+ before inetd xinetd
+ after firewall
+ provide portmap
+}
+
+start() {
+ ebegin "Starting rpcbind"
+ start-stop-daemon --start --quiet --exec /sbin/rpcbind \
+ -- ${RPCBIND_OPTS}
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping rpcbind"
+ start-stop-daemon --stop --quiet --exec /sbin/rpcbind
+ eend $?
+}
+
diff --git a/user/rpcbind/rpcbind.pre-install b/user/rpcbind/rpcbind.pre-install
new file mode 100644
index 000000000..771cdbf7b
--- /dev/null
+++ b/user/rpcbind/rpcbind.pre-install
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+addgroup -S rpc 2>/dev/null
+adduser -S -D -h /var/lib/rpcbind -s /sbin/nologin -G rpc -g rpc rpc 2>/dev/null
+
+exit 0
diff --git a/user/rpcbind/rpcbind.pre-upgrade b/user/rpcbind/rpcbind.pre-upgrade
new file mode 120000
index 000000000..1ba8b0c77
--- /dev/null
+++ b/user/rpcbind/rpcbind.pre-upgrade
@@ -0,0 +1 @@
+rpcbind.pre-install \ No newline at end of file
diff --git a/user/rust/0001-Require-static-native-libraries-when-linking-static-.patch b/user/rust/0001-Require-static-native-libraries-when-linking-static-.patch
new file mode 100644
index 000000000..2bcf4b318
--- /dev/null
+++ b/user/rust/0001-Require-static-native-libraries-when-linking-static-.patch
@@ -0,0 +1,44 @@
+From 531eaa63083c5351cea24867ba7144817d456d77 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Fri, 8 Sep 2017 00:05:18 -0500
+Subject: [PATCH 01/28] Require static native libraries when linking static
+ executables
+
+---
+ src/librustc_codegen_llvm/back/link.rs | 13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
+
+diff --git a/src/librustc_codegen_llvm/back/link.rs b/src/librustc_codegen_llvm/back/link.rs
+index 845a66c6e4..f61318affc 100644
+--- a/src/librustc_codegen_llvm/back/link.rs
++++ b/src/librustc_codegen_llvm/back/link.rs
+@@ -1551,8 +1551,8 @@ fn add_upstream_rust_crates(cmd: &mut dyn Linker,
+ }
+ }
+
+-// Link in all of our upstream crates' native dependencies. Remember that
+-// all of these upstream native dependencies are all non-static
++// Link in all of our upstream crates' native dependencies. Remember that when
++// linking libraries, these upstream native dependencies are all non-static
+ // dependencies. We've got two cases then:
+ //
+ // 1. The upstream crate is an rlib. In this case we *must* link in the
+@@ -1596,7 +1596,14 @@ fn add_upstream_native_libraries(cmd: &mut dyn Linker,
+ continue
+ }
+ match lib.kind {
+- NativeLibraryKind::NativeUnknown => cmd.link_dylib(&name.as_str()),
++ NativeLibraryKind::NativeUnknown => {
++ // When creating executables, match library linkage to that of the executable.
++ if crate_type == config::CrateTypeExecutable && sess.crt_static() {
++ cmd.link_staticlib(&name.as_str())
++ } else {
++ cmd.link_dylib(&name.as_str())
++ }
++ },
+ NativeLibraryKind::NativeFramework => cmd.link_framework(&name.as_str()),
+ NativeLibraryKind::NativeStaticNobundle => {
+ // Link "static-nobundle" native libs only if the crate they originate from
+--
+2.18.0
+
diff --git a/user/rust/0002-Don-t-pass-CFLAGS-to-the-C-compiler.patch b/user/rust/0002-Don-t-pass-CFLAGS-to-the-C-compiler.patch
new file mode 100644
index 000000000..a3efabf93
--- /dev/null
+++ b/user/rust/0002-Don-t-pass-CFLAGS-to-the-C-compiler.patch
@@ -0,0 +1,36 @@
+From b77da61648c4787be551de6f654148c3686c7a3e Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Wed, 10 Jan 2018 13:36:41 -0600
+Subject: [PATCH 02/28] Don't pass CFLAGS to the C++ compiler
+
+---
+ src/bootstrap/builder.rs | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs
+index dc0b0aaf0b..257d369750 100644
+--- a/src/bootstrap/builder.rs
++++ b/src/bootstrap/builder.rs
+@@ -966,7 +966,7 @@ impl<'a> Builder<'a> {
+ let cflags = self.cflags(target).join(" ");
+ cargo
+ .env(format!("CFLAGS_{}", target), cflags.clone())
+- .env("CFLAGS", cflags.clone());
++ .env("CFLAGS", cflags);
+
+ if let Some(ar) = self.ar(target) {
+ let ranlib = format!("{} s", ar.display());
+@@ -981,9 +981,7 @@ impl<'a> Builder<'a> {
+ let cxx = ccacheify(&cxx);
+ cargo
+ .env(format!("CXX_{}", target), &cxx)
+- .env("CXX", &cxx)
+- .env(format!("CXXFLAGS_{}", target), cflags.clone())
+- .env("CXXFLAGS", cflags);
++ .env("CXX", &cxx);
+ }
+ }
+
+--
+2.18.0
+
diff --git a/user/rust/0003-Fix-LLVM-build.patch b/user/rust/0003-Fix-LLVM-build.patch
new file mode 100644
index 000000000..d2ca8526b
--- /dev/null
+++ b/user/rust/0003-Fix-LLVM-build.patch
@@ -0,0 +1,26 @@
+From 272bbaa5abe4f165a1f45ea1e9b33604af3ca77b Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Fri, 8 Sep 2017 00:04:29 -0500
+Subject: [PATCH 03/28] Fix LLVM build
+
+---
+ src/bootstrap/lib.rs | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs
+index 1efff19dfb..e6ac847afe 100644
+--- a/src/bootstrap/lib.rs
++++ b/src/bootstrap/lib.rs
+@@ -742,7 +742,8 @@ impl Build {
+ // cc-rs because the build scripts will determine that for themselves.
+ let mut base = self.cc[&target].args().iter()
+ .map(|s| s.to_string_lossy().into_owned())
+- .filter(|s| !s.starts_with("-O") && !s.starts_with("/O"))
++ .filter(|s| !s.starts_with("-O") && !s.starts_with("/O")
++ && !s.starts_with("-static"))
+ .collect::<Vec<_>>();
+
+ // If we're compiling on macOS then we add a few unconditional flags
+--
+2.18.0
+
diff --git a/user/rust/0004-test-sysroot-crates-are-unstable-Fix-test-when-rpath.patch b/user/rust/0004-test-sysroot-crates-are-unstable-Fix-test-when-rpath.patch
new file mode 100644
index 000000000..a5105fd82
--- /dev/null
+++ b/user/rust/0004-test-sysroot-crates-are-unstable-Fix-test-when-rpath.patch
@@ -0,0 +1,25 @@
+From 46fce11b84d5ae71fe55593c6141307a60ee349f Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Mon, 17 Sep 2018 01:32:20 +0000
+Subject: [PATCH 04/28] test/sysroot-crates-are-unstable: Fix test when rpath
+ is disabled
+
+Without this environment var, the test can't run rustc to find
+the sysroot path.
+---
+ .../run-make-fulldeps/sysroot-crates-are-unstable/Makefile | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/test/run-make-fulldeps/sysroot-crates-are-unstable/Makefile b/src/test/run-make-fulldeps/sysroot-crates-are-unstable/Makefile
+index a35174b3c2..9e77070685 100644
+--- a/src/test/run-make-fulldeps/sysroot-crates-are-unstable/Makefile
++++ b/src/test/run-make-fulldeps/sysroot-crates-are-unstable/Makefile
+@@ -1,2 +1,4 @@
++-include ../tools.mk
++
+ all:
+- python2.7 test.py
++ env '$(HOST_RPATH_ENV)' python2.7 test.py
+--
+2.18.0
+
diff --git a/user/rust/0005-Remove-nostdlib-and-musl_root-from-musl-targets.patch b/user/rust/0005-Remove-nostdlib-and-musl_root-from-musl-targets.patch
new file mode 100644
index 000000000..4fb2f6e23
--- /dev/null
+++ b/user/rust/0005-Remove-nostdlib-and-musl_root-from-musl-targets.patch
@@ -0,0 +1,444 @@
+From 98c0bb0e0213db77313c73167acf65c4658046dd Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Fri, 8 Sep 2017 22:11:14 -0500
+Subject: [PATCH 05/28] Remove -nostdlib and musl_root from musl targets
+
+---
+ config.toml.example | 6 ---
+ src/bootstrap/bin/rustc.rs | 10 -----
+ src/bootstrap/cc_detect.rs | 27 ++----------
+ src/bootstrap/compile.rs | 31 --------------
+ src/bootstrap/config.rs | 7 ----
+ src/bootstrap/configure.py | 22 ----------
+ src/bootstrap/lib.rs | 8 ----
+ src/bootstrap/sanity.rs | 30 +-------------
+ .../dist-i586-gnu-i586-i686-musl/Dockerfile | 2 -
+ src/ci/docker/dist-various-1/Dockerfile | 7 ----
+ src/ci/docker/dist-x86_64-musl/Dockerfile | 1 -
+ src/librustc_target/spec/linux_musl_base.rs | 41 -------------------
+ 12 files changed, 4 insertions(+), 188 deletions(-)
+
+diff --git a/config.toml.example b/config.toml.example
+index 9907341633..6f8b52e235 100644
+--- a/config.toml.example
++++ b/config.toml.example
+@@ -409,12 +409,6 @@
+ # only use static libraries. If unset, the target's default linkage is used.
+ #crt-static = false
+
+-# The root location of the MUSL installation directory. The library directory
+-# will also need to contain libunwind.a for an unwinding implementation. Note
+-# that this option only makes sense for MUSL targets that produce statically
+-# linked binaries
+-#musl-root = "..."
+-
+ # Used in testing for configuring where the QEMU images are located, you
+ # probably don't want to use this.
+ #qemu-rootfs = "..."
+diff --git a/src/bootstrap/bin/rustc.rs b/src/bootstrap/bin/rustc.rs
+index 7192cae895..71435f9306 100644
+--- a/src/bootstrap/bin/rustc.rs
++++ b/src/bootstrap/bin/rustc.rs
+@@ -30,7 +30,6 @@
+ extern crate bootstrap;
+
+ use std::env;
+-use std::ffi::OsString;
+ use std::io;
+ use std::path::PathBuf;
+ use std::process::Command;
+@@ -126,15 +125,6 @@ fn main() {
+ cmd.arg("-Cprefer-dynamic");
+ }
+
+- // Help the libc crate compile by assisting it in finding the MUSL
+- // native libraries.
+- if let Some(s) = env::var_os("MUSL_ROOT") {
+- let mut root = OsString::from("native=");
+- root.push(&s);
+- root.push("/lib");
+- cmd.arg("-L").arg(&root);
+- }
+-
+ // Override linker if necessary.
+ if let Ok(target_linker) = env::var("RUSTC_TARGET_LINKER") {
+ cmd.arg(format!("-Clinker={}", target_linker));
+diff --git a/src/bootstrap/cc_detect.rs b/src/bootstrap/cc_detect.rs
+index 698903f128..629cedf019 100644
+--- a/src/bootstrap/cc_detect.rs
++++ b/src/bootstrap/cc_detect.rs
+@@ -95,7 +95,7 @@ pub fn find(build: &mut Build) {
+ if let Some(cc) = config.and_then(|c| c.cc.as_ref()) {
+ cfg.compiler(cc);
+ } else {
+- set_compiler(&mut cfg, Language::C, target, config, build);
++ set_compiler(&mut cfg, Language::C, target, config);
+ }
+
+ let compiler = cfg.get_compiler();
+@@ -124,7 +124,7 @@ pub fn find(build: &mut Build) {
+ if let Some(cxx) = config.and_then(|c| c.cxx.as_ref()) {
+ cfg.compiler(cxx);
+ } else {
+- set_compiler(&mut cfg, Language::CPlusPlus, host, config, build);
++ set_compiler(&mut cfg, Language::CPlusPlus, host, config);
+ }
+ let compiler = cfg.get_compiler();
+ build.verbose(&format!("CXX_{} = {:?}", host, compiler.path()));
+@@ -135,8 +135,7 @@ pub fn find(build: &mut Build) {
+ fn set_compiler(cfg: &mut cc::Build,
+ compiler: Language,
+ target: Interned<String>,
+- config: Option<&Target>,
+- build: &Build) {
++ config: Option<&Target>) {
+ match &*target {
+ // When compiling for android we may have the NDK configured in the
+ // config.toml in which case we look there. Otherwise the default
+@@ -173,26 +172,6 @@ fn set_compiler(cfg: &mut cc::Build,
+ }
+ }
+
+- "mips-unknown-linux-musl" => {
+- if cfg.get_compiler().path().to_str() == Some("gcc") {
+- cfg.compiler("mips-linux-musl-gcc");
+- }
+- }
+- "mipsel-unknown-linux-musl" => {
+- if cfg.get_compiler().path().to_str() == Some("gcc") {
+- cfg.compiler("mipsel-linux-musl-gcc");
+- }
+- }
+-
+- t if t.contains("musl") => {
+- if let Some(root) = build.musl_root(target) {
+- let guess = root.join("bin/musl-gcc");
+- if guess.exists() {
+- cfg.compiler(guess);
+- }
+- }
+- }
+-
+ _ => {}
+ }
+ }
+diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs
+index 04e8e133b0..7767956cd8 100644
+--- a/src/bootstrap/compile.rs
++++ b/src/bootstrap/compile.rs
+@@ -87,13 +87,6 @@ impl Step for Std {
+ });
+ builder.info(&format!("Uplifting stage1 std ({} -> {})", from.host, target));
+
+- // Even if we're not building std this stage, the new sysroot must
+- // still contain the musl startup objects.
+- if target.contains("musl") {
+- let libdir = builder.sysroot_libdir(compiler, target);
+- copy_musl_third_party_objects(builder, target, &libdir);
+- }
+-
+ builder.ensure(StdLink {
+ compiler: from,
+ target_compiler: compiler,
+@@ -102,11 +95,6 @@ impl Step for Std {
+ return;
+ }
+
+- if target.contains("musl") {
+- let libdir = builder.sysroot_libdir(compiler, target);
+- copy_musl_third_party_objects(builder, target, &libdir);
+- }
+-
+ let out_dir = builder.cargo_out(compiler, Mode::Std, target);
+ builder.clear_if_dirty(&out_dir, &builder.rustc(compiler));
+ let mut cargo = builder.cargo(compiler, Mode::Std, target, "build");
+@@ -128,20 +116,6 @@ impl Step for Std {
+ }
+ }
+
+-/// Copies the crt(1,i,n).o startup objects
+-///
+-/// Since musl supports fully static linking, we can cross link for it even
+-/// with a glibc-targeting toolchain, given we have the appropriate startup
+-/// files. As those shipped with glibc won't work, copy the ones provided by
+-/// musl so we have them on linux-gnu hosts.
+-fn copy_musl_third_party_objects(builder: &Builder,
+- target: Interned<String>,
+- into: &Path) {
+- for &obj in &["crt1.o", "crti.o", "crtn.o"] {
+- builder.copy(&builder.musl_root(target).unwrap().join("lib").join(obj), &into.join(obj));
+- }
+-}
+-
+ /// Configure cargo to compile the standard library, adding appropriate env vars
+ /// and such.
+ pub fn std_cargo(builder: &Builder,
+@@ -196,11 +170,6 @@ pub fn std_cargo(builder: &Builder,
+ cargo.env("JEMALLOC_OVERRIDE", jemalloc);
+ }
+ }
+- if target.contains("musl") {
+- if let Some(p) = builder.musl_root(target) {
+- cargo.env("MUSL_ROOT", p);
+- }
+- }
+ }
+ }
+
+diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs
+index 0a8a5c87d0..9fdf8690c5 100644
+--- a/src/bootstrap/config.rs
++++ b/src/bootstrap/config.rs
+@@ -131,8 +131,6 @@ pub struct Config {
+ pub save_toolstates: Option<PathBuf>,
+ pub print_step_timings: bool,
+
+- // Fallback musl-root for all targets
+- pub musl_root: Option<PathBuf>,
+ pub prefix: Option<PathBuf>,
+ pub sysconfdir: Option<PathBuf>,
+ pub datadir: Option<PathBuf>,
+@@ -165,7 +163,6 @@ pub struct Target {
+ pub linker: Option<PathBuf>,
+ pub ndk: Option<PathBuf>,
+ pub crt_static: Option<bool>,
+- pub musl_root: Option<PathBuf>,
+ pub qemu_rootfs: Option<PathBuf>,
+ pub no_std: bool,
+ }
+@@ -294,7 +291,6 @@ struct Rust {
+ backtrace: Option<bool>,
+ default_linker: Option<String>,
+ channel: Option<String>,
+- musl_root: Option<String>,
+ rpath: Option<bool>,
+ optimize_tests: Option<bool>,
+ debuginfo_tests: Option<bool>,
+@@ -328,7 +324,6 @@ struct TomlTarget {
+ linker: Option<String>,
+ android_ndk: Option<String>,
+ crt_static: Option<bool>,
+- musl_root: Option<String>,
+ qemu_rootfs: Option<String>,
+ }
+
+@@ -541,7 +536,6 @@ impl Config {
+ set(&mut config.llvm_tools_enabled, rust.llvm_tools);
+ config.rustc_parallel_queries = rust.experimental_parallel_queries.unwrap_or(false);
+ config.rustc_default_linker = rust.default_linker.clone();
+- config.musl_root = rust.musl_root.clone().map(PathBuf::from);
+ config.save_toolstates = rust.save_toolstates.clone().map(PathBuf::from);
+ set(&mut config.deny_warnings, rust.deny_warnings.or(flags.warnings));
+ set(&mut config.backtrace_on_ice, rust.backtrace_on_ice);
+@@ -580,7 +574,6 @@ impl Config {
+ target.ar = cfg.ar.clone().map(PathBuf::from);
+ target.linker = cfg.linker.clone().map(PathBuf::from);
+ target.crt_static = cfg.crt_static.clone();
+- target.musl_root = cfg.musl_root.clone().map(PathBuf::from);
+ target.qemu_rootfs = cfg.qemu_rootfs.clone().map(PathBuf::from);
+
+ config.target_config.insert(INTERNER.intern_string(triple.clone()), target);
+diff --git a/src/bootstrap/configure.py b/src/bootstrap/configure.py
+index 9fdba044f4..513935e4c8 100755
+--- a/src/bootstrap/configure.py
++++ b/src/bootstrap/configure.py
+@@ -108,28 +108,6 @@ v("aarch64-linux-android-ndk", "target.aarch64-linux-android.android-ndk",
+ "aarch64-linux-android NDK standalone path")
+ v("x86_64-linux-android-ndk", "target.x86_64-linux-android.android-ndk",
+ "x86_64-linux-android NDK standalone path")
+-v("musl-root", "target.x86_64-unknown-linux-musl.musl-root",
+- "MUSL root installation directory (deprecated)")
+-v("musl-root-x86_64", "target.x86_64-unknown-linux-musl.musl-root",
+- "x86_64-unknown-linux-musl install directory")
+-v("musl-root-i586", "target.i586-unknown-linux-musl.musl-root",
+- "i586-unknown-linux-musl install directory")
+-v("musl-root-i686", "target.i686-unknown-linux-musl.musl-root",
+- "i686-unknown-linux-musl install directory")
+-v("musl-root-arm", "target.arm-unknown-linux-musleabi.musl-root",
+- "arm-unknown-linux-musleabi install directory")
+-v("musl-root-armhf", "target.arm-unknown-linux-musleabihf.musl-root",
+- "arm-unknown-linux-musleabihf install directory")
+-v("musl-root-armv5te", "target.armv5te-unknown-linux-musleabi.musl-root",
+- "armv5te-unknown-linux-musleabi install directory")
+-v("musl-root-armv7", "target.armv7-unknown-linux-musleabihf.musl-root",
+- "armv7-unknown-linux-musleabihf install directory")
+-v("musl-root-aarch64", "target.aarch64-unknown-linux-musl.musl-root",
+- "aarch64-unknown-linux-musl install directory")
+-v("musl-root-mips", "target.mips-unknown-linux-musl.musl-root",
+- "mips-unknown-linux-musl install directory")
+-v("musl-root-mipsel", "target.mipsel-unknown-linux-musl.musl-root",
+- "mipsel-unknown-linux-musl install directory")
+ v("qemu-armhf-rootfs", "target.arm-unknown-linux-gnueabihf.qemu-rootfs",
+ "rootfs in qemu testing, you probably don't want to use this")
+ v("qemu-aarch64-rootfs", "target.aarch64-unknown-linux-gnu.qemu-rootfs",
+diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs
+index e6ac847afe..dd785124d2 100644
+--- a/src/bootstrap/lib.rs
++++ b/src/bootstrap/lib.rs
+@@ -803,14 +803,6 @@ impl Build {
+ }
+ }
+
+- /// Returns the "musl root" for this `target`, if defined
+- fn musl_root(&self, target: Interned<String>) -> Option<&Path> {
+- self.config.target_config.get(&target)
+- .and_then(|t| t.musl_root.as_ref())
+- .or(self.config.musl_root.as_ref())
+- .map(|p| &**p)
+- }
+-
+ /// Returns true if this is a no-std `target`, if defined
+ fn no_std(&self, target: Interned<String>) -> Option<bool> {
+ self.config.target_config.get(&target)
+diff --git a/src/bootstrap/sanity.rs b/src/bootstrap/sanity.rs
+index c7f514da93..617a3c2399 100644
+--- a/src/bootstrap/sanity.rs
++++ b/src/bootstrap/sanity.rs
+@@ -21,7 +21,7 @@
+ use std::collections::HashMap;
+ use std::env;
+ use std::ffi::{OsString, OsStr};
+-use std::fs::{self, File};
++use std::fs::File;
+ use std::io::Read;
+ use std::path::PathBuf;
+ use std::process::Command;
+@@ -186,34 +186,6 @@ pub fn check(build: &mut Build) {
+ }
+ }
+
+- // Make sure musl-root is valid
+- if target.contains("musl") {
+- // If this is a native target (host is also musl) and no musl-root is given,
+- // fall back to the system toolchain in /usr before giving up
+- if build.musl_root(*target).is_none() && build.config.build == *target {
+- let target = build.config.target_config.entry(target.clone())
+- .or_insert(Default::default());
+- target.musl_root = Some("/usr".into());
+- }
+- match build.musl_root(*target) {
+- Some(root) => {
+- if fs::metadata(root.join("lib/libc.a")).is_err() {
+- panic!("couldn't find libc.a in musl dir: {}",
+- root.join("lib").display());
+- }
+- if fs::metadata(root.join("lib/libunwind.a")).is_err() {
+- panic!("couldn't find libunwind.a in musl dir: {}",
+- root.join("lib").display());
+- }
+- }
+- None => {
+- panic!("when targeting MUSL either the rust.musl-root \
+- option or the target.$TARGET.musl-root option must \
+- be specified in config.toml")
+- }
+- }
+- }
+-
+ if target.contains("msvc") {
+ // There are three builds of cmake on windows: MSVC, MinGW, and
+ // Cygwin. The Cygwin build does not have generators for Visual
+diff --git a/src/ci/docker/dist-i586-gnu-i586-i686-musl/Dockerfile b/src/ci/docker/dist-i586-gnu-i586-i686-musl/Dockerfile
+index ba2d32a929..412c37fdd1 100644
+--- a/src/ci/docker/dist-i586-gnu-i586-i686-musl/Dockerfile
++++ b/src/ci/docker/dist-i586-gnu-i586-i686-musl/Dockerfile
+@@ -30,8 +30,6 @@ COPY scripts/sccache.sh /scripts/
+ RUN sh /scripts/sccache.sh
+
+ ENV RUST_CONFIGURE_ARGS \
+- --musl-root-i586=/musl-i586 \
+- --musl-root-i686=/musl-i686 \
+ --enable-extended \
+ --disable-docs
+
+diff --git a/src/ci/docker/dist-various-1/Dockerfile b/src/ci/docker/dist-various-1/Dockerfile
+index 6302f55009..e04fdaa226 100644
+--- a/src/ci/docker/dist-various-1/Dockerfile
++++ b/src/ci/docker/dist-various-1/Dockerfile
+@@ -109,13 +109,6 @@ ENV CC_mipsel_unknown_linux_musl=mipsel-openwrt-linux-gcc \
+ CC_x86_64_unknown_redox=x86_64-unknown-redox-gcc
+
+ ENV RUST_CONFIGURE_ARGS \
+- --musl-root-armv5te=/musl-armv5te \
+- --musl-root-arm=/musl-arm \
+- --musl-root-armhf=/musl-armhf \
+- --musl-root-armv7=/musl-armv7 \
+- --musl-root-aarch64=/musl-aarch64 \
+- --musl-root-mips=/musl-mips \
+- --musl-root-mipsel=/musl-mipsel \
+ --enable-emscripten \
+ --disable-docs
+
+diff --git a/src/ci/docker/dist-x86_64-musl/Dockerfile b/src/ci/docker/dist-x86_64-musl/Dockerfile
+index 06f8a2fbba..f5dd379528 100644
+--- a/src/ci/docker/dist-x86_64-musl/Dockerfile
++++ b/src/ci/docker/dist-x86_64-musl/Dockerfile
+@@ -30,7 +30,6 @@ COPY scripts/sccache.sh /scripts/
+ RUN sh /scripts/sccache.sh
+
+ ENV RUST_CONFIGURE_ARGS \
+- --musl-root-x86_64=/musl-x86_64 \
+ --enable-extended \
+ --disable-docs
+
+diff --git a/src/librustc_target/spec/linux_musl_base.rs b/src/librustc_target/spec/linux_musl_base.rs
+index 7a3f3c2a51..32fe2f880a 100644
+--- a/src/librustc_target/spec/linux_musl_base.rs
++++ b/src/librustc_target/spec/linux_musl_base.rs
+@@ -13,53 +13,12 @@ use spec::{LinkerFlavor, TargetOptions};
+ pub fn opts() -> TargetOptions {
+ let mut base = super::linux_base::opts();
+
+- // Make sure that the linker/gcc really don't pull in anything, including
+- // default objects, libs, etc.
+- base.pre_link_args_crt.insert(LinkerFlavor::Gcc, Vec::new());
+- base.pre_link_args_crt.get_mut(&LinkerFlavor::Gcc).unwrap().push("-nostdlib".to_string());
+-
+ // At least when this was tested, the linker would not add the
+ // `GNU_EH_FRAME` program header to executables generated, which is required
+ // when unwinding to locate the unwinding information. I'm not sure why this
+ // argument is *not* necessary for normal builds, but it can't hurt!
+ base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,--eh-frame-hdr".to_string());
+
+- // There's a whole bunch of circular dependencies when dealing with MUSL
+- // unfortunately. To put this in perspective libc is statically linked to
+- // liblibc and libunwind is statically linked to libstd:
+- //
+- // * libcore depends on `fmod` which is in libc (transitively in liblibc).
+- // liblibc, however, depends on libcore.
+- // * compiler-rt has personality symbols that depend on libunwind, but
+- // libunwind is in libstd which depends on compiler-rt.
+- //
+- // Recall that linkers discard libraries and object files as much as
+- // possible, and with all the static linking and archives flying around with
+- // MUSL the linker is super aggressively stripping out objects. For example
+- // the first case has fmod stripped from liblibc (it's in its own object
+- // file) so it's not there when libcore needs it. In the second example all
+- // the unused symbols from libunwind are stripped (each is in its own object
+- // file in libstd) before we end up linking compiler-rt which depends on
+- // those symbols.
+- //
+- // To deal with these circular dependencies we just force the compiler to
+- // link everything as a group, not stripping anything out until everything
+- // is processed. The linker will still perform a pass to strip out object
+- // files but it won't do so until all objects/archives have been processed.
+- base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,-(".to_string());
+- base.post_link_args.insert(LinkerFlavor::Gcc, vec!["-Wl,-)".to_string()]);
+-
+- // When generating a statically linked executable there's generally some
+- // small setup needed which is listed in these files. These are provided by
+- // a musl toolchain and are linked by default by the `musl-gcc` script. Note
+- // that `gcc` also does this by default, it just uses some different files.
+- //
+- // Each target directory for musl has these object files included in it so
+- // they'll be included from there.
+- base.pre_link_objects_exe_crt.push("crt1.o".to_string());
+- base.pre_link_objects_exe_crt.push("crti.o".to_string());
+- base.post_link_objects_crt.push("crtn.o".to_string());
+-
+ // These targets statically link libc by default
+ base.crt_static_default = true;
+ // These targets allow the user to choose between static and dynamic linking.
+--
+2.18.0
+
diff --git a/user/rust/0006-Prefer-libgcc_eh-over-libunwind-for-musl.patch b/user/rust/0006-Prefer-libgcc_eh-over-libunwind-for-musl.patch
new file mode 100644
index 000000000..2e0aa35d8
--- /dev/null
+++ b/user/rust/0006-Prefer-libgcc_eh-over-libunwind-for-musl.patch
@@ -0,0 +1,24 @@
+From 6b2b48be476938c0f74b4e521e5ce3ecbeb19641 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sat, 9 Sep 2017 00:14:16 -0500
+Subject: [PATCH 06/28] Prefer libgcc_eh over libunwind for musl
+
+---
+ src/libunwind/lib.rs | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/libunwind/lib.rs b/src/libunwind/lib.rs
+index 2b3c19c067..8233beada0 100644
+--- a/src/libunwind/lib.rs
++++ b/src/libunwind/lib.rs
+@@ -35,6 +35,6 @@ cfg_if! {
+ }
+
+ #[cfg(target_env = "musl")]
+-#[link(name = "unwind", kind = "static", cfg(target_feature = "crt-static"))]
++#[link(name = "gcc_eh", cfg(target_feature = "crt-static"))]
+ #[link(name = "gcc_s", cfg(not(target_feature = "crt-static")))]
+ extern {}
+--
+2.18.0
+
diff --git a/user/rust/0007-runtest-Fix-proc-macro-tests-on-musl-hosts.patch b/user/rust/0007-runtest-Fix-proc-macro-tests-on-musl-hosts.patch
new file mode 100644
index 000000000..102e2e3a9
--- /dev/null
+++ b/user/rust/0007-runtest-Fix-proc-macro-tests-on-musl-hosts.patch
@@ -0,0 +1,37 @@
+From 30a10fccca71d84e696bf907621c30f66eb708e6 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 16 Sep 2018 16:40:04 +0000
+Subject: [PATCH 07/28] runtest: Fix proc-macro tests on musl hosts
+
+---
+ src/tools/compiletest/src/runtest.rs | 7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
+
+diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs
+index ce7828144c..ec48fd2d85 100644
+--- a/src/tools/compiletest/src/runtest.rs
++++ b/src/tools/compiletest/src/runtest.rs
+@@ -1509,7 +1509,6 @@ impl<'test> TestCx<'test> {
+ None
+ } else if self.config.target.contains("cloudabi")
+ || self.config.target.contains("emscripten")
+- || (self.config.target.contains("musl") && !aux_props.force_host)
+ || self.config.target.contains("wasm32")
+ {
+ // We primarily compile all auxiliary libraries as dynamic libraries
+@@ -1517,10 +1516,8 @@ impl<'test> TestCx<'test> {
+ // for the test suite (otherwise including libstd statically in all
+ // executables takes up quite a bit of space).
+ //
+- // For targets like MUSL or Emscripten, however, there is no support for
+- // dynamic libraries so we just go back to building a normal library. Note,
+- // however, that for MUSL if the library is built with `force_host` then
+- // it's ok to be a dylib as the host should always support dylibs.
++ // For targets like Emscripten, however, there is no support for
++ // dynamic libraries so we just go back to building a normal library.
+ Some("lib")
+ } else {
+ Some("dylib")
+--
+2.18.0
+
diff --git a/user/rust/0008-Allow-rustdoc-to-work-when-cross-compiling-on-musl.patch b/user/rust/0008-Allow-rustdoc-to-work-when-cross-compiling-on-musl.patch
new file mode 100644
index 000000000..7dbd51a92
--- /dev/null
+++ b/user/rust/0008-Allow-rustdoc-to-work-when-cross-compiling-on-musl.patch
@@ -0,0 +1,36 @@
+From 8b418c37f13710085f9a0c0c70904ad07e799c3f Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sat, 2 Dec 2017 17:25:44 -0600
+Subject: [PATCH 08/28] Allow rustdoc to work when cross-compiling on musl
+
+musl can't handle foreign-architecture libraries in LD_LIBRARY_PATH.
+---
+ src/bootstrap/bin/rustdoc.rs | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/src/bootstrap/bin/rustdoc.rs b/src/bootstrap/bin/rustdoc.rs
+index a54e58665c..fc0cf940e2 100644
+--- a/src/bootstrap/bin/rustdoc.rs
++++ b/src/bootstrap/bin/rustdoc.rs
+@@ -34,9 +34,6 @@ fn main() {
+ Err(_) => 0,
+ };
+
+- let mut dylib_path = bootstrap::util::dylib_path();
+- dylib_path.insert(0, PathBuf::from(libdir.clone()));
+-
+ let mut cmd = Command::new(rustdoc);
+ cmd.args(&args)
+ .arg("--cfg")
+@@ -46,7 +43,7 @@ fn main() {
+ .arg("--sysroot")
+ .arg(sysroot)
+ .env(bootstrap::util::dylib_path_var(),
+- env::join_paths(&dylib_path).unwrap());
++ PathBuf::from(libdir.clone()));
+
+ // Force all crates compiled by this compiler to (a) be unstable and (b)
+ // allow the `rustc_private` feature to link to other unstable crates
+--
+2.18.0
+
diff --git a/user/rust/0009-Add-missing-OpenSSL-configurations-for-musl-targets.patch b/user/rust/0009-Add-missing-OpenSSL-configurations-for-musl-targets.patch
new file mode 100644
index 000000000..1bd596f33
--- /dev/null
+++ b/user/rust/0009-Add-missing-OpenSSL-configurations-for-musl-targets.patch
@@ -0,0 +1,42 @@
+From 29fdec385825390eca134825acda5c2cbb09bceb Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Mon, 11 Sep 2017 11:21:56 -0500
+Subject: [PATCH 09/28] Add missing OpenSSL configurations for musl targets
+
+---
+ src/bootstrap/native.rs | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/src/bootstrap/native.rs b/src/bootstrap/native.rs
+index 9aeb4e0eda..18c3dba233 100644
+--- a/src/bootstrap/native.rs
++++ b/src/bootstrap/native.rs
+@@ -610,9 +610,13 @@ impl Step for Openssl {
+ "arm-linux-androideabi" => "android",
+ "arm-unknown-linux-gnueabi" => "linux-armv4",
+ "arm-unknown-linux-gnueabihf" => "linux-armv4",
++ "arm-unknown-linux-musleabi" => "linux-armv4",
++ "arm-unknown-linux-musleabihf" => "linux-armv4",
++ "armv5te-unknown-linux-musleabi" => "linux-armv4",
+ "armv6-unknown-netbsd-eabihf" => "BSD-generic32",
+ "armv7-linux-androideabi" => "android-armv7",
+ "armv7-unknown-linux-gnueabihf" => "linux-armv4",
++ "armv7-unknown-linux-musleabihf" => "linux-armv4",
+ "armv7-unknown-netbsd-eabihf" => "BSD-generic32",
+ "i586-unknown-linux-gnu" => "linux-elf",
+ "i586-unknown-linux-musl" => "linux-elf",
+@@ -623,9 +627,11 @@ impl Step for Openssl {
+ "i686-unknown-linux-musl" => "linux-elf",
+ "i686-unknown-netbsd" => "BSD-x86-elf",
+ "mips-unknown-linux-gnu" => "linux-mips32",
++ "mips-unknown-linux-musl" => "linux-mips32",
+ "mips64-unknown-linux-gnuabi64" => "linux64-mips64",
+ "mips64el-unknown-linux-gnuabi64" => "linux64-mips64",
+ "mipsel-unknown-linux-gnu" => "linux-mips32",
++ "mipsel-unknown-linux-musl" => "linux-mips32",
+ "powerpc-unknown-linux-gnu" => "linux-ppc",
+ "powerpc-unknown-linux-gnuspe" => "linux-ppc",
+ "powerpc-unknown-netbsd" => "BSD-generic32",
+--
+2.18.0
+
diff --git a/user/rust/0010-test-linkage-visibility-dlsym-only-sees-exported-sym.patch b/user/rust/0010-test-linkage-visibility-dlsym-only-sees-exported-sym.patch
new file mode 100644
index 000000000..1d6b5ae0d
--- /dev/null
+++ b/user/rust/0010-test-linkage-visibility-dlsym-only-sees-exported-sym.patch
@@ -0,0 +1,26 @@
+From 5cbbac1243e4cda725f82337245881fe71beeec0 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 16 Sep 2018 16:35:41 +0000
+Subject: [PATCH 10/28] test/linkage-visibility: dlsym only sees exported
+ symbols
+
+---
+ src/test/run-pass-fulldeps/auxiliary/linkage-visibility.rs | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/test/run-pass-fulldeps/auxiliary/linkage-visibility.rs b/src/test/run-pass-fulldeps/auxiliary/linkage-visibility.rs
+index 7a15a4cb3a..853d97670d 100644
+--- a/src/test/run-pass-fulldeps/auxiliary/linkage-visibility.rs
++++ b/src/test/run-pass-fulldeps/auxiliary/linkage-visibility.rs
+@@ -8,6 +8,8 @@
+ // option. This file may not be copied, modified, or distributed
+ // except according to those terms.
+
++// compile-flags: -C link-arg=-Wl,--export-dynamic
++
+ #![feature(rustc_private)]
+
+ // We're testing linkage visibility; the compiler warns us, but we want to
+--
+2.18.0
+
diff --git a/user/rust/0011-test-invalid_const_promotion-Accept-SIGTRAP-as-a-val.patch b/user/rust/0011-test-invalid_const_promotion-Accept-SIGTRAP-as-a-val.patch
new file mode 100644
index 000000000..b2bd46ab7
--- /dev/null
+++ b/user/rust/0011-test-invalid_const_promotion-Accept-SIGTRAP-as-a-val.patch
@@ -0,0 +1,25 @@
+From c4ed34adcd7649f886354115132fb18489ed91dc Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 16 Sep 2018 16:37:09 +0000
+Subject: [PATCH 11/28] test/invalid_const_promotion: Accept SIGTRAP as a valid
+ death signal
+
+---
+ src/test/run-pass/invalid_const_promotion.rs | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/test/run-pass/invalid_const_promotion.rs b/src/test/run-pass/invalid_const_promotion.rs
+index 53cb4c4b00..dc4c0a51dd 100644
+--- a/src/test/run-pass/invalid_const_promotion.rs
++++ b/src/test/run-pass/invalid_const_promotion.rs
+@@ -33,6 +33,7 @@ fn check_status(status: std::process::ExitStatus)
+ use std::os::unix::process::ExitStatusExt;
+
+ assert!(status.signal() == Some(libc::SIGILL)
++ || status.signal() == Some(libc::SIGTRAP)
+ || status.signal() == Some(libc::SIGABRT));
+ }
+
+--
+2.18.0
+
diff --git a/user/rust/0012-Add-powerpc-unknown-linux-musl-target.patch b/user/rust/0012-Add-powerpc-unknown-linux-musl-target.patch
new file mode 100644
index 000000000..acf5285c0
--- /dev/null
+++ b/user/rust/0012-Add-powerpc-unknown-linux-musl-target.patch
@@ -0,0 +1,92 @@
+From 3e06726c26cd4ca93e7434cb33f7749e4d7311da Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Mon, 10 Sep 2018 01:35:35 +0000
+Subject: [PATCH 12/28] Add powerpc-unknown-linux-musl target
+
+---
+ src/bootstrap/native.rs | 1 +
+ src/librustc_target/spec/mod.rs | 1 +
+ .../spec/powerpc_unknown_linux_musl.rs | 34 +++++++++++++++++++
+ src/tools/build-manifest/src/main.rs | 1 +
+ 4 files changed, 37 insertions(+)
+ create mode 100644 src/librustc_target/spec/powerpc_unknown_linux_musl.rs
+
+diff --git a/src/bootstrap/native.rs b/src/bootstrap/native.rs
+index 18c3dba233..7c32b8b546 100644
+--- a/src/bootstrap/native.rs
++++ b/src/bootstrap/native.rs
+@@ -634,6 +634,7 @@ impl Step for Openssl {
+ "mipsel-unknown-linux-musl" => "linux-mips32",
+ "powerpc-unknown-linux-gnu" => "linux-ppc",
+ "powerpc-unknown-linux-gnuspe" => "linux-ppc",
++ "powerpc-unknown-linux-musl" => "linux-ppc",
+ "powerpc-unknown-netbsd" => "BSD-generic32",
+ "powerpc64-unknown-linux-gnu" => "linux-ppc64",
+ "powerpc64le-unknown-linux-gnu" => "linux-ppc64le",
+diff --git a/src/librustc_target/spec/mod.rs b/src/librustc_target/spec/mod.rs
+index c5d21cdc46..f09e5a7465 100644
+--- a/src/librustc_target/spec/mod.rs
++++ b/src/librustc_target/spec/mod.rs
+@@ -272,6 +272,7 @@ supported_targets! {
+ ("mipsel-unknown-linux-gnu", mipsel_unknown_linux_gnu),
+ ("powerpc-unknown-linux-gnu", powerpc_unknown_linux_gnu),
+ ("powerpc-unknown-linux-gnuspe", powerpc_unknown_linux_gnuspe),
++ ("powerpc-unknown-linux-musl", powerpc_unknown_linux_musl),
+ ("powerpc64-unknown-linux-gnu", powerpc64_unknown_linux_gnu),
+ ("powerpc64le-unknown-linux-gnu", powerpc64le_unknown_linux_gnu),
+ ("powerpc64le-unknown-linux-musl", powerpc64le_unknown_linux_musl),
+diff --git a/src/librustc_target/spec/powerpc_unknown_linux_musl.rs b/src/librustc_target/spec/powerpc_unknown_linux_musl.rs
+new file mode 100644
+index 0000000000..48340da514
+--- /dev/null
++++ b/src/librustc_target/spec/powerpc_unknown_linux_musl.rs
+@@ -0,0 +1,34 @@
++// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
++// file at the top-level directory of this distribution and at
++// http://rust-lang.org/COPYRIGHT.
++//
++// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
++// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
++// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
++// option. This file may not be copied, modified, or distributed
++// except according to those terms.
++
++use spec::{LinkerFlavor, Target, TargetResult};
++
++pub fn target() -> TargetResult {
++ let mut base = super::linux_musl_base::opts();
++ base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m32".to_string());
++ base.max_atomic_width = Some(32);
++
++ // see #36994
++ base.exe_allocation_crate = None;
++
++ Ok(Target {
++ llvm_target: "powerpc-unknown-linux-musl".to_string(),
++ target_endian: "big".to_string(),
++ target_pointer_width: "32".to_string(),
++ target_c_int_width: "32".to_string(),
++ data_layout: "E-m:e-p:32:32-i64:64-n32".to_string(),
++ arch: "powerpc".to_string(),
++ target_os: "linux".to_string(),
++ target_env: "musl".to_string(),
++ target_vendor: "unknown".to_string(),
++ linker_flavor: LinkerFlavor::Gcc,
++ options: base,
++ })
++}
+diff --git a/src/tools/build-manifest/src/main.rs b/src/tools/build-manifest/src/main.rs
+index 83b2895e1d..7659d24f47 100644
+--- a/src/tools/build-manifest/src/main.rs
++++ b/src/tools/build-manifest/src/main.rs
+@@ -86,6 +86,7 @@ static TARGETS: &'static [&'static str] = &[
+ "mipsel-unknown-linux-musl",
+ "powerpc-unknown-linux-gnu",
+ "powerpc-unknown-linux-gnuspe",
++ "powerpc-unknown-linux-musl",
+ "powerpc64-unknown-linux-gnu",
+ "powerpc64le-unknown-linux-gnu",
+ "powerpc64le-unknown-linux-musl",
+--
+2.18.0
+
diff --git a/user/rust/0015-Use-ELFv2-ABI-on-powerpc64-musl-LLVM-half.patch b/user/rust/0015-Use-ELFv2-ABI-on-powerpc64-musl-LLVM-half.patch
new file mode 100644
index 000000000..72743d01d
--- /dev/null
+++ b/user/rust/0015-Use-ELFv2-ABI-on-powerpc64-musl-LLVM-half.patch
@@ -0,0 +1,29 @@
+From 91000b21e3a9938a66b7a9d12281b807004eefcc Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Wed, 8 Aug 2018 22:06:09 -0500
+Subject: [PATCH 15/28] Use ELFv2 ABI on powerpc64 musl (LLVM half)
+
+---
+ src/rustllvm/PassWrapper.cpp | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/src/rustllvm/PassWrapper.cpp b/src/rustllvm/PassWrapper.cpp
+index 85fbc4bf37..15c3ab18d9 100644
+--- a/src/rustllvm/PassWrapper.cpp
++++ b/src/rustllvm/PassWrapper.cpp
+@@ -399,6 +399,12 @@ extern "C" LLVMTargetMachineRef LLVMRustCreateTargetMachine(
+ Options.ThreadModel = ThreadModel::Single;
+ }
+
++ // See https://reviews.llvm.org/D52013
++ if (Trip.getArch() == llvm::Triple::ArchType::ppc64 &&
++ Trip.getEnvironment() == llvm::Triple::EnvironmentType::Musl) {
++ Options.MCOptions.ABIName = "elfv2";
++ }
++
+ #if LLVM_VERSION_GE(6, 0)
+ Optional<CodeModel::Model> CM;
+ #else
+--
+2.18.0
+
diff --git a/user/rust/0016-Use-ELFv2-ABI-on-powerpc64-musl-Rust-half.patch b/user/rust/0016-Use-ELFv2-ABI-on-powerpc64-musl-Rust-half.patch
new file mode 100644
index 000000000..5841dfaf5
--- /dev/null
+++ b/user/rust/0016-Use-ELFv2-ABI-on-powerpc64-musl-Rust-half.patch
@@ -0,0 +1,43 @@
+From 616f6627b1489fbf87f867cc9b7a2c870c64f06f Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Wed, 8 Aug 2018 22:06:18 -0500
+Subject: [PATCH 16/28] Use ELFv2 ABI on powerpc64 musl (Rust half)
+
+---
+ src/librustc_target/abi/call/powerpc64.rs | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/src/librustc_target/abi/call/powerpc64.rs b/src/librustc_target/abi/call/powerpc64.rs
+index 0c5ec77a39..4851b25fe7 100644
+--- a/src/librustc_target/abi/call/powerpc64.rs
++++ b/src/librustc_target/abi/call/powerpc64.rs
+@@ -14,6 +14,7 @@
+
+ use abi::call::{FnType, ArgType, Reg, RegKind, Uniform};
+ use abi::{Align, Endian, HasDataLayout, LayoutOf, TyLayout, TyLayoutMethods};
++use spec::HasTargetSpec;
+
+ #[derive(Debug, Clone, Copy, PartialEq)]
+ enum ABI {
+@@ -136,11 +137,14 @@ fn classify_arg_ty<'a, Ty, C>(cx: C, arg: &mut ArgType<'a, Ty>, abi: ABI)
+
+ pub fn compute_abi_info<'a, Ty, C>(cx: C, fty: &mut FnType<'a, Ty>)
+ where Ty: TyLayoutMethods<'a, C> + Copy,
+- C: LayoutOf<Ty = Ty, TyLayout = TyLayout<'a, Ty>> + HasDataLayout
++ C: LayoutOf<Ty = Ty, TyLayout = TyLayout<'a, Ty>> + HasDataLayout + HasTargetSpec
+ {
+- let abi = match cx.data_layout().endian {
+- Endian::Big => ELFv1,
+- Endian::Little => ELFv2,
++ let abi = match cx.target_spec().target_env {
++ "musl" => ELFv2,
++ _ => match cx.data_layout().endian {
++ Endian::Big => ELFv1,
++ Endian::Little => ELFv2
++ }
+ };
+
+ if !fty.ret.is_ignore() {
+--
+2.18.0
+
diff --git a/user/rust/0017-Fix-powerpc64-ELFv2-big-endian-struct-passing-ABI.patch b/user/rust/0017-Fix-powerpc64-ELFv2-big-endian-struct-passing-ABI.patch
new file mode 100644
index 000000000..35bf35f6c
--- /dev/null
+++ b/user/rust/0017-Fix-powerpc64-ELFv2-big-endian-struct-passing-ABI.patch
@@ -0,0 +1,93 @@
+From 87d7cb5226728f549af3a7f469a6107c3acbc41d Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 16 Sep 2018 16:34:15 +0000
+Subject: [PATCH 17/28] Fix powerpc64 ELFv2 big-endian struct-passing ABI
+
+The requirements here are not "ELFv1" requirements, but big-endian
+requirements, as the extension or non-extension of the argument is
+necessary to put the argument in the correct half of the register.
+Parameter passing in the ELFv2 ABI needs these same transformations.
+Since this code makes no difference on little-endian machines, simplify
+it to use the same code path everywhere.
+---
+ src/librustc_target/abi/call/powerpc64.rs | 36 ++++++++++-------------
+ src/librustc_target/abi/mod.rs | 2 +-
+ 2 files changed, 17 insertions(+), 21 deletions(-)
+
+diff --git a/src/librustc_target/abi/call/powerpc64.rs b/src/librustc_target/abi/call/powerpc64.rs
+index 4851b25fe7..9e616c034e 100644
+--- a/src/librustc_target/abi/call/powerpc64.rs
++++ b/src/librustc_target/abi/call/powerpc64.rs
+@@ -76,7 +76,9 @@ fn classify_ret_ty<'a, Ty, C>(cx: C, ret: &mut ArgType<'a, Ty>, abi: ABI)
+ let size = ret.layout.size;
+ let bits = size.bits();
+ if bits <= 128 {
+- let unit = if bits <= 8 {
++ let unit = if cx.data_layout().endian == Endian::Big {
++ Reg { kind: RegKind::Integer, size }
++ } else if bits <= 8 {
+ Reg::i8()
+ } else if bits <= 16 {
+ Reg::i16()
+@@ -111,22 +113,15 @@ fn classify_arg_ty<'a, Ty, C>(cx: C, arg: &mut ArgType<'a, Ty>, abi: ABI)
+ }
+
+ let size = arg.layout.size;
+- let (unit, total) = match abi {
+- ELFv1 => {
+- // In ELFv1, aggregates smaller than a doubleword should appear in
+- // the least-significant bits of the parameter doubleword. The rest
+- // should be padded at their tail to fill out multiple doublewords.
+- if size.bits() <= 64 {
+- (Reg { kind: RegKind::Integer, size }, size)
+- } else {
+- let align = Align::from_bits(64, 64).unwrap();
+- (Reg::i64(), size.abi_align(align))
+- }
+- },
+- ELFv2 => {
+- // In ELFv2, we can just cast directly.
+- (Reg::i64(), size)
+- },
++ let (unit, total) = if size.bits() <= 64 {
++ // Aggregates smaller than a doubleword should appear in
++ // the least-significant bits of the parameter doubleword.
++ (Reg { kind: RegKind::Integer, size }, size)
++ } else {
++ // Aggregates larger than a doubleword should be padded
++ // at the tail to fill out a whole number of doublewords.
++ let align = Align::from_bits(64, 64).unwrap();
++ (Reg::i64(), size.abi_align(align))
+ };
+
+ arg.cast_to(Uniform {
+@@ -139,9 +134,10 @@ pub fn compute_abi_info<'a, Ty, C>(cx: C, fty: &mut FnType<'a, Ty>)
+ where Ty: TyLayoutMethods<'a, C> + Copy,
+ C: LayoutOf<Ty = Ty, TyLayout = TyLayout<'a, Ty>> + HasDataLayout + HasTargetSpec
+ {
+- let abi = match cx.target_spec().target_env {
+- "musl" => ELFv2,
+- _ => match cx.data_layout().endian {
++ let abi = if cx.target_spec().target_env == "musl" {
++ ELFv2
++ } else {
++ match cx.data_layout().endian {
+ Endian::Big => ELFv1,
+ Endian::Little => ELFv2
+ }
+diff --git a/src/librustc_target/abi/mod.rs b/src/librustc_target/abi/mod.rs
+index dac4738e2b..35b1ceb967 100644
+--- a/src/librustc_target/abi/mod.rs
++++ b/src/librustc_target/abi/mod.rs
+@@ -214,7 +214,7 @@ impl<'a> HasDataLayout for &'a TargetDataLayout {
+ }
+
+ /// Endianness of the target, which must match cfg(target-endian).
+-#[derive(Copy, Clone)]
++#[derive(Copy, Clone, PartialEq)]
+ pub enum Endian {
+ Little,
+ Big
+--
+2.18.0
+
diff --git a/user/rust/0018-Add-powerpc64-unknown-linux-musl-target.patch b/user/rust/0018-Add-powerpc64-unknown-linux-musl-target.patch
new file mode 100644
index 000000000..a21c07b12
--- /dev/null
+++ b/user/rust/0018-Add-powerpc64-unknown-linux-musl-target.patch
@@ -0,0 +1,118 @@
+From 529fb4b3cdc73a3a6b098f13f7d07255f0ebb63e Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Tue, 7 Aug 2018 21:59:15 -0500
+Subject: [PATCH 18/28] Add powerpc64-unknown-linux-musl target
+
+---
+ src/bootstrap/native.rs | 5 +++
+ src/librustc_target/abi/call/powerpc64.rs | 2 +-
+ src/librustc_target/spec/mod.rs | 1 +
+ .../spec/powerpc64_unknown_linux_musl.rs | 35 +++++++++++++++++++
+ src/tools/build-manifest/src/main.rs | 1 +
+ 5 files changed, 43 insertions(+), 1 deletion(-)
+ create mode 100644 src/librustc_target/spec/powerpc64_unknown_linux_musl.rs
+
+diff --git a/src/bootstrap/native.rs b/src/bootstrap/native.rs
+index 7c32b8b546..186ef75189 100644
+--- a/src/bootstrap/native.rs
++++ b/src/bootstrap/native.rs
+@@ -637,6 +637,7 @@ impl Step for Openssl {
+ "powerpc-unknown-linux-musl" => "linux-ppc",
+ "powerpc-unknown-netbsd" => "BSD-generic32",
+ "powerpc64-unknown-linux-gnu" => "linux-ppc64",
++ "powerpc64-unknown-linux-musl" => "linux-ppc64",
+ "powerpc64le-unknown-linux-gnu" => "linux-ppc64le",
+ "powerpc64le-unknown-linux-musl" => "linux-ppc64le",
+ "s390x-unknown-linux-gnu" => "linux64-s390x",
+@@ -664,6 +665,10 @@ impl Step for Openssl {
+ configure.arg("-mandroid");
+ configure.arg("-fomit-frame-pointer");
+ }
++ // OpenSSL ships incompatible ELFv1 ABI assembly code
++ if target == "powerpc64-unknown-linux-musl" {
++ configure.arg("no-asm");
++ }
+ if target == "sparc64-unknown-netbsd" {
+ // Need -m64 to get assembly generated correctly for sparc64.
+ configure.arg("-m64");
+diff --git a/src/librustc_target/abi/call/powerpc64.rs b/src/librustc_target/abi/call/powerpc64.rs
+index 9e616c034e..18d14495e2 100644
+--- a/src/librustc_target/abi/call/powerpc64.rs
++++ b/src/librustc_target/abi/call/powerpc64.rs
+@@ -19,7 +19,7 @@ use spec::HasTargetSpec;
+ #[derive(Debug, Clone, Copy, PartialEq)]
+ enum ABI {
+ ELFv1, // original ABI used for powerpc64 (big-endian)
+- ELFv2, // newer ABI used for powerpc64le
++ ELFv2, // newer ABI used for powerpc64le and musl (both endians)
+ }
+ use self::ABI::*;
+
+diff --git a/src/librustc_target/spec/mod.rs b/src/librustc_target/spec/mod.rs
+index f09e5a7465..94aa07abb6 100644
+--- a/src/librustc_target/spec/mod.rs
++++ b/src/librustc_target/spec/mod.rs
+@@ -274,6 +274,7 @@ supported_targets! {
+ ("powerpc-unknown-linux-gnuspe", powerpc_unknown_linux_gnuspe),
+ ("powerpc-unknown-linux-musl", powerpc_unknown_linux_musl),
+ ("powerpc64-unknown-linux-gnu", powerpc64_unknown_linux_gnu),
++ ("powerpc64-unknown-linux-musl", powerpc64_unknown_linux_musl),
+ ("powerpc64le-unknown-linux-gnu", powerpc64le_unknown_linux_gnu),
+ ("powerpc64le-unknown-linux-musl", powerpc64le_unknown_linux_musl),
+ ("s390x-unknown-linux-gnu", s390x_unknown_linux_gnu),
+diff --git a/src/librustc_target/spec/powerpc64_unknown_linux_musl.rs b/src/librustc_target/spec/powerpc64_unknown_linux_musl.rs
+new file mode 100644
+index 0000000000..24ff9e0ecd
+--- /dev/null
++++ b/src/librustc_target/spec/powerpc64_unknown_linux_musl.rs
+@@ -0,0 +1,35 @@
++// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
++// file at the top-level directory of this distribution and at
++// http://rust-lang.org/COPYRIGHT.
++//
++// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
++// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
++// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
++// option. This file may not be copied, modified, or distributed
++// except according to those terms.
++
++use spec::{LinkerFlavor, Target, TargetResult};
++
++pub fn target() -> TargetResult {
++ let mut base = super::linux_musl_base::opts();
++ base.cpu = "ppc64".to_string();
++ base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string());
++ base.max_atomic_width = Some(64);
++
++ // see #36994
++ base.exe_allocation_crate = None;
++
++ Ok(Target {
++ llvm_target: "powerpc64-unknown-linux-musl".to_string(),
++ target_endian: "big".to_string(),
++ target_pointer_width: "64".to_string(),
++ target_c_int_width: "32".to_string(),
++ data_layout: "E-m:e-i64:64-n32:64".to_string(),
++ arch: "powerpc64".to_string(),
++ target_os: "linux".to_string(),
++ target_env: "musl".to_string(),
++ target_vendor: "unknown".to_string(),
++ linker_flavor: LinkerFlavor::Gcc,
++ options: base,
++ })
++}
+diff --git a/src/tools/build-manifest/src/main.rs b/src/tools/build-manifest/src/main.rs
+index 7659d24f47..e20f9fe216 100644
+--- a/src/tools/build-manifest/src/main.rs
++++ b/src/tools/build-manifest/src/main.rs
+@@ -88,6 +88,7 @@ static TARGETS: &'static [&'static str] = &[
+ "powerpc-unknown-linux-gnuspe",
+ "powerpc-unknown-linux-musl",
+ "powerpc64-unknown-linux-gnu",
++ "powerpc64-unknown-linux-musl",
+ "powerpc64le-unknown-linux-gnu",
+ "powerpc64le-unknown-linux-musl",
+ "s390x-unknown-linux-gnu",
+--
+2.18.0
+
diff --git a/user/rust/0019-run-pass-const-endianness-negate-before-to_le.patch b/user/rust/0019-run-pass-const-endianness-negate-before-to_le.patch
new file mode 100644
index 000000000..a024abc21
--- /dev/null
+++ b/user/rust/0019-run-pass-const-endianness-negate-before-to_le.patch
@@ -0,0 +1,29 @@
+From c38c7916aca7d0d0aa1d860ae16ec8743515c94c Mon Sep 17 00:00:00 2001
+From: Josh Stone <jistone@redhat.com>
+Date: Mon, 30 Jul 2018 13:08:56 -0700
+Subject: [PATCH 19/28] run-pass/const-endianness: negate before to_le()
+
+`const LE_I128` needs parentheses to negate the value *before* calling
+`to_le()`, otherwise it doesn't match the operations performed in the
+black-boxed part of the test. This only makes a tangible difference on
+big-endian targets.
+---
+ src/test/run-pass/const-endianess.rs | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/test/run-pass/const-endianess.rs b/src/test/run-pass/const-endianess.rs
+index fa34b49210..95c738d3ec 100644
+--- a/src/test/run-pass/const-endianess.rs
++++ b/src/test/run-pass/const-endianess.rs
+@@ -25,7 +25,7 @@ fn main() {
+ #[cfg(not(target_arch = "asmjs"))]
+ {
+ const BE_U128: u128 = 999999u128.to_be();
+- const LE_I128: i128 = -999999i128.to_le();
++ const LE_I128: i128 = (-999999i128).to_le();
+ assert_eq!(BE_U128, b(999999u128).to_be());
+ assert_eq!(LE_I128, b(-999999i128).to_le());
+ }
+--
+2.18.0
+
diff --git a/user/rust/0020-Fix-double_check-tests-on-big-endian-targets.patch b/user/rust/0020-Fix-double_check-tests-on-big-endian-targets.patch
new file mode 100644
index 000000000..ca8f7d1ad
--- /dev/null
+++ b/user/rust/0020-Fix-double_check-tests-on-big-endian-targets.patch
@@ -0,0 +1,75 @@
+From 94543ed21325120c86cde3267306272b519be3f7 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 16 Sep 2018 16:37:58 +0000
+Subject: [PATCH 20/28] Fix double_check tests on big-endian targets
+
+Since the enums get optimized down to 1 byte long, the bits
+set in the usize member don't align with the enums on big-endian
+machines. Avoid this issue by shrinking the integer member to the
+same size as the enums.
+---
+ src/test/ui/const-eval/double_check.rs | 8 ++++----
+ src/test/ui/const-eval/double_check2.rs | 8 ++++----
+ src/test/ui/const-eval/double_check2.stderr | 4 ++--
+ 3 files changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/src/test/ui/const-eval/double_check.rs b/src/test/ui/const-eval/double_check.rs
+index 81f6e7ddd2..76f9276c05 100644
+--- a/src/test/ui/const-eval/double_check.rs
++++ b/src/test/ui/const-eval/double_check.rs
+@@ -21,12 +21,12 @@ enum Bar {
+ union Union {
+ foo: &'static Foo,
+ bar: &'static Bar,
+- usize: &'static usize,
++ u8: &'static u8,
+ }
+-static BAR: usize = 42;
++static BAR: u8 = 42;
+ static FOO: (&Foo, &Bar) = unsafe {(
+- Union { usize: &BAR }.foo,
+- Union { usize: &BAR }.bar,
++ Union { u8: &BAR }.foo,
++ Union { u8: &BAR }.bar,
+ )};
+
+ fn main() {}
+diff --git a/src/test/ui/const-eval/double_check2.rs b/src/test/ui/const-eval/double_check2.rs
+index b661ee9247..701632362c 100644
+--- a/src/test/ui/const-eval/double_check2.rs
++++ b/src/test/ui/const-eval/double_check2.rs
+@@ -19,12 +19,12 @@ enum Bar {
+ union Union {
+ foo: &'static Foo,
+ bar: &'static Bar,
+- usize: &'static usize,
++ u8: &'static u8,
+ }
+-static BAR: usize = 5;
++static BAR: u8 = 5;
+ static FOO: (&Foo, &Bar) = unsafe {( //~ undefined behavior
+- Union { usize: &BAR }.foo,
+- Union { usize: &BAR }.bar,
++ Union { u8: &BAR }.foo,
++ Union { u8: &BAR }.bar,
+ )};
+
+ fn main() {}
+diff --git a/src/test/ui/const-eval/double_check2.stderr b/src/test/ui/const-eval/double_check2.stderr
+index 2a0a674e23..d0f44a627b 100644
+--- a/src/test/ui/const-eval/double_check2.stderr
++++ b/src/test/ui/const-eval/double_check2.stderr
+@@ -2,8 +2,8 @@ error[E0080]: this static likely exhibits undefined behavior
+ --> $DIR/double_check2.rs:25:1
+ |
+ LL | / static FOO: (&Foo, &Bar) = unsafe {( //~ undefined behavior
+-LL | | Union { usize: &BAR }.foo,
+-LL | | Union { usize: &BAR }.bar,
++LL | | Union { u8: &BAR }.foo,
++LL | | Union { u8: &BAR }.bar,
+ LL | | )};
+ | |___^ type validation failed: encountered 5 at (*.1).TAG, but expected something in the range 42..=99
+ |
+--
+2.18.0
+
diff --git a/user/rust/0021-x.py-Use-python3-instead-of-python.patch b/user/rust/0021-x.py-Use-python3-instead-of-python.patch
new file mode 100644
index 000000000..70a1dcb9a
--- /dev/null
+++ b/user/rust/0021-x.py-Use-python3-instead-of-python.patch
@@ -0,0 +1,22 @@
+From e6007a9a892ccece7c940782a1ac9c13275eb26a Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Mon, 10 Sep 2018 01:36:00 +0000
+Subject: [PATCH 21/28] x.py: Use python3 instead of python
+
+---
+ x.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/x.py b/x.py
+index e277ab98be..a75176a3f9 100755
+--- a/x.py
++++ b/x.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ # Copyright 2016 The Rust Project Developers. See the COPYRIGHT
+ # file at the top-level directory of this distribution and at
+ # http://rust-lang.org/COPYRIGHT.
+--
+2.18.0
+
diff --git a/user/rust/0022-test-debuginfo-Update-for-GDB-output-format-changes.patch b/user/rust/0022-test-debuginfo-Update-for-GDB-output-format-changes.patch
new file mode 100644
index 000000000..d7852a977
--- /dev/null
+++ b/user/rust/0022-test-debuginfo-Update-for-GDB-output-format-changes.patch
@@ -0,0 +1,109 @@
+From b50f6be09bdefa827bbb2248f48faaae87204a1d Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 16 Sep 2018 16:34:56 +0000
+Subject: [PATCH 22/28] test/debuginfo: Update for GDB output format changes
+
+---
+ .../generic-enum-with-different-disr-sizes.rs | 16 ++++++++--------
+ src/test/debuginfo/generic-struct-style-enum.rs | 6 +++---
+ src/test/debuginfo/generic-tuple-style-enum.rs | 6 +++---
+ 3 files changed, 14 insertions(+), 14 deletions(-)
+
+diff --git a/src/test/debuginfo/generic-enum-with-different-disr-sizes.rs b/src/test/debuginfo/generic-enum-with-different-disr-sizes.rs
+index 1fc05b3752..7e3818bc0e 100644
+--- a/src/test/debuginfo/generic-enum-with-different-disr-sizes.rs
++++ b/src/test/debuginfo/generic-enum-with-different-disr-sizes.rs
+@@ -19,36 +19,36 @@
+
+ // gdb-command:print eight_bytes1
+ // gdbg-check:$1 = {{RUST$ENUM$DISR = Variant1, __0 = 100}, {RUST$ENUM$DISR = Variant1, __0 = 100}}
+-// gdbr-check:$1 = generic_enum_with_different_disr_sizes::Enum::Variant1(100)
++// gdbr-check:$1 = generic_enum_with_different_disr_sizes::Enum<f64>::Variant1(100)
+
+ // gdb-command:print four_bytes1
+ // gdbg-check:$2 = {{RUST$ENUM$DISR = Variant1, __0 = 101}, {RUST$ENUM$DISR = Variant1, __0 = 101}}
+-// gdbr-check:$2 = generic_enum_with_different_disr_sizes::Enum::Variant1(101)
++// gdbr-check:$2 = generic_enum_with_different_disr_sizes::Enum<i32>::Variant1(101)
+
+ // gdb-command:print two_bytes1
+ // gdbg-check:$3 = {{RUST$ENUM$DISR = Variant1, __0 = 102}, {RUST$ENUM$DISR = Variant1, __0 = 102}}
+-// gdbr-check:$3 = generic_enum_with_different_disr_sizes::Enum::Variant1(102)
++// gdbr-check:$3 = generic_enum_with_different_disr_sizes::Enum<i16>::Variant1(102)
+
+ // gdb-command:print one_byte1
+ // gdbg-check:$4 = {{RUST$ENUM$DISR = Variant1, __0 = 65 'A'}, {RUST$ENUM$DISR = Variant1, __0 = 65 'A'}}
+-// gdbr-check:$4 = generic_enum_with_different_disr_sizes::Enum::Variant1(65)
++// gdbr-check:$4 = generic_enum_with_different_disr_sizes::Enum<u8>::Variant1(65)
+
+
+ // gdb-command:print eight_bytes2
+ // gdbg-check:$5 = {{RUST$ENUM$DISR = Variant2, __0 = 100}, {RUST$ENUM$DISR = Variant2, __0 = 100}}
+-// gdbr-check:$5 = generic_enum_with_different_disr_sizes::Enum::Variant2(100)
++// gdbr-check:$5 = generic_enum_with_different_disr_sizes::Enum<f64>::Variant2(100)
+
+ // gdb-command:print four_bytes2
+ // gdbg-check:$6 = {{RUST$ENUM$DISR = Variant2, __0 = 101}, {RUST$ENUM$DISR = Variant2, __0 = 101}}
+-// gdbr-check:$6 = generic_enum_with_different_disr_sizes::Enum::Variant2(101)
++// gdbr-check:$6 = generic_enum_with_different_disr_sizes::Enum<i32>::Variant2(101)
+
+ // gdb-command:print two_bytes2
+ // gdbg-check:$7 = {{RUST$ENUM$DISR = Variant2, __0 = 102}, {RUST$ENUM$DISR = Variant2, __0 = 102}}
+-// gdbr-check:$7 = generic_enum_with_different_disr_sizes::Enum::Variant2(102)
++// gdbr-check:$7 = generic_enum_with_different_disr_sizes::Enum<i16>::Variant2(102)
+
+ // gdb-command:print one_byte2
+ // gdbg-check:$8 = {{RUST$ENUM$DISR = Variant2, __0 = 65 'A'}, {RUST$ENUM$DISR = Variant2, __0 = 65 'A'}}
+-// gdbr-check:$8 = generic_enum_with_different_disr_sizes::Enum::Variant2(65)
++// gdbr-check:$8 = generic_enum_with_different_disr_sizes::Enum<u8>::Variant2(65)
+
+ // gdb-command:continue
+
+diff --git a/src/test/debuginfo/generic-struct-style-enum.rs b/src/test/debuginfo/generic-struct-style-enum.rs
+index 4a1d14ccf6..fa6b0105dc 100644
+--- a/src/test/debuginfo/generic-struct-style-enum.rs
++++ b/src/test/debuginfo/generic-struct-style-enum.rs
+@@ -19,15 +19,15 @@
+
+ // gdb-command:print case1
+ // gdbg-check:$1 = {{RUST$ENUM$DISR = Case1, a = 0, b = 31868, c = 31868, d = 31868, e = 31868}, {RUST$ENUM$DISR = Case1, [...]}, {RUST$ENUM$DISR = Case1, [...]}}
+-// gdbr-check:$1 = generic_struct_style_enum::Regular::Case1{a: 0, b: 31868, c: 31868, d: 31868, e: 31868}
++// gdbr-check:$1 = generic_struct_style_enum::Regular<u16, u32, i64>::Case1{a: 0, b: 31868, c: 31868, d: 31868, e: 31868}
+
+ // gdb-command:print case2
+ // gdbg-check:$2 = {{RUST$ENUM$DISR = Case2, [...]}, {RUST$ENUM$DISR = Case2, a = 0, b = 286331153, c = 286331153}, {RUST$ENUM$DISR = Case2, [...]}}
+-// gdbr-check:$2 = generic_struct_style_enum::Regular::Case2{a: 0, b: 286331153, c: 286331153}
++// gdbr-check:$2 = generic_struct_style_enum::Regular<i16, u32, i64>::Case2{a: 0, b: 286331153, c: 286331153}
+
+ // gdb-command:print case3
+ // gdbg-check:$3 = {{RUST$ENUM$DISR = Case3, [...]}, {RUST$ENUM$DISR = Case3, [...]}, {RUST$ENUM$DISR = Case3, a = 0, b = 6438275382588823897}}
+-// gdbr-check:$3 = generic_struct_style_enum::Regular::Case3{a: 0, b: 6438275382588823897}
++// gdbr-check:$3 = generic_struct_style_enum::Regular<u16, i32, u64>::Case3{a: 0, b: 6438275382588823897}
+
+ // gdb-command:print univariant
+ // gdbg-check:$4 = {{a = -1}}
+diff --git a/src/test/debuginfo/generic-tuple-style-enum.rs b/src/test/debuginfo/generic-tuple-style-enum.rs
+index 012bd6140c..b0f85d6f8b 100644
+--- a/src/test/debuginfo/generic-tuple-style-enum.rs
++++ b/src/test/debuginfo/generic-tuple-style-enum.rs
+@@ -21,15 +21,15 @@
+
+ // gdb-command:print case1
+ // gdbg-check:$1 = {{RUST$ENUM$DISR = Case1, __0 = 0, __1 = 31868, __2 = 31868, __3 = 31868, __4 = 31868}, {RUST$ENUM$DISR = Case1, [...]}, {RUST$ENUM$DISR = Case1, [...]}}
+-// gdbr-check:$1 = generic_tuple_style_enum::Regular::Case1(0, 31868, 31868, 31868, 31868)
++// gdbr-check:$1 = generic_tuple_style_enum::Regular<u16, u32, u64>::Case1(0, 31868, 31868, 31868, 31868)
+
+ // gdb-command:print case2
+ // gdbg-check:$2 = {{RUST$ENUM$DISR = Case2, [...]}, {RUST$ENUM$DISR = Case2, __0 = 0, __1 = 286331153, __2 = 286331153}, {RUST$ENUM$DISR = Case2, [...]}}
+-// gdbr-check:$2 = generic_tuple_style_enum::Regular::Case2(0, 286331153, 286331153)
++// gdbr-check:$2 = generic_tuple_style_enum::Regular<i16, i32, i64>::Case2(0, 286331153, 286331153)
+
+ // gdb-command:print case3
+ // gdbg-check:$3 = {{RUST$ENUM$DISR = Case3, [...]}, {RUST$ENUM$DISR = Case3, [...]}, {RUST$ENUM$DISR = Case3, __0 = 0, __1 = 6438275382588823897}}
+-// gdbr-check:$3 = generic_tuple_style_enum::Regular::Case3(0, 6438275382588823897)
++// gdbr-check:$3 = generic_tuple_style_enum::Regular<i16, i32, i64>::Case3(0, 6438275382588823897)
+
+ // gdb-command:print univariant
+ // gdbg-check:$4 = {{__0 = -1}}
+--
+2.18.0
+
diff --git a/user/rust/0023-test-target-feature-gate-Ignore-on-not-applicable-ta.patch b/user/rust/0023-test-target-feature-gate-Ignore-on-not-applicable-ta.patch
new file mode 100644
index 000000000..bcb0e8e77
--- /dev/null
+++ b/user/rust/0023-test-target-feature-gate-Ignore-on-not-applicable-ta.patch
@@ -0,0 +1,26 @@
+From 103ce33fe27dfcb0dad1354f269838f641fe66f6 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 16 Sep 2018 16:39:46 +0000
+Subject: [PATCH 23/28] test/target-feature-gate: Ignore on not-applicable
+ targets
+
+---
+ src/test/ui/target-feature-gate.rs | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/test/ui/target-feature-gate.rs b/src/test/ui/target-feature-gate.rs
+index 69208f1513..59c5708b0c 100644
+--- a/src/test/ui/target-feature-gate.rs
++++ b/src/test/ui/target-feature-gate.rs
+@@ -10,6 +10,8 @@
+
+ // ignore-arm
+ // ignore-aarch64
++// ignore-powerpc
++// ignore-powerpc64
+ // ignore-wasm
+ // ignore-emscripten
+ // gate-test-sse4a_target_feature
+--
+2.18.0
+
diff --git a/user/rust/0024-Ignore-broken-and-non-applicable-tests.patch b/user/rust/0024-Ignore-broken-and-non-applicable-tests.patch
new file mode 100644
index 000000000..75434c9fb
--- /dev/null
+++ b/user/rust/0024-Ignore-broken-and-non-applicable-tests.patch
@@ -0,0 +1,63 @@
+From 4ed9e0630eafd839c9b22e8ed56ecacccc913bdf Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sun, 16 Sep 2018 16:38:48 +0000
+Subject: [PATCH 24/28] Ignore broken and non-applicable tests
+
+long-linker-command-lines: takes more than 10 minutes to run
+nil-enum: GDB output changed in a questionable way
+sparc-struct-abi: no sparc target
+sysroot-crates-are-unstable: can't run rustc without rpath
+---
+ src/test/codegen/sparc-struct-abi.rs | 1 +
+ src/test/debuginfo/nil-enum.rs | 2 +-
+ src/test/run-make-fulldeps/long-linker-command-lines/Makefile | 1 -
+ src/test/run-make-fulldeps/sysroot-crates-are-unstable/Makefile | 2 +-
+ 4 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/test/codegen/sparc-struct-abi.rs b/src/test/codegen/sparc-struct-abi.rs
+index d3b7a5cd59..5e0f94cdf9 100644
+--- a/src/test/codegen/sparc-struct-abi.rs
++++ b/src/test/codegen/sparc-struct-abi.rs
+@@ -12,6 +12,7 @@
+ // See issue #52638.
+
+ // compile-flags: -O --target=sparc64-unknown-linux-gnu --crate-type=rlib
++// ignore-test
+ #![feature(no_core, lang_items)]
+ #![no_core]
+
+diff --git a/src/test/debuginfo/nil-enum.rs b/src/test/debuginfo/nil-enum.rs
+index 94377421c0..bce2b98447 100644
+--- a/src/test/debuginfo/nil-enum.rs
++++ b/src/test/debuginfo/nil-enum.rs
+@@ -10,7 +10,7 @@
+
+ // LLDB can't handle zero-sized values
+ // ignore-lldb
+-
++// ignore-test
+
+ // compile-flags:-g
+ // gdb-command:run
+diff --git a/src/test/run-make-fulldeps/long-linker-command-lines/Makefile b/src/test/run-make-fulldeps/long-linker-command-lines/Makefile
+index 5876fbc94b..e9f5c33b77 100644
+--- a/src/test/run-make-fulldeps/long-linker-command-lines/Makefile
++++ b/src/test/run-make-fulldeps/long-linker-command-lines/Makefile
+@@ -2,4 +2,3 @@
+
+ all:
+ $(RUSTC) foo.rs -g -O
+- RUSTC="$(RUSTC_ORIGINAL)" $(call RUN,foo)
+diff --git a/src/test/run-make-fulldeps/sysroot-crates-are-unstable/Makefile b/src/test/run-make-fulldeps/sysroot-crates-are-unstable/Makefile
+index 9e77070685..7784230b46 100644
+--- a/src/test/run-make-fulldeps/sysroot-crates-are-unstable/Makefile
++++ b/src/test/run-make-fulldeps/sysroot-crates-are-unstable/Makefile
+@@ -1,4 +1,4 @@
+ -include ../tools.mk
+
+ all:
+- env '$(HOST_RPATH_ENV)' python2.7 test.py
++ true
+--
+2.18.0
+
diff --git a/user/rust/0025-Move-debugger-scripts-to-usr-share-rust.patch b/user/rust/0025-Move-debugger-scripts-to-usr-share-rust.patch
new file mode 100644
index 000000000..f1b163f2d
--- /dev/null
+++ b/user/rust/0025-Move-debugger-scripts-to-usr-share-rust.patch
@@ -0,0 +1,53 @@
+From e2660b4762083f14a355d283b6383f7cab0d38fd Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Mon, 17 Sep 2018 02:09:10 +0000
+Subject: [PATCH 25/28] Move debugger scripts to /usr/share/rust
+
+---
+ src/bootstrap/dist.rs | 2 +-
+ src/etc/rust-gdb | 2 +-
+ src/etc/rust-lldb | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs
+index c6b39a52ae..ca21e87c9d 100644
+--- a/src/bootstrap/dist.rs
++++ b/src/bootstrap/dist.rs
+@@ -575,7 +575,7 @@ impl Step for DebuggerScripts {
+ fn run(self, builder: &Builder) {
+ let host = self.host;
+ let sysroot = self.sysroot;
+- let dst = sysroot.join("lib/rustlib/etc");
++ let dst = sysroot.join("share/rust");
+ t!(fs::create_dir_all(&dst));
+ let cp_debugger_script = |file: &str| {
+ builder.install(&builder.src.join("src/etc/").join(file), &dst, 0o644);
+diff --git a/src/etc/rust-gdb b/src/etc/rust-gdb
+index 6835d6aa90..dbdee6af31 100755
+--- a/src/etc/rust-gdb
++++ b/src/etc/rust-gdb
+@@ -14,7 +14,7 @@ set -e
+
+ # Find out where the pretty printer Python module is
+ RUSTC_SYSROOT=`rustc --print=sysroot`
+-GDB_PYTHON_MODULE_DIRECTORY="$RUSTC_SYSROOT/lib/rustlib/etc"
++GDB_PYTHON_MODULE_DIRECTORY="$RUSTC_SYSROOT/share/rust"
+
+ # Run GDB with the additional arguments that load the pretty printers
+ # Set the environment variable `RUST_GDB` to overwrite the call to a
+diff --git a/src/etc/rust-lldb b/src/etc/rust-lldb
+index f70ab65bce..621546bd3f 100755
+--- a/src/etc/rust-lldb
++++ b/src/etc/rust-lldb
+@@ -33,7 +33,7 @@ trap "rm -f $TMPFILE; exit" INT TERM EXIT
+ RUSTC_SYSROOT=`rustc --print sysroot`
+
+ # Write the LLDB script to the tempfile
+-echo "command script import \"$RUSTC_SYSROOT/lib/rustlib/etc/lldb_rust_formatters.py\"" >> $TMPFILE
++echo "command script import \"$RUSTC_SYSROOT/share/rust/lldb_rust_formatters.py\"" >> $TMPFILE
+ echo "type summary add --no-value --python-function lldb_rust_formatters.print_val -x \".*\" --category Rust" >> $TMPFILE
+ echo "type category enable Rust" >> $TMPFILE
+
+--
+2.18.0
+
diff --git a/user/rust/0026-Add-foxkit-target-specs.patch b/user/rust/0026-Add-foxkit-target-specs.patch
new file mode 100644
index 000000000..883748a0e
--- /dev/null
+++ b/user/rust/0026-Add-foxkit-target-specs.patch
@@ -0,0 +1,204 @@
+From 84f391140786018536c2eecd925c72814e5df38f Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Mon, 17 Sep 2018 02:29:06 +0000
+Subject: [PATCH 26/28] Add foxkit target specs
+
+---
+ .../spec/aarch64_foxkit_linux_musl.rs | 21 +++++++++++++++++++
+ .../spec/armv7_foxkit_linux_musleabihf.rs | 21 +++++++++++++++++++
+ .../spec/i586_foxkit_linux_musl.rs | 21 +++++++++++++++++++
+ src/librustc_target/spec/mod.rs | 7 +++++++
+ .../spec/powerpc64_foxkit_linux_musl.rs | 21 +++++++++++++++++++
+ .../spec/powerpc_foxkit_linux_musl.rs | 21 +++++++++++++++++++
+ .../spec/x86_64_foxkit_linux_musl.rs | 21 +++++++++++++++++++
+ 7 files changed, 133 insertions(+)
+ create mode 100644 src/librustc_target/spec/aarch64_foxkit_linux_musl.rs
+ create mode 100644 src/librustc_target/spec/armv7_foxkit_linux_musleabihf.rs
+ create mode 100644 src/librustc_target/spec/i586_foxkit_linux_musl.rs
+ create mode 100644 src/librustc_target/spec/powerpc64_foxkit_linux_musl.rs
+ create mode 100644 src/librustc_target/spec/powerpc_foxkit_linux_musl.rs
+ create mode 100644 src/librustc_target/spec/x86_64_foxkit_linux_musl.rs
+
+diff --git a/src/librustc_target/spec/aarch64_foxkit_linux_musl.rs b/src/librustc_target/spec/aarch64_foxkit_linux_musl.rs
+new file mode 100644
+index 0000000000..18ad2c2f31
+--- /dev/null
++++ b/src/librustc_target/spec/aarch64_foxkit_linux_musl.rs
+@@ -0,0 +1,21 @@
++// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
++// file at the top-level directory of this distribution and at
++// http://rust-lang.org/COPYRIGHT.
++//
++// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
++// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
++// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
++// option. This file may not be copied, modified, or distributed
++// except according to those terms.
++
++use spec::TargetResult;
++
++pub fn target() -> TargetResult {
++ let mut base = super::aarch64_unknown_linux_musl::target()?;
++
++ base.llvm_target = "aarch64-foxkit-linux-musl".to_string();
++ base.target_vendor = "foxkit".to_string();
++ base.options.crt_static_default = false;
++
++ Ok(base)
++}
+diff --git a/src/librustc_target/spec/armv7_foxkit_linux_musleabihf.rs b/src/librustc_target/spec/armv7_foxkit_linux_musleabihf.rs
+new file mode 100644
+index 0000000000..facfd5d363
+--- /dev/null
++++ b/src/librustc_target/spec/armv7_foxkit_linux_musleabihf.rs
+@@ -0,0 +1,21 @@
++// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
++// file at the top-level directory of this distribution and at
++// http://rust-lang.org/COPYRIGHT.
++//
++// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
++// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
++// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
++// option. This file may not be copied, modified, or distributed
++// except according to those terms.
++
++use spec::TargetResult;
++
++pub fn target() -> TargetResult {
++ let mut base = super::armv7_unknown_linux_musleabihf::target()?;
++
++ base.llvm_target = "armv7-foxkit-linux-musleabihf".to_string();
++ base.target_vendor = "foxkit".to_string();
++ base.options.crt_static_default = false;
++
++ Ok(base)
++}
+diff --git a/src/librustc_target/spec/i586_foxkit_linux_musl.rs b/src/librustc_target/spec/i586_foxkit_linux_musl.rs
+new file mode 100644
+index 0000000000..cd6280e586
+--- /dev/null
++++ b/src/librustc_target/spec/i586_foxkit_linux_musl.rs
+@@ -0,0 +1,21 @@
++// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
++// file at the top-level directory of this distribution and at
++// http://rust-lang.org/COPYRIGHT.
++//
++// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
++// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
++// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
++// option. This file may not be copied, modified, or distributed
++// except according to those terms.
++
++use spec::TargetResult;
++
++pub fn target() -> TargetResult {
++ let mut base = super::i586_unknown_linux_musl::target()?;
++
++ base.llvm_target = "i586-foxkit-linux-musl".to_string();
++ base.target_vendor = "foxkit".to_string();
++ base.options.crt_static_default = false;
++
++ Ok(base)
++}
+diff --git a/src/librustc_target/spec/mod.rs b/src/librustc_target/spec/mod.rs
+index 94aa07abb6..1187afbb60 100644
+--- a/src/librustc_target/spec/mod.rs
++++ b/src/librustc_target/spec/mod.rs
+@@ -375,6 +375,13 @@ supported_targets! {
+ ("armv7-unknown-cloudabi-eabihf", armv7_unknown_cloudabi_eabihf),
+ ("i686-unknown-cloudabi", i686_unknown_cloudabi),
+ ("x86_64-unknown-cloudabi", x86_64_unknown_cloudabi),
++
++ ("aarch64-foxkit-linux-musl", aarch64_foxkit_linux_musl),
++ ("armv7-foxkit-linux-musleabihf", armv7_foxkit_linux_musleabihf),
++ ("i586-foxkit-linux-musl", i586_foxkit_linux_musl),
++ ("powerpc-foxkit-linux-musl", powerpc_foxkit_linux_musl),
++ ("powerpc64-foxkit-linux-musl", powerpc64_foxkit_linux_musl),
++ ("x86_64-foxkit-linux-musl", x86_64_foxkit_linux_musl),
+ }
+
+ /// Everything `rustc` knows about how to compile for a specific target.
+diff --git a/src/librustc_target/spec/powerpc64_foxkit_linux_musl.rs b/src/librustc_target/spec/powerpc64_foxkit_linux_musl.rs
+new file mode 100644
+index 0000000000..b7202ee0fc
+--- /dev/null
++++ b/src/librustc_target/spec/powerpc64_foxkit_linux_musl.rs
+@@ -0,0 +1,21 @@
++// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
++// file at the top-level directory of this distribution and at
++// http://rust-lang.org/COPYRIGHT.
++//
++// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
++// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
++// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
++// option. This file may not be copied, modified, or distributed
++// except according to those terms.
++
++use spec::TargetResult;
++
++pub fn target() -> TargetResult {
++ let mut base = super::powerpc64_unknown_linux_musl::target()?;
++
++ base.llvm_target = "powerpc64-foxkit-linux-musl".to_string();
++ base.target_vendor = "foxkit".to_string();
++ base.options.crt_static_default = false;
++
++ Ok(base)
++}
+diff --git a/src/librustc_target/spec/powerpc_foxkit_linux_musl.rs b/src/librustc_target/spec/powerpc_foxkit_linux_musl.rs
+new file mode 100644
+index 0000000000..4daa96d3ce
+--- /dev/null
++++ b/src/librustc_target/spec/powerpc_foxkit_linux_musl.rs
+@@ -0,0 +1,21 @@
++// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
++// file at the top-level directory of this distribution and at
++// http://rust-lang.org/COPYRIGHT.
++//
++// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
++// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
++// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
++// option. This file may not be copied, modified, or distributed
++// except according to those terms.
++
++use spec::TargetResult;
++
++pub fn target() -> TargetResult {
++ let mut base = super::powerpc_unknown_linux_musl::target()?;
++
++ base.llvm_target = "powerpc-foxkit-linux-musl".to_string();
++ base.target_vendor = "foxkit".to_string();
++ base.options.crt_static_default = false;
++
++ Ok(base)
++}
+diff --git a/src/librustc_target/spec/x86_64_foxkit_linux_musl.rs b/src/librustc_target/spec/x86_64_foxkit_linux_musl.rs
+new file mode 100644
+index 0000000000..801dd8d6f4
+--- /dev/null
++++ b/src/librustc_target/spec/x86_64_foxkit_linux_musl.rs
+@@ -0,0 +1,21 @@
++// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
++// file at the top-level directory of this distribution and at
++// http://rust-lang.org/COPYRIGHT.
++//
++// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
++// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
++// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
++// option. This file may not be copied, modified, or distributed
++// except according to those terms.
++
++use spec::TargetResult;
++
++pub fn target() -> TargetResult {
++ let mut base = super::x86_64_unknown_linux_musl::target()?;
++
++ base.llvm_target = "x86_64-foxkit-linux-musl".to_string();
++ base.target_vendor = "foxkit".to_string();
++ base.options.crt_static_default = false;
++
++ Ok(base)
++}
+--
+2.18.0
+
diff --git a/user/rust/0027-Add-foxkit-target-specs-for-OpenSSL.patch b/user/rust/0027-Add-foxkit-target-specs-for-OpenSSL.patch
new file mode 100644
index 000000000..69e8584ba
--- /dev/null
+++ b/user/rust/0027-Add-foxkit-target-specs-for-OpenSSL.patch
@@ -0,0 +1,38 @@
+From 7eba02678b9a00bc6d38281795422663bca3fcc1 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Tue, 18 Sep 2018 00:02:46 +0000
+Subject: [PATCH 27/28] Add foxkit target specs for OpenSSL
+
+---
+ src/bootstrap/native.rs | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/src/bootstrap/native.rs b/src/bootstrap/native.rs
+index 186ef75189..406c76b95c 100644
+--- a/src/bootstrap/native.rs
++++ b/src/bootstrap/native.rs
+@@ -652,6 +652,12 @@ impl Step for Openssl {
+ "x86_64-unknown-linux-gnux32" => "linux-x32",
+ "x86_64-unknown-linux-musl" => "linux-x86_64",
+ "x86_64-unknown-netbsd" => "BSD-x86_64",
++ "aarch64-foxkit-linux-musl" => "linux-aarch64",
++ "armv7-foxkit-linux-musleabihf" => "linux-armv4",
++ "i586-foxkit-linux-musl" => "linux-elf",
++ "powerpc-foxkit-linux-musl" => "linux-ppc",
++ "powerpc64-foxkit-linux-musl" => "linux-ppc64",
++ "x86_64-foxkit-linux-musl" => "linux-x86_64",
+ _ => panic!("don't know how to configure OpenSSL for {}", target),
+ };
+ configure.arg(os);
+@@ -666,7 +672,7 @@ impl Step for Openssl {
+ configure.arg("-fomit-frame-pointer");
+ }
+ // OpenSSL ships incompatible ELFv1 ABI assembly code
+- if target == "powerpc64-unknown-linux-musl" {
++ if target == "powerpc64-unknown-linux-musl" || target == "powerpc64-foxkit-linux-musl" {
+ configure.arg("no-asm");
+ }
+ if target == "sparc64-unknown-netbsd" {
+--
+2.18.0
+
diff --git a/user/rust/0028-Link-stage-2-tools-dynamically-to-libstd.patch b/user/rust/0028-Link-stage-2-tools-dynamically-to-libstd.patch
new file mode 100644
index 000000000..5a6f8506c
--- /dev/null
+++ b/user/rust/0028-Link-stage-2-tools-dynamically-to-libstd.patch
@@ -0,0 +1,27 @@
+From 418b6417dbaf06f5afe7a076bc8d58c308a4a48c Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Mon, 24 Sep 2018 23:42:23 +0000
+Subject: [PATCH 28/28] Link stage 2 tools dynamically to libstd
+
+---
+ src/bootstrap/tool.rs | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/bootstrap/tool.rs b/src/bootstrap/tool.rs
+index 5e68b797b3..6a4c53f9a1 100644
+--- a/src/bootstrap/tool.rs
++++ b/src/bootstrap/tool.rs
+@@ -261,7 +261,9 @@ pub fn prepare_tool_cargo(
+
+ // We don't want to build tools dynamically as they'll be running across
+ // stages and such and it's just easier if they're not dynamically linked.
+- cargo.env("RUSTC_NO_PREFER_DYNAMIC", "1");
++ if compiler.stage < 2 {
++ cargo.env("RUSTC_NO_PREFER_DYNAMIC", "1");
++ }
+
+ if source_type == SourceType::Submodule {
+ cargo.env("RUSTC_EXTERNAL_TOOL", "1");
+--
+2.18.0
+
diff --git a/user/rust/0030-liblibc-linkage.patch b/user/rust/0030-liblibc-linkage.patch
new file mode 100644
index 000000000..4daa0e48f
--- /dev/null
+++ b/user/rust/0030-liblibc-linkage.patch
@@ -0,0 +1,17 @@
+diff --git a/src/liblibc/src/unix/mod.rs b/src/liblibc/src/unix/mod.rs
+index 9c68178a..1ae270e9 100644
+--- a/src/liblibc/src/unix/mod.rs
++++ b/src/liblibc/src/unix/mod.rs
+@@ -287,11 +287,7 @@ cfg_if! {
+ // cargo build, don't pull in anything extra as the libstd dep
+ // already pulls in all libs.
+ } else if #[cfg(target_env = "musl")] {
+- #[cfg_attr(feature = "stdbuild",
+- link(name = "c", kind = "static",
+- cfg(target_feature = "crt-static")))]
+- #[cfg_attr(feature = "stdbuild",
+- link(name = "c", cfg(not(target_feature = "crt-static"))))]
++ #[link(name = "c")]
+ extern {}
+ } else if #[cfg(target_os = "emscripten")] {
+ #[link(name = "c")]
diff --git a/user/rust/0031-liblibc-dcff154781e4.patch b/user/rust/0031-liblibc-dcff154781e4.patch
new file mode 100644
index 000000000..6840e203f
--- /dev/null
+++ b/user/rust/0031-liblibc-dcff154781e4.patch
@@ -0,0 +1,642 @@
+From dcff154781e4b3c6ef3a6a4024c73631f52f48cb Mon Sep 17 00:00:00 2001
+From: Mike Sullivan <mksully22@gmail.com>
+Date: Mon, 18 Jun 2018 15:16:25 +0000
+Subject: [PATCH] libc: changes to ppc64le musl branch to support building of
+ rust on Alpine amend to add style changes amend to add style changes
+
+---
+ src/unix/notbsd/linux/musl/b32/mod.rs | 74 ++++++++++
+ src/unix/notbsd/linux/musl/b64/mod.rs | 62 --------
+ src/unix/notbsd/linux/musl/b64/powerpc64.rs | 155 ++++++++++++++++++--
+ src/unix/notbsd/linux/musl/b64/x86_64.rs | 136 +++++++++++++++++
+ src/unix/notbsd/linux/musl/mod.rs | 74 ----------
+ 5 files changed, 353 insertions(+), 148 deletions(-)
+
+diff --git a/src/vendor/libc/src/unix/notbsd/linux/musl/b32/mod.rs b/src/vendor/libc/src/unix/notbsd/linux/musl/b32/mod.rs
+index f6e19d981dd..b4a0f761636 100644
+--- a/src/vendor/libc/src/unix/notbsd/linux/musl/b32/mod.rs
++++ b/src/vendor/libc/src/unix/notbsd/linux/musl/b32/mod.rs
+@@ -52,6 +52,80 @@ pub const MINSIGSTKSZ: ::size_t = 2048;
+ pub const __SIZEOF_PTHREAD_RWLOCK_T: usize = 32;
+ pub const __SIZEOF_PTHREAD_MUTEX_T: usize = 24;
+
++pub const RLIMIT_NLIMITS: ::c_int = 16;
++pub const TIOCINQ: ::c_int = ::FIONREAD;
++pub const MCL_CURRENT: ::c_int = 0x0001;
++pub const MCL_FUTURE: ::c_int = 0x0002;
++pub const CBAUD: ::tcflag_t = 0o0010017;
++pub const TAB1: ::c_int = 0x00000800;
++pub const TAB2: ::c_int = 0x00001000;
++pub const TAB3: ::c_int = 0x00001800;
++pub const CR1: ::c_int = 0x00000200;
++pub const CR2: ::c_int = 0x00000400;
++pub const CR3: ::c_int = 0x00000600;
++pub const FF1: ::c_int = 0x00008000;
++pub const BS1: ::c_int = 0x00002000;
++pub const VT1: ::c_int = 0x00004000;
++pub const VWERASE: usize = 14;
++pub const VREPRINT: usize = 12;
++pub const VSUSP: usize = 10;
++pub const VSTART: usize = 8;
++pub const VSTOP: usize = 9;
++pub const VDISCARD: usize = 13;
++pub const VTIME: usize = 5;
++pub const IXON: ::tcflag_t = 0x00000400;
++pub const IXOFF: ::tcflag_t = 0x00001000;
++pub const ONLCR: ::tcflag_t = 0x4;
++pub const CSIZE: ::tcflag_t = 0x00000030;
++pub const CS6: ::tcflag_t = 0x00000010;
++pub const CS7: ::tcflag_t = 0x00000020;
++pub const CS8: ::tcflag_t = 0x00000030;
++pub const CSTOPB: ::tcflag_t = 0x00000040;
++pub const CREAD: ::tcflag_t = 0x00000080;
++pub const PARENB: ::tcflag_t = 0x00000100;
++pub const PARODD: ::tcflag_t = 0x00000200;
++pub const HUPCL: ::tcflag_t = 0x00000400;
++pub const CLOCAL: ::tcflag_t = 0x00000800;
++pub const ECHOKE: ::tcflag_t = 0x00000800;
++pub const ECHOE: ::tcflag_t = 0x00000010;
++pub const ECHOK: ::tcflag_t = 0x00000020;
++pub const ECHONL: ::tcflag_t = 0x00000040;
++pub const ECHOPRT: ::tcflag_t = 0x00000400;
++pub const ECHOCTL: ::tcflag_t = 0x00000200;
++pub const ISIG: ::tcflag_t = 0x00000001;
++pub const ICANON: ::tcflag_t = 0x00000002;
++pub const PENDIN: ::tcflag_t = 0x00004000;
++pub const NOFLSH: ::tcflag_t = 0x00000080;
++pub const CIBAUD: ::tcflag_t = 0o02003600000;
++pub const CBAUDEX: ::tcflag_t = 0o010000;
++pub const VSWTC: usize = 7;
++pub const OLCUC: ::tcflag_t = 0o000002;
++pub const NLDLY: ::tcflag_t = 0o000400;
++pub const CRDLY: ::tcflag_t = 0o003000;
++pub const TABDLY: ::tcflag_t = 0o014000;
++pub const BSDLY: ::tcflag_t = 0o020000;
++pub const FFDLY: ::tcflag_t = 0o100000;
++pub const VTDLY: ::tcflag_t = 0o040000;
++pub const XTABS: ::tcflag_t = 0o014000;
++pub const B57600: ::speed_t = 0o010001;
++pub const B115200: ::speed_t = 0o010002;
++pub const B230400: ::speed_t = 0o010003;
++pub const B460800: ::speed_t = 0o010004;
++pub const B500000: ::speed_t = 0o010005;
++pub const B576000: ::speed_t = 0o010006;
++pub const B921600: ::speed_t = 0o010007;
++pub const B1000000: ::speed_t = 0o010010;
++pub const B1152000: ::speed_t = 0o010011;
++pub const B1500000: ::speed_t = 0o010012;
++pub const B2000000: ::speed_t = 0o010013;
++pub const B2500000: ::speed_t = 0o010014;
++pub const B3000000: ::speed_t = 0o010015;
++pub const B3500000: ::speed_t = 0o010016;
++pub const B4000000: ::speed_t = 0o010017;
++extern {
++ pub fn ioctl(fd: ::c_int, request: ::c_int, ...) -> ::c_int;
++}
++
+ cfg_if! {
+ if #[cfg(any(target_arch = "x86"))] {
+ mod x86;
+diff --git a/src/vendor/libc/src/unix/notbsd/linux/musl/b64/mod.rs b/src/vendor/libc/src/unix/notbsd/linux/musl/b64/mod.rs
+index 70baf8277a9..5c2e815fd60 100644
+--- a/src/vendor/libc/src/unix/notbsd/linux/musl/b64/mod.rs
++++ b/src/vendor/libc/src/unix/notbsd/linux/musl/b64/mod.rs
+@@ -136,9 +136,6 @@ pub const __SIZEOF_PTHREAD_MUTEX_T: usize = 40;
+
+ pub const O_ASYNC: ::c_int = 0x2000;
+
+-pub const FIOCLEX: ::c_int = 0x5451;
+-pub const FIONBIO: ::c_int = 0x5421;
+-
+ pub const RLIMIT_RSS: ::c_int = 5;
+ pub const RLIMIT_NOFILE: ::c_int = 7;
+ pub const RLIMIT_AS: ::c_int = 9;
+@@ -172,7 +169,6 @@ pub const SOCK_SEQPACKET: ::c_int = 5;
+
+ pub const SOL_SOCKET: ::c_int = 1;
+
+-pub const EDEADLK: ::c_int = 35;
+ pub const ENAMETOOLONG: ::c_int = 36;
+ pub const ENOLCK: ::c_int = 37;
+ pub const ENOSYS: ::c_int = 38;
+@@ -194,7 +190,6 @@ pub const EXFULL: ::c_int = 54;
+ pub const ENOANO: ::c_int = 55;
+ pub const EBADRQC: ::c_int = 56;
+ pub const EBADSLT: ::c_int = 57;
+-pub const EDEADLOCK: ::c_int = EDEADLK;
+ pub const EMULTIHOP: ::c_int = 72;
+ pub const EBADMSG: ::c_int = 74;
+ pub const EOVERFLOW: ::c_int = 75;
+@@ -272,12 +267,6 @@ pub const SO_PRIORITY: ::c_int = 12;
+ pub const SO_LINGER: ::c_int = 13;
+ pub const SO_BSDCOMPAT: ::c_int = 14;
+ pub const SO_REUSEPORT: ::c_int = 15;
+-pub const SO_PASSCRED: ::c_int = 16;
+-pub const SO_PEERCRED: ::c_int = 17;
+-pub const SO_RCVLOWAT: ::c_int = 18;
+-pub const SO_SNDLOWAT: ::c_int = 19;
+-pub const SO_RCVTIMEO: ::c_int = 20;
+-pub const SO_SNDTIMEO: ::c_int = 21;
+ pub const SO_ACCEPTCONN: ::c_int = 30;
+ pub const SO_SNDBUFFORCE: ::c_int = 32;
+ pub const SO_RCVBUFFORCE: ::c_int = 33;
+@@ -312,8 +301,6 @@ pub const SIG_SETMASK: ::c_int = 2;
+ pub const SIG_BLOCK: ::c_int = 0x000000;
+ pub const SIG_UNBLOCK: ::c_int = 0x01;
+
+-pub const EXTPROC: ::tcflag_t = 0x00010000;
+-
+ pub const MAP_HUGETLB: ::c_int = 0x040000;
+
+ pub const F_GETLK: ::c_int = 5;
+@@ -323,59 +310,10 @@ pub const F_SETLKW: ::c_int = 7;
+ pub const F_SETOWN: ::c_int = 8;
+
+ pub const VEOF: usize = 4;
+-pub const VEOL: usize = 11;
+-pub const VEOL2: usize = 16;
+-pub const VMIN: usize = 6;
+-pub const IEXTEN: ::tcflag_t = 0x00008000;
+-pub const TOSTOP: ::tcflag_t = 0x00000100;
+-pub const FLUSHO: ::tcflag_t = 0x00001000;
+-
+-pub const TCGETS: ::c_int = 0x5401;
+-pub const TCSETS: ::c_int = 0x5402;
+-pub const TCSETSW: ::c_int = 0x5403;
+-pub const TCSETSF: ::c_int = 0x5404;
+-pub const TCGETA: ::c_int = 0x5405;
+-pub const TCSETA: ::c_int = 0x5406;
+-pub const TCSETAW: ::c_int = 0x5407;
+-pub const TCSETAF: ::c_int = 0x5408;
+-pub const TCSBRK: ::c_int = 0x5409;
+-pub const TCXONC: ::c_int = 0x540A;
+-pub const TCFLSH: ::c_int = 0x540B;
+-pub const TIOCGSOFTCAR: ::c_int = 0x5419;
+-pub const TIOCSSOFTCAR: ::c_int = 0x541A;
+-pub const TIOCLINUX: ::c_int = 0x541C;
+-pub const TIOCGSERIAL: ::c_int = 0x541E;
+-pub const TIOCEXCL: ::c_int = 0x540C;
+-pub const TIOCNXCL: ::c_int = 0x540D;
+-pub const TIOCSCTTY: ::c_int = 0x540E;
+-pub const TIOCGPGRP: ::c_int = 0x540F;
+-pub const TIOCSPGRP: ::c_int = 0x5410;
+-pub const TIOCOUTQ: ::c_int = 0x5411;
+-pub const TIOCSTI: ::c_int = 0x5412;
+-pub const TIOCGWINSZ: ::c_int = 0x5413;
+-pub const TIOCSWINSZ: ::c_int = 0x5414;
+-pub const TIOCMGET: ::c_int = 0x5415;
+-pub const TIOCMBIS: ::c_int = 0x5416;
+-pub const TIOCMBIC: ::c_int = 0x5417;
+-pub const TIOCMSET: ::c_int = 0x5418;
+-pub const FIONREAD: ::c_int = 0x541B;
+-pub const TIOCCONS: ::c_int = 0x541D;
+
+ pub const POLLWRNORM: ::c_short = 0x100;
+ pub const POLLWRBAND: ::c_short = 0x200;
+
+-pub const TIOCM_LE: ::c_int = 0x001;
+-pub const TIOCM_DTR: ::c_int = 0x002;
+-pub const TIOCM_RTS: ::c_int = 0x004;
+-pub const TIOCM_ST: ::c_int = 0x008;
+-pub const TIOCM_SR: ::c_int = 0x010;
+-pub const TIOCM_CTS: ::c_int = 0x020;
+-pub const TIOCM_CAR: ::c_int = 0x040;
+-pub const TIOCM_RNG: ::c_int = 0x080;
+-pub const TIOCM_DSR: ::c_int = 0x100;
+-pub const TIOCM_CD: ::c_int = TIOCM_CAR;
+-pub const TIOCM_RI: ::c_int = TIOCM_RNG;
+-
+ cfg_if! {
+ if #[cfg(target_arch = "aarch64")] {
+ mod aarch64;
+diff --git a/src/vendor/libc/src/unix/notbsd/linux/musl/b64/powerpc64.rs b/src/vendor/libc/src/unix/notbsd/linux/musl/b64/powerpc64.rs
+index 621f9f4ce79..2ac39bf0cd5 100644
+--- a/src/vendor/libc/src/unix/notbsd/linux/musl/b64/powerpc64.rs
++++ b/src/vendor/libc/src/unix/notbsd/linux/musl/b64/powerpc64.rs
+@@ -60,22 +60,17 @@ s! {
+ }
+ }
+
+-pub const SYS_pivot_root: ::c_long = 203;
+-pub const SYS_gettid: ::c_long = 207;
+-pub const SYS_perf_event_open: ::c_long = 319;
+-pub const SYS_memfd_create: ::c_long = 360;
+-
+ pub const MAP_32BIT: ::c_int = 0x0040;
+-pub const O_DIRECT: ::c_int = 0x4000;
+-pub const O_DIRECTORY: ::c_int = 0x10000;
+-pub const O_LARGEFILE: ::c_int = 0;
+-pub const O_NOFOLLOW: ::c_int = 0x20000;
++pub const O_DIRECT: ::c_int = 0x20000;
++pub const O_DIRECTORY: ::c_int = 0x4000;
++pub const O_LARGEFILE: ::c_int = 0x10000;
++pub const O_NOFOLLOW: ::c_int = 0x8000;
+
+-pub const SIGSTKSZ: ::size_t = 8192;
+-pub const MINSIGSTKSZ: ::size_t = 2048;
++pub const SIGSTKSZ: ::size_t = 10240;
++pub const MINSIGSTKSZ: ::size_t = 4096;
+
+ #[doc(hidden)]
+-pub const AF_MAX: ::c_int = 42;
++pub const AF_MAX: ::c_int = 43;
+ #[doc(hidden)]
+ pub const PF_MAX: ::c_int = AF_MAX;
+
+@@ -439,3 +434,139 @@ pub const SYS_copy_file_range: ::c_long = 379;
+ pub const SYS_preadv2: ::c_long = 380;
+ pub const SYS_pwritev2: ::c_long = 381;
+ pub const SYS_kexec_file_load: ::c_long = 382;
++
++pub const FIOCLEX: ::c_ulong = 0x20006601;
++pub const FIONBIO: ::c_ulong = 0x8004667e;
++pub const EDEADLK: ::c_int = 58;
++pub const EDEADLOCK: ::c_int = EDEADLK;
++pub const SO_PASSCRED: ::c_int = 20;
++pub const SO_PEERCRED: ::c_int = 21;
++pub const SO_RCVLOWAT: ::c_int = 16;
++pub const SO_SNDLOWAT: ::c_int = 17;
++pub const SO_RCVTIMEO: ::c_int = 18;
++pub const SO_SNDTIMEO: ::c_int = 19;
++pub const EXTPROC: ::tcflag_t = 0x10000000;
++pub const VEOL: usize = 6;
++pub const VEOL2: usize = 8;
++pub const VMIN: usize = 5;
++pub const IEXTEN: ::tcflag_t = 0x00000400;
++pub const TOSTOP: ::tcflag_t = 0x00400000;
++pub const FLUSHO: ::tcflag_t = 0x00800000;
++pub const TCGETS: ::c_ulong = 0x403c7413;
++pub const TCSETS: ::c_ulong = 0x803c7414;
++pub const TCSETSW: ::c_ulong = 0x803c7415;
++pub const TCSETSF: ::c_ulong = 0x803c7416;
++pub const TCGETA: ::c_ulong = 0x40147417;
++pub const TCSETA: ::c_ulong = 0x80147418;
++pub const TCSETAW: ::c_ulong = 0x80147419;
++pub const TCSETAF: ::c_ulong = 0x8014741c;
++pub const TCSBRK: ::c_ulong = 0x2000741d;
++pub const TCXONC: ::c_ulong = 0x2000741e;
++pub const TCFLSH: ::c_ulong = 0x2000741f;
++pub const TIOCGSOFTCAR: ::c_ulong = 0x5419;
++pub const TIOCSSOFTCAR: ::c_ulong = 0x541A;
++pub const TIOCLINUX: ::c_ulong = 0x541C;
++pub const TIOCGSERIAL: ::c_ulong = 0x541E;
++pub const TIOCEXCL: ::c_ulong = 0x540C;
++pub const TIOCNXCL: ::c_ulong = 0x540D;
++pub const TIOCSCTTY: ::c_ulong = 0x540E;
++pub const TIOCGPGRP: ::c_ulong = 0x40047477;
++pub const TIOCSPGRP: ::c_ulong = 0x80047476;
++pub const TIOCOUTQ: ::c_ulong = 0x40047473;
++pub const TIOCGWINSZ: ::c_ulong = 0x40087468;
++pub const TIOCSWINSZ: ::c_ulong = 0x80087467;
++pub const TIOCMGET: ::c_ulong = 0x5415;
++pub const TIOCMBIS: ::c_ulong = 0x5416;
++pub const TIOCMBIC: ::c_ulong = 0x5417;
++pub const TIOCMSET: ::c_ulong = 0x5418;
++pub const FIONREAD: ::c_ulong = 0x4004667f;
++pub const TIOCCONS: ::c_ulong = 0x541D;
++pub const TIOCM_LE: ::c_ulong = 0x001;
++pub const TIOCM_DTR: ::c_ulong = 0x002;
++pub const TIOCM_RTS: ::c_ulong = 0x004;
++pub const TIOCM_ST: ::c_ulong = 0x008;
++pub const TIOCM_SR: ::c_ulong = 0x010;
++pub const TIOCM_CTS: ::c_ulong = 0x020;
++pub const TIOCM_CAR: ::c_ulong = 0x040;
++pub const TIOCM_RNG: ::c_ulong = 0x080;
++pub const TIOCM_DSR: ::c_ulong = 0x100;
++pub const TIOCM_CD: ::c_ulong = TIOCM_CAR;
++pub const TIOCM_RI: ::c_ulong = TIOCM_RNG;
++
++pub const RLIMIT_NLIMITS: ::c_int = 15;
++pub const TIOCINQ: ::c_ulong = ::FIONREAD;
++pub const MCL_CURRENT: ::c_int = 0x2000;
++pub const MCL_FUTURE: ::c_int = 0x4000;
++pub const CBAUD: ::tcflag_t = 0xff;
++pub const TAB1: ::c_int = 0x400;
++pub const TAB2: ::c_int = 0x800;
++pub const TAB3: ::c_int = 0xc00;
++pub const CR1: ::c_int = 0x1000;
++pub const CR2: ::c_int = 0x2000;
++pub const CR3: ::c_int = 0x3000;
++pub const FF1: ::c_int = 0x4000;
++pub const BS1: ::c_int = 0x8000;
++pub const VT1: ::c_int = 0x10000;
++pub const VWERASE: usize = 10;
++pub const VREPRINT: usize = 11;
++pub const VSUSP: usize = 12;
++pub const VSTART: usize = 13;
++pub const VSTOP: usize = 14;
++pub const VDISCARD: usize = 16;
++pub const VTIME: usize = 7;
++pub const IXON: ::tcflag_t = 0x00000200;
++pub const IXOFF: ::tcflag_t = 0x00000400;
++pub const ONLCR: ::tcflag_t = 0x2;
++pub const CSIZE: ::tcflag_t = 0x00000300;
++
++pub const CS6: ::tcflag_t = 0x00000100;
++pub const CS7: ::tcflag_t = 0x00000200;
++pub const CS8: ::tcflag_t = 0x00000300;
++pub const CSTOPB: ::tcflag_t = 0x00000400;
++pub const CREAD: ::tcflag_t = 0x00000800;
++pub const PARENB: ::tcflag_t = 0x00001000;
++pub const PARODD: ::tcflag_t = 0x00002000;
++pub const HUPCL: ::tcflag_t = 0x00004000;
++pub const CLOCAL: ::tcflag_t = 0x00008000;
++pub const ECHOKE: ::tcflag_t = 0x00000001;
++pub const ECHOE: ::tcflag_t = 0x00000002;
++pub const ECHOK: ::tcflag_t = 0x00000004;
++pub const ECHONL: ::tcflag_t = 0x00000010;
++pub const ECHOPRT: ::tcflag_t = 0x00000020;
++pub const ECHOCTL: ::tcflag_t = 0x00000040;
++pub const ISIG: ::tcflag_t = 0x00000080;
++pub const ICANON: ::tcflag_t = 0x00000100;
++pub const PENDIN: ::tcflag_t = 0x20000000;
++pub const NOFLSH: ::tcflag_t = 0x80000000;
++
++pub const CIBAUD: ::tcflag_t = 0o77600000;
++pub const CBAUDEX: ::tcflag_t = 0o0000020;
++pub const VSWTC: usize = 9;
++pub const OLCUC: ::tcflag_t = 0o000004;
++pub const NLDLY: ::tcflag_t = 0o0001400;
++pub const CRDLY: ::tcflag_t = 0o0030000;
++pub const TABDLY: ::tcflag_t = 0o0006000;
++pub const BSDLY: ::tcflag_t = 0o0100000;
++pub const FFDLY: ::tcflag_t = 0o0040000;
++pub const VTDLY: ::tcflag_t = 0o0200000;
++pub const XTABS: ::tcflag_t = 0o00006000;
++
++pub const B57600: ::speed_t = 0o00020;
++pub const B115200: ::speed_t = 0o00021;
++pub const B230400: ::speed_t = 0o00022;
++pub const B460800: ::speed_t = 0o00023;
++pub const B500000: ::speed_t = 0o00024;
++pub const B576000: ::speed_t = 0o00025;
++pub const B921600: ::speed_t = 0o00026;
++pub const B1000000: ::speed_t = 0o00027;
++pub const B1152000: ::speed_t = 0o00030;
++pub const B1500000: ::speed_t = 0o00031;
++pub const B2000000: ::speed_t = 0o00032;
++pub const B2500000: ::speed_t = 0o00033;
++pub const B3000000: ::speed_t = 0o00034;
++pub const B3500000: ::speed_t = 0o00035;
++pub const B4000000: ::speed_t = 0o00036;
++
++extern {
++ pub fn ioctl(fd: ::c_int, request: ::c_ulong, ...) -> ::c_int;
++}
+diff --git a/src/vendor/libc/src/unix/notbsd/linux/musl/b64/x86_64.rs b/src/vendor/libc/src/unix/notbsd/linux/musl/b64/x86_64.rs
+index 78d38e49e8f..0e0fcec4d2e 100644
+--- a/src/vendor/libc/src/unix/notbsd/linux/musl/b64/x86_64.rs
++++ b/src/vendor/libc/src/unix/notbsd/linux/musl/b64/x86_64.rs
+@@ -449,3 +449,139 @@ pub const MINSIGSTKSZ: ::size_t = 2048;
+ pub const AF_MAX: ::c_int = 42;
+ #[doc(hidden)]
+ pub const PF_MAX: ::c_int = AF_MAX;
++
++pub const RLIMIT_NLIMITS: ::c_int = 16;
++pub const TIOCINQ: ::c_int = ::FIONREAD;
++pub const MCL_CURRENT: ::c_int = 0x0001;
++pub const MCL_FUTURE: ::c_int = 0x0002;
++pub const CBAUD: ::tcflag_t = 0o0010017;
++pub const TAB1: ::c_int = 0x00000800;
++pub const TAB2: ::c_int = 0x00001000;
++pub const TAB3: ::c_int = 0x00001800;
++pub const CR1: ::c_int = 0x00000200;
++pub const CR2: ::c_int = 0x00000400;
++pub const CR3: ::c_int = 0x00000600;
++pub const FF1: ::c_int = 0x00008000;
++pub const BS1: ::c_int = 0x00002000;
++pub const VT1: ::c_int = 0x00004000;
++pub const VWERASE: usize = 14;
++pub const VREPRINT: usize = 12;
++pub const VSUSP: usize = 10;
++pub const VSTART: usize = 8;
++pub const VSTOP: usize = 9;
++pub const VDISCARD: usize = 13;
++pub const VTIME: usize = 5;
++pub const IXON: ::tcflag_t = 0x00000400;
++pub const IXOFF: ::tcflag_t = 0x00001000;
++pub const ONLCR: ::tcflag_t = 0x4;
++pub const CSIZE: ::tcflag_t = 0x00000030;
++pub const CS6: ::tcflag_t = 0x00000010;
++pub const CS7: ::tcflag_t = 0x00000020;
++pub const CS8: ::tcflag_t = 0x00000030;
++pub const CSTOPB: ::tcflag_t = 0x00000040;
++pub const CREAD: ::tcflag_t = 0x00000080;
++pub const PARENB: ::tcflag_t = 0x00000100;
++pub const PARODD: ::tcflag_t = 0x00000200;
++pub const HUPCL: ::tcflag_t = 0x00000400;
++pub const CLOCAL: ::tcflag_t = 0x00000800;
++pub const ECHOKE: ::tcflag_t = 0x00000800;
++pub const ECHOE: ::tcflag_t = 0x00000010;
++pub const ECHOK: ::tcflag_t = 0x00000020;
++pub const ECHONL: ::tcflag_t = 0x00000040;
++pub const ECHOPRT: ::tcflag_t = 0x00000400;
++pub const ECHOCTL: ::tcflag_t = 0x00000200;
++pub const ISIG: ::tcflag_t = 0x00000001;
++pub const ICANON: ::tcflag_t = 0x00000002;
++pub const PENDIN: ::tcflag_t = 0x00004000;
++pub const NOFLSH: ::tcflag_t = 0x00000080;
++pub const CIBAUD: ::tcflag_t = 0o02003600000;
++pub const CBAUDEX: ::tcflag_t = 0o010000;
++pub const VSWTC: usize = 7;
++pub const OLCUC: ::tcflag_t = 0o000002;
++pub const NLDLY: ::tcflag_t = 0o000400;
++pub const CRDLY: ::tcflag_t = 0o003000;
++pub const TABDLY: ::tcflag_t = 0o014000;
++pub const BSDLY: ::tcflag_t = 0o020000;
++pub const FFDLY: ::tcflag_t = 0o100000;
++pub const VTDLY: ::tcflag_t = 0o040000;
++pub const XTABS: ::tcflag_t = 0o014000;
++pub const B57600: ::speed_t = 0o010001;
++pub const B115200: ::speed_t = 0o010002;
++pub const B230400: ::speed_t = 0o010003;
++pub const B460800: ::speed_t = 0o010004;
++pub const B500000: ::speed_t = 0o010005;
++pub const B576000: ::speed_t = 0o010006;
++pub const B921600: ::speed_t = 0o010007;
++pub const B1000000: ::speed_t = 0o010010;
++pub const B1152000: ::speed_t = 0o010011;
++pub const B1500000: ::speed_t = 0o010012;
++pub const B2000000: ::speed_t = 0o010013;
++pub const B2500000: ::speed_t = 0o010014;
++pub const B3000000: ::speed_t = 0o010015;
++pub const B3500000: ::speed_t = 0o010016;
++pub const B4000000: ::speed_t = 0o010017;
++
++pub const FIOCLEX: ::c_int = 0x5451;
++pub const FIONBIO: ::c_int = 0x5421;
++pub const EDEADLK: ::c_int = 35;
++pub const EDEADLOCK: ::c_int = EDEADLK;
++pub const SO_PASSCRED: ::c_int = 16;
++pub const SO_PEERCRED: ::c_int = 17;
++pub const SO_RCVLOWAT: ::c_int = 18;
++pub const SO_SNDLOWAT: ::c_int = 19;
++pub const SO_RCVTIMEO: ::c_int = 20;
++pub const SO_SNDTIMEO: ::c_int = 21;
++pub const EXTPROC: ::tcflag_t = 0x00010000;
++pub const VEOL: usize = 11;
++pub const VEOL2: usize = 16;
++pub const VMIN: usize = 6;
++pub const IEXTEN: ::tcflag_t = 0x00008000;
++pub const TOSTOP: ::tcflag_t = 0x00000100;
++pub const FLUSHO: ::tcflag_t = 0x00001000;
++pub const TCGETS: ::c_int = 0x5401;
++pub const TCSETS: ::c_int = 0x5402;
++pub const TCSETSW: ::c_int = 0x5403;
++pub const TCSETSF: ::c_int = 0x5404;
++pub const TCGETA: ::c_int = 0x5405;
++pub const TCSETA: ::c_int = 0x5406;
++pub const TCSETAW: ::c_int = 0x5407;
++pub const TCSETAF: ::c_int = 0x5408;
++pub const TCSBRK: ::c_int = 0x5409;
++pub const TCXONC: ::c_int = 0x540A;
++pub const TCFLSH: ::c_int = 0x540B;
++pub const TIOCGSOFTCAR: ::c_int = 0x5419;
++pub const TIOCSSOFTCAR: ::c_int = 0x541A;
++pub const TIOCLINUX: ::c_int = 0x541C;
++pub const TIOCGSERIAL: ::c_int = 0x541E;
++pub const TIOCEXCL: ::c_int = 0x540C;
++pub const TIOCNXCL: ::c_int = 0x540D;
++pub const TIOCSCTTY: ::c_int = 0x540E;
++pub const TIOCGPGRP: ::c_int = 0x540F;
++pub const TIOCSPGRP: ::c_int = 0x5410;
++pub const TIOCOUTQ: ::c_int = 0x5411;
++pub const TIOCSTI: ::c_int = 0x5412;
++pub const TIOCGWINSZ: ::c_int = 0x5413;
++pub const TIOCSWINSZ: ::c_int = 0x5414;
++pub const TIOCMGET: ::c_int = 0x5415;
++pub const TIOCMBIS: ::c_int = 0x5416;
++pub const TIOCMBIC: ::c_int = 0x5417;
++pub const TIOCMSET: ::c_int = 0x5418;
++pub const FIONREAD: ::c_int = 0x541B;
++pub const TIOCCONS: ::c_int = 0x541D;
++
++pub const TIOCM_LE: ::c_int = 0x001;
++pub const TIOCM_DTR: ::c_int = 0x002;
++pub const TIOCM_RTS: ::c_int = 0x004;
++pub const TIOCM_ST: ::c_int = 0x008;
++pub const TIOCM_SR: ::c_int = 0x010;
++pub const TIOCM_CTS: ::c_int = 0x020;
++pub const TIOCM_CAR: ::c_int = 0x040;
++pub const TIOCM_RNG: ::c_int = 0x080;
++pub const TIOCM_DSR: ::c_int = 0x100;
++pub const TIOCM_CD: ::c_int = TIOCM_CAR;
++pub const TIOCM_RI: ::c_int = TIOCM_RNG;
++
++extern {
++ pub fn ioctl(fd: ::c_int, request: ::c_int, ...) -> ::c_int;
++}
++
+diff --git a/src/vendor/libc/src/unix/notbsd/linux/musl/mod.rs b/src/vendor/libc/src/unix/notbsd/linux/musl/mod.rs
+index 9a63d1f7330..0d92a4b9d14 100644
+--- a/src/vendor/libc/src/unix/notbsd/linux/musl/mod.rs
++++ b/src/vendor/libc/src/unix/notbsd/linux/musl/mod.rs
+@@ -147,7 +147,6 @@ pub const POSIX_MADV_DONTNEED: ::c_int = 4;
+
+ pub const RLIM_INFINITY: ::rlim_t = !0;
+ pub const RLIMIT_RTTIME: ::c_int = 15;
+-pub const RLIMIT_NLIMITS: ::c_int = 16;
+
+ pub const MAP_ANONYMOUS: ::c_int = MAP_ANON;
+
+@@ -213,8 +212,6 @@ pub const TCSANOW: ::c_int = 0;
+ pub const TCSADRAIN: ::c_int = 1;
+ pub const TCSAFLUSH: ::c_int = 2;
+
+-pub const TIOCINQ: ::c_int = ::FIONREAD;
+-
+ pub const RTLD_GLOBAL: ::c_int = 0x100;
+ pub const RTLD_NOLOAD: ::c_int = 0x4;
+
+@@ -223,61 +220,6 @@ pub const RTLD_NOLOAD: ::c_int = 0x4;
+ pub const CLOCK_SGI_CYCLE: ::clockid_t = 10;
+ pub const CLOCK_TAI: ::clockid_t = 11;
+
+-pub const MCL_CURRENT: ::c_int = 0x0001;
+-pub const MCL_FUTURE: ::c_int = 0x0002;
+-
+-pub const CBAUD: ::tcflag_t = 0o0010017;
+-pub const TAB1: ::c_int = 0x00000800;
+-pub const TAB2: ::c_int = 0x00001000;
+-pub const TAB3: ::c_int = 0x00001800;
+-pub const CR1: ::c_int = 0x00000200;
+-pub const CR2: ::c_int = 0x00000400;
+-pub const CR3: ::c_int = 0x00000600;
+-pub const FF1: ::c_int = 0x00008000;
+-pub const BS1: ::c_int = 0x00002000;
+-pub const VT1: ::c_int = 0x00004000;
+-pub const VWERASE: usize = 14;
+-pub const VREPRINT: usize = 12;
+-pub const VSUSP: usize = 10;
+-pub const VSTART: usize = 8;
+-pub const VSTOP: usize = 9;
+-pub const VDISCARD: usize = 13;
+-pub const VTIME: usize = 5;
+-pub const IXON: ::tcflag_t = 0x00000400;
+-pub const IXOFF: ::tcflag_t = 0x00001000;
+-pub const ONLCR: ::tcflag_t = 0x4;
+-pub const CSIZE: ::tcflag_t = 0x00000030;
+-pub const CS6: ::tcflag_t = 0x00000010;
+-pub const CS7: ::tcflag_t = 0x00000020;
+-pub const CS8: ::tcflag_t = 0x00000030;
+-pub const CSTOPB: ::tcflag_t = 0x00000040;
+-pub const CREAD: ::tcflag_t = 0x00000080;
+-pub const PARENB: ::tcflag_t = 0x00000100;
+-pub const PARODD: ::tcflag_t = 0x00000200;
+-pub const HUPCL: ::tcflag_t = 0x00000400;
+-pub const CLOCAL: ::tcflag_t = 0x00000800;
+-pub const ECHOKE: ::tcflag_t = 0x00000800;
+-pub const ECHOE: ::tcflag_t = 0x00000010;
+-pub const ECHOK: ::tcflag_t = 0x00000020;
+-pub const ECHONL: ::tcflag_t = 0x00000040;
+-pub const ECHOPRT: ::tcflag_t = 0x00000400;
+-pub const ECHOCTL: ::tcflag_t = 0x00000200;
+-pub const ISIG: ::tcflag_t = 0x00000001;
+-pub const ICANON: ::tcflag_t = 0x00000002;
+-pub const PENDIN: ::tcflag_t = 0x00004000;
+-pub const NOFLSH: ::tcflag_t = 0x00000080;
+-pub const CIBAUD: ::tcflag_t = 0o02003600000;
+-pub const CBAUDEX: ::tcflag_t = 0o010000;
+-pub const VSWTC: usize = 7;
+-pub const OLCUC: ::tcflag_t = 0o000002;
+-pub const NLDLY: ::tcflag_t = 0o000400;
+-pub const CRDLY: ::tcflag_t = 0o003000;
+-pub const TABDLY: ::tcflag_t = 0o014000;
+-pub const BSDLY: ::tcflag_t = 0o020000;
+-pub const FFDLY: ::tcflag_t = 0o100000;
+-pub const VTDLY: ::tcflag_t = 0o040000;
+-pub const XTABS: ::tcflag_t = 0o014000;
+-
+ pub const B0: ::speed_t = 0o000000;
+ pub const B50: ::speed_t = 0o000001;
+ pub const B75: ::speed_t = 0o000002;
+@@ -296,21 +238,6 @@ pub const B19200: ::speed_t = 0o000016;
+ pub const B38400: ::speed_t = 0o000017;
+ pub const EXTA: ::speed_t = B19200;
+ pub const EXTB: ::speed_t = B38400;
+-pub const B57600: ::speed_t = 0o010001;
+-pub const B115200: ::speed_t = 0o010002;
+-pub const B230400: ::speed_t = 0o010003;
+-pub const B460800: ::speed_t = 0o010004;
+-pub const B500000: ::speed_t = 0o010005;
+-pub const B576000: ::speed_t = 0o010006;
+-pub const B921600: ::speed_t = 0o010007;
+-pub const B1000000: ::speed_t = 0o010010;
+-pub const B1152000: ::speed_t = 0o010011;
+-pub const B1500000: ::speed_t = 0o010012;
+-pub const B2000000: ::speed_t = 0o010013;
+-pub const B2500000: ::speed_t = 0o010014;
+-pub const B3000000: ::speed_t = 0o010015;
+-pub const B3500000: ::speed_t = 0o010016;
+-pub const B4000000: ::speed_t = 0o010017;
+
+ pub const SO_BINDTODEVICE: ::c_int = 25;
+ pub const SO_TIMESTAMP: ::c_int = 29;
+@@ -320,7 +247,6 @@ pub const SO_PEEK_OFF: ::c_int = 42;
+ pub const SO_BUSY_POLL: ::c_int = 46;
+
+ extern {
+- pub fn ioctl(fd: ::c_int, request: ::c_int, ...) -> ::c_int;
+ pub fn ptrace(request: ::c_int, ...) -> ::c_long;
+ pub fn getpriority(which: ::c_int, who: ::id_t) -> ::c_int;
+ pub fn setpriority(which: ::c_int, who: ::id_t, prio: ::c_int) -> ::c_int;
diff --git a/user/rust/0032-liblibc-90c01fa6b0f4.patch b/user/rust/0032-liblibc-90c01fa6b0f4.patch
new file mode 100644
index 000000000..5e73c780e
--- /dev/null
+++ b/user/rust/0032-liblibc-90c01fa6b0f4.patch
@@ -0,0 +1,162 @@
+From 90c01fa6b0f45c63dc19aa75cd39b38d2de5e98b Mon Sep 17 00:00:00 2001
+From: est31 <MTest31@outlook.com>
+Date: Sun, 1 Jul 2018 09:25:11 +0200
+Subject: [PATCH] Re-add aarch64 stuff removed by previous commit
+
+Previous commit
+
+dcff154781e4b3c6ef3a6a4024c73631f52f48cb
+"libc: changes to ppc64le musl branch to support building of rust on Alpine"
+
+has removed stuff from mod.rs and added it to some submodules, but
+missed the aarch64 submodule.
+
+This copies the stuff that that commit added to the x86_64.rs submodule
+and puts it into aarch64.rs.
+---
+ src/unix/notbsd/linux/musl/b64/aarch64.rs | 135 ++++++++++++++++++++++
+ 1 file changed, 135 insertions(+)
+
+diff --git a/src/vendor/libc/src/unix/notbsd/linux/musl/b64/aarch64.rs b/src/vendor/libc/src/unix/notbsd/linux/musl/b64/aarch64.rs
+index da0827a7750..98c53dc4f2b 100644
+--- a/src/vendor/libc/src/unix/notbsd/linux/musl/b64/aarch64.rs
++++ b/src/vendor/libc/src/unix/notbsd/linux/musl/b64/aarch64.rs
+@@ -339,3 +339,138 @@ pub const SYS_pwritev2: ::c_long = 287;
+ pub const SYS_pkey_mprotect: ::c_long = 288;
+ pub const SYS_pkey_alloc: ::c_long = 289;
+ pub const SYS_pkey_free: ::c_long = 290;
++
++pub const RLIMIT_NLIMITS: ::c_int = 16;
++pub const TIOCINQ: ::c_int = ::FIONREAD;
++pub const MCL_CURRENT: ::c_int = 0x0001;
++pub const MCL_FUTURE: ::c_int = 0x0002;
++pub const CBAUD: ::tcflag_t = 0o0010017;
++pub const TAB1: ::c_int = 0x00000800;
++pub const TAB2: ::c_int = 0x00001000;
++pub const TAB3: ::c_int = 0x00001800;
++pub const CR1: ::c_int = 0x00000200;
++pub const CR2: ::c_int = 0x00000400;
++pub const CR3: ::c_int = 0x00000600;
++pub const FF1: ::c_int = 0x00008000;
++pub const BS1: ::c_int = 0x00002000;
++pub const VT1: ::c_int = 0x00004000;
++pub const VWERASE: usize = 14;
++pub const VREPRINT: usize = 12;
++pub const VSUSP: usize = 10;
++pub const VSTART: usize = 8;
++pub const VSTOP: usize = 9;
++pub const VDISCARD: usize = 13;
++pub const VTIME: usize = 5;
++pub const IXON: ::tcflag_t = 0x00000400;
++pub const IXOFF: ::tcflag_t = 0x00001000;
++pub const ONLCR: ::tcflag_t = 0x4;
++pub const CSIZE: ::tcflag_t = 0x00000030;
++pub const CS6: ::tcflag_t = 0x00000010;
++pub const CS7: ::tcflag_t = 0x00000020;
++pub const CS8: ::tcflag_t = 0x00000030;
++pub const CSTOPB: ::tcflag_t = 0x00000040;
++pub const CREAD: ::tcflag_t = 0x00000080;
++pub const PARENB: ::tcflag_t = 0x00000100;
++pub const PARODD: ::tcflag_t = 0x00000200;
++pub const HUPCL: ::tcflag_t = 0x00000400;
++pub const CLOCAL: ::tcflag_t = 0x00000800;
++pub const ECHOKE: ::tcflag_t = 0x00000800;
++pub const ECHOE: ::tcflag_t = 0x00000010;
++pub const ECHOK: ::tcflag_t = 0x00000020;
++pub const ECHONL: ::tcflag_t = 0x00000040;
++pub const ECHOPRT: ::tcflag_t = 0x00000400;
++pub const ECHOCTL: ::tcflag_t = 0x00000200;
++pub const ISIG: ::tcflag_t = 0x00000001;
++pub const ICANON: ::tcflag_t = 0x00000002;
++pub const PENDIN: ::tcflag_t = 0x00004000;
++pub const NOFLSH: ::tcflag_t = 0x00000080;
++pub const CIBAUD: ::tcflag_t = 0o02003600000;
++pub const CBAUDEX: ::tcflag_t = 0o010000;
++pub const VSWTC: usize = 7;
++pub const OLCUC: ::tcflag_t = 0o000002;
++pub const NLDLY: ::tcflag_t = 0o000400;
++pub const CRDLY: ::tcflag_t = 0o003000;
++pub const TABDLY: ::tcflag_t = 0o014000;
++pub const BSDLY: ::tcflag_t = 0o020000;
++pub const FFDLY: ::tcflag_t = 0o100000;
++pub const VTDLY: ::tcflag_t = 0o040000;
++pub const XTABS: ::tcflag_t = 0o014000;
++pub const B57600: ::speed_t = 0o010001;
++pub const B115200: ::speed_t = 0o010002;
++pub const B230400: ::speed_t = 0o010003;
++pub const B460800: ::speed_t = 0o010004;
++pub const B500000: ::speed_t = 0o010005;
++pub const B576000: ::speed_t = 0o010006;
++pub const B921600: ::speed_t = 0o010007;
++pub const B1000000: ::speed_t = 0o010010;
++pub const B1152000: ::speed_t = 0o010011;
++pub const B1500000: ::speed_t = 0o010012;
++pub const B2000000: ::speed_t = 0o010013;
++pub const B2500000: ::speed_t = 0o010014;
++pub const B3000000: ::speed_t = 0o010015;
++pub const B3500000: ::speed_t = 0o010016;
++pub const B4000000: ::speed_t = 0o010017;
++
++pub const FIOCLEX: ::c_int = 0x5451;
++pub const FIONBIO: ::c_int = 0x5421;
++pub const EDEADLK: ::c_int = 35;
++pub const EDEADLOCK: ::c_int = EDEADLK;
++pub const SO_PASSCRED: ::c_int = 16;
++pub const SO_PEERCRED: ::c_int = 17;
++pub const SO_RCVLOWAT: ::c_int = 18;
++pub const SO_SNDLOWAT: ::c_int = 19;
++pub const SO_RCVTIMEO: ::c_int = 20;
++pub const SO_SNDTIMEO: ::c_int = 21;
++pub const EXTPROC: ::tcflag_t = 0x00010000;
++pub const VEOL: usize = 11;
++pub const VEOL2: usize = 16;
++pub const VMIN: usize = 6;
++pub const IEXTEN: ::tcflag_t = 0x00008000;
++pub const TOSTOP: ::tcflag_t = 0x00000100;
++pub const FLUSHO: ::tcflag_t = 0x00001000;
++pub const TCGETS: ::c_int = 0x5401;
++pub const TCSETS: ::c_int = 0x5402;
++pub const TCSETSW: ::c_int = 0x5403;
++pub const TCSETSF: ::c_int = 0x5404;
++pub const TCGETA: ::c_int = 0x5405;
++pub const TCSETA: ::c_int = 0x5406;
++pub const TCSETAW: ::c_int = 0x5407;
++pub const TCSETAF: ::c_int = 0x5408;
++pub const TCSBRK: ::c_int = 0x5409;
++pub const TCXONC: ::c_int = 0x540A;
++pub const TCFLSH: ::c_int = 0x540B;
++pub const TIOCGSOFTCAR: ::c_int = 0x5419;
++pub const TIOCSSOFTCAR: ::c_int = 0x541A;
++pub const TIOCLINUX: ::c_int = 0x541C;
++pub const TIOCGSERIAL: ::c_int = 0x541E;
++pub const TIOCEXCL: ::c_int = 0x540C;
++pub const TIOCNXCL: ::c_int = 0x540D;
++pub const TIOCSCTTY: ::c_int = 0x540E;
++pub const TIOCGPGRP: ::c_int = 0x540F;
++pub const TIOCSPGRP: ::c_int = 0x5410;
++pub const TIOCOUTQ: ::c_int = 0x5411;
++pub const TIOCSTI: ::c_int = 0x5412;
++pub const TIOCGWINSZ: ::c_int = 0x5413;
++pub const TIOCSWINSZ: ::c_int = 0x5414;
++pub const TIOCMGET: ::c_int = 0x5415;
++pub const TIOCMBIS: ::c_int = 0x5416;
++pub const TIOCMBIC: ::c_int = 0x5417;
++pub const TIOCMSET: ::c_int = 0x5418;
++pub const FIONREAD: ::c_int = 0x541B;
++pub const TIOCCONS: ::c_int = 0x541D;
++
++pub const TIOCM_LE: ::c_int = 0x001;
++pub const TIOCM_DTR: ::c_int = 0x002;
++pub const TIOCM_RTS: ::c_int = 0x004;
++pub const TIOCM_ST: ::c_int = 0x008;
++pub const TIOCM_SR: ::c_int = 0x010;
++pub const TIOCM_CTS: ::c_int = 0x020;
++pub const TIOCM_CAR: ::c_int = 0x040;
++pub const TIOCM_RNG: ::c_int = 0x080;
++pub const TIOCM_DSR: ::c_int = 0x100;
++pub const TIOCM_CD: ::c_int = TIOCM_CAR;
++pub const TIOCM_RI: ::c_int = TIOCM_RNG;
++
++extern {
++ pub fn ioctl(fd: ::c_int, request: ::c_int, ...) -> ::c_int;
++}
diff --git a/user/rust/0033-liblibc-checksums.patch b/user/rust/0033-liblibc-checksums.patch
new file mode 100644
index 000000000..3a1f5f423
--- /dev/null
+++ b/user/rust/0033-liblibc-checksums.patch
@@ -0,0 +1,9 @@
+diff --git a/src/vendor/libc/.cargo-checksum.json b/src/vendor/libc/.cargo-checksum.json
+index 5b315f61..c28c8c5c 100644
+--- a/src/vendor/libc/.cargo-checksum.json
++++ b/src/vendor/libc/.cargo-checksum.json
+@@ -1 +1 @@
+-{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",".gitignore":"7150ee9391a955b2ef7e0762fc61c0c1aab167620ca36d88d78062d93b8334ba",".travis.yml":"9750910d5fdc61263fb3eae7f5f78e2920923f250150f8500c0c22a830790acd","Cargo.toml":"4629bf1256274045a39aedc78a7f6b48b5bf7fdf177cd69c4eb65909586ab0cf","Cargo.toml.orig":"423b6276994f73cf7fc57dafad118ff8b0e207eb55ebe57a0ee1a149bf36f544","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"fdf0f0c197e2999fce42457fb089f192a42d2fb1f743c9c8fcda1a44cb40e1fa","appveyor.yml":"216f7ac4561aa5810dc84ce5a9950897a8c0496e0615d0211d62348b1c8dc720","ci/README.md":"2e3d7ad13f8c3202e57d2af73aeeebde306221dce7c0907e462e25767a692d6b","ci/android-install-ndk.sh":"725db9025c5905849916bf7c910f98ff0e753484397c2a1f836d48a576d10890","ci/android-install-sdk.sh":"5c3fbe402ac611239ac7715a61f247d1c55fa012f33a5be0b0127dfc196965cf","ci/android-sysimage.sh":"901415631752827454c827e8c51906ba4260612e4021eda98eb7fff771c7d0e8","ci/docker/aarch64-linux-android/Dockerfile":"e17945fba1786dfe766006f50e79baf3f4151ca0c0c14ae96f91483bf345afd7","ci/docker/aarch64-unknown-linux-gnu/Dockerfile":"5f430271941e1eecdf9d1a5fb701dd5622e2c4b9da03140fd829bf216e55529d","ci/docker/aarch64-unknown-linux-musl/Dockerfile":"3e1cbf0fa728571b9be9769e5a6281c964fa5b26d586265117ccee017ca4022c","ci/docker/arm-linux-androideabi/Dockerfile":"4e0bdc13254f99bd0db195f91331c634050426e3e4a0fcc63ef25ab795fe2d46","ci/docker/arm-unknown-linux-gnueabihf/Dockerfile":"dbb025b53b27e406893184290836a50133ecae8295711d5e05b4e41fac9bd262","ci/docker/arm-unknown-linux-musleabihf/Dockerfile":"7cb6e0f8fb91c97f142a9c827687bbbc1a5e7643a3081160025d0365593a596c","ci/docker/asmjs-unknown-emscripten/Dockerfile":"0d9aea5119c2cd136cc2c0a578105d91210e45901ac49b17c5e45f458b1c7551","ci/docker/i686-linux-android/Dockerfile":"4e8377ec0bd9ad2df23bf2c5373200a12750dc9f28c4f10bc83a0150fe1623ee","ci/docker/i686-unknown-linux-gnu/Dockerfile":"f22ac412525ef15b33ab8ccd8193d97346faf421c17f6ddeffc25b651aba83b7","ci/docker/i686-unknown-linux-musl/Dockerfile":"4ac86fe9e159d454616396a9f3f07ce0f5d99cc4b49898b8d2486e6bdbfed9e9","ci/docker/mips-unknown-linux-gnu/Dockerfile":"6d2a9daa299003497c1d441d07b69f730ad75ee49f34520f959b5158e60072e0","ci/docker/mips-unknown-linux-musl/Dockerfile":"4773b2656a7dd6a3b106fcb737428436652edf3d1f48181de3f62c16bf5bd49d","ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile":"7c4d26232f1c1553a6612d9b0b3faac9887e139eaffa025f70d34113dcee812f","ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile":"edb4144c07ade1a8bd65272ec1d3672ad794e9e6b7d01197896e159a70175b58","ci/docker/mipsel-unknown-linux-musl/Dockerfile":"0ca9c12b5618c6d2df04ff820d56fb28e05b43e45eaa506480126b03c5072d48","ci/docker/powerpc-unknown-linux-gnu/Dockerfile":"4b247dcc399395815ec9153c1247cc03d764896c484eddcb196d0bf8650d6311","ci/docker/powerpc64-unknown-linux-gnu/Dockerfile":"e949717a8ba5e123940729ff47ce1c45989c8b8247c576f1488f698b534e0283","ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile":"018591017f499414a9f79477e1c39baa6a47f71fce6812fb1868fb0fcdfb8cea","ci/docker/s390x-unknown-linux-gnu/Dockerfile":"9860f478c5b2dc3bcf76d2cda7f71922a2a2ef54898cc2ed6ea9b9eff094a5c0","ci/docker/sparc64-unknown-linux-gnu/Dockerfile":"2312491343665d2ab36fd669f14766facbf3c7e9820ffb8f0d623830b676f8f0","ci/docker/wasm32-unknown-emscripten/Dockerfile":"bd072d6ae91a9160693e402dd77462d3c9dd0716711e719a62af330ae479eb4e","ci/docker/wasm32-unknown-emscripten/node-wrapper.sh":"0eef37c3c4fb16dbc083148b7e7af45f2ae60bd9a1b3a77e1d43da79efbd30c6","ci/docker/x86_64-linux-android/Dockerfile":"aeeaa540189ca712369c564c9a14cbace63217dadcfaf879a2cb40fbdeb08199","ci/docker/x86_64-rumprun-netbsd/Dockerfile":"e8f9287b267c6058eec42d1bca0007cb9a78a1d244dd8e11088368cb61fb17d6","ci/docker/x86_64-rumprun-netbsd/runtest.rs":"53302e9ed39293c1ec68ab56287593907d4aaf5bac9c1c2857b29f754a71d62b","ci/docker/x86_64-unknown-freebsd/Dockerfile":"ab1f14c65c29f3721c7c091bdec2e865fb1abf45fdcdc867201d087966e396c4","ci/docker/x86_64-unknown-linux-gnu/Dockerfile":"ab3fa45765802b8155996796fcad9fb82096360ac587e38e6faa3ec345268796","ci/docker/x86_64-unknown-linux-gnux32/Dockerfile":"f22ac412525ef15b33ab8ccd8193d97346faf421c17f6ddeffc25b651aba83b7","ci/docker/x86_64-unknown-linux-musl/Dockerfile":"e145784741473150473b1bef7cc3c2cf0c6339d4fc480113ac41b4247a9b38ec","ci/dox.sh":"d77171a9da467bb01fc702a28fc3b5099f82a485a627f3d5593a9830c3e1a77c","ci/emscripten-entry.sh":"c97bbec520b57af9b1ae264ca991560e99c3852c99b00a2f673c614d1ba17498","ci/emscripten.sh":"6f66c7b5c3d34a41afc59ceb0a8c3b0880cd6fd9a6344b874ae80bac0639ccb2","ci/ios/deploy_and_run_on_ios_simulator.rs":"3175066fd7f82390f6226d881e1a1dda9767ea2705656870e0d7774e2731800e","ci/landing-page-footer.html":"b70b3112c2147f5c967e7481061ef38bc2d79a28dd55a16fb916d9c9426da2c4","ci/landing-page-head.html":"ad69663fac7924f27d0209bc519d55838e86edfc4133713a6fd08caadac1b142","ci/linux-s390x.sh":"d6b732d7795b4ba131326aff893bca6228a7d2eb0e9402f135705413dbbe0dce","ci/linux-sparc64.sh":"c92966838b1ab7ad3b7a344833ee726aba6b647cf5952e56f0ad1ba420b13325","ci/run-docker.sh":"be83bc5a8b5ef913a7c9941ffca24734716028650c9a876123c4c160672c18de","ci/run-qemu.sh":"bb859421170871ef23a8940c5e150efec0c01b95e32d2ce2d37b79a45d9d346c","ci/run.sh":"25f8fd0a88d5673bb872dbb7aef8d44ebbf6c863e10352cd79de557ce3e2e252","ci/runtest-android.rs":"a07ddbdd276aedda7876c7e676774178a60d9aeab95df01275a4ee95f59e3044","ci/style.rs":"940c06a676cff1dfc1555b887e46867c6aacc473956cd6aaafaed71824facdb2","ci/test-runner-linux":"cb3713d9e4fa1d9a7c039dfd077af0939921c1f2bf969c9e680ee66e87dc30a4","src/cloudabi/aarch64.rs":"b8550bf1fd7344972aa4db29441486f39f31482d0327534981dbb75959c29114","src/cloudabi/arm.rs":"c197e2781c2839808bd6fcef219a29705b27b992d3ef920e9cf6ac96e2022bbf","src/cloudabi/mod.rs":"1c2dc787a1b3438970ccd04153c93538719b1a27445707913b90b6f0cdcdde77","src/cloudabi/x86.rs":"33eb97f272d2201f3838ae74d444583c7de8f67856852ca375293b20bbd05636","src/cloudabi/x86_64.rs":"400d85d4fe39e26cf2e6ece9ee31c75fe9e88c4bcf4d836ca9f765c05c9c5be3","src/dox.rs":"8f6037887281b828d8541ce8a549dacaed5d29c05fd9cf78b169838476b82741","src/fuchsia/aarch64.rs":"8366ac6f51e494aad9266ccab2b3a95c5ed7aa3a9f77ea672413283440919743","src/fuchsia/mod.rs":"56ee2333b856db94cc1f1f4350885ad2a4ed0e1b4e8792615aa0b257e2941192","src/fuchsia/powerpc64.rs":"390e8db54271a1d5f512d54a21b328091a792378bf9b42b49b6c1a72388da4ec","src/fuchsia/x86_64.rs":"b4a3eff94dcf1ffe41e6500468ca2cff0e97ddbcc75fe079b6ac7adb1e493f56","src/lib.rs":"e434d3def305ea28108b59841396ef8949333db9223aa11886ee05cd1c0ce8b0","src/macros.rs":"2e7048e266efdef4298254b7186a27736182c94adb0648aed0c8d735f66a5139","src/redox/mod.rs":"029a9af78211d86fe3108100c33f58d6e73ab09c826b641a9732325dc700d8e8","src/redox/net.rs":"0946ab864a2eeb20a365dc541c060f7a238c75356bb57de39956a486607f7ce1","src/unix/bsd/apple/b32.rs":"41699d2802327b0a4d4aa50cd20b1e366b442176cbedab27ca888ac0446c9156","src/unix/bsd/apple/b64.rs":"4fe7bf5de252dcd712dee0a7a8acfaa7c737c862eaa3ff669255d3f2076c5fa6","src/unix/bsd/apple/mod.rs":"3a423665ca29d73a4a29503f5f58277b7d19cb8df175c5f11666983880ef276f","src/unix/bsd/freebsdlike/dragonfly/mod.rs":"1950bf56a7ecbfc8994e4b54dc94e752d91dccd8f0e2d1e4c2d3ad2fa8cb5e23","src/unix/bsd/freebsdlike/freebsd/aarch64.rs":"97132e2097411034271b8c927ecc94a208a361564680972a6c82998bd30a9826","src/unix/bsd/freebsdlike/freebsd/mod.rs":"e762bacf0b96295ae241717210323c7442d199d9863159ee73462954fc855e1d","src/unix/bsd/freebsdlike/freebsd/x86.rs":"54311d3ebf2bb091ab22361e377e6ef9224aec2ecfe459fbfcedde4932db9c58","src/unix/bsd/freebsdlike/freebsd/x86_64.rs":"97132e2097411034271b8c927ecc94a208a361564680972a6c82998bd30a9826","src/unix/bsd/freebsdlike/mod.rs":"d6096edda549bb2af16d083ee86561f5eb6bfa728d3cfac1938f0f84592bde5d","src/unix/bsd/mod.rs":"a1030452eed4ec52a39e9f39040e8fae4309143c7af145efadd9b425caa39672","src/unix/bsd/netbsdlike/mod.rs":"a685c1d23cb17758c3249b9c4ab45a50474e79270891235176b5f796f365380c","src/unix/bsd/netbsdlike/netbsd/mod.rs":"46a28912a4741e500f392131cc71273621de0234c4c28e29d8bf51c015ca7840","src/unix/bsd/netbsdlike/netbsd/other/b32/mod.rs":"bd251a102bed65d5cb3459275f6ec3310fe5803ff4c9651212115548f86256d0","src/unix/bsd/netbsdlike/netbsd/other/b64/mod.rs":"927eeccaf3269d299db4c2a55f8010807bf43dfa894aea6a783215f5d3560baa","src/unix/bsd/netbsdlike/netbsd/other/mod.rs":"4d9f7091af8e166943ac6f42ce85558909e5b6e61325039bff7adfbcf4b90212","src/unix/bsd/netbsdlike/openbsdlike/bitrig/mod.rs":"92459d80b8e5b570c0efe35a1d244d38f23072cd28b6581dfcb313dc9bfc3d51","src/unix/bsd/netbsdlike/openbsdlike/bitrig/x86.rs":"bd251a102bed65d5cb3459275f6ec3310fe5803ff4c9651212115548f86256d0","src/unix/bsd/netbsdlike/openbsdlike/bitrig/x86_64.rs":"927eeccaf3269d299db4c2a55f8010807bf43dfa894aea6a783215f5d3560baa","src/unix/bsd/netbsdlike/openbsdlike/mod.rs":"cec53623e2269aea4437554a405452e7d3b09648b7cf6872d257d36ba979e2ec","src/unix/bsd/netbsdlike/openbsdlike/openbsd/aarch64.rs":"820092e397c7ec259cd2de8f2444083a8e57071c02d73d678701dfa7807726e9","src/unix/bsd/netbsdlike/openbsdlike/openbsd/mod.rs":"44035aad2907dffb6b18687ac7ddc76b5268af92b4e4f4c87759a00cae4de900","src/unix/bsd/netbsdlike/openbsdlike/openbsd/x86.rs":"44b7ea81cf363777b29935da175e702cbf45ed78f7498ae57faf44aa32335085","src/unix/bsd/netbsdlike/openbsdlike/openbsd/x86_64.rs":"7c959cdb3415f68a0f948117b9aa87a17463e57ab97cc3235f2567454b706653","src/unix/haiku/b32.rs":"69ae47fc52c6880e85416b4744500d5655c9ec6131cb737f3b649fceaadce15a","src/unix/haiku/b64.rs":"73e64db09275a8da8d50a13cce2cfa2b136036ddf3a930d2939f337fc995900b","src/unix/haiku/mod.rs":"ddd834c5c4e5ec7771d0f0071517c2d00095d5595f87a52245380ac762f7f011","src/unix/mod.rs":"47d253eef3bc46dacb0df2951b2136e41c4e758ffd34473b144f6108a90749f9","src/unix/newlib/aarch64/mod.rs":"c408a990f22fb4292a824f38367e9b517e6e6f8623328397ee631cc88b3d1f7d","src/unix/newlib/arm/mod.rs":"2b6dba2e697ab9b4f4bc4dd5f28057249e9b596d1cb395a9322ec87605c4a5c4","src/unix/newlib/mod.rs":"7422845a44de13a2faf15d105670525ed090c6e200c9723178ed735810bbd689","src/unix/notbsd/android/b32/arm.rs":"3625a32c7e58cfe683a53486fbe3d42d4e28f00bea31e19cb46ed2bb0b6a140b","src/unix/notbsd/android/b32/mod.rs":"2fbe398c1fb5251dda6213741a193e50aae4622807cb255d1dd2e82b536f0c65","src/unix/notbsd/android/b32/x86.rs":"ae2b7f1d6278caddc007749bb1d09ca33f7593478a0fd7fe98b457dae86c7814","src/unix/notbsd/android/b64/aarch64.rs":"63d65629d79371814910f691672ef593d20244ee09be26f1ebe07ee6212d0163","src/unix/notbsd/android/b64/mod.rs":"90d4f6b063fd4de42fd302cbc9d9902fd99ac1d71dc48cb8bc6ad7b4c902e481","src/unix/notbsd/android/b64/x86_64.rs":"5547aef8dcbaa5a932559f34606fd8d89f6c9c15173d2b1412c12d39b3c1045f","src/unix/notbsd/android/mod.rs":"c83157cf4a74c653b877c4d42b565d4a7d31e46e32015f19fc91447df2489a58","src/unix/notbsd/emscripten.rs":"5beb9bc98b6b317e85f2935db2aad9ef9cb2ab2e881917064fa7adf944568dae","src/unix/notbsd/linux/mips/mips32.rs":"df3268b082962844c94733c58782ecd9386ffe1f5ed8e05a703a6fa1e80b8f7f","src/unix/notbsd/linux/mips/mips64.rs":"88ad72fa125b9a2c0bd98ef03a7f5ceff78a39b0628d0d0f997ac9b6b82fe16b","src/unix/notbsd/linux/mips/mod.rs":"32c3e7cf430575544bbe4a670cbbf2b4dbe1f28b4895feb6f43fa33d6da25e1d","src/unix/notbsd/linux/mod.rs":"d37bd8bd956b7ab3484b2ad3ee7c1848574bbd37027c76ac06f4d7ca2906cf01","src/unix/notbsd/linux/musl/b32/arm.rs":"d2998b13648696304bb34f0793715d821178baf8e88a45b532764a20b5294232","src/unix/notbsd/linux/musl/b32/mips.rs":"340be794362a4532d709ef23542b10762f710f7bfd0c4fafa5166a3fb9a15b4f","src/unix/notbsd/linux/musl/b32/mod.rs":"3cc7979546258a47df6b0fcd7ad64571826623671857633a7acafe87e05e56a1","src/unix/notbsd/linux/musl/b32/x86.rs":"df114102dcf35bc32f891d4a9e09ce02fbe4c096a196c6b98b10ff87b29dbe4d","src/unix/notbsd/linux/musl/b64/aarch64.rs":"12c590fde2a1450c08934234c4f5bcd94ee7b58ca21f8e93bc930148c15fb0b0","src/unix/notbsd/linux/musl/b64/mod.rs":"b1991ef46a00d2db7ce3e36f6596685c1d508786c4dd4e62cbbf65ac3c256cc0","src/unix/notbsd/linux/musl/b64/powerpc64.rs":"790dca3cc6c0a4166992d2c1665e1b1e320fbad5c0b1ba3c454321a6b2d7a103","src/unix/notbsd/linux/musl/b64/x86_64.rs":"bf8fc10a09bf700084db0381c484ddec3add79aa1726954cb14d21802ff7d199","src/unix/notbsd/linux/musl/mod.rs":"a9323bffa1a8ed40a67a3b2cbb1dec6ebb0d565d8308e43e8623101ac739cd60","src/unix/notbsd/linux/other/b32/arm.rs":"d9892f7350b2978335f734f1cd2d7fed60f0f2e66aa05bee3f69549c031f8b14","src/unix/notbsd/linux/other/b32/mod.rs":"7d77f1dd8327b1249769496351cf287d0fff3852f87bde2f58afc67e6dc54a4f","src/unix/notbsd/linux/other/b32/powerpc.rs":"253fcd2f9978525285be1903cc08f3fec2dc3b12d1660a33e2995b4f6b810d1c","src/unix/notbsd/linux/other/b32/x86.rs":"49376e3ed0f3ff95c230ac20751911fe3c608dfe15c7c118b069fd7a954d8db9","src/unix/notbsd/linux/other/b64/aarch64.rs":"ed6ea00e3281ad2f4bab82821f20a2ff5b48401a65618bd6a544bc24ea4e3e39","src/unix/notbsd/linux/other/b64/mod.rs":"63e1a3fdf5f4d1b9820934ab344c91aed5e458e7e05908535d2e942d51a08bf8","src/unix/notbsd/linux/other/b64/not_x32.rs":"9b5e2321c0114c2740dcb86d9f1f3584c07ded921a157164ae8bb0712d397818","src/unix/notbsd/linux/other/b64/powerpc64.rs":"ca25b5f94a9147a984fcb70cf48a261b30df14e2e8194ac174363b6280e82a29","src/unix/notbsd/linux/other/b64/sparc64.rs":"a84580fe226654e33f8ddd0f1f7f2069c29334fc826a74f81f7892b87cfb9083","src/unix/notbsd/linux/other/b64/x32.rs":"ae7698b217106a6c00465f9d10df24d45ad9b7dfc280b24168f53f42198b7b92","src/unix/notbsd/linux/other/b64/x86_64.rs":"afba464e903d350325a1ca3d9d5af1659efc0ede83a43dbac4dbd60c522e2ad1","src/unix/notbsd/linux/other/mod.rs":"7065a7e83834f38ee2f4e03f28824eb94111c13f10e7a8b76ee7025686a84e7f","src/unix/notbsd/linux/s390x.rs":"259c5533ba7f0b10bb23d01dc0e53301afd236a7bb4339dcef9472c579503729","src/unix/notbsd/mod.rs":"eff4c19451d4d4579d5c483a941a7b259b7b73c3ab13c31fc54a7961e8292b9a","src/unix/solaris/mod.rs":"9c6af198a2f80da827054784faf70bc404673d9568fb45664b4f73c46245fdbd","src/unix/uclibc/mips/mips32.rs":"4dcb19abae37f02f08660bdad500c3230436322b581eba37287c73a742d6fcdc","src/unix/uclibc/mips/mips64.rs":"e67eec1636a998b047d89a4cda1c99cb6bc3071db017762675179a68201c4438","src/unix/uclibc/mips/mod.rs":"3f86061d05a8da7d923310550b7d40c6223f0c907d77edc86b7a78da1d647f76","src/unix/uclibc/mod.rs":"3605127517734b5f5f20be1d37e52184a77ecc6fb6099b88aa744e0aca1b802a","src/unix/uclibc/x86_64/l4re.rs":"68fd3a833fd1f7caf784a084224f384bdbdfb8b5a14ef94c4f5155409afb3439","src/unix/uclibc/x86_64/mod.rs":"69ec3ca821a483cc076e84a794bbecb3e5536af1c1d5b807eaf1db9af11f771d","src/unix/uclibc/x86_64/other.rs":"f03b47842896f2f3ae6f8ebdcbcf0276454f880349d9cf00e3d304f8136893c5","src/windows.rs":"e41357d610608bad81abf285306ad8b127b6f02d5132f63c4942861980b47d59"},"package":"b685088df2b950fccadf07a7187c8ef846a959c142338a48f9dc0b94517eb5f1"}
+\ No newline at end of file
++{"files":{".cargo-ok":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",".gitignore":"7150ee9391a955b2ef7e0762fc61c0c1aab167620ca36d88d78062d93b8334ba",".travis.yml":"9750910d5fdc61263fb3eae7f5f78e2920923f250150f8500c0c22a830790acd","Cargo.toml":"4629bf1256274045a39aedc78a7f6b48b5bf7fdf177cd69c4eb65909586ab0cf","Cargo.toml.orig":"423b6276994f73cf7fc57dafad118ff8b0e207eb55ebe57a0ee1a149bf36f544","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"fdf0f0c197e2999fce42457fb089f192a42d2fb1f743c9c8fcda1a44cb40e1fa","appveyor.yml":"216f7ac4561aa5810dc84ce5a9950897a8c0496e0615d0211d62348b1c8dc720","ci/README.md":"2e3d7ad13f8c3202e57d2af73aeeebde306221dce7c0907e462e25767a692d6b","ci/android-install-ndk.sh":"725db9025c5905849916bf7c910f98ff0e753484397c2a1f836d48a576d10890","ci/android-install-sdk.sh":"5c3fbe402ac611239ac7715a61f247d1c55fa012f33a5be0b0127dfc196965cf","ci/android-sysimage.sh":"901415631752827454c827e8c51906ba4260612e4021eda98eb7fff771c7d0e8","ci/docker/aarch64-linux-android/Dockerfile":"e17945fba1786dfe766006f50e79baf3f4151ca0c0c14ae96f91483bf345afd7","ci/docker/aarch64-unknown-linux-gnu/Dockerfile":"5f430271941e1eecdf9d1a5fb701dd5622e2c4b9da03140fd829bf216e55529d","ci/docker/aarch64-unknown-linux-musl/Dockerfile":"3e1cbf0fa728571b9be9769e5a6281c964fa5b26d586265117ccee017ca4022c","ci/docker/arm-linux-androideabi/Dockerfile":"4e0bdc13254f99bd0db195f91331c634050426e3e4a0fcc63ef25ab795fe2d46","ci/docker/arm-unknown-linux-gnueabihf/Dockerfile":"dbb025b53b27e406893184290836a50133ecae8295711d5e05b4e41fac9bd262","ci/docker/arm-unknown-linux-musleabihf/Dockerfile":"7cb6e0f8fb91c97f142a9c827687bbbc1a5e7643a3081160025d0365593a596c","ci/docker/asmjs-unknown-emscripten/Dockerfile":"0d9aea5119c2cd136cc2c0a578105d91210e45901ac49b17c5e45f458b1c7551","ci/docker/i686-linux-android/Dockerfile":"4e8377ec0bd9ad2df23bf2c5373200a12750dc9f28c4f10bc83a0150fe1623ee","ci/docker/i686-unknown-linux-gnu/Dockerfile":"f22ac412525ef15b33ab8ccd8193d97346faf421c17f6ddeffc25b651aba83b7","ci/docker/i686-unknown-linux-musl/Dockerfile":"4ac86fe9e159d454616396a9f3f07ce0f5d99cc4b49898b8d2486e6bdbfed9e9","ci/docker/mips-unknown-linux-gnu/Dockerfile":"6d2a9daa299003497c1d441d07b69f730ad75ee49f34520f959b5158e60072e0","ci/docker/mips-unknown-linux-musl/Dockerfile":"4773b2656a7dd6a3b106fcb737428436652edf3d1f48181de3f62c16bf5bd49d","ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile":"7c4d26232f1c1553a6612d9b0b3faac9887e139eaffa025f70d34113dcee812f","ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile":"edb4144c07ade1a8bd65272ec1d3672ad794e9e6b7d01197896e159a70175b58","ci/docker/mipsel-unknown-linux-musl/Dockerfile":"0ca9c12b5618c6d2df04ff820d56fb28e05b43e45eaa506480126b03c5072d48","ci/docker/powerpc-unknown-linux-gnu/Dockerfile":"4b247dcc399395815ec9153c1247cc03d764896c484eddcb196d0bf8650d6311","ci/docker/powerpc64-unknown-linux-gnu/Dockerfile":"e949717a8ba5e123940729ff47ce1c45989c8b8247c576f1488f698b534e0283","ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile":"018591017f499414a9f79477e1c39baa6a47f71fce6812fb1868fb0fcdfb8cea","ci/docker/s390x-unknown-linux-gnu/Dockerfile":"9860f478c5b2dc3bcf76d2cda7f71922a2a2ef54898cc2ed6ea9b9eff094a5c0","ci/docker/sparc64-unknown-linux-gnu/Dockerfile":"2312491343665d2ab36fd669f14766facbf3c7e9820ffb8f0d623830b676f8f0","ci/docker/wasm32-unknown-emscripten/Dockerfile":"bd072d6ae91a9160693e402dd77462d3c9dd0716711e719a62af330ae479eb4e","ci/docker/wasm32-unknown-emscripten/node-wrapper.sh":"0eef37c3c4fb16dbc083148b7e7af45f2ae60bd9a1b3a77e1d43da79efbd30c6","ci/docker/x86_64-linux-android/Dockerfile":"aeeaa540189ca712369c564c9a14cbace63217dadcfaf879a2cb40fbdeb08199","ci/docker/x86_64-rumprun-netbsd/Dockerfile":"e8f9287b267c6058eec42d1bca0007cb9a78a1d244dd8e11088368cb61fb17d6","ci/docker/x86_64-rumprun-netbsd/runtest.rs":"53302e9ed39293c1ec68ab56287593907d4aaf5bac9c1c2857b29f754a71d62b","ci/docker/x86_64-unknown-freebsd/Dockerfile":"ab1f14c65c29f3721c7c091bdec2e865fb1abf45fdcdc867201d087966e396c4","ci/docker/x86_64-unknown-linux-gnu/Dockerfile":"ab3fa45765802b8155996796fcad9fb82096360ac587e38e6faa3ec345268796","ci/docker/x86_64-unknown-linux-gnux32/Dockerfile":"f22ac412525ef15b33ab8ccd8193d97346faf421c17f6ddeffc25b651aba83b7","ci/docker/x86_64-unknown-linux-musl/Dockerfile":"e145784741473150473b1bef7cc3c2cf0c6339d4fc480113ac41b4247a9b38ec","ci/dox.sh":"d77171a9da467bb01fc702a28fc3b5099f82a485a627f3d5593a9830c3e1a77c","ci/emscripten-entry.sh":"c97bbec520b57af9b1ae264ca991560e99c3852c99b00a2f673c614d1ba17498","ci/emscripten.sh":"6f66c7b5c3d34a41afc59ceb0a8c3b0880cd6fd9a6344b874ae80bac0639ccb2","ci/ios/deploy_and_run_on_ios_simulator.rs":"3175066fd7f82390f6226d881e1a1dda9767ea2705656870e0d7774e2731800e","ci/landing-page-footer.html":"b70b3112c2147f5c967e7481061ef38bc2d79a28dd55a16fb916d9c9426da2c4","ci/landing-page-head.html":"ad69663fac7924f27d0209bc519d55838e86edfc4133713a6fd08caadac1b142","ci/linux-s390x.sh":"d6b732d7795b4ba131326aff893bca6228a7d2eb0e9402f135705413dbbe0dce","ci/linux-sparc64.sh":"c92966838b1ab7ad3b7a344833ee726aba6b647cf5952e56f0ad1ba420b13325","ci/run-docker.sh":"be83bc5a8b5ef913a7c9941ffca24734716028650c9a876123c4c160672c18de","ci/run-qemu.sh":"bb859421170871ef23a8940c5e150efec0c01b95e32d2ce2d37b79a45d9d346c","ci/run.sh":"25f8fd0a88d5673bb872dbb7aef8d44ebbf6c863e10352cd79de557ce3e2e252","ci/runtest-android.rs":"a07ddbdd276aedda7876c7e676774178a60d9aeab95df01275a4ee95f59e3044","ci/style.rs":"940c06a676cff1dfc1555b887e46867c6aacc473956cd6aaafaed71824facdb2","ci/test-runner-linux":"cb3713d9e4fa1d9a7c039dfd077af0939921c1f2bf969c9e680ee66e87dc30a4","src/cloudabi/aarch64.rs":"b8550bf1fd7344972aa4db29441486f39f31482d0327534981dbb75959c29114","src/cloudabi/arm.rs":"c197e2781c2839808bd6fcef219a29705b27b992d3ef920e9cf6ac96e2022bbf","src/cloudabi/mod.rs":"1c2dc787a1b3438970ccd04153c93538719b1a27445707913b90b6f0cdcdde77","src/cloudabi/x86.rs":"33eb97f272d2201f3838ae74d444583c7de8f67856852ca375293b20bbd05636","src/cloudabi/x86_64.rs":"400d85d4fe39e26cf2e6ece9ee31c75fe9e88c4bcf4d836ca9f765c05c9c5be3","src/dox.rs":"8f6037887281b828d8541ce8a549dacaed5d29c05fd9cf78b169838476b82741","src/fuchsia/aarch64.rs":"8366ac6f51e494aad9266ccab2b3a95c5ed7aa3a9f77ea672413283440919743","src/fuchsia/mod.rs":"56ee2333b856db94cc1f1f4350885ad2a4ed0e1b4e8792615aa0b257e2941192","src/fuchsia/powerpc64.rs":"390e8db54271a1d5f512d54a21b328091a792378bf9b42b49b6c1a72388da4ec","src/fuchsia/x86_64.rs":"b4a3eff94dcf1ffe41e6500468ca2cff0e97ddbcc75fe079b6ac7adb1e493f56","src/lib.rs":"e434d3def305ea28108b59841396ef8949333db9223aa11886ee05cd1c0ce8b0","src/macros.rs":"2e7048e266efdef4298254b7186a27736182c94adb0648aed0c8d735f66a5139","src/redox/mod.rs":"029a9af78211d86fe3108100c33f58d6e73ab09c826b641a9732325dc700d8e8","src/redox/net.rs":"0946ab864a2eeb20a365dc541c060f7a238c75356bb57de39956a486607f7ce1","src/unix/bsd/apple/b32.rs":"41699d2802327b0a4d4aa50cd20b1e366b442176cbedab27ca888ac0446c9156","src/unix/bsd/apple/b64.rs":"4fe7bf5de252dcd712dee0a7a8acfaa7c737c862eaa3ff669255d3f2076c5fa6","src/unix/bsd/apple/mod.rs":"3a423665ca29d73a4a29503f5f58277b7d19cb8df175c5f11666983880ef276f","src/unix/bsd/freebsdlike/dragonfly/mod.rs":"1950bf56a7ecbfc8994e4b54dc94e752d91dccd8f0e2d1e4c2d3ad2fa8cb5e23","src/unix/bsd/freebsdlike/freebsd/aarch64.rs":"97132e2097411034271b8c927ecc94a208a361564680972a6c82998bd30a9826","src/unix/bsd/freebsdlike/freebsd/mod.rs":"e762bacf0b96295ae241717210323c7442d199d9863159ee73462954fc855e1d","src/unix/bsd/freebsdlike/freebsd/x86.rs":"54311d3ebf2bb091ab22361e377e6ef9224aec2ecfe459fbfcedde4932db9c58","src/unix/bsd/freebsdlike/freebsd/x86_64.rs":"97132e2097411034271b8c927ecc94a208a361564680972a6c82998bd30a9826","src/unix/bsd/freebsdlike/mod.rs":"d6096edda549bb2af16d083ee86561f5eb6bfa728d3cfac1938f0f84592bde5d","src/unix/bsd/mod.rs":"a1030452eed4ec52a39e9f39040e8fae4309143c7af145efadd9b425caa39672","src/unix/bsd/netbsdlike/mod.rs":"a685c1d23cb17758c3249b9c4ab45a50474e79270891235176b5f796f365380c","src/unix/bsd/netbsdlike/netbsd/mod.rs":"46a28912a4741e500f392131cc71273621de0234c4c28e29d8bf51c015ca7840","src/unix/bsd/netbsdlike/netbsd/other/b32/mod.rs":"bd251a102bed65d5cb3459275f6ec3310fe5803ff4c9651212115548f86256d0","src/unix/bsd/netbsdlike/netbsd/other/b64/mod.rs":"927eeccaf3269d299db4c2a55f8010807bf43dfa894aea6a783215f5d3560baa","src/unix/bsd/netbsdlike/netbsd/other/mod.rs":"4d9f7091af8e166943ac6f42ce85558909e5b6e61325039bff7adfbcf4b90212","src/unix/bsd/netbsdlike/openbsdlike/bitrig/mod.rs":"92459d80b8e5b570c0efe35a1d244d38f23072cd28b6581dfcb313dc9bfc3d51","src/unix/bsd/netbsdlike/openbsdlike/bitrig/x86.rs":"bd251a102bed65d5cb3459275f6ec3310fe5803ff4c9651212115548f86256d0","src/unix/bsd/netbsdlike/openbsdlike/bitrig/x86_64.rs":"927eeccaf3269d299db4c2a55f8010807bf43dfa894aea6a783215f5d3560baa","src/unix/bsd/netbsdlike/openbsdlike/mod.rs":"cec53623e2269aea4437554a405452e7d3b09648b7cf6872d257d36ba979e2ec","src/unix/bsd/netbsdlike/openbsdlike/openbsd/aarch64.rs":"820092e397c7ec259cd2de8f2444083a8e57071c02d73d678701dfa7807726e9","src/unix/bsd/netbsdlike/openbsdlike/openbsd/mod.rs":"44035aad2907dffb6b18687ac7ddc76b5268af92b4e4f4c87759a00cae4de900","src/unix/bsd/netbsdlike/openbsdlike/openbsd/x86.rs":"44b7ea81cf363777b29935da175e702cbf45ed78f7498ae57faf44aa32335085","src/unix/bsd/netbsdlike/openbsdlike/openbsd/x86_64.rs":"7c959cdb3415f68a0f948117b9aa87a17463e57ab97cc3235f2567454b706653","src/unix/haiku/b32.rs":"69ae47fc52c6880e85416b4744500d5655c9ec6131cb737f3b649fceaadce15a","src/unix/haiku/b64.rs":"73e64db09275a8da8d50a13cce2cfa2b136036ddf3a930d2939f337fc995900b","src/unix/haiku/mod.rs":"ddd834c5c4e5ec7771d0f0071517c2d00095d5595f87a52245380ac762f7f011","src/unix/mod.rs":"47d253eef3bc46dacb0df2951b2136e41c4e758ffd34473b144f6108a90749f9","src/unix/newlib/aarch64/mod.rs":"c408a990f22fb4292a824f38367e9b517e6e6f8623328397ee631cc88b3d1f7d","src/unix/newlib/arm/mod.rs":"2b6dba2e697ab9b4f4bc4dd5f28057249e9b596d1cb395a9322ec87605c4a5c4","src/unix/newlib/mod.rs":"7422845a44de13a2faf15d105670525ed090c6e200c9723178ed735810bbd689","src/unix/notbsd/android/b32/arm.rs":"3625a32c7e58cfe683a53486fbe3d42d4e28f00bea31e19cb46ed2bb0b6a140b","src/unix/notbsd/android/b32/mod.rs":"2fbe398c1fb5251dda6213741a193e50aae4622807cb255d1dd2e82b536f0c65","src/unix/notbsd/android/b32/x86.rs":"ae2b7f1d6278caddc007749bb1d09ca33f7593478a0fd7fe98b457dae86c7814","src/unix/notbsd/android/b64/aarch64.rs":"63d65629d79371814910f691672ef593d20244ee09be26f1ebe07ee6212d0163","src/unix/notbsd/android/b64/mod.rs":"90d4f6b063fd4de42fd302cbc9d9902fd99ac1d71dc48cb8bc6ad7b4c902e481","src/unix/notbsd/android/b64/x86_64.rs":"5547aef8dcbaa5a932559f34606fd8d89f6c9c15173d2b1412c12d39b3c1045f","src/unix/notbsd/android/mod.rs":"c83157cf4a74c653b877c4d42b565d4a7d31e46e32015f19fc91447df2489a58","src/unix/notbsd/emscripten.rs":"5beb9bc98b6b317e85f2935db2aad9ef9cb2ab2e881917064fa7adf944568dae","src/unix/notbsd/linux/mips/mips32.rs":"df3268b082962844c94733c58782ecd9386ffe1f5ed8e05a703a6fa1e80b8f7f","src/unix/notbsd/linux/mips/mips64.rs":"88ad72fa125b9a2c0bd98ef03a7f5ceff78a39b0628d0d0f997ac9b6b82fe16b","src/unix/notbsd/linux/mips/mod.rs":"32c3e7cf430575544bbe4a670cbbf2b4dbe1f28b4895feb6f43fa33d6da25e1d","src/unix/notbsd/linux/mod.rs":"d37bd8bd956b7ab3484b2ad3ee7c1848574bbd37027c76ac06f4d7ca2906cf01","src/unix/notbsd/linux/musl/b32/arm.rs":"d2998b13648696304bb34f0793715d821178baf8e88a45b532764a20b5294232","src/unix/notbsd/linux/musl/b32/mips.rs":"340be794362a4532d709ef23542b10762f710f7bfd0c4fafa5166a3fb9a15b4f","src/unix/notbsd/linux/musl/b32/mod.rs":"026476800c0f02be1221b9623632ceb8c4f3c423c5a9024cbe41f5647844cbf8","src/unix/notbsd/linux/musl/b32/x86.rs":"df114102dcf35bc32f891d4a9e09ce02fbe4c096a196c6b98b10ff87b29dbe4d","src/unix/notbsd/linux/musl/b64/aarch64.rs":"4d79d86d11fbb8cb7a74084e410a1140e3c89dfc1842cdfb213f3a0ca93046df","src/unix/notbsd/linux/musl/b64/mod.rs":"caac00326693b372d6805e4dda239475e7fef36368881f372c006264844fda0d","src/unix/notbsd/linux/musl/b64/powerpc64.rs":"24514e41be4b5f5e0ffbe8a25a99dae8989489b607db59e8bfa345f8e65c9963","src/unix/notbsd/linux/musl/b64/x86_64.rs":"25340999290a63d564ec149532c905f59c312ec369f8806d6b15df66fa1b8857","src/unix/notbsd/linux/musl/mod.rs":"f89154d5225ad8c93d1890d0bbf2855af2ec0e93c2c1b9cbf02f35561c2b7c16","src/unix/notbsd/linux/other/b32/arm.rs":"d9892f7350b2978335f734f1cd2d7fed60f0f2e66aa05bee3f69549c031f8b14","src/unix/notbsd/linux/other/b32/mod.rs":"7d77f1dd8327b1249769496351cf287d0fff3852f87bde2f58afc67e6dc54a4f","src/unix/notbsd/linux/other/b32/powerpc.rs":"253fcd2f9978525285be1903cc08f3fec2dc3b12d1660a33e2995b4f6b810d1c","src/unix/notbsd/linux/other/b32/x86.rs":"49376e3ed0f3ff95c230ac20751911fe3c608dfe15c7c118b069fd7a954d8db9","src/unix/notbsd/linux/other/b64/aarch64.rs":"ed6ea00e3281ad2f4bab82821f20a2ff5b48401a65618bd6a544bc24ea4e3e39","src/unix/notbsd/linux/other/b64/mod.rs":"63e1a3fdf5f4d1b9820934ab344c91aed5e458e7e05908535d2e942d51a08bf8","src/unix/notbsd/linux/other/b64/not_x32.rs":"9b5e2321c0114c2740dcb86d9f1f3584c07ded921a157164ae8bb0712d397818","src/unix/notbsd/linux/other/b64/powerpc64.rs":"ca25b5f94a9147a984fcb70cf48a261b30df14e2e8194ac174363b6280e82a29","src/unix/notbsd/linux/other/b64/sparc64.rs":"a84580fe226654e33f8ddd0f1f7f2069c29334fc826a74f81f7892b87cfb9083","src/unix/notbsd/linux/other/b64/x32.rs":"ae7698b217106a6c00465f9d10df24d45ad9b7dfc280b24168f53f42198b7b92","src/unix/notbsd/linux/other/b64/x86_64.rs":"afba464e903d350325a1ca3d9d5af1659efc0ede83a43dbac4dbd60c522e2ad1","src/unix/notbsd/linux/other/mod.rs":"7065a7e83834f38ee2f4e03f28824eb94111c13f10e7a8b76ee7025686a84e7f","src/unix/notbsd/linux/s390x.rs":"259c5533ba7f0b10bb23d01dc0e53301afd236a7bb4339dcef9472c579503729","src/unix/notbsd/mod.rs":"eff4c19451d4d4579d5c483a941a7b259b7b73c3ab13c31fc54a7961e8292b9a","src/unix/solaris/mod.rs":"9c6af198a2f80da827054784faf70bc404673d9568fb45664b4f73c46245fdbd","src/unix/uclibc/mips/mips32.rs":"4dcb19abae37f02f08660bdad500c3230436322b581eba37287c73a742d6fcdc","src/unix/uclibc/mips/mips64.rs":"e67eec1636a998b047d89a4cda1c99cb6bc3071db017762675179a68201c4438","src/unix/uclibc/mips/mod.rs":"3f86061d05a8da7d923310550b7d40c6223f0c907d77edc86b7a78da1d647f76","src/unix/uclibc/mod.rs":"3605127517734b5f5f20be1d37e52184a77ecc6fb6099b88aa744e0aca1b802a","src/unix/uclibc/x86_64/l4re.rs":"68fd3a833fd1f7caf784a084224f384bdbdfb8b5a14ef94c4f5155409afb3439","src/unix/uclibc/x86_64/mod.rs":"69ec3ca821a483cc076e84a794bbecb3e5536af1c1d5b807eaf1db9af11f771d","src/unix/uclibc/x86_64/other.rs":"f03b47842896f2f3ae6f8ebdcbcf0276454f880349d9cf00e3d304f8136893c5","src/windows.rs":"e41357d610608bad81abf285306ad8b127b6f02d5132f63c4942861980b47d59"},"package":"b685088df2b950fccadf07a7187c8ef846a959c142338a48f9dc0b94517eb5f1"}
+\ No newline at end of file
diff --git a/user/rust/0034-rls-atomics.patch b/user/rust/0034-rls-atomics.patch
new file mode 100644
index 000000000..61811ef4d
--- /dev/null
+++ b/user/rust/0034-rls-atomics.patch
@@ -0,0 +1,63 @@
+diff --git a/src/tools/rls/src/cmd.rs b/src/tools/rls/src/cmd.rs
+index 545a129..8285f99 100644
+--- a/src/tools/rls/src/cmd.rs
++++ b/src/tools/rls/src/cmd.rs
+@@ -16,7 +16,7 @@ use crate::actions::requests;
+ use rls_analysis::{AnalysisHost, Target};
+ use crate::config::Config;
+ use crate::server::{self, LsService, Notification, Request, RequestId};
+-use std::sync::atomic::{AtomicU64, Ordering};
++use std::sync::atomic::{AtomicU32, Ordering};
+ use rls_vfs::Vfs;
+
+ use languageserver_types::{
+@@ -415,8 +415,8 @@ fn url(file_name: &str) -> Url {
+ }
+
+ fn next_id() -> RequestId {
+- static ID: AtomicU64 = AtomicU64::new(1);
+- RequestId::Num(ID.fetch_add(1, Ordering::SeqCst))
++ static ID: AtomicU32 = AtomicU32::new(1);
++ RequestId::Num(ID.fetch_add(1, Ordering::SeqCst).into())
+ }
+
+ // Custom reader and output for the RLS server.
+diff --git a/src/tools/rls/src/server/io.rs b/src/tools/rls/src/server/io.rs
+index 5d5060e..55ab545 100644
+--- a/src/tools/rls/src/server/io.rs
++++ b/src/tools/rls/src/server/io.rs
+@@ -17,7 +17,7 @@ use crate::lsp_data::{LSPNotification, LSPRequest};
+
+ use std::fmt;
+ use std::io::{self, BufRead, Write};
+-use std::sync::atomic::{AtomicU64, Ordering};
++use std::sync::atomic::{AtomicU32, Ordering};
+ use std::sync::Arc;
+
+ use jsonrpc_core::{self as jsonrpc, response, version, Id};
+@@ -190,14 +190,14 @@ pub trait Output: Sync + Send + Clone + 'static {
+ /// An output that sends notifications and responses on `stdout`.
+ #[derive(Clone)]
+ pub(super) struct StdioOutput {
+- next_id: Arc<AtomicU64>,
++ next_id: Arc<AtomicU32>,
+ }
+
+ impl StdioOutput {
+ /// Construct a new `stdout` output.
+ crate fn new() -> StdioOutput {
+ StdioOutput {
+- next_id: Arc::new(AtomicU64::new(1)),
++ next_id: Arc::new(AtomicU32::new(1).into()),
+ }
+ }
+ }
+@@ -215,7 +215,7 @@ impl Output for StdioOutput {
+ }
+
+ fn provide_id(&self) -> RequestId {
+- RequestId::Num(self.next_id.fetch_add(1, Ordering::SeqCst))
++ RequestId::Num(self.next_id.fetch_add(1, Ordering::SeqCst).into())
+ }
+ }
+
diff --git a/user/rust/APKBUILD b/user/rust/APKBUILD
new file mode 100644
index 000000000..6b0111f26
--- /dev/null
+++ b/user/rust/APKBUILD
@@ -0,0 +1,344 @@
+# Contributor: Jakub Jirutka <jakub@jirutka.cz>
+# Contributor: Shiz <hi@shiz.me>
+# Contributor: Jeizsm <jeizsm@gmail.com>
+# Maintainer: Samuel Holland <samuel@sholland.org>
+pkgname=rust
+pkgver=1.29.0
+_bootcargover=0.30.0
+_bootver=1.29.0
+_llvmver=6
+pkgrel=0
+pkgdesc="The Rust Programming Language"
+url="https://www.rust-lang.org"
+arch="all"
+license="(Apache-2.0 OR MIT) AND (NCSA OR MIT) AND BSD-2-Clause AND BSD-3-Clause"
+depends="$pkgname-stdlib=$pkgver-r$pkgrel gcc musl-dev"
+makedepends="
+ curl-dev
+ libgit2-dev
+ libssh2-dev
+ llvm$_llvmver-dev
+ llvm$_llvmver-test-utils
+ openssl-dev
+ python3
+ zlib-dev
+ "
+subpackages="
+ $pkgname-dbg
+ $pkgname-stdlib
+ $pkgname-analysis
+ $pkgname-doc
+ $pkgname-gdb::noarch
+ $pkgname-lldb::noarch
+ $pkgname-src::noarch
+ cargo
+ cargo-clippy:_cargo_clippy
+ cargo-fmt:_cargo_fmt
+ cargo-doc:_cargo_doc:noarch
+ cargo-bash-completion:_cargo_bashcomp:noarch
+ cargo-zsh-completion:_cargo_zshcomp:noarch
+ rls
+ rustfmt
+ "
+source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.xz
+ https://distfiles.adelielinux.org/source/rust/cargo-$_bootcargover-$CBUILD.tar.xz
+ https://distfiles.adelielinux.org/source/rust/rust-std-$_bootver-$CBUILD.tar.xz
+ https://distfiles.adelielinux.org/source/rust/rustc-$_bootver-$CBUILD.tar.xz
+ 0001-Require-static-native-libraries-when-linking-static-.patch
+ 0002-Don-t-pass-CFLAGS-to-the-C-compiler.patch
+ 0003-Fix-LLVM-build.patch
+ 0004-test-sysroot-crates-are-unstable-Fix-test-when-rpath.patch
+ 0005-Remove-nostdlib-and-musl_root-from-musl-targets.patch
+ 0006-Prefer-libgcc_eh-over-libunwind-for-musl.patch
+ 0007-runtest-Fix-proc-macro-tests-on-musl-hosts.patch
+ 0008-Allow-rustdoc-to-work-when-cross-compiling-on-musl.patch
+ 0009-Add-missing-OpenSSL-configurations-for-musl-targets.patch
+ 0010-test-linkage-visibility-dlsym-only-sees-exported-sym.patch
+ 0011-test-invalid_const_promotion-Accept-SIGTRAP-as-a-val.patch
+ 0012-Add-powerpc-unknown-linux-musl-target.patch
+ 0015-Use-ELFv2-ABI-on-powerpc64-musl-LLVM-half.patch
+ 0016-Use-ELFv2-ABI-on-powerpc64-musl-Rust-half.patch
+ 0017-Fix-powerpc64-ELFv2-big-endian-struct-passing-ABI.patch
+ 0018-Add-powerpc64-unknown-linux-musl-target.patch
+ 0019-run-pass-const-endianness-negate-before-to_le.patch
+ 0020-Fix-double_check-tests-on-big-endian-targets.patch
+ 0021-x.py-Use-python3-instead-of-python.patch
+ 0022-test-debuginfo-Update-for-GDB-output-format-changes.patch
+ 0023-test-target-feature-gate-Ignore-on-not-applicable-ta.patch
+ 0024-Ignore-broken-and-non-applicable-tests.patch
+ 0025-Move-debugger-scripts-to-usr-share-rust.patch
+ 0026-Add-foxkit-target-specs.patch
+ 0027-Add-foxkit-target-specs-for-OpenSSL.patch
+ 0028-Link-stage-2-tools-dynamically-to-libstd.patch
+ 0030-liblibc-linkage.patch
+ 0031-liblibc-dcff154781e4.patch
+ 0032-liblibc-90c01fa6b0f4.patch
+ 0033-liblibc-checksums.patch
+ 0034-rls-atomics.patch
+ "
+builddir="$srcdir/rustc-$pkgver-src"
+_rlibdir="/usr/lib/rustlib/$CTARGET/lib"
+
+prepare() {
+ cd "$builddir"
+
+ default_prepare
+
+ $srcdir/cargo-$_bootcargover-$CBUILD/install.sh \
+ --destdir=$srcdir/prebuilt \
+ --prefix=/ \
+ --disable-ldconfig
+ $srcdir/rust-std-$_bootver-$CBUILD/install.sh \
+ --destdir=$srcdir/prebuilt \
+ --prefix=/ \
+ --disable-ldconfig
+ $srcdir/rustc-$_bootver-$CBUILD/install.sh \
+ --destdir=$srcdir/prebuilt \
+ --prefix=/ \
+ --disable-ldconfig
+}
+
+build() {
+ cd "$builddir"
+
+ cat > config.toml <<- EOF
+ [build]
+ build = "$CBUILD"
+ host = [ "$CHOST" ]
+ target = [ "$CTARGET" ]
+ cargo = "$srcdir/prebuilt/bin/cargo"
+ rustc = "$srcdir/prebuilt/bin/rustc"
+ submodules = false
+ python = "python3"
+ locked-deps = true
+ vendor = true
+ extended = true
+ tools = [ "analysis", "cargo", "clippy", "rls", "rustfmt", "src" ]
+ [install]
+ prefix = "/usr"
+ [rust]
+ codegen-units = 1
+ debuginfo = true
+ debuginfo-lines = true
+ debuginfo-only-std = false
+ debuginfo-tools = true
+ use-jemalloc = false
+ backtrace = true
+ channel = "stable"
+ rpath = false
+ [target.$CTARGET]
+ cc = "$CTARGET-gcc"
+ cxx = "$CTARGET-g++"
+ linker = "$CTARGET-gcc"
+ llvm-config = "/usr/lib/llvm$_llvmver/bin/llvm-config"
+ crt-static = false
+ EOF
+
+ LIBGIT2_SYS_USE_PKG_CONFIG=1 \
+ LLVM_LINK_SHARED=1 \
+ RUST_BACKTRACE=1 \
+ ./x.py build -j ${JOBS:-2}
+}
+
+check() {
+ cd "$builddir"
+
+ ./x.py test -j ${JOBS:-2} --no-doc --no-fail-fast \
+ src/test/codegen \
+ src/test/codegen-units \
+ src/test/compile-fail \
+ src/test/compile-fail-fulldeps \
+ src/test/debuginfo \
+ src/test/incremental \
+ src/test/incremental-fulldeps \
+ src/test/mir-opt \
+ src/test/parse-fail \
+ src/test/pretty \
+ src/test/run-fail \
+ src/test/run-fail/pretty \
+ src/test/run-fail-fulldeps \
+ src/test/run-fail-fulldeps/pretty \
+ src/test/run-make \
+ src/test/run-make-fulldeps \
+ src/test/run-pass \
+ src/test/run-pass/pretty \
+ src/test/run-pass-fulldeps \
+ src/test/run-pass-fulldeps/pretty \
+ src/test/ui \
+ src/test/ui-fulldeps
+}
+
+package() {
+ cd "$builddir"
+
+ DESTDIR="$pkgdir" ./x.py install
+
+ rm "$pkgdir"/usr/lib/*.so \
+ "$pkgdir"/usr/lib/rustlib/components \
+ "$pkgdir"/usr/lib/rustlib/install.log \
+ "$pkgdir"/usr/lib/rustlib/manifest-* \
+ "$pkgdir"/usr/lib/rustlib/rust-installer-version \
+ "$pkgdir"/usr/lib/rustlib/uninstall.sh \
+ "$pkgdir"/usr/share/doc/rust/*.old
+}
+
+stdlib() {
+ pkgdesc="Standard library for Rust"
+ depends="musl-utils"
+
+ _mv "$pkgdir"$_rlibdir/*.so "$subpkgdir"$_rlibdir
+
+ mkdir -p "$subpkgdir"/etc/ld.so.conf.d
+ echo "$_rlibdir" > "$subpkgdir"/etc/ld.so.conf.d/$pkgname.conf
+}
+
+analysis() {
+ pkgdesc="Compiler analysis data for the Rust standard library"
+ depends="$pkgname=$pkgver-r$pkgrel $pkgname-stdlib=$pkgver-r$pkgrel"
+
+ _mv "$pkgdir"${_rlibdir%/*}/analysis "$subpkgdir"${_rlibdir%/*}
+}
+
+gdb() {
+ pkgdesc="GDB pretty printers for Rust"
+ license="Apache-2.0 OR MIT"
+ depends="$pkgname gdb"
+ install_if="$pkgname=$pkgver-r$pkgrel gdb"
+
+ _mv "$pkgdir"/usr/bin/rust-gdb "$subpkgdir"/usr/bin
+ _mv "$pkgdir"/usr/share/rust/gdb_*.py "$subpkgdir"/usr/share/rust || true
+}
+
+lldb() {
+ pkgdesc="LLDB pretty printers for Rust"
+ license="Apache-2.0 OR MIT"
+ depends="$pkgname lldb py3-lldb"
+ install_if="$pkgname=$pkgver-r$pkgrel lldb"
+
+ _mv "$pkgdir"/usr/bin/rust-lldb "$subpkgdir"/usr/bin
+ _mv "$pkgdir"/usr/share/rust/lldb_*.py "$subpkgdir"/usr/share/rust || true
+}
+
+src() {
+ pkgdesc="$pkgdesc (source code)"
+ depends=""
+
+ _mv "$pkgdir"/usr/lib/rustlib/src/rust "$subpkgdir"/usr/src
+ rmdir -p "$pkgdir"/usr/lib/rustlib/src 2>/dev/null || true
+
+ mkdir -p "$subpkgdir"/usr/lib/rustlib/src
+ ln -s ../../../src/rust "$subpkgdir"/usr/lib/rustlib/src/rust
+}
+
+cargo() {
+ pkgdesc="The Rust package manager"
+ depends="$pkgname-stdlib=$pkgver-r$pkgrel $pkgname"
+
+ _mv "$pkgdir"/usr/bin/cargo "$subpkgdir"/usr/bin
+}
+
+_cargo_clippy() {
+ pkgdesc="A collection of Rust lints (cargo plugin)"
+ depends="$pkgname-stdlib=$pkgver-r$pkgrel cargo"
+
+ _mv "$pkgdir"/usr/bin/cargo-clippy \
+ "$pkgdir"/usr/bin/clippy-driver \
+ "$subpkgdir"/usr/bin
+}
+
+_cargo_fmt() {
+ pkgdesc="Format Rust code (cargo plugin)"
+ depends="$pkgname-stdlib=$pkgver-r$pkgrel cargo rustfmt"
+ install_if="cargo=$pkgver-r$pkgrel rustfmt=$pkgver-r$pkgrel"
+
+ _mv "$pkgdir"/usr/bin/cargo-fmt "$subpkgdir"/usr/bin
+}
+
+_cargo_bashcomp() {
+ pkgdesc="Bash completion for cargo"
+ license="Apache-2.0 OR MIT"
+ depends=""
+ install_if="cargo=$pkgver-r$pkgrel bash-completion"
+
+ _mv "$pkgdir"/etc/bash_completion.d/cargo \
+ "$subpkgdir"/usr/share/bash-completion/completions
+ rmdir -p "$pkgdir"/etc/bash_completion.d 2>/dev/null || true
+}
+
+_cargo_zshcomp() {
+ pkgdesc="ZSH completion for cargo"
+ license="Apache-2.0 OR MIT"
+ depends=""
+ install_if="cargo=$pkgver-r$pkgrel zsh"
+
+ _mv "$pkgdir"/usr/share/zsh/site-functions/_cargo \
+ "$subpkgdir"/usr/share/zsh/site-functions/_cargo
+ rmdir -p "$pkgdir"/usr/share/zsh/site-functions 2>/dev/null || true
+}
+
+_cargo_doc() {
+ pkgdesc="The Rust package manager (documentation)"
+ license="Apache-2.0 OR MIT"
+ depends=""
+ install_if="cargo=$pkgver-r$pkgrel docs"
+
+ # XXX: This is hackish!
+ _mv "$pkgdir"/../$pkgname-doc/usr/share/man/man1/cargo* \
+ "$subpkgdir"/usr/share/man/man1
+}
+
+rls() {
+ pkgdesc="The Rust language server"
+ license="Apache-2.0 OR MIT"
+ depends="$pkgname-stdlib=$pkgver-r$pkgrel"
+
+ _mv "$pkgdir"/usr/bin/rls "$subpkgdir"/usr/bin
+}
+
+rustfmt() {
+ pkgdesc="Format Rust code"
+ depends="$pkgname-stdlib=$pkgver-r$pkgrel"
+
+ _mv "$pkgdir"/usr/bin/rustfmt "$subpkgdir"/usr/bin
+}
+
+_mv() {
+ local dest; for dest; do true; done # get last argument
+ mkdir -p "$dest"
+ mv "$@"
+}
+sha512sums="87f416c76db2967c0ce2b39ee2d2c2fcad875bbe13cfa507f5483e170827c131f3af4400c11785ed836143b2732aaf32bc0291fcd93bbfb96b266a198c926a5b rustc-1.29.0-src.tar.xz
+1e67f3b28ca5d6e8ed06df36145abcfeecedb8c8b5370023e7de4a19b850b690efefdd583b42fc484c1167a5c301f6779745c12efb065475acf956d9934cb02b cargo-0.30.0-powerpc64-foxkit-linux-musl.tar.xz
+92f250086aa8cc1528359fbf9e9413bc86857acb6e9f0bb3a045a3a1770dd3a4eda5b499c1cd1946bb9f0937d402b73bf46c7e1de8d419efdd0ffbc278239a81 rust-std-1.29.0-powerpc64-foxkit-linux-musl.tar.xz
+1fedd316a05f16947e8288f194cf55b9d9e29667096a50b4f2ecd9c2031e00fbf9a8c14c01968bb047e3f3aac18a036606092749de467b152169eb218360ecbe rustc-1.29.0-powerpc64-foxkit-linux-musl.tar.xz
+23540d67f2774f007ffea65e3475b0003193a28503f302dbbf7fa741c0e53dd14d110a3eb88374c2fc1a29b7c8add4c41300fe1c187b2d2ead8e35740cabaaa8 0001-Require-static-native-libraries-when-linking-static-.patch
+3e10a597f35470b31da178dad3af956d395f4245470f7c2821a78f1e7411acd8758c13c686a342eb362850a736b2887293203847e38c89f40a61498282d29c69 0002-Don-t-pass-CFLAGS-to-the-C-compiler.patch
+d6b293f13dccbe5bdbcc13c2b18e610c271ab49acc0eb5658489388b371431a522f454308af20d2fdb8c68ce99203cfa8455b7c36cc47c8d1f5722b739c3b3fc 0003-Fix-LLVM-build.patch
+38f5380a3e7c8454de62ed75e807ad034f1ef3521a88706d3a24d4de09140147ff298c8e36de14d21f0b458d8c1bf82dd8e3924c7dcef0a16d8cd07ff49f06ea 0004-test-sysroot-crates-are-unstable-Fix-test-when-rpath.patch
+660283864cbd7a98246c3a6d5634b99032c90fcd98eab6f2477786ab49078505f59f2a88f2b87729850e0b07bef18dd5b93c458e947ae876aac3dca3742dff73 0005-Remove-nostdlib-and-musl_root-from-musl-targets.patch
+75a7d5f67e315ef69f6c5114b80523858b528c6ef80ec10fba7d1f1afce97e6053670a8a7473c6948931d2f013e77646b7b30635f12f5b5f6dd12a29f6f4925e 0006-Prefer-libgcc_eh-over-libunwind-for-musl.patch
+7256275df428ea13028731e91dccbba90f7e9f2a611ce9265447831cc60a9284b8d78573da50143b2e7fe4f3f6dc360eddf0be94a01de4b8745d7930144b2365 0007-runtest-Fix-proc-macro-tests-on-musl-hosts.patch
+45c7342c9b901f3d96e293e189773b22e0c7f240e79ffd661e4010f798a6d622304ad16fab22ebb81e92e473c98f93f39505e79dbfb341ec7e29efbcd366594b 0008-Allow-rustdoc-to-work-when-cross-compiling-on-musl.patch
+d48b2653265de8e331afe8fb8ec48b3170845d95eb54ea1fad77cc8ac617cab193b3e797c2753794addcb3f3edb5de99ebdd6de1ad31613a08485b4ad9a8878f 0009-Add-missing-OpenSSL-configurations-for-musl-targets.patch
+abbefe8cbdb1b0cefe9cecfe5b5fad88b868d838617bf1fc1e0da782844ca9f28fb5edd8052115e9667ff21eca90e768caea1ce6c8bf23981162e1da93a70c59 0010-test-linkage-visibility-dlsym-only-sees-exported-sym.patch
+e9c4c6d9029029abc806da48ba85fb3ce5ca2aa0dd748012f8cd89620b3a5646b06a3295b1d001c3e651ffebf7a23d16d074c7a146cc585b9347f16b2c147743 0011-test-invalid_const_promotion-Accept-SIGTRAP-as-a-val.patch
+cf5cb5827a836f2fc155ba5f9caf24d2811e143fa178d64c2cd2c6cd0ba8c121dacd657be7a631f1d2532f3bd6f244c371361afddf65f057acf15f0de1d4b8bd 0012-Add-powerpc-unknown-linux-musl-target.patch
+9e47df4cd5f9590e526be1617efa6c96b80cc9220f819a0b86a6b48a229786b860fff4c2dc5451f7098aa5f250e35285d65cfa0012c15110eab612d585a1f6d7 0015-Use-ELFv2-ABI-on-powerpc64-musl-LLVM-half.patch
+36f07adaef870b90590a7513b1bde0f37793bbd6b773b41bf0cf2b791add51c0c8e22a55b5f8266a04e82f8c60f8a89eb0597cdb23b6f595e787a6a57cd869c0 0016-Use-ELFv2-ABI-on-powerpc64-musl-Rust-half.patch
+63fb44a61ee59e916bbaf78dc95cdb73a77671671db10280e8a8fde08324604f1b2560a648f25b088558c3fd198f855a8056dcb14997c0747f05957c51643aba 0017-Fix-powerpc64-ELFv2-big-endian-struct-passing-ABI.patch
+bd16a8c9d79c495677d1d59a5a806a46d807447ef9be85b20fb2d8150775f24a233d00dea4c5a3b505054b299982fe00d64d1a9a9da26c320e804a8f3840e48b 0018-Add-powerpc64-unknown-linux-musl-target.patch
+41f272bc925d2800fde0f663d300572ab27d4de275b4802de7adb89c2d6582b1aec3cd456ae2c0d115f1104f9de97489da86df101eefbaead374c5d5b20c95d8 0019-run-pass-const-endianness-negate-before-to_le.patch
+e146e9205f22f10fcdd6b8b77ee76a7b2cab0f38368a793cdd15a2dd5b1432c7e9d0ea9ae5cda55ff91edfbea20941fe49836707bb238c84b74ec0330490b4c8 0020-Fix-double_check-tests-on-big-endian-targets.patch
+ed4f07e005a9ee7b117c48961c0285cb5a8f1bf5c1480343d617630af56837fb177cf8e5f564b0795ed063ede485d8478a44c7c257511aaa05d4abf4c316d898 0021-x.py-Use-python3-instead-of-python.patch
+12e6f6dbeefaeee6190a8ed25336836bec23d92778a2b01921f1191e4ac9fb8259b7b99d6bebe52b9e390eb3b4dca40c61e9498cdc222d5019843ef31b82146e 0022-test-debuginfo-Update-for-GDB-output-format-changes.patch
+d9b2234fdc3e2fac9462f0be8ce8988d50573d1149c496ef7b439596303a34e540824a5a6ab23cb15be1a6c1d15d857662d6dae740abd77084375b276b84f4dd 0023-test-target-feature-gate-Ignore-on-not-applicable-ta.patch
+7cff0eb0f947e009326cbd96dae0d74d1f5fb9fbd1cd62544aa5b52c44fdc8f40094856d44dc5b4d55fd2c35308f37fa64656d614ae16d42d71e59a7a8cdb531 0024-Ignore-broken-and-non-applicable-tests.patch
+de5c3b3ca532328957b550cf02cbdc851bacd7740bbdd4512e03d2eb4d916034d2bd026710f2f734d7a31ca67eda3f34e2577a0cd39a4901d0808a1815095064 0025-Move-debugger-scripts-to-usr-share-rust.patch
+6a1c997e5e280b9575857d5dca5cff22ea17fc878389bb0d852139bb113fe64082dfd1298958a78e10d4a8faf58358bc8c221516e248c929c399d327559ef030 0026-Add-foxkit-target-specs.patch
+6b1723c2e4672e394374419fcc136a851078b4a4c538c7c1d86847e6915c5fb3ddc1f81971ded1a73a3090766d103c3cc79c60b8e39999947be625e0e17e1249 0027-Add-foxkit-target-specs-for-OpenSSL.patch
+74618287fe0bdcbedb23b2343e88885496d346c68a6b76109f613c5a13f7e09623ece11cb9c784f1ae6779005c9ec4def0351810718afd80285d1912c0040c9a 0028-Link-stage-2-tools-dynamically-to-libstd.patch
+f94abe390798b968bccfba1c908ab5895220ed0d167314b790a9c28b10cac81fb2e3b08760b4e8551ad5a5d02cd052d3d0d647ad8f8634e97f4d3b0470a21c42 0030-liblibc-linkage.patch
+48a2ea6beb5f333d646fcc7aa15405d24f52f48e82b8f9cd09737dbfef16df0679246b30a28871595d13414b44c316122e0c969e1ae555b7ab18b692057c0d67 0031-liblibc-dcff154781e4.patch
+fcfdd6b2702b8b23d8fd339ceb23b75a6e9814a388f00d226c8101be46a0f29835c77b75ab665e36972fde14364d762816ea2dcf3c1d90dd1e574fb8f6c33c80 0032-liblibc-90c01fa6b0f4.patch
+1e1e1f485abd8e3e283aa69b3b5c6f11901d0cc14527834a6490ed70c043512aa207ff4f9ef4bbdef884697120fab59d23ec1faf3b02b3d3d77a060789275cd4 0033-liblibc-checksums.patch
+9182408b7a87fc2f01dc12a36440e43a721f7693da00310806f6306e711c04b34d43b6ab348ae523656937f61389adb6a5a2b8ff46dec5424ad20c29652d4edf 0034-rls-atomics.patch"
diff --git a/user/screen/APKBUILD b/user/screen/APKBUILD
new file mode 100644
index 000000000..e717f570d
--- /dev/null
+++ b/user/screen/APKBUILD
@@ -0,0 +1,43 @@
+# Contributor: Michael Mason <ms13sp@gmail.com>
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=screen
+pkgver=4.6.2
+pkgrel=0
+pkgdesc="A window manager that multiplexes a physical terminal"
+url="http://ftp.gnu.org/gnu/screen/"
+arch="all"
+license="GPL-3.0+"
+options="!check" # No test suite.
+makedepends="ncurses-dev utmps-dev"
+subpackages="$pkgname-doc"
+source="http://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz
+ utmpx.patch"
+
+build() {
+ cd "$builddir"
+ LIBS="-lutmps -lskarnet" ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --enable-colors256
+ make
+}
+
+package() {
+ cd "$builddir"
+ make -j1 DESTDIR="$pkgdir" install
+
+ # remove suid root
+ find "$pkgdir" -type f -perm -u+s -print0 \
+ | xargs -0 chmod -s
+
+ install -Dm644 etc/etcscreenrc "$pkgdir"/etc/screenrc
+ install -Dm644 etc/screenrc "$pkgdir"/etc/skel/.screenrc
+}
+
+sha512sums="224bd16ad5ae501d1b8bb7d2ba9cc19e6a0743de5a5b320109c2f6bf3b1ca564cc7094ed9211be13733d9d769cde77d13fe236341d448cad0518038ab1e85c99 screen-4.6.2.tar.gz
+82aca3e16c8cd7a3029d3b589ff2dd3471708d6287979ebb5cfdaedbd1f3012c0cd660b131e0cbe142b99786e49ef8b24c63159523d870e95ccf71ec94b82634 utmpx.patch"
diff --git a/user/screen/utmpx.patch b/user/screen/utmpx.patch
new file mode 100644
index 000000000..c8c6f444b
--- /dev/null
+++ b/user/screen/utmpx.patch
@@ -0,0 +1,21 @@
+--- screen-4.6.2/os.h.old 2018-09-27 23:11:11.655480028 -0700
++++ screen-4.6.2/os.h 2018-09-27 23:11:34.745808665 -0700
+@@ -250,17 +250,13 @@
+ #endif
+
+ #if defined(UTMPOK) || defined(BUGGYGETLOGIN)
+-# if defined(SVR4) && !defined(DGUX) && !defined(__hpux) && !defined(linux)
++# if defined(linux)
+ # include <utmpx.h>
+ # define UTMPFILE UTMPX_FILE
+ # define utmp utmpx
+-# define getutent getutxent
+ # define getutid getutxid
+ # define getutline getutxline
+ # define pututline pututxline
+-# define setutent setutxent
+-# define endutent endutxent
+-# define ut_time ut_xtime
+ # else /* SVR4 */
+ # include <utmp.h>
+ # endif /* SVR4 */
diff --git a/user/sdl_mixer/APKBUILD b/user/sdl_mixer/APKBUILD
new file mode 100644
index 000000000..2cdb8238e
--- /dev/null
+++ b/user/sdl_mixer/APKBUILD
@@ -0,0 +1,44 @@
+# Contributor: Carlo Landmeter
+# Maintainer:
+pkgname=sdl_mixer
+pkgver=1.2.12
+pkgrel=2
+pkgdesc="A simple multi-channel audio mixer"
+url="https://www.libsdl.org/projects/SDL_mixer/release-1.2.html"
+arch="all"
+options="!check" # No test suite.
+license="Zlib"
+depends=""
+makedepends="flac-dev fluidsynth-dev libvorbis-dev linux-headers sdl-dev"
+subpackages="$pkgname-dev"
+source="https://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-${pkgver}.tar.gz"
+builddir="$srcdir"/SDL_mixer-$pkgver
+
+prepare() {
+ cd "$builddir"
+ update_config_sub
+ sed -e "/CONFIG_FILE_ETC/s/\/etc\/timidity.cfg/\/etc\/timidity++\/timidity.cfg/" \
+ -e "/DEFAULT_PATH/s/\/etc\/timidity/\/etc\/timidity++/" \
+ -e "/DEFAULT_PATH2/s/\/usr\/local\/lib\/timidity/\/usr\/lib\/timidity/" \
+ -i timidity/config.h
+}
+
+build() {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --enable-music-mod
+ make
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+sha512sums="230f6c5a73f4bea364f8aa3d75f76694305571dea45f357def742b2b50849b2d896af71e08689981207edc99a9836088bee2d0bd98d92c7f4ca52b12b3d8cf96 SDL_mixer-1.2.12.tar.gz"
diff --git a/user/sdl_net/APKBUILD b/user/sdl_net/APKBUILD
new file mode 100644
index 000000000..6172ddc1e
--- /dev/null
+++ b/user/sdl_net/APKBUILD
@@ -0,0 +1,46 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: A. Wilcox <awilfox@adelielinux.org>
+pkgname=sdl_net
+_pkgname=SDL_net
+pkgver=1.2.8
+pkgrel=0
+pkgdesc="Cross-platform networking library"
+url="https://www.libsdl.org/projects/SDL_net/release-1.2.html"
+arch="all"
+license="zlib"
+depends=""
+makedepends="sdl-dev"
+subpackages="$pkgname-dev"
+source="https://www.libsdl.org/projects/$_pkgname/release/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir"/$_pkgname-$pkgver
+
+prepare() {
+ cd "$builddir"
+ default_prepare
+ update_config_sub
+}
+
+build() {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var \
+ --disable-static
+ make
+}
+
+check() {
+ cd "$builddir"
+ make check
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+sha512sums="2766ca55343127c619958ab3a3ae3052a27a676839f10a158f7dfc071b8db38c2f1fc853e8add32b9fef94ab07eaa986f46a68e264e8087b57c990af30ea9a0b SDL_net-1.2.8.tar.gz"
diff --git a/user/sdl_ttf/APKBUILD b/user/sdl_ttf/APKBUILD
new file mode 100644
index 000000000..96321243a
--- /dev/null
+++ b/user/sdl_ttf/APKBUILD
@@ -0,0 +1,45 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: A. Wilcox <awilfox@adelielinux.org>
+pkgname=sdl_ttf
+_pkgname=SDL_ttf
+pkgver=2.0.11
+pkgrel=0
+pkgdesc="TrueType font library for SDL applications"
+url="https://www.libsdl.org/projects/SDL_ttf/release-1.2.html"
+arch="all"
+license="zlib"
+depends=""
+makedepends="freetype-dev libice-dev sdl-dev"
+subpackages="$pkgname-dev"
+source="https://www.libsdl.org/projects/$_pkgname/release/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir"/$_pkgname-$pkgver
+
+prepare() {
+ cd "$builddir"
+ default_prepare
+ update_config_sub
+}
+
+build() {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var
+ make
+}
+
+check() {
+ cd "$builddir"
+ make check
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+sha512sums="64e04d1cd77e525e0f2413ad928841e5d3d09d551c030fc577b50777116580e430cb272b2aeb6191dfcc464669cf2f7a5a50d10e7c75637a3b1e8c8fca7fc78b SDL_ttf-2.0.11.tar.gz"
diff --git a/user/strongswan/0205-ike-Adhere-to-IKE_SA-limit-when-checking-out-by-conf.patch b/user/strongswan/0205-ike-Adhere-to-IKE_SA-limit-when-checking-out-by-conf.patch
new file mode 100644
index 000000000..cc14dab02
--- /dev/null
+++ b/user/strongswan/0205-ike-Adhere-to-IKE_SA-limit-when-checking-out-by-conf.patch
@@ -0,0 +1,104 @@
+From 5a5b26a7dce4c112f62882cfe16dc37659d766e8 Mon Sep 17 00:00:00 2001
+From: Tobias Brunner <tobias@strongswan.org>
+Date: Fri, 17 Jul 2015 11:53:58 +0200
+Subject: [PATCH 1/5] ike: Adhere to IKE_SA limit when checking out by config
+
+This prevents new SAs from getting created if we hit the global IKE_SA
+limit (we still allow checkout_new(), which is used for rekeying).
+---
+ src/libcharon/sa/ike_sa_manager.c | 71 ++++++++++++++++++++-------------------
+ 1 file changed, 37 insertions(+), 34 deletions(-)
+
+diff --git a/src/libcharon/sa/ike_sa_manager.c b/src/libcharon/sa/ike_sa_manager.c
+index ce44207..37d49da 100644
+--- a/src/libcharon/sa/ike_sa_manager.c
++++ b/src/libcharon/sa/ike_sa_manager.c
+@@ -1419,48 +1419,51 @@ METHOD(ike_sa_manager_t, checkout_by_config, ike_sa_t*,
+
+ DBG2(DBG_MGR, "checkout IKE_SA by config");
+
+- if (!this->reuse_ikesa && peer_cfg->get_ike_version(peer_cfg) != IKEV1)
+- { /* IKE_SA reuse disabled by config (not possible for IKEv1) */
+- ike_sa = checkout_new(this, peer_cfg->get_ike_version(peer_cfg), TRUE);
+- charon->bus->set_sa(charon->bus, ike_sa);
+- goto out;
+- }
+-
+- enumerator = create_table_enumerator(this);
+- while (enumerator->enumerate(enumerator, &entry, &segment))
++ if (this->reuse_ikesa || peer_cfg->get_ike_version(peer_cfg) == IKEV1)
+ {
+- if (!wait_for_entry(this, entry, segment))
++ enumerator = create_table_enumerator(this);
++ while (enumerator->enumerate(enumerator, &entry, &segment))
+ {
+- continue;
+- }
+- if (entry->ike_sa->get_state(entry->ike_sa) == IKE_DELETING ||
+- entry->ike_sa->get_state(entry->ike_sa) == IKE_REKEYED)
+- { /* skip IKE_SAs which are not usable, wake other waiting threads */
+- entry->condvar->signal(entry->condvar);
+- continue;
+- }
+-
+- current_peer = entry->ike_sa->get_peer_cfg(entry->ike_sa);
+- if (current_peer && current_peer->equals(current_peer, peer_cfg))
+- {
+- current_ike = current_peer->get_ike_cfg(current_peer);
+- if (current_ike->equals(current_ike, peer_cfg->get_ike_cfg(peer_cfg)))
++ if (!wait_for_entry(this, entry, segment))
+ {
+- entry->checked_out = thread_current();
+- ike_sa = entry->ike_sa;
+- DBG2(DBG_MGR, "found existing IKE_SA %u with a '%s' config",
+- ike_sa->get_unique_id(ike_sa),
+- current_peer->get_name(current_peer));
+- break;
++ continue;
+ }
++ if (entry->ike_sa->get_state(entry->ike_sa) == IKE_DELETING ||
++ entry->ike_sa->get_state(entry->ike_sa) == IKE_REKEYED)
++ { /* skip IKE_SAs which are not usable, wake other waiting threads */
++ entry->condvar->signal(entry->condvar);
++ continue;
++ }
++ current_peer = entry->ike_sa->get_peer_cfg(entry->ike_sa);
++ if (current_peer && current_peer->equals(current_peer, peer_cfg))
++ {
++ current_ike = current_peer->get_ike_cfg(current_peer);
++ if (current_ike->equals(current_ike,
++ peer_cfg->get_ike_cfg(peer_cfg)))
++ {
++ entry->checked_out = thread_current();
++ ike_sa = entry->ike_sa;
++ DBG2(DBG_MGR, "found existing IKE_SA %u with a '%s' config",
++ ike_sa->get_unique_id(ike_sa),
++ current_peer->get_name(current_peer));
++ break;
++ }
++ }
++ /* other threads might be waiting for this entry */
++ entry->condvar->signal(entry->condvar);
+ }
+- /* other threads might be waiting for this entry */
+- entry->condvar->signal(entry->condvar);
++ enumerator->destroy(enumerator);
+ }
+- enumerator->destroy(enumerator);
+
+ if (!ike_sa)
+- { /* no IKE_SA using such a config, hand out a new */
++ { /* no IKE_SA using such a config, or reuse disabled, hand out a new */
++ if (this->ikesa_limit &&
++ this->public.get_count(&this->public) >= this->ikesa_limit)
++ {
++ DBG1(DBG_MGR, "IKE_SA creation failed, hitting IKE_SA limit (%u)",
++ this->ikesa_limit);
++ return NULL;
++ }
+ ike_sa = checkout_new(this, peer_cfg->get_ike_version(peer_cfg), TRUE);
+ }
+ charon->bus->set_sa(charon->bus, ike_sa);
+--
+2.5.0
+
diff --git a/user/strongswan/1001-charon-add-optional-source-and-remote-overrides-for-.patch b/user/strongswan/1001-charon-add-optional-source-and-remote-overrides-for-.patch
new file mode 100644
index 000000000..d9aea3c4d
--- /dev/null
+++ b/user/strongswan/1001-charon-add-optional-source-and-remote-overrides-for-.patch
@@ -0,0 +1,597 @@
+From 460e0f52d88433071b27603e47995517514ef8b9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
+Date: Mon, 21 Sep 2015 13:41:58 +0300
+Subject: [PATCH] charon: add optional source and remote overrides for initiate
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This introduces support for specifying optional IKE SA specific
+source and remote address for child sa initiation. This allows
+to initiate wildcard connection for known address via vici.
+
+In addition this allows impler implementation of trap-any patches
+and is a prerequisite for dmvpn support.
+
+Signed-off-by: Timo Teräs <timo.teras@iki.fi>
+---
+ src/charon-cmd/cmd/cmd_connection.c | 2 +-
+ src/charon-nm/nm/nm_service.c | 2 +-
+ src/libcharon/control/controller.c | 43 +++++++++++++++-
+ src/libcharon/control/controller.h | 3 ++
+ src/libcharon/plugins/stroke/stroke_control.c | 5 +-
+ src/libcharon/plugins/vici/vici_config.c | 2 +-
+ src/libcharon/plugins/vici/vici_control.c | 63 ++++++++++++++++++++----
+ src/libcharon/processing/jobs/start_action_job.c | 2 +-
+ src/libcharon/sa/ike_sa_manager.c | 51 ++++++++++++++++++-
+ src/libcharon/sa/ike_sa_manager.h | 8 ++-
+ src/libcharon/sa/trap_manager.c | 45 +++++++----------
+ src/swanctl/commands/initiate.c | 40 ++++++++++++++-
+ 12 files changed, 218 insertions(+), 48 deletions(-)
+
+diff --git a/src/charon-cmd/cmd/cmd_connection.c b/src/charon-cmd/cmd/cmd_connection.c
+index 71df92f7e..13b31de8a 100644
+--- a/src/charon-cmd/cmd/cmd_connection.c
++++ b/src/charon-cmd/cmd/cmd_connection.c
+@@ -436,7 +436,7 @@ static job_requeue_t initiate(private_cmd_connection_t *this)
+ child_cfg = create_child_cfg(this, peer_cfg);
+
+ if (charon->controller->initiate(charon->controller, peer_cfg, child_cfg,
+- controller_cb_empty, NULL, 0, FALSE) != SUCCESS)
++ NULL, NULL, controller_cb_empty, NULL, 0, FALSE) != SUCCESS)
+ {
+ terminate(pid);
+ }
+diff --git a/src/charon-nm/nm/nm_service.c b/src/charon-nm/nm/nm_service.c
+index 571c0edba..e7922cf4d 100644
+--- a/src/charon-nm/nm/nm_service.c
++++ b/src/charon-nm/nm/nm_service.c
+@@ 6220,7 +622,7 @@ static gboolean connect_(NMVPNPlugin *plugin, NMConnection *connection,
+ * Prepare IKE_SA
+ */
+ ike_sa = charon->ike_sa_manager->checkout_by_config(charon->ike_sa_manager,
+- peer_cfg);
++ peer_cfg, NULL, NULL);
+ if (!ike_sa)
+ {
+ peer_cfg->destroy(peer_cfg);
+diff --git a/src/libcharon/control/controller.c b/src/libcharon/control/controller.c
+index 8e7816b39..7d7b3bcbc 100644
+--- a/src/libcharon/control/controller.c
++++ b/src/libcharon/control/controller.c
+@@ -15,6 +15,28 @@
+ * for more details.
+ */
+
++/*
++ * Copyright (C) 2014 Timo Teräs <timo.teras@iki.fi>
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this software and associated documentation files (the "Software"), to deal
++ * in the Software without restriction, including without limitation the rights
++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
++ * copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
++ * THE SOFTWARE.
++ */
++
+ #include "controller.h"
+
+ #include <sys/types.h>
+@@ -103,6 +125,16 @@ struct interface_listener_t {
+ ike_sa_t *ike_sa;
+
+ /**
++ * Our host hint.
++ */
++ host_t *my_host;
++
++ /**
++ * Other host hint.
++ */
++ host_t *other_host;
++
++ /**
+ * unique ID, used for various methods
+ */
+ uint32_t id;
+@@ -409,9 +441,14 @@ METHOD(job_t, initiate_execute, job_requeue_t,
+ ike_sa_t *ike_sa;
+ interface_listener_t *listener = &job->listener;
+ peer_cfg_t *peer_cfg = listener->peer_cfg;
++ host_t *my_host = listener->my_host;
++ host_t *other_host = listener->other_host;
+
+ ike_sa = charon->ike_sa_manager->checkout_by_config(charon->ike_sa_manager,
+- peer_cfg);
++ peer_cfg, my_host, other_host);
++ DESTROY_IF(my_host);
++ DESTROY_IF(other_host);
++
+ if (!ike_sa)
+ {
+ listener->child_cfg->destroy(listener->child_cfg);
+@@ -420,6 +457,7 @@ METHOD(job_t, initiate_execute, job_requeue_t,
+ listener_done(listener);
+ return JOB_REQUEUE_NONE;
+ }
++
+ listener->lock->lock(listener->lock);
+ listener->ike_sa = ike_sa;
+ listener->lock->unlock(listener->lock);
+@@ -492,6 +530,7 @@ METHOD(job_t, initiate_execute, job_requeue_t,
+
+ METHOD(controller_t, initiate, status_t,
+ private_controller_t *this, peer_cfg_t *peer_cfg, child_cfg_t *child_cfg,
++ host_t *my_host, host_t *other_host,
+ controller_cb_t callback, void *param, u_int timeout, bool limits)
+ {
+ interface_job_t *job;
+@@ -514,6 +553,8 @@ METHOD(controller_t, initiate, status_t,
+ .status = FAILED,
+ .child_cfg = child_cfg,
+ .peer_cfg = peer_cfg,
++ .my_host = my_host ? my_host->clone(my_host) : NULL,
++ .other_host = other_host ? other_host->clone(other_host) : NULL,
+ .lock = spinlock_create(),
+ .limits = limits,
+ },
+diff --git a/src/libcharon/control/controller.h b/src/libcharon/control/controller.h
+index 9524f53b9..7c51ba4ca 100644
+--- a/src/libcharon/control/controller.h
++++ b/src/libcharon/control/controller.h
+@@ -79,6 +79,8 @@ struct controller_t {
+ *
+ * @param peer_cfg peer_cfg to use for IKE_SA setup
+ * @param child_cfg child_cfg to set up CHILD_SA from
++ * @param my_host optional address hint for source
++ * @param other_host optional address hint for destination
+ * @param cb logging callback
+ * @param param parameter to include in each call of cb
+ * @param timeout timeout in ms to wait for callbacks, 0 to disable
+@@ -92,6 +94,7 @@ struct controller_t {
+ */
+ status_t (*initiate)(controller_t *this,
+ peer_cfg_t *peer_cfg, child_cfg_t *child_cfg,
++ host_t *my_host, host_t *other_host,
+ controller_cb_t callback, void *param, u_int timeout,
+ bool limits);
+
+diff --git a/src/libcharon/plugins/stroke/stroke_control.c b/src/libcharon/plugins/stroke/stroke_control.c
+index ee8306772..0736a6427 100644
+--- a/src/libcharon/plugins/stroke/stroke_control.c
++++ b/src/libcharon/plugins/stroke/stroke_control.c
+@@ -108,7 +108,7 @@ static void charon_initiate(private_stroke_control_t *this, peer_cfg_t *peer_cfg
+ if (msg->output_verbosity < 0)
+ {
+ charon->controller->initiate(charon->controller, peer_cfg, child_cfg,
+- NULL, NULL, 0, FALSE);
++ NULL, NULL, NULL, NULL, 0, FALSE);
+ }
+ else
+ {
+@@ -116,7 +116,8 @@ static void charon_initiate(private_stroke_control_t *this, peer_cfg_t *peer_cfg
+ status_t status;
+
+ status = charon->controller->initiate(charon->controller,
+- peer_cfg, child_cfg, (controller_cb_t)stroke_log,
++ peer_cfg, child_cfg, NULL, NULL,
++ (controller_cb_t)stroke_log,
+ &info, this->timeout, FALSE);
+ switch (status)
+ {
+diff --git a/src/libcharon/plugins/vici/vici_config.c b/src/libcharon/plugins/vici/vici_config.c
+index 12497ec5e..ba954e5cb 100644
+--- a/src/libcharon/plugins/vici/vici_config.c
++++ b/src/libcharon/plugins/vici/vici_config.c
+@@ -1978,7 +1978,7 @@ static void run_start_action(private_vici_config_t *this, peer_cfg_t *peer_cfg,
+ DBG1(DBG_CFG, "initiating '%s'", child_cfg->get_name(child_cfg));
+ charon->controller->initiate(charon->controller,
+ peer_cfg->get_ref(peer_cfg), child_cfg->get_ref(child_cfg),
+- NULL, NULL, 0, FALSE);
++ NULL, NULL, NULL, NULL, 0, FALSE);
+ break;
+ case ACTION_ROUTE:
+ DBG1(DBG_CFG, "installing '%s'", child_cfg->get_name(child_cfg));
+diff --git a/src/libcharon/plugins/vici/vici_control.c b/src/libcharon/plugins/vici/vici_control.c
+index afee649f7..94bb2eecb 100644
+--- a/src/libcharon/plugins/vici/vici_control.c
++++ b/src/libcharon/plugins/vici/vici_control.c
+@@ -16,6 +16,28 @@
+ * for more details.
+ */
+
++/*
++ * Copyright (C) 2014 Timo Teräs <timo.teras@iki.fi>
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this software and associated documentation files (the "Software"), to deal
++ * in the Software without restriction, including without limitation the rights
++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
++ * copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
++ * THE SOFTWARE.
++ */
++
+ #include "vici_control.h"
+ #include "vici_builder.h"
+
+@@ -169,9 +191,11 @@ static child_cfg_t* find_child_cfg(char *name, char *pname, peer_cfg_t **out)
+ CALLBACK(initiate, vici_message_t*,
+ private_vici_control_t *this, char *name, u_int id, vici_message_t *request)
+ {
++ vici_message_t* msg;
+ child_cfg_t *child_cfg = NULL;
+ peer_cfg_t *peer_cfg;
+- char *child, *ike;
++ host_t *my_host = NULL, *other_host = NULL;
++ char *child, *ike, *my_host_str, *other_host_str;
+ int timeout;
+ bool limits;
+ controller_cb_t log_cb = NULL;
+@@ -185,6 +209,8 @@ CALLBACK(initiate, vici_message_t*,
+ timeout = request->get_int(request, 0, "timeout");
+ limits = request->get_bool(request, FALSE, "init-limits");
+ log.level = request->get_int(request, 1, "loglevel");
++ my_host_str = request->get_str(request, NULL, "my-host");
++ other_host_str = request->get_str(request, NULL, "other-host");
+
+ if (!child)
+ {
+@@ -195,28 +221,47 @@ CALLBACK(initiate, vici_message_t*,
+ log_cb = (controller_cb_t)log_vici;
+ }
+
+- DBG1(DBG_CFG, "vici initiate '%s'", child);
++ if (my_host_str)
++ {
++ my_host = host_create_from_string(my_host_str, 0);
++ }
++ if (other_host_str)
++ {
++ other_host = host_create_from_string(other_host_str, 0);
++ }
++
++ DBG1(DBG_CFG, "vici initiate '%s', me %H, other %H, limits %d", child, my_host, other_host, limits);
+
+ child_cfg = find_child_cfg(child, ike, &peer_cfg);
+ if (!child_cfg)
+ {
+- return send_reply(this, "CHILD_SA config '%s' not found", child);
++ msg = send_reply(this, "CHILD_SA config '%s' not found", child);
++ goto ret;
+ }
+- switch (charon->controller->initiate(charon->controller, peer_cfg,
+- child_cfg, log_cb, &log, timeout, limits))
++ switch (charon->controller->initiate(charon->controller,
++ peer_cfg, child_cfg, my_host, other_host,
++ log_cb, &log, timeout, limits))
+ {
+ case SUCCESS:
+- return send_reply(this, NULL);
++ msg = send_reply(this, NULL);
++ break;
+ case OUT_OF_RES:
+- return send_reply(this, "CHILD_SA '%s' not established after %dms",
++ msg = send_reply(this, "CHILD_SA '%s' not established after %dms",
+ child, timeout);
++ break;
+ case INVALID_STATE:
+- return send_reply(this, "establishing CHILD_SA '%s' not possible "
++ msg = send_reply(this, "establishing CHILD_SA '%s' not possible "
+ "at the moment due to limits", child);
++ break;
+ case FAILED:
+ default:
+- return send_reply(this, "establishing CHILD_SA '%s' failed", child);
++ msg = send_reply(this, "establishing CHILD_SA '%s' failed", child);
++ break;
+ }
++ret:
++ if (my_host) my_host->destroy(my_host);
++ if (other_host) other_host->destroy(other_host);
++ return msg;
+ }
+
+ CALLBACK(terminate, vici_message_t*,
+diff --git a/src/libcharon/processing/jobs/start_action_job.c b/src/libcharon/processing/jobs/start_action_job.c
+index 654ec6abe..3d5a48cb8 100644
+--- a/src/libcharon/processing/jobs/start_action_job.c
++++ b/src/libcharon/processing/jobs/start_action_job.c
+@@ -61,7 +61,7 @@ METHOD(job_t, execute, job_requeue_t,
+ charon->controller->initiate(charon->controller,
+ peer_cfg->get_ref(peer_cfg),
+ child_cfg->get_ref(child_cfg),
+- NULL, NULL, 0, FALSE);
++ NULL, NULL, NULL, NULL, 0, FALSE);
+ break;
+ case ACTION_ROUTE:
+ DBG1(DBG_JOB, "start action: route '%s'", name);
+diff --git a/src/libcharon/sa/ike_sa_manager.c b/src/libcharon/sa/ike_sa_manager.c
+index 3ee233c1f..def2a6f1b 100644
+--- a/src/libcharon/sa/ike_sa_manager.c
++++ b/src/libcharon/sa/ike_sa_manager.c
+@@ -17,6 +17,28 @@
+ * for more details.
+ */
+
++/*
++ * Copyright (C) 2014 Timo Teräs <timo.teras@iki.fi>
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this software and associated documentation files (the "Software"), to deal
++ * in the Software without restriction, including without limitation the rights
++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
++ * copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
++ * THE SOFTWARE.
++ */
++
+ #include <string.h>
+ #include <inttypes.h>
+
+@@ -1408,7 +1430,8 @@ out:
+ }
+
+ METHOD(ike_sa_manager_t, checkout_by_config, ike_sa_t*,
+- private_ike_sa_manager_t *this, peer_cfg_t *peer_cfg)
++ private_ike_sa_manager_t *this, peer_cfg_t *peer_cfg,
++ host_t *my_host, host_t *other_host)
+ {
+ enumerator_t *enumerator;
+ entry_t *entry;
+@@ -1417,7 +1440,17 @@ METHOD(ike_sa_manager_t, checkout_by_config, ike_sa_t*,
+ ike_cfg_t *current_ike;
+ u_int segment;
+
+- DBG2(DBG_MGR, "checkout IKE_SA by config");
++ if (my_host && my_host->get_port(my_host) == 0)
++ {
++ my_host->set_port(my_host, IKEV2_UDP_PORT);
++ }
++ if (other_host && other_host->get_port(other_host) == 0)
++ {
++ other_host->set_port(other_host, IKEV2_UDP_PORT);
++ }
++
++ DBG2(DBG_MGR, "checkout IKE_SA by config '%s', me %H, other %H",
++ peer_cfg->get_name(peer_cfg), my_host, other_host);
+
+ if (this->reuse_ikesa || peer_cfg->get_ike_version(peer_cfg) == IKEV1)
+ {
+@@ -1434,6 +1457,16 @@ METHOD(ike_sa_manager_t, checkout_by_config, ike_sa_t*,
+ entry->condvar->signal(entry->condvar);
+ continue;
+ }
++
++ if (my_host && !my_host->ip_equals(my_host, entry->ike_sa->get_my_host(entry->ike_sa)))
++ {
++ continue;
++ }
++ if (other_host && !other_host->ip_equals(other_host, entry->ike_sa->get_other_host(entry->ike_sa)))
++ {
++ continue;
++ }
++
+ current_peer = entry->ike_sa->get_peer_cfg(entry->ike_sa);
+ if (current_peer && current_peer->equals(current_peer, peer_cfg))
+ {
+@@ -1465,6 +1508,10 @@ METHOD(ike_sa_manager_t, checkout_by_config, ike_sa_t*,
+ return NULL;
+ }
+ ike_sa = checkout_new(this, peer_cfg->get_ike_version(peer_cfg), TRUE);
++ if (my_host || other_host)
++ {
++ ike_sa->update_hosts(ike_sa, my_host, other_host, TRUE);
++ }
+ }
+ charon->bus->set_sa(charon->bus, ike_sa);
+
+diff --git a/src/libcharon/sa/ike_sa_manager.h b/src/libcharon/sa/ike_sa_manager.h
+index 4298c54e2..47d6e6a37 100644
+--- a/src/libcharon/sa/ike_sa_manager.h
++++ b/src/libcharon/sa/ike_sa_manager.h
+@@ -93,7 +93,8 @@ struct ike_sa_manager_t {
+ ike_sa_t* (*checkout_by_message) (ike_sa_manager_t* this, message_t *message);
+
+ /**
+- * Checkout an IKE_SA for initiation by a peer_config.
++ * Checkout an IKE_SA for initiation by a peer_config and optional
++ * source and remote host addresses.
+ *
+ * To initiate, a CHILD_SA may be established within an existing IKE_SA.
+ * This call checks for an existing IKE_SA by comparing the configuration.
+@@ -103,10 +104,13 @@ struct ike_sa_manager_t {
+ * the found IKE_SA is in the DELETING state.
+ *
+ * @param peer_cfg configuration used to find an existing IKE_SA
++ * @param my_host source host address for wildcard peer_cfg
++ * @param other_host remote host address for wildcard peer_cfg
+ * @return checked out/created IKE_SA
+ */
+ ike_sa_t* (*checkout_by_config) (ike_sa_manager_t* this,
+- peer_cfg_t *peer_cfg);
++ peer_cfg_t *peer_cfg,
++ host_t *my_host, host_t *other_host);
+
+ /**
+ * Check for duplicates of the given IKE_SA.
+diff --git a/src/libcharon/sa/trap_manager.c b/src/libcharon/sa/trap_manager.c
+index 40a0682f2..ea79d95ae 100644
+--- a/src/libcharon/sa/trap_manager.c
++++ b/src/libcharon/sa/trap_manager.c
+@@ -421,7 +421,7 @@ METHOD(trap_manager_t, acquire, void,
+ peer_cfg_t *peer;
+ child_cfg_t *child;
+ ike_sa_t *ike_sa;
+- host_t *host;
++ host_t *host, *my_host = NULL, *other_host = NULL;
+ bool wildcard, ignore = FALSE;
+
+ this->lock->read_lock(this->lock);
+@@ -497,36 +497,27 @@ METHOD(trap_manager_t, acquire, void,
+ this->lock->unlock(this->lock);
+
+ if (wildcard)
+- { /* the peer config would match IKE_SAs with other peers */
+- ike_sa = charon->ike_sa_manager->checkout_new(charon->ike_sa_manager,
+- peer->get_ike_version(peer), TRUE);
+- if (ike_sa)
+- {
+- ike_cfg_t *ike_cfg;
+- uint16_t port;
+- uint8_t mask;
+-
+- ike_sa->set_peer_cfg(ike_sa, peer);
+- ike_cfg = ike_sa->get_ike_cfg(ike_sa);
++ {
++ ike_cfg_t *ike_cfg;
++ uint16_t port;
++ uint8_t mask;
+
+- port = ike_cfg->get_other_port(ike_cfg);
+- dst->to_subnet(dst, &host, &mask);
+- host->set_port(host, port);
+- ike_sa->set_other_host(ike_sa, host);
++ ike_cfg = peer->get_ike_cfg(peer);
+
+- port = ike_cfg->get_my_port(ike_cfg);
+- src->to_subnet(src, &host, &mask);
+- host->set_port(host, port);
+- ike_sa->set_my_host(ike_sa, host);
++ port = ike_cfg->get_other_port(ike_cfg);
++ dst->to_subnet(dst, &other_host, &mask);
++ other_host->set_port(other_host, port);
+
+- charon->bus->set_sa(charon->bus, ike_sa);
+- }
+- }
+- else
+- {
+- ike_sa = charon->ike_sa_manager->checkout_by_config(
+- charon->ike_sa_manager, peer);
++ port = ike_cfg->get_my_port(ike_cfg);
++ src->to_subnet(src, &my_host, &mask);
++ my_host->set_port(my_host, port);
+ }
++ ike_sa = charon->ike_sa_manager->checkout_by_config(
++ charon->ike_sa_manager, peer,
++ my_host, other_host);
++ DESTROY_IF(my_host);
++ DESTROY_IF(other_host);
++
+ if (ike_sa)
+ {
+ if (ike_sa->get_peer_cfg(ike_sa) == NULL)
+diff --git a/src/swanctl/commands/initiate.c b/src/swanctl/commands/initiate.c
+index 8e452a6f6..b27bb8194 100644
+--- a/src/swanctl/commands/initiate.c
++++ b/src/swanctl/commands/initiate.c
+@@ -13,6 +13,28 @@
+ * for more details.
+ */
+
++/*
++ * Copyright (C) 2014 Timo Teräs <timo.teras@iki.fi>
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this software and associated documentation files (the "Software"), to deal
++ * in the Software without restriction, including without limitation the rights
++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
++ * copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
++ * THE SOFTWARE.
++ */
++
+ #include "command.h"
+
+ #include <errno.h>
+@@ -37,7 +59,7 @@ static int initiate(vici_conn_t *conn)
+ vici_req_t *req;
+ vici_res_t *res;
+ command_format_options_t format = COMMAND_FORMAT_NONE;
+- char *arg, *child = NULL, *ike = NULL;
++ char *arg, *child = NULL, *ike = NULL, *my_host = NULL, *other_host = NULL;
+ int ret = 0, timeout = 0, level = 1;
+
+ while (TRUE)
+@@ -64,6 +86,12 @@ static int initiate(vici_conn_t *conn)
+ case 'l':
+ level = atoi(arg);
+ continue;
++ case 'S':
++ my_host = arg;
++ continue;
++ case 'R':
++ other_host = arg;
++ continue;
+ case EOF:
+ break;
+ default:
+@@ -87,6 +115,14 @@ static int initiate(vici_conn_t *conn)
+ {
+ vici_add_key_valuef(req, "ike", "%s", ike);
+ }
++ if (my_host)
++ {
++ vici_add_key_valuef(req, "my-host", "%s", my_host);
++ }
++ if (other_host)
++ {
++ vici_add_key_valuef(req, "other-host", "%s", other_host);
++ }
+ if (timeout)
+ {
+ vici_add_key_valuef(req, "timeout", "%d", timeout * 1000);
+@@ -133,6 +169,8 @@ static void __attribute__ ((constructor))reg()
+ {"help", 'h', 0, "show usage information"},
+ {"child", 'c', 1, "initate a CHILD_SA configuration"},
+ {"ike", 'i', 1, "name of the connection to which the child belongs"},
++ {"source", 'S', 1, "override source address"},
++ {"remote", 'R', 1, "override remote address"},
+ {"timeout", 't', 1, "timeout in seconds before detaching"},
+ {"raw", 'r', 0, "dump raw response message"},
+ {"pretty", 'P', 0, "dump raw response message in pretty print"},
+--
+2.12.1
+
diff --git a/user/strongswan/1002-vici-send-certificates-for-ike-sa-events.patch b/user/strongswan/1002-vici-send-certificates-for-ike-sa-events.patch
new file mode 100644
index 000000000..94814e13d
--- /dev/null
+++ b/user/strongswan/1002-vici-send-certificates-for-ike-sa-events.patch
@@ -0,0 +1,131 @@
+From 61556ac61b9d7c564dfe13d5cf549a53f889ae36 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
+Date: Mon, 21 Sep 2015 13:42:05 +0300
+Subject: [PATCH] vici: send certificates for ike-sa events
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Timo Teräs <timo.teras@iki.fi>
+---
+ src/libcharon/plugins/vici/vici_query.c | 48 ++++++++++++++++++++++++++++-----
+ 1 file changed, 41 insertions(+), 7 deletions(-)
+
+diff --git a/src/libcharon/plugins/vici/vici_query.c b/src/libcharon/plugins/vici/vici_query.c
+index c0f4e2de9..309a11c03 100644
+--- a/src/libcharon/plugins/vici/vici_query.c
++++ b/src/libcharon/plugins/vici/vici_query.c
+@@ -337,7 +337,7 @@ static void list_vips(private_vici_query_t *this, vici_builder_t *b,
+ * List details of an IKE_SA
+ */
+ static void list_ike(private_vici_query_t *this, vici_builder_t *b,
+- ike_sa_t *ike_sa, time_t now)
++ ike_sa_t *ike_sa, time_t now, bool add_certs)
+ {
+ time_t t;
+ ike_sa_id_t *id;
+@@ -345,6 +345,8 @@ static void list_ike(private_vici_query_t *this, vici_builder_t *b,
+ proposal_t *proposal;
+ uint16_t alg, ks;
+ host_t *host;
++ auth_cfg_t *auth_cfg;
++ enumerator_t *enumerator;
+
+ b->add_kv(b, "uniqueid", "%u", ike_sa->get_unique_id(ike_sa));
+ b->add_kv(b, "version", "%u", ike_sa->get_version(ike_sa));
+@@ -354,11 +356,43 @@ static void list_ike(private_vici_query_t *this, vici_builder_t *b,
+ b->add_kv(b, "local-host", "%H", host);
+ b->add_kv(b, "local-port", "%d", host->get_port(host));
+ b->add_kv(b, "local-id", "%Y", ike_sa->get_my_id(ike_sa));
++ if (add_certs)
++ {
++ enumerator = ike_sa->create_auth_cfg_enumerator(ike_sa, TRUE);
++ if (enumerator->enumerate(enumerator, &auth_cfg))
++ {
++ certificate_t *cert = auth_cfg->get(auth_cfg, AUTH_RULE_SUBJECT_CERT);
++ chunk_t encoding;
++
++ if (cert && cert->get_encoding(cert, CERT_ASN1_DER, &encoding))
++ {
++ b->add(b, VICI_KEY_VALUE, "local-cert-data", encoding);
++ free(encoding.ptr);
++ }
++ }
++ enumerator->destroy(enumerator);
++ }
+
+ host = ike_sa->get_other_host(ike_sa);
+ b->add_kv(b, "remote-host", "%H", host);
+ b->add_kv(b, "remote-port", "%d", host->get_port(host));
+ b->add_kv(b, "remote-id", "%Y", ike_sa->get_other_id(ike_sa));
++ if (add_certs)
++ {
++ enumerator = ike_sa->create_auth_cfg_enumerator(ike_sa, FALSE);
++ if (enumerator->enumerate(enumerator, &auth_cfg))
++ {
++ certificate_t *cert = auth_cfg->get(auth_cfg, AUTH_RULE_SUBJECT_CERT);
++ chunk_t encoding;
++
++ if (cert && cert->get_encoding(cert, CERT_ASN1_DER, &encoding))
++ {
++ b->add(b, VICI_KEY_VALUE, "remote-cert-data", encoding);
++ free(encoding.ptr);
++ }
++ }
++ enumerator->destroy(enumerator);
++ }
+
+ eap = ike_sa->get_other_eap_id(ike_sa);
+
+@@ -476,7 +510,7 @@ CALLBACK(list_sas, vici_message_t*,
+ b = vici_builder_create();
+ b->begin_section(b, ike_sa->get_name(ike_sa));
+
+- list_ike(this, b, ike_sa, now);
++ list_ike(this, b, ike_sa, now, TRUE);
+
+ b->begin_section(b, "child-sas");
+ csas = ike_sa->create_child_sa_enumerator(ike_sa);
+@@ -1624,7 +1658,7 @@ METHOD(listener_t, ike_updown, bool,
+ }
+
+ b->begin_section(b, ike_sa->get_name(ike_sa));
+- list_ike(this, b, ike_sa, now);
++ list_ike(this, b, ike_sa, now, up);
+ b->end_section(b);
+
+ this->dispatcher->raise_event(this->dispatcher,
+@@ -1649,10 +1683,10 @@ METHOD(listener_t, ike_rekey, bool,
+ b = vici_builder_create();
+ b->begin_section(b, old->get_name(old));
+ b->begin_section(b, "old");
+- list_ike(this, b, old, now);
++ list_ike(this, b, old, now, TRUE);
+ b->end_section(b);
+ b->begin_section(b, "new");
+- list_ike(this, b, new, now);
++ list_ike(this, b, new, now, TRUE);
+ b->end_section(b);
+ b->end_section(b);
+
+@@ -1682,7 +1716,7 @@ METHOD(listener_t, child_updown, bool,
+ }
+
+ b->begin_section(b, ike_sa->get_name(ike_sa));
+- list_ike(this, b, ike_sa, now);
++ list_ike(this, b, ike_sa, now, up);
+ b->begin_section(b, "child-sas");
+
+ b->begin_section(b, child_sa->get_name(child_sa));
+@@ -1714,7 +1748,7 @@ METHOD(listener_t, child_rekey, bool,
+ b = vici_builder_create();
+
+ b->begin_section(b, ike_sa->get_name(ike_sa));
+- list_ike(this, b, ike_sa, now);
++ list_ike(this, b, ike_sa, now, TRUE);
+ b->begin_section(b, "child-sas");
+
+ b->begin_section(b, old->get_name(old));
+--
+2.12.1
+
diff --git a/user/strongswan/1003-vici-add-support-for-individual-sa-state-changes.patch b/user/strongswan/1003-vici-add-support-for-individual-sa-state-changes.patch
new file mode 100644
index 000000000..06dc121e8
--- /dev/null
+++ b/user/strongswan/1003-vici-add-support-for-individual-sa-state-changes.patch
@@ -0,0 +1,159 @@
+From 0e4f1118e68736bb96ae23f4c6cb85f2ebbc998d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
+Date: Mon, 21 Sep 2015 13:42:11 +0300
+Subject: [PATCH] vici: add support for individual sa state changes
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Useful for monitoring and tracking full SA.
+
+Signed-off-by: Timo Teräs <timo.teras@iki.fi>
+---
+ src/libcharon/plugins/vici/vici_query.c | 105 ++++++++++++++++++++++++++++++++
+ 1 file changed, 105 insertions(+)
+
+diff --git a/src/libcharon/plugins/vici/vici_query.c b/src/libcharon/plugins/vici/vici_query.c
+index 309a11c03..83a5daaa7 100644
+--- a/src/libcharon/plugins/vici/vici_query.c
++++ b/src/libcharon/plugins/vici/vici_query.c
+@@ -1624,8 +1624,16 @@ static void manage_commands(private_vici_query_t *this, bool reg)
+ this->dispatcher->manage_event(this->dispatcher, "list-cert", reg);
+ this->dispatcher->manage_event(this->dispatcher, "ike-updown", reg);
+ this->dispatcher->manage_event(this->dispatcher, "ike-rekey", reg);
++ this->dispatcher->manage_event(this->dispatcher, "ike-state-established", reg);
++ this->dispatcher->manage_event(this->dispatcher, "ike-state-destroying", reg);
+ this->dispatcher->manage_event(this->dispatcher, "child-updown", reg);
+ this->dispatcher->manage_event(this->dispatcher, "child-rekey", reg);
++ this->dispatcher->manage_event(this->dispatcher, "child-state-installing", reg);
++ this->dispatcher->manage_event(this->dispatcher, "child-state-installed", reg);
++ this->dispatcher->manage_event(this->dispatcher, "child-state-updating", reg);
++ this->dispatcher->manage_event(this->dispatcher, "child-state-rekeying", reg);
++ this->dispatcher->manage_event(this->dispatcher, "child-state-rekeyed", reg);
++ this->dispatcher->manage_event(this->dispatcher, "child-state-destroying", reg);
+ manage_command(this, "list-sas", list_sas, reg);
+ manage_command(this, "list-policies", list_policies, reg);
+ manage_command(this, "list-conns", list_conns, reg);
+@@ -1696,6 +1704,45 @@ METHOD(listener_t, ike_rekey, bool,
+ return TRUE;
+ }
+
++METHOD(listener_t, ike_state_change, bool,
++ private_vici_query_t *this, ike_sa_t *ike_sa, ike_sa_state_t state)
++{
++ char *event;
++ vici_builder_t *b;
++ time_t now;
++
++ switch (state)
++ {
++ case IKE_ESTABLISHED:
++ event = "ike-state-established";
++ break;
++ case IKE_DESTROYING:
++ event = "ike-state-destroying";
++ break;
++ default:
++ return TRUE;
++ }
++
++ if (!this->dispatcher->has_event_listeners(this->dispatcher, event))
++ {
++ return TRUE;
++ }
++
++ now = time_monotonic(NULL);
++
++ b = vici_builder_create();
++ b->begin_section(b, ike_sa->get_name(ike_sa));
++ list_ike(this, b, ike_sa, now, state != IKE_DESTROYING);
++ b->begin_section(b, "child-sas");
++ b->end_section(b);
++ b->end_section(b);
++
++ this->dispatcher->raise_event(this->dispatcher,
++ event, 0, b->finalize(b));
++
++ return TRUE;
++}
++
+ METHOD(listener_t, child_updown, bool,
+ private_vici_query_t *this, ike_sa_t *ike_sa, child_sa_t *child_sa, bool up)
+ {
+@@ -1771,6 +1818,62 @@ METHOD(listener_t, child_rekey, bool,
+ return TRUE;
+ }
+
++METHOD(listener_t, child_state_change, bool,
++ private_vici_query_t *this, ike_sa_t *ike_sa, child_sa_t *child_sa, child_sa_state_t state)
++{
++ char *event;
++ vici_builder_t *b;
++ time_t now;
++
++ switch (state)
++ {
++ case CHILD_INSTALLING:
++ event = "child-state-installing";
++ break;
++ case CHILD_INSTALLED:
++ event = "child-state-installed";
++ break;
++ case CHILD_UPDATING:
++ event = "child-state-updating";
++ break;
++ case CHILD_REKEYING:
++ event = "child-state-rekeying";
++ break;
++ case CHILD_REKEYED:
++ event = "child-state-rekeyed";
++ break;
++ case CHILD_DESTROYING:
++ event = "child-state-destroying";
++ break;
++ default:
++ return TRUE;
++ }
++
++ if (!this->dispatcher->has_event_listeners(this->dispatcher, event))
++ {
++ return TRUE;
++ }
++
++ now = time_monotonic(NULL);
++
++ b = vici_builder_create();
++ b->begin_section(b, ike_sa->get_name(ike_sa));
++ list_ike(this, b, ike_sa, now, state != CHILD_DESTROYING);
++ b->begin_section(b, "child-sas");
++
++ b->begin_section(b, child_sa->get_name(child_sa));
++ list_child(this, b, child_sa, now);
++ b->end_section(b);
++
++ b->end_section(b);
++ b->end_section(b);
++
++ this->dispatcher->raise_event(this->dispatcher,
++ event, 0, b->finalize(b));
++
++ return TRUE;
++}
++
+ METHOD(vici_query_t, destroy, void,
+ private_vici_query_t *this)
+ {
+@@ -1790,8 +1893,10 @@ vici_query_t *vici_query_create(vici_dispatcher_t *dispatcher)
+ .listener = {
+ .ike_updown = _ike_updown,
+ .ike_rekey = _ike_rekey,
++ .ike_state_change = _ike_state_change,
+ .child_updown = _child_updown,
+ .child_rekey = _child_rekey,
++ .child_state_change = _child_state_change,
+ },
+ .destroy = _destroy,
+ },
+--
+2.12.1
+
diff --git a/user/strongswan/APKBUILD b/user/strongswan/APKBUILD
new file mode 100644
index 000000000..29390b652
--- /dev/null
+++ b/user/strongswan/APKBUILD
@@ -0,0 +1,108 @@
+# Contributor: Jesse Young <jlyo@jlyo.org>
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Lee Starnes <lee@canned-death.us>
+pkgname=strongswan
+pkgver=5.7.1
+_pkgver=${pkgver//_rc/rc}
+pkgrel=0
+pkgdesc="IPsec-based VPN solution focused on security and ease of use, supporting IKEv1/IKEv2 and MOBIKE"
+url="https://www.strongswan.org/"
+arch="all"
+pkgusers="ipsec"
+pkggroups="ipsec"
+license="GPL-2.0 AND RSA-MD5 AND RSA-PKCS11 AND DES"
+depends="iproute2"
+depends_dev=""
+makedepends="$depends_dev linux-headers python3 sqlite-dev openssl-dev curl-dev
+ gmp-dev libcap-dev"
+install="$pkgname.pre-install"
+subpackages="$pkgname-doc $pkgname-dbg $pkgname-openrc"
+source="https://download.strongswan.org/$pkgname-$_pkgver.tar.bz2
+ 0205-ike-Adhere-to-IKE_SA-limit-when-checking-out-by-conf.patch
+ 1001-charon-add-optional-source-and-remote-overrides-for-.patch
+ 1002-vici-send-certificates-for-ike-sa-events.patch
+ 1003-vici-add-support-for-individual-sa-state-changes.patch
+
+ strongswan.initd
+ charon.initd
+ "
+builddir="$srcdir/$pkgname-$_pkgver"
+
+# secfixes:
+# 5.7.1-r0:
+# - CVE-2018-17540
+
+build() {
+ cd "$builddir"
+
+ # notes about configuration:
+ # - try to keep options in ./configure --help order
+ # - apk depends on openssl, so we use that
+ # - openssl provides ciphers, randomness, etc
+ # -> disable all redundant in-tree copies
+
+ ./configure --prefix=/usr \
+ --sysconfdir=/etc \
+ --libexecdir=/usr/lib \
+ --with-ipsecdir=/usr/lib/strongswan \
+ --with-capabilities=libcap \
+ --with-user=ipsec \
+ --with-group=ipsec \
+ --enable-curl \
+ --disable-ldap \
+ --disable-aes \
+ --disable-des \
+ --disable-rc2 \
+ --disable-md5 \
+ --disable-sha1 \
+ --disable-sha2 \
+ --enable-gmp \
+ --disable-hmac \
+ --disable-mysql \
+ --enable-sqlite \
+ --enable-eap-sim \
+ --enable-eap-sim-file \
+ --enable-eap-aka \
+ --enable-eap-aka-3gpp2 \
+ --enable-eap-simaka-pseudonym \
+ --enable-eap-simaka-reauth \
+ --enable-eap-identity \
+ --enable-eap-md5 \
+ --enable-eap-tls \
+ --disable-eap-gtc \
+ --enable-eap-mschapv2 \
+ --enable-eap-radius \
+ --enable-xauth-eap \
+ --enable-farp \
+ --enable-vici \
+ --enable-attr-sql \
+ --enable-dhcp \
+ --enable-openssl \
+ --enable-unity \
+ --enable-ha \
+ --enable-cmd \
+ --enable-swanctl \
+ --enable-shared \
+ --disable-static
+ make
+}
+
+check() {
+ cd "$builddir"
+ env TESTS_SUITES_EXCLUDE=printf make check
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ install -m755 -D "$srcdir/$pkgname.initd" "$pkgdir/etc/init.d/$pkgname"
+ install -m755 -D "$srcdir/charon.initd" "$pkgdir/etc/init.d/charon"
+}
+
+sha512sums="43102814434bee7c27a5956be59099cc4ffb9bb5b0d6382ce4c6a80d1d82ed6639f698f5f5544b9ca563554a344638c953525b0e2d39bc6b71b19055c80e07fc strongswan-5.7.1.tar.bz2
+193d845e2751c23d98cdf84134c7803f2e412197669c6d6c1c9974041608d154b85594ed3d9ffb923ca22a4d5926c7f2373787ddc7da47b52019e284a1d13211 0205-ike-Adhere-to-IKE_SA-limit-when-checking-out-by-conf.patch
+21db8f153f535ef13cc7c9c011f9b90b8c794e0072bd93fda6a0a56dc00d32d04e186b1a72a87a85613b7e511eed5cb96623abf0721c67dd5c96446db969a185 1001-charon-add-optional-source-and-remote-overrides-for-.patch
+f7d98fb99b4855e8bfbb7369292c170536b1987e717feeda71f64ab71b35538e7d462609a773c6a6ed08c8e6ee7a186df12e1ea7d64b9dac0b17d4c7af17dab3 1002-vici-send-certificates-for-ike-sa-events.patch
+a4235cd07e17ad3441dc391ded11ee9f4debdffa1e8218809731e73a545ca6fcdc0bb87239d41b1102b0b6719a4d31d43758972d2193ebe298b275285de2ce54 1003-vici-add-support-for-individual-sa-state-changes.patch
+8b61e3ffbb39b837733e602ec329e626dc519bf7308d3d4192b497d18f38176789d23ef5afec51f8463ee1ddaf4d74546b965c03184132e217cbc27017e886c9 strongswan.initd
+1c44c801f66305c0331f76e580c0d60f1b7d5cd3cc371be55826b06c3899f542664628a912a7fb48626e34d864f72ca5dcd34b2f0d507c4f19c510d0047054c1 charon.initd"
diff --git a/user/strongswan/charon.initd b/user/strongswan/charon.initd
new file mode 100644
index 000000000..6f79679c0
--- /dev/null
+++ b/user/strongswan/charon.initd
@@ -0,0 +1,30 @@
+#!/sbin/openrc-run
+
+description="strongSwan charon IKE daemon"
+command="/usr/lib/strongswan/charon"
+pidfile="/var/run/charon.pid"
+start_stop_daemon_args="--background"
+extra_started_commands="reload fullstatus"
+
+depend() {
+ need net
+ after firewall
+ provide ipsec
+}
+
+start_post() {
+ ebegin "Loading ${name:-$RC_SVCNAME} configuration"
+ sleep 0.2
+ swanctl --load-all &>/dev/null
+ eend $?
+}
+
+reload() {
+ swanctl --reload-settings
+ swanctl --load-all
+}
+
+fullstatus() {
+ swanctl --list-conns
+ swanctl --list-sas
+}
diff --git a/user/strongswan/strongswan.initd b/user/strongswan/strongswan.initd
new file mode 100644
index 000000000..78fecb0ee
--- /dev/null
+++ b/user/strongswan/strongswan.initd
@@ -0,0 +1,35 @@
+#!/sbin/openrc-run
+
+extra_started_commands="fullstatus"
+
+depend() {
+ need net
+ after firewall
+ provide ipsec
+}
+
+start() {
+ ebegin "Starting StrongSwan"
+ ipsec start
+ eend $?
+}
+
+stop () {
+ ebegin "Stopping StrongSwan"
+ ipsec stop
+ eend $?
+}
+
+restart() {
+ ebegin "Restarting StrongSwan"
+ svc_stop
+ sleep 2
+ svc_start
+ eend $?
+}
+
+fullstatus() {
+ ebegin "StrongSwan Status (verbose):"
+ ipsec statusall
+ eend $?
+}
diff --git a/user/strongswan/strongswan.pre-install b/user/strongswan/strongswan.pre-install
new file mode 100644
index 000000000..da43ede66
--- /dev/null
+++ b/user/strongswan/strongswan.pre-install
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+addgroup -S ipsec 2>/dev/null
+adduser -S -D -H -h /var/empty -s /sbin/nologin -G ipsec -g ipsec ipsec 2>/dev/null
+
+exit 0
diff --git a/user/tcpdump/APKBUILD b/user/tcpdump/APKBUILD
new file mode 100644
index 000000000..c5f4203e7
--- /dev/null
+++ b/user/tcpdump/APKBUILD
@@ -0,0 +1,38 @@
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=tcpdump
+pkgver=4.9.2
+pkgrel=0
+pkgdesc="A tool for network monitoring and data acquisition"
+url="http://www.tcpdump.org"
+arch="all"
+license="BSD-3-Clause"
+depends=""
+makedepends="libpcap-dev openssl-dev perl"
+subpackages="$pkgname-doc"
+source="http://www.tcpdump.org/release/$pkgname-$pkgver.tar.gz"
+
+build () {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var
+ make
+}
+
+check() {
+ cd "$builddir"
+ make check
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ rm -f "$pkgdir"/usr/sbin/tcpdump.4*
+}
+
+sha512sums="e1bc19a5867d6e3628f3941bdf3ec831bf13784f1233ca1bccc46aac1702f47ee9357d7ff0ca62cddf211b3c8884488c21144cabddd92c861e32398cd8f7c44b tcpdump-4.9.2.tar.gz"
diff --git a/user/tcsh/001-sysmalloc.patch b/user/tcsh/001-sysmalloc.patch
new file mode 100644
index 000000000..b22c01898
--- /dev/null
+++ b/user/tcsh/001-sysmalloc.patch
@@ -0,0 +1,15 @@
+--- a/config_f.h
++++ b/config_f.h
+@@ -139,11 +139,8 @@
+ * This can be much slower and no memory statistics will be
+ * provided.
+ */
+-#if defined(__MACHTEN__) || defined(PURIFY) || defined(MALLOC_TRACE) || defined(_OSD_POSIX) || defined(__MVS__) || defined (__CYGWIN__) || defined(__GLIBC__) || defined(__OpenBSD__) || defined(__APPLE__) || defined (__ANDROID__)
++
+ # define SYSMALLOC
+-#else
+-# undef SYSMALLOC
+-#endif
+
+ /*
+ * USE_ACCESS Use access(2) rather than stat(2) when POSIX is defined.
diff --git a/user/tcsh/002-test_123-posix_fix.patch b/user/tcsh/002-test_123-posix_fix.patch
new file mode 100644
index 000000000..6ed59de38
--- /dev/null
+++ b/user/tcsh/002-test_123-posix_fix.patch
@@ -0,0 +1,34 @@
+Author: Dan Theisen <djt@hxx.in>
+Date: Wed Jun 06 03:30:25 2018 -0800
+
+The following lines have a subtle change around [:blank:], changing it
+to [[:blank:]] instead. This is required because POSIX treats characters
+inside of brackets as a group of characters to match against. In this case,
+[[:space:]] means [] group of characters, and [:space:] is the group, as per:
+IEEE Std 1003.1-2017 (Revision of IEEE Std 1003.1-2008), Chapter 9
+http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html
+
+--- tcsh-6.20.00/tests/lexical.at.old 2018-06-06 02:20:16.787145186 -0700
++++ tcsh-6.20.00/tests/lexical.at 2018-06-06 02:21:09.537890842 -0700
+@@ -567,10 +567,10 @@
+ ]])
+ AT_DATA([uniformity_test.csh],
+ [[
+-set SERVICE_NAME_LOG = `cat batchsystem.properties | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[:blank:]*\([^$]*\)$/\1/p' | perl -pe 's/\s//g' | perl -pe 's/\)/\\\)/g' | perl -pe 's/\(/\\\(/g'`
++set SERVICE_NAME_LOG = `cat batchsystem.properties | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[[:blank:]]*\([^$]*\)$/\1/p' | perl -pe 's/\s//g' | perl -pe 's/\)/\\\)/g' | perl -pe 's/\(/\\\(/g'`
+ echo -n "$SERVICE_NAME_LOG" > ./output1
+
+-cat batchsystem.properties | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[:blank:]*\([^$]*\)$/\1/p' | perl -pe 's/\s//g' | perl -pe 's/\)/\\\)/g' | perl -pe 's/\(/\\\(/g' > ./output2
++cat batchsystem.properties | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[[:blank:]]*\([^$]*\)$/\1/p' | perl -pe 's/\s//g' | perl -pe 's/\)/\\\)/g' | perl -pe 's/\(/\\\(/g' > ./output2
+
+ diff -uprN ./output1 ./output2 >& /dev/null
+
+@@ -587,7 +587,7 @@
+ echo "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP\)(HOST=db\)(PORT=1521\)\)(CONNECT_DATA=(SERVER=DEDICATED\)(SERVICE_NAME=bns03\)\)\)" > ./expected_result
+
+ set string = "jdbc_url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=bns03)))"
+-set SERVICE_NAME_LOG = `echo "$string" | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[:blank:]*\([^$]*\)$/\1/p' | perl -pe 's/\)/\\\)/g'`
++set SERVICE_NAME_LOG = `echo "$string" | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[[:blank:]]*\([^$]*\)$/\1/p' | perl -pe 's/\)/\\\)/g'`
+
+ echo "$SERVICE_NAME_LOG" > ./actual_result
+
diff --git a/user/tcsh/APKBUILD b/user/tcsh/APKBUILD
new file mode 100644
index 000000000..2fdfac0b2
--- /dev/null
+++ b/user/tcsh/APKBUILD
@@ -0,0 +1,47 @@
+# Contributor: Dan Theisen <djt@hxx.in>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=tcsh
+pkgver=6.20.00
+pkgrel=2
+pkgdesc="extended C-shell"
+url="http://www.tcsh.org"
+arch="all"
+license="BSD-3-Clause"
+depends=""
+checkdepends="diffutils autoconf"
+makedepends="ncurses-dev ncurses-terminfo utmps-dev gettext-tiny-dev"
+install="$pkgname.post-install $pkgname.post-upgrade $pkgname.pre-deinstall"
+subpackages="$pkgname-doc"
+options="!checkroot"
+source="$pkgname-$pkgver.tar.gz::http://http.debian.net/debian/pool/main/t/tcsh/${pkgname}_${pkgver}.orig.tar.gz
+ 001-sysmalloc.patch
+ 002-test_123-posix_fix.patch"
+
+build() {
+ cd "$builddir"
+ LIBS="-lutmps -lskarnet -ltinfo" ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --bindir=/bin \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --enable-nls \
+ --enable-nls-catalogs \
+ --disable-rpath
+ make
+}
+
+check() {
+ cd "$builddir"
+ make check
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+sha512sums="c5635393c22341e62fb9a0b953ddf8871a876ab09deb08c98237f93afa9257b4a3381d1db65eefe769e22ef845db29ab7bc78773f1f609d73c8205689a6683e9 tcsh-6.20.00.tar.gz
+40149d8eb2fc0fe5184f3c24c7a1b728e881cc0048ccd37a986c3b2d2094499ec1c37ae2bae4c209fb8a847aa943e83e81f79e3d2f55c59990bc00d9d07f5a94 001-sysmalloc.patch
+b4c1afe04554d117b1402608bcdb243148c0c7b2442bdc10dde3ed6601db5e7c5a2341373f9bdc31fda8860e47a6e152cdcc4e3a8b273742037eebc624df282c 002-test_123-posix_fix.patch"
diff --git a/user/tcsh/tcsh.post-install b/user/tcsh/tcsh.post-install
new file mode 100644
index 000000000..7342c5e72
--- /dev/null
+++ b/user/tcsh/tcsh.post-install
@@ -0,0 +1,3 @@
+#!/bin/sh
+add-shell '/bin/tcsh'
+exit 0
diff --git a/user/tcsh/tcsh.post-upgrade b/user/tcsh/tcsh.post-upgrade
new file mode 120000
index 000000000..180542a18
--- /dev/null
+++ b/user/tcsh/tcsh.post-upgrade
@@ -0,0 +1 @@
+tcsh.post-install \ No newline at end of file
diff --git a/user/tcsh/tcsh.pre-deinstall b/user/tcsh/tcsh.pre-deinstall
new file mode 100644
index 000000000..9e2e34c1c
--- /dev/null
+++ b/user/tcsh/tcsh.pre-deinstall
@@ -0,0 +1,3 @@
+#!/bin/sh
+remove-shell '/bin/tcsh'
+exit 0
diff --git a/user/the_silver_searcher/APKBUILD b/user/the_silver_searcher/APKBUILD
new file mode 100644
index 000000000..c9f324a69
--- /dev/null
+++ b/user/the_silver_searcher/APKBUILD
@@ -0,0 +1,40 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: A. Wilcox <awilfox@adelielinux.org>
+pkgname=the_silver_searcher
+pkgver=2.2.0
+pkgrel=0
+pkgdesc="Tool for very fast searching of text in documents and code"
+url="https://geoff.greer.fm/ag/"
+arch="all"
+options="!check" # Tests are not shipped in the release tarball...
+license="Apache-2.0"
+depends=""
+makedepends="pcre-dev xz-dev zlib-dev"
+checkdepends="cram"
+subpackages="$pkgname-doc"
+source="https://geoff.greer.fm/ag/releases/the_silver_searcher-$pkgver.tar.gz"
+builddir="$srcdir/the_silver_searcher-$pkgver"
+
+build() {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var
+ make
+}
+
+check() {
+ cd "$builddir"
+ make test
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+sha512sums="89d4e4f7f34c0d57aa880e7c3466f0373b961744a89ad30541e89e2d614322ab46c8044ec458406a117f74b0fea14cd3063fa4e0624a96526aa23eaccd6f1141 the_silver_searcher-2.2.0.tar.gz"
diff --git a/user/thunar/APKBUILD b/user/thunar/APKBUILD
index 5f1360cf9..b11ee1106 100644
--- a/user/thunar/APKBUILD
+++ b/user/thunar/APKBUILD
@@ -1,7 +1,7 @@
# Contributor: Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com>
# Maintainer: Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com>
pkgname=thunar
-pkgver=1.8.1
+pkgver=1.8.2
pkgrel=0
pkgdesc="File manager for the XFCE desktop environment"
url="https://xfce.org"
@@ -13,7 +13,6 @@ makedepends="intltool gtk+3.0-dev exo-dev libxfce4ui-dev vala-dev
subpackages="$pkgname-dev $pkgname-doc $pkgname-lang"
langdir="/usr/lib/locale"
source="http://archive.xfce.org/src/xfce/thunar/1.8/Thunar-$pkgver.tar.bz2"
-sha512sums="89aa29af5e272d58c7de02ba1c96d7f0c32eed49cda9621ef863dd679712cc653f58e729e49b9dc3d1626c9b8ebe2b18a2307e00c7ea1d1d2b42fa71272aced7 Thunar-1.8.1.tar.bz2"
builddir="$srcdir/Thunar-$pkgver"
build() {
@@ -38,3 +37,4 @@ package() {
make DESTDIR="$pkgdir" install
}
+sha512sums="c770fae8b6e5e0e42148ed2b9777afba5159783e5fc716eba1e0499b5390684f386eb575f1a608814bc118bbf05ede34c6737e28c06470c4d01717b579308ec9 Thunar-1.8.2.tar.bz2"
diff --git a/user/tlp/APKBUILD b/user/tlp/APKBUILD
new file mode 100644
index 000000000..dd34fe5cc
--- /dev/null
+++ b/user/tlp/APKBUILD
@@ -0,0 +1,52 @@
+# Contributor: Ivan Tham <pickfire@riseup.net>
+# Maintainer: Max Rees <maxcrees@me.com>
+pkgname=tlp
+_pkgname=TLP
+pkgver=1.1
+pkgrel=0
+pkgdesc="Linux Advanced Power Management"
+url="http://linrunner.de/en/tlp/tlp.html"
+arch="noarch"
+options="!check" # No test suite.
+license="GPL-2.0+ AND GPL-3.0+"
+depends="/bin/sh perl"
+makedepends=""
+subpackages="$pkgname-doc $pkgname-rdw $pkgname-bash-completion:bashcomp
+ $pkgname-openrc"
+source="$pkgname-$pkgver.tar.gz::https://github.com/linrunner/$_pkgname/archive/$pkgver.tar.gz
+ $pkgname.initd"
+builddir="$srcdir/$_pkgname-$pkgver"
+
+build() {
+ cd "$builddir"
+ make
+}
+
+package() {
+ cd "$builddir"
+
+ make DESTDIR="$pkgdir" install-tlp install-man
+ install -Dm755 "$srcdir"/tlp.initd "$pkgdir"/etc/init.d/"$pkgname"
+ # We don't ship systemd
+ find "$pkgdir"/usr/share/man/man8 -name '*.service*' -delete
+}
+
+rdw() {
+ pkgdesc="Linux Advanced Power Management - Radio Device Wizard"
+ depends="tlp"
+
+ cd "$builddir"
+ make DESTDIR="$subpkgdir" install-rdw
+}
+
+bashcomp() {
+ pkgdesc="Bash completions for $pkgname"
+ depends=""
+ install_if="$pkgname=$pkgver-r$pkgrel bash-completion"
+
+ mkdir -p "$subpkgdir"/usr/share
+ mv "$pkgdir"/usr/share/bash-completion "$subpkgdir"/usr/share
+}
+
+sha512sums="3400f2b6c249fd2e1bbbc61f23e3450ff90fabb8dd74f2903ce1f0d07e7ce3d1e61b07295736138d4697235dbee9157d3f32a8d296a649c93f73e03e3555af1e tlp-1.1.tar.gz
+e6de216b2540413812711b3304cdc29c8729d527080cfd747ba382db50166dd21c6c27ff467f9f2a967e92007c7a311b00e88262952c34a22f417578c66cf4e7 tlp.initd"
diff --git a/user/tlp/tlp.initd b/user/tlp/tlp.initd
new file mode 100755
index 000000000..05b4c3b97
--- /dev/null
+++ b/user/tlp/tlp.initd
@@ -0,0 +1,15 @@
+#!/sbin/openrc-run
+
+description="Initialize tlp"
+extra_started_commands="force_reload"
+
+depend() {
+ need localmount
+}
+
+status() { tlp-stat -s; }
+# TODO: keep the following in one line
+start() { tlp init start; }
+stop() { tlp init stop; }
+restart() { tlp init restart; }
+force_reload() { tlp init force-reload; }
diff --git a/user/unrar/APKBUILD b/user/unrar/APKBUILD
index 5364d74f6..f50447699 100644
--- a/user/unrar/APKBUILD
+++ b/user/unrar/APKBUILD
@@ -2,7 +2,7 @@
# Contributor: Carlo Landmeter <clandmeter@gmail.com>
# Maintainer: Dan Theisen <djt@hxx.in>
pkgname=unrar
-pkgver=5.6.6
+pkgver=5.6.8
pkgrel=0
pkgdesc="The RAR uncompression program"
url="https://www.rarlab.com"
@@ -29,5 +29,5 @@ package() {
"$pkgdir/usr/share/licenses/$pkgname/license.txt"
}
-sha512sums="1e1e9dc2ed104ab7819d11ad2249780a4320cb30f3c427ea1669c3769fa3a8369841711a2d46d918049659bc67b2cd7dc7560a12127d810a57614293c24fe25a unrarsrc-5.6.6.tar.gz
+sha512sums="5410308d7f462824bc10087cdc4515c58aaad776cc09eb6491864a338ae00ff35e3b54d1e7250c0a9576554ea382383155be718a0b95d7af00f27d5df04f4f56 unrarsrc-5.6.8.tar.gz
7da30d8454a67999e7052ed2c0ee8d29627b1d47bfdf36e8cf1e24f3c36ee58b17f7e7a6505a4b38e0ca3162067368a1bf554829fd824f7c17a3a2a5b35ca29c makefile.patch"
diff --git a/user/vala/APKBUILD b/user/vala/APKBUILD
index 9736033ee..8ffc5a7df 100644
--- a/user/vala/APKBUILD
+++ b/user/vala/APKBUILD
@@ -1,7 +1,7 @@
# Contributor: Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com>
# Maintainer: Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com>
pkgname=vala
-pkgver=0.42.1
+pkgver=0.42.2
pkgrel=0
pkgdesc="Compiler for the Vala programming language"
url="https://wiki.gnome.org/Projects/Vala"
@@ -33,4 +33,4 @@ package() {
make DESTDIR="$pkgdir" install
}
-sha512sums="36d5a4057fdad7f02616d39d5a04e8a4af7ddc79ce1c5e68247c8a0ccda09fc2a084f35d378acc4bd61d3a872386c992e4a337ef50d3604b37d1a5d064aea92a vala-0.42.1.tar.xz"
+sha512sums="36dfe2b3508e77fa8bac4b6c43e83841310e9e0d3986e4e0696255adc3c500f56d5f997c19999425e47a00fd760188c9c1f0565c0122a1c74632ad47ac1d08ff vala-0.42.2.tar.xz"
diff --git a/user/valgrind/0001-Ensure-ELFv2-is-supported-on-PPC64.patch b/user/valgrind/0001-Ensure-ELFv2-is-supported-on-PPC64.patch
new file mode 100644
index 000000000..5272406ec
--- /dev/null
+++ b/user/valgrind/0001-Ensure-ELFv2-is-supported-on-PPC64.patch
@@ -0,0 +1,817 @@
+From a5224eb31a4c8a680587e74cc402e5ed92ead216 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Thu, 27 Sep 2018 15:42:40 -0500
+Subject: [PATCH] Ensure ELFv2 is supported on PPC64
+
+---
+ coregrind/m_dispatch/dispatch-ppc64be-linux.S | 107 ++++++++++++++++--
+ coregrind/m_initimg/initimg-linux.c | 5 +-
+ coregrind/m_libcsetjmp.c | 7 +-
+ coregrind/m_machine.c | 3 +-
+ coregrind/m_main.c | 19 ++--
+ coregrind/m_sigframe/sigframe-ppc64-linux.c | 3 +-
+ coregrind/m_signals.c | 11 +-
+ coregrind/m_stacktrace.c | 12 +-
+ coregrind/m_syscall.c | 9 +-
+ coregrind/m_syswrap/syscall-ppc64be-linux.S | 19 +++-
+ coregrind/m_syswrap/syswrap-ppc64-linux.c | 9 +-
+ coregrind/m_trampoline.S | 4 +-
+ coregrind/m_translate.c | 23 ++--
+ coregrind/m_ume/elf.c | 8 +-
+ coregrind/pub_core_machine.h | 12 +-
+ coregrind/vg_preloaded.c | 3 +-
+ include/valgrind.h | 16 ++-
+ memcheck/mc_leakcheck.c | 2 +-
+ memcheck/mc_machine.c | 3 +-
+ 19 files changed, 206 insertions(+), 69 deletions(-)
+
+diff --git a/coregrind/m_dispatch/dispatch-ppc64be-linux.S b/coregrind/m_dispatch/dispatch-ppc64be-linux.S
+index 91bd3b236..eb8026c7c 100644
+--- a/coregrind/m_dispatch/dispatch-ppc64be-linux.S
++++ b/coregrind/m_dispatch/dispatch-ppc64be-linux.S
+@@ -75,14 +75,26 @@ void VG_(disp_run_translations)( UWord* two_words,
+ .section ".text"
+ .align 2
+ .globl VG_(disp_run_translations)
++#if _CALL_ELF == 2
++.type VG_(disp_run_translations),@function
++VG_(disp_run_translations):
++.type .VG_(disp_run_translations),@function
++#else
+ .section ".opd","aw"
+ .align 3
+ VG_(disp_run_translations):
+ .quad .VG_(disp_run_translations),.TOC.@tocbase,0
+ .previous
+ .type .VG_(disp_run_translations),@function
++#endif
+ .globl .VG_(disp_run_translations)
+ .VG_(disp_run_translations):
++#if _CALL_ELF == 2
++0: addis 2, 12,.TOC.-0b@ha
++ addi 2,2,.TOC.-0b@l
++ .localentry VG_(disp_run_translations), .-VG_(disp_run_translations)
++#endif
++
+ /* r3 holds two_words */
+ /* r4 holds guest_state */
+ /* r5 holds host_addr */
+@@ -231,6 +243,11 @@ VG_(disp_run_translations):
+
+ /* Set up the guest state ptr */
+ mr 31,4 /* r31 (generated code gsp) = r4 */
++#if _CALL_ELF == 2
++/* for the LE ABI need to setup r2 and r12 */
++0: addis 2, 12,.TOC.-0b@ha
++ addi 2,2,.TOC.-0b@l
++#endif
+
+ /* and jump into the code cache. Chained translations in
+ the code cache run, until for whatever reason, they can't
+@@ -385,7 +402,9 @@ VG_(disp_run_translations):
+ mtlr 0
+ addi 1,1,624 /* stack_size */
+ blr
+-
++#if _CALL_ELF == 2
++ .size VG_(disp_run_translations),.-VG_(disp_run_translations)
++#endif
+
+ /*----------------------------------------------------*/
+ /*--- Continuation points ---*/
+@@ -395,15 +414,25 @@ VG_(disp_run_translations):
+ .section ".text"
+ .align 2
+ .globl VG_(disp_cp_chain_me_to_slowEP)
+- .section ".opd","aw"
++#if _CALL_ELF == 2
++ .type VG_(disp_cp_chain_me_to_slowEP),@function
++ VG_(disp_cp_chain_me_to_slowEP):
++#else
++ .section ".opd","aw"
+ .align 3
+ VG_(disp_cp_chain_me_to_slowEP):
+ .quad .VG_(disp_cp_chain_me_to_slowEP),.TOC.@tocbase,0
+ .previous
++#endif
+ .type .VG_(disp_cp_chain_me_to_slowEP),@function
+ .globl .VG_(disp_cp_chain_me_to_slowEP)
+ .VG_(disp_cp_chain_me_to_slowEP):
+- /* We got called. The return address indicates
++#if _CALL_ELF == 2
++0: addis 2, 12,.TOC.-0b@ha
++ addi 2,2,.TOC.-0b@l
++ .localentry VG_(disp_cp_chain_me_to_slowEP), .-VG_(disp_cp_chain_me_to_slowEP)
++#endif
++ /* We got called. The return address indicates
+ where the patching needs to happen. Collect
+ the return address and, exit back to C land,
+ handing the caller the pair (Chain_me_S, RA) */
+@@ -415,20 +444,33 @@ VG_(disp_cp_chain_me_to_slowEP):
+ */
+ subi 7,7,20+4+4
+ b .postamble
++#if _CALL_ELF == 2
++ .size VG_(disp_cp_chain_me_to_slowEP),.-VG_(disp_cp_chain_me_to_slowEP)
++#endif
+
+ /* ------ Chain me to fast entry point ------ */
+ .section ".text"
+ .align 2
+ .globl VG_(disp_cp_chain_me_to_fastEP)
+- .section ".opd","aw"
++#if _CALL_ELF == 2
++ .type VG_(disp_cp_chain_me_to_fastEP),@function
++VG_(disp_cp_chain_me_to_fastEP):
++#else
++ .section ".opd","aw"
+ .align 3
+ VG_(disp_cp_chain_me_to_fastEP):
+ .quad .VG_(disp_cp_chain_me_to_fastEP),.TOC.@tocbase,0
+ .previous
++#endif
+ .type .VG_(disp_cp_chain_me_to_fastEP),@function
+ .globl .VG_(disp_cp_chain_me_to_fastEP)
+ .VG_(disp_cp_chain_me_to_fastEP):
+- /* We got called. The return address indicates
++#if _CALL_ELF == 2
++0: addis 2, 12,.TOC.-0b@ha
++ addi 2,2,.TOC.-0b@l
++ .localentry VG_(disp_cp_chain_me_to_fastEP), .-VG_(disp_cp_chain_me_to_fastEP)
++#endif
++ /* We got called. The return address indicates
+ where the patching needs to happen. Collect
+ the return address and, exit back to C land,
+ handing the caller the pair (Chain_me_S, RA) */
+@@ -440,20 +482,33 @@ VG_(disp_cp_chain_me_to_fastEP):
+ */
+ subi 7,7,20+4+4
+ b .postamble
++#if _CALL_ELF == 2
++ .size VG_(disp_cp_chain_me_to_fastEP),.-VG_(disp_cp_chain_me_to_fastEP)
++#endif
+
+ /* ------ Indirect but boring jump ------ */
+ .section ".text"
+ .align 2
+ .globl VG_(disp_cp_xindir)
+- .section ".opd","aw"
++#if _CALL_ELF == 2
++ .type VG_(disp_cp_xindir),@function
++VG_(disp_cp_xindir):
++#else
++ .section ".opd","aw"
+ .align 3
+ VG_(disp_cp_xindir):
+ .quad .VG_(disp_cp_xindir),.TOC.@tocbase,0
+ .previous
++#endif
+ .type .VG_(disp_cp_xindir),@function
+ .globl .VG_(disp_cp_xindir)
+ .VG_(disp_cp_xindir):
+- /* Where are we going? */
++#if _CALL_ELF == 2
++0: addis 2, 12,.TOC.-0b@ha
++ addi 2,2,.TOC.-0b@l
++ .localentry VG_(disp_cp_xindir), .-VG_(disp_cp_xindir)
++#endif
++ /* Where are we going? */
+ ld 3,OFFSET_ppc64_CIA(31)
+
+ /* stats only */
+@@ -479,6 +534,9 @@ VG_(disp_cp_xindir):
+ /* Found a match. Jump to .host. */
+ mtctr 7
+ bctr
++#if _CALL_ELF == 2
++ .size VG_(disp_cp_xindir),.-VG_(disp_cp_xindir)
++#endif
+
+ .fast_lookup_failed:
+ /* stats only */
+@@ -496,39 +554,64 @@ VG_(disp_cp_xindir):
+ .section ".text"
+ .align 2
+ .globl VG_(disp_cp_xassisted)
+- .section ".opd","aw"
++#if _CALL_ELF == 2
++ .type VG_(disp_cp_xassisted),@function
++VG_(disp_cp_xassisted):
++#else
++ .section ".opd","aw"
+ .align 3
+ VG_(disp_cp_xassisted):
+ .quad .VG_(disp_cp_xassisted),.TOC.@tocbase,0
+ .previous
+- .type .VG_(disp_cp_xassisted),@function
++#endif
++#if _CALL_ELF == 2
++0: addis 2, 12,.TOC.-0b@ha
++ addi 2,2,.TOC.-0b@l
++ .localentry VG_(disp_cp_xassisted), .-VG_(disp_cp_xassisted)
++#endif
++ .type .VG_(disp_cp_xassisted),@function
+ .globl .VG_(disp_cp_xassisted)
+ .VG_(disp_cp_xassisted):
+ /* r31 contains the TRC */
+ mr 6,31
+ li 7,0
+ b .postamble
++#if _CALL_ELF == 2
++ .size VG_(disp_cp_xassisted),.-VG_(disp_cp_xassisted)
++#endif
+
+ /* ------ Event check failed ------ */
+ .section ".text"
+ .align 2
+ .globl VG_(disp_cp_evcheck_fail)
+- .section ".opd","aw"
++#if _CALL_ELF == 2
++ .type VG_(disp_cp_evcheck_fail),@function
++VG_(disp_cp_evcheck_fail):
++#else
++ .section ".opd","aw"
+ .align 3
+ VG_(disp_cp_evcheck_fail):
+ .quad .VG_(disp_cp_evcheck_fail),.TOC.@tocbase,0
+ .previous
++#endif
++#if _CALL_ELF == 2
++0: addis 2, 12,.TOC.-0b@ha
++ addi 2,2,.TOC.-0b@l
++ .localentry VG_(disp_cp_evcheck_fail), .-VG_(disp_cp_evcheck_fail)
++#endif
+ .type .VG_(disp_cp_evcheck_fail),@function
+ .globl .VG_(disp_cp_evcheck_fail)
+ .VG_(disp_cp_evcheck_fail):
+ li 6,VG_TRC_INNER_COUNTERZERO
+ li 7,0
+ b .postamble
++#if _CALL_ELF == 2
++ .size VG_(disp_cp_evcheck_fail),.-VG_(disp_cp_evcheck_fail)
++#endif
+
+-
+ .size .VG_(disp_run_translations), .-.VG_(disp_run_translations)
+
+-#endif // defined(VGP_ppc64be_linux)
++#endif // defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
+
+ /* Let the linker know we don't need an executable stack */
+ MARK_STACK_NO_EXEC
+diff --git a/coregrind/m_initimg/initimg-linux.c b/coregrind/m_initimg/initimg-linux.c
+index 61cc458bc..19df79705 100644
+--- a/coregrind/m_initimg/initimg-linux.c
++++ b/coregrind/m_initimg/initimg-linux.c
+@@ -1117,7 +1117,8 @@ void VG_(ii_finalise_image)( IIFinaliseImageInfo iifii )
+ arch->vex.guest_GPR1 = iifii.initial_client_SP;
+ arch->vex.guest_GPR2 = iifii.initial_client_TOC;
+ arch->vex.guest_CIA = iifii.initial_client_IP;
+-#if defined(VGP_ppc64le_linux)
++#if (defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)) \
++ && !defined(VG_PLAT_USES_PPCTOC)
+ arch->vex.guest_GPR12 = iifii.initial_client_IP;
+ #endif
+
+diff --git a/coregrind/m_libcsetjmp.c b/coregrind/m_libcsetjmp.c
+index c73180640..ed96f4739 100644
+--- a/coregrind/m_libcsetjmp.c
++++ b/coregrind/m_libcsetjmp.c
+@@ -35,6 +35,7 @@
+
+ #include "pub_core_basics.h"
+ #include "pub_core_libcsetjmp.h" /* self */
++#include "pub_core_machine.h" /* VG_PLAT_USES_PPCTOC */
+
+ /* See include/pub_tool_libcsetjmp.h for background and rationale. */
+
+@@ -151,7 +152,8 @@ __asm__(
+
+ /* ------------ ppc64-linux ------------ */
+
+-#if defined(VGP_ppc64be_linux)
++#if (defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)) \
++ && defined(VG_PLAT_USES_PPCTOC)
+
+ __asm__(
+ ".section \".toc\",\"aw\"" "\n"
+@@ -270,7 +272,8 @@ __asm__(
+ ".previous" "\n"
+ );
+
+-#elif defined(VGP_ppc64le_linux)
++#elif (defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)) \
++ && !defined(VG_PLAT_USES_PPCTOC)
+ __asm__(
+ ".section \".toc\",\"aw\"" "\n"
+
+diff --git a/coregrind/m_machine.c b/coregrind/m_machine.c
+index 31b0e1b6b..eb3e6a4e1 100644
+--- a/coregrind/m_machine.c
++++ b/coregrind/m_machine.c
+@@ -2035,7 +2035,8 @@ void* VG_(fnptr_to_fnentry)( void* f )
+ || defined(VGP_ppc32_linux) || defined(VGP_ppc64le_linux) \
+ || defined(VGP_s390x_linux) || defined(VGP_mips32_linux) \
+ || defined(VGP_mips64_linux) || defined(VGP_arm64_linux) \
+- || defined(VGP_x86_solaris) || defined(VGP_amd64_solaris)
++ || defined(VGP_x86_solaris) || defined(VGP_amd64_solaris) \
++ || (defined(VGP_ppc64be_linux) && !defined(VG_PLAT_USES_PPCTOC))
+ return f;
+ # elif defined(VGP_ppc64be_linux)
+ /* ppc64-linux uses the AIX scheme, in which f is a pointer to a
+diff --git a/coregrind/m_main.c b/coregrind/m_main.c
+index bf4a71284..102235dca 100644
+--- a/coregrind/m_main.c
++++ b/coregrind/m_main.c
+@@ -2274,7 +2274,7 @@ static void final_tidyup(ThreadId tid)
+ return; /* won't do it */
+ }
+
+-# if defined(VGP_ppc64be_linux)
++# if defined(VGP_ppc64be_linux) && defined(VG_PLAT_USES_PPCTOC)
+ Addr r2 = VG_(get_tocptr)(freeres_wrapper);
+ if (r2 == 0) {
+ VG_(message)(Vg_UserMsg,
+@@ -2306,9 +2306,11 @@ static void final_tidyup(ThreadId tid)
+ directly. However, we need to set R2 (the toc pointer)
+ appropriately. */
+ VG_(set_IP)(tid, freeres_wrapper);
+-# if defined(VGP_ppc64be_linux)
++# if (defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)) \
++ && defined(VG_PLAT_USES_PPCTOC)
+ VG_(threads)[tid].arch.vex.guest_GPR2 = r2;
+-# elif defined(VGP_ppc64le_linux)
++# elif (defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)) \
++ && !defined(VG_PLAT_USES_PPCTOC)
+ /* setting GPR2 but not really needed, GPR12 is needed */
+ VG_(threads)[tid].arch.vex.guest_GPR2 = freeres_wrapper;
+ VG_(threads)[tid].arch.vex.guest_GPR12 = freeres_wrapper;
+@@ -2610,9 +2612,10 @@ asm("\n"
+ "\ttrap\n"
+ ".previous\n"
+ );
+-#elif defined(VGP_ppc64be_linux)
++#elif (defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)) \
++ && defined(VG_PLAT_USES_PPCTOC)
+ asm("\n"
+- /* PPC64 ELF ABI says '_start' points to a function descriptor.
++ /* PPC64 ELFv1 ABI says '_start' points to a function descriptor.
+ So we must have one, and that is what goes into the .opd section. */
+ "\t.align 2\n"
+ "\t.global _start\n"
+@@ -2656,9 +2659,9 @@ asm("\n"
+ "\tnop\n"
+ "\ttrap\n"
+ );
+-#elif defined(VGP_ppc64le_linux)
+-/* Little Endian uses ELF version 2 but in the future may also
+- * support other ELF versions.
++#elif (defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)) \
++ && !defined(VG_PLAT_USES_PPCTOC)
++/* ELF version 2 does not use function descriptors.
+ */
+ asm("\n"
+ "\t.align 2\n"
+diff --git a/coregrind/m_sigframe/sigframe-ppc64-linux.c b/coregrind/m_sigframe/sigframe-ppc64-linux.c
+index b16606c22..cc657838f 100644
+--- a/coregrind/m_sigframe/sigframe-ppc64-linux.c
++++ b/coregrind/m_sigframe/sigframe-ppc64-linux.c
+@@ -263,7 +263,8 @@ void VG_(sigframe_create)( ThreadId tid,
+
+ /* Handler is in fact a standard ppc64-linux function descriptor,
+ so extract the function entry point and also the toc ptr to use. */
+-#if defined(VGP_ppc64be_linux)
++#if (defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)) \
++ && defined(VG_PLAT_USES_PPCTOC)
+ SET_SIGNAL_GPR(tid, 2, (Addr) ((ULong*)handler)[1]);
+ tst->arch.vex.guest_CIA = (Addr) ((ULong*)handler)[0];
+ #else
+diff --git a/coregrind/m_signals.c b/coregrind/m_signals.c
+index e572f17cc..52d939057 100644
+--- a/coregrind/m_signals.c
++++ b/coregrind/m_signals.c
+@@ -889,7 +889,9 @@ extern void my_sigreturn(void);
+ " sc\n" \
+ ".previous\n"
+
+-#elif defined(VGP_ppc64be_linux)
++#elif (defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)) \
++ && defined(VG_PLAT_USES_PPCTOC)
++/* ELF version 1. Used in some legacy environments on LE, and most BE. */
+ # define _MY_SIGRETURN(name) \
+ ".align 2\n" \
+ ".globl my_sigreturn\n" \
+@@ -904,9 +906,10 @@ extern void my_sigreturn(void);
+ " li 0, " #name "\n" \
+ " sc\n"
+
+-#elif defined(VGP_ppc64le_linux)
+-/* Little Endian supports ELF version 2. In the future, it may
+- * support other versions.
++#elif (defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)) \
++ && !defined(VG_PLAT_USES_PPCTOC)
++/* ELF version 2. In the future, PPC64 may support other versions. Used by
++ * most LE environments and any BE environment running musl libc.
+ */
+ # define _MY_SIGRETURN(name) \
+ ".align 2\n" \
+diff --git a/coregrind/m_stacktrace.c b/coregrind/m_stacktrace.c
+index 24f1409dd..9be4c6da9 100644
+--- a/coregrind/m_stacktrace.c
++++ b/coregrind/m_stacktrace.c
+@@ -726,7 +726,8 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
+ Addr fp_max_orig )
+ {
+ Bool lr_is_first_RA = False;
+-# if defined(VG_PLAT_USES_PPCTOC) || defined(VGP_ppc64le_linux)
++# if defined(VG_PLAT_USES_PPCTOC) || defined(VGP_ppc64be_linux) \
++ || defined(VGP_ppc64le_linux)
+ Word redir_stack_size = 0;
+ Word redirs_used = 0;
+ # endif
+@@ -787,7 +788,8 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
+ redirs_used = 0;
+ # endif
+
+-# if defined(VG_PLAT_USES_PPCTOC) || defined (VGP_ppc64le_linux)
++# if defined(VG_PLAT_USES_PPCTOC) || defined(VGP_ppc64be_linux) \
++ || defined(VGP_ppc64le_linux)
+ /* Deal with bogus LR values caused by function
+ interception/wrapping on ppc-TOC platforms; see comment on
+ similar code a few lines further down. */
+@@ -839,7 +841,8 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
+ /* On ppc64-linux (ppc64-elf, really), the lr save
+ slot is 2 words back from sp, whereas on ppc32-elf(?) it's
+ only one word back. */
+-# if defined(VG_PLAT_USES_PPCTOC) || defined(VGP_ppc64le_linux)
++# if defined(VG_PLAT_USES_PPCTOC) || defined(VGP_ppc64be_linux) \
++ || defined(VGP_ppc64le_linux)
+ const Int lr_offset = 2;
+ # else
+ const Int lr_offset = 1;
+@@ -858,7 +861,8 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known,
+ else
+ ip = (((UWord*)fp)[lr_offset]);
+
+-# if defined(VG_PLAT_USES_PPCTOC) || defined(VGP_ppc64le_linux)
++# if defined(VG_PLAT_USES_PPCTOC) || defined(VGP_ppc64be_linux) \
++ || defined(VGP_ppc64le_linux)
+ /* Nasty hack to do with function replacement/wrapping on
+ ppc64-linux. If LR points to our magic return stub,
+ then we are in a wrapped or intercepted function, in
+diff --git a/coregrind/m_syscall.c b/coregrind/m_syscall.c
+index 5948cecf5..c1cdfab27 100644
+--- a/coregrind/m_syscall.c
++++ b/coregrind/m_syscall.c
+@@ -470,7 +470,8 @@ asm(
+ ".previous\n"
+ );
+
+-#elif defined(VGP_ppc64be_linux)
++#elif (defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)) \
++ && defined(VG_PLAT_USES_PPCTOC)
+ /* Due to the need to return 65 bits of result, this is completely
+ different from the ppc32 case. The single arg register points to a
+ 7-word block containing the syscall # and the 6 args. The syscall
+@@ -506,15 +507,15 @@ asm(
+ " blr\n"
+ );
+
+-#elif defined(VGP_ppc64le_linux)
++#elif (defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)) \
++ && !defined(VG_PLAT_USES_PPCTOC)
+ /* Due to the need to return 65 bits of result, this is completely
+ different from the ppc32 case. The single arg register points to a
+ 7-word block containing the syscall # and the 6 args. The syscall
+ result proper is put in [0] of the block, and %cr0.so is in the
+ bottom bit of [1]. */
+ extern void do_syscall_WRK ( ULong* argblock );
+-/* Little Endian supports ELF version 2. In the future, it may support
+- * other versions as well.
++/* ELF version 2. In the future, PPC64 may support other versions as well.
+ */
+ asm(
+ ".align 2\n"
+diff --git a/coregrind/m_syswrap/syscall-ppc64be-linux.S b/coregrind/m_syswrap/syscall-ppc64be-linux.S
+index 16e9cedc0..db0d8b4aa 100644
+--- a/coregrind/m_syswrap/syscall-ppc64be-linux.S
++++ b/coregrind/m_syswrap/syscall-ppc64be-linux.S
+@@ -76,11 +76,24 @@
+
+ .align 2
+ .globl ML_(do_syscall_for_client_WRK)
++#if _CALL_ELF == 2
++.type .ML_(do_syscall_for_client_WRK),@function
++ML_(do_syscall_for_client_WRK):
++0: addis 2,12,.TOC.-0b@ha
++ addi 2,2,.TOC.-0b@l
++ .localentry ML_(do_syscall_for_client_WRK), .-ML_(do_syscall_for_client_WRK)
++#else
+ .section ".opd","aw"
+ .align 3
+-ML_(do_syscall_for_client_WRK):
++ML_(do_syscall_for_client_WRK):
+ .quad .ML_(do_syscall_for_client_WRK),.TOC.@tocbase,0
+ .previous
++#endif
++#if _CALL_ELF == 2
++0: addis 2,12,.TOC.-0b@ha
++ addi 2,2,.TOC.-0b@l
++ .localentry ML_(do_syscall_for_client_WRK), .-ML_(do_syscall_for_client_WRK)
++#endif
+ .type .ML_(do_syscall_for_client_WRK),@function
+ .globl .ML_(do_syscall_for_client_WRK)
+ .ML_(do_syscall_for_client_WRK):
+@@ -145,7 +158,9 @@ ML_(do_syscall_for_client_WRK):
+ /* failure: return 0x8000 | error code */
+ 7: ori 3,3,0x8000 /* FAILURE -- ensure return value is nonzero */
+ b 5b
+-
++#if _CALL_ELF == 2
++ .size .ML_(do_syscall_for_client_WRK),.-.ML_(do_syscall_for_client_WRK)
++#endif
+ .section .rodata
+ /* export the ranges so that
+ VG_(fixup_guest_state_after_syscall_interrupted) can do the
+diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c
+index 6549dd1b3..4ecbe38a6 100644
+--- a/coregrind/m_syswrap/syswrap-ppc64-linux.c
++++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c
+@@ -41,6 +41,7 @@
+ #include "pub_core_libcprint.h"
+ #include "pub_core_libcproc.h"
+ #include "pub_core_libcsignal.h"
++#include "pub_core_machine.h"
+ #include "pub_core_options.h"
+ #include "pub_core_scheduler.h"
+ #include "pub_core_sigframe.h" // For VG_(sigframe_destroy)()
+@@ -76,7 +77,8 @@ void ML_(call_on_new_stack_0_1) ( Addr stack,
+ address, the second word is the TOC ptr (r2), and the third word is
+ the static chain value. */
+ asm(
+-#if defined(VGP_ppc64be_linux)
++#if (defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)) \
++ && defined(VG_PLAT_USES_PPCTOC)
+ " .align 2\n"
+ " .globl vgModuleLocal_call_on_new_stack_0_1\n"
+ " .section \".opd\",\"aw\"\n"
+@@ -126,7 +128,7 @@ asm(
+ " bctr\n\t" // jump to dst
+ " trap\n" // should never get here
+ #else
+-// ppc64le_linux
++// ppc64 ELFv2 Linux
+ " .align 2\n"
+ " .globl vgModuleLocal_call_on_new_stack_0_1\n"
+ "vgModuleLocal_call_on_new_stack_0_1:\n"
+@@ -211,7 +213,8 @@ asm(
+
+ // See priv_syswrap-linux.h for arg profile.
+ asm(
+-#if defined(VGP_ppc64be_linux)
++#if (defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)) \
++ && defined(VG_PLAT_USES_PPCTOC)
+ " .align 2\n"
+ " .globl do_syscall_clone_ppc64_linux\n"
+ " .section \".opd\",\"aw\"\n"
+diff --git a/coregrind/m_trampoline.S b/coregrind/m_trampoline.S
+index 0488b54bd..d00916aef 100644
+--- a/coregrind/m_trampoline.S
++++ b/coregrind/m_trampoline.S
+@@ -469,11 +469,11 @@ VG_(ppctoc_magic_redirect_return_stub):
+ .align 2
+ .globl VG_(ppc64_linux_REDIR_FOR_strlen)
+ #if !defined VGP_ppc64be_linux || _CALL_ELF == 2
+- /* Little Endian uses ELF version 2 */
++ /* ELF version 2 */
+ .type VG_(ppc64_linux_REDIR_FOR_strlen),@function
+ VG_(ppc64_linux_REDIR_FOR_strlen):
+ #else
+- /* Big Endian uses ELF version 1 */
++ /* ELF version 1 */
+ .section ".opd","aw"
+ .align 3
+ VG_(ppc64_linux_REDIR_FOR_strlen):
+diff --git a/coregrind/m_translate.c b/coregrind/m_translate.c
+index 3602a4663..bdd1d50ee 100644
+--- a/coregrind/m_translate.c
++++ b/coregrind/m_translate.c
+@@ -1006,7 +1006,8 @@ static IRExpr* mkU32 ( UInt n ) {
+ return IRExpr_Const(IRConst_U32(n));
+ }
+
+-#if defined(VG_PLAT_USES_PPCTOC) || defined(VGP_ppc64le_linux)
++#if defined(VG_PLAT_USES_PPCTOC) || defined(VGP_ppc64be_linux) \
++ || defined(VGP_ppc64le_linux)
+ static IRExpr* mkU8 ( UChar n ) {
+ return IRExpr_Const(IRConst_U8(n));
+ }
+@@ -1234,7 +1234,8 @@ static void gen_push_and_set_LR_R2 ( IRSB* bb, Addr new_R2_value )
+ }
+ #endif
+
+-#if defined(VG_PLAT_USES_PPCTOC) || defined(VGP_ppc64le_linux)
++#if defined(VG_PLAT_USES_PPCTOC) || defined(VGP_ppc64be_linux) \
++ || defined(VGP_ppc64le_linux)
+
+ static void gen_pop_R2_LR_then_bLR ( IRSB* bb )
+ {
+@@ -1263,7 +1264,8 @@ static void gen_pop_R2_LR_then_bLR ( IRSB* bb )
+ }
+ #endif
+
+-#if defined(VG_PLAT_USES_PPCTOC) || defined(VGP_ppc64le_linux)
++#if defined(VG_PLAT_USES_PPCTOC) || defined(VGP_ppc64be_linux) \
++ || defined(VGP_ppc64le_linux)
+
+ static
+ Bool mk_preamble__ppctoc_magic_return_stub ( void* closureV, IRSB* bb )
+@@ -1285,7 +1287,7 @@ Bool mk_preamble__ppctoc_magic_return_stub ( void* closureV, IRSB* bb )
+ }
+ #endif
+
+-#if defined(VGP_ppc64le_linux)
++#if defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
+ /* Generate code to push LR and R2 onto this thread's redir stack.
+ Need to save R2 in case we redirect to a global entry point. The
+ value of R2 is not preserved when entering the global entry point.
+@@ -1366,9 +1368,7 @@ Bool mk_preamble__set_NRADDR_to_zero ( void* closureV, IRSB* bb )
+ gen_push_and_set_LR_R2 ( bb, VG_(get_tocptr)( VG_(current_DiEpoch)(),
+ closure->readdr ) );
+ }
+-# endif
+-
+-#if defined(VGP_ppc64le_linux)
++#elif defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
+ VgCallbackClosure* closure = (VgCallbackClosure*)closureV;
+ Int offB_GPR12 = offsetof(VexGuestArchState, guest_GPR12);
+ addStmtToIRSB(bb, IRStmt_Put(offB_GPR12, mkU64(closure->readdr)));
+@@ -1424,7 +1424,6 @@ Bool mk_preamble__set_NRADDR_to_nraddr ( void* closureV, IRSB* bb )
+ );
+ gen_push_and_set_LR_R2 ( bb, VG_(get_tocptr)( closure->readdr ) );
+-# endif
+-#if defined(VGP_ppc64le_linux)
++#elif defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
+ /* This saves the r2 before leaving the function. We need to move
+ * guest_NRADDR_GPR2 back to R2 on return.
+ */
+@@ -1648,7 +1647,8 @@ Bool VG_(translate) ( ThreadId tid,
+ preamble_fn = mk_preamble__set_NRADDR_to_nraddr;
+
+ /* LE we setup the LR */
+-# if defined(VG_PLAT_USES_PPCTOC) || defined(VGP_ppc64le_linux)
++# if defined(VG_PLAT_USES_PPCTOC) || defined(VGP_ppc64be_linux) \
++ || defined(VGP_ppc64le_linux)
+ if (nraddr == (Addr)&VG_(ppctoc_magic_redirect_return_stub)) {
+ /* If entering the special return stub, this means a wrapped or
+ redirected function is returning. Make this translation one
+@@ -1692,13 +1692,14 @@ Bool VG_(translate) ( ThreadId tid,
+ vex_abiinfo.guest_ppc_zap_RZ_at_bl = NULL;
+ # endif
+
+-# if defined(VGP_ppc64be_linux)
++# if defined(VGP_ppc64be_linux) && defined(VG_PLAT_USES_PPCTOC)
+ vex_abiinfo.guest_ppc_zap_RZ_at_blr = True;
+ vex_abiinfo.guest_ppc_zap_RZ_at_bl = const_True;
+ vex_abiinfo.host_ppc_calls_use_fndescrs = True;
+ # endif
+
+-# if defined(VGP_ppc64le_linux)
++# if (defined(VGP_ppc64be_linux) && !defined(VG_PLAT_USES_PPCTOC)) \
++ || defined(VGP_ppc64le_linux)
+ vex_abiinfo.guest_ppc_zap_RZ_at_blr = True;
+ vex_abiinfo.guest_ppc_zap_RZ_at_bl = const_True;
+ vex_abiinfo.host_ppc_calls_use_fndescrs = False;
+diff --git a/coregrind/m_ume/elf.c b/coregrind/m_ume/elf.c
+index 21eb52bcb..f1e6b4728 100644
+--- a/coregrind/m_ume/elf.c
++++ b/coregrind/m_ume/elf.c
+@@ -847,8 +847,8 @@ Int VG_(load_ELF)(Int fd, const HChar* name, /*MOD*/ExeInfo* info)
+ info->exe_base = minaddr + ebase;
+ info->exe_end = maxaddr + ebase;
+
+-#if defined(VGP_ppc64be_linux)
+- /* On PPC64BE, ELF ver 1, a func ptr is represented by a TOC entry ptr.
++#if defined(VGP_ppc64be_linux) && defined(VG_PLAT_USES_PPCTOC)
++ /* On PPC64, ELF ver 1, a func ptr is represented by a TOC entry ptr.
+ This TOC entry contains three words; the first word is the function
+ address, the second word is the TOC ptr (r2), and the third word
+ is the static chain value. */
+@@ -856,8 +856,8 @@ Int VG_(load_ELF)(Int fd, const HChar* name, /*MOD*/ExeInfo* info)
+ info->init_toc = ((ULong*)entry)[1];
+ info->init_ip += info->interp_offset;
+ info->init_toc += info->interp_offset;
+-#elif defined(VGP_ppc64le_linux)
+- /* On PPC64LE, ELF ver 2. API doesn't use a func ptr */
++#elif defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
++ /* On PPC64, ELF ver 2. API doesn't use a func ptr */
+ info->init_ip = (Addr)entry;
+ info->init_toc = 0; /* meaningless on this platform */
+ #else
+diff --git a/coregrind/pub_core_machine.h b/coregrind/pub_core_machine.h
+index d6af843df..400148d57 100644
+--- a/coregrind/pub_core_machine.h
++++ b/coregrind/pub_core_machine.h
+@@ -60,12 +60,20 @@
+ # define VG_ELF_DATA2XXX ELFDATA2MSB
+ # define VG_ELF_MACHINE EM_PPC64
+ # define VG_ELF_CLASS ELFCLASS64
+-# define VG_PLAT_USES_PPCTOC 1
++# if !defined(_CALL_ELF) || _CALL_ELF == 1
++# define VG_PLAT_USES_PPCTOC 1
++# else
++# undef VG_PLAT_USES_PPCTOC
++# endif
+ #elif defined(VGP_ppc64le_linux)
+ # define VG_ELF_DATA2XXX ELFDATA2LSB
+ # define VG_ELF_MACHINE EM_PPC64
+ # define VG_ELF_CLASS ELFCLASS64
+-# undef VG_PLAT_USES_PPCTOC
++# if defined(_CALL_ELF) && _CALL_ELF == 1
++# define VG_PLAT_USES_PPCTOC 1
++# else // assume ELFv2 by default if no ABI is specified
++# undef VG_PLAT_USES_PPCTOC
++# endif
+ #elif defined(VGP_arm_linux)
+ # define VG_ELF_DATA2XXX ELFDATA2LSB
+ # define VG_ELF_MACHINE EM_ARM
+diff --git a/coregrind/vg_preloaded.c b/coregrind/vg_preloaded.c
+index ad033432a..f300fbe80 100644
+--- a/coregrind/vg_preloaded.c
++++ b/coregrind/vg_preloaded.c
+@@ -45,6 +45,7 @@
+ #include "pub_core_basics.h"
+ #include "pub_core_clreq.h"
+ #include "pub_core_debuginfo.h" // Needed for pub_core_redir.h
++#include "pub_core_machine.h" // For VG_PLAT_USES_PPCTOC
+ #include "pub_core_redir.h" // For VG_NOTIFY_ON_LOAD
+
+ #if defined(VGO_linux) || defined(VGO_solaris)
+@@ -103,7 +104,7 @@ void * VG_NOTIFY_ON_LOAD(ifunc_wrapper) (void)
+ VALGRIND_GET_ORIG_FN(fn);
+ CALL_FN_W_v(result, fn);
+
+-#if defined(VGP_ppc64be_linux)
++#if defined(VGP_ppc64be_linux) && defined(VG_PLAT_USES_PPCTOC)
+ /* ppc64be uses function descriptors, so get the actual function entry
+ address for the client request, but return the function descriptor
+ from this function.
+diff --git a/include/valgrind.h b/include/valgrind.h
+index 577c8f05e..99e058ccf 100644
+--- a/include/valgrind.h
++++ b/include/valgrind.h
+@@ -143,12 +143,20 @@
+ # define PLAT_amd64_linux 1
+ #elif defined(__linux__) && defined(__powerpc__) && !defined(__powerpc64__)
+ # define PLAT_ppc32_linux 1
+-#elif defined(__linux__) && defined(__powerpc__) && defined(__powerpc64__) && _CALL_ELF != 2
+-/* Big Endian uses ELF version 1 */
++#elif defined(__linux__) && defined(__powerpc__) && defined(__powerpc64__) && defined(__BIG_ENDIAN__)
+ # define PLAT_ppc64be_linux 1
+-#elif defined(__linux__) && defined(__powerpc__) && defined(__powerpc64__) && _CALL_ELF == 2
+-/* Little Endian uses ELF version 2 */
++# if _CALL_ELF == 2
++# define PLAT_ppc64_linux_abi2
++# else
++# define PLAT_ppc64_linux_abi1
++# endif
++#elif defined(__linux__) && defined(__powerpc__) && defined(__powerpc64__) && !defined(__BIG_ENDIAN__)
+ # define PLAT_ppc64le_linux 1
++# if _CALL_ELF == 2
++# define PLAT_ppc64_linux_abi2
++# else
++# define PLAT_ppc64_linux_abi1
++# endif
+ #elif defined(__linux__) && defined(__arm__) && !defined(__aarch64__)
+ # define PLAT_arm_linux 1
+ #elif defined(__linux__) && defined(__aarch64__) && !defined(__arm__)
+diff --git a/memcheck/mc_leakcheck.c b/memcheck/mc_leakcheck.c
+index 782244481..c239f5b10 100644
+--- a/memcheck/mc_leakcheck.c
++++ b/memcheck/mc_leakcheck.c
+@@ -653,7 +653,7 @@ static Bool aligned_ptr_above_page0_is_vtable_addr(Addr ptr)
+ if (pot_fn == 0)
+ continue; // NULL fn pointer. Seems it can happen in vtable.
+ seg = VG_(am_find_nsegment) (pot_fn);
+-#if defined(VGA_ppc64be)
++#if defined(VGA_ppc64be) && (!defined(_CALL_ELF) || _CALL_ELF == 1)
+ // ppc64BE uses a thunk table (function descriptors), so we have one
+ // more level of indirection to follow.
+ if (seg == NULL
+diff --git a/memcheck/mc_machine.c b/memcheck/mc_machine.c
+index 5ed101fca..70c64b361 100644
+--- a/memcheck/mc_machine.c
++++ b/memcheck/mc_machine.c
+@@ -132,7 +132,8 @@ static Int get_otrack_shadow_offset_wrk ( Int offset, Int szB )
+ return GOF(GPRn);
+ by testing ox instead of o, and setting ox back 4 bytes when sz == 4.
+ */
+-#if defined(VGA_ppc64le)
++#if (defined(VGA_ppc64be) && (defined(_CALL_ELF) && _CALL_ELF == 2)) \
++ || defined(VGA_ppc64le)
+ Int ox = o;
+ #else
+ Int ox = sz == 8 ? o : (o - 4);
+--
+2.18.0
+
diff --git a/user/valgrind/APKBUILD b/user/valgrind/APKBUILD
index 58ed29fa1..d79ba75c4 100644
--- a/user/valgrind/APKBUILD
+++ b/user/valgrind/APKBUILD
@@ -1,12 +1,12 @@
# Maintainer: A. Wilcox <awilfox@adelielinux.org>
pkgname=valgrind
pkgver=3.13.0
-pkgrel=1
+pkgrel=4
pkgdesc="A tool to help find memory-management problems in programs"
url="http://valgrind.org/"
arch="all"
license="GPL-2.0+"
-makedepends="autoconf automake libtool bash perl"
+makedepends="autoconf automake libtool bash perl cmd:which"
# from README_PACKAGERS:
# Don't strip the debug info off lib/valgrind/$platform/vgpreload*.so
# in the installation tree. Either Valgrind won't work at all, or it
@@ -17,9 +17,9 @@ subpackages="$pkgname-dev $pkgname-doc"
source="ftp://sourceware.org/pub/$pkgname/$pkgname-$pkgver.tar.bz2
uclibc.patch
arm.patch
- coregrind-elfv2.patch"
-# musl-fixes.patch
-builddir="$srcdir"/$pkgname-$pkgver
+ 0001-Ensure-ELFv2-is-supported-on-PPC64.patch
+ suppressions.patch
+ "
prepare() {
default_prepare
@@ -67,4 +67,5 @@ package() {
sha512sums="34e1013cd3815d30a459b86220e871bb0a6209cc9e87af968f347083693779f022e986f211bdf1a5184ad7370cde12ff2cfca8099967ff94732970bd04a97009 valgrind-3.13.0.tar.bz2
d59a10db9037e120df2ee94a103402ca95a79abee9d8be63e4e1bca29c82dca775cc402a79b854ec11a2160a4d2da202c237369418e221d1925267ea2613fd5d uclibc.patch
9ee297d1b2b86891584443ad0caadc4977e1447979611ccf1cc55dbee61911b0b063bc4ad936d86c451cedae410cb3219b5a088b2ad0aa17df182d564fe36cfe arm.patch
-0f54b7b207870f495a0cf010b3091e2c0626bbf93b8a5ba7956b690981d4186de61f3e3b1fdc3aec2dfcacb69e712900f32c883a09dd4733c1e4569506272520 coregrind-elfv2.patch"
+71afb12748f69f0976a299c65572818b70cbce5d04f230a49a50f114351d8083c59a9e197cefbcb9145806797ff4d1d54488f50342b680c9a2b76e4a7f7cf305 0001-Ensure-ELFv2-is-supported-on-PPC64.patch
+d011b2769d35ca3206967e6dac9f3fb24a6496e5bbfdc73342382245c89375b09d6948b10ba3cf8aa0050c79c0dd13b75764aec0ec5c6ac479fa930941067747 suppressions.patch"
diff --git a/user/valgrind/coregrind-elfv2.patch b/user/valgrind/coregrind-elfv2.patch
deleted file mode 100644
index 7e4a2d636..000000000
--- a/user/valgrind/coregrind-elfv2.patch
+++ /dev/null
@@ -1,443 +0,0 @@
-The LE and BE code here is the same, except the BE has the old-style
-function descriptor. So, we use the LE code on ELFv2 to fix build errors.
-
---- valgrind-3.13.0/coregrind/m_libcsetjmp.c 2017-05-31 10:14:45.000000000 -0500
-+++ valgrind-3.13.0/coregrind/m_libcsetjmp.c 2018-05-25 20:07:37.007835735 -0500
-@@ -149,7 +149,7 @@
-
- /* ------------ ppc64-linux ------------ */
-
--#if defined(VGP_ppc64be_linux)
-+#if defined(VGP_ppc64be_linux) && (!defined(_CALL_ELF) || _CALL_ELF == 1)
-
- __asm__(
- ".section \".toc\",\"aw\"" "\n"
-@@ -268,7 +268,8 @@
- ".previous" "\n"
- );
-
--#elif defined(VGP_ppc64le_linux)
-+#elif (defined(VGP_ppc64le_linux)) || \
-+ (defined(VGP_ppc64be_linux) && defined(_CALL_ELF) && _CALL_ELF == 2)
- __asm__(
- ".section \".toc\",\"aw\"" "\n"
-
---- valgrind-3.13.0/coregrind/m_main.c.old 2017-05-31 10:14:52.000000000 -0500
-+++ valgrind-3.13.0/coregrind/m_main.c 2018-05-30 19:01:00.534083618 -0500
-@@ -2585,7 +2585,7 @@
- "\ttrap\n"
- ".previous\n"
- );
--#elif defined(VGP_ppc64be_linux)
-+#elif defined(VGP_ppc64be_linux) && (!defined(_CALL_ELF) || _CALL_ELF == 1)
- asm("\n"
- /* PPC64 ELF ABI says '_start' points to a function descriptor.
- So we must have one, and that is what goes into the .opd section. */
-@@ -2631,9 +2631,9 @@
- "\tnop\n"
- "\ttrap\n"
- );
--#elif defined(VGP_ppc64le_linux)
--/* Little Endian uses ELF version 2 but in the future may also
-- * support other ELF versions.
-+#elif defined(VGP_ppc64le_linux) || \
-+ (defined(VGP_ppc64be_linux) && defined(_CALL_ELF) && _CALL_ELF == 2)
-+/* PowerPC 64 ELF version 2 does not use function descriptors.
- */
- asm("\n"
- "\t.align 2\n"
---- valgrind-3.13.0/coregrind/m_syscall.c.old 2017-05-31 10:14:29.000000000 -0500
-+++ valgrind-3.13.0/coregrind/m_syscall.c 2018-05-30 19:02:00.984023769 -0500
-@@ -470,7 +470,7 @@
- ".previous\n"
- );
-
--#elif defined(VGP_ppc64be_linux)
-+#elif defined(VGP_ppc64be_linux) && (!defined(_CALL_ELF) || _CALL_ELF == 1)
- /* Due to the need to return 65 bits of result, this is completely
- different from the ppc32 case. The single arg register points to a
- 7-word block containing the syscall # and the 6 args. The syscall
-@@ -506,7 +506,8 @@
- " blr\n"
- );
-
--#elif defined(VGP_ppc64le_linux)
-+#elif defined(VGP_ppc64le_linux) || \
-+ (defined(VGP_ppc64be_linux) && defined(_CALL_ELF) && _CALL_ELF == 2)
- /* Due to the need to return 65 bits of result, this is completely
- different from the ppc32 case. The single arg register points to a
- 7-word block containing the syscall # and the 6 args. The syscall
---- valgrind-3.13.0/coregrind/m_signals.c.old 2017-05-31 10:14:52.000000000 -0500
-+++ valgrind-3.13.0/coregrind/m_signals.c 2018-05-30 22:12:46.082692356 -0500
-@@ -889,7 +889,7 @@
- " sc\n" \
- ".previous\n"
-
--#elif defined(VGP_ppc64be_linux)
-+#elif defined(VGP_ppc64be_linux) && (!defined(_CALL_ELF) || _CALL_ELF == 1)
- # define _MY_SIGRETURN(name) \
- ".align 2\n" \
- ".globl my_sigreturn\n" \
-@@ -904,7 +904,8 @@
- " li 0, " #name "\n" \
- " sc\n"
-
--#elif defined(VGP_ppc64le_linux)
-+#elif defined(VGP_ppc64le_linux) || \
-+ (defined(VGP_ppc64be_linux) && defined(_CALL_ELF) && _CALL_ELF == 2)
- /* Little Endian supports ELF version 2. In the future, it may
- * support other versions.
- */
---- valgrind-3.13.0/coregrind/m_syswrap/syswrap-ppc64-linux.c.old 2017-05-31 10:14:39.000000000 -0500
-+++ valgrind-3.13.0/coregrind/m_syswrap/syswrap-ppc64-linux.c 2018-05-30 22:15:42.112518074 -0500
-@@ -71,12 +71,12 @@
- // r4 = retaddr
- // r5 = function descriptor
- // r6 = arg1
--/* On PPC64, a func ptr is represented by a TOC entry ptr.
-+/* On ELFv1, a func ptr is represented by a TOC entry ptr.
- This TOC entry contains three words; the first word is the function
- address, the second word is the TOC ptr (r2), and the third word is
- the static chain value. */
- asm(
--#if defined(VGP_ppc64be_linux)
-+#if defined(VGP_ppc64be_linux) && (!defined(_CALL_ELF) || _CALL_ELF == 1)
- " .align 2\n"
- " .globl vgModuleLocal_call_on_new_stack_0_1\n"
- " .section \".opd\",\"aw\"\n"
-@@ -126,7 +126,7 @@
- " bctr\n\t" // jump to dst
- " trap\n" // should never get here
- #else
--// ppc64le_linux
-+// ppc64le_linux, or ELFv2 ABI on BE
- " .align 2\n"
- " .globl vgModuleLocal_call_on_new_stack_0_1\n"
- "vgModuleLocal_call_on_new_stack_0_1:\n"
-@@ -211,7 +211,7 @@
-
- // See priv_syswrap-linux.h for arg profile.
- asm(
--#if defined(VGP_ppc64be_linux)
-+#if defined(VGP_ppc64be_linux) && (!defined(_CALL_ELF) || _CALL_ELF == 1)
- " .align 2\n"
- " .globl do_syscall_clone_ppc64_linux\n"
- " .section \".opd\",\"aw\"\n"
---- valgrind-3.13.0/coregrind/m_syswrap/syscall-ppc64be-linux.S.old 2017-05-31 10:14:39.000000000 -0500
-+++ valgrind-3.13.0/coregrind/m_syswrap/syscall-ppc64be-linux.S 2018-05-30 22:18:31.742350130 -0500
-@@ -29,7 +29,7 @@
-
- #include "pub_core_basics_asm.h"
-
--#if defined(VGP_ppc64be_linux)
-+#if defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
-
- #include "pub_core_vkiscnums_asm.h"
- #include "libvex_guest_offsets.h"
-@@ -76,12 +76,25 @@
-
- .align 2
- .globl ML_(do_syscall_for_client_WRK)
-+#if _CALL_ELF == 2
-+.type .ML_(do_syscall_for_client_WRK),@function
-+ML_(do_syscall_for_client_WRK):
-+0: addis 2,12,.TOC.-0b@ha
-+ addi 2,2,.TOC.-0b@l
-+ .localentry ML_(do_syscall_for_client_WRK), .-ML_(do_syscall_for_client_WRK)
-+#else
- .section ".opd","aw"
- .align 3
--ML_(do_syscall_for_client_WRK):
-+ML_(do_syscall_for_client_WRK):
- .quad .ML_(do_syscall_for_client_WRK),.TOC.@tocbase,0
- .previous
--.type .ML_(do_syscall_for_client_WRK),@function
-+#endif
-+#if _CALL_ELF == 2
-+0: addis 2,12,.TOC.-0b@ha
-+ addi 2,2,.TOC.-0b@l
-+ .localentry ML_(do_syscall_for_client_WRK), .-ML_(do_syscall_for_client_WRK)
-+#endif
-+.type .ML_(do_syscall_for_client_WRK),@function
- .globl .ML_(do_syscall_for_client_WRK)
- .ML_(do_syscall_for_client_WRK):
- /* make a stack frame */
-@@ -145,7 +158,11 @@
- /* failure: return 0x8000 | error code */
- 7: ori 3,3,0x8000 /* FAILURE -- ensure return value is nonzero */
- b 5b
--
-+#if _CALL_ELF == 2
-+ .size .ML_(do_syscall_for_client_WRK),.-.ML_(do_syscall_for_client_WRK)
-+#else
-+ .size .ML_(do_syscall_for_client_WRK),.-.ML_(do_syscall_for_client_WRK)
-+#endif
- .section .rodata
- /* export the ranges so that
- VG_(fixup_guest_state_after_syscall_interrupted) can do the
-@@ -162,7 +179,7 @@
- ML_(blksys_committed): .quad 4b
- ML_(blksys_finished): .quad 5b
-
--#endif // defined(VGP_ppc64be_linux)
-+#endif // defined(VGP_ppc64le_linux)
-
- /* Let the linker know we don't need an executable stack */
- MARK_STACK_NO_EXEC
---- valgrind-3.13.0/coregrind/m_dispatch/dispatch-ppc64be-linux.S.old 2017-05-31 10:14:33.000000000 -0500
-+++ valgrind-3.13.0/coregrind/m_dispatch/dispatch-ppc64be-linux.S 2018-05-30 22:39:37.951096498 -0500
-@@ -30,12 +30,21 @@
-
- #include "pub_core_basics_asm.h"
-
--#if defined(VGP_ppc64be_linux)
-+#if defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
-
- #include "pub_core_dispatch_asm.h"
- #include "pub_core_transtab_asm.h"
- #include "libvex_guest_offsets.h" /* for OFFSET_ppc64_CIA */
-
-+/* NOTE: PPC64 supports Big Endian and Little Endian. It also supports the
-+ ELF version 1 and ELF version 2 APIs.
-+
-+ Currently LE uses ELF version 2 and BE uses ELF version 1. However,
-+ BE and LE may support the other ELF version in the future. So, the
-+ _CALL_ELF is used in the assembly function to enable code for a
-+ specific ELF version independently of the endianness of the machine.
-+ The test "#if _CALL_ELF == 2" checks if ELF version 2 is being used.
-+*/
-
- /* References to globals via the TOC */
-
-@@ -75,14 +84,26 @@
- .section ".text"
- .align 2
- .globl VG_(disp_run_translations)
-+#if _CALL_ELF == 2
-+.type VG_(disp_run_translations),@function
-+VG_(disp_run_translations):
-+.type .VG_(disp_run_translations),@function
-+#else
- .section ".opd","aw"
- .align 3
- VG_(disp_run_translations):
- .quad .VG_(disp_run_translations),.TOC.@tocbase,0
- .previous
- .type .VG_(disp_run_translations),@function
-+#endif
- .globl .VG_(disp_run_translations)
- .VG_(disp_run_translations):
-+#if _CALL_ELF == 2
-+0: addis 2, 12,.TOC.-0b@ha
-+ addi 2,2,.TOC.-0b@l
-+ .localentry VG_(disp_run_translations), .-VG_(disp_run_translations)
-+#endif
-+
- /* r3 holds two_words */
- /* r4 holds guest_state */
- /* r5 holds host_addr */
-@@ -229,8 +250,13 @@
- /* make a stack frame for the code we are calling */
- stdu 1,-48(1)
-
-- /* Set up the guest state ptr */
-+ /* Set up the guest state ptr */
- mr 31,4 /* r31 (generated code gsp) = r4 */
-+#if _CALL_ELF == 2
-+/* for the LE ABI need to setup r2 and r12 */
-+0: addis 2, 12,.TOC.-0b@ha
-+ addi 2,2,.TOC.-0b@l
-+#endif
-
- /* and jump into the code cache. Chained translations in
- the code cache run, until for whatever reason, they can't
-@@ -385,6 +411,9 @@
- mtlr 0
- addi 1,1,624 /* stack_size */
- blr
-+#if _CALL_ELF == 2
-+ .size VG_(disp_run_translations),.-VG_(disp_run_translations)
-+#endif
-
-
- /*----------------------------------------------------*/
-@@ -395,15 +424,25 @@
- .section ".text"
- .align 2
- .globl VG_(disp_cp_chain_me_to_slowEP)
-- .section ".opd","aw"
-+#if _CALL_ELF == 2
-+ .type VG_(disp_cp_chain_me_to_slowEP),@function
-+ VG_(disp_cp_chain_me_to_slowEP):
-+#else
-+ .section ".opd","aw"
- .align 3
- VG_(disp_cp_chain_me_to_slowEP):
- .quad .VG_(disp_cp_chain_me_to_slowEP),.TOC.@tocbase,0
- .previous
-+#endif
- .type .VG_(disp_cp_chain_me_to_slowEP),@function
- .globl .VG_(disp_cp_chain_me_to_slowEP)
- .VG_(disp_cp_chain_me_to_slowEP):
-- /* We got called. The return address indicates
-+#if _CALL_ELF == 2
-+0: addis 2, 12,.TOC.-0b@ha
-+ addi 2,2,.TOC.-0b@l
-+ .localentry VG_(disp_cp_chain_me_to_slowEP), .-VG_(disp_cp_chain_me_to_slowEP)
-+#endif
-+ /* We got called. The return address indicates
- where the patching needs to happen. Collect
- the return address and, exit back to C land,
- handing the caller the pair (Chain_me_S, RA) */
-@@ -415,20 +454,33 @@
- */
- subi 7,7,20+4+4
- b .postamble
-+#if _CALL_ELF == 2
-+ .size VG_(disp_cp_chain_me_to_slowEP),.-VG_(disp_cp_chain_me_to_slowEP)
-+#endif
-
- /* ------ Chain me to fast entry point ------ */
- .section ".text"
- .align 2
- .globl VG_(disp_cp_chain_me_to_fastEP)
-- .section ".opd","aw"
-+#if _CALL_ELF == 2
-+ .type VG_(disp_cp_chain_me_to_fastEP),@function
-+VG_(disp_cp_chain_me_to_fastEP):
-+#else
-+ .section ".opd","aw"
- .align 3
- VG_(disp_cp_chain_me_to_fastEP):
- .quad .VG_(disp_cp_chain_me_to_fastEP),.TOC.@tocbase,0
- .previous
-+#endif
- .type .VG_(disp_cp_chain_me_to_fastEP),@function
- .globl .VG_(disp_cp_chain_me_to_fastEP)
- .VG_(disp_cp_chain_me_to_fastEP):
-- /* We got called. The return address indicates
-+#if _CALL_ELF == 2
-+0: addis 2, 12,.TOC.-0b@ha
-+ addi 2,2,.TOC.-0b@l
-+ .localentry VG_(disp_cp_chain_me_to_fastEP), .-VG_(disp_cp_chain_me_to_fastEP)
-+#endif
-+ /* We got called. The return address indicates
- where the patching needs to happen. Collect
- the return address and, exit back to C land,
- handing the caller the pair (Chain_me_S, RA) */
-@@ -440,20 +492,33 @@
- */
- subi 7,7,20+4+4
- b .postamble
-+#if _CALL_ELF == 2
-+ .size VG_(disp_cp_chain_me_to_fastEP),.-VG_(disp_cp_chain_me_to_fastEP)
-+#endif
-
- /* ------ Indirect but boring jump ------ */
- .section ".text"
- .align 2
- .globl VG_(disp_cp_xindir)
-- .section ".opd","aw"
-+#if _CALL_ELF == 2
-+ .type VG_(disp_cp_xindir),@function
-+VG_(disp_cp_xindir):
-+#else
-+ .section ".opd","aw"
- .align 3
- VG_(disp_cp_xindir):
- .quad .VG_(disp_cp_xindir),.TOC.@tocbase,0
- .previous
-+#endif
- .type .VG_(disp_cp_xindir),@function
- .globl .VG_(disp_cp_xindir)
- .VG_(disp_cp_xindir):
-- /* Where are we going? */
-+#if _CALL_ELF == 2
-+0: addis 2, 12,.TOC.-0b@ha
-+ addi 2,2,.TOC.-0b@l
-+ .localentry VG_(disp_cp_xindir), .-VG_(disp_cp_xindir)
-+#endif
-+ /* Where are we going? */
- ld 3,OFFSET_ppc64_CIA(31)
-
- /* stats only */
-@@ -479,6 +544,9 @@
- /* Found a match. Jump to .host. */
- mtctr 7
- bctr
-+#if _CALL_ELF == 2
-+ .size VG_(disp_cp_xindir),.-VG_(disp_cp_xindir)
-+#endif
-
- .fast_lookup_failed:
- /* stats only */
-@@ -496,39 +564,64 @@
- .section ".text"
- .align 2
- .globl VG_(disp_cp_xassisted)
-- .section ".opd","aw"
-+#if _CALL_ELF == 2
-+ .type VG_(disp_cp_xassisted),@function
-+VG_(disp_cp_xassisted):
-+#else
-+ .section ".opd","aw"
- .align 3
- VG_(disp_cp_xassisted):
- .quad .VG_(disp_cp_xassisted),.TOC.@tocbase,0
- .previous
-- .type .VG_(disp_cp_xassisted),@function
-+#endif
-+#if _CALL_ELF == 2
-+0: addis 2, 12,.TOC.-0b@ha
-+ addi 2,2,.TOC.-0b@l
-+ .localentry VG_(disp_cp_xassisted), .-VG_(disp_cp_xassisted)
-+#endif
-+ .type .VG_(disp_cp_xassisted),@function
- .globl .VG_(disp_cp_xassisted)
- .VG_(disp_cp_xassisted):
- /* r31 contains the TRC */
- mr 6,31
- li 7,0
- b .postamble
-+#if _CALL_ELF == 2
-+ .size VG_(disp_cp_xassisted),.-VG_(disp_cp_xassisted)
-+#endif
-
- /* ------ Event check failed ------ */
- .section ".text"
- .align 2
- .globl VG_(disp_cp_evcheck_fail)
-- .section ".opd","aw"
-+#if _CALL_ELF == 2
-+ .type VG_(disp_cp_evcheck_fail),@function
-+VG_(disp_cp_evcheck_fail):
-+#else
-+ .section ".opd","aw"
- .align 3
- VG_(disp_cp_evcheck_fail):
- .quad .VG_(disp_cp_evcheck_fail),.TOC.@tocbase,0
- .previous
-+#endif
-+#if _CALL_ELF == 2
-+0: addis 2, 12,.TOC.-0b@ha
-+ addi 2,2,.TOC.-0b@l
-+ .localentry VG_(disp_cp_evcheck_fail), .-VG_(disp_cp_evcheck_fail)
-+#endif
- .type .VG_(disp_cp_evcheck_fail),@function
- .globl .VG_(disp_cp_evcheck_fail)
- .VG_(disp_cp_evcheck_fail):
- li 6,VG_TRC_INNER_COUNTERZERO
- li 7,0
- b .postamble
-+#if _CALL_ELF == 2
-+ .size VG_(disp_cp_evcheck_fail),.-VG_(disp_cp_evcheck_fail)
-+#endif
-
--
- .size .VG_(disp_run_translations), .-.VG_(disp_run_translations)
-
--#endif // defined(VGP_ppc64be_linux)
-+#endif // defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
-
- /* Let the linker know we don't need an executable stack */
- MARK_STACK_NO_EXEC
diff --git a/user/valgrind/suppressions.patch b/user/valgrind/suppressions.patch
new file mode 100644
index 000000000..a91b93fdf
--- /dev/null
+++ b/user/valgrind/suppressions.patch
@@ -0,0 +1,24 @@
+--- valgrind-3.13.0/configure.ac.old 2017-06-15 13:37:01.000000000 +0000
++++ valgrind-3.13.0/configure.ac 2018-10-02 21:46:48.710000000 +0000
+@@ -1034,7 +1034,7 @@
+ musl)
+ AC_MSG_RESULT(Musl)
+ AC_DEFINE([MUSL_LIBC], 1, [Define to 1 if you're using Musl libc])
+- # no DEFAULT_SUPP file yet for musl libc.
++ DEFAULT_SUPP="musl.supp ${DEFAULT_SUPP}"
+ ;;
+ 2.0|2.1|*)
+ AC_MSG_RESULT([unsupported version ${GLIBC_VERSION}])
+--- /dev/null 2018-07-03 06:46:12.010000000 +0000
++++ valgrind-3.13.0/musl.supp 2018-10-02 21:44:57.240000000 +0000
+@@ -0,0 +1,10 @@
++# musl does not free `dso` structs allocated during linking on exit.
++{
++ musl:dynlinker
++ Memcheck:Leak
++ match-leak-kinds: reachable
++ fun:calloc
++ ...
++ fun:__dls3
++ obj:/lib/ld-musl-*
++}
diff --git a/user/vlc/APKBUILD b/user/vlc/APKBUILD
index dea31e948..7db6632a1 100644
--- a/user/vlc/APKBUILD
+++ b/user/vlc/APKBUILD
@@ -3,7 +3,7 @@
# Maintainer: A. Wilcox <awilfox@adelielinux.org>
pkgname=vlc
pkgver=3.0.4
-pkgrel=0
+pkgrel=1
pkgdesc="Multi-platform MPEG, VCD/DVD, and DivX player"
triggers="vlc-libs.trigger=/usr/lib/vlc/plugins"
pkgusers="vlc"
diff --git a/user/vte/APKBUILD b/user/vte/APKBUILD
index 91e0cac34..d25e349b1 100644
--- a/user/vte/APKBUILD
+++ b/user/vte/APKBUILD
@@ -1,7 +1,7 @@
# Contributor: Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com>
# Maintainer: Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com>
pkgname=vte
-pkgver=0.54.0
+pkgver=0.54.1
pkgrel=0
pkgdesc="Virtual terminal emulator library for Gnome"
url="https://www.gnome.org"
@@ -35,5 +35,5 @@ package() {
make DESTDIR="$pkgdir" install
}
-sha512sums="69dd0caae4eacc179f84eccf98625a31140286beca4244a8f06420bd36ac62dcaddf9e9d8b114549ca97927e94b562df3e7daa9fad971484f05ebdd1c0f7b787 vte-0.54.0.tar.xz
+sha512sums="5cb866e75c35e1b5728d17b0433641ceb4837495d59185a04fde9dd8c9849ab905a6b2718a50b27cc70323c7a6c5db31a808816576c30d7f18ece889a329fb61 vte-0.54.1.tar.xz
4987254439a136f66a7b7be1300f5efbf85db74bdb64fdd8d0c9a555173a172b4fd519174f932e73d58a2618ef37273e82fe681bb129891f2792a414025f6c61 exitcode.patch"
diff --git a/user/xautolock/APKBUILD b/user/xautolock/APKBUILD
new file mode 100644
index 000000000..71fd17994
--- /dev/null
+++ b/user/xautolock/APKBUILD
@@ -0,0 +1,30 @@
+# Contributor: Johannes Matheis <jomat+alpinebuild@jmt.gr>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=xautolock
+pkgver=2.2
+pkgrel=4
+pkgdesc="An automatic X screen-locker/screen-saver"
+url="http://ibiblio.org/pub/Linux/X11/screensavers/"
+arch="all" # this might not build on aarch64? removed from alpine commit
+license="GPL-2.0"
+options="!check" # This package has no testsuite
+depends=""
+makedepends="$depends_dev imake xorg-server-dev libxscrnsaver-dev xorg-cf-files"
+subpackages="$pkgname-doc"
+source="https://www.ibiblio.org/pub/linux/X11/screensavers/xautolock-$pkgver.tgz
+ processwait.patch"
+
+build() {
+ cd "$builddir"
+ xmkmf
+ make
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ make MANPATH=/usr/share/man DESTDIR="$pkgdir" install.man
+}
+
+sha512sums="5f9dcc25cda706610e77a74235c4b421ca3a833d154b1a269057f0774579e1c6ec36fe0e5be5fadd6942ce8c1640a760f891397586b162e6024b524635153d04 xautolock-2.2.tgz
+3242d01e394f8b84946d7d7fca9a87f2e17783352e180e43470737d3a2e4a7eb15f1a514dcd98118b6491895ab56d3cef29d4abb32b5a341c73efaa2a7ff323a processwait.patch"
diff --git a/user/xautolock/processwait.patch b/user/xautolock/processwait.patch
new file mode 100644
index 000000000..cb49f8d88
--- /dev/null
+++ b/user/xautolock/processwait.patch
@@ -0,0 +1,33 @@
+--- xautolock/src/engine.c.orig 2014-08-28 12:50:56.086307943 +0000
++++ xautolock/src/engine.c 2014-08-28 12:50:59.496333650 +0000
+@@ -209,24 +209,24 @@ evaluateTriggers (Display* d)
+ {
+ #else /* VMS */
+ if (lockerPid)
+ {
+-#if !defined (UTEKV) && !defined (SYSV) && !defined (SVR4)
++#if (!defined (UTEKV) && !defined (SYSV) && !defined (SVR4)) && defined (__GLIBC__)
+ union wait status; /* childs process status */
+-#else /* !UTEKV && !SYSV && !SVR4 */
++#else /* (!UTEKV && !SYSV && !SVR4) && __GLIBC__ */
+ int status = 0; /* childs process status */
+-#endif /* !UTEKV && !SYSV && !SVR4 */
++#endif /* (!UTEKV && !SYSV && !SVR4) && __GLIBC__ */
+
+ if (unlockNow && !disabled)
+ {
+ (void) kill (lockerPid, SIGTERM);
+ }
+
+-#if !defined (UTEKV) && !defined (SYSV) && !defined (SVR4)
++#if (!defined (UTEKV) && !defined (SYSV) && !defined (SVR4)) && defined (__GLIBC__)
+ if (wait3 (&status, WNOHANG, 0))
+-#else /* !UTEKV && !SYSV && !SVR4 */
++#else /* (!UTEKV && !SYSV && !SVR4) && __GLIBC__ */
+ if (waitpid (-1, &status, WNOHANG))
+-#endif /* !UTEKV && !SYSV && !SVR4 */
++#endif /* (!UTEKV && !SYSV && !SVR4) && __GLIBC__ */
+ {
+ /*
+ * If the locker exited normally, we disable any pending kill
+ * trigger. Otherwise, we assume that it either has crashed or
diff --git a/user/xcb-util-xrm/APKBUILD b/user/xcb-util-xrm/APKBUILD
new file mode 100644
index 000000000..d368f1544
--- /dev/null
+++ b/user/xcb-util-xrm/APKBUILD
@@ -0,0 +1,37 @@
+# Contributor: William Pitcock <nenolod@dereferenced.org>
+# Contributor: Jakub Skrzypnik <j.skrzypnik@openmailbox.org>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=xcb-util-xrm
+pkgver=1.3
+pkgrel=0
+pkgdesc="Utility functions for the X resource manager"
+url="https://github.com/Airblader/xcb-util-xrm"
+arch="all"
+license="MIT"
+makedepends="m4 bsd-compat-headers libx11-dev libxcb-dev util-macros xcb-util-dev"
+source="https://github.com/Airblader/$pkgname/releases/download/v$pkgver/$pkgname-$pkgver.tar.gz"
+subpackages="$pkgname-dev"
+
+build() {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var
+ make
+}
+
+check() {
+ cd "$builddir"
+ make check
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+sha512sums="d8a427ed6d1f1568ce58db9b89284e4fafcc7b7929c31bccf70e5ccd91f3f6cb9c87ff25c4e64d95b0c6215cfecde6c0ee2b3a18759817aea3169ba87602c5de xcb-util-xrm-1.3.tar.gz"
diff --git a/user/xinput/APKBUILD b/user/xinput/APKBUILD
new file mode 100644
index 000000000..2cb5822fe
--- /dev/null
+++ b/user/xinput/APKBUILD
@@ -0,0 +1,33 @@
+# Contributor: Johannes Matheis <jomat+alpinebuild@jmt.gr>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=xinput
+pkgver=1.6.2
+pkgrel=0
+pkgdesc="Utility to configure and test XInput devices"
+url="http://xorg.freedesktop.org/"
+arch="all"
+options="!check" # No test suite.
+license="X11"
+makedepends="util-macros libx11-dev libxext-dev libxi-dev libxrandr-dev
+ libxinerama-dev"
+subpackages="$pkgname-doc"
+source="http://www.x.org/archive/individual/app/$pkgname-$pkgver.tar.bz2"
+
+build() {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var
+ make
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+}
+
+sha512sums="dbef3a87dd47bb8c593f1305bea7978697a12434a4992584e4124d745bb366812366b44fc205159137a3db6f7b8338effd1b90641a194497b19159b9fd91939e xinput-1.6.2.tar.bz2"
diff --git a/user/xmoto/APKBUILD b/user/xmoto/APKBUILD
new file mode 100644
index 000000000..7efa7a9c6
--- /dev/null
+++ b/user/xmoto/APKBUILD
@@ -0,0 +1,58 @@
+# Contributor: A. Wilcox <awilfox@adelielinux.org>
+# Maintainer: A. Wilcox <awilfox@adelielinux.org>
+pkgname=xmoto
+pkgver=0.5.11
+pkgrel=0
+pkgdesc="Challenging 2D motocross platform game"
+url="https://xmoto.tuxfamily.org/"
+arch="all"
+license="GPL-2.0+"
+depends=""
+makedepends="bzip2-dev curl-dev glu-dev libjpeg-turbo-dev libpng-dev
+ libxdg-basedir-dev libxml2-dev lua5.3-dev mesa-dev ode-dev sdl-dev
+ sdl_mixer-dev sdl_net-dev sdl_ttf-dev sqlite-dev zlib-dev"
+subpackages="$pkgname-doc $pkgname-lang"
+source="http://download.tuxfamily.org/xmoto/xmoto/0.5.11/xmoto-$pkgver-src.tar.gz
+ stupid-lua.patch
+ utf8.patch
+ "
+
+prepare() {
+ cd "$builddir"
+ default_prepare
+ update_config_sub
+ rm -r src/ode
+}
+
+build() {
+ cd "$builddir"
+ ./bootstrap
+ CPPFLAGS="$CPPFLAGS -D_GLIBCXX_USE_CXX11_ABI=0" \
+ LDFLAGS="$LDFLAGS $(pkg-config --libs lua)" \
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --localstatedir=/var
+ make
+}
+
+check() {
+ cd "$builddir"
+ make check
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ install -D -m644 "$builddir"/extra/xmoto.desktop \
+ "$pkgdir"/usr/share/applications/xmoto.desktop
+ install -D -m644 "$builddir"/extra/xmoto.xpm \
+ "$pkgdir"/usr/share/icons/hicolor/48x48/apps/xmoto.xpm
+}
+
+sha512sums="7046745e8f7a045fa2ce1deb3fd75b73b233dc1092f5ecd6dd4e42938f70269a93a3a623a39a1f0520c90643a42dc1ce93c43ad07bf225ff6c50741cc02511f6 xmoto-0.5.11-src.tar.gz
+34dc4d83df72d0323d2995b35faacd6c097f1f381805a724c6a8a1edbf59c894e3db68057ef68b65f659d73e9d0976263bc5229b0502281d7c748519de86c55b stupid-lua.patch
+a43cafba12864bc2efd978fcef69ac5256b625dd581f02a93bafae7c4edaad9ebcadbd597fe31db77c85747400405c9fb6b55e494b9d6ded893e5d48f37e57ec utf8.patch"
diff --git a/user/xmoto/stupid-lua.patch b/user/xmoto/stupid-lua.patch
new file mode 100644
index 000000000..d99a1ed4a
--- /dev/null
+++ b/user/xmoto/stupid-lua.patch
@@ -0,0 +1,41 @@
+--- xmoto-0.5.11/configure.in.old 2014-03-29 10:35:24.000000000 +0000
++++ xmoto-0.5.11/configure.in 2018-09-29 03:51:05.210000000 +0000
+@@ -174,6 +174,7 @@
+ AC_CHECK_HEADER(lua50/lua.h, AC_DEFINE(HAVE_LUA50_LUA_H) [USE_LUA_VERSION="5.0"])
+ AC_CHECK_HEADER(lua51/lua.h, AC_DEFINE(HAVE_LUA51_LUA_H) [USE_LUA_VERSION="5.1"])
+ AC_CHECK_HEADER(lua5.1/lua.h, AC_DEFINE(HAVE_LUA5_1_LUA_H)[USE_LUA_VERSION="5.1"])
++AC_CHECK_HEADER(lua5.3/lua.h, AC_DEFINE(HAVE_LUA5_3_LUA_H)[USE_LUA_VERSION="5.3"])
+ AC_DEFINE(LUA_COMPAT_MODULE, 1)
+
+ AC_LANG_PUSH([C++])
+--- xmoto-0.5.11/src/include/xm_lua.h.old 2011-10-11 20:18:17.000000000 +0000
++++ xmoto-0.5.11/src/include/xm_lua.h 2018-09-29 03:51:49.230000000 +0000
+@@ -4,7 +4,11 @@
+ #include "lauxlib.h"
+ #include "lualib.h"
+ #else
+- #if defined(HAVE_LUA5_1_LUA_H)
++ #if defined(HAVE_LUA5_3_LUA_H)
++ #include <lua5.3/lua.h>
++ #include <lua5.3/lauxlib.h>
++ #include <lua5.3/lualib.h>
++ #elif defined(HAVE_LUA5_1_LUA_H)
+ #include <lua5.1/lua.h>
+ #include <lua5.1/lauxlib.h>
+ #include <lua5.1/lualib.h>
+--- xmoto-0.5.11/src/LuaLibBase.cpp.old 2014-03-29 09:46:24.000000000 +0000
++++ xmoto-0.5.11/src/LuaLibBase.cpp 2018-09-30 23:34:51.800000000 +0000
+@@ -42,7 +42,13 @@
+ luaL_requiref(m_pL, LUA_TABLIBNAME, luaopen_table, 1);
+ #endif
+
++#if LUA_VERSION_NUM < 503
+ luaL_openlib(m_pL, i_libname.c_str(), i_reg, 0);
++#else
++ lua_newtable(m_pL);
++ luaL_setfuncs(m_pL, i_reg, 0);
++ lua_setglobal(m_pL, i_libname.c_str());
++#endif
+ }
+
+ LuaLibBase::~LuaLibBase() {
diff --git a/user/xmoto/utf8.patch b/user/xmoto/utf8.patch
new file mode 100644
index 000000000..535bb515e
--- /dev/null
+++ b/user/xmoto/utf8.patch
@@ -0,0 +1,13 @@
+--- xmoto-0.5.11/src/helpers/utf8.h.old 2011-10-11 20:18:14.000000000 +0000
++++ xmoto-0.5.11/src/helpers/utf8.h 2018-09-30 23:29:10.310000000 +0000
+@@ -18,8 +18,8 @@
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ =============================================================================*/
+
+-#ifndef __UTF8_H__
+-#define __UTF8_H__
++#ifndef __HELPER_UTF8_H__
++#define __HELPER_UTF8_H__
+
+ #include <vector>
+ #include <string>
diff --git a/user/xorg-cf-files/APKBUILD b/user/xorg-cf-files/APKBUILD
new file mode 100644
index 000000000..5a438d2bf
--- /dev/null
+++ b/user/xorg-cf-files/APKBUILD
@@ -0,0 +1,38 @@
+# Contributor: Johannes Matheis <jomat+alpinebuild@jmt.gr>
+# Maintainer: Dan Theisen <djt@hxx.in>
+pkgname=xorg-cf-files
+pkgver=1.0.6
+pkgrel=0
+pkgdesc="Data files for the imake utility"
+url="http://xorg.freedesktop.org/"
+arch="noarch"
+license="X11"
+options="!check" # This package has no testsuite
+depends=""
+makedepends=""
+subpackages="$pkgname-doc"
+source="http://xorg.freedesktop.org/releases/individual/util/${pkgname}-${pkgver}.tar.bz2"
+
+build() {
+ cd "$builddir"
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --localstatedir=/var
+ make
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ install -m755 -d "${pkgdir}/usr/share/licenses/${pkgname}"
+ install -m644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/"
+}
+
+md5sums="28649f34fa23143f1945aa2750e1472a xorg-cf-files-1.0.6.tar.bz2"
+sha256sums="4dcf5a9dbe3c6ecb9d2dd05e629b3d373eae9ba12d13942df87107fdc1b3934d xorg-cf-files-1.0.6.tar.bz2"
+sha512sums="1749a5fbcda2c15c300028abce79a3304cfb10f215bf98cf30558144eb64f9fa06a69203159f44405224ed567ac5bc0ff1222e3656367f69acc99f44871424fa xorg-cf-files-1.0.6.tar.bz2"
diff --git a/user/xterm/APKBUILD b/user/xterm/APKBUILD
index 57656637c..7e35c3d49 100644
--- a/user/xterm/APKBUILD
+++ b/user/xterm/APKBUILD
@@ -1,7 +1,7 @@
# Contributor: Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com>
# Maintainer: Kiyoshi Aman <kiyoshi.aman+adelie@gmail.com>
pkgname=xterm
-pkgver=335
+pkgver=337
pkgrel=0
pkgdesc="An X-based terminal emulator"
url="https://invisible-island.net/xterm/"
@@ -31,4 +31,4 @@ package() {
make DESTDIR="$pkgdir" install
}
-sha512sums="386c3f4c9b3ee7750c4f03316fc94dfc6601d82b0fbac5714031e9e3c6f1acf5c949689fcc58deb8569516977eb88173356d3c890a263b7a1d0f383190a43362 xterm-335.tgz"
+sha512sums="fad31aa971a42cf38d3e3db2edc615b408d92226c305654b9276592c6dee075f31c7f082a3f549284f1685a31d5d9dedbda99c2c308a90bd741958f862806609 xterm-337.tgz"