74b47a89d4
Python 3.7.0 is the newest major release of the Python language, and it contains many new features and optimizations. Among the major new features in Python 3.7 are: PEP 539, new C API for thread-local storage PEP 545, Python documentation translations New documentation translations: Japanese, French, and Korean. PEP 552, Deterministic pyc files PEP 553, Built-in breakpoint() PEP 557, Data Classes PEP 560, Core support for typing module and generic types PEP 562, Customization of access to module attributes PEP 563, Postponed evaluation of annotations PEP 564, Time functions with nanosecond resolution PEP 565, Improved DeprecationWarning handling PEP 567, Context Variables Avoiding the use of ASCII as a default text encoding (PEP 538, legacy C locale coercion and PEP 540, forced UTF-8 runtime mode) The insertion-order preservation nature of dict objects is now an official part of the Python language spec. Notable performance improvements in many areas.
209 lines
6.1 KiB
Makefile
209 lines
6.1 KiB
Makefile
# $NetBSD: pyversion.mk,v 1.124 2018/07/03 03:55:40 adam Exp $
|
|
|
|
# This file determines which Python version is used as a dependency for
|
|
# a package.
|
|
#
|
|
# === User-settable variables ===
|
|
#
|
|
# PYTHON_VERSION_DEFAULT
|
|
# The preferred Python version to use.
|
|
#
|
|
# Possible values: 27 34 35 36 37
|
|
# Default: 27
|
|
#
|
|
# === Infrastructure variables ===
|
|
#
|
|
# PYTHON_VERSION_REQD
|
|
# Python version to use. This variable should not be set in
|
|
# packages. Normally it is used by bulk build tools.
|
|
#
|
|
# Possible: ${PYTHON_VERSIONS_ACCEPTED}
|
|
# Default: ${PYTHON_VERSION_DEFAULT}
|
|
#
|
|
# === Package-settable variables ===
|
|
#
|
|
# PYTHON_VERSIONS_ACCEPTED
|
|
# The Python versions that are acceptable for the package. The
|
|
# order of the entries matters, since earlier entries are
|
|
# preferred over later ones.
|
|
#
|
|
# Possible values: 37 36 35 34 27
|
|
# Default: 37 36 35 34 27
|
|
#
|
|
# PYTHON_VERSIONS_INCOMPATIBLE
|
|
# The Python versions that are NOT acceptable for the package.
|
|
#
|
|
# Possible values: 27 34 35 36 37
|
|
# Default: (empty)
|
|
#
|
|
# PYTHON_FOR_BUILD_ONLY
|
|
# Whether Python is needed only at build time or at run time.
|
|
#
|
|
# Possible values: yes no tool
|
|
# Default: no
|
|
#
|
|
# PYTHON_SELF_CONFLICT
|
|
# If set to "yes", additional CONFLICTS entries are added for
|
|
# registering a conflict between pyNN-<modulename> packages.
|
|
#
|
|
# Possible values: yes no
|
|
# Default: no
|
|
#
|
|
# === Defined variables ===
|
|
#
|
|
# PYPKGPREFIX
|
|
# The prefix to use in PKGNAME for extensions which are meant
|
|
# to be installed for multiple Python versions.
|
|
#
|
|
# Example: py27
|
|
#
|
|
# PYVERSSUFFIX
|
|
# The suffix to executables and in the library path, equal to
|
|
# sys.version[0:3].
|
|
#
|
|
# Example: 2.7
|
|
#
|
|
# Keywords: python
|
|
#
|
|
|
|
.if !defined(PYTHON_PYVERSION_MK)
|
|
PYTHON_PYVERSION_MK= defined
|
|
|
|
# derive a python version from the package name if possible
|
|
# optionally handled quoted package names
|
|
.if defined(PKGNAME_REQD) && !empty(PKGNAME_REQD:Mpy[0-9][0-9]-*) || \
|
|
defined(PKGNAME_REQD) && !empty(PKGNAME_REQD:M*-py[0-9][0-9]-*)
|
|
PYTHON_VERSION_REQD?= ${PKGNAME_REQD:C/(^.*-|^)py([0-9][0-9])-.*/\2/}
|
|
.elif defined(PKGNAME_OLD) && !empty(PKGNAME_OLD:Mpy[0-9][0-9]-*) || \
|
|
defined(PKGNAME_OLD) && !empty(PKGNAME_OLD:M*-py[0-9][0-9]-*)
|
|
PYTHON_VERSION_REQD?= ${PKGNAME_OLD:C/(^.*-|^)py([0-9][0-9])-.*/\2/}
|
|
.endif
|
|
|
|
.include "../../mk/bsd.prefs.mk"
|
|
|
|
BUILD_DEFS+= PYTHON_VERSION_DEFAULT
|
|
BUILD_DEFS_EFFECTS+= PYPACKAGE
|
|
|
|
PYTHON_VERSION_DEFAULT?= 27
|
|
PYTHON_VERSIONS_ACCEPTED?= 37 36 35 34 27
|
|
PYTHON_VERSIONS_INCOMPATIBLE?= # empty by default
|
|
|
|
# transform the list into individual variables
|
|
.for pv in ${PYTHON_VERSIONS_ACCEPTED}
|
|
. if empty(PYTHON_VERSIONS_INCOMPATIBLE:M${pv})
|
|
_PYTHON_VERSION_${pv}_OK= yes
|
|
_PYTHON_VERSIONS_ACCEPTED+= ${pv}
|
|
. endif
|
|
.endfor
|
|
|
|
#
|
|
# choose a python version where to add,
|
|
# try to be intelligent
|
|
#
|
|
# if a version is explicitely required, take it
|
|
.if defined(PYTHON_VERSION_REQD)
|
|
# but check if it is acceptable first, error out otherwise
|
|
. if defined(_PYTHON_VERSION_${PYTHON_VERSION_REQD}_OK)
|
|
_PYTHON_VERSION= ${PYTHON_VERSION_REQD}
|
|
. endif
|
|
.else
|
|
# if the default is accepted, it is first choice
|
|
. if !defined(_PYTHON_VERSION)
|
|
. if defined(_PYTHON_VERSION_${PYTHON_VERSION_DEFAULT}_OK)
|
|
_PYTHON_VERSION= ${PYTHON_VERSION_DEFAULT}
|
|
. endif
|
|
. endif
|
|
# prefer an already installed version, in order of "accepted"
|
|
. if !defined(_PYTHON_VERSION)
|
|
. for pv in ${PYTHON_VERSIONS_ACCEPTED}
|
|
. if defined(_PYTHON_VERSION_${pv}_OK)
|
|
_PYTHON_VERSION?= ${pv}
|
|
. endif
|
|
. endfor
|
|
. endif
|
|
.endif
|
|
|
|
#
|
|
# Variable assignment for multi-python packages
|
|
MULTI+= PYTHON_VERSION_REQD=${_PYTHON_VERSION}
|
|
|
|
# No supported version found, annotate to simplify statements below.
|
|
.if !defined(_PYTHON_VERSION)
|
|
_PYTHON_VERSION= none
|
|
PKG_FAIL_REASON+= "No valid Python version"
|
|
.endif
|
|
|
|
# Additional CONFLICTS
|
|
.if ${PYTHON_SELF_CONFLICT:U:tl} == "yes"
|
|
. for i in ${PYTHON_VERSIONS_ACCEPTED:N${_PYTHON_VERSION}}
|
|
CONFLICTS+= ${PKGNAME:S/py${_PYTHON_VERSION}/py${i}/:C/-[0-9].*$/-[0-9]*/}
|
|
. endfor
|
|
.endif # PYCONFLICTS
|
|
|
|
#
|
|
PLIST_VARS+= py2x py3x
|
|
|
|
.if empty(_PYTHON_VERSION:Mnone)
|
|
PYPACKAGE= python${_PYTHON_VERSION}
|
|
PYVERSSUFFIX= ${_PYTHON_VERSION:C/^([0-9])/\1./1}
|
|
BUILDLINK_API_DEPENDS.${PYPACKAGE}?= ${PYPACKAGE}>=${PYVERSSUFFIX}
|
|
PYPKGSRCDIR= ../../lang/${PYPACKAGE}
|
|
PYDEPENDENCY= ${BUILDLINK_API_DEPENDS.${PYPACKAGE}}:${PYPKGSRCDIR}
|
|
PYPKGPREFIX= py${_PYTHON_VERSION}
|
|
.endif
|
|
.if !empty(_PYTHON_VERSION:M3*)
|
|
PLIST.py3x= yes
|
|
.endif
|
|
.if !empty(_PYTHON_VERSION:M2*)
|
|
PLIST.py2x= yes
|
|
.endif
|
|
|
|
PTHREAD_OPTS+= require
|
|
.include "../../mk/pthread.buildlink3.mk"
|
|
|
|
PYTHON_FOR_BUILD_ONLY?= no
|
|
.if defined(PYPKGSRCDIR)
|
|
. if !empty(PYTHON_FOR_BUILD_ONLY:M[tT][oO][oO][lL])
|
|
TOOL_DEPENDS+= ${PYDEPENDENCY}
|
|
. else
|
|
. if !empty(PYTHON_FOR_BUILD_ONLY:M[yY][eE][sS])
|
|
BUILDLINK_DEPMETHOD.python?= build
|
|
. endif
|
|
. include "${PYPKGSRCDIR}/buildlink3.mk"
|
|
. endif
|
|
.endif
|
|
|
|
PYTHONBIN= ${LOCALBASE}/bin/python${PYVERSSUFFIX}
|
|
PYTHONCONFIG= ${LOCALBASE}/bin/python${PYVERSSUFFIX}-config
|
|
PY_COMPILE_ALL= \
|
|
${PYTHONBIN} ${PREFIX}/lib/python${PYVERSSUFFIX}/compileall.py -q
|
|
PY_COMPILE_O_ALL= \
|
|
${PYTHONBIN} -O ${PREFIX}/lib/python${PYVERSSUFFIX}/compileall.py -q
|
|
|
|
.if exists(${PYTHONBIN})
|
|
PYINC!= ${PYTHONBIN} -c "import distutils.sysconfig; \
|
|
print (distutils.sysconfig.get_python_inc(0, \"\"))" || ${ECHO} ""
|
|
PYLIB!= ${PYTHONBIN} -c "import distutils.sysconfig; \
|
|
print (distutils.sysconfig.get_python_lib(0, 1, \"\"))" || ${ECHO} ""
|
|
PYSITELIB!= ${PYTHONBIN} -c "import distutils.sysconfig; \
|
|
print (distutils.sysconfig.get_python_lib(0, 0, \"\"))" || ${ECHO} ""
|
|
|
|
PRINT_PLIST_AWK+= /^${PYINC:S|/|\\/|g}/ \
|
|
{ gsub(/${PYINC:S|/|\\/|g}/, "$${PYINC}") }
|
|
PRINT_PLIST_AWK+= /^${PYSITELIB:S|/|\\/|g}/ \
|
|
{ gsub(/${PYSITELIB:S|/|\\/|g}/, "$${PYSITELIB}") }
|
|
PRINT_PLIST_AWK+= /^${PYLIB:S|/|\\/|g}/ \
|
|
{ gsub(/${PYLIB:S|/|\\/|g}/, "$${PYLIB}") }
|
|
.endif
|
|
|
|
ALL_ENV+= PYTHON=${PYTHONBIN}
|
|
.if defined(USE_CMAKE)
|
|
# used by FindPythonInterp.cmake and FindPythonLibs.cmake
|
|
CMAKE_ARGS+= -DPYVERSSUFFIX:STRING=${PYVERSSUFFIX}
|
|
# set this explicitly, as by default it will prefer the built in framework
|
|
CMAKE_ARGS.Darwin+= -DPYTHON_INCLUDE_DIR:PATH=${BUILDLINK_DIR}/${PYINC}
|
|
CMAKE_ARGS.Darwin+= -DPYTHON_INCLUDE_PATH:PATH=${BUILDLINK_DIR}/${PYINC}
|
|
CMAKE_ARGS.Darwin+= -DPYTHON_EXECUTABLE:FILEPATH=${PYTHONBIN}
|
|
.endif
|
|
|
|
.endif # PYTHON_PYVERSION_MK
|