From 1f6216d991bce5b6df02a7934ae17912313ab0d9 Mon Sep 17 00:00:00 2001
From: Max Rees <maxcrees@me.com>
Date: Thu, 18 Jul 2019 05:55:06 -0400
Subject: [PATCH 1/6] user/musl-obstack: rebuild as PIC

---
 user/musl-obstack/APKBUILD | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/user/musl-obstack/APKBUILD b/user/musl-obstack/APKBUILD
index a7466fc965..47ca39a437 100644
--- a/user/musl-obstack/APKBUILD
+++ b/user/musl-obstack/APKBUILD
@@ -2,7 +2,7 @@
 # Maintainer: A. Wilcox <awilfox@adelielinux.org>
 pkgname=musl-obstack
 pkgver=1.1
-pkgrel=0
+pkgrel=1
 pkgdesc="Standalone library to implement obstack functionality"
 url=" "
 arch="all"
@@ -13,7 +13,7 @@ subpackages="$pkgname-dev"
 source="musl-obstack-$pkgver.tar.gz::https://github.com/pullmoll/musl-obstack/archive/v$pkgver.tar.gz"
 
 build() {
-	cd "$builddir"
+	export CFLAGS="$CFLAGS -fPIC"
 	./bootstrap.sh
 	./configure \
 		--build=$CBUILD \
@@ -26,12 +26,10 @@ build() {
 }
 
 check() {
-	cd "$builddir"
 	make check
 }
 
 package() {
-	cd "$builddir"
 	make DESTDIR="$pkgdir" install
 }
 
-- 
GitLab


From 17ca3641eaad94f05d1c9f66593c67e425268050 Mon Sep 17 00:00:00 2001
From: Max Rees <maxcrees@me.com>
Date: Thu, 18 Jul 2019 05:56:15 -0400
Subject: [PATCH 2/6] user/argp-standalone: rebuild as PIC

---
 user/argp-standalone/APKBUILD | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/user/argp-standalone/APKBUILD b/user/argp-standalone/APKBUILD
index 846ed4c61c..8bb36de5f5 100644
--- a/user/argp-standalone/APKBUILD
+++ b/user/argp-standalone/APKBUILD
@@ -2,7 +2,7 @@
 # Maintainer: A. Wilcox <awilfox@adelielinux.org>
 pkgname=argp-standalone
 pkgver=1.3
-pkgrel=4
+pkgrel=5
 pkgdesc="Hierarchial argument parsing library broken out from glibc"
 url="http://www.lysator.liu.se/~nisse/misc/"
 arch="all"
@@ -15,15 +15,13 @@ source="http://www.lysator.liu.se/~nisse/misc/$pkgname-$pkgver.tar.gz
 	gnu89-inline.patch
 	"
 
-builddir="$srcdir"/$pkgname-$pkgver
 prepare() {
 	default_prepare
-	cd "$builddir"
 	autoreconf -vif
 }
 
 build() {
-	cd "$builddir"
+	export CFLAGS="$CFLAGS -fPIC"
 	./configure \
 		--build=$CBUILD \
 		--host=$CHOST \
@@ -39,7 +37,6 @@ check() {
 }
 
 package() {
-	cd "$builddir"
 	install -D -m644 argp.h "$pkgdir"/usr/include/argp.h
 	install -D -m755 libargp.a "$pkgdir"/usr/lib/libargp.a
 }
-- 
GitLab


From 420a64fe15922629a54e7d38cdedbf1fc86ee8ff Mon Sep 17 00:00:00 2001
From: Max Rees <maxcrees@me.com>
Date: Thu, 18 Jul 2019 06:15:43 -0400
Subject: [PATCH 3/6] experimental/elfutils: new package

---
 experimental/elfutils/APKBUILD                |  90 ++++++++++++++
 experimental/elfutils/error.h                 |  29 +++++
 experimental/elfutils/extmatch.patch          |  24 ++++
 experimental/elfutils/fix-aarch64_fregs.patch |  14 +++
 experimental/elfutils/fix-uninitialized.patch |  10 ++
 experimental/elfutils/musl-cdefs.patch        |  23 ++++
 experimental/elfutils/musl-fts-obstack.patch  | 115 ++++++++++++++++++
 experimental/elfutils/musl-macros.patch       |  66 ++++++++++
 experimental/elfutils/musl-qsort_r.patch      |  65 ++++++++++
 experimental/elfutils/musl-strerror_r.patch   |  19 +++
 experimental/elfutils/musl-strndupa.patch     |  18 +++
 .../elfutils/test-disable-backtrace.patch     |  59 +++++++++
 .../elfutils/test-disable-biarch.patch        |   9 ++
 13 files changed, 541 insertions(+)
 create mode 100644 experimental/elfutils/APKBUILD
 create mode 100644 experimental/elfutils/error.h
 create mode 100644 experimental/elfutils/extmatch.patch
 create mode 100644 experimental/elfutils/fix-aarch64_fregs.patch
 create mode 100644 experimental/elfutils/fix-uninitialized.patch
 create mode 100644 experimental/elfutils/musl-cdefs.patch
 create mode 100644 experimental/elfutils/musl-fts-obstack.patch
 create mode 100644 experimental/elfutils/musl-macros.patch
 create mode 100644 experimental/elfutils/musl-qsort_r.patch
 create mode 100644 experimental/elfutils/musl-strerror_r.patch
 create mode 100644 experimental/elfutils/musl-strndupa.patch
 create mode 100644 experimental/elfutils/test-disable-backtrace.patch
 create mode 100644 experimental/elfutils/test-disable-biarch.patch

diff --git a/experimental/elfutils/APKBUILD b/experimental/elfutils/APKBUILD
new file mode 100644
index 0000000000..4a129216fb
--- /dev/null
+++ b/experimental/elfutils/APKBUILD
@@ -0,0 +1,90 @@
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: Max Rees <maxcrees@me.com>
+pkgname=elfutils
+pkgver=0.176
+pkgrel=0
+pkgdesc="A collection of utilities and DSOs to handle ELF files and DWARF data"
+url="https://sourceware.org/elfutils/"
+arch="all"
+license="GPL-3.0+ AND (GPL-2.0+ or LGPL-3.0+) AND LGPL-2.1+"
+depends=""
+makedepends="argp-standalone bsd-compat-headers bzip2-dev flex
+	fts-dev musl-obstack-dev xz-dev zlib-dev"
+subpackages="$pkgname-dev $pkgname-lang $pkgname-tools"
+source="https://sourceware.org/elfutils/ftp/$pkgver/$pkgname-$pkgver.tar.bz2
+	extmatch.patch
+	fix-aarch64_fregs.patch
+	fix-uninitialized.patch
+	musl-cdefs.patch
+	musl-fts-obstack.patch
+	musl-macros.patch
+	musl-qsort_r.patch
+	musl-strerror_r.patch
+	musl-strndupa.patch
+	test-disable-backtrace.patch
+	test-disable-biarch.patch
+	error.h"
+
+# Internal only - should not be exposed to other packages
+somask="libebl_aarch64-$pkgver.so
+	libebl_alpha-$pkgver.so
+	libebl_arm-$pkgver.so
+	libebl_bpf-$pkgver.so
+	libebl_i386-$pkgver.so
+	libebl_ia64-$pkgver.so
+	libebl_m68k-$pkgver.so
+	libebl_ppc-$pkgver.so
+	libebl_ppc64-$pkgver.so
+	libebl_riscv-$pkgver.so
+	libebl_s390-$pkgver.so
+	libebl_sh-$pkgver.so
+	libebl_sparc-$pkgver.so
+	libebl_tilegx-$pkgver.so
+	libebl_x86_64-$pkgver.so"
+
+prepare() {
+	default_prepare
+	autoreconf -vif
+	cp "$srcdir"/error.h lib
+	cp "$srcdir"/error.h src
+}
+
+build() {
+	export CFLAGS="$CFLAGS -Wno-error -g"
+	./configure \
+		--build=$CBUILD \
+		--host=$CHOST \
+		--prefix=/usr \
+		--sysconfdir=/etc \
+		--mandir=/usr/share/man \
+		--localstatedir=/var
+	make
+}
+
+check() {
+	make check
+}
+
+package() {
+	make DESTDIR="$pkgdir" install
+}
+
+tools() {
+	pkgdesc="$pkgdesc (command-line tools)"
+	mkdir -p "$subpkgdir"/usr/bin
+	mv "$pkgdir"/usr/bin/eu-* "$subpkgdir"/usr/bin
+}
+
+sha512sums="7f032913be363a43229ded85d495dcf7542b3c85974aaaba0d984228dc9ac1721da3dc388d3fa02325a80940161db7e9ad2c9e4521a424ad8a7d050c0902915b  elfutils-0.176.tar.bz2
+c3676b0b8b40d6e437f5d88c0d658dc0829ec97d1955e4bbf96f4cff9ee9001b8f2f06174450ae7aa5858b91c7905bdbd49073b561c346416132338a9c94731b  fix-aarch64_fregs.patch
+8b421bc411fd240ada1d6f4010e222cb430bceebea613b79dc96d8244835b87272e9964f95c6ac54d054978fdc170f3b852606c207804df7fc261bb544f61c53  fix-uninitialized.patch
+3d8c7aee5d509486b680c1eb8903052060386520e8576068a8144019857933b86bd708c2a0a44c383667c4205888435402733dbd8ea0a88c32223a639b0404f0  extmatch.patch
+8c5c2fab616a01df7b57c9338122eb054503c0d76808d1914ae112106c2e73b9cef517719242b8ee3a78479e73e97187fe42d6e897e0b822e5a0a9e30b2246b9  musl-cdefs.patch
+7a22dc1a3423d1e4dd8f1ddbc5c1e1ee87db679d7b9fba0f7e695c207c9fefef5cacdee3d7c5b64ff2751a1d5b155751f0e77ee9af844048a32a8dd890623ef2  musl-fts-obstack.patch
+37a8cd13262115b64b51d47e9d5667185155d1b1159aa333ac34df7cc6d7d71d9c809a9fd99094e5f4102c6535a32f75159ac80f4986e029a0e2cd49b76884d3  musl-macros.patch
+38e5403d645fe2da4df9425c6a3fb00dc8ca8016ed86a19482de3d6a2e4200f3953e628b0a6bc33d3d3ce25733b7171ad887448e21981c0ae39343c163fdff41  musl-qsort_r.patch
+a0d986100c8ff2ef0595645ec1b2eeb1d517b7442aef5f349ebf27fcb66c76e51fadeda25bed5f04b4bb16a61aa23ac6e86a1f34a0087d2136acf0f64c3fa4d1  musl-strerror_r.patch
+83ad42f672e1d5ca479bc44166c423624ab14d70f74bd6f703ef5fd98694ae201db975026ae8bd507d87b038e3403d878c90da40cfcf6d2364bbd3cad8cedb5b  musl-strndupa.patch
+edfeaad36b52997a43612b8bc2d26bcde7d2edb6b1b932e42f88a859c46747eb57a4ae963a98157e60d89f3d4f04efe50a69ea91cc0552cb5b0db17e8cc833c1  test-disable-backtrace.patch
+d3263c42b1638a416e95c2b8e68b15a9723e748490c8eca727da94bf7bb3dd8389222dd01bf69612ba45a20114ee1427d77935c41436d1ca9180fcfd71d3cdfe  test-disable-biarch.patch
+b33d7f210b9652b7b919afb32b4674ca125b660bf5f81fafb4e4e8405ea16be74ce85f653e6c0ac83e5fff1b192e82e273c5b5baa3802fdc7602edfa1086936d  error.h"
diff --git a/experimental/elfutils/error.h b/experimental/elfutils/error.h
new file mode 100644
index 0000000000..8bae4c7db2
--- /dev/null
+++ b/experimental/elfutils/error.h
@@ -0,0 +1,29 @@
+#ifndef _ERROR_H_
+#define _ERROR_H_
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+static unsigned int error_message_count = 0;
+
+static inline void error(int status, int errnum, const char* format, ...)
+{
+	va_list ap;
+	fflush(stdout);
+	fprintf(stderr, "%s: ", program_invocation_name);
+	va_start(ap, format);
+	vfprintf(stderr, format, ap);
+	va_end(ap);
+	if (errnum)
+		fprintf(stderr, ": %s", strerror(errnum));
+	fprintf(stderr, "\n");
+	error_message_count++;
+	if (status)
+		exit(status);
+	fflush(stderr);
+}
+
+#endif	/* _ERROR_H_ */
diff --git a/experimental/elfutils/extmatch.patch b/experimental/elfutils/extmatch.patch
new file mode 100644
index 0000000000..ea9d3653f4
--- /dev/null
+++ b/experimental/elfutils/extmatch.patch
@@ -0,0 +1,24 @@
+--- elfutils-0.176/src/elfcompress.c	2019-02-15 15:46:47.000000000 +0000
++++ elfutils-0.176/src/elfcompress.c	2019-07-18 09:13:29.159806022 +0000
+@@ -134,8 +142,10 @@ parse_opt (int key, char *arg __attribut
+     case ARGP_KEY_SUCCESS:
+       if (type == T_UNSET)
+ 	type = T_COMPRESS_ZLIB;
+-      if (patterns == NULL)
+-	add_pattern (".?(z)debug*");
++      if (patterns == NULL) {
++	add_pattern (".debug*");
++	add_pattern (".zdebug*");
++      }
+       break;
+ 
+     case ARGP_KEY_NO_ARGS:
+@@ -1312,7 +1322,7 @@ main (int argc, char **argv)
+ 	N_("What type of compression to apply. TYPE can be 'none' (decompress), 'zlib' (ELF ZLIB compression, the default, 'zlib-gabi' is an alias) or 'zlib-gnu' (.zdebug GNU style compression, 'gnu' is an alias)"),
+ 	0 },
+       { "name", 'n', "SECTION", 0,
+-	N_("SECTION name to (de)compress, SECTION is an extended wildcard pattern (defaults to '.?(z)debug*')"),
++	N_("SECTION name to (de)compress, SECTION is an wildcard pattern (defaults to '.debug*' and '.zdebug*')"),
+ 	0 },
+       { "verbose", 'v', NULL, 0,
+ 	N_("Print a message for each section being (de)compressed"),
diff --git a/experimental/elfutils/fix-aarch64_fregs.patch b/experimental/elfutils/fix-aarch64_fregs.patch
new file mode 100644
index 0000000000..4007416391
--- /dev/null
+++ b/experimental/elfutils/fix-aarch64_fregs.patch
@@ -0,0 +1,14 @@
+It looks like fregs.vregs[] is an array of double?
+Casting to Dwarf_Word instead of & 0xFFFFFFF should do.
+
+--- a/backends/aarch64_initreg.c	2015-11-27 14:36:29.000000000 +0100
++++ b/backends/aarch64_initreg.c	2016-08-09 03:47:25.428560159 +0200
+@@ -82,7 +82,7 @@
+ 
+   Dwarf_Word dwarf_fregs[32];
+   for (int r = 0; r < 32; r++)
+-    dwarf_fregs[r] = fregs.vregs[r] & 0xFFFFFFFF;
++    dwarf_fregs[r] = (Dwarf_Word)fregs.vregs[r];
+ 
+   if (! setfunc (64, 32, dwarf_fregs, arg))
+     return false;
diff --git a/experimental/elfutils/fix-uninitialized.patch b/experimental/elfutils/fix-uninitialized.patch
new file mode 100644
index 0000000000..5bc174c86f
--- /dev/null
+++ b/experimental/elfutils/fix-uninitialized.patch
@@ -0,0 +1,10 @@
+--- a/libcpu/i386_disasm.c	2015-08-21 14:22:37.000000000 +0200
++++ b/libcpu/i386_disasm.c	2015-11-20 06:30:59.250629957 +0100
+@@ -710,6 +710,7 @@
+ 
+ 		case 'm':
+ 		  /* Mnemonic.  */
++		  str = mnebuf;
+ 
+ 		  if (unlikely (instrtab[cnt].mnemonic == MNE_INVALID))
+ 		    {
diff --git a/experimental/elfutils/musl-cdefs.patch b/experimental/elfutils/musl-cdefs.patch
new file mode 100644
index 0000000000..b74561f469
--- /dev/null
+++ b/experimental/elfutils/musl-cdefs.patch
@@ -0,0 +1,23 @@
+--- elfutils-0.176/libelf/elf.h	2019-02-15 10:46:47.000000000 -0500
++++ elfutils-0.176/libelf/elf.h	2019-07-18 01:52:14.789891340 -0400
+@@ -21,7 +21,9 @@
+ 
+ #include <features.h>
+ 
+-__BEGIN_DECLS
++#ifdef __cplusplus
++extern "C" {
++#endif
+ 
+ /* Standard ELF types.  */
+ 
+@@ -3915,6 +3917,8 @@ enum
+ #define R_METAG_TLS_LE_HI16	60
+ #define R_METAG_TLS_LE_LO16	61
+ 
+-__END_DECLS
++#ifdef __cplusplus
++}
++#endif
+ 
+ #endif	/* elf.h */
diff --git a/experimental/elfutils/musl-fts-obstack.patch b/experimental/elfutils/musl-fts-obstack.patch
new file mode 100644
index 0000000000..a9e5fec71d
--- /dev/null
+++ b/experimental/elfutils/musl-fts-obstack.patch
@@ -0,0 +1,115 @@
+--- a/configure.ac	2015-10-15 15:16:57.000000000 +0200
++++ b/configure.ac	2015-11-20 05:32:57.723901582 +0100
+@@ -305,6 +305,62 @@
+ fi
+ AC_SUBST([argp_LDADD])
+ 
++dnl Check if we have fts available from our libc
++AC_LINK_IFELSE(
++	[AC_LANG_PROGRAM(
++		[#if !defined(__x86_64__)
++		#undef  _FILE_OFFSET_BITS
++		#define _FILE_OFFSET_BITS 32
++		#endif
++		#include <fts.h>],
++		[FTS* fts = 0; return fts_close(fts); return 0;]
++		)],
++	[libc_has_fts="true"],
++	[libc_has_fts="false"]
++)
++
++dnl If our libc doesn't provide fts, then test for libfts
++if test "$libc_has_fts" = "false" ; then
++	AC_MSG_WARN("libc does not have fts")
++	AC_CHECK_LIB([fts], [fts_close], [have_fts="true"], [have_fts="false"])
++
++	if test "$have_fts" = "false"; then
++		AC_MSG_ERROR("no libfts found")
++	else
++		fts_LDADD="-lfts"
++	fi
++else
++	fts_LDADD=""
++fi
++AC_SUBST([fts_LDADD])
++
++dnl Check if we have obstack available from our libc
++AC_LINK_IFELSE(
++	[AC_LANG_PROGRAM(
++		[#include <obstack.h>],
++		[_obstack_begin(0, 0, 0, NULL, NULL); return 0;]
++		)],
++	[libc_has_obstack="true"],
++	[libc_has_obstack="false"]
++)
++
++dnl If our libc doesn't provide obstack, then test for libobstack
++if test "$libc_has_obstack" = "false" ; then
++	AC_MSG_WARN("libc does not have obstack")
++	AC_CHECK_LIB([obstack], [_obstack_begin], [have_obstack="true"], [have_obstack="false"])
++
++	if test "$have_obstack" = "false"; then
++		AC_MSG_ERROR("no libobstack found")
++	else
++		obstack_LDADD="-lobstack"
++	fi
++else
++	obstack_LDADD=""
++fi
++AC_SUBST([obstack_LDADD])
++
++dnl The directories with content.
++
+ dnl The directories with content.
+ 
+ dnl Documentation.
+--- a/src/Makefile.am.orig	2016-08-29 21:38:11.179295769 +0200
++++ b/src/Makefile.am	2016-08-03 18:19:47.000000000 +0200
+@@ -67,22 +67,22 @@
+ ar_no_Wstack_usage = yes
+ unstrip_no_Wstack_usage = yes
+ 
++readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(argp_LDADD) $(fts_LDADD) $(obstack_LDADD) -ldl
++nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(argp_LDADD) $(fts_LDADD) $(obstack_LDADD) -ldl \
+-readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(argp_LDADD) -ldl
+-nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(argp_LDADD) -ldl \
+ 	   $(demanglelib)
++size_LDADD = $(libelf) $(libeu) $(argp_LDADD) $(fts_LDADD) $(obstack_LDADD)
++strip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD) $(fts_LDADD) $(obstack_LDADD) -ldl
++elflint_LDADD  = $(libebl) $(libelf) $(libeu) $(argp_LDADD) $(fts_LDADD) $(obstack_LDADD) -ldl
++findtextrel_LDADD = $(libdw) $(libelf) $(libeu) $(argp_LDADD) $(fts_LDADD) $(obstack_LDADD)
++addr2line_LDADD = $(libdw) $(libelf) $(libeu) $(argp_LDADD) $(fts_LDADD) $(obstack_LDADD) $(demanglelib)
++elfcmp_LDADD = $(libebl) $(libelf) $(libeu) $(argp_LDADD) $(fts_LDADD) $(obstack_LDADD) -ldl
+-size_LDADD = $(libelf) $(libeu) $(argp_LDADD)
+-strip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD) -ldl
+-elflint_LDADD  = $(libebl) $(libelf) $(libeu) $(argp_LDADD) -ldl
+-findtextrel_LDADD = $(libdw) $(libelf) $(libeu) $(argp_LDADD)
+-addr2line_LDADD = $(libdw) $(libelf) $(libeu) $(argp_LDADD) $(demanglelib)
+-elfcmp_LDADD = $(libebl) $(libelf) $(libeu) $(argp_LDADD) -ldl
+ objdump_LDADD  = $(libasm) $(libebl) $(libelf) $(libeu) $(argp_LDADD) -ldl
++ranlib_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD) $(fts_LDADD) $(obstack_LDADD)
++strings_LDADD = $(libelf) $(libeu) $(argp_LDADD) $(fts_LDADD) $(obstack_LDADD)
++ar_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD) $(fts_LDADD) $(obstack_LDADD)
++unstrip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD) $(fts_LDADD) $(obstack_LDADD) -ldl
++stack_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD) $(fts_LDADD) $(obstack_LDADD) -ldl $(demanglelib)
++elfcompress_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD) $(fts_LDADD) $(obstack_LDADD)
+-ranlib_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD)
+-strings_LDADD = $(libelf) $(libeu) $(argp_LDADD)
+-ar_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD)
+-unstrip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD) -ldl
+-stack_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD) -ldl $(demanglelib)
+-elfcompress_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD)
+ 
+ installcheck-binPROGRAMS: $(bin_PROGRAMS)
+	bad=0; pid=$$$$; list="$(bin_PROGRAMS)"; for p in $$list; do \
+--- a/libdw/Makefile.am.orig	2017-08-05 01:41:04.103553705 +0000
++++ b/libdw/Makefile.am	2017-08-05 01:43:55.366543497 +0000
+@@ -105,7 +105,7 @@
+ libdw_so_LIBS = libdw_pic.a ../libdwelf/libdwelf_pic.a \
+ 	  ../libdwfl/libdwfl_pic.a ../libebl/libebl.a
+ libdw_so_DEPS = ../lib/libeu.a ../libelf/libelf.so
+-libdw_so_LDLIBS = $(libdw_so_DEPS) -ldl -lz $(argp_LDADD) $(zip_LIBS)
++libdw_so_LDLIBS = $(libdw_so_DEPS) -ldl -lz $(argp_LDADD) $(fts_LDADD) $(obstack_LDADD) $(zip_LIBS)
+ libdw_so_SOURCES =
+ libdw.so$(EXEEXT): $(srcdir)/libdw.map $(libdw_so_LIBS) $(libdw_so_DEPS)
+ # The rpath is necessary for libebl because its $ORIGIN use will
diff --git a/experimental/elfutils/musl-macros.patch b/experimental/elfutils/musl-macros.patch
new file mode 100644
index 0000000000..fb44d4f33e
--- /dev/null
+++ b/experimental/elfutils/musl-macros.patch
@@ -0,0 +1,66 @@
+--- a/src/arlib.h	2015-08-21 14:22:37.000000000 +0200
++++ b/src/arlib.h	2015-11-20 08:02:55.153199611 +0100
+@@ -29,6 +29,16 @@
+ #include <stdint.h>
+ #include <sys/types.h>
+ 
++#if !defined(ACCESSPERMS)
++# define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */
++#endif
++#if !defined(ALLPERMS)
++# define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) /* 07777 */
++#endif
++#if !defined(DEFFILEMODE)
++# define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)/* 0666*/
++#endif
++
+ 
+ /* State of -D/-U flags.  */
+ extern bool arlib_deterministic_output;
+--- a/src/elfcompress.c.orig	2016-04-02 12:51:26.903848894 +0200
++++ b/src/elfcompress.c	2016-04-02 12:55:15.076996338 +0200
+@@ -35,6 +35,14 @@
+ #include <gelf.h>
+ #include "system.h"
+ 
++#if !defined(FNM_EXTMATCH)
++# define FNM_EXTMATCH 0
++#endif
++
++#if !defined(ALLPERMS)
++# define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) /* 07777 */
++#endif
++
+ /* Name and version of program.  */
+ static void print_version (FILE *stream, struct argp_state *state);
+ ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
+--- a/src/strip.c.orig	2017-08-02 12:06:25.000000000 +0000
++++ b/src/strip.c	2017-08-05 01:58:01.523493062 +0000
+@@ -47,6 +47,14 @@
+ #include <system.h>
+ #include <printversion.h>
+ 
++#if !defined(FNM_EXTMATCH)
++# define FNM_EXTMATCH 0
++#endif
++
++#if !defined(ACCESSPERMS)
++#define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO)
++#endif
++
+ typedef uint8_t GElf_Byte;
+ 
+ /* Name and version of program.  */
+--- elfutils-0.176/tests/elfstrmerge.c	2019-02-15 15:46:47.000000000 +0000
++++ elfutils-0.176/tests/elfstrmerge.c	2019-07-18 06:29:58.109875347 +0000
+@@ -33,6 +33,10 @@
+ #include ELFUTILS_HEADER(dwelf)
+ #include "elf-knowledge.h"
+ 
++#if !defined(ALLPERMS)
++# define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) /* 07777 */
++#endif
++
+ /* The original ELF file.  */
+ static int fd = -1;
+ static Elf *elf = NULL;
diff --git a/experimental/elfutils/musl-qsort_r.patch b/experimental/elfutils/musl-qsort_r.patch
new file mode 100644
index 0000000000..9be21bd25e
--- /dev/null
+++ b/experimental/elfutils/musl-qsort_r.patch
@@ -0,0 +1,65 @@
+--- a/src/readelf.c
++++ b/src/readelf.c
+@@ -4773,10 +4773,11 @@ listptr_base (struct listptr *p)
+   return cudie_base (&cu);
+ }
+ 
++static const char *listptr_name;
++
+ static int
+-compare_listptr (const void *a, const void *b, void *arg)
++compare_listptr (const void *a, const void *b)
+ {
+-  const char *name = arg;
+   struct listptr *p1 = (void *) a;
+   struct listptr *p2 = (void *) b;
+ 
+@@ -4792,21 +4793,21 @@ compare_listptr (const void *a, const void *b, void *arg)
+ 	  p1->warned = p2->warned = true;
+ 	  error (0, 0,
+ 		 gettext ("%s %#" PRIx64 " used with different address sizes"),
+-		 name, (uint64_t) p1->offset);
++		 listptr_name, (uint64_t) p1->offset);
+ 	}
+       if (p1->dwarf64 != p2->dwarf64)
+ 	{
+ 	  p1->warned = p2->warned = true;
+ 	  error (0, 0,
+ 		 gettext ("%s %#" PRIx64 " used with different offset sizes"),
+-		 name, (uint64_t) p1->offset);
++		 listptr_name, (uint64_t) p1->offset);
+ 	}
+       if (listptr_base (p1) != listptr_base (p2))
+ 	{
+ 	  p1->warned = p2->warned = true;
+ 	  error (0, 0,
+ 		 gettext ("%s %#" PRIx64 " used with different base addresses"),
+-		 name, (uint64_t) p1->offset);
++		 listptr_name, (uint64_t) p1->offset);
+ 	}
+       if (p1->attr != p2 ->attr)
+ 	{
+@@ -4814,7 +4815,7 @@ compare_listptr (const void *a, const void *b, void *arg)
+ 	  error (0, 0,
+ 		 gettext ("%s %#" PRIx64
+ 			  " used with different attribute %s and %s"),
+-		 name, (uint64_t) p1->offset, dwarf_attr_name (p2->attr),
++		 listptr_name, (uint64_t) p1->offset, dwarf_attr_name (p2->attr),
+ 		 dwarf_attr_name (p2->attr));
+ 	}
+     }
+@@ -4885,9 +4886,11 @@ notice_listptr (enum section_e section, struct listptr_table *table,
+ static void
+ sort_listptr (struct listptr_table *table, const char *name)
+ {
+-  if (table->n > 0)
+-    qsort_r (table->table, table->n, sizeof table->table[0],
+-	     &compare_listptr, (void *) name);
++  if (table->n > 0) {
++    listptr_name = name;
++    qsort (table->table, table->n, sizeof table->table[0],
++	     &compare_listptr);
++  }
+ }
+ 
+ static bool
diff --git a/experimental/elfutils/musl-strerror_r.patch b/experimental/elfutils/musl-strerror_r.patch
new file mode 100644
index 0000000000..72977951d5
--- /dev/null
+++ b/experimental/elfutils/musl-strerror_r.patch
@@ -0,0 +1,19 @@
+--- a/libdwfl/dwfl_error.c	2015-09-29 17:18:51.000000000 +0200
++++ b/libdwfl/dwfl_error.c	2015-11-20 05:11:29.889002058 +0100
+@@ -154,7 +154,16 @@
+   switch (error &~ 0xffff)
+     {
+     case OTHER_ERROR (ERRNO):
++#if defined(__GLIBC__)
+       return strerror_r (error & 0xffff, "bad", 0);
++#else
++      {
++        static __thread char buf[128] = "";
++        if (0 == strerror_r(error & 0xffff, buf, sizeof(buf)))
++          return buf;
++      }
++      return "strerror_r() failed";
++#endif
+     case OTHER_ERROR (LIBELF):
+       return elf_errmsg (error & 0xffff);
+     case OTHER_ERROR (LIBDW):
diff --git a/experimental/elfutils/musl-strndupa.patch b/experimental/elfutils/musl-strndupa.patch
new file mode 100644
index 0000000000..e48fa20184
--- /dev/null
+++ b/experimental/elfutils/musl-strndupa.patch
@@ -0,0 +1,18 @@
+--- a/src/unstrip.c	2017-04-27 14:26:26.000000000 +0000
++++ b/src/unstrip.c	2017-05-05 15:51:33.515154220 +0000
+@@ -56,6 +56,15 @@
+ # define _(str) gettext (str)
+ #endif
+ 
++#ifndef strndupa
++#define strndupa(s, n) \
++       (__extension__ ({const char *__in = (s);                    \
++                        size_t __len = strnlen (__in, (n)) + 1;    \
++                        char *__out = (char *) alloca (__len);     \
++                        __out[__len-1] = '\0';                     \
++                        (char *) memcpy (__out, __in, __len-1);}))
++#endif
++
+ /* Name and version of program.  */
+ ARGP_PROGRAM_VERSION_HOOK_DEF = print_version;
+ 
diff --git a/experimental/elfutils/test-disable-backtrace.patch b/experimental/elfutils/test-disable-backtrace.patch
new file mode 100644
index 0000000000..420e392150
--- /dev/null
+++ b/experimental/elfutils/test-disable-backtrace.patch
@@ -0,0 +1,59 @@
+With musl-dbg installed:
+
+FAIL: run-backtrace-native.sh
+=============================
+
+0x5633ee097000	0x5633ee29a000	/home/mcrees/packages/user/elfutils/src/elfutils-0.176/tests/backtrace-child
+0x7f59b75a3000	0x7f59b7850000	/lib/ld-musl-x86_64.so.1
+0x7fffddac8000	0x7fffddaca000	[vdso: 6946]
+TID 6946:
+# 0 0x7f59b75fad77    	__restore_sigs
+# 1 0x7f59b75faf38 - 1	raise
+# 2 0x5633ee0979f3 - 1	main
+# 3 0x7f59b75c0e1c - 1	libc_start_main_stage2
+# 4 0x5633ee097b08 - 1	_start_c
+# 5 0x5633ee097adc - 1	_start
+TID 6947:
+# 0 0x7f59b75fad77    	__restore_sigs
+/home/mcrees/packages/user/elfutils/src/elfutils-0.176/tests/backtrace: dwfl_thread_getframes: no matching address range
+Assertion failed: symname && strcmp (symname, "raise") == 0 (backtrace.c: callback_verify: 111)
+./test-subr.sh: line 84:  6945 Aborted                 (core dumped) LD_LIBRARY_PATH="${built_library_path}${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH" $VALGRIND_CMD "$@"
+# 2 0x5633ee0979f3 - 1	main
+backtrace-child: neither empty nor just out of DWARF
+rmdir: failed to remove 'test-6939': Directory not empty
+FAIL run-backtrace-native.sh (exit status: 1)
+
+FAIL: run-backtrace-native-core.sh
+==================================
+
+0x7ffea8c6d000	0x7ffea8c6e000	linux-vdso.so.1
+0x7f174e2fb000	0x7f174e5aa2f8	ld-musl-x86_64.so.1
+0x56367bb22000	0x56367bd24078	backtrace-child
+TID 7019:
+# 0 0x7f174e352d77    	__restore_sigs
+Assertion failed: symname && strcmp (symname, "raise") == 0 (backtrace.c: callback_verify: 111)
+./test-subr.sh: line 84:  7022 Aborted                 (core dumped) LD_LIBRARY_PATH="${built_library_path}${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH" $VALGRIND_CMD "$@"
+backtrace-child-core.7018: no main
+rmdir: failed to remove 'test-7010': Directory not empty
+FAIL run-backtrace-native-core.sh (exit status: 1)
+
+--- elfutils-0.176/tests/run-backtrace-native-core.sh	2019-02-15 15:46:47.000000000 +0000
++++ elfutils-0.176/tests/run-backtrace-native-core.sh	2019-07-18 10:03:51.589784665 +0000
+@@ -17,4 +17,7 @@
+ 
+ . $srcdir/backtrace-subr.sh
+ 
++echo "backtrace test broken on musl"
++exit 77
++
+ check_native_core backtrace-child
+--- elfutils-0.176/tests/run-backtrace-native.sh	2019-02-15 15:46:47.000000000 +0000
++++ elfutils-0.176/tests/run-backtrace-native.sh	2019-07-18 10:07:23.109783171 +0000
+@@ -17,4 +17,7 @@
+ 
+ . $srcdir/backtrace-subr.sh
+ 
++echo "backtrace test broken on musl"
++exit 77
++
+ check_native backtrace-child
diff --git a/experimental/elfutils/test-disable-biarch.patch b/experimental/elfutils/test-disable-biarch.patch
new file mode 100644
index 0000000000..809c3df1ef
--- /dev/null
+++ b/experimental/elfutils/test-disable-biarch.patch
@@ -0,0 +1,9 @@
+https://sourceware.org/PR24158
+
+Tets fails when 32-bit elfutils tries to dump 64-bit process.
+--- a/tests/run-backtrace-native-biarch.sh
++++ b/tests/run-backtrace-native-biarch.sh
+@@ -17,2 +17,3 @@
+ 
++ELFUTILS_DISABLE_BIARCH=yes # https://sourceware.org/PR24158
+ if test -n "$ELFUTILS_DISABLE_BIARCH"; then
-- 
GitLab


From ab08069ad4a384e9bb5703a81e1399cb90041c67 Mon Sep 17 00:00:00 2001
From: Max Rees <maxcrees@me.com>
Date: Fri, 19 Jul 2019 18:51:23 -0400
Subject: [PATCH 4/6] experimental/libabigail: new package

Problems:

  * Test suite relies on non-reproducible binaries. Lots of tests fail
    presumably because it expects a glibc-based system.
  * Can't seem to get the tools to actually work on musl-produced
    binaries. No significant output is generated.
---
 experimental/libabigail/APKBUILD            | 46 +++++++++++++++++++++
 experimental/libabigail/musl-basename.patch | 10 +++++
 experimental/libabigail/musl-fts.patch      | 32 ++++++++++++++
 experimental/libabigail/redhat-bs.patch     | 11 +++++
 4 files changed, 99 insertions(+)
 create mode 100644 experimental/libabigail/APKBUILD
 create mode 100644 experimental/libabigail/musl-basename.patch
 create mode 100644 experimental/libabigail/musl-fts.patch
 create mode 100644 experimental/libabigail/redhat-bs.patch

diff --git a/experimental/libabigail/APKBUILD b/experimental/libabigail/APKBUILD
new file mode 100644
index 0000000000..87c80935ee
--- /dev/null
+++ b/experimental/libabigail/APKBUILD
@@ -0,0 +1,46 @@
+# Contributor: Max Rees <maxcrees@me.com>
+# Maintainer: Max Rees <maxcrees@me.com>
+pkgname=libabigail
+pkgver=1.6
+pkgrel=0
+pkgdesc="The ABI Generic Analysis and Instrumentation Library"
+url="https://sourceware.org/libabigail/"
+arch="all"
+options="!check"  # Relies on checking non-reproducible binaries.
+license="LGPL-3.0+"
+depends=""
+depends_dev=""
+makedepends="$depends_dev elfutils-dev fts-dev libxml2-dev"
+subpackages="$pkgname-dev"
+source="http://mirrors.kernel.org/sourceware/libabigail/$pkgname-$pkgver.tar.gz
+	musl-basename.patch
+	musl-fts.patch
+	redhat-bs.patch"
+
+prepare() {
+	default_prepare
+	autoreconf -vif
+}
+
+build() {
+	./configure \
+		--build=$CBUILD \
+		--host=$CHOST \
+		--prefix=/usr \
+		--sysconfdir=/etc \
+		--mandir=/usr/share/man \
+		--localstatedir=/var
+	make
+}
+
+check() {
+	make check
+}
+
+package() {
+	make DESTDIR="$pkgdir" install
+}
+
+sha512sums="2ba775bd836b53265dae60e66065fc2106e7f633e890cc70b6abacb8426e04ec0b7b38593c21336f5785cf5e4eb8d110fb15ce63124cddc59f660f31c7b25b3c  libabigail-1.6.tar.gz
+ef5c7db0ce05dff36c654e4a6345ded43032b76bdc9159da60a5fdc59b3c70943881cb19c87a4c6b30eccb774c6c7767e790b395564058f5dbaa6e3f3e0b1373  musl-fts.patch
+0f5dcee3fbb1ee949df22e13a8ad248a8e39a086cb4c3561f5f45235c2f27cc589a07886560e2ecf7ee040811f64892c0e74ed653e0a1a5d20e62ab360c388a4  redhat-bs.patch"
diff --git a/experimental/libabigail/musl-basename.patch b/experimental/libabigail/musl-basename.patch
new file mode 100644
index 0000000000..5e5088085c
--- /dev/null
+++ b/experimental/libabigail/musl-basename.patch
@@ -0,0 +1,10 @@
+--- libabigail-1.6/tools/abisym.cc	2019-03-27 05:31:13.000000000 -0400
++++ libabigail-1.6/tools/abisym.cc	2019-07-18 07:19:28.999752604 -0400
+@@ -26,6 +26,7 @@
+ /// in its symbol tables and report what it sees.
+ 
+ #include <elf.h>
++#include <libgen.h>
+ #include <cstring>
+ #include <iostream>
+ #include <sstream>
diff --git a/experimental/libabigail/musl-fts.patch b/experimental/libabigail/musl-fts.patch
new file mode 100644
index 0000000000..4824812c81
--- /dev/null
+++ b/experimental/libabigail/musl-fts.patch
@@ -0,0 +1,32 @@
+--- libabigail-1.6/configure.ac	2019-03-27 05:31:13.000000000 -0400
++++ libabigail-1.6/configure.ac	2019-07-18 07:12:25.129755599 -0400
+@@ -147,20 +147,6 @@ fi
+ 
+ AC_SUBST(VISIBILITY_FLAGS)
+ 
+-dnl Older glibc had a broken fts that didn't work with Large File Systems.
+-dnl We want the version that can handler LFS, but include workaround if we
+-dnl get a bad one. Add define to CFLAGS (not AC_DEFINE it) since we need to
+-dnl check it before including config.h (which might define _FILE_OFFSET_BITS).
+-AC_CACHE_CHECK([whether including fts.h with _FILE_OFFSET_BITS set breaks], ac_cv_bad_fts,
+-  [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+-	#define _FILE_OFFSET_BITS 64
+-	#include <fts.h>
+-	]])],
+-		     ac_cv_bad_fts=no, ac_cv_bad_fts=yes)])
+-AS_IF([test "x$ac_cv_bad_fts" = "xyes"],
+-      [CFLAGS="$CFLAGS -DBAD_FTS=1",
+-       CXXFLAGS="$CXXFLAGS -DBAD_FTS=1"])
+-
+ dnl Check for dependency: libelf, libdw, libebl (elfutils)
+ dnl Note that we need to use at least elfutils 0.159 but
+ dnl at that time elfutils didnt have pkgconfig capabilities
+@@ -577,7 +563,7 @@ AX_VALGRIND_CHECK
+ 
+ dnl Set the list of libraries libabigail depends on
+ 
+-DEPS_LIBS="$XML_LIBS $LIBZIP_LIBS $ELF_LIBS $DW_LIBS"
++DEPS_LIBS="$XML_LIBS $LIBZIP_LIBS $ELF_LIBS $DW_LIBS -lfts"
+ AC_SUBST(DEPS_LIBS)
+ 
+ if test x$ABIGAIL_DEVEL != x; then
diff --git a/experimental/libabigail/redhat-bs.patch b/experimental/libabigail/redhat-bs.patch
new file mode 100644
index 0000000000..4124aaab0b
--- /dev/null
+++ b/experimental/libabigail/redhat-bs.patch
@@ -0,0 +1,11 @@
+--- libabigail-1.6/build-aux/ltmain.sh	2015-04-24 08:08:19.000000000 -0400
++++ libabigail-1.6/build-aux/ltmain.sh	2019-07-18 07:03:18.589759461 -0400
+@@ -6523,7 +6523,7 @@ func_mode_link ()
+     old_convenience=
+     deplibs=
+     old_deplibs=
+-    compiler_flags="-specs=/usr/lib/rpm/redhat/redhat-hardened-ld"
++    compiler_flags=
+     linker_flags=
+     dllsearchpath=
+     lib_search_path=`pwd`
-- 
GitLab


