Skip to content

Commit

Permalink
Merge pull request #49 from AlwinEsch/Leia-change
Browse files Browse the repository at this point in the history
[Leia] fix 'dlopen failed: cannot locate symbol "BN_clear_free"' error
  • Loading branch information
AlwinEsch committed Jan 11, 2020
2 parents 574234a + fb49b34 commit 575e832
Show file tree
Hide file tree
Showing 11 changed files with 173 additions and 29 deletions.
4 changes: 2 additions & 2 deletions CMakeLists.txt
Expand Up @@ -16,8 +16,8 @@ set(SFTP_SOURCES src/SFTPSession.cpp

set(SFTP_HEADERS src/SFTPSession.h)

set(DEPLIBS ${OPENSSL_LIBRARIES}
${SSH_LIBRARIES}
set(DEPLIBS ${SSH_LIBRARIES}
${OPENSSL_LIBRARIES}
${ZLIB_LIBRARIES})

add_definitions( -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64)
Expand Down
21 changes: 3 additions & 18 deletions depends/common/openssl/01-android.patch
@@ -1,34 +1,19 @@
--- a/Configurations/15-android.conf
+++ b/Configurations/15-android.conf
@@ -112,18 +112,17 @@
# *after* announcement that gcc is being phased out, so
# favouring clang is considered adequate. Those who insist
# have option to enforce test for gcc with CC=gcc.
- if (which("$triarch-$cc") !~ m|^$ndk|) {
- die "no NDK $triarch-$cc on \$PATH";
+ if (realpath(which("$cc")) !~ m|^$ndk|) {
+ die "no NDK $cc on \$PATH";
}
$user{CC} = $cc;
- $user{CROSS_COMPILE} = "$triarch-";
+ $user{CROSS_COMPILE} = "";
} elsif ($user{CC} eq "clang") {
die "no NDK clang on \$PATH";
} else {
@@ -89,7 +89,6 @@
if (which("$triarch-gcc") !~ m|^$ndk/.*/prebuilt/([^/]+)/|) {
die "no NDK $triarch-gcc on \$PATH";
}
- $cflags .= " -mandroid";
$user{CROSS_COMPILE} = "$triarch-";
}

@@ -139,7 +138,7 @@
@@ -105,7 +104,7 @@

$sysroot =~ s|^$ndk/||;
$android_ndk = {
- cflags => "$cflags --sysroot=\$($ndk_var)/$sysroot",
- cflags => "$cflags --sysroot=\$(ANDROID_NDK)/$sysroot",
+ cflags => $cflags,
cppflags => $cppflags,
bn_ops => $arch =~ m/64$/ ? "SIXTY_FOUR_BIT_LONG"
: "BN_LLONG",

143 changes: 143 additions & 0 deletions depends/common/openssl/02-android-standalone-toolchain.patch
@@ -0,0 +1,143 @@
From a66c361a773e697b5c6bb805ae37d2c4c8d32cb1 Mon Sep 17 00:00:00 2001
From: Andy Polyakov <appro@openssl.org>
Date: Sun, 14 Oct 2018 15:19:41 +0200
Subject: [PATCH] Configurations/15-android.conf: add support for "standalone
toolchain".

Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/7400)

(cherry picked from commit 03ad7c009e16a233c733098db3169c560142ccd3)
---
Configurations/15-android.conf | 41 +++++++++++++++++++++++++---------
NOTES.ANDROID | 18 ++++++++++-----
2 files changed, 44 insertions(+), 15 deletions(-)

diff --git a/Configurations/15-android.conf b/Configurations/15-android.conf
index d3b428b6cb4..a6b0d7a06d2 100644
--- a/Configurations/15-android.conf
+++ b/Configurations/15-android.conf
@@ -24,7 +24,12 @@

my $ndk = $ENV{ANDROID_NDK};
die "\$ANDROID_NDK is not defined" if (!$ndk);
- die "\$ANDROID_NDK=$ndk is invalid" if (!-d "$ndk/platforms");
+ if (!-d "$ndk/platforms" && !-f "$ndk/AndroidVersion.txt") {
+ # $ndk/platforms is traditional "all-inclusive" NDK, while
+ # $ndk/AndroidVersion.txt is so-called standalone toolchain
+ # tailored for specific target down to API level.
+ die "\$ANDROID_NDK=$ndk is invalid";
+ }
$ndk = canonpath($ndk);

my $ndkver = undef;
@@ -40,10 +45,18 @@
close $fh;
}

- my $sysroot;
+ my ($sysroot, $api, $arch);
+
+ $config{target} =~ m|[^-]+-([^-]+)$|; # split on dash
+ $arch = $1;

- if (!($sysroot = $ENV{CROSS_SYSROOT})) {
- my $api = "*";
+ if ($sysroot = $ENV{CROSS_SYSROOT}) {
+ $sysroot =~ m|/android-([0-9]+)/arch-(\w+)/?$|;
+ ($api, $arch) = ($1, $2);
+ } elsif (-f "$ndk/AndroidVersion.txt") {
+ $sysroot = "$ndk/sysroot";
+ } else {
+ $api = "*";

# see if user passed -D__ANDROID_API__=N
foreach (@{$useradd{CPPDEFINES}}, @{$user{CPPFLAGS}}) {
@@ -59,19 +72,15 @@
} glob("$ndk/platforms/android-$api");
die "no $ndk/platforms/android-$api" if ($#platforms < 0);

- $config{target} =~ m|[^-]+-([^-]+)$|; # split on dash
- $sysroot = "@platforms[$#platforms]/arch-$1";
+ $sysroot = "@platforms[$#platforms]/arch-$arch";
}
die "no sysroot=$sysroot" if (!-d $sysroot);

- $sysroot =~ m|/android-([0-9]+)/arch-(\w+)/?$|;
- my ($api, $arch) = ($1, $2);
-
my $triarch = $triplet{$arch};
my $cflags;
my $cppflags;

- # see if there is NDK clang on $PATH
+ # see if there is NDK clang on $PATH, "universal" or "standalone"
if (which("clang") =~ m|^$ndk/.*/prebuilt/([^/]+)/|) {
my $host=$1;
# harmonize with gcc default
@@ -83,6 +92,18 @@
. "/$tritools-4.9/prebuilt/$host";
$user{CC} = "clang" if ($user{CC} !~ m|clang|);
$user{CROSS_COMPILE} = undef;
+ } elsif (-f "$ndk/AndroidVersion.txt") { #"standalone toolchain"
+ my $cc = $user{CC} // "clang";
+ # One can probably argue that both clang and gcc should be
+ # probed, but support for "standalone toolchain" was added
+ # *after* announcement that gcc is being phased out, so
+ # favouring clang is considered adequate. Those who insist
+ # have option to enforce test for gcc with CC=gcc.
+ if (which("$triarch-$cc") !~ m|^$ndk|) {
+ die "no NDK $triarch-$cc on \$PATH";
+ }
+ $user{CC} = $cc;
+ $user{CROSS_COMPILE} = "$triarch-";
} elsif ($user{CC} eq "clang") {
die "no NDK clang on \$PATH";
} else {
diff --git a/NOTES.ANDROID b/NOTES.ANDROID
index d13f47d6675..bbbd8e4db92 100644
--- a/NOTES.ANDROID
+++ b/NOTES.ANDROID
@@ -24,16 +24,18 @@
in order to invoke $(CROSS_COMPILE)gcc and company. (Configure will fail
and give you a hint if you get it wrong.) Apart from PATH adjustment
you need to set ANDROID_NDK environment to point at NDK directory
- as /some/where/android-ndk-<ver>. NDK customarily supports multiple
+ as /some/where/android-ndk-<ver>. Both variables are significant at both
+ configuration and compilation times. NDK customarily supports multiple
Android API levels, e.g. android-14, android-21, etc. By default latest
one available is chosen. If you need to target older platform, pass
additional -D__ANDROID_API__=N to Configure. N is numeric value of the
target platform version. For example, to compile for ICS on ARM with
NDK 10d:

- ANDROID_NDK=/some/where/android-ndk-10d
+ export ANDROID_NDK=/some/where/android-ndk-10d
PATH=$ANDROID_NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin:$PATH
./Configure android-arm -D__ANDROID_API__=14
+ make

Caveat lector! Earlier OpenSSL versions relied on additional CROSS_SYSROOT
variable set to $ANDROID_NDK/platforms/android-<api>/arch-<arch> to
@@ -43,12 +45,18 @@
conflict, and mixing the two is therefore not supported. Migration to
CROSS_SYSROOT-less setup is recommended.

- One can engage clang by adjusting PATH to cover NDK's clang. Just keep
- in mind that if you miss it, Configure will try to use gcc... Also,
- PATH would need even further adjustment to cover unprefixed, yet
+ One can engage clang by adjusting PATH to cover same NDK's clang. Just
+ keep in mind that if you miss it, Configure will try to use gcc...
+ Also, PATH would need even further adjustment to cover unprefixed, yet
target-specific, ar and ranlib. It's possible that you don't need to
bother, if binutils-multiarch is installed on your Linux system.

+ Another option is to create so called "standalone toolchain" tailored
+ for single specific platform including Android API level, and assign its
+ location to ANDROID_NDK. In such case you have to pass matching target
+ name to Configure and shouldn't use -D__ANDROID_API__=N. PATH adjusment
+ becomes simpler, $ANDROID_NDK/bin:$PATH suffices.
+
Running tests (on Linux)
------------------------

17 changes: 17 additions & 0 deletions depends/common/openssl/03-android-cc.patch
@@ -0,0 +1,17 @@
--- a/Configurations/15-android.conf
+++ b/Configurations/15-android.conf
@@ -99,11 +99,11 @@
# *after* announcement that gcc is being phased out, so
# favouring clang is considered adequate. Those who insist
# have option to enforce test for gcc with CC=gcc.
- if (which("$triarch-$cc") !~ m|^$ndk|) {
- die "no NDK $triarch-$cc on \$PATH";
+ if (realpath(which("$cc")) !~ m|^$ndk|) {
+ die "no NDK $cc on \$PATH";
}
$user{CC} = $cc;
- $user{CROSS_COMPILE} = "$triarch-";
+ $user{CROSS_COMPILE} = "";
} elsif ($user{CC} eq "clang") {
die "no NDK clang on \$PATH";
} else {
2 changes: 1 addition & 1 deletion depends/common/openssl/openssl.sha256
@@ -1 +1 @@
1e3a91bc1f9dfce01af26026f856e064eab4c8ee0a8f457b5ae30b40b8b711f2
2836875a0f89c03d0fdf483941512613a50cfb421d6fd94b9f41d7279d586a3d
2 changes: 1 addition & 1 deletion depends/common/openssl/openssl.txt
@@ -1 +1 @@
openssl http://mirrors.kodi.tv/build-deps/sources/openssl-1.1.1d.tar.gz
openssl http://mirrors.kodi.tv/build-deps/sources/openssl-1.1.1.tar.gz
3 changes: 1 addition & 2 deletions depends/windows/openssl/01-quote-cc.patch
@@ -1,6 +1,6 @@
--- a/Configurations/windows-makefile.tmpl
+++ b/Configurations/windows-makefile.tmpl
@@ -164,8 +164,8 @@ libdir={- file_name_is_absolute($libdir)
@@ -162,8 +162,8 @@

##### User defined commands and flags ################################

Expand All @@ -11,4 +11,3 @@
CPPFLAGS={- our $cppflags1 = join(" ",
(map { "-D".$_} @{$config{CPPDEFINES}}),
(map { " /I ".$_} @{$config{CPPINCLUDES}}),

2 changes: 1 addition & 1 deletion depends/windows/openssl/openssl.sha256
@@ -1 +1 @@
1e3a91bc1f9dfce01af26026f856e064eab4c8ee0a8f457b5ae30b40b8b711f2
2836875a0f89c03d0fdf483941512613a50cfb421d6fd94b9f41d7279d586a3d
2 changes: 1 addition & 1 deletion depends/windows/openssl/openssl.txt
@@ -1 +1 @@
openssl http://mirrors.kodi.tv/build-deps/sources/openssl-1.1.1d.tar.gz
openssl http://mirrors.kodi.tv/build-deps/sources/openssl-1.1.1.tar.gz
4 changes: 2 additions & 2 deletions depends/windowsstore/openssl/CMakeLists.txt
Expand Up @@ -7,9 +7,9 @@ check_symbol_exists(_AMD64_ "Windows.h" _X64_)
check_symbol_exists(_ARM_ "Windows.h" _ARM_)

if(_X86_)
set(OPENSSL_ARCHIVE_NAME openssl-1.1.1b-win10-Win32-v141)
set(OPENSSL_ARCHIVE_NAME openssl-1.0.2o-win10-Win32-v141)
elseif(_X64_)
set(OPENSSL_ARCHIVE_NAME openssl-1.1.1b-win10-x64-v141)
set(OPENSSL_ARCHIVE_NAME openssl-1.0.2o-win10-x64-v141)
elseif(_ARM_)
set(OPENSSL_ARCHIVE_NAME openssl-1.0.2o-win10-ARM-v141)
else()
Expand Down
2 changes: 1 addition & 1 deletion vfs.sftp/addon.xml.in
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon
id="vfs.sftp"
version="1.0.4"
version="1.0.5"
name="SFTP support"
provider-name="spiff">
<requires>@ADDON_DEPENDS@</requires>
Expand Down

0 comments on commit 575e832

Please sign in to comment.