Index: Mk/Uses/python.cpython.mk =================================================================== --- Mk/Uses/python.cpython.mk +++ Mk/Uses/python.cpython.mk @@ -0,0 +1,12 @@ +# 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_BINNAME= python +_PYTHON_SHORTNAME= py + +PYTHON_PORTSDIR= lang/python${PYTHON_SUFFIX} +PYTHON_CMD?= ${LOCALBASE}/bin/python${PYTHON_VER} + +PYTHON_INCLUDEDIR= ${PYTHONBASE}/include/python${_PYTHON_VERSION}${PYTHON_ABIVER} +PYTHON_LIBDIR= ${PYTHONBASE}/lib/python${_PYTHON_VERSION} +PYTHON_SITELIBDIR= ${PYTHON_LIBDIR}/site-packages \ No newline at end of file Index: Mk/Uses/python.mk =================================================================== --- Mk/Uses/python.mk +++ Mk/Uses/python.mk @@ -6,7 +6,7 @@ # # Feature: python # Usage: USES=python or USES=python:args -# Valid ARGS: , build, run, test +# Valid ARGS: , , build, run, test # # 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 @@ -22,6 +22,12 @@ # USES=python # Use the set default Python # # 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 # it to BUILD_DEPENDS. # run Indicates that Python is needed at run time and adds @@ -128,7 +134,7 @@ # # PYDISTUTILS_INSTALLARGS # - 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 # - Canonical name for egg-info. @@ -188,7 +194,7 @@ # packages for different Python versions. # 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_LIBDIR=${PYTHONPREFIX_LIBDIR:S;${PREFIX}/;;} @@ -219,14 +225,10 @@ .if !defined(_INCLUDE_USES_PYTHON_MK) _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.4 3.5 3.3 # preferred first -_PYTHON_PORTBRANCH= 2.7 # ${_PYTHON_VERSIONS:[1]} -_PYTHON_BASECMD= ${LOCALBASE}/bin/python -_PYTHON_RELPORTDIR= lang/python +_PYTHON_VERSIONS_cpython= 2.7 3.4 3.5 3.3 # preferred first +_PYTHON_VERSIONS_pypy= 2.7 3.3 # preferred first + # Make each individual feature available as _PYTHON_FEATURE_ .for var in ${USE_PYTHON} _PYTHON_FEATURE_${var:tu}= yes @@ -250,6 +252,13 @@ _PYTHON_TEST_DEP= yes _PYTHON_ARGS:= ${_PYTHON_ARGS:Ntest} .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 # required. @@ -260,6 +269,20 @@ _PYTHON_TEST_DEP= yes .endif +.for var in PYTHON_DEFAULT_VERSION PYTHON2_DEFAULT_VERSION PYTHON3_DEFAULT_VERSION PYTHON_DEFAULT PYTHON2_DEFAULT PYTHON3_DEFAULT +. 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) WARNING+= "PYTHON_DEFAULT_VERSION is defined, consider using DEFAULT_VERSIONS=python=${PYTHON_DEFAULT_VERSION:S/^python//} instead" .endif @@ -273,39 +296,39 @@ .if exists(${LOCALBASE}/bin/python) .if !defined(_PYTHON_DEFAULT_VERSION) _PYTHON_DEFAULT_VERSION!= (${LOCALBASE}/bin/python -c \ - 'import sys; print("%d.%d" % sys.version_info[:2])' 2> /dev/null \ - || ${ECHO_CMD} ${_PYTHON_PORTBRANCH}) | ${TAIL} -1 + 'import platform, sys; print("%s%d.%d" % (platform.python_implementation().lower(),) + sys.version_info[:2])' 2> /dev/null \ + || ${ECHO_CMD} ${PYTHON_DEFAULT}) | ${TAIL} -1 .endif _EXPORTED_VARS+= _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}" .endif -PYTHON_DEFAULT_VERSION= python${_PYTHON_DEFAULT_VERSION} +PYTHON_DEFAULT_VERSION= ${_PYTHON_DEFAULT_VERSION} .else -PYTHON_DEFAULT_VERSION= python${PYTHON_DEFAULT} +PYTHON_DEFAULT_VERSION= ${PYTHON_DEFAULT} .endif # exists(${LOCALBASE}/bin/python) # Is only a meta-port version defined? -.if ${PYTHON_DEFAULT_VERSION} == "python2" -PYTHON2_DEFAULT_VERSION?= python${PYTHON2_DEFAULT} -.elif ${PYTHON_DEFAULT_VERSION:R} == "python2" +.if ${PYTHON_DEFAULT_VERSION:C/^[a-z]+//} == "2" +PYTHON2_DEFAULT_VERSION?= ${PYTHON2_DEFAULT} +.elif ${PYTHON_DEFAULT_VERSION:R:C/^[a-z]+//} == "2" PYTHON2_DEFAULT_VERSION= ${PYTHON_DEFAULT_VERSION} .else -PYTHON2_DEFAULT_VERSION?= python${PYTHON2_DEFAULT} +PYTHON2_DEFAULT_VERSION?= ${PYTHON2_DEFAULT} .endif -.if ${PYTHON_DEFAULT_VERSION} == "python3" -PYTHON3_DEFAULT_VERSION?= python${PYTHON3_DEFAULT} -.elif ${PYTHON_DEFAULT_VERSION:R} == "python3" +.if ${PYTHON_DEFAULT_VERSION:C/^[a-z]+//} == "3" +PYTHON3_DEFAULT_VERSION?= ${PYTHON3_DEFAULT} +.elif ${PYTHON_DEFAULT_VERSION:R:C/^[a-z]+//} == "3" PYTHON3_DEFAULT_VERSION= ${PYTHON_DEFAULT_VERSION} .else -PYTHON3_DEFAULT_VERSION?= python${PYTHON3_DEFAULT} +PYTHON3_DEFAULT_VERSION?= ${PYTHON3_DEFAULT} .endif .if ${_PYTHON_ARGS} == "2" -_PYTHON_ARGS= ${PYTHON2_DEFAULT_VERSION:S/^python//} +_PYTHON_ARGS= ${PYTHON2_DEFAULT_VERSION:C/^[a-z]+//} _WANTS_META_PORT= 2 .elif ${_PYTHON_ARGS} == "3" -_PYTHON_ARGS= ${PYTHON3_DEFAULT_VERSION:S/^python//} +_PYTHON_ARGS= ${PYTHON3_DEFAULT_VERSION:C/^[a-z]+//} _WANTS_META_PORT= 3 .endif # ${_PYTHON_ARGS} == "2" @@ -325,9 +348,11 @@ # that maintainers know what they are doing and assume PYTHON_VERSION to be a # hint. Just warn maintainers, if the versions do not match # (_PYTHON_VERSION_NONSUPPORTED). -_PYTHON_VERSION:= ${PYTHON_VERSION:S/^python//} +_PYTHON_VERSION:= ${PYTHON_VERSION:C/^[a-z]+//} +_PYTHON_IMPL?= ${PYTHON_VERSION:C/^([a-z]+).*/\1/} .else -_PYTHON_VERSION:= ${PYTHON_DEFAULT_VERSION:S/^python//} +_PYTHON_VERSION:= ${PYTHON_DEFAULT_VERSION:C/^[a-z]+//} +_PYTHON_IMPL?= ${PYTHON_DEFAULT_VERSION:C/^([a-z]+).*/\1/} .endif # defined(PYTHON_VERSION) # Validate Python version whether it meets the version restriction. @@ -351,7 +376,7 @@ WARNING+= "needs Python ${_PYTHON_VERSION_NONSUPPORTED}. But a port depending on this one specified ${_PV}" .endif # defined(PYTHON_VERSION) || defined(PYTHON_CMD) .undef _PYTHON_VERSION -.for ver in ${PYTHON2_DEFAULT} ${PYTHON3_DEFAULT} ${_PYTHON_VERSIONS} +.for ver in ${PYTHON2_DEFAULT:C/^[a-z]+//} ${PYTHON3_DEFAULT:C/^[a-z]+//} ${_PYTHON_VERSIONS_${_PYTHON_IMPL}} __VER= ${ver} .if !defined(_PYTHON_VERSION) && \ !(!empty(_PYTHON_VERSION_MINIMUM) && ( \ @@ -370,7 +395,7 @@ # 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 # the supported version range. -PYTHON_VERSION?= python${_PYTHON_VERSION} +PYTHON_VERSION?= ${_PYTHON_IMPL}{_PYTHON_VERSION} .if !defined(PYTHON_NO_DEPENDS) DEPENDS_ARGS+= PYTHON_VERSION=${PYTHON_VERSION} .endif @@ -378,8 +403,8 @@ # NOTE: # # PYTHON_VERSION will hold whatever is passed down the dependency chain. -# If a user runs `make PYTHON_VERSION=python3.3, PYTHON_VERSION will be -# set to 'python3.3'. A port however may require a different version, +# If a user runs `make PYTHON_VERSION=cpython3.3, PYTHON_VERSION will be +# set to 'cpython3.3'. A port however may require a different version, # which is stored (above) in _PYTHON_VERSION. # Every python bit below hence should use python${_PYTHON_VERSION}, since # this is the value, the _port_ requires @@ -391,7 +416,8 @@ PYTHON_MAJOR_VER= ${PYTHON_VER:R} PYTHON_REL= # empty PYTHON_ABIVER= # empty -PYTHON_PORTSDIR= ${_PYTHON_RELPORTDIR}${PYTHON_SUFFIX} + +.include "python.${_PYTHON_IMPL}.mk" # Protect partial checkouts from Mk/Scripts/functions.sh:export_ports_env(). .if !defined(_PORTS_ENV_CHECK) || exists(${PORTSDIR}/${PYTHON_PORTSDIR}) .include "${PORTSDIR}/${PYTHON_PORTSDIR}/Makefile.version" @@ -403,7 +429,6 @@ 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 -PYTHON_CMD?= ${_PYTHON_BASECMD}${_PYTHON_VERSION} .if ${PYTHON_VER} != 2.7 .if exists(${PYTHON_CMD}-config) PYTHON_ABIVER!= ${PYTHON_CMD}-config --abiflags @@ -419,16 +444,14 @@ .endif _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_SITELIBDIR= ${PYTHON_LIBDIR}/site-packages -PYTHON_PKGNAMEPREFIX= py${PYTHON_SUFFIX}- -PYTHON_PKGNAMESUFFIX= -py${PYTHON_SUFFIX} +PYTHON_PKGNAMEPREFIX= ${_PYTHON_SHORTNAME}${PYTHON_SUFFIX}- +PYTHON_PKGNAMESUFFIX= -${_PYTHON_SHORTNAME}${PYTHON_SUFFIX} -PYTHONPREFIX_INCLUDEDIR= ${PYTHON_INCLUDEDIR:S;${PYTHONBASE};${PREFIX};} -PYTHONPREFIX_LIBDIR= ${PYTHON_LIBDIR:S;${PYTHONBASE};${PREFIX};} -PYTHONPREFIX_SITELIBDIR= ${PYTHON_SITELIBDIR:S;${PYTHONBASE};${PREFIX};} +PYTHONPREFIX= ${PYTHONBASE:S;${LOCALBASE};${PREFIX};} +PYTHONPREFIX_INCLUDEDIR= ${PYTHON_INCLUDEDIR:S;${LOCALBASE};${PREFIX};} +PYTHONPREFIX_LIBDIR= ${PYTHON_LIBDIR:S;${LOCALBASE};${PREFIX};} +PYTHONPREFIX_SITELIBDIR= ${PYTHON_SITELIBDIR:S;${LOCALBASE};${PREFIX};} # Used for recording the installed files. _PYTHONPKGLIST= ${WRKDIR}/.PLIST.pymodtmp @@ -481,7 +504,7 @@ exec(compile(open(__file__, 'rb').read().replace(b'\\r\\n', b'\\n'), __file__, 'exec'))" PYDISTUTILS_CONFIGUREARGS?= # empty PYDISTUTILS_BUILDARGS?= # empty -PYDISTUTILS_INSTALLARGS?= -c -O1 --prefix=${PREFIX} +PYDISTUTILS_INSTALLARGS?= -c -O1 --prefix=${PYTHONPREFIX} .if defined(_PYTHON_FEATURE_DISTUTILS) . if !defined(PYDISTUTILS_INSTALLNOSINGLE) PYDISTUTILS_INSTALLARGS+= --single-version-externally-managed @@ -564,19 +587,19 @@ .if defined(_PYTHON_BUILD_DEP) BUILD_DEPENDS+= ${PYTHON_CMD}:${PYTHON_PORTSDIR} .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 .if defined(_PYTHON_RUN_DEP) RUN_DEPENDS+= ${PYTHON_CMD}:${PYTHON_PORTSDIR} .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 .if defined(_PYTHON_TEST_DEP) TEST_DEPENDS+= ${PYTHON_CMD}:${PYTHON_PORTSDIR} .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 Index: Mk/Uses/python.pypy.mk =================================================================== --- Mk/Uses/python.pypy.mk +++ Mk/Uses/python.pypy.mk @@ -0,0 +1,12 @@ +# 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_BINNAME= pypy +_PYTHON_SHORTNAME= pypy + +PYTHON_PORTSDIR= lang/pypy${PYTHON_SUFFIX:C/(.).*/\1/:S/2//} +PYTHON_CMD?= ${LOCALBASE}/bin/pypy${PYTHON_SUFFIX:C/(.).*/\1/:S/2//} + +PYTHON_INCLUDEDIR= ${PYTHONBASE}/include +PYTHON_LIBDIR= ${PYTHONBASE}/bin +PYTHON_SITELIBDIR= ${PYTHONBASE}/site-packages Index: Mk/bsd.default-versions.mk =================================================================== --- Mk/bsd.default-versions.mk +++ Mk/bsd.default-versions.mk @@ -61,12 +61,12 @@ PGSQL_DEFAULT?= 9.3 # Possible values: 5.5, 5.6, 7.0 PHP_DEFAULT?= 5.6 -# Possible values: 2.7, 3.3, 3.4, 3.5 -PYTHON_DEFAULT?= 2.7 -# Possible values: 2.7 -PYTHON2_DEFAULT?= 2.7 -# Possible values: 3.3, 3.4, 3.5 -PYTHON3_DEFAULT?= 3.4 +# Possible values: cpython2.7, cpython3.3, cpython3.4, cpython3.5, pypy2.7 pypy3.3 +PYTHON_DEFAULT?= pypy2.7 +# Possible values: cpython2.7, pypy2.7 +PYTHON2_DEFAULT?= pypy2.7 +# Possible values: cpython3.3, cpython3.4, cpython3.5, pypy2.7 pypy3.3 +PYTHON3_DEFAULT?= pypy3.3 # Possible values: 2.0, 2.1, 2.2, 2.3 RUBY_DEFAULT?= 2.2 # Possible values: base, openssl, openssl-devel, libressl, libressl-devel Index: lang/pypy/Makefile.version =================================================================== --- lang/pypy/Makefile.version +++ lang/pypy/Makefile.version @@ -0,0 +1,4 @@ +# Mk/Uses/python.mk includes this file, don't remove it! +# $FreeBSD$ + +PYTHON_PORTVERSION= 2.7.10 Index: lang/pypy3/Makefile.version =================================================================== --- lang/pypy3/Makefile.version +++ lang/pypy3/Makefile.version @@ -0,0 +1,4 @@ +# Mk/Uses/python.mk includes this file, don't remove it! +# $FreeBSD$ + +PYTHON_PORTVERSION= 3.3.5