APKBUILD 4.7 KB
Newer Older
1
# Maintainer: Łukasz Jendrysik <scadu@yandex.com>
2 3
# Contributor: Kiyoshi Aman <kiyoshi.aman@gmail.com>

4
pkgname=python3
5
# the python2-tkinter's pkgver needs to be synchronized with this.
6
pkgver=3.6.5
Jakub Jirutka's avatar
Jakub Jirutka committed
7
_basever="${pkgver%.*}"
8
pkgrel=0
9 10 11 12
pkgdesc="A high-level scripting language"
url="http://www.python.org"
arch="all"
license="custom"
13
provides="py3-pip"
14
subpackages="$pkgname-dbg $pkgname-dev $pkgname-doc $pkgname-tests::noarch
15
	$pkgname-wininst"
16
makedepends="expat-dev libressl-dev zlib-dev ncurses-dev bzip2-dev xz-dev
17
	sqlite-dev libffi-dev tcl-dev linux-headers gdbm-dev readline-dev"
18 19
source="http://www.python.org/ftp/python/$pkgver/Python-$pkgver.tar.xz
	musl-find_library.patch
20
	fix-xattrs-glibc.patch
21
	libressl.patch
22
	"
Jakub Jirutka's avatar
Jakub Jirutka committed
23
builddir="$srcdir/Python-$pkgver"
24

25 26 27 28 29
# secfixes
#   3.6.5-r0:
#     - CVE-2018-1060
#     - CVE-2018-1061

30
prepare() {
31
	default_prepare
Natanael Copa's avatar
Natanael Copa committed
32

33
	cd "$builddir"
Natanael Copa's avatar
Natanael Copa committed
34 35 36 37
	# force system libs
	rm -r Modules/expat \
		Modules/zlib \
		Modules/_ctypes/darwin* \
38
		Modules/_ctypes/libffi*
39 40
}

41
build() {
42 43
	cd "$builddir"

44 45 46 47 48 49
	# --enable-optimizations is not enabled because it
	# is very, very slow as many tests are ran sequentially
	# for profile guided optimizations. additionally it
	# seems some of the training tests hang on certain
	# e.g. architectures (x86) possibly due to grsec or musl.

50 51
	./configure \
		--prefix=/usr \
52
		--disable-rpath \
Natanael Copa's avatar
Natanael Copa committed
53
		--enable-ipv6 \
54 55
		--enable-loadable-sqlite-extensions \
		--enable-shared \
56
		--with-lto \
Natanael Copa's avatar
Natanael Copa committed
57 58
		--with-computed-gotos \
		--with-dbmliborder=gdbm:ndbm \
59 60
		--with-system-expat \
		--with-system-ffi \
61
		--with-threads
62

63 64 65
	# set thread stack size to 1MB so we don't segfault before we hit
	# sys.getrecursionlimit()
	make EXTRA_CFLAGS="$CFLAGS -DTHREAD_STACK_SIZE=0x100000"
66 67 68 69
}

check() {
	cd "$builddir"
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

	# test that we reach recursionlimit before we segfault
	cat > test-stacksize.py <<-EOF
	import threading
	import sys

	def fun(i):
	  try:
	    fun(i+1)
	  except:
	    sys.exit(0)

	t = threading.Thread(target=fun, args=[1])
	t.start()
EOF
	LD_LIBRARY_PATH=$PWD ./python test-stacksize.py

87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
	local fail

	# musl related
	fail="test__locale test_locale test_strptime test_re"	# various musl locale deficiencies
	fail="$fail test_datetime"				# hangs if 'tzdata' installed
	fail="$fail test_os"					# fpathconf, ttyname errno values
	fail="$fail test_posix"					# sched_[gs]etscheduler not impl
	fail="$fail test_shutil"				# lchmod, requires real unzip

	# failures needing investigation
	fail="$fail test_faulthandler test_gdb"			# hangs(?)
	fail="$fail test_tokenize test_tools"			# SLOW (~60s)
	fail="$fail test_capi"					# test.test_capi.EmbeddingTests
	fail="$fail test_threadsignals"				# test_{,r}lock_acquire_interruption
	fail="$fail test_time"					# strftime/strptime %Z related
	fail="$fail test_cmath test_math"			# hang(?) on x86
	fail="$fail test_hash test_plistlib"			# fail on armhf
104
	fail="$fail test_ctypes"				# fail on aarch64 (ctypes.test.test_win32.Structures)
105 106 107 108 109

	# kernel related
	fail="$fail test_fcntl"					# wants DNOTIFY, we don't have it

	make quicktest TESTOPTS="--exclude $fail"
110 111 112
}

package() {
113
	cd "$builddir"
114
	make -j1 DESTDIR="$pkgdir" EXTRA_CFLAGS="$CFLAGS" install maninstall
115
	install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE
116 117 118
	# those are provided by python3-tkinter
	rm -r "$pkgdir"/usr/bin/idle* "$pkgdir"/usr/lib/python*/idlelib \
		"$pkgdir"/usr/lib/python*/tkinter
119 120
}

121
dev() {
122
	default_dev
Jakub Jirutka's avatar
Jakub Jirutka committed
123

124
	# pyconfig.h is needed runtime so we move it back
Jakub Jirutka's avatar
Jakub Jirutka committed
125 126 127
	mkdir -p "$pkgdir"/usr/include/python${_basever}m
	mv "$subpkgdir"/usr/include/python${_basever}m/pyconfig.h \
		"$pkgdir"/usr/include/python${_basever}m/
128 129
}

130 131
tests() {
	pkgdesc="The test modules from the main python package"
132

Jakub Jirutka's avatar
Jakub Jirutka committed
133 134 135 136 137 138 139 140
	cd "$pkgdir"/usr/lib/python$_basever
	local i; for i in */test */tests; do
		mkdir -p "$subpkgdir"/usr/lib/python$_basever/"$i"
		mv "$i"/* "$subpkgdir"/usr/lib/python$_basever/"$i"
		rm -rf "$i"
	done
	mv "$pkgdir"/usr/lib/python$_basever/test \
		"$subpkgdir"/usr/lib/python$_basever/
141
}
142

143 144 145 146 147 148 149
wininst() {
	pkgdesc="Python wininst files"
	mkdir -p "$subpkgdir"/usr/lib/python$_basever/distutils/command
	mv "$pkgdir"/usr/lib/python$_basever/distutils/command/*.exe \
		"$subpkgdir"/usr/lib/python$_basever/distutils/command
}

150
sha512sums="6b26fcd296b9bd8e67861eff10d14db7507711ddba947288d16d6def53135c39326b7f969c04bb2b2993f924d9e7ad3f5c5282a3915760bc0885cf0a8ea5eb51  Python-3.6.5.tar.xz
151
ab8eaa2858d5109049b1f9f553198d40e0ef8d78211ad6455f7b491af525bffb16738fed60fc84e960c4889568d25753b9e4a1494834fea48291b33f07000ec2  musl-find_library.patch
152
37b6ee5d0d5de43799316aa111423ba5a666c17dc7f81b04c330f59c1d1565540eac4c585abe2199bbed52ebe7426001edb1c53bd0a17486a2a8e052d0f494ad  fix-xattrs-glibc.patch
Ariadne Conill's avatar
Ariadne Conill committed
153
8402ab554bb121c5737b5dc49c18719a5655545e914eed2210374b8aeaad3db7f0cff45c1c23a8e06a0f298677995a8d35ba6336667c69125eb1428254beba20  libressl.patch"