Changeset View
Changeset View
Standalone View
Standalone View
Mk/Uses/python.mk
Show First 20 Lines • Show All 252 Lines • ▼ Show 20 Lines | |||||
_PYTHON_BASECMD= ${LOCALBASE}/bin/python | _PYTHON_BASECMD= ${LOCALBASE}/bin/python | ||||
_PYTHON_RELPORTDIR= lang/python | _PYTHON_RELPORTDIR= lang/python | ||||
# List all valid USE_PYTHON features here | # List all valid USE_PYTHON features here | ||||
_VALID_PYTHON_FEATURES= allflavors autoplist concurrent cython cython_run \ | _VALID_PYTHON_FEATURES= allflavors autoplist concurrent cython cython_run \ | ||||
distutils flavors noegginfo noflavors optsuffix \ | distutils flavors noegginfo noflavors optsuffix \ | ||||
py3kplist pythonprefix | py3kplist pythonprefix | ||||
_INVALID_PYTHON_FEATURES= | _INVALID_PYTHON_FEATURES= | ||||
.for var in ${USE_PYTHON} | . for var in ${USE_PYTHON} | ||||
. if empty(_VALID_PYTHON_FEATURES:M${var}) | . if empty(_VALID_PYTHON_FEATURES:M${var}) | ||||
_INVALID_PYTHON_FEATURES+= ${var} | _INVALID_PYTHON_FEATURES+= ${var} | ||||
. endif | . endif | ||||
.endfor | . endfor | ||||
.if !empty(_INVALID_PYTHON_FEATURES) | . if !empty(_INVALID_PYTHON_FEATURES) | ||||
IGNORE= uses unknown USE_PYTHON features: ${_INVALID_PYTHON_FEATURES} | IGNORE= uses unknown USE_PYTHON features: ${_INVALID_PYTHON_FEATURES} | ||||
.endif | . endif | ||||
# 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:C/=.*$//:tu}= ${var:C/.*=//:S/,/ /g} | _PYTHON_FEATURE_${var:C/=.*$//:tu}= ${var:C/.*=//:S/,/ /g} | ||||
.endfor | . endfor | ||||
# distutils automatically generates flavors depending on the supported | # distutils automatically generates flavors depending on the supported | ||||
# versions. | # versions. | ||||
.if defined(_PYTHON_FEATURE_DISTUTILS) | . if defined(_PYTHON_FEATURE_DISTUTILS) | ||||
_PYTHON_FEATURE_FLAVORS= yes | _PYTHON_FEATURE_FLAVORS= yes | ||||
.endif | . endif | ||||
.if defined(_PYTHON_FEATURE_NOFLAVORS) | . if defined(_PYTHON_FEATURE_NOFLAVORS) | ||||
.undef _PYTHON_FEATURE_FLAVORS | .undef _PYTHON_FEATURE_FLAVORS | ||||
.endif | . endif | ||||
# 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:Mpatch} | . if ${_PYTHON_ARGS:Mpatch} | ||||
_PYTHON_PATCH_DEP= yes | _PYTHON_PATCH_DEP= yes | ||||
_PYTHON_ARGS:= ${_PYTHON_ARGS:Npatch} | _PYTHON_ARGS:= ${_PYTHON_ARGS:Npatch} | ||||
.endif | . endif | ||||
.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 | ||||
.if ${_PYTHON_ARGS:Menv} | . if ${_PYTHON_ARGS:Menv} | ||||
PYTHON_NO_DEPENDS= yes | PYTHON_NO_DEPENDS= yes | ||||
_PYTHON_ARGS:= ${_PYTHON_ARGS:Nenv} | _PYTHON_ARGS:= ${_PYTHON_ARGS:Nenv} | ||||
.endif | . endif | ||||
# 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 | ||||
.if ${PYTHON2_DEFAULT} != ${PYTHON_DEFAULT} && ${PYTHON3_DEFAULT} != ${PYTHON_DEFAULT} | . if ${PYTHON2_DEFAULT} != ${PYTHON_DEFAULT} && ${PYTHON3_DEFAULT} != ${PYTHON_DEFAULT} | ||||
WARNING+= "PYTHON_DEFAULT must be a version present in PYTHON2_DEFAULT or PYTHON3_DEFAULT, if you want more Python flavors, set BUILD_ALL_PYTHON_FLAVORS in your make.conf" | WARNING+= "PYTHON_DEFAULT must be a version present in PYTHON2_DEFAULT or PYTHON3_DEFAULT, if you want more Python flavors, set BUILD_ALL_PYTHON_FLAVORS in your make.conf" | ||||
.endif | . endif | ||||
.if ${_PYTHON_ARGS} == 2.7 | . if ${_PYTHON_ARGS} == 2.7 | ||||
DEV_WARNING+= "lang/python27 reached End of Life and will be removed somewhere in the future, please convert to a modern version of python" | DEV_WARNING+= "lang/python27 reached End of Life and will be removed somewhere in the future, please convert to a modern version of python" | ||||
.elif ${_PYTHON_ARGS} == 2 | . elif ${_PYTHON_ARGS} == 2 | ||||
DEV_ERROR+= "USES=python:2 is no longer supported, use USES=python:2.7" | DEV_ERROR+= "USES=python:2 is no longer supported, use USES=python:2.7" | ||||
.elif ${_PYTHON_ARGS} == 3 | . elif ${_PYTHON_ARGS} == 3 | ||||
DEV_ERROR+= "USES=python:3 is no longer supported, use USES=python:3.7+ or an appropriate version range" | DEV_ERROR+= "USES=python:3 is no longer supported, use USES=python:3.7+ or an appropriate version range" | ||||
.endif # ${_PYTHON_ARGS} == 2.7 | . endif # ${_PYTHON_ARGS} == 2.7 | ||||
_PYTHON_VERSION:= ${PYTHON_DEFAULT} | _PYTHON_VERSION:= ${PYTHON_DEFAULT} | ||||
.if empty(_PYTHON_ARGS) | . if empty(_PYTHON_ARGS) | ||||
_PYTHON_ARGS= 3.7+ | _PYTHON_ARGS= 3.7+ | ||||
.endif | . endif | ||||
# 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]\.[1-9]?[0-9])$/\1-\1/} | _PYTHON_VERSION_CHECK:= ${_PYTHON_ARGS:C/^([1-9]\.[1-9]?[0-9])$/\1-\1/} | ||||
_PYTHON_VERSION_MINIMUM_TMP:= ${_PYTHON_VERSION_CHECK:C/([1-9]\.[1-9]?[0-9])[-+].*/\1/} | _PYTHON_VERSION_MINIMUM_TMP:= ${_PYTHON_VERSION_CHECK:C/([1-9]\.[1-9]?[0-9])[-+].*/\1/} | ||||
_PYTHON_VERSION_MINIMUM:= ${_PYTHON_VERSION_MINIMUM_TMP:M[1-9].[0-9]}${_PYTHON_VERSION_MINIMUM_TMP:M[1-9].[1-9][0-9]} | _PYTHON_VERSION_MINIMUM:= ${_PYTHON_VERSION_MINIMUM_TMP:M[1-9].[0-9]}${_PYTHON_VERSION_MINIMUM_TMP:M[1-9].[1-9][0-9]} | ||||
_PYTHON_VERSION_MAXIMUM_TMP:= ${_PYTHON_VERSION_CHECK:C/.*-([1-9]\.[1-9]?[0-9])/\1/} | _PYTHON_VERSION_MAXIMUM_TMP:= ${_PYTHON_VERSION_CHECK:C/.*-([1-9]\.[1-9]?[0-9])/\1/} | ||||
_PYTHON_VERSION_MAXIMUM:= ${_PYTHON_VERSION_MAXIMUM_TMP:M[1-9].[0-9]}${_PYTHON_VERSION_MAXIMUM_TMP:M[1-9].[1-9][0-9]} | _PYTHON_VERSION_MAXIMUM:= ${_PYTHON_VERSION_MAXIMUM_TMP:M[1-9].[0-9]}${_PYTHON_VERSION_MAXIMUM_TMP:M[1-9].[1-9][0-9]} | ||||
# At this point we should have no argument left in ${_PYTHON_ARGS} | # At this point we should have no argument left in ${_PYTHON_ARGS} | ||||
# except a version spec | # except a version spec | ||||
_V1= [1-9].[0-9] | _V1= [1-9].[0-9] | ||||
_V2= [1-9].[1-9][0-9] | _V2= [1-9].[1-9][0-9] | ||||
_PYTHON_ARGS:= ${_PYTHON_ARGS:N${_V1}-${_V1}:N${_V1}-${_V2}:N${_V2}-${_V2}:N${_V1}:N${_V2}:N${_V1}+:N${_V2}+:N-${_V1}:N-${_V2}} | _PYTHON_ARGS:= ${_PYTHON_ARGS:N${_V1}-${_V1}:N${_V1}-${_V2}:N${_V2}-${_V2}:N${_V1}:N${_V2}:N${_V1}+:N${_V2}+:N-${_V1}:N-${_V2}} | ||||
.if !empty(_PYTHON_ARGS) | . if !empty(_PYTHON_ARGS) | ||||
IGNORE= uses unknown USES=python arguments: ${_PYTHON_ARGS} | IGNORE= uses unknown USES=python arguments: ${_PYTHON_ARGS} | ||||
.endif | . endif | ||||
# Pattern to convert python versions (X.Y or X.YY) to comparable format X.YY | # Pattern to convert python versions (X.Y or X.YY) to comparable format X.YY | ||||
_VC= C/^([1-9]\.)([0-9])$$/\10\2/ | _VC= C/^([1-9]\.)([0-9])$$/\10\2/ | ||||
.undef _PYTHON_VERSION_NONSUPPORTED | .undef _PYTHON_VERSION_NONSUPPORTED | ||||
.if !empty(_PYTHON_VERSION_MINIMUM) && (${_PYTHON_VERSION:${_VC}} < ${_PYTHON_VERSION_MINIMUM:${_VC}}) | . if !empty(_PYTHON_VERSION_MINIMUM) && (${_PYTHON_VERSION:${_VC}} < ${_PYTHON_VERSION_MINIMUM:${_VC}}) | ||||
_PYTHON_VERSION_NONSUPPORTED= ${_PYTHON_VERSION_MINIMUM} at least | _PYTHON_VERSION_NONSUPPORTED= ${_PYTHON_VERSION_MINIMUM} at least | ||||
.elif !empty(_PYTHON_VERSION_MAXIMUM) && (${_PYTHON_VERSION:${_VC}} > ${_PYTHON_VERSION_MAXIMUM:${_VC}}) | . elif !empty(_PYTHON_VERSION_MAXIMUM) && (${_PYTHON_VERSION:${_VC}} > ${_PYTHON_VERSION_MAXIMUM:${_VC}}) | ||||
_PYTHON_VERSION_NONSUPPORTED= ${_PYTHON_VERSION_MAXIMUM} at most | _PYTHON_VERSION_NONSUPPORTED= ${_PYTHON_VERSION_MAXIMUM} at most | ||||
.endif | . 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) | ||||
.undef _PYTHON_VERSION | .undef _PYTHON_VERSION | ||||
.for ver in ${PYTHON2_DEFAULT} ${PYTHON3_DEFAULT} ${_PYTHON_VERSIONS} | . for ver in ${PYTHON2_DEFAULT} ${PYTHON3_DEFAULT} ${_PYTHON_VERSIONS} | ||||
__VER= ${ver} | __VER= ${ver} | ||||
.if !defined(_PYTHON_VERSION) && \ | . if !defined(_PYTHON_VERSION) && \ | ||||
!(!empty(_PYTHON_VERSION_MINIMUM) && ( \ | !(!empty(_PYTHON_VERSION_MINIMUM) && ( \ | ||||
${__VER:${_VC}} < ${_PYTHON_VERSION_MINIMUM:${_VC}})) && \ | ${__VER:${_VC}} < ${_PYTHON_VERSION_MINIMUM:${_VC}})) && \ | ||||
!(!empty(_PYTHON_VERSION_MAXIMUM) && ( \ | !(!empty(_PYTHON_VERSION_MAXIMUM) && ( \ | ||||
${__VER:${_VC}} > ${_PYTHON_VERSION_MAXIMUM:${_VC}})) | ${__VER:${_VC}} > ${_PYTHON_VERSION_MAXIMUM:${_VC}})) | ||||
_PYTHON_VERSION= ${ver} | _PYTHON_VERSION= ${ver} | ||||
.endif | . endif | ||||
.endfor | . 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) | ||||
# Automatically generates FLAVORS if empty | # Automatically generates FLAVORS if empty | ||||
.if empty(FLAVORS) && defined(_PYTHON_FEATURE_FLAVORS) | . if empty(FLAVORS) && defined(_PYTHON_FEATURE_FLAVORS) | ||||
. undef _VALID_PYTHON_VERSIONS | . undef _VALID_PYTHON_VERSIONS | ||||
. for ver in ${PYTHON_DEFAULT} ${PYTHON2_DEFAULT} ${PYTHON3_DEFAULT} ${_PYTHON_VERSIONS} | . for ver in ${PYTHON_DEFAULT} ${PYTHON2_DEFAULT} ${PYTHON3_DEFAULT} ${_PYTHON_VERSIONS} | ||||
__VER= ${ver} | __VER= ${ver} | ||||
. if !(!empty(_PYTHON_VERSION_MINIMUM) && ( \ | . if !(!empty(_PYTHON_VERSION_MINIMUM) && ( \ | ||||
${__VER:${_VC}} < ${_PYTHON_VERSION_MINIMUM:${_VC}})) && \ | ${__VER:${_VC}} < ${_PYTHON_VERSION_MINIMUM:${_VC}})) && \ | ||||
!(!empty(_PYTHON_VERSION_MAXIMUM) && ( \ | !(!empty(_PYTHON_VERSION_MAXIMUM) && ( \ | ||||
${__VER:${_VC}} > ${_PYTHON_VERSION_MAXIMUM:${_VC}})) | ${__VER:${_VC}} > ${_PYTHON_VERSION_MAXIMUM:${_VC}})) | ||||
. if empty(_VALID_PYTHON_VERSIONS:M${ver}) | . if empty(_VALID_PYTHON_VERSIONS:M${ver}) | ||||
_VALID_PYTHON_VERSIONS+= ${ver} | _VALID_PYTHON_VERSIONS+= ${ver} | ||||
. endif | . endif | ||||
. endif | . endif | ||||
. endfor | . endfor | ||||
# Get all possible flavors depending on version requirements | # Get all possible flavors depending on version requirements | ||||
. if defined(_VALID_PYTHON_VERSIONS) | . if defined(_VALID_PYTHON_VERSIONS) | ||||
_ALL_PYTHON_FLAVORS= ${_VALID_PYTHON_VERSIONS:S/.//:S/^/py/} | _ALL_PYTHON_FLAVORS= ${_VALID_PYTHON_VERSIONS:S/.//:S/^/py/} | ||||
. else | . else | ||||
_ALL_PYTHON_FLAVORS= ${_PYTHON_VERSIONS:S/.//:S/^/py/} | _ALL_PYTHON_FLAVORS= ${_PYTHON_VERSIONS:S/.//:S/^/py/} | ||||
. endif | . endif | ||||
# Decide how many flavors we want. By default, only generate the default | # Decide how many flavors we want. By default, only generate the default | ||||
# versions. | # versions. | ||||
. if defined(BUILD_ALL_PYTHON_FLAVORS) || defined(_PYTHON_FEATURE_ALLFLAVORS) | . if defined(BUILD_ALL_PYTHON_FLAVORS) || defined(_PYTHON_FEATURE_ALLFLAVORS) | ||||
FLAVORS= ${_ALL_PYTHON_FLAVORS} | FLAVORS= ${_ALL_PYTHON_FLAVORS} | ||||
. else | . else | ||||
. for _v in ${PYTHON_DEFAULT} ${PYTHON2_DEFAULT} ${PYTHON3_DEFAULT} | . for _v in ${PYTHON_DEFAULT} ${PYTHON2_DEFAULT} ${PYTHON3_DEFAULT} | ||||
_f= py${_v:S/.//} | _f= py${_v:S/.//} | ||||
. if ${_ALL_PYTHON_FLAVORS:M${_f}} && !${FLAVORS:M${_f}} | . if ${_ALL_PYTHON_FLAVORS:M${_f}} && !${FLAVORS:M${_f}} | ||||
.if !empty(FLAVORS) | . if !empty(FLAVORS) | ||||
FLAVORS:= ${FLAVORS} ${_f} | FLAVORS:= ${FLAVORS} ${_f} | ||||
.else | . else | ||||
FLAVORS:= ${_f} | FLAVORS:= ${_f} | ||||
.endif | . endif | ||||
. endif | . endif | ||||
. endfor | . endfor | ||||
. endif | . endif | ||||
. if !empty(FLAVORS) && empty(FLAVOR) | . if !empty(FLAVORS) && empty(FLAVOR) | ||||
FLAVOR= ${FLAVORS:[1]} | FLAVOR= ${FLAVORS:[1]} | ||||
. endif | . endif | ||||
.endif | . endif | ||||
.if ${FLAVOR:Mpy[23][0-9]}${FLAVOR:Mpy[23][1-9][0-9]} | . if ${FLAVOR:Mpy[23][0-9]}${FLAVOR:Mpy[23][1-9][0-9]} | ||||
_PYTHON_VERSION= ${FLAVOR:S/py//:C/(.)/\1./} | _PYTHON_VERSION= ${FLAVOR:S/py//:C/(.)/\1./} | ||||
.endif | . endif | ||||
.if !empty(FLAVOR) && ${_PYTHON_VERSION} != ${PYTHON_DEFAULT} | . if !empty(FLAVOR) && ${_PYTHON_VERSION} != ${PYTHON_DEFAULT} | ||||
.if defined(_PYTHON_FEATURE_OPTSUFFIX) | . if defined(_PYTHON_FEATURE_OPTSUFFIX) | ||||
DEV_WARNING+= "USE_PYTHON=optsuffix is deprecated, consider migrating to using unconditional PKGNAMESUFFIX or PKGNAMEPREFIX" | DEV_WARNING+= "USE_PYTHON=optsuffix is deprecated, consider migrating to using unconditional PKGNAMESUFFIX or PKGNAMEPREFIX" | ||||
PKGNAMESUFFIX= ${PYTHON_PKGNAMESUFFIX} | PKGNAMESUFFIX= ${PYTHON_PKGNAMESUFFIX} | ||||
.endif | . endif | ||||
.endif | . endif | ||||
# To avoid having dependencies with @ and empty flavor: | # To avoid having dependencies with @ and empty flavor: | ||||
# _PYTHON_VERSION is either set by (first that matches): | # _PYTHON_VERSION is either set by (first that matches): | ||||
# - If using Python flavors, from the current Python flavor | # - If using Python flavors, from the current Python flavor | ||||
# - If using a version restriction (USES=python:3.7+), from the first | # - If using a version restriction (USES=python:3.7+), from the first | ||||
# acceptable default Python version. | # acceptable default Python version. | ||||
# - From PYTHON_DEFAULT | # - From PYTHON_DEFAULT | ||||
PY_FLAVOR= py${_PYTHON_VERSION:S/.//} | PY_FLAVOR= py${_PYTHON_VERSION:S/.//} | ||||
PYTHON_VERSION= python${_PYTHON_VERSION} | PYTHON_VERSION= python${_PYTHON_VERSION} | ||||
# 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} | 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}) | ||||
.include "${PORTSDIR}/${PYTHON_PORTSDIR}/Makefile.version" | .include "${PORTSDIR}/${PYTHON_PORTSDIR}/Makefile.version" | ||||
.endif | . endif | ||||
# Create a 5 integer version string, prefixing 0 to the minor and patch | # Create a 5 integer version string, prefixing 0 to the minor and patch | ||||
# tokens if it's a single character. Only use the the first 3 tokens of | # tokens if 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_DISTVERSION:C/^([0-9]+\.[0-9]+\.[0-9]+).*/\1/:C/\.([0-9])$/.0\1/:C/\.([0-9]\.[0-9]+)/.0\1/:S/.//g} | PYTHON_REL= ${PYTHON_DISTVERSION:C/^([0-9]+\.[0-9]+\.[0-9]+).*/\1/:C/\.([0-9])$/.0\1/:C/\.([0-9]\.[0-9]+)/.0\1/:S/.//g} | ||||
# Might be overridden by calling ports | # Might be overridden by calling ports | ||||
PYTHON_CMD?= ${_PYTHON_BASECMD}${_PYTHON_VERSION} | 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 | ||||
.elif ${PYTHON_REL} < 30800 | . elif ${PYTHON_REL} < 30800 | ||||
# Default ABI flags for lang/python37 port | # Default ABI flags for lang/python37 port | ||||
PYTHON_ABIVER= m | PYTHON_ABIVER= m | ||||
.endif | . endif | ||||
.endif | . endif | ||||
.if ${PYTHON_REL} >= 30807 | . if ${PYTHON_REL} >= 30807 | ||||
PYTHON_EXT_SUFFIX= .cpython-${PYTHON_SUFFIX} | PYTHON_EXT_SUFFIX= .cpython-${PYTHON_SUFFIX} | ||||
.else | . else | ||||
PYTHON_EXT_SUFFIX= # empty | PYTHON_EXT_SUFFIX= # empty | ||||
.endif | . endif | ||||
.if ${PYTHON_MAJOR_VER} == 2 | . if ${PYTHON_MAJOR_VER} == 2 | ||||
DEPRECATED?= Uses Python 2.7 which is EOLed upstream | DEPRECATED?= Uses Python 2.7 which is EOLed upstream | ||||
.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_INCLUDEDIR= ${PYTHONBASE}/include/python${_PYTHON_VERSION}${PYTHON_ABIVER} | ||||
PYTHON_LIBDIR= ${PYTHONBASE}/lib/python${_PYTHON_VERSION} | 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_SITELIBDIR= ${PYTHON_LIBDIR}/site-packages | ||||
PYTHON_PKGNAMEPREFIX= py${PYTHON_SUFFIX}- | PYTHON_PKGNAMEPREFIX= py${PYTHON_SUFFIX}- | ||||
PYTHON_PKGNAMESUFFIX= -py${PYTHON_SUFFIX} | PYTHON_PKGNAMESUFFIX= -py${PYTHON_SUFFIX} | ||||
Show All 13 Lines | |||||
# 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_CYTHON) | . if defined(_PYTHON_FEATURE_CYTHON) | ||||
BUILD_DEPENDS+= cython-${PYTHON_VER}:lang/cython@${PY_FLAVOR} | BUILD_DEPENDS+= cython-${PYTHON_VER}:lang/cython@${PY_FLAVOR} | ||||
.endif | . endif | ||||
.if defined(_PYTHON_FEATURE_CYTHON_RUN) | . if defined(_PYTHON_FEATURE_CYTHON_RUN) | ||||
RUN_DEPENDS+= cython-${PYTHON_VER}:lang/cython@${PY_FLAVOR} | RUN_DEPENDS+= cython-${PYTHON_VER}:lang/cython@${PY_FLAVOR} | ||||
.endif | . endif | ||||
.if defined(_PYTHON_FEATURE_CONCURRENT) | . if defined(_PYTHON_FEATURE_CONCURRENT) | ||||
.if !defined(_PYTHON_FEATURE_FLAVORS) && (${_PYTHON_VERSION_MINIMUM:M3*} || ${_PYTHON_VERSION_MAXIMUM:M2*}) | . if !defined(_PYTHON_FEATURE_FLAVORS) && (${_PYTHON_VERSION_MINIMUM:M3*} || ${_PYTHON_VERSION_MAXIMUM:M2*}) | ||||
DEV_WARNING+= "USE_PYTHON=concurrent when only one of Python 2 or 3 is supported AND not using flavors does not make any sense" | DEV_WARNING+= "USE_PYTHON=concurrent when only one of Python 2 or 3 is supported AND not using flavors does not make any sense" | ||||
.endif | . endif | ||||
_USES_POST+= uniquefiles:dirs | _USES_POST+= uniquefiles:dirs | ||||
.if defined(_PYTHON_FEATURE_FLAVORS) && ${FLAVOR} == ${FLAVORS:[1]} | . if defined(_PYTHON_FEATURE_FLAVORS) && ${FLAVOR} == ${FLAVORS:[1]} | ||||
UNIQUE_DEFAULT_LINKS= yes | UNIQUE_DEFAULT_LINKS= yes | ||||
.elif !defined(_PYTHON_FEATURE_FLAVORS) && ${_PYTHON_VERSION} == ${PYTHON_DEFAULT} | . elif !defined(_PYTHON_FEATURE_FLAVORS) && ${_PYTHON_VERSION} == ${PYTHON_DEFAULT} | ||||
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} | ||||
UNIQUE_SUFFIX_TYPES+= SUFFIX_MAN | UNIQUE_SUFFIX_TYPES+= SUFFIX_MAN | ||||
UNIQUE_SUFFIX_MAN_WITH_EXT= .[1-9ln] | UNIQUE_SUFFIX_MAN_WITH_EXT= .[1-9ln] | ||||
UNIQUE_SUFFIX_MAN_EXTRA_EXT= .gz | UNIQUE_SUFFIX_MAN_EXTRA_EXT= .gz | ||||
.if defined(_PYTHON_FEATURE_AUTOPLIST) | . if defined(_PYTHON_FEATURE_AUTOPLIST) | ||||
_UNIQUE_FIND_SUFFIX_FILES= ${SED} -e 's|^${PREFIX}/||' ${_PYTHONPKGLIST} ${TMPPLIST} | _UNIQUE_FIND_SUFFIX_FILES= ${SED} -e 's|^${PREFIX}/||' ${_PYTHONPKGLIST} ${TMPPLIST} | ||||
.else | . else | ||||
_UNIQUE_FIND_SUFFIX_FILES= ${SED} -e 's|^${PREFIX}/||' ${TMPPLIST} 2>/dev/null | _UNIQUE_FIND_SUFFIX_FILES= ${SED} -e 's|^${PREFIX}/||' ${TMPPLIST} 2>/dev/null | ||||
.endif | . endif | ||||
UNIQUE_FIND_SUFFIX_FILES+= ${_UNIQUE_FIND_SUFFIX_FILES} | \ | UNIQUE_FIND_SUFFIX_FILES+= ${_UNIQUE_FIND_SUFFIX_FILES} | \ | ||||
${EGREP} -he '^bin/.*$$|^sbin/.*$$|^libexec/.*$$' | ${EGREP} -he '^bin/.*$$|^sbin/.*$$|^libexec/.*$$' | ||||
UNIQUE_FIND_SUFFIX_MAN_FILES+= ${_UNIQUE_FIND_SUFFIX_FILES} | \ | UNIQUE_FIND_SUFFIX_MAN_FILES+= ${_UNIQUE_FIND_SUFFIX_FILES} | \ | ||||
${EGREP} -he '^man/man[1-9ln]/.*$$|^share/man/man[1-9ln]/.*$$' | ${EGREP} -he '^man/man[1-9ln]/.*$$|^share/man/man[1-9ln]/.*$$' | ||||
.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} != ${PYTHON_PKGNAMEPREFIX}setuptools &&\ | ${_CURRENTPORT} != ${PYTHON_PKGNAMEPREFIX}setuptools &&\ | ||||
${_CURRENTPORT} != ${PYTHON_PKGNAMEPREFIX}setuptools44 | ${_CURRENTPORT} != ${PYTHON_PKGNAMEPREFIX}setuptools44 | ||||
.if ${PYTHON_VER} == 2.7 | . if ${PYTHON_VER} == 2.7 | ||||
BUILD_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}setuptools44>0:devel/py-setuptools44@${PY_FLAVOR} | BUILD_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}setuptools44>0:devel/py-setuptools44@${PY_FLAVOR} | ||||
RUN_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}setuptools44>0:devel/py-setuptools44@${PY_FLAVOR} | RUN_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}setuptools44>0:devel/py-setuptools44@${PY_FLAVOR} | ||||
.else | . else | ||||
BUILD_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}setuptools>0:devel/py-setuptools@${PY_FLAVOR} | BUILD_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}setuptools>0:devel/py-setuptools@${PY_FLAVOR} | ||||
RUN_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}setuptools>0:devel/py-setuptools@${PY_FLAVOR} | RUN_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}setuptools>0:devel/py-setuptools@${PY_FLAVOR} | ||||
.endif | . endif | ||||
.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=${PREFIX} | ||||
.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} | ||||
PYDISTUTILS_PKGNAME?= ${PORTNAME} | PYDISTUTILS_PKGNAME?= ${PORTNAME} | ||||
PYDISTUTILS_PKGVERSION?=${PORTVERSION} | PYDISTUTILS_PKGVERSION?=${PORTVERSION} | ||||
PYDISTUTILS_EGGINFO?= ${PYDISTUTILS_PKGNAME:C/[^A-Za-z0-9.]+/_/g}-${PYDISTUTILS_PKGVERSION:C/[^A-Za-z0-9.]+/_/g}-py${PYTHON_VER}.egg-info | PYDISTUTILS_EGGINFO?= ${PYDISTUTILS_PKGNAME:C/[^A-Za-z0-9.]+/_/g}-${PYDISTUTILS_PKGVERSION:C/[^A-Za-z0-9.]+/_/g}-py${PYTHON_VER}.egg-info | ||||
PYDISTUTILS_EGGINFODIR?=${STAGEDIR}${PYTHONPREFIX_SITELIBDIR} | PYDISTUTILS_EGGINFODIR?=${STAGEDIR}${PYTHONPREFIX_SITELIBDIR} | ||||
.if !defined(_PYTHON_FEATURE_NOEGGINFO) && \ | . if !defined(_PYTHON_FEATURE_NOEGGINFO) && \ | ||||
!defined(_PYTHON_FEATURE_AUTOPLIST) && \ | !defined(_PYTHON_FEATURE_AUTOPLIST) && \ | ||||
defined(_PYTHON_FEATURE_DISTUTILS) && \ | defined(_PYTHON_FEATURE_DISTUTILS) && \ | ||||
defined(PYTHON_REL) | defined(PYTHON_REL) | ||||
_USES_stage+= 933:add-plist-egginfo | _USES_stage+= 933:add-plist-egginfo | ||||
add-plist-egginfo: | add-plist-egginfo: | ||||
. for egginfo in ${PYDISTUTILS_EGGINFO} | . for egginfo in ${PYDISTUTILS_EGGINFO} | ||||
if [ -d "${PYDISTUTILS_EGGINFODIR}/${egginfo}" ]; then \ | if [ -d "${PYDISTUTILS_EGGINFODIR}/${egginfo}" ]; then \ | ||||
${LS} ${PYDISTUTILS_EGGINFODIR}/${egginfo} | while read f; do \ | ${LS} ${PYDISTUTILS_EGGINFODIR}/${egginfo} | while read f; do \ | ||||
${ECHO_CMD} ${PYDISTUTILS_EGGINFODIR:S;^${STAGEDIR}${PREFIX}/;;}/${egginfo}/$${f} >> ${TMPPLIST}; \ | ${ECHO_CMD} ${PYDISTUTILS_EGGINFODIR:S;^${STAGEDIR}${PREFIX}/;;}/${egginfo}/$${f} >> ${TMPPLIST}; \ | ||||
done; \ | done; \ | ||||
fi; | fi; | ||||
. endfor | . endfor | ||||
.endif | . endif | ||||
.if defined(_PYTHON_FEATURE_AUTOPLIST) && defined(_PYTHON_FEATURE_DISTUTILS) | . if defined(_PYTHON_FEATURE_AUTOPLIST) && defined(_PYTHON_FEATURE_DISTUTILS) | ||||
_RELSITELIBDIR= ${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;} | _RELSITELIBDIR= ${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;} | ||||
_RELLIBDIR= ${PYTHONPREFIX_LIBDIR:S;${PREFIX}/;;} | _RELLIBDIR= ${PYTHONPREFIX_LIBDIR:S;${PREFIX}/;;} | ||||
_USES_stage+= 934:add-plist-pymod | _USES_stage+= 934:add-plist-pymod | ||||
add-plist-pymod: | add-plist-pymod: | ||||
@${SED} -e 's|^"\(.*\)"$$|\1|' \ | @${SED} -e 's|^"\(.*\)"$$|\1|' \ | ||||
-e 's|^${STAGEDIR}${PREFIX}/||' \ | -e 's|^${STAGEDIR}${PREFIX}/||' \ | ||||
-e 's|^${PREFIX}/||' \ | -e 's|^${PREFIX}/||' \ | ||||
-e 's|^\(man/.*man[0-9]\)/\(.*\.[0-9]\)$$|\1/\2.gz|' \ | -e 's|^\(man/.*man[0-9]\)/\(.*\.[0-9]\)$$|\1/\2.gz|' \ | ||||
-e 's|^\(share/man/.*man[0-9]\)/\(.*\.[0-9]\)$$|\1/\2.gz|' \ | -e 's|^\(share/man/.*man[0-9]\)/\(.*\.[0-9]\)$$|\1/\2.gz|' \ | ||||
-e 's|[[:alnum:]|[:space:]]*/\.\./*||g; s|/\./|/|g' \ | -e 's|[[:alnum:]|[:space:]]*/\.\./*||g; s|/\./|/|g' \ | ||||
${_PYTHONPKGLIST} | ${SORT} >> ${TMPPLIST} | ${_PYTHONPKGLIST} | ${SORT} >> ${TMPPLIST} | ||||
.else | . else | ||||
.if ${PYTHON_REL} >= 30200 && defined(_PYTHON_FEATURE_PY3KPLIST) | . if ${PYTHON_REL} >= 30200 && defined(_PYTHON_FEATURE_PY3KPLIST) | ||||
# When Python version is 3.2+ we rewrite all the filenames | # When Python version is 3.2+ we rewrite all the filenames | ||||
# of TMPPLIST that end with .py[co], so that they conform | # of TMPPLIST that end with .py[co], so that they conform | ||||
# to PEP 3147 (see https://www.python.org/dev/peps/pep-3147/) | # to PEP 3147 (see https://www.python.org/dev/peps/pep-3147/) | ||||
PYMAGICTAG= ${PYTHON_CMD} -c 'import sys; print(sys.implementation.cache_tag)' | PYMAGICTAG= ${PYTHON_CMD} -c 'import sys; print(sys.implementation.cache_tag)' | ||||
_USES_stage+= 935:add-plist-python | _USES_stage+= 935:add-plist-python | ||||
add-plist-python: | add-plist-python: | ||||
@${AWK} '\ | @${AWK} '\ | ||||
/\.py[co]$$/ && !($$0 ~ "/" pc "/") {id = match($$0, /\/[^\/]+\.py[co]$$/); if (id != 0) {d = substr($$0, 1, RSTART - 1); dirs[d] = 1}; sub(/\.pyc$$/, "." mt "&"); sub(/\.pyo$$/, "." mt "." pyo); sub(/[^\/]+\.py[co]$$/, pc "/&"); print; next} \ | /\.py[co]$$/ && !($$0 ~ "/" pc "/") {id = match($$0, /\/[^\/]+\.py[co]$$/); if (id != 0) {d = substr($$0, 1, RSTART - 1); dirs[d] = 1}; sub(/\.pyc$$/, "." mt "&"); sub(/\.pyo$$/, "." mt "." pyo); sub(/[^\/]+\.py[co]$$/, pc "/&"); print; next} \ | ||||
/^@dirrm / {d = substr($$0, 8); if (d in dirs) {print $$0 "/" pc}; print $$0; next} \ | /^@dirrm / {d = substr($$0, 8); if (d in dirs) {print $$0 "/" pc}; print $$0; next} \ | ||||
/^@dirrmtry / {d = substr($$0, 11); if (d in dirs) {print $$0 "/" pc}; print $$0; next} \ | /^@dirrmtry / {d = substr($$0, 11); if (d in dirs) {print $$0 "/" pc}; print $$0; next} \ | ||||
{print} \ | {print} \ | ||||
' \ | ' \ | ||||
pc="__pycache__" mt="$$(${PYMAGICTAG})" pyo="opt-1.pyc" \ | pc="__pycache__" mt="$$(${PYMAGICTAG})" pyo="opt-1.pyc" \ | ||||
${TMPPLIST} > ${TMPPLIST}.pyc_tmp | ${TMPPLIST} > ${TMPPLIST}.pyc_tmp | ||||
@${MV} ${TMPPLIST}.pyc_tmp ${TMPPLIST} | @${MV} ${TMPPLIST}.pyc_tmp ${TMPPLIST} | ||||
.endif # ${PYTHON_REL} >= 30200 && defined(_PYTHON_FEATURE_PY3KPLIST) | . endif # ${PYTHON_REL} >= 30200 && defined(_PYTHON_FEATURE_PY3KPLIST) | ||||
.endif # defined(_PYTHON_FEATURE_AUTOPLIST) && defined(_PYTHON_FEATURE_DISTUTILS) | . endif # defined(_PYTHON_FEATURE_AUTOPLIST) && defined(_PYTHON_FEATURE_DISTUTILS) | ||||
# Fix for programs that build python from a GNU auto* environment | # Fix for programs that build python from a GNU auto* environment | ||||
CONFIGURE_ENV+= PYTHON="${PYTHON_CMD}" | CONFIGURE_ENV+= PYTHON="${PYTHON_CMD}" | ||||
# By default CMake picks up the highest available version of Python package. | # By default CMake picks up the highest available version of Python package. | ||||
# Enforce the version required by the port or the default. | # Enforce the version required by the port or the default. | ||||
CMAKE_ARGS+= -DPython_ADDITIONAL_VERSIONS=${PYTHON_VER} | CMAKE_ARGS+= -DPython_ADDITIONAL_VERSIONS=${PYTHON_VER} | ||||
# Python 3rd-party modules | # Python 3rd-party modules | ||||
PYGAME= ${PYTHON_PKGNAMEPREFIX}game>0:devel/py-game@${PY_FLAVOR} | PYGAME= ${PYTHON_PKGNAMEPREFIX}game>0:devel/py-game@${PY_FLAVOR} | ||||
PYNUMPY= ${PYTHON_PKGNAMEPREFIX}numpy>=1.16,1<1.21,1:math/py-numpy@${PY_FLAVOR} | PYNUMPY= ${PYTHON_PKGNAMEPREFIX}numpy>=1.16,1<1.21,1:math/py-numpy@${PY_FLAVOR} | ||||
# Common Python modules that can be needed but only for some versions of Python. | # Common Python modules that can be needed but only for some versions of Python. | ||||
.if ${PYTHON_REL} < 30500 | . if ${PYTHON_REL} < 30500 | ||||
.else | . else | ||||
PY_PILLOW= ${PYTHON_PKGNAMEPREFIX}pillow>=7.0.0:graphics/py-pillow@${PY_FLAVOR} | PY_PILLOW= ${PYTHON_PKGNAMEPREFIX}pillow>=7.0.0:graphics/py-pillow@${PY_FLAVOR} | ||||
.endif | . endif | ||||
.if ${PYTHON_VER} != ${PYTHON_DEFAULT} | . if ${PYTHON_VER} != ${PYTHON_DEFAULT} | ||||
PY_MERCURIAL= ${PYTHON_PKGNAMEPREFIX}mercurial>=5.9:devel/mercurial@${PY_FLAVOR} | PY_MERCURIAL= ${PYTHON_PKGNAMEPREFIX}mercurial>=5.9:devel/mercurial@${PY_FLAVOR} | ||||
.else | . else | ||||
PY_MERCURIAL= mercurial>=5.9:devel/mercurial@${PY_FLAVOR} | PY_MERCURIAL= mercurial>=5.9:devel/mercurial@${PY_FLAVOR} | ||||
.endif | . endif | ||||
CMAKE_ARGS+= -DBOOST_PYTHON_SUFFIX:STRING=${PYTHON_SUFFIX} | CMAKE_ARGS+= -DBOOST_PYTHON_SUFFIX:STRING=${PYTHON_SUFFIX} | ||||
PY_BOOST_LIB= boost_python${PYTHON_SUFFIX} | PY_BOOST_LIB= boost_python${PYTHON_SUFFIX} | ||||
PY_BOOST= lib${PY_BOOST_LIB}.so:devel/boost-python-libs@${PY_FLAVOR} | PY_BOOST= lib${PY_BOOST_LIB}.so:devel/boost-python-libs@${PY_FLAVOR} | ||||
# dependencies | # dependencies | ||||
.for _stage in PATCH BUILD RUN TEST | . for _stage in PATCH BUILD RUN TEST | ||||
. if defined(_PYTHON_${_stage}_DEP) | . if defined(_PYTHON_${_stage}_DEP) | ||||
${_stage}_DEPENDS+= ${PYTHON_CMD}:${PYTHON_PORTSDIR} | ${_stage}_DEPENDS+= ${PYTHON_CMD}:${PYTHON_PORTSDIR} | ||||
. endif | . endif | ||||
.endfor | . endfor | ||||
# 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_SUFFIX=${PYTHON_SUFFIX} \ | PYTHON_SUFFIX=${PYTHON_SUFFIX} \ | ||||
PYTHON_EXT_SUFFIX=${PYTHON_EXT_SUFFIX} \ | PYTHON_EXT_SUFFIX=${PYTHON_EXT_SUFFIX} \ | ||||
PYTHON_VER=${PYTHON_VER} \ | PYTHON_VER=${PYTHON_VER} \ | ||||
PYTHON_VERSION=${PYTHON_VERSION} | PYTHON_VERSION=${PYTHON_VERSION} | ||||
.if ${PYTHON_REL} < 30000 | . if ${PYTHON_REL} < 30000 | ||||
PLIST_SUB+= PYTHON2="" PYTHON3="@comment " | PLIST_SUB+= PYTHON2="" PYTHON3="@comment " | ||||
.else | . else | ||||
PLIST_SUB+= PYTHON2="@comment " PYTHON3="" | PLIST_SUB+= PYTHON2="@comment " PYTHON3="" | ||||
.endif | . endif | ||||
_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 | ||||
PYDISTUTILS_CONFIGURE_TARGET?= config | PYDISTUTILS_CONFIGURE_TARGET?= config | ||||
PYDISTUTILS_BUILD_TARGET?= build | PYDISTUTILS_BUILD_TARGET?= build | ||||
PYDISTUTILS_INSTALL_TARGET?= install | PYDISTUTILS_INSTALL_TARGET?= install | ||||
.if defined(_PYTHON_FEATURE_DISTUTILS) | . if defined(_PYTHON_FEATURE_DISTUTILS) | ||||
LDSHARED?= ${CC} -shared | LDSHARED?= ${CC} -shared | ||||
MAKE_ENV+= LDSHARED="${LDSHARED}" PYTHONDONTWRITEBYTECODE= PYTHONOPTIMIZE= | MAKE_ENV+= LDSHARED="${LDSHARED}" PYTHONDONTWRITEBYTECODE= PYTHONOPTIMIZE= | ||||
.if !target(do-configure) && !defined(HAS_CONFIGURE) && !defined(GNU_CONFIGURE) | . if !target(do-configure) && !defined(HAS_CONFIGURE) && !defined(GNU_CONFIGURE) | ||||
do-configure: | do-configure: | ||||
@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYDISTUTILS_SETUP} ${PYDISTUTILS_CONFIGURE_TARGET} ${PYDISTUTILS_CONFIGUREARGS}) | @(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYDISTUTILS_SETUP} ${PYDISTUTILS_CONFIGURE_TARGET} ${PYDISTUTILS_CONFIGUREARGS}) | ||||
.endif | . endif | ||||
.if !target(do-build) | . if !target(do-build) | ||||
do-build: | do-build: | ||||
@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYDISTUTILS_SETUP} ${PYDISTUTILS_BUILD_TARGET} ${PYDISTUTILS_BUILDARGS}) | @(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYDISTUTILS_SETUP} ${PYDISTUTILS_BUILD_TARGET} ${PYDISTUTILS_BUILDARGS}) | ||||
.endif | . endif | ||||
.if !target(do-install) | . if !target(do-install) | ||||
do-install: | do-install: | ||||
@(cd ${INSTALL_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYDISTUTILS_SETUP} ${PYDISTUTILS_INSTALL_TARGET} ${PYDISTUTILS_INSTALLARGS}) | @(cd ${INSTALL_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYDISTUTILS_SETUP} ${PYDISTUTILS_INSTALL_TARGET} ${PYDISTUTILS_INSTALLARGS}) | ||||
.endif | . endif | ||||
.endif # defined(_PYTHON_FEATURE_DISTUTILS) | . endif # defined(_PYTHON_FEATURE_DISTUTILS) | ||||
.endif # defined(_POSTMKINCLUDED) && !defined(_INCLUDE_USES_PYTHON_POST_MK) | .endif # defined(_POSTMKINCLUDED) && !defined(_INCLUDE_USES_PYTHON_POST_MK) |