# Maintainer: Ɓukasz Jendrysik <scadu@yandex.com>
# Contributor: Kiyoshi Aman <kiyoshi.aman@gmail.com>

setvar pkgname = 'python3'
setvar pkgver = '3.6.3'
setvar _basever = "${pkgver%.*}"
setvar pkgrel = '3'
setvar pkgdesc = ""A high-level scripting language""
setvar url = ""http://www.python.org""
setvar arch = ""all""
setvar license = ""custom""
setvar provides = ""py3-pip""
setvar subpackages = ""$pkgname-dev $pkgname-doc $pkgname-tests::noarch
	$pkgname-tkinter:tkinter $pkgname-wininst""
setvar makedepends = ""expat-dev libressl-dev zlib-dev ncurses-dev bzip2-dev xz-dev
	sqlite-dev libffi-dev tcl-dev linux-headers gdbm-dev readline-dev
	tk tk-dev""
setvar source = ""http://www.python.org/ftp/python/$pkgver/Python-$pkgver.tar.xz
	musl-find_library.patch
	fix-xattrs-glibc.patch
	bpo-30353.patch
	""
setvar builddir = ""$srcdir/Python-$pkgver""

proc prepare {
	default_prepare

	cd $builddir
	# force system libs
	rm -r Modules/expat \
		Modules/zlib \
		Modules/_ctypes/darwin* \
		Modules/_ctypes/libffi*
}

proc build {
	cd $builddir

	# --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.

	./configure \
		--prefix=/usr \
		--disable-rpath \
		--enable-ipv6 \
		--enable-loadable-sqlite-extensions \
		--enable-shared \
		--with-lto \
		--with-computed-gotos \
		--with-dbmliborder=gdbm:ndbm \
		--with-system-expat \
		--with-system-ffi \
		--with-threads

	make EXTRA_CFLAGS="$CFLAGS"
}

proc check {
	cd $builddir
	local fail

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

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

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

	make quicktest TESTOPTS="--exclude $fail"
}

proc package {
	cd $builddir
	make -j1 DESTDIR="$pkgdir" EXTRA_CFLAGS="$CFLAGS" install maninstall
	install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE
}

proc dev {
	default_dev

	# pyconfig.h is needed runtime so we move it back
	mkdir -p "$pkgdir"/usr/include/python${_basever}m
	mv "$subpkgdir"/usr/include/python${_basever}m/pyconfig.h \
		"$pkgdir"/usr/include/python${_basever}m/
}

proc tests {
	setvar pkgdesc = ""The test modules from the main python package""

	cd "$pkgdir"/usr/lib/python$_basever
	local i; for i in */test */tests {
		mkdir -p "$subpkgdir"/usr/lib/python$_basever/"$i"
		mv "$i"/* "$subpkgdir"/usr/lib/python$_basever/"$i"
		rm -rf $i
	}
	mv "$pkgdir"/usr/lib/python$_basever/test \
		"$subpkgdir"/usr/lib/python$_basever/
}

proc tkinter {
	setvar pkgdesc = ""A graphical user interface for the Python""
	local libdir="usr/lib/python$_basever/lib-dynload"

	mkdir -p "$subpkgdir"/$libdir
	mv "$pkgdir"/$libdir/_tkinter.*.so "$subpkgdir"/$libdir/
}

proc wininst {
	setvar 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
}

setvar sha512sums = ""32f24a3adcb7880003c7ecdc5e53e838e774adda76b308961d8215e28db630b2fa2828097817924c76afa4212b2df3362eb64d4e10f37c0147f512ec5aa8662b  Python-3.6.3.tar.xz
ab8eaa2858d5109049b1f9f553198d40e0ef8d78211ad6455f7b491af525bffb16738fed60fc84e960c4889568d25753b9e4a1494834fea48291b33f07000ec2  musl-find_library.patch
37b6ee5d0d5de43799316aa111423ba5a666c17dc7f81b04c330f59c1d1565540eac4c585abe2199bbed52ebe7426001edb1c53bd0a17486a2a8e052d0f494ad  fix-xattrs-glibc.patch
df54032e66171483aad24f9f370e185072dcb2d6981210a8dd79b5fa51c2c7aa64da2501aa96bb5009bfb658387851068bc82f23c515f739672722495c2c98dd  bpo-30353.patch""