summaryrefslogtreecommitdiff
path: root/user
diff options
context:
space:
mode:
Diffstat (limited to 'user')
-rw-r--r--user/dmenu/APKBUILD36
-rw-r--r--user/libsoup/APKBUILD4
-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/mosh/APKBUILD78
-rw-r--r--user/mosh/fix-ppc64le-build-with-musl.patch53
-rw-r--r--user/mpv/APKBUILD4
-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/perl-io-tty/APKBUILD33
-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/strongswan/APKBUILD8
-rw-r--r--user/thunar/APKBUILD4
-rw-r--r--user/unrar/APKBUILD4
-rw-r--r--user/xautolock/APKBUILD30
-rw-r--r--user/xautolock/processwait.patch33
-rw-r--r--user/xorg-cf-files/APKBUILD38
23 files changed, 1848 insertions, 24 deletions
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/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/llvm6/APKBUILD b/user/llvm6/APKBUILD
index f3bc9acc7..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
@@ -24,6 +24,9 @@ source="http://llvm.org/releases/$pkgver/llvm-$pkgver.src.tar.xz
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"
@@ -245,5 +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
-35d289641fa4d200b5a3f62f1d51da600a734641356b0dc6c54a3080dd89aec3b031e36af8b53be49c35346c1cbcce00268de7ec9b4f552bfd7bf84d3504d1c4 secure-plt.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/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/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/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/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/strongswan/APKBUILD b/user/strongswan/APKBUILD
index a89a10a6c..29390b652 100644
--- a/user/strongswan/APKBUILD
+++ b/user/strongswan/APKBUILD
@@ -2,7 +2,7 @@
# Contributor: Natanael Copa <ncopa@alpinelinux.org>
# Maintainer: Lee Starnes <lee@canned-death.us>
pkgname=strongswan
-pkgver=5.7.0
+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"
@@ -28,6 +28,10 @@ source="https://download.strongswan.org/$pkgname-$_pkgver.tar.bz2
"
builddir="$srcdir/$pkgname-$_pkgver"
+# secfixes:
+# 5.7.1-r0:
+# - CVE-2018-17540
+
build() {
cd "$builddir"
@@ -95,7 +99,7 @@ package() {
install -m755 -D "$srcdir/charon.initd" "$pkgdir/etc/init.d/charon"
}
-sha512sums="811bfa79aa2b17fcf298c45a2b4109cf4235286e90c4def3e09022ed94c7fa481fc25b8d5054529e4ff4e33011ce6f6ba9874595d16c1a8fe13ef924c4ec6395 strongswan-5.7.0.tar.bz2
+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
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/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/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/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"