view Makefile @ 45:5e046980990d

Call the package.py script with WRKSRC as the CWD. This removes the need for patching sysconfig.py and package.py (PyPy3) because files that are created by the scripts in the CWD now are created in WRKSRC. This is also consistent with other build stept, where an explicit change of the CWD to WRKSRC is done.
author Franz Glasner <fzglas.hg@dom66.de>
date Sun, 09 Oct 2022 19:11:04 +0200
parents af3a2629a882
children 948aab4fc6b9
line wrap: on
line source

# Created by: David Naylor <naylor.b.david@gmail.com>

PORTNAME?=	pypy
PORTREVISION?=	2
CATEGORIES=	lang python
MASTER_SITES=	https://downloads.python.org/pypy/
DISTNAME?=	${PYTHON_IMPL_MINOR}-v${DISTVERSION}-src

MAINTAINER=	python@FreeBSD.org
COMMENT=	Fast, compliant implementation of the Python language
WWW=		 http://pypy.org

LICENSE=	MIT PSFL
LICENSE_COMB=	multi
LICENSE_FILE_MIT=	${WRKSRC}/LICENSE

BROKEN_armv6=		fails to package: pypy_objspace_std.c: Crash in JIT!
BROKEN_armv7=		fails to package: pypy_objspace_std.c: Crash in JIT!
BROKEN_powerpc64=	fails to compile: platcheck_109.c: fatal error: linux/auxvec.h: No such file or directory
ONLY_FOR_ARCHS?=	amd64 armv6 armv7 i386 powerpc64 powerpc64le
ONLY_FOR_ARCHS_REASON?=	PyPy JIT only supported on these architectures

LIB_DEPENDS+=	libexpat.so:textproc/expat2 \
		libffi.so:devel/libffi
TEST_DEPENDS=	${LOCALBASE}/${PYPY_DIR}/lib_pypy/_gdbm_cffi.${PYPY_CFFI_VER}.so:databases/pypy-gdbm \
		${LOCALBASE}/${PYPY_DIR}/lib_pypy/_sqlite3_cffi.${PYPY_CFFI_VER}.so:databases/pypy-sqlite3 \
		${LOCALBASE}/${PYPY_DIR}/lib_pypy/_tkinter/tklib_cffi.${PYPY_CFFI_VER}.so:x11-toolkits/pypy-tkinter

USES=		gettext-runtime gmake shebangfix ssl tar:bzip2
USE_LDCONFIG=	${PREFIX}/${PYPY_DIR}/bin

OPTIONS_SINGLE=	TRANS
OPTIONS_SINGLE_TRANS=	PYTHON
PYTHON_DESC=	Use Python-2.7 to translate (slowest)
PYPY_DESC=	Use PyPy to translate (fastest, highest memory usage)
PYPY_MINMEM_DESC=	Use PyPy to translate (lowest memory usage)
TRANS_DESC=	Translation method
LOCALBASE?=	/usr/local
# Only allow building with pypy if it wouldn't cause a dependency loop (pypy depending on itself)
.if exists(${LOCALBASE}/bin/pypy) || ${PORTNAME} != pypy
OPTIONS_SINGLE_TRANS+=	PYPY PYPY_MINMEM
. if exists(${LOCALBASE}/bin/pypy)
OPTIONS_DEFAULT=	PYPY_MINMEM
. else
OPTIONS_DEFAULT=	PYTHON
. endif
.else
OPTIONS_SLAVE=	PYTHON
.endif

ALL_TARGET=	${PYPY_EXECUTABLE}
BUILD_WRKSRC?=	${WRKDIR}/build/usession-${PORTNAME}-0/testing_1
MAKE_ENV+=	PYPY_LOCALBASE=${LOCALBASE} LDSHARED="${CC} -shared"
PACKAGE_ARGS?=	--without-gdbm --without-sqlite3 --without-_tkinter
LLD_UNSAFE=	yes
SHEBANG_FILES?=	lib-python/2.7/plat-mac/appletrunner.py \
		lib-python/2.7/plat-mac/bundlebuilder.py \
		lib-python/2.7/keyword.py \
		lib-python/2.7/test/regrtest.py \
		lib-python/2.7/test/pystone.py \
		lib-python/2.7/test/curses_tests.py \
		lib-python/2.7/test/re_tests.py \
		lib-python/2.7/test/crashers/recursive_call.py \
		lib-python/2.7/test/bisect_cmd.py \
		lib-python/2.7/UserString.py \
		lib-python/2.7/pdb.py \
		lib-python/2.7/mimify.py \
		lib-python/2.7/pydoc.py \
		lib-python/2.7/uu.py \
		lib-python/2.7/trace.py \
		lib-python/2.7/platform.py \
		lib-python/2.7/profile.py \
		lib-python/2.7/tabnanny.py \
		lib-python/2.7/lib2to3/tests/pytree_idempotency.py \
		lib-python/2.7/lib2to3/tests/data/false_encoding.py \
		lib-python/2.7/lib2to3/tests/data/different_encoding.py \
		lib-python/2.7/lib2to3/pgen2/token.py \
		lib-python/2.7/encodings/rot_13.py \
		lib-python/2.7/base64.py \
		lib-python/2.7/webbrowser.py \
		lib-python/2.7/idlelib/PyShell.py \
		lib-python/2.7/cgi.py \
		lib-python/2.7/symbol.py \
		lib-python/2.7/cProfile.py \
		lib-python/2.7/smtpd.py \
		lib-python/2.7/quopri.py \
		lib-python/2.7/timeit.py \
		lib-python/2.7/smtplib.py \
		lib_pypy/_cffi_ssl/tools/make_ssl_data.py

