SUMMARY="An interpreted, interactive, object-oriented programming language"
DESCRIPTION="Python is a programming language that lets you work more quickly \
and integrate your systems more effectively. You can learn to use Python and \
see almost immediate gains in productivity and lower maintenance costs.
Python runs on Windows, Linux/Unix, Mac OS X, and has been ported to the Java \
and .NET virtual machines.
Python is free to use, even for commercial products, because of its \
OSI-approved open source license."
HOMEPAGE="https://www.python.org"
LICENSE="Python"
COPYRIGHT="1990-2020 Python Software Foundation"
REVISION="1"
SOURCE_URI="https://www.python.org/ftp/python/$portVersion/Python-$portVersion.tar.xz"
CHECKSUM_SHA256="b1d3a76420375343b5e8a22fceb1ac65b77193e9ed27146524f0a9db058728ea"
SOURCE_DIR="Python-$portVersion"
PATCHES="python3-$portVersion.patchset"
if [ "$secondaryArchSuffix" = _x86 ] ; then
	PATCHES+="
		python3_x86-$portVersion.patchset
	"
fi

ARCHITECTURES="all !x86_gcc2 ?x86"
SECONDARY_ARCHITECTURES="x86"

# On x86_gcc2 we don't want to install the commands in bin/<arch>/, but in bin/.
commandSuffix=$secondaryArchSuffix
commandBinDir=$binDir
if [ "$targetArchitecture" = x86_gcc2 ]; then
	commandSuffix=
	commandBinDir=$prefix/bin
fi

PROVIDES="
	python38$secondaryArchSuffix = $portVersion compat >= 3.8
	cmd:2to3_3.8 = $portVersion compat >= 3.8
	cmd:idle3.8 = $portVersion compat >= 3.8
	cmd:pydoc3.8 = $portVersion compat >= 3.8
	cmd:python3.8 = $portVersion compat >= 3.8
	cmd:python3.8_config = $portVersion compat >= 3.8
	cmd:pyvenv_3.8 = $portVersion compat >= 3.8
	devel:libpython3.8$secondaryArchSuffix = 1.0
	lib:libpython3.8$secondaryArchSuffix = 1.0
	"
REQUIRES="
	haiku$secondaryArchSuffix
	cmd:file
	lib:libbz2$secondaryArchSuffix
	lib:libexpat$secondaryArchSuffix
	lib:libffi$secondaryArchSuffix
	lib:libintl$secondaryArchSuffix
	lib:liblzma$secondaryArchSuffix
	lib:libncurses$secondaryArchSuffix
	lib:libssl$secondaryArchSuffix
	lib:libedit$secondaryArchSuffix
	lib:libsqlite3$secondaryArchSuffix
	lib:libz$secondaryArchSuffix
	"
BUILD_REQUIRES="
	devel:libbz2$secondaryArchSuffix
	devel:libexpat$secondaryArchSuffix
	devel:libffi$secondaryArchSuffix
	devel:liblzma$secondaryArchSuffix
	devel:libncurses$secondaryArchSuffix
	devel:libssl$secondaryArchSuffix
	devel:libedit$secondaryArchSuffix
	devel:libsqlite3$secondaryArchSuffix
	devel:libz$secondaryArchSuffix
	"
BUILD_PREREQUIRES="
	haiku${secondaryArchSuffix}_devel
	autoconf_archive
	cmd:aclocal
	cmd:autoconf
	cmd:find
	cmd:gcc$secondaryArchSuffix
	cmd:ld$secondaryArchSuffix
	cmd:libtoolize
	cmd:pkg_config$secondaryArchSuffix
	cmd:make
	"

GLOBAL_WRITABLE_FILES="
	non-packaged/lib/python3.8/site-packages directory keep-old
	"

BUILD()
{
	export CFLAGS="-D_BSD_SOURCE"
	rm -Rf Modules/expat

	libtoolize --force --copy --install
	aclocal
	autoconf
	export OPT=""

	runConfigure --omit-dirs binDir,includeDir ./configure \
		--enable-shared --without-ensurepip --with-system-ffi \
		--with-system-expat --bindir=$commandBinDir --includedir=$developDir/headers

	# prevent make from rebuilding stuff that requires python
	touch Parser/asdl* Python/Python-ast.c Include/Python-ast.h

	rm -f python

	make $jobArgs
}

INSTALL()
{
	make install

	rm $libDir/libpython3.so

	if [ "$targetArchitecture" = x86_gcc2 ]; then
		# On x86_gcc2, move lib-dynload to lib/python3.x/
		mv $libDir/python3.8/lib-dynload $prefix/lib/python3.8/
	fi
	prepareInstalledDevelLibs libpython3.8
	fixPkgconfig
	if [ "$targetArchitecture" = x86_gcc2 ]; then
		# fix pkgconfig to match configure flags
		sed -i -e 's,headers/x86,headers,' $developLibDir/pkgconfig/python*.pc
	fi

	mkdir -p $prefix/lib/python3.8/vendor-packages
	echo 'This directory contains packaged python modules.' \
		>$prefix/lib/python3.8/vendor-packages/README

	mkdir -p $prefix/non-packaged/lib/python3.8
	mv $prefix/lib/python3.8/site-packages $prefix/non-packaged/lib/python3.8/

	# drop testsuite altogether; move to a separate package if needed
	cd $prefix/lib/python3.8
	rm -rf ctypes/test distutils/tests idlelib/idle_test lib2to3/tests \
		sqlite3/test test tkinter/test unittest/test

	rm -f $prefix/bin/{2to3,idle3,pydoc3,python3,python3-config}
}

TEST()
{
	cd Lib/test
	rm -f test_asynchat.py  # this one stalls, so skip it for now
	rm -f test_multiprocessing.py  # this one stalls, so skip it for now

	cd ../..
	make $jobArgs test
}
