Index: Mk/Uses/python.mk =================================================================== --- Mk/Uses/python.mk +++ Mk/Uses/python.mk @@ -1,213 +1,313 @@ -# -*- tab-width: 4; -*- -# ex: ts=4 +# $FreeBSD$ # -# $FreeBSD: head/Mk/bsd.python.mk 362364 2014-07-20 19:47:45Z antoine $ +# Provide support for Python related ports. This includes detecting Python +# interpreters, ports providing package and modules for python as well as +# consumer ports requiring Python at build or run time. +# +# Feature: python +# Usage: USES=python or USES=python:args +# Valid ARGS: , build, run +# +# 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 +# explicit version or as a meta port version (eg. 3.2-3.3 for +# [min]-[max], 2.7+ or -3.2 for min+ and -max, 2.7 for an +# explicit version or 3 for a meta port version). Example: +# +# USES=python:2.7 # Only use Python 2.7 +# USES=python:3.2+ # Use Python 3.2 or newer +# USES=python:3.2-3.3 # Use Python 3.2 or 3.3 +# USES=python:-3.2 # Use any Python up to 3.2 +# USES=python:2 # Use the Python 2 meta port +# USES=python # Use the set default Python +# # version +# +# build Indicates that Python is needed at build time and adds +# it as BUILD_DEPENDS. +# run Indicates that Python is needed at run time and adds +# it as RUN_DEPENDS. +# +# If build and run are omitted, Python will be added as BUILD_DEPENDS and +# RUN_DEPENDS. +# +# Variables, which can be set by a user: +# +# PYTHON_VERSION - The chosen Python interpreter including the version, +# e.g. python2.7, python3.3, etc. This allows the user +# to override the currently chosen default version and +# to install the port for a specific Python version. +# It must not be set by a port. +# +# Variables, which can be set by the port: +# +# PYTHON_FEATURES - A list of additional features and functionality to +# enable. Supported features are: +# +# concurrent - Indicates that the port can be installed for +# different python versions at the same time. The port +# is supposed to use a unique prefix for certain +# directories using USES=uniquefiles:dirs (see the +# uniquefiles.mk Uses for details about the +# directories), if set to yes. Binaries receive an +# additional suffix, based on ${PYTHON_VER}. +# +# The values for the uniquefiles USES are set as +# follows: +# +# UNIQUE_PREFIX= ${PYTHON_PKGNAMEPREFIX} +# UNIQUE_SUFFIX= -${PYTHON_VER} +# +# If the port is installed for the current default +# python version, scripts and binaries in +# +# ${PREFIX}/bin +# ${PREFIX}/sbin +# ${PREFIX}/libexec +# +# are linked from the prefixed version to the +# prefix-less original name, e.g. +# bin/foo-2.7 --> bin/foo. +# +# distutils - Use distutils as do-configure, do-build and +# do-install targets. +# +# autoplist - Automatically generates the packaging list for a +# port that uses distutils when defined. +# requires: distutils +# +# py3kplist - Automatically generates Python 3.x compatible +# __pycache__ entries from a Python 2.x packaging list +# when defined. Use this for ports that do *not* use +# standard Python packaging mechanisms such as +# distutils, and support *both* Python 2.x and 3.x. +# Not needed when PYTHON_FEATURES=autoplist is set. +# +# pythonprefix - Says that the port installs in ${PYTHONBASE} instead +# of ${PREFIX}. +# +# noegginfo - Skip an egg-info entry from plist when defined. +# +# PYTHON_CMD - Python's command line file name, including the +# version number (used for dependencies). +# default: ${PYTHONBASE}/bin/${PYTHON_VERSION} +# +# PYSETUP - Name of the setup script used by the distutils +# package. +# default: setup.py # - -.if !defined(_POSTMKINCLUDED) && !defined(Python_Pre_Include) - -Python_Pre_Include= bsd.python.mk -Python_Include_MAINTAINER= python@FreeBSD.org - -# This file contains some variable definitions that are supposed to -# make your life easier when dealing with ports related to the Python -# language. It's automatically included when USE_PYTHON is defined in -# the ports' makefile. If your port requires only some set of Python -# versions, you can define USE_PYTHON as [min]-[max] or min+ or -max -# or as an explicit version or as a meta port version (eg. 3.2-3.3 -# for [min]-[max], 2.7+ or -3.2 for min+ and -max, 2.7 for an -# explicit version or 3 for a meta port version). -# -# The variables: -# -# PYTHONBASE - Python port's installation prefix. -# default: ${LOCALBASE} +# PYDISTUTILS_PKGNAME +# - Internal name in the distutils for egg-info. +# default: ${PORTNAME} # -# PYTHON_CMD - Python's command line file name, including the version -# number (used for dependencies). -# default: ${PYTHONBASE}/bin/${PYTHON_VERSION} +# PYDISTUTILS_PKGVERSION +# - Internal version in the distutils for egg-info. +# default: ${PORTVERSION} # -# PYTHON_DISTNAME - The ${DISTNAME} for your python version. Needed for -# extensions like bsddb, gdbm, sqlite3 and tkinter, which -# are built from sources contained in the Python -# distribution. +# PYDISTUTILS_CONFIGURE_TARGET +# - Pass this command to distutils on configure stage. +# default: config # -# PYTHON_MASTER_SITES -# - The ${MASTER_SITES} for your python version. (You must -# use this instead of ${MASTER_SITE_PYTHON} to support -# python-devel port.) +# PYDISTUTILS_BUILD_TARGET +# - Pass this command to distutils on build stage. +# default: build # -# PYTHON_MASTER_SITE_SUBDIR -# - The ${MASTER_SITE_SUBDIR} for your python version. +# PYDISTUTILS_INSTALL_TARGET +# - Pass this command to distutils on install stage. +# default: install # -# PYTHON_INCLUDEDIR - Location of the Python include files. -# default: ${PYTHONBASE}/include/${PYTHON_VERSION} +# PYDISTUTILS_CONFIGUREARGS +# - Arguments to config with distutils. +# default: # -# PYTHON_LIBDIR - Base of the python library tree -# default: ${PYTHONBASE}/lib/${PYTHON_VERSION} +# PYDISTUTILS_BUILDARGS +# - Arguments to build with distutils. +# default: # -# PYTHON_PKGNAMEPREFIX -# - Use this as a ${PKGNAMEPREFIX} to distinguish -# packages for different Python versions. -# default: py${PYTHON_SUFFIX}- +# PYDISTUTILS_INSTALLARGS +# - Arguments to install with distutils. +# default: -c -O1 --prefix=${PREFIX} --single-version-externally-managed --root=${STAGEDIR} # -# PYTHON_PKGNAMESUFFIX -# - If your port's name is more popular without `py-' -# prefix, use this as a ${PKGNAMESUFFIX} alternatively. -# default: -py${PYTHON_SUFFIX} +# PYDISTUTILS_EGGINFO +# - 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 # -# PYTHON_PLATFORM - Python's idea of the OS release. -# XXX This is faked with ${OPSYS} and ${OSREL} until I -# find out how to delay defining a variable until after -# a certain target has been built. +# The following variables can be read by ports and must not be modified: # -# PYTHON_PORTSDIR - The source of your binary's port. Needed for the -# RUN_DEPENDS. +# PYTHONBASE - The installation prefix of the chosen Python +# interpreter, e.g. /usr/local # # PYTHON_PORTVERSION -# - Version number suitable for ${PORTVERSION}. +# - Version number suitable for ${PORTVERSION}. # -# PYTHON_REL - Version number in numerical format, to ease -# comparison in makefiles +# PYTHON_PORTSDIR - The port directory of the chosen Python interpreter # -# PYTHON_SITELIBDIR - Location of the site-packages tree. Don't change, -# unless you know what you do. -# default: ${PYTHON_LIBDIR}/site-packages +# PYTHON_REL - The release number of the chosen Python interpreter +# without dots, e.g. 276, 341, ... # -# PYTHON_SUFFIX - Yet another short version number, primarily intended -# for ${PYTHON_PKGNAMEPREFIX}. +# PYTHON_SUFFIX - The major-minor release number of the chosen Python +# interpreter without dots, e.g. 27, 34, ... +# Used for prefixes and suffixes. # -# PYTHON_VERSION - Version of the python binary in your ${PATH}, in the -# format "python2.0". Set this in your makefile in case -# you want to build extensions with an older binary. -# default: depends on the version of your python binary +# PYTHON_MAJOR_VER - The major release version of the chosen Python +# interpreter, e.g. 2, 3, ... # -# PYTHON_VER - Version of the python binary in your ${PATH}, in the -# format "2.7". +# PYTHON_VER - The major-minor release version of the chosen Python +# interpreter, e.g. 2.7, 3.4, ... # -# PYTHON_DEFAULT_VERSION -# - Version of the default python binary in your ${PATH}, in -# the format "python2.7". +# PYTHON_ABIVER - Additional ABI flags set by the chosen Python +# interpreter, e.g. md # -# PYTHON2_DEFAULT_VERSION -# - Version of the default python2 binary in your ${PATH}, -# in the format "python2.7". -# -# PYTHON3_DEFAULT_VERSION -# - Version of the default python3 binary in your ${PATH}, -# in the format "python3.2". +# PYTHON_INCLUDEDIR - Location of the Python include files. +# default: ${PYTHONBASE}/include/${PYTHON_VERSION} # -# PYTHON_MAJOR_VER - Python version major number. 2 for python-2.x, -# 3 for python-3.x and so on. +# PYTHON_LIBDIR - Base of the python library tree +# default: ${PYTHONBASE}/lib/${PYTHON_VERSION} # -# PYTHON_WRKSRC - The ${WRKSRC} for your python version. Needed for -# extensions like Tkinter, py-gdbm and py-expat, which -# are built from sources contained in the Python -# distribution. +# PYTHON_SITELIBDIR - Location of the site-packages tree. Don't change, +# unless you know what you do. +# default: ${PYTHON_LIBDIR}/site-packages # # There are PREFIX-clean variants of the PYTHON_*DIR variables above. -# They are meant to be used in the installation targets. +# They are meant to be used by ports instead of the above variables, so the +# ports respect ${PREFIX} (unless PYTHON_FEATURES=pythonprefix is specified). # # PYTHONPREFIX_INCLUDEDIR default: ${PREFIX}/include/${PYTHON_VERSION} # PYTHONPREFIX_LIBDIR default: ${PREFIX}/lib/${PYTHON_VERSION} # PYTHONPREFIX_SITELIBDIR default: ${PYTHONPREFIX_LIBDIR}/site-packages # -# PYGAME - Dependency line for the Pygame library. -# -# PYNUMERIC - Dependency line for the numeric extension. -# -# PYNUMPY - Dependency line for the new numeric extension. -# py-numpy, Py-Numeric is deprecated. -# -# PYXML - Dependency line for the XML extension. As of Python-2.0, -# this extension is in the base distribution. -# -# PYTHON_CONCURRENT_INSTALL -# - Indicates that the port can be installed for different -# python versions at the same time. The port is supposed -# to use a unique prefix for certain directories using -# USES=uniquefiles:dirs (see the uniquefiles.mk Uses for -# details about the directories), if set to yes. Binaries -# receive an additional suffix, based on PYTHON_VER. -# -# The values for the uniquefiles USES are set as follows: -# -# UNIQUE_PREFIX= ${PYTHON_PKGNAMEPREFIX} -# UNIQUE_SUFFIX= -${PYTHON_VER} +# PYTHON_PLATFORM - Python's idea of the OS release. +# This is faked with ${OPSYS} and ${OSREL} until we +# find out how to delay defining a variable until +# after a certain target has been built. # -# If the port is installed for the current default -# python version, scripts and binaries in +# PYTHON_PKGNAMEPREFIX +# - Use this as a ${PKGNAMEPREFIX} to distinguish +# packages for different Python versions. +# default: py${PYTHON_SUFFIX}- # -# ${PREFIX}/bin -# ${PREFIX}/sbin -# ${PREFIX}/libexec +# Using USES=python.mk also will add some useful entries to PLIST_SUB: # -# are linked from the prefixed version to the prefix-less -# original name, e.g. bin/foo-2.7 --> bin/foo. +# PYTHON_INCLUDEDIR=${PYTHONPREFIX_INCLUDEDIR:S;${PREFIX}/;;} +# PYTHON_LIBDIR=${PYTHONPREFIX_LIBDIR:S;${PREFIX}/;;} +# PYTHON_PLATFORM=${PYTHON_PLATFORM} +# PYTHON_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;} +# PYTHON_VERSION=${PYTHON_VERSION} # -# USE_PYTHON_PREFIX - Says that the port installs in ${PYTHONBASE}. # -# USE_PYDISTUTILS - Use distutils as do-configure, do-build and do-install -# targets. +# Deprecated variables, which exist for compatibility and will be removed +# soon: # -# PYSETUP - Name of the setup script used by the distutils package. -# default: setup.py +# USE_PYDISTUTILS - Deprecated, use PYTHON_FEATURES=distutils instead # # PYDISTUTILS_AUTOPLIST -# - Automatically generates the packaging list for a port -# that uses distutils when defined. -# requires: USE_PYDISTUTILS +# - Deprecated, use PYTHON_FEATURES=autoplist instead # # PYTHON_PY3K_PLIST_HACK -# - Automatically generates Python 3.x compatible -# __pycache__ entries from a Python 2.x packaging list -# when defined. Use this for ports that do *not* use -# standard Python packaging mechanisms such as distutils, -# and support *both* Python 2.x and 3.x. Not needed when -# PYDISTUTILS_AUTOPLIST is defined. +# - Deprecated, use PYTHON_FEATURES=py3kplist instead # -# PYDISTUTILS_PKGNAME -# - Internal name in the distutils for egg-info. -# default: ${PORTNAME} -# -# PYDISTUTILS_PKGVERSION -# - Internal version in the distutils for egg-info. -# default: ${PORTVERSION} -# -# PYDISTUTILS_CONFIGURE_TARGET -# - Pass this command to distutils on configure stage. -# default: config -# -# PYDISTUTILS_BUILD_TARGET -# - Pass this command to distutils on build stage. -# default: build +# PYDISTUTILS_NOEGGINFO +# - Deprecated, use PYTHON_FEATURES=noegginfo instead # -# PYDISTUTILS_INSTALL_TARGET -# - Pass this command to distutils on install stage. -# default: install +# PYTHON_MASTER_SITES +# - Deprecated, use MASTER_SITE_PYTHON instead, +# see bsd.sites.mk # -# PYDISTUTILS_CONFIGUREARGS -# - Arguments to config with distutils. -# default: +# PYTHON_DEFAULT_VERSION +# PYTHON2_DEFAULT_VERSION +# PYTHON3_DEFAULT_VERSION +# - Deprecated, use PYTHON[2,3]_DEFAULT instead, +# see bsd.default-versions.mk # -# PYDISTUTILS_BUILDARGS -# - Arguments to build with distutils. -# default: +# PYTHON_PKGNAMESUFFIX +# - Deprecated +# default: -py${PYTHON_SUFFIX} # -# PYDISTUTILS_INSTALLARGS -# - Arguments to install with distutils. -# default: -c -O1 --prefix=${PREFIX} +# PYTHON_CONCURRENT_INSTALL +# - Deprecated, use PYTHON_FEATURES=concurrent instead # -# PYDISTUTILS_EGGINFO -# - 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 +# USE_PYTHON_PREFIX - Deprecated, use PYTHON_FEATURES=pythonprefix instead # -# PYDISTUTILS_NOEGGINFO -# - Skip an egg-info entry from plist when defined. +# PYDISTUTILS_INSTALLNOSINGLE +# - Deprecated without replacement # +# MAINTAINER: python@FreeBSD.org -_PYTHON_PORTBRANCH= 2.7 -_PYTHON_ALLBRANCHES= 2.7 3.4 3.3 3.2 # preferred first +.if !defined(_INCLUDE_USES_PYTHON_MK) +_INCLUDE_USES_PYTHON_MK= yes + +# What Python version and what Python interpreters are currently supported? +_PYTHON_VERSIONS= 2.7 3.4 3.3 3.2 # preferred first +_PYTHON_PORTBRANCH= 2.7 # ${_PYTHON_VERSIONS:[1]} +_PYTHON_BASECMD= ${LOCALBASE}/bin/python +_PYTHON_RELPORTDIR= ${PORTSDIR}/lang/python + +# Check the passed arguments +.if !defined(python_ARGS) +python_ARGS= #empty +.endif + +# COMPAT KNOBS, remove them, once the tree is cleaned +.if defined(USE_PYTHON) +.if ${USE_PYTHON} != "yes" +python_ARGS= ${USE_PYTHON} +.endif +.elif defined(USE_PYTHON_BUILD) +.if ${USE_PYTHON_BUILD} != "yes" +python_ARGS= ${USE_PYTHON_BUILD},build +.endif +.elif defined(USE_PYTHON_RUN) +.if ${USE_PYTHON_RUN} != "yes" +python_ARGS= ${USE_PYTHON_RUN},run +.endif +.endif # defined(USE_PYTHON) +.if !defined(PYTHON_FEATURES) +PYTHON_FEATURES= +.if defined(USE_PYDISTUTILS) +PYTHON_FEATURES+= distutils +.endif +.if defined(PYDISTUTILS_AUTOPLIST) +PYTHON_FEATURES+= autoplist +.endif +.if defined(PYTHON_PY3K_PLIST_HACK) +PYTHON_FEATURES+= py3kplist +.endif +.if defined(PYTHON_CONCURRENT_INSTALL) +PYTHON_FEATURES+= concurrent +.endif +.if defined(USE_PYTHON_PREFIX) +PYTHON_FEATURES+= pythonprefix +.endif +.if defined(PYDISTUTILS_NOEGGINFO) +PYTHON_FEATURES+= noegginfo +.endif +.endif # !defined(PYTHON_FEATURES) +# COMPAT KNOBS END + +# Make each individual feature available as _PYTHON_FEATURE_ +.for var in ${PYTHON_FEATURES:S/,/ /g} +_PYTHON_FEATURE_${var:tu}= yes +.endfor + +# Make sure that no dependency or some other environment variable +# pollutes the build/run dependency detection +.undef _PYTHON_BUILD_DEP +.undef _PYTHON_RUN_DEP +_PYTHON_ARGS= ${python_ARGS:S/,/ /g} +.if ${python_ARGS:Mbuild} +_PYTHON_BUILD_DEP= yes +_PYTHON_ARGS:= ${_PYTHON_ARGS:Nbuild} +.endif +.if ${python_ARGS:Mrun} +_PYTHON_RUN_DEP= yes +_PYTHON_ARGS:= ${_PYTHON_ARGS:Nrun} +.endif + +# The port does not specify a build or run dependency, assume both are +# required. +.if !defined(_PYTHON_BUILD_DEP) && !defined(_PYTHON_RUN_DEP) +_PYTHON_BUILD_DEP= yes +_PYTHON_RUN_DEP= yes +.endif # Determine version number of Python to use .include "${PORTSDIR}/Mk/bsd.default-versions.mk" @@ -224,8 +324,8 @@ .if exists(${LOCALBASE}/bin/python) _PYTHON_DEFAULT_VERSION!= (${LOCALBASE}/bin/python -c \ - 'import sys; print(sys.version[:3])' 2> /dev/null \ - || ${ECHO_CMD} ${_PYTHON_PORTBRANCH}) | ${TAIL} -1 + 'import sys; print("%d.%d.%d" % sys.version_info[:3])' 2> /dev/null \ + || ${ECHO_CMD} ${_PYTHON_PORTBRANCH}) | ${TAIL} -1 .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 @@ -242,7 +342,6 @@ .else PYTHON2_DEFAULT_VERSION?= python${PYTHON2_DEFAULT} .endif - .if ${PYTHON_DEFAULT_VERSION} == "python3" PYTHON3_DEFAULT_VERSION?= python${PYTHON3_DEFAULT} .elif ${PYTHON_DEFAULT_VERSION:R} == "python3" @@ -251,58 +350,57 @@ PYTHON3_DEFAULT_VERSION?= python${PYTHON3_DEFAULT} .endif +.if ${_PYTHON_ARGS} == "2" +_PYTHON_ARGS= ${PYTHON2_DEFAULT_VERSION:S/^python//} +_WANTS_META_PORT= 2 +.elif ${_PYTHON_ARGS} == "3" +_PYTHON_ARGS= ${PYTHON3_DEFAULT_VERSION:S/^python//} +_WANTS_META_PORT= 3 +.endif # ${_PYTHON_ARGS} == "2" + .if defined(PYTHON_VERSION) +# A port/user requests a specific python version for its dependencies via +# DEPENDS_ARGS, since it requires the specific python version itself. +# Several things can happen now: +# a) the dependency supports the requested version -> everything's fine +# b) the dependency does not support the requested version +# 1) the dependency works in a way that the different python +# versions do not matter -> everything's fine +# 2) the dependency is likely to break due to the conflict +# nothing's fine +# +# 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 +# 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_CMD= ${LOCALBASE}/bin/${PYTHON_VERSION} .else _PYTHON_VERSION:= ${PYTHON_DEFAULT_VERSION:S/^python//} _PYTHON_CMD= ${LOCALBASE}/bin/${PYTHON_DEFAULT_VERSION} -.endif - -.if !defined(USE_PYTHON) -.if defined(USE_PYTHON_BUILD) -USE_PYTHON= ${USE_PYTHON_BUILD} -.elif defined(USE_PYTHON_RUN) -USE_PYTHON= ${USE_PYTHON_RUN} -.else -USE_PYTHON= yes -.endif # defined(USE_PYTHON_BUILD) -.else -USE_PYTHON_BUILD= yes -USE_PYTHON_RUN= yes -.endif # !defined(USE_PYTHON) - -.if ${USE_PYTHON} == "2" -USE_PYTHON= ${PYTHON2_DEFAULT_VERSION:S/^python//} -_WANTS_META_PORT= 2 -.elif ${USE_PYTHON} == "3" -USE_PYTHON= ${PYTHON3_DEFAULT_VERSION:S/^python//} -_WANTS_META_PORT= 3 -.endif # ${USE_PYTHON} == "2" +.endif # defined(PYTHON_VERSION) -# Validate Python version whether it meets USE_PYTHON version restriction. -_PYTHON_VERSION_CHECK:= ${USE_PYTHON:C/^([1-9]\.[0-9])$/\1-\1/} +# Validate Python version whether it meets the version restriction. +_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:= ${_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:= ${_PYTHON_VERSION_MAXIMUM_TMP:M[1-9].[0-9]} +_PYTHON_VERSION_MAXIMUM:= ${_PYTHON_VERSION_MAXIMUM_TMP:M[1-9].[0-9]} -.if !empty(_PYTHON_VERSION_MINIMUM) && ( \ - ${_PYTHON_VERSION} < ${_PYTHON_VERSION_MINIMUM}) +.undef _PYTHON_VERSION_NONSUPPORTED +.if !empty(_PYTHON_VERSION_MINIMUM) && (${_PYTHON_VERSION} < ${_PYTHON_VERSION_MINIMUM}) _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 .endif # If we have an unsupported version of Python, try another. .if defined(_PYTHON_VERSION_NONSUPPORTED) -.if defined(PYTHON_VERSION) || defined(PYTHON_CMD) -IGNORE= needs Python ${_PYTHON_VERSION_NONSUPPORTED}.\ - But you specified ${_PYTHON_VERSION} -.else +WARNING+= needs Python ${_PYTHON_VERSION_NONSUPPORTED}.\ + But a port depending on this one specified ${_PYTHON_VERSION} .undef _PYTHON_VERSION -.for ver in ${PYTHON2_DEFAULT} ${PYTHON3_DEFAULT} ${_PYTHON_ALLBRANCHES} +.for ver in ${PYTHON2_DEFAULT} ${PYTHON3_DEFAULT} ${_PYTHON_VERSIONS} __VER= ${ver} .if !defined(_PYTHON_VERSION) && \ !(!empty(_PYTHON_VERSION_MINIMUM) && ( \ @@ -314,114 +412,44 @@ .endif .endfor .if !defined(_PYTHON_VERSION) -IGNORE= needs an unsupported version of Python -_PYTHON_VERSION= ${_PYTHON_PORTBRANCH} # just to avoid version sanity checking. +IGNORE= needs an unsupported version of Python .endif -.endif # defined(PYTHON_VERSION) || defined(PYTHON_CMD) .endif # defined(_PYTHON_VERSION_NONSUPPORTED) +# Pass PYTHON_VERSION down the dependency chain. This ensures that +# 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_CMD?= ${_PYTHON_CMD} -.if !defined(PYTHONBASE) -PYTHONBASE!= (${PYTHON_CMD} -c 'import sys; print(sys.prefix)' \ - 2> /dev/null || ${ECHO_CMD} ${LOCALBASE}) | ${TAIL} -1 -.endif DEPENDS_ARGS+= PYTHON_VERSION=${PYTHON_VERSION} -# We can only use the cached version if we are using the default python version. Otherwise it -# should point to some other version we have installed, according to the port USE_PYTHON -# specification -.if !defined(PYTHON_DEFAULT_PORTVERSION) || (${PYTHON_VERSION} != ${PYTHON_DEFAULT_VERSION}) -.if exists(${PYTHON_CMD}) -_PYTHON_PORTVERSION!= (${PYTHON_CMD} -c 'import sys; \ - print(sys.version.split()[0].replace("b",".b"))' 2> /dev/null) | ${TAIL} -1 -.endif -.if !defined(PYTHON_NO_DEPENDS) && !empty(_PYTHON_PORTVERSION) -PYTHON_PORTVERSION= ${_PYTHON_PORTVERSION} -.endif -.elif defined(PYTHON_DEFAULT_PORTVERSION) -PYTHON_PORTVERSION= ${PYTHON_DEFAULT_PORTVERSION} -.endif - -# Propagate the chosen python version to submakes. -.MAKEFLAGS: PYTHON_VERSION=python${_PYTHON_VERSION} - -# Python-3.4 -.if ${PYTHON_VERSION} == "python3.4" -PYTHON_PORTVERSION?= 3.4.1 -PYTHON_PORTSDIR= ${PORTSDIR}/lang/python34 -PYTHON_REL= 341 -PYTHON_SUFFIX= 34 -PYTHON_VER= 3.4 -.if exists(${PYTHON_CMD}-config) && ${PORTNAME} != python34 -PYTHON_ABIVER!= ${PYTHON_CMD}-config --abiflags -.endif - -# Python-3.3 -.elif ${PYTHON_VERSION} == "python3.3" -PYTHON_PORTVERSION?= 3.3.5 -PYTHON_PORTSDIR= ${PORTSDIR}/lang/python33 -PYTHON_REL= 335 -PYTHON_SUFFIX= 33 -PYTHON_VER= 3.3 -.if exists(${PYTHON_CMD}-config) && defined(PORTNAME) && ${PORTNAME} != python33 -PYTHON_ABIVER!= ${PYTHON_CMD}-config --abiflags -.endif - -# Python-3.2 -.elif ${PYTHON_VERSION} == "python3.2" -PYTHON_PORTVERSION?= 3.2.5 -PYTHON_PORTSDIR= ${PORTSDIR}/lang/python32 -PYTHON_REL= 325 -PYTHON_SUFFIX= 32 -PYTHON_VER= 3.2 -.if exists(${PYTHON_CMD}-config) && defined(PORTNAME) && ${PORTNAME} != python32 +# Got the correct python version, set some publicly accessible variables +PYTHON_VER= ${_PYTHON_VERSION} +PYTHON_SUFFIX= ${_PYTHON_VERSION:S/.//g} +PYTHON_MAJOR_VER= ${PYTHON_VER:R} +PYTHON_REL= # empty +PYTHON_ABIVER= # empty +PYTHON_PORTSDIR= ${_PYTHON_RELPORTDIR}${PYTHON_SUFFIX} + +# Might be overridden by calling ports +PYTHON_CMD?= ${_PYTHON_BASECMD}${_PYTHON_VERSION} +.if exists(${PYTHON_CMD}-config) && ${PYTHON_VER} != 2.7 PYTHON_ABIVER!= ${PYTHON_CMD}-config --abiflags .endif - -# Python-2.7 -.elif ${PYTHON_VERSION} == "python2.7" -PYTHON_PORTVERSION?= 2.7.8 -PYTHON_PORTSDIR= ${PORTSDIR}/lang/python27 -PYTHON_REL= 278 -PYTHON_SUFFIX= 27 -PYTHON_VER= 2.7 - -# Python versions in development -.elif defined(FORCE_PYTHON_VERSION) -PYTHON_PORTSDIR= # empty -PYTHON_NO_DEPENDS= YES -PYTHON_REL!= ${PYTHON_CMD} -c 'import sys; h = "%x" % sys.hexversion; \ - print(h[0]+h[2]+h[4])' -PYTHON_SUFFIX!= ${PYTHON_CMD} -c 'import sys; h = "%x" % sys.hexversion; \ - print(h[0]+h[2])' -PYTHON_VER!= ${PYTHON_CMD} -c 'import sys; print(sys.version[:3])' - -.else -check-makevars:: - @${ECHO} "Makefile error: bad value for PYTHON_VERSION: ${PYTHON_VERSION}." - @${ECHO} "Legal values are:" - @${ECHO} " python2.7 (default)" - @${ECHO} " python3.2" - @${ECHO} " python3.3" - @${ECHO} " python3.4" - @${FALSE} +.if exists(${PYTHON_CMD}) +PYTHON_REL!= ${PYTHON_CMD} -c \ + 'import sys; print("%d%d%d" % sys.version_info[:3])' .endif -PYTHON_MAJOR_VER= ${PYTHON_VER:R} +PYTHONBASE!= (${PYTHON_CMD} -c 'import sys; print(sys.prefix)' \ + 2> /dev/null || ${ECHO_CMD} ${LOCALBASE}) | ${TAIL} -1 -PYTHON_MASTER_SITES= ${MASTER_SITE_PYTHON} -PYTHON_MASTER_SITE_SUBDIR= ftp/python/${PYTHON_PORTVERSION:C/rc[0-9]//} -PYTHON_DISTNAME= Python-${PYTHON_PORTVERSION:S/.rc/rc/} -PYTHON_WRKSRC= ${WRKDIR}/Python-${PYTHON_PORTVERSION:S/.rc/rc/} - -PYTHON_ABIVER?= # empty -PYTHON_INCLUDEDIR= ${PYTHONBASE}/include/${PYTHON_VERSION}${PYTHON_ABIVER} -PYTHON_LIBDIR= ${PYTHONBASE}/lib/${PYTHON_VERSION} +PYTHON_INCLUDEDIR= ${PYTHONBASE}/include/${PYTHON_VERSION}${PYTHON_ABIVER} +PYTHON_LIBDIR= ${PYTHONBASE}/lib/${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_PLATFORM= ${OPSYS:tl}${OSREL:C/\.[0-9.]*//} -PYTHON_SITELIBDIR= ${PYTHON_LIBDIR}/site-packages PYTHONPREFIX_INCLUDEDIR= ${PYTHON_INCLUDEDIR:S;${PYTHONBASE};${PREFIX};} PYTHONPREFIX_LIBDIR= ${PYTHON_LIBDIR:S;${PYTHONBASE};${PREFIX};} @@ -440,24 +468,23 @@ # What makes a port 'bound' to a certain python version? # - it installs data into PYTHON_SITELIBDIR, PYTHON_INCLUDEDIR, ... # - it links against libpython*.so -# - it uses USE_PYDISTUTILS +# - it uses PYTHON_FEATURES=distutils # -PYTHON_CONCURRENT_INSTALL?= no -.if defined(NO_STAGE) && ${PYTHON_CONCURRENT_INSTALL} == "yes" -BROKEN= PYTHON_CONCURRENT_INSTALL uses USES=uniquefiles, which is not stage-safe +.if defined(NO_STAGE) && defined(_PYTHON_FEATURE_CONCURRENT) +BROKEN= PYTHON_FEATURES=concurrent uses USES=uniquefiles, which is not stage-safe .endif -.if ${PYTHON_CONCURRENT_INSTALL} == "yes" -_USES_POST+= uniquefiles:dirs +.if defined(_PYTHON_FEATURE_CONCURRENT) +_USES_POST+= uniquefiles:dirs .if ${PYTHON_VERSION} == ${PYTHON_DEFAULT_VERSION} UNIQUE_DEFAULT_LINKS= yes .else UNIQUE_DEFAULT_LINKS= no .endif -UNIQUE_PREFIX= ${PYTHON_PKGNAMEPREFIX} -UNIQUE_SUFFIX= -${PYTHON_VER} +UNIQUE_PREFIX= ${PYTHON_PKGNAMEPREFIX} +UNIQUE_SUFFIX= -${PYTHON_VER} -.if defined(PYDISTUTILS_AUTOPLIST) +.if defined(_PYTHON_FEATURE_AUTOPLIST) UNIQUE_FIND_SUFFIX_FILES= \ ${SED} -e 's|^${PREFIX}/||' ${_PYTHONPKGLIST} ${TMPPLIST} | \ ${GREP} -e '^bin/.*$$\|^sbin/.*$$\|^libexec/.*$$' @@ -465,24 +492,25 @@ UNIQUE_FIND_SUFFIX_FILES= \ ${GREP} -he '^bin/.*$$\|^sbin/.*$$\|^libexec/.*$$' ${TMPPLIST} 2>/dev/null .endif -.endif # ${PYTHON_CONCURRENT_INSTALL} == "yes" +.endif # defined(_PYTHON_FEATURE_CONCURRENT) _CURRENTPORT:= ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX} -.if defined(USE_PYDISTUTILS) && ${_CURRENTPORT:S/${PYTHON_SUFFIX}$//} != ${PYTHON_PKGNAMEPREFIX}setuptools +.if defined(_PYTHON_FEATURE_DISTUTILS) && \ + ${_CURRENTPORT:S/${PYTHON_SUFFIX}$//} != ${PYTHON_PKGNAMEPREFIX}setuptools BUILD_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}setuptools${PYTHON_SUFFIX}>0:${PORTSDIR}/devel/py-setuptools${PYTHON_SUFFIX} RUN_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}setuptools${PYTHON_SUFFIX}>0:${PORTSDIR}/devel/py-setuptools${PYTHON_SUFFIX} .endif # distutils support -PYSETUP?= setup.py +PYSETUP?= setup.py PYDISTUTILS_SETUP?= -c \ "import sys; import setuptools; \ __file__='${PYSETUP}'; sys.argv[0]='${PYSETUP}'; \ exec(compile(open(__file__, 'rb').read().replace(b'\\r\\n', b'\\n'), __file__, 'exec'))" -PYDISTUTILS_CONFIGUREARGS?= -PYDISTUTILS_BUILDARGS?= +PYDISTUTILS_CONFIGUREARGS?= # empty +PYDISTUTILS_BUILDARGS?= # empty PYDISTUTILS_INSTALLARGS?= -c -O1 --prefix=${PREFIX} -.if defined(USE_PYDISTUTILS) +.if defined(_PYTHON_FEATURE_DISTUTILS) . if !defined(PYDISTUTILS_INSTALLNOSINGLE) PYDISTUTILS_INSTALLARGS+= --single-version-externally-managed . endif @@ -499,9 +527,9 @@ PYDISTUTILS_EGGINFODIR?=${STAGEDIR}${PYTHONPREFIX_SITELIBDIR} add-plist-egginfo: -.if !defined(PYDISTUTILS_NOEGGINFO) && \ - !defined(PYDISTUTILS_AUTOPLIST) && \ - (defined(INSTALLS_EGGINFO) || defined(USE_PYDISTUTILS)) && \ +.if !defined(_PYTHON_FEATURE_NOEGGINFO) && \ + !defined(_PYTHON_FEATURE_AUTOPLIST) && \ + (defined(INSTALLS_EGGINFO) || defined(_PYTHON_FEATURE_DISTUTILS)) && \ defined(PYTHON_REL) . for egginfo in ${PYDISTUTILS_EGGINFO} if [ -d "${PYDISTUTILS_EGGINFODIR}/${egginfo}" ]; then \ @@ -515,7 +543,7 @@ @${DO_NADA} .endif -.if defined(PYDISTUTILS_AUTOPLIST) && defined(USE_PYDISTUTILS) +.if defined(_PYTHON_FEATURE_AUTOPLIST) && defined(_PYTHON_FEATURE_DISTUTILS) _RELSITELIBDIR= ${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;} _RELLIBDIR= ${PYTHONPREFIX_LIBDIR:S;${PREFIX}/;;} @@ -550,7 +578,7 @@ .endif .else -.if ${PYTHON_REL} >= 320 && defined(PYTHON_PY3K_PLIST_HACK) +.if ${PYTHON_REL} >= 320 && defined(_PYTHON_FEATURE_PY3KPLIST) # When Python version is 3.2+ we rewrite all the filenames # of TMPPLIST that end with .py[co], so that they conform # to PEP 3147 (see http://www.python.org/dev/peps/pep-3147/) @@ -566,52 +594,45 @@ pc="__pycache__" mt="$$(${PYMAGICTAG})" sp="${PYTHON_SITELIBDIR:S,${PYTHONBASE}/,,g}" \ ${TMPPLIST} > ${TMPPLIST}.pyc_tmp @${MV} ${TMPPLIST}.pyc_tmp ${TMPPLIST} -.endif # ${PYTHON_REL} >= 320 && defined(PYTHON_PY3K_PLIST_HACK) -.endif # defined(PYDISTUTILS_AUTOPLIST) && defined(USE_PYDISTUTILS) +.endif # ${PYTHON_REL} >= 320 && defined(_PYTHON_FEATURE_PY3KPLIST) +.endif # defined(_PYTHON_FEATURE_AUTOPLIST) && defined(_PYTHON_FEATURE_DISTUTILS) # Fix for programs that build python from a GNU auto* environment CONFIGURE_ENV+= PYTHON="${PYTHON_CMD}" # Python 3rd-party modules -PYGAME= ${PYTHON_PKGNAMEPREFIX}game>0:${PORTSDIR}/devel/py-game -PYNUMERIC= ${PYTHON_SITELIBDIR}/Numeric/Numeric.py:${PORTSDIR}/math/py-numeric -PYNUMPY= ${PYTHON_SITELIBDIR}/numpy/core/numeric.py:${PORTSDIR}/math/py-numpy -PYXML= ${PYTHON_SITELIBDIR}/_xmlplus/__init__.py:${PORTSDIR}/textproc/py-xml +PYGAME= ${PYTHON_PKGNAMEPREFIX}game>0:${PORTSDIR}/devel/py-game +PYNUMERIC= ${PYTHON_SITELIBDIR}/Numeric/Numeric.py:${PORTSDIR}/math/py-numeric +PYNUMPY= ${PYTHON_SITELIBDIR}/numpy/core/numeric.py:${PORTSDIR}/math/py-numpy +PYXML= ${PYTHON_SITELIBDIR}/_xmlplus/__init__.py:${PORTSDIR}/textproc/py-xml # dependencies -PYTHON_NO_DEPENDS?= NO - -.if ${PYTHON_NO_DEPENDS} == "NO" -.if defined(USE_PYTHON_BUILD) +.if defined(_PYTHON_BUILD_DEP) BUILD_DEPENDS+= ${PYTHON_CMD}:${PYTHON_PORTSDIR} .if defined(_WANTS_META_PORT) -BUILD_DEPENDS+= python${_WANTS_META_PORT}:${PORTSDIR}/lang/python${_WANTS_META_PORT} +BUILD_DEPENDS+= python${_WANTS_META_PORT}:${_PYTHON_RELPORTDIR}${_WANTS_META_PORT} .endif .endif -.if defined(USE_PYTHON_RUN) +.if defined(_PYTHON_RUN_DEP) RUN_DEPENDS+= ${PYTHON_CMD}:${PYTHON_PORTSDIR} .if defined(_WANTS_META_PORT) -RUN_DEPENDS+= python${_WANTS_META_PORT}:${PORTSDIR}/lang/python${_WANTS_META_PORT} +RUN_DEPENDS+= python${_WANTS_META_PORT}:${_PYTHON_RELPORTDIR}${_WANTS_META_PORT} .endif .endif -.endif # ${PYTHON_NO_DEPENDS} == "NO" # set $PREFIX as Python's one -.if defined(USE_PYTHON_PREFIX) -PREFIX= ${PYTHONBASE} +.if defined(_PYTHON_FEATURE_PYTHONPREFIX) +PREFIX= ${PYTHONBASE} .endif # Substitutions for pkg-plist # Use a short form of the PYTHONPREFIX_*DIR variables; we don't need the # base directory in the plist file. -PLIST_SUB+= PYTHON_INCLUDEDIR=${PYTHONPREFIX_INCLUDEDIR:S;${PREFIX}/;;} \ - PYTHON_LIBDIR=${PYTHONPREFIX_LIBDIR:S;${PREFIX}/;;} \ - PYTHON_PLATFORM=${PYTHON_PLATFORM} \ - PYTHON_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;} \ - PYTHON_VERSION=${PYTHON_VERSION} - -# XXX Hm, should I export some of the variables above to *_ENV? - +PLIST_SUB+= PYTHON_INCLUDEDIR=${PYTHONPREFIX_INCLUDEDIR:S;${PREFIX}/;;} \ + PYTHON_LIBDIR=${PYTHONPREFIX_LIBDIR:S;${PREFIX}/;;} \ + PYTHON_PLATFORM=${PYTHON_PLATFORM} \ + PYTHON_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;} \ + PYTHON_VERSION=${PYTHON_VERSION} # If multiple Python versions are installed and cmake is used, it might # happen that a cmake-enabled port using find_package(PythonLibs) and @@ -619,22 +640,22 @@ # This in turn might cause it to link against version X while using the # includes of version Y, leading to a broken port. # Enforce a certain Python version by using PYTHON_VER for cmake. - -CMAKE_ARGS+= -DPythonLibs_FIND_VERSION:STRING="${PYTHON_VER}" \ +CMAKE_ARGS+= \ + -DPythonLibs_FIND_VERSION:STRING="${PYTHON_VER}" \ -DPythonInterp_FIND_VERSION:STRING="${PYTHON_VER}" -.endif # !defined(_POSTMKINCLUDED) && !defined(Python_Pre_Include) +_USES_POST+= python +.endif # _INCLUDE_USES_UNIQUEFILES_MK -.if defined(_POSTMKINCLUDED) && !defined(Python_Post_Include) - -Python_Post_Include= bsd.python.mk +.if defined(_POSTMKINCLUDED) && !defined(_INCLUDE_USES_PYTHON_POST_MK) +_INCLUDE_USES_PYTHON_POST_MK= yes # py-distutils support PYDISTUTILS_CONFIGURE_TARGET?= config -PYDISTUTILS_BUILD_TARGET?= build +PYDISTUTILS_BUILD_TARGET?= build PYDISTUTILS_INSTALL_TARGET?= install -.if defined(USE_PYDISTUTILS) +.if defined(_PYTHON_FEATURE_DISTUTILS) LDSHARED?= ${CC} -shared MAKE_ENV+= LDSHARED="${LDSHARED}" PYTHONDONTWRITEBYTECODE= PYTHONOPTIMIZE= @@ -654,6 +675,5 @@ .endif add-plist-post: add-plist-egginfo - -.endif # defined(USE_PYDISTUTILS) -.endif # defined(_POSTMKINCLUDED) && !defined(Python_Post_Include) +.endif # defined(_PYTHON_FEATURE_DISTUTILS) +.endif # defined(_POSTMKINCLUDED) && !defined(_INCLUDE_USES_PYTHON_POST_MK) Index: Mk/bsd.port.mk =================================================================== --- Mk/bsd.port.mk +++ Mk/bsd.port.mk @@ -394,10 +394,6 @@ # USE_OCAML - If set, this port relies on the OCaml language. # Implies inclusion of bsd.ocaml.mk. (Also see # that file for more information on USE_OCAML*). -# USE_PYTHON - If set, this port relies on the Python language. -# Implies inclusion of bsd.python.mk. (Also see -# that file for more information on USE_PYTHON_* -# and USE_PYDISTUTILS). # USE_RUBY - If set, this port relies on the Ruby language. # Implies inclusion of bsd.ruby.mk. (Also see # that file for more information on USE_RUBY_*). @@ -1444,7 +1440,7 @@ .endif .if defined(USE_PYTHON) || defined(USE_PYTHON_BUILD) || defined(USE_PYTHON_RUN) -.include "${PORTSDIR}/Mk/bsd.python.mk" +USES+= python .endif .if defined(USE_EFL) || defined(WANT_EFL) || defined(USE_EFL_ESMART) @@ -1890,10 +1886,6 @@ .include "${PORTSDIR}/Mk/bsd.php.mk" .endif -.if defined(USE_PYTHON) -.include "${PORTSDIR}/Mk/bsd.python.mk" -.endif - .if defined(USE_WX) || defined(USE_WX_NOT) .include "${PORTSDIR}/Mk/bsd.wx.mk" .endif Index: Mk/bsd.python.mk =================================================================== --- Mk/bsd.python.mk +++ Mk/bsd.python.mk @@ -1,659 +0,0 @@ -# -*- tab-width: 4; -*- -# ex: ts=4 -# -# $FreeBSD$ -# - -.if !defined(_POSTMKINCLUDED) && !defined(Python_Pre_Include) - -Python_Pre_Include= bsd.python.mk -Python_Include_MAINTAINER= python@FreeBSD.org - -# This file contains some variable definitions that are supposed to -# make your life easier when dealing with ports related to the Python -# language. It's automatically included when USE_PYTHON is defined in -# the ports' makefile. If your port requires only some set of Python -# versions, you can define USE_PYTHON as [min]-[max] or min+ or -max -# or as an explicit version or as a meta port version (eg. 3.2-3.3 -# for [min]-[max], 2.7+ or -3.2 for min+ and -max, 2.7 for an -# explicit version or 3 for a meta port version). -# -# The variables: -# -# PYTHONBASE - Python port's installation prefix. -# default: ${LOCALBASE} -# -# PYTHON_CMD - Python's command line file name, including the version -# number (used for dependencies). -# default: ${PYTHONBASE}/bin/${PYTHON_VERSION} -# -# PYTHON_DISTNAME - The ${DISTNAME} for your python version. Needed for -# extensions like bsddb, gdbm, sqlite3 and tkinter, which -# are built from sources contained in the Python -# distribution. -# -# PYTHON_MASTER_SITES -# - The ${MASTER_SITES} for your python version. (You must -# use this instead of ${MASTER_SITE_PYTHON} to support -# python-devel port.) -# -# PYTHON_MASTER_SITE_SUBDIR -# - The ${MASTER_SITE_SUBDIR} for your python version. -# -# PYTHON_INCLUDEDIR - Location of the Python include files. -# default: ${PYTHONBASE}/include/${PYTHON_VERSION} -# -# PYTHON_LIBDIR - Base of the python library tree -# default: ${PYTHONBASE}/lib/${PYTHON_VERSION} -# -# PYTHON_PKGNAMEPREFIX -# - Use this as a ${PKGNAMEPREFIX} to distinguish -# packages for different Python versions. -# default: py${PYTHON_SUFFIX}- -# -# PYTHON_PKGNAMESUFFIX -# - If your port's name is more popular without `py-' -# prefix, use this as a ${PKGNAMESUFFIX} alternatively. -# default: -py${PYTHON_SUFFIX} -# -# PYTHON_PLATFORM - Python's idea of the OS release. -# XXX This is faked with ${OPSYS} and ${OSREL} until I -# find out how to delay defining a variable until after -# a certain target has been built. -# -# PYTHON_PORTSDIR - The source of your binary's port. Needed for the -# RUN_DEPENDS. -# -# PYTHON_PORTVERSION -# - Version number suitable for ${PORTVERSION}. -# -# PYTHON_REL - Version number in numerical format, to ease -# comparison in makefiles -# -# PYTHON_SITELIBDIR - Location of the site-packages tree. Don't change, -# unless you know what you do. -# default: ${PYTHON_LIBDIR}/site-packages -# -# PYTHON_SUFFIX - Yet another short version number, primarily intended -# for ${PYTHON_PKGNAMEPREFIX}. -# -# PYTHON_VERSION - Version of the python binary in your ${PATH}, in the -# format "python2.0". Set this in your makefile in case -# you want to build extensions with an older binary. -# default: depends on the version of your python binary -# -# PYTHON_VER - Version of the python binary in your ${PATH}, in the -# format "2.7". -# -# PYTHON_DEFAULT_VERSION -# - Version of the default python binary in your ${PATH}, in -# the format "python2.7". -# -# PYTHON2_DEFAULT_VERSION -# - Version of the default python2 binary in your ${PATH}, -# in the format "python2.7". -# -# PYTHON3_DEFAULT_VERSION -# - Version of the default python3 binary in your ${PATH}, -# in the format "python3.2". -# -# PYTHON_MAJOR_VER - Python version major number. 2 for python-2.x, -# 3 for python-3.x and so on. -# -# PYTHON_WRKSRC - The ${WRKSRC} for your python version. Needed for -# extensions like Tkinter, py-gdbm and py-expat, which -# are built from sources contained in the Python -# distribution. -# -# There are PREFIX-clean variants of the PYTHON_*DIR variables above. -# They are meant to be used in the installation targets. -# -# PYTHONPREFIX_INCLUDEDIR default: ${PREFIX}/include/${PYTHON_VERSION} -# PYTHONPREFIX_LIBDIR default: ${PREFIX}/lib/${PYTHON_VERSION} -# PYTHONPREFIX_SITELIBDIR default: ${PYTHONPREFIX_LIBDIR}/site-packages -# -# PYGAME - Dependency line for the Pygame library. -# -# PYNUMERIC - Dependency line for the numeric extension. -# -# PYNUMPY - Dependency line for the new numeric extension. -# py-numpy, Py-Numeric is deprecated. -# -# PYXML - Dependency line for the XML extension. As of Python-2.0, -# this extension is in the base distribution. -# -# PYTHON_CONCURRENT_INSTALL -# - Indicates that the port can be installed for different -# python versions at the same time. The port is supposed -# to use a unique prefix for certain directories using -# USES=uniquefiles:dirs (see the uniquefiles.mk Uses for -# details about the directories), if set to yes. Binaries -# receive an additional suffix, based on PYTHON_VER. -# -# The values for the uniquefiles USES are set as follows: -# -# UNIQUE_PREFIX= ${PYTHON_PKGNAMEPREFIX} -# UNIQUE_SUFFIX= -${PYTHON_VER} -# -# If the port is installed for the current default -# python version, scripts and binaries in -# -# ${PREFIX}/bin -# ${PREFIX}/sbin -# ${PREFIX}/libexec -# -# are linked from the prefixed version to the prefix-less -# original name, e.g. bin/foo-2.7 --> bin/foo. -# -# USE_PYTHON_PREFIX - Says that the port installs in ${PYTHONBASE}. -# -# USE_PYDISTUTILS - Use distutils as do-configure, do-build and do-install -# targets. -# -# PYSETUP - Name of the setup script used by the distutils package. -# default: setup.py -# -# PYDISTUTILS_AUTOPLIST -# - Automatically generates the packaging list for a port -# that uses distutils when defined. -# requires: USE_PYDISTUTILS -# -# PYTHON_PY3K_PLIST_HACK -# - Automatically generates Python 3.x compatible -# __pycache__ entries from a Python 2.x packaging list -# when defined. Use this for ports that do *not* use -# standard Python packaging mechanisms such as distutils, -# and support *both* Python 2.x and 3.x. Not needed when -# PYDISTUTILS_AUTOPLIST is defined. -# -# PYDISTUTILS_PKGNAME -# - Internal name in the distutils for egg-info. -# default: ${PORTNAME} -# -# PYDISTUTILS_PKGVERSION -# - Internal version in the distutils for egg-info. -# default: ${PORTVERSION} -# -# PYDISTUTILS_CONFIGURE_TARGET -# - Pass this command to distutils on configure stage. -# default: config -# -# PYDISTUTILS_BUILD_TARGET -# - Pass this command to distutils on build stage. -# default: build -# -# PYDISTUTILS_INSTALL_TARGET -# - Pass this command to distutils on install stage. -# default: install -# -# PYDISTUTILS_CONFIGUREARGS -# - Arguments to config with distutils. -# default: -# -# PYDISTUTILS_BUILDARGS -# - Arguments to build with distutils. -# default: -# -# PYDISTUTILS_INSTALLARGS -# - Arguments to install with distutils. -# default: -c -O1 --prefix=${PREFIX} -# -# PYDISTUTILS_EGGINFO -# - 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 -# -# PYDISTUTILS_NOEGGINFO -# - Skip an egg-info entry from plist when defined. -# - -_PYTHON_PORTBRANCH= 2.7 -_PYTHON_ALLBRANCHES= 2.7 3.4 3.3 3.2 # preferred first - -# Determine version number of Python to use -.include "${PORTSDIR}/Mk/bsd.default-versions.mk" - -.if defined(PYTHON_DEFAULT_VERSION) -WARNING+= "PYTHON_DEFAULT_VERSION is defined, consider using DEFAULT_VERSIONS=python=${PYTHON_DEFAULT_VERSION:S/^python//} instead" -.endif -.if defined(PYTHON2_DEFAULT_VERSION) -WARNING+= "PYTHON2_DEFAULT_VERSION is defined, consider using DEFAULT_VERSIONS=python2=${PYTHON2_DEFAULT_VERSION:S/^python//} instead" -.endif -.if defined(PYTHON3_DEFAULT_VERSION) -WARNING+= "PYTHON3_DEFAULT_VERSION is defined, consider using DEFAULT_VERSIONS=python3=${PYTHON3_DEFAULT_VERSION:S/^python//} instead" -.endif - -.if exists(${LOCALBASE}/bin/python) -_PYTHON_DEFAULT_VERSION!= (${LOCALBASE}/bin/python -c \ - 'import sys; print(sys.version[:3])' 2> /dev/null \ - || ${ECHO_CMD} ${_PYTHON_PORTBRANCH}) | ${TAIL} -1 -.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} -.else -PYTHON_DEFAULT_VERSION= python${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" -PYTHON2_DEFAULT_VERSION= ${PYTHON_DEFAULT_VERSION} -.else -PYTHON2_DEFAULT_VERSION?= python${PYTHON2_DEFAULT} -.endif - -.if ${PYTHON_DEFAULT_VERSION} == "python3" -PYTHON3_DEFAULT_VERSION?= python${PYTHON3_DEFAULT} -.elif ${PYTHON_DEFAULT_VERSION:R} == "python3" - PYTHON3_DEFAULT_VERSION= ${PYTHON_DEFAULT_VERSION} -.else -PYTHON3_DEFAULT_VERSION?= python${PYTHON3_DEFAULT} -.endif - -.if defined(PYTHON_VERSION) -_PYTHON_VERSION:= ${PYTHON_VERSION:S/^python//} -_PYTHON_CMD= ${LOCALBASE}/bin/${PYTHON_VERSION} -.else -_PYTHON_VERSION:= ${PYTHON_DEFAULT_VERSION:S/^python//} -_PYTHON_CMD= ${LOCALBASE}/bin/${PYTHON_DEFAULT_VERSION} -.endif - -.if !defined(USE_PYTHON) -.if defined(USE_PYTHON_BUILD) -USE_PYTHON= ${USE_PYTHON_BUILD} -.elif defined(USE_PYTHON_RUN) -USE_PYTHON= ${USE_PYTHON_RUN} -.else -USE_PYTHON= yes -.endif # defined(USE_PYTHON_BUILD) -.else -USE_PYTHON_BUILD= yes -USE_PYTHON_RUN= yes -.endif # !defined(USE_PYTHON) - -.if ${USE_PYTHON} == "2" -USE_PYTHON= ${PYTHON2_DEFAULT_VERSION:S/^python//} -_WANTS_META_PORT= 2 -.elif ${USE_PYTHON} == "3" -USE_PYTHON= ${PYTHON3_DEFAULT_VERSION:S/^python//} -_WANTS_META_PORT= 3 -.endif # ${USE_PYTHON} == "2" - -# Validate Python version whether it meets USE_PYTHON version restriction. -_PYTHON_VERSION_CHECK:= ${USE_PYTHON:C/^([1-9]\.[0-9])$/\1-\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_MAXIMUM_TMP:= ${_PYTHON_VERSION_CHECK:C/.*-([1-9]\.[0-9])/\1/} -_PYTHON_VERSION_MAXIMUM:= ${_PYTHON_VERSION_MAXIMUM_TMP:M[1-9].[0-9]} - -.if !empty(_PYTHON_VERSION_MINIMUM) && ( \ - ${_PYTHON_VERSION} < ${_PYTHON_VERSION_MINIMUM}) -_PYTHON_VERSION_NONSUPPORTED= ${_PYTHON_VERSION_MINIMUM} at least -.elif !empty(_PYTHON_VERSION_MAXIMUM) && ( \ - ${_PYTHON_VERSION} > ${_PYTHON_VERSION_MAXIMUM}) -_PYTHON_VERSION_NONSUPPORTED= ${_PYTHON_VERSION_MAXIMUM} at most -.endif - -# If we have an unsupported version of Python, try another. -.if defined(_PYTHON_VERSION_NONSUPPORTED) -.if defined(PYTHON_VERSION) || defined(PYTHON_CMD) -IGNORE= needs Python ${_PYTHON_VERSION_NONSUPPORTED}.\ - But you specified ${_PYTHON_VERSION} -.else -.undef _PYTHON_VERSION -.for ver in ${PYTHON2_DEFAULT} ${PYTHON3_DEFAULT} ${_PYTHON_ALLBRANCHES} -__VER= ${ver} -.if !defined(_PYTHON_VERSION) && \ - !(!empty(_PYTHON_VERSION_MINIMUM) && ( \ - ${__VER} < ${_PYTHON_VERSION_MINIMUM})) && \ - !(!empty(_PYTHON_VERSION_MAXIMUM) && ( \ - ${__VER} > ${_PYTHON_VERSION_MAXIMUM})) -_PYTHON_VERSION= ${ver} -_PYTHON_CMD= ${LOCALBASE}/bin/python${ver} -.endif -.endfor -.if !defined(_PYTHON_VERSION) -IGNORE= needs an unsupported version of Python -_PYTHON_VERSION= ${_PYTHON_PORTBRANCH} # just to avoid version sanity checking. -.endif -.endif # defined(PYTHON_VERSION) || defined(PYTHON_CMD) -.endif # defined(_PYTHON_VERSION_NONSUPPORTED) - -PYTHON_VERSION?= python${_PYTHON_VERSION} -PYTHON_CMD?= ${_PYTHON_CMD} -.if !defined(PYTHONBASE) -PYTHONBASE!= (${PYTHON_CMD} -c 'import sys; print(sys.prefix)' \ - 2> /dev/null || ${ECHO_CMD} ${LOCALBASE}) | ${TAIL} -1 -.endif -DEPENDS_ARGS+= PYTHON_VERSION=${PYTHON_VERSION} - -# We can only use the cached version if we are using the default python version. Otherwise it -# should point to some other version we have installed, according to the port USE_PYTHON -# specification -.if !defined(PYTHON_DEFAULT_PORTVERSION) || (${PYTHON_VERSION} != ${PYTHON_DEFAULT_VERSION}) -.if exists(${PYTHON_CMD}) -_PYTHON_PORTVERSION!= (${PYTHON_CMD} -c 'import sys; \ - print(sys.version.split()[0].replace("b",".b"))' 2> /dev/null) | ${TAIL} -1 -.endif -.if !defined(PYTHON_NO_DEPENDS) && !empty(_PYTHON_PORTVERSION) -PYTHON_PORTVERSION= ${_PYTHON_PORTVERSION} -.endif -.elif defined(PYTHON_DEFAULT_PORTVERSION) -PYTHON_PORTVERSION= ${PYTHON_DEFAULT_PORTVERSION} -.endif - -# Propagate the chosen python version to submakes. -.MAKEFLAGS: PYTHON_VERSION=python${_PYTHON_VERSION} - -# Python-3.4 -.if ${PYTHON_VERSION} == "python3.4" -PYTHON_PORTVERSION?= 3.4.1 -PYTHON_PORTSDIR= ${PORTSDIR}/lang/python34 -PYTHON_REL= 341 -PYTHON_SUFFIX= 34 -PYTHON_VER= 3.4 -.if exists(${PYTHON_CMD}-config) && ${PORTNAME} != python34 -PYTHON_ABIVER!= ${PYTHON_CMD}-config --abiflags -.endif - -# Python-3.3 -.elif ${PYTHON_VERSION} == "python3.3" -PYTHON_PORTVERSION?= 3.3.5 -PYTHON_PORTSDIR= ${PORTSDIR}/lang/python33 -PYTHON_REL= 335 -PYTHON_SUFFIX= 33 -PYTHON_VER= 3.3 -.if exists(${PYTHON_CMD}-config) && defined(PORTNAME) && ${PORTNAME} != python33 -PYTHON_ABIVER!= ${PYTHON_CMD}-config --abiflags -.endif - -# Python-3.2 -.elif ${PYTHON_VERSION} == "python3.2" -PYTHON_PORTVERSION?= 3.2.5 -PYTHON_PORTSDIR= ${PORTSDIR}/lang/python32 -PYTHON_REL= 325 -PYTHON_SUFFIX= 32 -PYTHON_VER= 3.2 -.if exists(${PYTHON_CMD}-config) && defined(PORTNAME) && ${PORTNAME} != python32 -PYTHON_ABIVER!= ${PYTHON_CMD}-config --abiflags -.endif - -# Python-2.7 -.elif ${PYTHON_VERSION} == "python2.7" -PYTHON_PORTVERSION?= 2.7.8 -PYTHON_PORTSDIR= ${PORTSDIR}/lang/python27 -PYTHON_REL= 278 -PYTHON_SUFFIX= 27 -PYTHON_VER= 2.7 - -# Python versions in development -.elif defined(FORCE_PYTHON_VERSION) -PYTHON_PORTSDIR= # empty -PYTHON_NO_DEPENDS= YES -PYTHON_REL!= ${PYTHON_CMD} -c 'import sys; h = "%x" % sys.hexversion; \ - print(h[0]+h[2]+h[4])' -PYTHON_SUFFIX!= ${PYTHON_CMD} -c 'import sys; h = "%x" % sys.hexversion; \ - print(h[0]+h[2])' -PYTHON_VER!= ${PYTHON_CMD} -c 'import sys; print(sys.version[:3])' - -.else -check-makevars:: - @${ECHO} "Makefile error: bad value for PYTHON_VERSION: ${PYTHON_VERSION}." - @${ECHO} "Legal values are:" - @${ECHO} " python2.7 (default)" - @${ECHO} " python3.2" - @${ECHO} " python3.3" - @${ECHO} " python3.4" - @${FALSE} -.endif - -PYTHON_MAJOR_VER= ${PYTHON_VER:R} - -PYTHON_MASTER_SITES= ${MASTER_SITE_PYTHON} -PYTHON_MASTER_SITE_SUBDIR= ftp/python/${PYTHON_PORTVERSION:C/rc[0-9]//} -PYTHON_DISTNAME= Python-${PYTHON_PORTVERSION:S/.rc/rc/} -PYTHON_WRKSRC= ${WRKDIR}/Python-${PYTHON_PORTVERSION:S/.rc/rc/} - -PYTHON_ABIVER?= # empty -PYTHON_INCLUDEDIR= ${PYTHONBASE}/include/${PYTHON_VERSION}${PYTHON_ABIVER} -PYTHON_LIBDIR= ${PYTHONBASE}/lib/${PYTHON_VERSION} -PYTHON_PKGNAMEPREFIX= py${PYTHON_SUFFIX}- -PYTHON_PKGNAMESUFFIX= -py${PYTHON_SUFFIX} -PYTHON_PLATFORM= ${OPSYS:tl}${OSREL:C/\.[0-9.]*//} -PYTHON_SITELIBDIR= ${PYTHON_LIBDIR}/site-packages - -PYTHONPREFIX_INCLUDEDIR= ${PYTHON_INCLUDEDIR:S;${PYTHONBASE};${PREFIX};} -PYTHONPREFIX_LIBDIR= ${PYTHON_LIBDIR:S;${PYTHONBASE};${PREFIX};} -PYTHONPREFIX_SITELIBDIR= ${PYTHON_SITELIBDIR:S;${PYTHONBASE};${PREFIX};} - -# Used for recording the installed files. -_PYTHONPKGLIST= ${WRKDIR}/.PLIST.pymodtmp - -# Ports bound to a certain python version SHOULD -# - use the PYTHON_PKGNAMEPREFIX -# - use directories using the PYTHON_PKGNAMEPREFIX -# - install binaries using the required PYTHON_VER, with -# the default python version creating a symlink to the original binary -# name (for staging-aware ports). -# -# What makes a port 'bound' to a certain python version? -# - it installs data into PYTHON_SITELIBDIR, PYTHON_INCLUDEDIR, ... -# - it links against libpython*.so -# - it uses USE_PYDISTUTILS -# -PYTHON_CONCURRENT_INSTALL?= no -.if defined(NO_STAGE) && ${PYTHON_CONCURRENT_INSTALL} == "yes" -BROKEN= PYTHON_CONCURRENT_INSTALL uses USES=uniquefiles, which is not stage-safe -.endif - -.if ${PYTHON_CONCURRENT_INSTALL} == "yes" -_USES_POST+= uniquefiles:dirs -.if ${PYTHON_VERSION} == ${PYTHON_DEFAULT_VERSION} -UNIQUE_DEFAULT_LINKS= yes -.else -UNIQUE_DEFAULT_LINKS= no -.endif -UNIQUE_PREFIX= ${PYTHON_PKGNAMEPREFIX} -UNIQUE_SUFFIX= -${PYTHON_VER} - -.if defined(PYDISTUTILS_AUTOPLIST) -UNIQUE_FIND_SUFFIX_FILES= \ - ${SED} -e 's|^${PREFIX}/||' ${_PYTHONPKGLIST} ${TMPPLIST} | \ - ${GREP} -e '^bin/.*$$\|^sbin/.*$$\|^libexec/.*$$' -.else -UNIQUE_FIND_SUFFIX_FILES= \ - ${GREP} -he '^bin/.*$$\|^sbin/.*$$\|^libexec/.*$$' ${TMPPLIST} 2>/dev/null -.endif -.endif # ${PYTHON_CONCURRENT_INSTALL} == "yes" - -_CURRENTPORT:= ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX} -.if defined(USE_PYDISTUTILS) && ${_CURRENTPORT:S/${PYTHON_SUFFIX}$//} != ${PYTHON_PKGNAMEPREFIX}setuptools -BUILD_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}setuptools${PYTHON_SUFFIX}>0:${PORTSDIR}/devel/py-setuptools${PYTHON_SUFFIX} -RUN_DEPENDS+= ${PYTHON_PKGNAMEPREFIX}setuptools${PYTHON_SUFFIX}>0:${PORTSDIR}/devel/py-setuptools${PYTHON_SUFFIX} -.endif - -# distutils support -PYSETUP?= setup.py -PYDISTUTILS_SETUP?= -c \ - "import sys; import setuptools; \ - __file__='${PYSETUP}'; sys.argv[0]='${PYSETUP}'; \ - exec(compile(open(__file__, 'rb').read().replace(b'\\r\\n', b'\\n'), __file__, 'exec'))" -PYDISTUTILS_CONFIGUREARGS?= -PYDISTUTILS_BUILDARGS?= -PYDISTUTILS_INSTALLARGS?= -c -O1 --prefix=${PREFIX} -.if defined(USE_PYDISTUTILS) -. if !defined(PYDISTUTILS_INSTALLNOSINGLE) -PYDISTUTILS_INSTALLARGS+= --single-version-externally-managed -. endif -. if !defined(NO_STAGE) -PYDISTUTILS_INSTALLARGS+= --root=${STAGEDIR} -. endif -.endif -PYDISTUTILS_INSTALLARGS:= --record ${_PYTHONPKGLIST} \ - ${PYDISTUTILS_INSTALLARGS} - -PYDISTUTILS_PKGNAME?= ${PORTNAME} -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_EGGINFODIR?=${STAGEDIR}${PYTHONPREFIX_SITELIBDIR} - -add-plist-egginfo: -.if !defined(PYDISTUTILS_NOEGGINFO) && \ - !defined(PYDISTUTILS_AUTOPLIST) && \ - (defined(INSTALLS_EGGINFO) || defined(USE_PYDISTUTILS)) && \ - defined(PYTHON_REL) -. for egginfo in ${PYDISTUTILS_EGGINFO} - if [ -d "${PYDISTUTILS_EGGINFODIR}/${egginfo}" ]; then \ - ${LS} ${PYDISTUTILS_EGGINFODIR}/${egginfo} | while read f; do \ - ${ECHO_CMD} ${PYDISTUTILS_EGGINFODIR:S;^${STAGEDIR}${PYTHONBASE}/;;}/${egginfo}/$${f} >> ${TMPPLIST}; \ - done; \ - ${ECHO_CMD} "@dirrmtry ${PYDISTUTILS_EGGINFODIR:S;${STAGEDIR}${PYTHONBASE}/;;}/${egginfo}" >> ${TMPPLIST}; \ - fi; -. endfor -.else - @${DO_NADA} -.endif - -.if defined(PYDISTUTILS_AUTOPLIST) && defined(USE_PYDISTUTILS) -_RELSITELIBDIR= ${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;} -_RELLIBDIR= ${PYTHONPREFIX_LIBDIR:S;${PREFIX}/;;} - -add-plist-post: add-plist-pymod -add-plist-pymod: - @{ ${ECHO_CMD} "#mtree"; ${CAT} ${MTREE_FILE}; } | ${TAR} tf - | \ - ${SED} '/^\.$$/d' > ${WRKDIR}/.localmtree - @${ECHO_CMD} "${_RELSITELIBDIR}" >> ${WRKDIR}/.localmtree - @${ECHO_CMD} "${_RELLIBDIR}" >> ${WRKDIR}/.localmtree - @${SED} -e 's|^${STAGEDIR}${PREFIX}/||' \ - -e 's|^${PREFIX}/||' \ - -e 's|^\(man/.*man[0-9]\)/\(.*\.[0-9]\)$$|\1/\2${MANEXT}|' \ - ${_PYTHONPKGLIST} | ${SORT} >> ${TMPPLIST} - @${SED} -e 's|^${STAGEDIR}${PREFIX}/\(.*\)/\(.*\)|\1|' \ - -e 's|^${PREFIX}/\(.*\)/\(.*\)|\1|' ${_PYTHONPKGLIST} | \ - ${AWK} '{ num = split($$0, a, "/"); res=""; \ - for(i = 1; i <= num; ++i) { \ - if (i == 1) res = a[i]; \ - else res = res "/" a[i]; \ - print res; \ - } \ - }' | \ - while read line; do \ - ${GREP} -qw "^$${line}$$" ${WRKDIR}/.localmtree || { \ - [ -n "$${line}" ] && \ - ${ECHO_CMD} "@dirrmtry $${line}"; \ - }; \ - done | ${SORT} | uniq | ${SORT} -r >> ${TMPPLIST} -.if ${PREFIX} != ${LOCALBASE} - @${ECHO_CMD} "@dirrmtry ${PYTHON_SITELIBDIR:S;${PYTHONBASE}/;;}" >> ${TMPPLIST} - @${ECHO_CMD} "@dirrmtry ${PYTHON_LIBDIR:S;${PYTHONBASE}/;;}" >> ${TMPPLIST} -.endif - -.else -.if ${PYTHON_REL} >= 320 && defined(PYTHON_PY3K_PLIST_HACK) -# When Python version is 3.2+ we rewrite all the filenames -# of TMPPLIST that end with .py[co], so that they conform -# to PEP 3147 (see http://www.python.org/dev/peps/pep-3147/) -PYMAGICTAG= ${PYTHON_CMD} -c 'import imp; print(imp.get_tag())' -add-plist-post: - @${AWK} '\ - /\.py[co]$$/ && !($$0 ~ "/" pc "/") {id = match($$0, /\/[^\/]+\.py[co]$$/); if (id != 0) {d = substr($$0, 1, RSTART - 1); dirs[d] = 1}; sub(/\.py[co]$$/, "." mt "&"); sub(/[^\/]+\.py[co]$$/, pc "/&"); print; 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} \ - {print} \ - END {if (sp in dirs) {print "@dirrm " sp "/" pc}} \ - ' \ - pc="__pycache__" mt="$$(${PYMAGICTAG})" sp="${PYTHON_SITELIBDIR:S,${PYTHONBASE}/,,g}" \ - ${TMPPLIST} > ${TMPPLIST}.pyc_tmp - @${MV} ${TMPPLIST}.pyc_tmp ${TMPPLIST} -.endif # ${PYTHON_REL} >= 320 && defined(PYTHON_PY3K_PLIST_HACK) -.endif # defined(PYDISTUTILS_AUTOPLIST) && defined(USE_PYDISTUTILS) - -# Fix for programs that build python from a GNU auto* environment -CONFIGURE_ENV+= PYTHON="${PYTHON_CMD}" - -# Python 3rd-party modules -PYGAME= ${PYTHON_PKGNAMEPREFIX}game>0:${PORTSDIR}/devel/py-game -PYNUMERIC= ${PYTHON_SITELIBDIR}/Numeric/Numeric.py:${PORTSDIR}/math/py-numeric -PYNUMPY= ${PYTHON_SITELIBDIR}/numpy/core/numeric.py:${PORTSDIR}/math/py-numpy -PYXML= ${PYTHON_SITELIBDIR}/_xmlplus/__init__.py:${PORTSDIR}/textproc/py-xml - -# dependencies -PYTHON_NO_DEPENDS?= NO - -.if ${PYTHON_NO_DEPENDS} == "NO" -.if defined(USE_PYTHON_BUILD) -BUILD_DEPENDS+= ${PYTHON_CMD}:${PYTHON_PORTSDIR} -.if defined(_WANTS_META_PORT) -BUILD_DEPENDS+= python${_WANTS_META_PORT}:${PORTSDIR}/lang/python${_WANTS_META_PORT} -.endif -.endif -.if defined(USE_PYTHON_RUN) -RUN_DEPENDS+= ${PYTHON_CMD}:${PYTHON_PORTSDIR} -.if defined(_WANTS_META_PORT) -RUN_DEPENDS+= python${_WANTS_META_PORT}:${PORTSDIR}/lang/python${_WANTS_META_PORT} -.endif -.endif -.endif # ${PYTHON_NO_DEPENDS} == "NO" - -# set $PREFIX as Python's one -.if defined(USE_PYTHON_PREFIX) -PREFIX= ${PYTHONBASE} -.endif - -# Substitutions for pkg-plist -# Use a short form of the PYTHONPREFIX_*DIR variables; we don't need the -# base directory in the plist file. -PLIST_SUB+= PYTHON_INCLUDEDIR=${PYTHONPREFIX_INCLUDEDIR:S;${PREFIX}/;;} \ - PYTHON_LIBDIR=${PYTHONPREFIX_LIBDIR:S;${PREFIX}/;;} \ - PYTHON_PLATFORM=${PYTHON_PLATFORM} \ - PYTHON_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;} \ - PYTHON_VERSION=${PYTHON_VERSION} - -# XXX Hm, should I export some of the variables above to *_ENV? - - -# If multiple Python versions are installed and cmake is used, it might -# happen that a cmake-enabled port using find_package(PythonLibs) and -# find_package(PythonInterp) detects different Python versions. -# This in turn might cause it to link against version X while using the -# includes of version Y, leading to a broken port. -# Enforce a certain Python version by using PYTHON_VER for cmake. - -CMAKE_ARGS+= -DPythonLibs_FIND_VERSION:STRING="${PYTHON_VER}" \ - -DPythonInterp_FIND_VERSION:STRING="${PYTHON_VER}" - -.endif # !defined(_POSTMKINCLUDED) && !defined(Python_Pre_Include) - -.if defined(_POSTMKINCLUDED) && !defined(Python_Post_Include) - -Python_Post_Include= bsd.python.mk - -# py-distutils support -PYDISTUTILS_CONFIGURE_TARGET?= config -PYDISTUTILS_BUILD_TARGET?= build -PYDISTUTILS_INSTALL_TARGET?= install - -.if defined(USE_PYDISTUTILS) -LDSHARED?= ${CC} -shared -MAKE_ENV+= LDSHARED="${LDSHARED}" PYTHONDONTWRITEBYTECODE= PYTHONOPTIMIZE= - -.if !target(do-configure) && !defined(HAS_CONFIGURE) && !defined(GNU_CONFIGURE) -do-configure: - @(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYDISTUTILS_SETUP} ${PYDISTUTILS_CONFIGURE_TARGET} ${PYDISTUTILS_CONFIGUREARGS}) -.endif - -.if !target(do-build) -do-build: - @(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYDISTUTILS_SETUP} ${PYDISTUTILS_BUILD_TARGET} ${PYDISTUTILS_BUILDARGS}) -.endif - -.if !target(do-install) -do-install: - @(cd ${INSTALL_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYDISTUTILS_SETUP} ${PYDISTUTILS_INSTALL_TARGET} ${PYDISTUTILS_INSTALLARGS}) -.endif - -add-plist-post: add-plist-egginfo - -.endif # defined(USE_PYDISTUTILS) -.endif # defined(_POSTMKINCLUDED) && !defined(Python_Post_Include) Index: Mk/bsd.sanity.mk =================================================================== --- Mk/bsd.sanity.mk +++ Mk/bsd.sanity.mk @@ -118,11 +118,39 @@ DEV_WARNING+= "USE_GNOME=ltverhack is deprecated, please use USES=libtool" .endif +.if defined(USE_PYTHON) +.if ${USE_PYTHON} != "yes" +DEV_WARNING+= "USE_PYTHON is deprecated, please use USES=python:${USE_PYTHON}" +.else +DEV_WARNING+= "USE_PYTHON is deprecated, please use USES=python" +.endif +.endif +.if defined(USE_PYTHON_RUN) +.if ${USE_PYTHON_RUN} != "yes" +DEV_WARNING+= "USE_PYTHON_RUN is deprecated, please use USES=python:${USE_PYTHON_RUN},run" +.else +DEV_WARNING+= "USE_PYTHON_RUN is deprecated, please use USES=python:run" +.endif +.endif +.if defined(USE_PYTHON_BUILD) +.if ${USE_PYTHON_BUILD} != "yes" +DEV_WARNING+= "USE_PYTHON_BUILD is deprecated, please use USES=python:${USE_PYTHON_BUILD},build" +.else +DEV_WARNING+= "USE_PYTHON_BUILD is deprecated, please use USES=python:build" +.endif +.endif + +.if defined(PYDISTUTILS_INSTALLNOSINGLE) +DEV_WARNING+= "PYDISTUTILS_INSTALLNOSINGLE is deprecated, please do not use it anymore" +.endif + SANITY_UNSUPPORTED= USE_OPENAL USE_FAM USE_MAKESELF USE_ZIP USE_LHA USE_CMAKE \ USE_READLINE USE_ICONV PERL_CONFIGURE PERL_MODBUILD \ USE_PERL5_BUILD USE_PERL5_RUN USE_DISPLAY USE_FUSE \ USE_GETTEXT USE_GMAKE USE_SCONS USE_DRUPAL -SANITY_DEPRECATED= USE_XZ USE_BZIP2 +SANITY_DEPRECATED= USE_XZ USE_BZIP2 USE_PYDISTUTILS PYTHON_CONCURRENT_INSTALL \ + PYDISTUTILS_AUTOPLIST PYTHON_PY3K_PLIST_HACK PYDISTUTILS_NOEGGINFO \ + PYTHON_MASTER_SITES USE_PYTHON_PREFIX PYTHON_PKGNAMESUFFIX USE_OPENAL_ALT= USES=openal USE_FAM_ALT= USES=fam @@ -144,6 +172,14 @@ USE_GETTEXT_ALT= USES=gettext USE_SCONS_ALT= USES=scons USE_DRUPAL_ALT= USES=drupal +USE_PYDISTUTILS_ALT= PYTHON_FEATURES=distutils +PYTHON_CONCURRENT_INSTALL_ALT= PYTHON_FEATURES=concurrent +PYDISTUTILS_AUTOPLIST_ALT= PYTHON_FEATURES=autoplist +PYTHON_PY3K_PLIST_HACK_ALT= PYTHON_FEATURES=py3kplist +PYDISTUTILS_NOEGGINFO_ALT= PYTHON_FEATURES=noegginfo +USE_PYTHON_PREFIX_ALT= PYTHON_FEATURES=pythonprefix +PYTHON_PKGNAMESUFFIX_ALT= PYTHON_PKGNAMEPREFIX +PYTHON_MASTER_SITES_ALT= MASTER_SITE_PYTHON .for a in ${SANITY_DEPRECATED} .if defined(${a})