Changeset View
Changeset View
Standalone View
Standalone View
Mk/Uses/python.mk
# $FreeBSD: head/Mk/Uses/python.mk 423986 2016-10-14 19:50:00Z antoine $ | # $FreeBSD: head/Mk/Uses/python.mk 423986 2016-10-14 19:50:00Z antoine $ | ||||
# | # | ||||
# Provide support for Python related ports. This includes detecting Python | # Provide support for Python related ports. This includes detecting Python | ||||
# interpreters, ports providing package and modules for python as well as | # interpreters, ports providing package and modules for python as well as | ||||
# consumer ports requiring Python at build or run time. | # consumer ports requiring Python at build or run time. | ||||
# | # | ||||
# Feature: python | # Feature: python | ||||
# Usage: USES=python or USES=python:args | # Usage: USES=python or USES=python:args | ||||
# Valid ARGS: <version>, build, run, test | # Valid ARGS: <version>, <implementation>, build, run, test | ||||
# | # | ||||
# version If your port requires only some set of Python versions, you | # version If your port requires only some set of Python versions, you | ||||
# can set this to [min]-[max] or min+ or -max or as an | # can set this to [min]-[max] or min+ or -max or as an | ||||
# explicit version or as a meta port version (eg. 3.3-3.4 for | # explicit version or as a meta port version (eg. 3.3-3.4 for | ||||
# [min]-[max], 2.7+ or -3.3 for min+ and -max, 2.7 for an | # [min]-[max], 2.7+ or -3.3 for min+ and -max, 2.7 for an | ||||
# explicit version or 3 for a meta port version). Example: | # explicit version or 3 for a meta port version). Example: | ||||
# | # | ||||
# USES=python:2.7 # Only use Python 2.7 | # USES=python:2.7 # Only use Python 2.7 | ||||
# USES=python:3.3+ # Use Python 3.3 or newer | # USES=python:3.3+ # Use Python 3.3 or newer | ||||
# USES=python:3.3-3.4 # Use Python 3.3 or 3.4 | # USES=python:3.3-3.4 # Use Python 3.3 or 3.4 | ||||
# USES=python:-3.3 # Use any Python up to 3.3 | # USES=python:-3.3 # Use any Python up to 3.3 | ||||
# USES=python:2 # Use the Python 2 meta port | # USES=python:2 # Use the Python 2 meta port | ||||
# USES=python # Use the set default Python | # USES=python # Use the set default Python | ||||
# # version | # # version | ||||
# | # | ||||
# implementation If your port requires a specific Python implementation, you | |||||
# can specify this: | |||||
# | |||||
# USES=python:cpython # lang/python | |||||
# USES=python:pypy # lang/pypy | |||||
# | |||||
# build Indicates that Python is needed at build time and adds | # build Indicates that Python is needed at build time and adds | ||||
# it to BUILD_DEPENDS. | # it to BUILD_DEPENDS. | ||||
# run Indicates that Python is needed at run time and adds | # run Indicates that Python is needed at run time and adds | ||||
# it to RUN_DEPENDS. | # it to RUN_DEPENDS. | ||||
# test Indicates that Python is needed at test time and adds | # test Indicates that Python is needed at test time and adds | ||||
# it to TEST_DEPENDS. | # it to TEST_DEPENDS. | ||||
# | # | ||||
# If build, run and test are omitted, Python will be added as BUILD_DEPENDS, | # If build, run and test are omitted, Python will be added as BUILD_DEPENDS, | ||||
# RUN_DEPENDS and TEST_DEPENDS. PYTHON_NO_DEPENDS can be set to not add any | # RUN_DEPENDS and TEST_DEPENDS. PYTHON_NO_DEPENDS can be set to not add any | ||||
# dependencies. | # dependencies. | ||||
# | # | ||||
# Variables, which can be set by a user: | # Variables, which can be set by a user: | ||||
# | # | ||||
# PYTHON_VERSION - The chosen Python interpreter including the version, | # PYTHON_VERSION - The chosen Python interpreter including the version, | ||||
# e.g. python2.7, python3.3, etc. This allows the user | # e.g. cpython2.7, pypy3.3, etc. This allows the user | ||||
# to override the currently chosen default version and | # to override the currently chosen default version and | ||||
# to install the port for a specific Python version. | # to install the port for a specific Python version. | ||||
# It must not be set by a port. | # It must not be set by a port. | ||||
# | # | ||||
# Variables, which can be set by the port: | # Variables, which can be set by the port: | ||||
# | # | ||||
# USE_PYTHON - A list of additional features and functionality to | # USE_PYTHON - A list of additional features and functionality to | ||||
# enable. Supported features are: | # enable. Supported features are: | ||||
Show All 39 Lines | |||||
# | # | ||||
# pythonprefix - Says that the port installs in ${PYTHONBASE} instead | # pythonprefix - Says that the port installs in ${PYTHONBASE} instead | ||||
# of ${PREFIX}. | # of ${PREFIX}. | ||||
# | # | ||||
# noegginfo - Skip an egg-info entry from plist, if defined. | # noegginfo - Skip an egg-info entry from plist, if defined. | ||||
# | # | ||||
# PYTHON_CMD - Python's command line file name, including the | # PYTHON_CMD - Python's command line file name, including the | ||||
# version number (used for dependencies). | # version number (used for dependencies). | ||||
# default: ${PYTHONBASE}/bin/${PYTHON_VERSION} | # default: | ||||
# cpython: ${PYTHONBASE}/bin/python${PYTHON_VER} | |||||
# pypy: ${LOCALBASE}/bin/pypy${PYTHON_MAJOR_VER:S/2//} | |||||
# | # | ||||
# PYTHON_LIB - Python's library file name (used to link against) | |||||
dbn: Would it not be better to rename this to PYTHON_LDFLAGS and define it as: -L${LOCALBASE}/lib… | |||||
# default: | |||||
# cpython: ${PYTHONBASE}/lib/libpython${PYTHON_VER}${PYTHON_ABIVER}.so | |||||
# pypy: ${PYTHON_LIBDIR}/libpypy-c.so | |||||
# | |||||
# PYSETUP - Name of the setup script used by the distutils | # PYSETUP - Name of the setup script used by the distutils | ||||
# package. | # package. | ||||
# default: setup.py | # default: setup.py | ||||
# | # | ||||
# PYDISTUTILS_PKGNAME | # PYDISTUTILS_PKGNAME | ||||
# - Internal name in the distutils for egg-info. | # - Internal name in the distutils for egg-info. | ||||
# default: ${PORTNAME} | # default: ${PORTNAME} | ||||
# | # | ||||
Show All 18 Lines | |||||
# default: <empty> | # default: <empty> | ||||
# | # | ||||
# PYDISTUTILS_BUILDARGS | # PYDISTUTILS_BUILDARGS | ||||
# - Arguments to build with distutils. | # - Arguments to build with distutils. | ||||
# default: <empty> | # default: <empty> | ||||
# | # | ||||
# PYDISTUTILS_INSTALLARGS | # PYDISTUTILS_INSTALLARGS | ||||
# - Arguments to install with distutils. | # - Arguments to install with distutils. | ||||
# default: -c -O1 --prefix=${PREFIX} --single-version-externally-managed --root=${STAGEDIR} | # default: -c -O1 --prefix=${PYTHONPREFIX} --single-version-externally-managed --root=${STAGEDIR} | ||||
# | # | ||||
# PYDISTUTILS_EGGINFO | # PYDISTUTILS_EGGINFO | ||||
# - Canonical name for egg-info. | # - Canonical name for egg-info. | ||||
# default: ${PYDISTUTILS_PKGNAME:C/[^A-Za-z0-9.]+/_/g}-${PYDISTUTILS_PKGVERSION:C/[^A-Za-z0-9.]+/_/g}-py${PYTHON_VER}.egg-info | # default: ${PYDISTUTILS_PKGNAME:C/[^A-Za-z0-9.]+/_/g}-${PYDISTUTILS_PKGVERSION:C/[^A-Za-z0-9.]+/_/g}-py${PYTHON_VER}.egg-info | ||||
# | # | ||||
# The following variables can be read by ports and must not be modified: | # The following variables can be read by ports and must not be modified: | ||||
# | # | ||||
# PYTHONBASE - The installation prefix of the chosen Python | # PYTHONBASE - The installation prefix of the chosen Python | ||||
# interpreter, e.g. /usr/local | # interpreter | ||||
# default: | |||||
# cpython: ${LOCALBASE} | |||||
# pypy: ${LOCALBASE}/pypy-${PYPY_VER} | |||||
# | # | ||||
# PYTHON_PORTVERSION | # PYTHON_PORTVERSION | ||||
# - Version number suitable for ${PORTVERSION}. | # - Version number suitable for ${PORTVERSION}. | ||||
# | # | ||||
# PYTHON_PORTSDIR - The port directory of the chosen Python interpreter | # PYTHON_PORTSDIR - The port directory of the chosen Python interpreter | ||||
# | # | ||||
# PYTHON_REL - The release number of the chosen Python interpreter | # PYTHON_REL - The release number of the chosen Python interpreter | ||||
# without dots, e.g. 2706, 3401, ... | # without dots, e.g. 2706, 3401, ... | ||||
# | # | ||||
# PYTHON_SUFFIX - The major-minor release number of the chosen Python | # PYTHON_SUFFIX - The major-minor release number of the chosen Python | ||||
# interpreter without dots, e.g. 27, 34, ... | # interpreter without dots, e.g. 27, 34, ... | ||||
# Used for prefixes and suffixes. | # Used for prefixes and suffixes. | ||||
# | # | ||||
# PYTHON_MAJOR_VER - The major release version of the chosen Python | # PYTHON_MAJOR_VER - The major release version of the chosen Python | ||||
# interpreter, e.g. 2, 3, ... | # interpreter, e.g. 2, 3, ... | ||||
# | # | ||||
# PYTHON_VER - The major-minor release version of the chosen Python | # PYTHON_VER - The major-minor release version of the chosen Python | ||||
# interpreter, e.g. 2.7, 3.4, ... | # interpreter, e.g. 2.7, 3.4, ... | ||||
# | # | ||||
# PYTHON_ABIVER - Additional ABI flags set by the chosen Python | # PYTHON_ABIVER - Additional ABI flags set by the chosen Python | ||||
# interpreter, e.g. md | # interpreter, e.g. md | ||||
# | # | ||||
# PYTHON_INCLUDEDIR - Location of the Python include files. | # PYTHON_INCLUDEDIR - Location of the Python include files. | ||||
# default: ${PYTHONBASE}/include/${PYTHON_VERSION} | # default: | ||||
# cpython: ${PYTHONBASE}/include/python${PYTHON_VER} | |||||
# pypy: ${PYTHONBASE}/include | |||||
# | # | ||||
# PYTHON_LIBDIR - Base of the python library tree | # PYTHON_LIBDIR - Base of the python library tree | ||||
# default: ${PYTHONBASE}/lib/${PYTHON_VERSION} | # default: | ||||
# cpython: ${PYTHONBASE}/lib/python${PYTHON_VER} | |||||
# pypy: ${PYTHONBASE}/bin | |||||
# | # | ||||
# PYTHON_SITELIBDIR - Location of the site-packages tree. Don't change, | # PYTHON_SITELIBDIR - Location of the site-packages tree. Don't change, | ||||
# unless you know what you do. | # unless you know what you do. | ||||
# default: ${PYTHON_LIBDIR}/site-packages | # default: | ||||
# cpython: ${PYTHON_LIBDIR}/site-packages | |||||
# pypy: ${PYTHONBASE}/site-packages | |||||
# | # | ||||
# There are PREFIX-clean variants of the PYTHON_*DIR variables above. | # There are PREFIX-clean variants of the PYTHON_*DIR variables above. | ||||
# They are meant to be used by ports instead of the above variables, so the | # They are meant to be used by ports instead of the above variables, so the | ||||
# ports respect ${PREFIX} (unless USE_PYTHON=pythonprefix is specified). | # ports respect ${PREFIX} (unless USE_PYTHON=pythonprefix is specified). | ||||
# | # | ||||
# PYTHONPREFIX_INCLUDEDIR default: ${PREFIX}/include/${PYTHON_VERSION} | # PYTHONPREFIX_INCLUDEDIR | ||||
# PYTHONPREFIX_LIBDIR default: ${PREFIX}/lib/${PYTHON_VERSION} | # PYTHONPREFIX_LIBDIR | ||||
# PYTHONPREFIX_SITELIBDIR default: ${PYTHONPREFIX_LIBDIR}/site-packages | # PYTHONPREFIX_SITELIBDIR | ||||
# | # | ||||
# PYTHON_PLATFORM - Python's idea of the OS release. | # PYTHON_PLATFORM - Python's idea of the OS release. | ||||
# This is faked with ${OPSYS} and ${OSREL} until we | # This is faked with ${OPSYS} and ${OSREL} until we | ||||
# find out how to delay defining a variable until | # find out how to delay defining a variable until | ||||
# after a certain target has been built. | # after a certain target has been built. | ||||
# | # | ||||
# PYTHON_PKGNAMEPREFIX | # PYTHON_PKGNAMEPREFIX | ||||
# - Use this as a ${PKGNAMEPREFIX} to distinguish | # - Use this as a ${PKGNAMEPREFIX} to distinguish | ||||
# packages for different Python versions. | # packages for different Python versions. | ||||
# default: py${PYTHON_SUFFIX}- | # default: py${PYTHON_SUFFIX}- | ||||
# | # | ||||
# Using USES=python.mk also will add some useful entries to PLIST_SUB: | # Using USES=python also will add some useful entries to PLIST_SUB: | ||||
# | # | ||||
# PYTHON_INCLUDEDIR=${PYTHONPREFIX_INCLUDEDIR:S;${PREFIX}/;;} | # PYTHON_INCLUDEDIR=${PYTHONPREFIX_INCLUDEDIR:S;${PREFIX}/;;} | ||||
# PYTHON_LIBDIR=${PYTHONPREFIX_LIBDIR:S;${PREFIX}/;;} | # PYTHON_LIBDIR=${PYTHONPREFIX_LIBDIR:S;${PREFIX}/;;} | ||||
# PYTHON_PLATFORM=${PYTHON_PLATFORM} | # PYTHON_PLATFORM=${PYTHON_PLATFORM} | ||||
# PYTHON_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;} | # PYTHON_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;} | ||||
# PYTHON_VER=${PYTHON_VER} | # PYTHON_VER=${PYTHON_VER} | ||||
# PYTHON_VERSION=${PYTHON_VERSION} | # PYTHON_VERSION=${PYTHON_VERSION} | ||||
# | # | ||||
Show All 14 Lines | |||||
# PYDISTUTILS_INSTALLNOSINGLE | # PYDISTUTILS_INSTALLNOSINGLE | ||||
# - Deprecated without replacement | # - Deprecated without replacement | ||||
# | # | ||||
# MAINTAINER: python@FreeBSD.org | # MAINTAINER: python@FreeBSD.org | ||||
.if !defined(_INCLUDE_USES_PYTHON_MK) | .if !defined(_INCLUDE_USES_PYTHON_MK) | ||||
_INCLUDE_USES_PYTHON_MK= yes | _INCLUDE_USES_PYTHON_MK= yes | ||||
# What Python version and what Python interpreters are currently supported? | |||||
# When adding a version, please keep the comment in | |||||
# Mk/bsd.default-versions.mk in sync. | |||||
_PYTHON_VERSIONS= 2.7 3.5 3.4 3.3 # preferred first | |||||
_PYTHON_PORTBRANCH= 2.7 # ${_PYTHON_VERSIONS:[1]} | |||||
_PYTHON_BASECMD= ${LOCALBASE}/bin/python | |||||
_PYTHON_RELPORTDIR= lang/python | |||||
# Make each individual feature available as _PYTHON_FEATURE_<FEATURENAME> | # Make each individual feature available as _PYTHON_FEATURE_<FEATURENAME> | ||||
.for var in ${USE_PYTHON} | .for var in ${USE_PYTHON} | ||||
_PYTHON_FEATURE_${var:tu}= yes | _PYTHON_FEATURE_${var:tu}= yes | ||||
.endfor | .endfor | ||||
# Make sure that no dependency or some other environment variable | # Make sure that no dependency or some other environment variable | ||||
# pollutes the build/run dependency detection | # pollutes the build/run dependency detection | ||||
.undef _PYTHON_BUILD_DEP | .undef _PYTHON_BUILD_DEP | ||||
.undef _PYTHON_RUN_DEP | .undef _PYTHON_RUN_DEP | ||||
.undef _PYTHON_TEST_DEP | .undef _PYTHON_TEST_DEP | ||||
_PYTHON_ARGS= ${python_ARGS:S/,/ /g} | _PYTHON_ARGS= ${python_ARGS:S/,/ /g} | ||||
.if ${_PYTHON_ARGS:Mbuild} | .if ${_PYTHON_ARGS:Mbuild} | ||||
_PYTHON_BUILD_DEP= yes | _PYTHON_BUILD_DEP= yes | ||||
_PYTHON_ARGS:= ${_PYTHON_ARGS:Nbuild} | _PYTHON_ARGS:= ${_PYTHON_ARGS:Nbuild} | ||||
.endif | .endif | ||||
.if ${_PYTHON_ARGS:Mrun} | .if ${_PYTHON_ARGS:Mrun} | ||||
_PYTHON_RUN_DEP= yes | _PYTHON_RUN_DEP= yes | ||||
_PYTHON_ARGS:= ${_PYTHON_ARGS:Nrun} | _PYTHON_ARGS:= ${_PYTHON_ARGS:Nrun} | ||||
.endif | .endif | ||||
.if ${_PYTHON_ARGS:Mtest} | .if ${_PYTHON_ARGS:Mtest} | ||||
_PYTHON_TEST_DEP= yes | _PYTHON_TEST_DEP= yes | ||||
_PYTHON_ARGS:= ${_PYTHON_ARGS:Ntest} | _PYTHON_ARGS:= ${_PYTHON_ARGS:Ntest} | ||||
.endif | .endif | ||||
.undef _PYTHON_IMPL | |||||
.for impl in cpython pypy | |||||
. if ${_PYTHON_ARGS:M${impl}} | |||||
_PYTHON_IMPL+= ${impl} | |||||
_PYTHON_ARGS:= ${_PYTHON_ARGS:N${impl}} | |||||
. endif | |||||
.endfor | |||||
# The port does not specify a build, run or test dependency, assume all are | # The port does not specify a build, run or test dependency, assume all are | ||||
# required. | # required. | ||||
.if !defined(_PYTHON_BUILD_DEP) && !defined(_PYTHON_RUN_DEP) && \ | .if !defined(_PYTHON_BUILD_DEP) && !defined(_PYTHON_RUN_DEP) && \ | ||||
!defined(_PYTHON_TEST_DEP) && !defined(PYTHON_NO_DEPENDS) | !defined(_PYTHON_TEST_DEP) && !defined(PYTHON_NO_DEPENDS) | ||||
_PYTHON_BUILD_DEP= yes | _PYTHON_BUILD_DEP= yes | ||||
_PYTHON_RUN_DEP= yes | _PYTHON_RUN_DEP= yes | ||||
_PYTHON_TEST_DEP= yes | _PYTHON_TEST_DEP= yes | ||||
.endif | .endif | ||||
.for var in PYTHON_DEFAULT_VERSION PYTHON2_DEFAULT_VERSION PYTHON3_DEFAULT_VERSION PYTHON_DEFAULT PYTHON2_DEFAULT PYTHON3_DEFAULT _PYTHON_DEFAULT_VERSION | |||||
. if defined(${var}) | |||||
cleanvar:= ${${var}} | |||||
. if ${cleanvar:C/^([a-z]*).*/\1/} == "" | |||||
cleanvar:= cpython${cleanvar} | |||||
. endif | |||||
cleanvar:= ${cleanvar:S/^python/cpython/} | |||||
. if ${cleanvar} != ${${var}} | |||||
WARNING+= "Converting ${var}=${${var}} to ${var}=${cleanvar}" | |||||
${var}:= ${cleanvar} | |||||
. endif | |||||
. endif | |||||
.endfor | |||||
.if defined(PYTHON_DEFAULT_VERSION) | .if defined(PYTHON_DEFAULT_VERSION) | ||||
WARNING+= "PYTHON_DEFAULT_VERSION is defined, consider using DEFAULT_VERSIONS=python=${PYTHON_DEFAULT_VERSION:S/^python//} instead" | WARNING+= "PYTHON_DEFAULT_VERSION is defined, consider using DEFAULT_VERSIONS=python=${PYTHON_DEFAULT_VERSION:S/^python//} instead" | ||||
.endif | .endif | ||||
.if defined(PYTHON2_DEFAULT_VERSION) | .if defined(PYTHON2_DEFAULT_VERSION) | ||||
WARNING+= "PYTHON2_DEFAULT_VERSION is defined, consider using DEFAULT_VERSIONS=python2=${PYTHON2_DEFAULT_VERSION:S/^python//} instead" | WARNING+= "PYTHON2_DEFAULT_VERSION is defined, consider using DEFAULT_VERSIONS=python2=${PYTHON2_DEFAULT_VERSION:S/^python//} instead" | ||||
.endif | .endif | ||||
.if defined(PYTHON3_DEFAULT_VERSION) | .if defined(PYTHON3_DEFAULT_VERSION) | ||||
WARNING+= "PYTHON3_DEFAULT_VERSION is defined, consider using DEFAULT_VERSIONS=python3=${PYTHON3_DEFAULT_VERSION:S/^python//} instead" | WARNING+= "PYTHON3_DEFAULT_VERSION is defined, consider using DEFAULT_VERSIONS=python3=${PYTHON3_DEFAULT_VERSION:S/^python//} instead" | ||||
.endif | .endif | ||||
.if exists(${LOCALBASE}/bin/python) | .if exists(${LOCALBASE}/bin/python) | ||||
.if !defined(_PYTHON_DEFAULT_VERSION) | . if !defined(_PYTHON_DEFAULT_VERSION) | ||||
_PYTHON_DEFAULT_VERSION!= (${LOCALBASE}/bin/python -c \ | _PYTHON_DEFAULT_VERSION!= (${LOCALBASE}/bin/python -c \ | ||||
'import sys; print("%d.%d" % sys.version_info[:2])' 2> /dev/null \ | 'import platform, sys; print("%s%d.%d" % ((platform.python_implementation().lower(),) + sys.version_info[:2]))' 2> /dev/null \ | ||||
|| ${ECHO_CMD} ${_PYTHON_PORTBRANCH}) | ${TAIL} -1 | || ${ECHO_CMD} ${PYTHON_DEFAULT}) | ${TAIL} -1 | ||||
.endif | . endif | ||||
_EXPORTED_VARS+= _PYTHON_DEFAULT_VERSION | _EXPORTED_VARS+= _PYTHON_DEFAULT_VERSION | ||||
.if defined(PYTHON_DEFAULT) && (${PYTHON_DEFAULT} != ${_PYTHON_DEFAULT_VERSION}) | . if defined(PYTHON_DEFAULT) && (${PYTHON_DEFAULT} != ${_PYTHON_DEFAULT_VERSION}) | ||||
WARNING+= "Your requested default python version ${PYTHON_DEFAULT} is different from the installed default python interpreter version ${_PYTHON_DEFAULT_VERSION}" | WARNING+= "Your requested default python version ${PYTHON_DEFAULT} is different from the installed default python interpreter version ${_PYTHON_DEFAULT_VERSION}" | ||||
.endif | . endif | ||||
PYTHON_DEFAULT_VERSION= python${_PYTHON_DEFAULT_VERSION} | PYTHON_DEFAULT_VERSION= ${_PYTHON_DEFAULT_VERSION} | ||||
.else | .else | ||||
PYTHON_DEFAULT_VERSION= python${PYTHON_DEFAULT} | PYTHON_DEFAULT_VERSION= ${PYTHON_DEFAULT} | ||||
.endif # exists(${LOCALBASE}/bin/python) | .endif # exists(${LOCALBASE}/bin/python) | ||||
# Is only a meta-port version defined? | # Is only a meta-port version defined? | ||||
.if ${PYTHON_DEFAULT_VERSION} == "python2" | .if ${PYTHON_DEFAULT_VERSION:C/^[a-z]+//} == "2" | ||||
PYTHON2_DEFAULT_VERSION?= python${PYTHON2_DEFAULT} | PYTHON2_DEFAULT_VERSION?= ${PYTHON2_DEFAULT} | ||||
.elif ${PYTHON_DEFAULT_VERSION:R} == "python2" | .elif ${PYTHON_DEFAULT_VERSION:R:C/^[a-z]+//} == "2" | ||||
PYTHON2_DEFAULT_VERSION= ${PYTHON_DEFAULT_VERSION} | PYTHON2_DEFAULT_VERSION= ${PYTHON_DEFAULT_VERSION} | ||||
.else | .else | ||||
PYTHON2_DEFAULT_VERSION?= python${PYTHON2_DEFAULT} | PYTHON2_DEFAULT_VERSION?= ${PYTHON2_DEFAULT} | ||||
.endif | .endif | ||||
.if ${PYTHON_DEFAULT_VERSION} == "python3" | .if ${PYTHON_DEFAULT_VERSION:C/^[a-z]+//} == "3" | ||||
PYTHON3_DEFAULT_VERSION?= python${PYTHON3_DEFAULT} | PYTHON3_DEFAULT_VERSION?= ${PYTHON3_DEFAULT} | ||||
.elif ${PYTHON_DEFAULT_VERSION:R} == "python3" | .elif ${PYTHON_DEFAULT_VERSION:R:C/^[a-z]+//} == "3" | ||||
PYTHON3_DEFAULT_VERSION= ${PYTHON_DEFAULT_VERSION} | PYTHON3_DEFAULT_VERSION= ${PYTHON_DEFAULT_VERSION} | ||||
.else | .else | ||||
PYTHON3_DEFAULT_VERSION?= python${PYTHON3_DEFAULT} | PYTHON3_DEFAULT_VERSION?= ${PYTHON3_DEFAULT} | ||||
.endif | .endif | ||||
.if ${_PYTHON_ARGS} == "2" | .if ${_PYTHON_ARGS} == "2" | ||||
_PYTHON_ARGS= ${PYTHON2_DEFAULT_VERSION:S/^python//} | _PYTHON_ARGS= ${PYTHON2_DEFAULT_VERSION:C/^[a-z]+//} | ||||
_WANTS_META_PORT= 2 | _WANTS_META_PORT= 2 | ||||
.elif ${_PYTHON_ARGS} == "3" | .elif ${_PYTHON_ARGS} == "3" | ||||
_PYTHON_ARGS= ${PYTHON3_DEFAULT_VERSION:S/^python//} | _PYTHON_ARGS= ${PYTHON3_DEFAULT_VERSION:C/^[a-z]+//} | ||||
_WANTS_META_PORT= 3 | _WANTS_META_PORT= 3 | ||||
.endif # ${_PYTHON_ARGS} == "2" | .endif # ${_PYTHON_ARGS} == "2" | ||||
.if defined(PYTHON_VERSION) | .if defined(PYTHON_VERSION) | ||||
# A port/user requests a specific python version for its dependencies via | # A port/user requests a specific python version for its dependencies via | ||||
# DEPENDS_ARGS, since it requires the specific python version itself. | # DEPENDS_ARGS, since it requires the specific python version itself. | ||||
# Several things can happen now: | # Several things can happen now: | ||||
# a) the dependency supports the requested version -> everything's fine | # a) the dependency supports the requested version -> everything's fine | ||||
# b) the dependency does not support the requested version | # b) the dependency does not support the requested version | ||||
# 1) the dependency works in a way that the different python | # 1) the dependency works in a way that the different python | ||||
# versions do not matter -> everything's fine | # versions do not matter -> everything's fine | ||||
# 2) the dependency is likely to break due to the conflict | # 2) the dependency is likely to break due to the conflict | ||||
# nothing's fine | # nothing's fine | ||||
# | # | ||||
# b.2) needs to be resolved. Due to the complexity of how different pieces of | # b.2) needs to be resolved. Due to the complexity of how different pieces of | ||||
# software are built, we can't solve this automatically. Instead, let's assume | # software are built, we can't solve this automatically. Instead, let's assume | ||||
# that maintainers know what they are doing and assume PYTHON_VERSION to be a | # that maintainers know what they are doing and assume PYTHON_VERSION to be a | ||||
# hint. Just warn maintainers, if the versions do not match | # hint. Just warn maintainers, if the versions do not match | ||||
# (_PYTHON_VERSION_NONSUPPORTED). | # (_PYTHON_VERSION_NONSUPPORTED). | ||||
_PYTHON_VERSION:= ${PYTHON_VERSION:S/^python//} | _PYTHON_VERSION:= ${PYTHON_VERSION:C/^[a-z]+//} | ||||
_PYTHON_VERSION_IMPL= ${PYTHON_VERSION:C/^([a-z]+).*/\1/} | |||||
. if defined(_PYTHON_IMPL) && ${_PYTHON_IMPL} != ${_PYTHON_VERSION_IMPL} | |||||
IGNORE?= "needs Python implementation ${_PYTHON_VERSION_IMPL}. But a port depending on this one specified ${_PYTHON_IMPL}" | |||||
.else | . else | ||||
_PYTHON_VERSION:= ${PYTHON_DEFAULT_VERSION:S/^python//} | _PYTHON_IMPL= ${_PYTHON_VERSION_IMPL} | ||||
. endif | |||||
.else | |||||
_PYTHON_VERSION:= ${PYTHON_DEFAULT_VERSION:C/^[a-z]+//} | |||||
_PYTHON_IMPL?= ${PYTHON_DEFAULT_VERSION:C/^([a-z]+).*/\1/} | |||||
.endif # defined(PYTHON_VERSION) | .endif # defined(PYTHON_VERSION) | ||||
.if ${_PYTHON_IMPL} == cpython | |||||
_PYTHON_BINNAME= python | |||||
_PYTHON_SHORTNAME= py | |||||
_PYTHON_VERSIONS= 2.7 3.5 3.4 3.3 # preferred first | |||||
PYTHON_PORTSDIR= lang/python${PYTHON_SUFFIX} | |||||
PYTHON_CMD?= ${LOCALBASE}/bin/python${PYTHON_VER} | |||||
PYTHON_LIB= ${PYTHONBASE}/lib/libpython${_PYTHON_VERSION}${PYTHON_ABIVER}.so | |||||
PYTHON_INCLUDEDIR= ${PYTHONBASE}/include/python${_PYTHON_VERSION}${PYTHON_ABIVER} | |||||
PYTHON_LIBDIR= ${PYTHONBASE}/lib/python${_PYTHON_VERSION} | |||||
PYTHON_SITELIBDIR= ${PYTHON_LIBDIR}/site-packages | |||||
.elif ${_PYTHON_IMPL} == pypy | |||||
_PYTHON_BINNAME= pypy | |||||
_PYTHON_SHORTNAME= pypy | |||||
_PYTHON_VERSIONS= 2.7 3.3 # preferred first | |||||
PYTHON_PORTSDIR= lang/pypy${PYTHON_SUFFIX:C/(.).*/\1/:S/2//} | |||||
PYTHON_CMD?= ${LOCALBASE}/bin/pypy${PYTHON_SUFFIX:C/(.).*/\1/:S/2//} | |||||
PYTHON_LIB= ${PYTHON_LIBDIR}/libpypy-c.so | |||||
PYTHON_INCLUDEDIR= ${PYTHONBASE}/include | |||||
PYTHON_LIBDIR= ${PYTHONBASE}/bin | |||||
PYTHON_SITELIBDIR= ${PYTHONBASE}/site-packages | |||||
.else | |||||
IGNORE?= "needs an unsupported implementation '${_PYTHON_IMPL}' of Python (supported implementations: cpython, pypy)" | |||||
.endif # ${_PYTHON_IMPL} | |||||
# Validate Python version whether it meets the version restriction. | # Validate Python version whether it meets the version restriction. | ||||
_PYTHON_VERSION_CHECK:= ${_PYTHON_ARGS:C/^([1-9]\.[0-9])$/\1-\1/} | _PYTHON_VERSION_CHECK:= ${_PYTHON_ARGS:C/^([1-9]\.[0-9])$/\1-\1/} | ||||
_PYTHON_VERSION_MINIMUM_TMP:= ${_PYTHON_VERSION_CHECK:C/([1-9]\.[0-9])[-+].*/\1/} | _PYTHON_VERSION_MINIMUM_TMP:= ${_PYTHON_VERSION_CHECK:C/([1-9]\.[0-9])[-+].*/\1/} | ||||
_PYTHON_VERSION_MINIMUM:= ${_PYTHON_VERSION_MINIMUM_TMP:M[1-9].[0-9]} | _PYTHON_VERSION_MINIMUM:= ${_PYTHON_VERSION_MINIMUM_TMP:M[1-9].[0-9]} | ||||
_PYTHON_VERSION_MAXIMUM_TMP:= ${_PYTHON_VERSION_CHECK:C/.*-([1-9]\.[0-9])/\1/} | _PYTHON_VERSION_MAXIMUM_TMP:= ${_PYTHON_VERSION_CHECK:C/.*-([1-9]\.[0-9])/\1/} | ||||
_PYTHON_VERSION_MAXIMUM:= ${_PYTHON_VERSION_MAXIMUM_TMP:M[1-9].[0-9]} | _PYTHON_VERSION_MAXIMUM:= ${_PYTHON_VERSION_MAXIMUM_TMP:M[1-9].[0-9]} | ||||
.undef _PYTHON_VERSION_NONSUPPORTED | .undef _PYTHON_VERSION_NONSUPPORTED | ||||
.if !empty(_PYTHON_VERSION_MINIMUM) && (${_PYTHON_VERSION} < ${_PYTHON_VERSION_MINIMUM}) | .if !empty(_PYTHON_VERSION_MINIMUM) && (${_PYTHON_VERSION} < ${_PYTHON_VERSION_MINIMUM}) | ||||
_PYTHON_VERSION_NONSUPPORTED= ${_PYTHON_VERSION_MINIMUM} at least | _PYTHON_VERSION_NONSUPPORTED= ${_PYTHON_VERSION_MINIMUM} at least | ||||
.elif !empty(_PYTHON_VERSION_MAXIMUM) && (${_PYTHON_VERSION} > ${_PYTHON_VERSION_MAXIMUM}) | .elif !empty(_PYTHON_VERSION_MAXIMUM) && (${_PYTHON_VERSION} > ${_PYTHON_VERSION_MAXIMUM}) | ||||
_PYTHON_VERSION_NONSUPPORTED= ${_PYTHON_VERSION_MAXIMUM} at most | _PYTHON_VERSION_NONSUPPORTED= ${_PYTHON_VERSION_MAXIMUM} at most | ||||
.else | |||||
. undef _PYTHON_VERSION_SUPPORTED | |||||
. for supported_ver in ${_PYTHON_VERSIONS} | |||||
. if ${supported_ver} == ${_PYTHON_VERSION} | |||||
_PYTHON_VERSION_SUPPORTED= yes | |||||
.endif | . endif | ||||
. endfor | |||||
. if !defined(_PYTHON_VERSION_SUPPORTED) | |||||
_PYTHON_VERSION_NONSUPPORTED= ${_PYTHON_VERSIONS} (unsupported) | |||||
. endif | |||||
. undef _PYTHON_VERSION_SUPPORTED | |||||
.endif | |||||
# If we have an unsupported version of Python, try another. | # If we have an unsupported version of Python, try another. | ||||
.if defined(_PYTHON_VERSION_NONSUPPORTED) | .if defined(_PYTHON_VERSION_NONSUPPORTED) | ||||
.if defined(PYTHON_VERSION) || defined(PYTHON_CMD) | . if defined(PYTHON_VERSION) || defined(PYTHON_CMD) | ||||
_PV:= ${_PYTHON_VERSION} # preserve the specified python version | _PV:= ${_PYTHON_VERSION} # preserve the specified python version | ||||
WARNING+= "needs Python ${_PYTHON_VERSION_NONSUPPORTED}. But a port depending on this one specified ${_PV}" | WARNING+= "needs Python ${_PYTHON_VERSION_NONSUPPORTED}. But a port depending on this one specified ${_PV}" | ||||
.endif # defined(PYTHON_VERSION) || defined(PYTHON_CMD) | . endif # defined(PYTHON_VERSION) || defined(PYTHON_CMD) | ||||
.undef _PYTHON_VERSION | . undef _PYTHON_VERSION | ||||
.for ver in ${PYTHON2_DEFAULT} ${PYTHON3_DEFAULT} ${_PYTHON_VERSIONS} | . for ver in ${PYTHON_DEFAULT:C/^[a-z]+//} ${PYTHON2_DEFAULT:C/^[a-z]+//} ${PYTHON3_DEFAULT:C/^[a-z]+//} ${_PYTHON_VERSIONS} | ||||
__VER= ${ver} | |||||
.if !defined(_PYTHON_VERSION) && \ | . if !defined(_PYTHON_VERSION) && \ | ||||
!(!empty(_PYTHON_VERSION_MINIMUM) && ( \ | !(!empty(_PYTHON_VERSION_MINIMUM) && ( \ | ||||
${__VER} < ${_PYTHON_VERSION_MINIMUM})) && \ | ${ver} < ${_PYTHON_VERSION_MINIMUM})) && \ | ||||
!(!empty(_PYTHON_VERSION_MAXIMUM) && ( \ | !(!empty(_PYTHON_VERSION_MAXIMUM) && ( \ | ||||
${__VER} > ${_PYTHON_VERSION_MAXIMUM})) | ${ver} > ${_PYTHON_VERSION_MAXIMUM})) | ||||
_PYTHON_VERSION= ${ver} | . for supported_ver in ${_PYTHON_VERSIONS} | ||||
. if !defined(_PYTHON_VERSION) && ${supported_ver} == ${ver} | |||||
_PYTHON_VERSION:= ${ver} | |||||
.endif | . endif | ||||
.endfor | . endfor | ||||
. endif | |||||
. endfor | |||||
.if !defined(_PYTHON_VERSION) | . if !defined(_PYTHON_VERSION) | ||||
IGNORE= needs an unsupported version of Python | IGNORE?= "needs an unsupported version of Python" | ||||
.endif | . endif | ||||
.endif # defined(_PYTHON_VERSION_NONSUPPORTED) | .endif # defined(_PYTHON_VERSION_NONSUPPORTED) | ||||
# Pass PYTHON_VERSION down the dependency chain. This ensures that | # Pass PYTHON_VERSION down the dependency chain. This ensures that | ||||
# port A -> B -> C all will use the same python version and do not | # port A -> B -> C all will use the same python version and do not | ||||
# try to find a different one, if the passed version fits into | # try to find a different one, if the passed version fits into | ||||
# the supported version range. | # the supported version range. | ||||
PYTHON_VERSION?= python${_PYTHON_VERSION} | PYTHON_VERSION?= ${_PYTHON_IMPL}${_PYTHON_VERSION} | ||||
.if !defined(PYTHON_NO_DEPENDS) | .if !defined(PYTHON_NO_DEPENDS) | ||||
DEPENDS_ARGS+= PYTHON_VERSION=${PYTHON_VERSION} | DEPENDS_ARGS+= PYTHON_VERSION=${PYTHON_VERSION} | ||||
.endif | .endif | ||||
# NOTE: | # NOTE: | ||||
# | # | ||||
# PYTHON_VERSION will hold whatever is passed down the dependency chain. | # PYTHON_VERSION will hold whatever is passed down the dependency chain. | ||||
# If a user runs `make PYTHON_VERSION=python3.3, PYTHON_VERSION will be | # If a user runs `make PYTHON_VERSION=cpython3.3, PYTHON_VERSION will be | ||||
# set to 'python3.3'. A port however may require a different version, | # set to 'cpython3.3'. A port however may require a different version, | ||||
# which is stored (above) in _PYTHON_VERSION. | # which is stored (above) in _PYTHON_VERSION. | ||||
# Every python bit below hence should use python${_PYTHON_VERSION}, since | # Every python bit below hence should use ${_PYTHON_IMPL}${_PYTHON_VERSION}, since | ||||
# this is the value, the _port_ requires | # this is the value, the _port_ requires | ||||
# | # | ||||
# Got the correct python version, set some publicly accessible variables | # Got the correct python version, set some publicly accessible variables | ||||
PYTHON_VER= ${_PYTHON_VERSION} | PYTHON_VER= ${_PYTHON_VERSION} | ||||
PYTHON_SUFFIX= ${_PYTHON_VERSION:S/.//g} | PYTHON_SUFFIX= ${_PYTHON_VERSION:S/.//g} | ||||
PYTHON_MAJOR_VER= ${PYTHON_VER:R} | PYTHON_MAJOR_VER= ${PYTHON_VER:R} | ||||
PYTHON_REL= # empty | PYTHON_REL= # empty | ||||
PYTHON_ABIVER= # empty | PYTHON_ABIVER= # empty | ||||
PYTHON_PORTSDIR= ${_PYTHON_RELPORTDIR}${PYTHON_SUFFIX} | |||||
# Protect partial checkouts from Mk/Scripts/functions.sh:export_ports_env(). | # Protect partial checkouts from Mk/Scripts/functions.sh:export_ports_env(). | ||||
.if !defined(_PORTS_ENV_CHECK) || exists(${PORTSDIR}/${PYTHON_PORTSDIR}) | .if (!defined(_PORTS_ENV_CHECK) || exists(${PORTSDIR}/${PYTHON_PORTSDIR}/Makefile.version)) && defined(PYTHON_PORTSDIR) | ||||
.include "${PORTSDIR}/${PYTHON_PORTSDIR}/Makefile.version" | .include "${PORTSDIR}/${PYTHON_PORTSDIR}/Makefile.version" | ||||
.endif | .endif | ||||
# Create a 4 integer version string, prefixing 0 to the last token if | # Create a 4 integer version string, prefixing 0 to the last token if | ||||
# it's a single character. Only use the the first 3 tokens of | # it's a single character. Only use the the first 3 tokens of | ||||
# PORTVERSION to support pre-release versions (rc3, alpha4, etc) of | # PORTVERSION to support pre-release versions (rc3, alpha4, etc) of | ||||
# any Python port (lang/pythonXY) | # any Python port (lang/pythonXY) | ||||
PYTHON_REL= ${PYTHON_PORTVERSION:C/^([0-9]+\.[0-9]+\.[0-9]+).*/\1/:C/\.([0-9]+)$/.0\1/:C/\.0?([0-9][0-9])$/.\1/:S/.//g} | PYTHON_REL= ${PYTHON_PORTVERSION:C/^([0-9]+\.[0-9]+\.[0-9]+).*/\1/:C/\.([0-9]+)$/.0\1/:C/\.0?([0-9][0-9])$/.\1/:S/.//g} | ||||
# Might be overridden by calling ports | # Might be overridden by calling ports | ||||
PYTHON_CMD?= ${_PYTHON_BASECMD}${_PYTHON_VERSION} | |||||
.if ${PYTHON_VER} != 2.7 | .if ${PYTHON_VER} != 2.7 | ||||
.if exists(${PYTHON_CMD}-config) | .if exists(${PYTHON_CMD}-config) | ||||
PYTHON_ABIVER!= ${PYTHON_CMD}-config --abiflags | PYTHON_ABIVER!= ${PYTHON_CMD}-config --abiflags | ||||
.else | .else | ||||
# Default ABI flags for lang/python3x ports | # Default ABI flags for lang/python3x ports | ||||
PYTHON_ABIVER= m | PYTHON_ABIVER= m | ||||
.endif | .endif | ||||
.endif | .endif | ||||
.if !defined(PYTHONBASE) | .if !defined(PYTHONBASE) | ||||
PYTHONBASE!= (${PYTHON_CMD} -c 'import sys; print(sys.prefix)' \ | PYTHONBASE!= (${PYTHON_CMD} -c 'import sys; print(sys.prefix)' \ | ||||
2> /dev/null || ${ECHO_CMD} ${LOCALBASE}) | ${TAIL} -1 | 2> /dev/null || ${ECHO_CMD} ${LOCALBASE}) | ${TAIL} -1 | ||||
.endif | .endif | ||||
_EXPORTED_VARS+= PYTHONBASE | _EXPORTED_VARS+= PYTHONBASE | ||||
PYTHON_INCLUDEDIR= ${PYTHONBASE}/include/python${_PYTHON_VERSION}${PYTHON_ABIVER} | |||||
PYTHON_LIBDIR= ${PYTHONBASE}/lib/python${_PYTHON_VERSION} | |||||
PYTHON_PLATFORM= ${OPSYS:tl}${OSREL:C/\.[0-9.]*//} | PYTHON_PLATFORM= ${OPSYS:tl}${OSREL:C/\.[0-9.]*//} | ||||
PYTHON_SITELIBDIR= ${PYTHON_LIBDIR}/site-packages | PYTHON_PKGNAMEPREFIX= ${_PYTHON_SHORTNAME}${PYTHON_SUFFIX}- | ||||
PYTHON_PKGNAMEPREFIX= py${PYTHON_SUFFIX}- | PYTHON_PKGNAMESUFFIX= -${_PYTHON_SHORTNAME}${PYTHON_SUFFIX} | ||||
PYTHON_PKGNAMESUFFIX= -py${PYTHON_SUFFIX} | |||||
PYTHONPREFIX_INCLUDEDIR= ${PYTHON_INCLUDEDIR:S;${PYTHONBASE};${PREFIX};} | PYTHONPREFIX= ${PYTHONBASE:S;${LOCALBASE};${PREFIX};} | ||||
PYTHONPREFIX_LIBDIR= ${PYTHON_LIBDIR:S;${PYTHONBASE};${PREFIX};} | PYTHONPREFIX_INCLUDEDIR= ${PYTHON_INCLUDEDIR:S;${LOCALBASE};${PREFIX};} | ||||
PYTHONPREFIX_SITELIBDIR= ${PYTHON_SITELIBDIR:S;${PYTHONBASE};${PREFIX};} | PYTHONPREFIX_LIBDIR= ${PYTHON_LIBDIR:S;${LOCALBASE};${PREFIX};} | ||||
PYTHONPREFIX_SITELIBDIR= ${PYTHON_SITELIBDIR:S;${LOCALBASE};${PREFIX};} | |||||
# Used for recording the installed files. | # Used for recording the installed files. | ||||
_PYTHONPKGLIST= ${WRKDIR}/.PLIST.pymodtmp | _PYTHONPKGLIST= ${WRKDIR}/.PLIST.pymodtmp | ||||
# Ports bound to a certain python version SHOULD | # Ports bound to a certain python version SHOULD | ||||
# - use the PYTHON_PKGNAMEPREFIX | # - use the PYTHON_PKGNAMEPREFIX | ||||
# - use directories using the PYTHON_PKGNAMEPREFIX | # - use directories using the PYTHON_PKGNAMEPREFIX | ||||
# - install binaries using the required PYTHON_VER, with | # - install binaries using the required PYTHON_VER, with | ||||
# the default python version creating a symlink to the original binary | # the default python version creating a symlink to the original binary | ||||
# name (for staging-aware ports). | # name (for staging-aware ports). | ||||
# | # | ||||
# What makes a port 'bound' to a certain python version? | # What makes a port 'bound' to a certain python version? | ||||
# - it installs data into PYTHON_SITELIBDIR, PYTHON_INCLUDEDIR, ... | # - it installs data into PYTHON_SITELIBDIR, PYTHON_INCLUDEDIR, ... | ||||
# - it links against libpython*.so | # - it links against libpython*.so | ||||
# - it uses USE_PYTHON=distutils | # - it uses USE_PYTHON=distutils | ||||
# | # | ||||
.if defined(_PYTHON_FEATURE_CONCURRENT) | .if defined(_PYTHON_FEATURE_CONCURRENT) | ||||
_USES_POST+= uniquefiles:dirs | _USES_POST+= uniquefiles:dirs | ||||
.if ${PYTHON_VERSION} == ${PYTHON_DEFAULT_VERSION} | .if ${_PYTHON_IMPL}${_PYTHON_VERSION} == ${PYTHON_DEFAULT_VERSION} | ||||
UNIQUE_DEFAULT_LINKS= yes | UNIQUE_DEFAULT_LINKS= yes | ||||
.else | .else | ||||
UNIQUE_DEFAULT_LINKS= no | UNIQUE_DEFAULT_LINKS= no | ||||
.endif | .endif | ||||
UNIQUE_PREFIX= ${PYTHON_PKGNAMEPREFIX} | UNIQUE_PREFIX= ${PYTHON_PKGNAMEPREFIX} | ||||
UNIQUE_SUFFIX= -${PYTHON_VER} | UNIQUE_SUFFIX= -${PYTHON_VER} | ||||
.if defined(_PYTHON_FEATURE_AUTOPLIST) | .if defined(_PYTHON_FEATURE_AUTOPLIST) | ||||
UNIQUE_FIND_SUFFIX_FILES= \ | UNIQUE_FIND_SUFFIX_FILES= \ | ||||
${SED} -e 's|^${PREFIX}/||' ${_PYTHONPKGLIST} ${TMPPLIST} | \ | ${SED} -e 's|^${PREFIX}/||' ${_PYTHONPKGLIST} ${TMPPLIST} | \ | ||||
${GREP} -e '^bin/.*$$\|^sbin/.*$$\|^libexec/.*$$' | ${GREP} -e '^bin/.*$$\|^sbin/.*$$\|^libexec/.*$$' | ||||
.else | .else | ||||
UNIQUE_FIND_SUFFIX_FILES= \ | UNIQUE_FIND_SUFFIX_FILES= \ | ||||
${GREP} -he '^bin/.*$$\|^sbin/.*$$\|^libexec/.*$$' ${TMPPLIST} 2>/dev/null | ${GREP} -he '^bin/.*$$\|^sbin/.*$$\|^libexec/.*$$' ${TMPPLIST} 2>/dev/null | ||||
.endif | .endif | ||||
.endif # defined(_PYTHON_FEATURE_CONCURRENT) | .endif # defined(_PYTHON_FEATURE_CONCURRENT) | ||||
_CURRENTPORT:= ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX} | _CURRENTPORT:= ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX} | ||||
.if defined(_PYTHON_FEATURE_DISTUTILS) && \ | .if defined(_PYTHON_FEATURE_DISTUTILS) && \ | ||||
${_CURRENTPORT:S/${PYTHON_SUFFIX}$//} != ${PYTHON_PKGNAMEPREFIX}setuptools | ${_CURRENTPORT:S/${PYTHON_SUFFIX}$//} != ${PYTHON_PKGNAMEPREFIX}setuptools | ||||
BUILD_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}setuptools${PYTHON_SUFFIX}>0:devel/py-setuptools${PYTHON_SUFFIX} | BUILD_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}setuptools${PYTHON_SUFFIX}>0:devel/${_PYTHON_SHORTNAME}-setuptools${PYTHON_SUFFIX} | ||||
RUN_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}setuptools${PYTHON_SUFFIX}>0:devel/py-setuptools${PYTHON_SUFFIX} | RUN_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}setuptools${PYTHON_SUFFIX}>0:devel/${_PYTHON_SHORTNAME}-setuptools${PYTHON_SUFFIX} | ||||
.endif | .endif | ||||
# distutils support | # distutils support | ||||
PYSETUP?= setup.py | PYSETUP?= setup.py | ||||
PYDISTUTILS_SETUP?= -c \ | PYDISTUTILS_SETUP?= -c \ | ||||
"import sys; import setuptools; \ | "import sys; import setuptools; \ | ||||
__file__='${PYSETUP}'; sys.argv[0]='${PYSETUP}'; \ | __file__='${PYSETUP}'; sys.argv[0]='${PYSETUP}'; \ | ||||
exec(compile(open(__file__, 'rb').read().replace(b'\\r\\n', b'\\n'), __file__, 'exec'))" | exec(compile(open(__file__, 'rb').read().replace(b'\\r\\n', b'\\n'), __file__, 'exec'))" | ||||
PYDISTUTILS_CONFIGUREARGS?= # empty | PYDISTUTILS_CONFIGUREARGS?= # empty | ||||
PYDISTUTILS_BUILDARGS?= # empty | PYDISTUTILS_BUILDARGS?= # empty | ||||
PYDISTUTILS_INSTALLARGS?= -c -O1 --prefix=${PREFIX} | PYDISTUTILS_INSTALLARGS?= -c -O1 --prefix=${PYTHONPREFIX} | ||||
.if defined(_PYTHON_FEATURE_DISTUTILS) | .if defined(_PYTHON_FEATURE_DISTUTILS) | ||||
. if !defined(PYDISTUTILS_INSTALLNOSINGLE) | . if !defined(PYDISTUTILS_INSTALLNOSINGLE) | ||||
PYDISTUTILS_INSTALLARGS+= --single-version-externally-managed | PYDISTUTILS_INSTALLARGS+= --single-version-externally-managed | ||||
. endif | . endif | ||||
PYDISTUTILS_INSTALLARGS+= --root=${STAGEDIR} | PYDISTUTILS_INSTALLARGS+= --root=${STAGEDIR} | ||||
.endif | .endif | ||||
PYDISTUTILS_INSTALLARGS:= --record ${_PYTHONPKGLIST} \ | PYDISTUTILS_INSTALLARGS:= --record ${_PYTHONPKGLIST} \ | ||||
${PYDISTUTILS_INSTALLARGS} | ${PYDISTUTILS_INSTALLARGS} | ||||
▲ Show 20 Lines • Show All 66 Lines • ▼ Show 20 Lines | |||||
PYGAME= ${PYTHON_PKGNAMEPREFIX}game>0:devel/py-game | PYGAME= ${PYTHON_PKGNAMEPREFIX}game>0:devel/py-game | ||||
PYNUMERIC= ${PYTHON_SITELIBDIR}/Numeric/Numeric.py:math/py-numeric | PYNUMERIC= ${PYTHON_SITELIBDIR}/Numeric/Numeric.py:math/py-numeric | ||||
PYNUMPY= ${PYTHON_SITELIBDIR}/numpy/core/numeric.py:math/py-numpy | PYNUMPY= ${PYTHON_SITELIBDIR}/numpy/core/numeric.py:math/py-numpy | ||||
# dependencies | # dependencies | ||||
.if defined(_PYTHON_BUILD_DEP) | .if defined(_PYTHON_BUILD_DEP) | ||||
BUILD_DEPENDS+= ${PYTHON_CMD}:${PYTHON_PORTSDIR} | BUILD_DEPENDS+= ${PYTHON_CMD}:${PYTHON_PORTSDIR} | ||||
.if defined(_WANTS_META_PORT) | .if defined(_WANTS_META_PORT) | ||||
BUILD_DEPENDS+= python${_WANTS_META_PORT}:${_PYTHON_RELPORTDIR}${_WANTS_META_PORT} | BUILD_DEPENDS+= python${_WANTS_META_PORT}:lang/python${_WANTS_META_PORT} | ||||
.endif | .endif | ||||
.endif | .endif | ||||
.if defined(_PYTHON_RUN_DEP) | .if defined(_PYTHON_RUN_DEP) | ||||
RUN_DEPENDS+= ${PYTHON_CMD}:${PYTHON_PORTSDIR} | RUN_DEPENDS+= ${PYTHON_CMD}:${PYTHON_PORTSDIR} | ||||
.if defined(_WANTS_META_PORT) | .if defined(_WANTS_META_PORT) | ||||
RUN_DEPENDS+= python${_WANTS_META_PORT}:${_PYTHON_RELPORTDIR}${_WANTS_META_PORT} | RUN_DEPENDS+= python${_WANTS_META_PORT}:lang/python${_WANTS_META_PORT} | ||||
.endif | .endif | ||||
.endif | .endif | ||||
.if defined(_PYTHON_TEST_DEP) | .if defined(_PYTHON_TEST_DEP) | ||||
TEST_DEPENDS+= ${PYTHON_CMD}:${PYTHON_PORTSDIR} | TEST_DEPENDS+= ${PYTHON_CMD}:${PYTHON_PORTSDIR} | ||||
.if defined(_WANTS_META_PORT) | .if defined(_WANTS_META_PORT) | ||||
TEST_DEPENDS+= python${_WANTS_META_PORT}:${_PYTHON_RELPORTDIR}${_WANTS_META_PORT} | TEST_DEPENDS+= python${_WANTS_META_PORT}:lang/python${_WANTS_META_PORT} | ||||
.endif | .endif | ||||
.endif | .endif | ||||
# set $PREFIX as Python's one | # set $PREFIX as Python's one | ||||
.if defined(_PYTHON_FEATURE_PYTHONPREFIX) | .if defined(_PYTHON_FEATURE_PYTHONPREFIX) | ||||
PREFIX= ${PYTHONBASE} | PREFIX= ${PYTHONBASE} | ||||
.endif | .endif | ||||
# Substitutions for pkg-plist | # Substitutions for pkg-plist | ||||
# Use a short form of the PYTHONPREFIX_*DIR variables; we don't need the | # Use a short form of the PYTHONPREFIX_*DIR variables; we don't need the | ||||
# base directory in the plist file. | # base directory in the plist file. | ||||
PLIST_SUB+= PYTHON_INCLUDEDIR=${PYTHONPREFIX_INCLUDEDIR:S;${PREFIX}/;;} \ | PLIST_SUB+= PYTHON_INCLUDEDIR=${PYTHONPREFIX_INCLUDEDIR:S;${PREFIX}/;;} \ | ||||
PYTHON_LIBDIR=${PYTHONPREFIX_LIBDIR:S;${PREFIX}/;;} \ | PYTHON_LIBDIR=${PYTHONPREFIX_LIBDIR:S;${PREFIX}/;;} \ | ||||
PYTHON_PLATFORM=${PYTHON_PLATFORM} \ | PYTHON_PLATFORM=${PYTHON_PLATFORM} \ | ||||
PYTHON_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;} \ | PYTHON_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;} \ | ||||
PYTHON_VER=${PYTHON_VER} \ | PYTHON_VER=${PYTHON_VER} \ | ||||
PYTHON_VERSION=python${_PYTHON_VERSION} | PYTHON_VERSION=${_PYTHON_IMPL}${_PYTHON_VERSION} | ||||
_USES_POST+= python | _USES_POST+= python | ||||
.endif # _INCLUDE_USES_PYTHON_MK | .endif # _INCLUDE_USES_PYTHON_MK | ||||
.if defined(_POSTMKINCLUDED) && !defined(_INCLUDE_USES_PYTHON_POST_MK) | .if defined(_POSTMKINCLUDED) && !defined(_INCLUDE_USES_PYTHON_POST_MK) | ||||
_INCLUDE_USES_PYTHON_POST_MK= yes | _INCLUDE_USES_PYTHON_POST_MK= yes | ||||
# py-distutils support | # py-distutils support | ||||
Show All 24 Lines |
Would it not be better to rename this to PYTHON_LDFLAGS and define it as: -L${LOCALBASE}/lib -lpython${PYTHON_VER}${PYTHON_ABIVER}
The existing behaviour does work but not sure how correct it is. It will be quite easy to convert all references of PYTHON_LIB to PYTHON_LDFLAGS.