From 082b5cd3109ae354e0332a53a27a84e8e7beaa18 Mon Sep 17 00:00:00 2001
From: Max Rees <maxcrees@me.com>
Date: Thu, 13 Jun 2019 00:02:36 -0400
Subject: [PATCH 5/6] user/utf8proc: actually run tests

---
 user/utf8proc/APKBUILD | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/user/utf8proc/APKBUILD b/user/utf8proc/APKBUILD
index a878a0abd4..4b8d6ac3a5 100644
--- a/user/utf8proc/APKBUILD
+++ b/user/utf8proc/APKBUILD
@@ -4,13 +4,14 @@ pkgname=utf8proc
 pkgver=2.4.0
 pkgrel=0
 pkgdesc="C library for processing UTF-8 data"
-url=" "
+url="http://juliastrings.github.io/utf8proc"
 arch="all"
 license="MIT AND Unicode-DFS-2016"
 depends=""
 makedepends=""
 subpackages="$pkgname-dev"
-source="utf8proc-$pkgver.tar.gz::https://github.com/JuliaStrings/utf8proc/archive/v$pkgver.tar.gz"
+source="$pkgname-$pkgver.tar.gz::https://github.com/JuliaStrings/utf8proc/archive/v$pkgver.tar.gz
+	https://dev.sick.bike/dist/$pkgname-testdata-$pkgver.tar.gz"
 
 build() {
 	if [ "$CBUILD" != "$CHOST" ]; then
@@ -27,12 +28,12 @@ build() {
 }
 
 check() {
-	cd "$builddir"/build
-	CTEST_OUTPUT_ON_FAILURE=TRUE ctest
+	make check
 }
 
 package() {
 	make DESTDIR="$pkgdir" -C build install
 }
 
-sha512sums="2bbd056b488cd30faca26618389d8af84edc39ade9b705e147b676bf39eee65b40239d01c32c46dfc2a289d79e869ed1bb3c347365603dcaab2f69e34427441a  utf8proc-2.4.0.tar.gz"
+sha512sums="2bbd056b488cd30faca26618389d8af84edc39ade9b705e147b676bf39eee65b40239d01c32c46dfc2a289d79e869ed1bb3c347365603dcaab2f69e34427441a  utf8proc-2.4.0.tar.gz
+1d41e9138ef2f41a0bf79e0613695c516da87f79f53032476d585f91040f9c6231f4e67944b43ffa16d7d96cfd3841c15d7f09a7178f45ac6b6b3585e97050fc  utf8proc-testdata-2.4.0.tar.gz"
-- 
GitLab


From 6722ef49445b3fbe7665fc487733a8710a98fb5f Mon Sep 17 00:00:00 2001
From: Max Rees <maxcrees@me.com>
Date: Wed, 7 Aug 2019 19:05:40 -0500
Subject: [PATCH 6/6] user/py3-psycopg2: new package

---
 user/py3-psycopg2/APKBUILD | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 user/py3-psycopg2/APKBUILD

diff --git a/user/py3-psycopg2/APKBUILD b/user/py3-psycopg2/APKBUILD
new file mode 100644
index 0000000000..1d78e60b85
--- /dev/null
+++ b/user/py3-psycopg2/APKBUILD
@@ -0,0 +1,28 @@
+# Contributor: Fabian Affolter <fabian@affolter-engineering.ch>
+# Maintainer: 
+pkgname=py3-psycopg2
+_pkgname=psycopg2
+_p="${_pkgname#?}"
+_p="${_pkgname%"$_p"}"
+pkgver=2.8.3
+pkgrel=0
+pkgdesc="PostgreSQL adapter for python"
+url="http://initd.org/psycopg"  # No HTTPS
+arch="all"
+options="!check"  # Requires a running PostgreSQL server.
+# Certified net clean
+license="LGPL-3.0+ WITH OpenSSL-link-exception"
+depends="python3"
+makedepends="postgresql-dev python3-dev"
+source="https://files.pythonhosted.org/packages/source/$_p/$_pkgname/$_pkgname-$pkgver.tar.gz"
+builddir="$srcdir/$_pkgname-$pkgver"
+
+build() {
+	python3 setup.py build
+}
+
+package() {
+	python3 setup.py install --prefix=/usr --root="$pkgdir"
+}
+
+sha512sums="74268f6d05922c968d46ad62a49b4af54dc30463daa67cc0f32d5930c366596f9a1b2f368f2b38c8a9d45bfdcffb13be469a5cbf3911c62d163bea5c7a3ad928  psycopg2-2.8.3.tar.gz"
-- 
GitLab