summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: 73d5e04454d30b9c92836d8e091fd51876d3e607 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# $Id$
# Maintainer: Martchus <martchus@gmx.net>

_pkg_arch=x86
_android_arch=x86
_android_toolchain=$_pkg_arch-linux-android
_android_platform=22 # https://developer.android.com/about/dashboards/
_android_platform_arch=arch-x86
_android_platform_dir=android-$_android_platform/${_android_platform_arch}
_pkgname=openssl
_ver=1.1.1c
_pref=/opt/android-libs/$_pkg_arch

# export Android configuration
export ANDROID_MINIMUM_PLATFORM=$_android_platform
export ANDROID_NDK_ROOT=${ANDROID_NDK_ROOT:-/opt/android-ndk}
export ANDROID_SDK_ROOT=${ANDROID_SDK_ROOT:-/opt/android-sdk}
export ANDROID_EABI=llvm
export ANDROID_ARCH=${_android_platform_arch}

pkgname=android-$_pkg_arch-$_pkgname
# use a pacman compatible version scheme
pkgver=${_ver/[a-z]/.${_ver//[0-9.]/}}
pkgrel=1
pkgdesc="The Open Source toolkit for Secure Sockets Layer and Transport Layer Security (Android, $_pkg_arch)"
arch=('any')
url='https://www.openssl.org'
license=('custom:BSD')
options=('!strip' '!buildflags' 'staticlibs' '!emptydirs')
depends=('android-sdk' 'android-ndk')
conflicts=("android-$_pkgname-$_android_arch")
replaces=("android-$_pkgname-$_android_arch")
source=("https://www.openssl.org/source/${_pkgname}-${_ver}.tar.gz"
        "https://www.openssl.org/source/${_pkgname}-${_ver}.tar.gz.asc"
        'setenv-android.sh')
sha256sums=('f6fb3079ad15076154eda9413fed42877d668e7069d9b87396d0804fdb3f4c90'
            'SKIP'
            'SKIP')
validpgpkeys=('8657ABB260F056B1E5190839D9C4D26D0E604491'
              '7953AC1FBC3DC8B3B292393ED5E9E43F7DF9EE8C')

build() {
	cd "$srcdir/$_pkgname-$_ver"

	# don't use -mandroid flag (Clang as provided by the NDK does not like it)
	sed -i -e 's/-mandroid//' Configurations/15-android.conf

	source "$srcdir/setenv-android.sh"

	./Configure \
		--prefix="$_pref" \
		--openssldir="$_pref" \
		--gcc-toolchain=$ANDROID_NDK_ROOT/toolchains/$_android_toolchain-4.9/prebuilt/linux-x86_64 \
		--sysroot=$ANDROID_NDK_ROOT/platforms/$_android_platform_dir/usr \
		-isystem"$ANDROID_NDK_ROOT/sysroot/usr/include" \
		-isystem"$ANDROID_NDK_ROOT/sysroot/usr/include/${_ANDROID_EABI%-*}" \
		-Wl,--no-allow-shlib-undefined \
		-Wl,--no-undefined \
		no-stdio \
		no-ui \
		threads \
		shared \
		android-${ANDROID_ARCH##arch-}

	# ensure the libraries are not versioned (setting CALC_VERSIONS doesn't work for some reason)
	sed -i -e 's/\.\$(SHLIB_MAJOR)\.\$(SHLIB_MINOR)//g' Makefile
	sed -i -e 's/\.\$(SHLIB_VERSION_NUMBER)//g' Makefile

	# get rid of debug printing so the library doesn't depend on stdio (no-stdio and no-ui are not entirely sufficient)
	sed -i -e 's/\#define TEST_ENG_OPENSSL_RC4_P_INIT//' crypto/engine/eng_openssl.c

	# build only libraries
	make CALC_VERSIONS="SHLIB_COMPAT=; SHLIB_SOVER=" build_libs	
}

package() {
	cd "$srcdir/$_pkgname-$_ver"
	source "$srcdir/setenv-android.sh"

	# install header files, libraries and license
	for lib in libcrypto.{a,so} libssl.{a,so}; do
		install -D -m0644 $lib "$pkgdir/$_pref/lib/$lib"
	done
	mkdir -p "$pkgdir/$_pref/include"
	cp -r include/openssl "$pkgdir/$_pref/include"
	install -D -m644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE

	# strip binaries
	local strip_path=$ANDROID_TOOLCHAIN/${CROSS_COMPILE}strip
	find "$pkgdir" -name 'lib*.so' -type f -exec "$strip_path" --strip-unneeded {} \;
	find "$pkgdir" -name 'lib*.a' -type f -exec "$strip_path" -g {} \;
}