python_OLD_CMD=	${LOCALBASE}/bin/python
python_CMD=	${PREFIX}/bin/${PORTNAME}

.if ${PORTNAME} != pypy
PYPY_BUILD_DEPENDS=	pypy:lang/pypy
PYPY_MINMEM_BUILD_DEPENDS=	pypy:lang/pypy
.endif
PYPY_VARS=	PYTHON_CMD=${LOCALBASE}/bin/pypy
PYPY_MINMEM_VARS=	PYTHON_CMD="${SETENV} PYPY_GC_MAX_DELTA=200MB ${LOCALBASE}/bin/pypy --jit loop_longevity=300"
PYTHON_BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}pycparser>=2.10:devel/py-pycparser@${PY_FLAVOR}
PYTHON_USES=	python:2.7,build

DESCR=		${.CURDIR}/pkg-descr
PATCHDIR=	${.CURDIR}/files

.include "bsd.pypy.mk"
#.include <bsd.port.pre.mk>

DISTINFO_FILE?=	${.CURDIR}/distinfo
PLIST?=		${.CURDIR}/pkg-plist

.if ${OPSYS} == FreeBSD && ${ARCH} != i386 && ${ARCH} != amd64
PYPY_ARGS=	--withoutmod-_vmprof
.else
LIB_DEPENDS+=	libunwind.so:devel/libunwind
.endif

pre-build:
	if [ ! -f ${BUILD_WRKSRC}/Makefile ]; then \
		${RM} -r ${WRKDIR}/build; \
		${MKDIR} ${WRKDIR}/build; \
		(cd ${WRKSRC}/pypy/goal; \
			${SETENV} ${MAKE_ENV} TMPDIR=${WRKDIR}/build PYPY_USESSION_BASENAME=${PORTNAME} \
			${PYTHON_CMD} ../../rpython/bin/rpython --source -Ojit targetpypystandalone.py ${PYPY_ARGS}); \
	fi

post-build:
	${CP} ${BUILD_WRKSRC}/${PYPY_EXECUTABLE} ${BUILD_WRKSRC}/${PYPY_LDLIBRARY} ${WRKSRC}/pypy/goal/

do-install:
	(cd ${WRKSRC}; \
		${SETENV} ${MAKE_ENV} TMPDIR=${WRKDIR}/build \
			${PYTHON_CMD} ${WRKSRC}/pypy/tool/release/package.py --builddir ${WRKDIR}/build --archive-name ${PYPY_DIR} \
				${PACKAGE_ARGS})
	${EXTRACT_CMD} -C ${STAGEDIR}${PREFIX} -xf ${WRKDIR}/build/${PYPY_DIR}.tar.bz2
	${LN} -fs ../${PYPY_DIR}/bin/${PORTNAME} ${STAGEDIR}${PREFIX}/bin/${PORTNAME}
.if ${PORT_OPTIONS:MFORPYIMPL38} || ${PORT_OPTIONS:MFORPYIMPL39}
	${FIND} ${STAGEDIR}${PREFIX}/${PYPY_DIR}/lib/${PYTHON_IMPL_MINOR} -name '*.so' | ${XARGS} ${STRIP_CMD}
.else
	${FIND} ${STAGEDIR}${PREFIX}/${PYPY_DIR}/lib_pypy/ -name '*.so' | ${XARGS} ${STRIP_CMD}
.endif

do-test:
	# See https://bitbucket.org/pypy/buildbot/src/default/bot2/pypybuildbot/builds.py?at=default#builds.py-386
	# add_translated_tests()
	(cd ${WRKSRC}; \
		${SETENV} ${MAKE_ENV} TMPDIR=${WRKDIR}/build PYTHONPATH=${WRKSRC} \
		${WRKSRC}/pypy/goal/pypy-c testrunner/runner.py --root pypy --logfile=pytest-A.log \
			--parallel-runs ${MAKE_JOBS_NUMBER} \
			--config pypy/pytest-A.cfg --config pypy/pytest-A.py)
.for dir in lib-python pypy/module/pypyjit/test
	(cd ${WRKSRC}; \
		${SETENV} ${MAKE_ENV} TMPDIR=${WRKDIR}/build PYTHONPATH=${WRKSRC} \
		${WRKSRC}/pypy/goal/pypy-c pypy/test_all.py --basetemp ${WRKDIR}/build --pypy pypy/goal/pypy-c \
			${dir} )
.endfor
	(cd ${WRKSRC}/lib-python/2.7/test; \
		${SETENV} ${MAKE_ENV} TMPDIR=${WRKDIR}/build PYTHONPATH=${WRKSRC} \
		${WRKSRC}/pypy/goal/pypy-c regrtest.py -vvu all)

pkg-plist: stage
	${TAR} -tf ${WRKDIR}/build/${PYPY_DIR}.tar.bz2 > ${WRKDIR}/.plist-files-gen
	${REINPLACE_CMD} -e 's|^${PYPY_DIR}|%%PYPY_DIR%%|g' \
		-e 's|${PYPY_CFFI_VER}|%%PYPY_CFFI_VER%%|g' \
		-e 's/\(.*\/__pycache__\)\/$$/@dir \1/g' \
		-e '/\/$$/d' \
			${WRKDIR}/.plist-files-gen
	${ECHO} bin/${PORTNAME} > ${WRKDIR}/pkg-plist
	${SORT} ${WRKDIR}/.plist-files-gen | ${GREP} -v '\.orig' >> ${WRKDIR}/pkg-plist
	${CP} ${WRKDIR}/pkg-plist ${.CURDIR}/pkg-plist

.include <bsd.port.post.mk>