svn commit: r364450 - in head: . Mk Mk/Uses audio/rhythmbox biology/libsbml databases/ldb databases/metakit databases/ntdb databases/py-bsddb databases/py-gdbm databases/py-sqlite3 databases/rrdtoo...

Marcus von Appen mva at FreeBSD.org
Sat Aug 9 15:44:28 UTC 2014


Author: mva
Date: Sat Aug  9 15:44:27 2014
New Revision: 364450
URL: http://svnweb.freebsd.org/changeset/ports/364450
QAT: https://qat.redports.org/buildarchive/r364450/

Log:
  Convert the Python framework bits to USES=python.
  
  Please use USES=python instead of USE_PYTHON.
  
    USE_PYTHON=yes becomes USES=python
    USE_PYTHON=2.7+ becomes USES=python:2.7+
    USE_PYTHON_BUILD=3.3 becomes USES=python:3.3,build
    ...
  
  A new PYTHON_FEATURES variable was added, which enables certain features for a
  port and replaces some knobs at the same time;
  
    PYTHON_FEATURES=distutils replaces USE_PYDISTUTILS
    PYTHON_FEATURES=autoplist replaces PYDISTUTILS_AUTOPLIST
    PYTHON_FEATURES=py3kplist replaces PYTHON_PY3K_PLIST_HACK
    PYTHON_FEATURES=noegginfo replaces PYDISTUTILS_NOEGGINFO
    PYTHON_FEATURES=concurrent replaces PYTHON_CONCURRENT_INSTALL
    PYTHON_FEATURES=pythonprefix replaces USE_PYTHON_PREFIX
  
  Some knobs have been deprecated and are to be removed in the near future:
  
    PYTHON_MASTER_SITES - use MASTER_SITE_PYTHON instead
    PYTHON_PKGNAMESUFFIX - use PYTHON_PKGNAMEPREFIX instead
    PYDISTUTILS_INSTALLNOSINGLE - deprecated without replacement
  
  Some knobs have been removed completely:
  
    PYTHON_MASTER_SITE_SUBDIR
    PYTHON_DISTNAME
    PYTHON_WRKSRC
  
  Several variables specific to the Python framework are no longer passed to the
  build environment to avoid polluting dependency builds.
  
    PYTHON_VERSION is not passed to .MAKEFLAGS anymore
    PYTHON_DEFAULT_VERSION,
    PYTHON_DEFAULT_PORTVERSION and
    PYTHONBASE are not passed to the make environment anymore
  
  The conversion required a couple of ports to be updated to fit the changes and
  new requirements. Those included "bsd.python.mk" directly or contained checks
  in places, for which the USES framework would fail to provide correct values.
  
  Python modules directly using the upstream Python package (such as py-tkinter
  or py-sqlite3) were updated to avoid using the now unnecessary and remmoved
  knobs from "bsd.python.mk".
  
  Phabric:	D399
  exp-run:	167368 192357
  PR:		167368 192357
  Reviewed by:	antoine, wg
  Exp-run award:	antoine
  With hat:	python@
  Approved by:	portmgr

Added:
  head/Mk/Uses/python.mk
     - copied, changed from r364445, head/Mk/bsd.python.mk
Deleted:
  head/Mk/bsd.python.mk
Modified:
  head/CHANGES
  head/Mk/bsd.port.mk
  head/Mk/bsd.port.subdir.mk
  head/Mk/bsd.sanity.mk
  head/Mk/bsd.sites.mk
  head/audio/rhythmbox/Makefile
  head/biology/libsbml/Makefile
  head/databases/ldb/Makefile
  head/databases/metakit/Makefile
  head/databases/ntdb/Makefile
  head/databases/py-bsddb/Makefile
  head/databases/py-gdbm/Makefile
  head/databases/py-sqlite3/Makefile
  head/databases/rrdtool/Makefile
  head/databases/rrdtool12/Makefile
  head/databases/tdb/Makefile
  head/devel/py-checkmanifest/Makefile
  head/devel/py-gobject3/pkg-plist
  head/devel/pygobject3-common/Makefile
  head/devel/talloc/Makefile
  head/devel/tevent/Makefile
  head/editors/gedit/Makefile
  head/japanese/libtomoe-gtk/Makefile
  head/multimedia/libkate/Makefile
  head/security/libpreludedb/Makefile
  head/textproc/py2html/Makefile
  head/textproc/py2html/pkg-plist
  head/x11-toolkits/py-tkinter/Makefile
  head/x11/gnome-applets/Makefile

Modified: head/CHANGES
==============================================================================
--- head/CHANGES	Sat Aug  9 15:21:49 2014	(r364449)
+++ head/CHANGES	Sat Aug  9 15:44:27 2014	(r364450)
@@ -10,6 +10,29 @@ in the release notes and/or placed into 
 
 All ports committers are allowed to commit to this file.
 
+20140809:
+AUTHOR: mva at FreeBSD.org
+
+  The Python language bits of the poorts framework have been converted
+  to USES. Instead of USE_PYTHON, please use USES=python instead.
+
+    USE_PYTHON=yes becomes USES=python
+    USE_PYTHON=2.7+ becomes USES=python:2.7+
+    USE_PYTHON_BUILD=3.3 becomes USES=python:3.3,build
+    ...
+
+  Additionally, several Python specific feeatures have been converted
+  to USES-inspired PYTHON_FEATURES=<featureA>,<featureB>.
+
+    USE_PYDISTUTILS becomes PYTHON_FEATURES=distutils
+    PYDISTUTILS_AUTOPLIST becomes PYTHON_FEATURES=autoplist
+    ...
+
+  Please read the header comments of Uses/python.mk for more details
+  about the new and changed bits and pieces. You will find a list of
+  deprecated variables and how to replace them in your own ports at
+  the end of the header comment.
+
 20140715:
 AUTHOR: bapt at FreeBSD.org
 

Copied and modified: head/Mk/Uses/python.mk (from r364445, head/Mk/bsd.python.mk)
==============================================================================
--- head/Mk/bsd.python.mk	Sat Aug  9 14:53:00 2014	(r364445, copy source)
+++ head/Mk/Uses/python.mk	Sat Aug  9 15:44:27 2014	(r364450)
@@ -1,213 +1,313 @@
-# -*- tab-width: 4; -*-
-# ex: ts=4
-#
 # $FreeBSD$
 #
-
-.if !defined(_POSTMKINCLUDED) && !defined(Python_Pre_Include)
-
-Python_Pre_Include=		bsd.python.mk
-Python_Include_MAINTAINER=	python at 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.
+# 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:	<version>, 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, if PYTHON_FEATURES=autoplist is set.
+#
+#	pythonprefix	- Says that the port installs in ${PYTHONBASE} instead
+#			  of ${PREFIX}.
+#
+#	noegginfo	- Skip an egg-info entry from plist, if 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
 #
-# 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_PKGNAME
+#			- Internal name in the distutils for egg-info.
+#			  default: ${PORTNAME}
 #
-# PYTHON_MASTER_SITE_SUBDIR
-#					- The ${MASTER_SITE_SUBDIR} for your python version.
+# PYDISTUTILS_PKGVERSION
+#			- Internal version in the distutils for egg-info.
+#			  default: ${PORTVERSION}
 #
-# PYTHON_INCLUDEDIR	- Location of the Python include files.
-#					  default: ${PYTHONBASE}/include/${PYTHON_VERSION}
+# PYDISTUTILS_CONFIGURE_TARGET
+#			- Pass this command to distutils on configure stage.
+#			  default: config
 #
-# PYTHON_LIBDIR		- Base of the python library tree
-#					  default: ${PYTHONBASE}/lib/${PYTHON_VERSION}
+# PYDISTUTILS_BUILD_TARGET
+#			- Pass this command to distutils on build stage.
+#			  default: build
 #
-# PYTHON_PKGNAMEPREFIX
-#					- Use this as a ${PKGNAMEPREFIX} to distinguish
-#					  packages for different Python versions.
-#					  default: py${PYTHON_SUFFIX}-
+# PYDISTUTILS_INSTALL_TARGET
+#			- Pass this command to distutils on install stage.
+#			  default: install
 #
-# PYTHON_PKGNAMESUFFIX
-#					- If your port's name is more popular without `py-'
-#					  prefix, use this as a ${PKGNAMESUFFIX} alternatively.
-#					  default: -py${PYTHON_SUFFIX}
+# PYDISTUTILS_CONFIGUREARGS
+#			- Arguments to config with distutils.
+#			  default: <empty>
 #
-# 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.
+# PYDISTUTILS_BUILDARGS
+#			- Arguments to build with distutils.
+#			  default: <empty>
 #
-# PYTHON_PORTSDIR	- The source of your binary's port. Needed for the
-#					  RUN_DEPENDS.
+# PYDISTUTILS_INSTALLARGS
+#			- Arguments to install with distutils.
+#			  default: -c -O1 --prefix=${PREFIX} --single-version-externally-managed --root=${STAGEDIR}
 #
-# PYTHON_PORTVERSION
-#					- Version number suitable for ${PORTVERSION}.
+# 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_REL		- Version number in numerical format, to ease
-#					  comparison in makefiles
+# The following variables can be read by ports and must not be modified:
 #
-# PYTHON_SITELIBDIR	- Location of the site-packages tree. Don't change,
-#					  unless you know what you do.
-#					  default: ${PYTHON_LIBDIR}/site-packages
+# PYTHONBASE		- The installation prefix of the chosen Python
+#			  interpreter, e.g. /usr/local
+#
+# PYTHON_PORTVERSION
+#			- Version number suitable for ${PORTVERSION}.
 #
-# PYTHON_SUFFIX		- Yet another short version number, primarily intended
-#					  for ${PYTHON_PKGNAMEPREFIX}.
+# PYTHON_PORTSDIR	- The port directory of the chosen Python interpreter
 #
-# 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_REL		- The release number of the chosen Python interpreter
+#			  without dots, e.g. 276, 341, ...
 #
-# PYTHON_VER		- Version of the python binary in your ${PATH}, in the
-#					  format "2.7".
+# PYTHON_SUFFIX		- The major-minor release number of the chosen Python
+#			  interpreter without dots, e.g. 27, 34, ...
+#			  Used for prefixes and suffixes.
 #
-# PYTHON_DEFAULT_VERSION
-#					- Version of the default python binary in your ${PATH}, in
-#					  the format "python2.7".
+# PYTHON_MAJOR_VER	- The major release version of the chosen Python
+#			  interpreter, e.g. 2, 3, ...
 #
-# PYTHON2_DEFAULT_VERSION
-#					- Version of the default python2 binary in your ${PATH},
-#					  in the format "python2.7".
+# PYTHON_VER		- The major-minor release version of the chosen Python
+#			  interpreter, e.g. 2.7, 3.4, ...
 #
-# PYTHON3_DEFAULT_VERSION
-#					- Version of the default python3 binary in your ${PATH},
-#					  in the format "python3.2".
+# PYTHON_ABIVER		- Additional ABI flags set by the chosen Python
+#			  interpreter, e.g. md
 #
-# PYTHON_MAJOR_VER	- Python version major number. 2 for python-2.x,
-#					  3 for python-3.x and so on.
+# 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_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.
-#
-# PYDISTUTILS_PKGNAME
-#					- Internal name in the distutils for egg-info.
-#					  default: ${PORTNAME}
+#			- Deprecated, use PYTHON_FEATURES=py3kplist instead
 #
-# 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: <empty>
+# 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: <empty>
+# PYTHON_PKGNAMESUFFIX
+#			- Deprecated, use PYTHON_PKGNAMEPREFIX instead
+#			  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 at FreeBSD.org
+
+.if !defined(_INCLUDE_USES_PYTHON_MK)
+_INCLUDE_USES_PYTHON_MK=	yes
 
-_PYTHON_PORTBRANCH=		2.7
-_PYTHON_ALLBRANCHES=	2.7 3.4 3.3 3.2	# preferred first
+# 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_<FEATURENAME>
+.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 @@ WARNING+=	"PYTHON3_DEFAULT_VERSION is de
 
 .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" % sys.version_info[:2])' 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 @@ PYTHON2_DEFAULT_VERSION=	${PYTHON_DEFAUL
 .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,56 @@ PYTHON3_DEFAULT_VERSION?=	python${PYTHON
 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 +411,42 @@ _PYTHON_CMD=		${LOCALBASE}/bin/python${v
 .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) && defined(PORTNAME) && ${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}
+PYTHON_PORTVERSION!=	${MAKE} -V PORTVERSION -C ${PYTHON_PORTSDIR}
+PYTHON_REL=		${PYTHON_PORTVERSION:S/.//g}
+
+# 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])'
+PYTHONBASE!=	(${PYTHON_CMD} -c 'import sys; print(sys.prefix)' \
+			2> /dev/null || ${ECHO_CMD} ${LOCALBASE}) | ${TAIL} -1
 
-.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_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 +465,23 @@ _PYTHONPKGLIST=	${WRKDIR}/.PLIST.pymodtm
 # 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 +489,25 @@ UNIQUE_FIND_SUFFIX_FILES=	\
 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 +524,9 @@ PYDISTUTILS_EGGINFO?=	${PYDISTUTILS_PKGN
 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 +540,7 @@ add-plist-egginfo:
 	@${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 +575,7 @@ add-plist-pymod:
 .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 +591,45 @@ add-plist-post:
 		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 +637,22 @@ PLIST_SUB+=		PYTHON_INCLUDEDIR=${PYTHONP
 # 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_PYTHON_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 +672,5 @@ do-install:
 .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)

Modified: head/Mk/bsd.port.mk
==============================================================================
--- head/Mk/bsd.port.mk	Sat Aug  9 15:21:49 2014	(r364449)
+++ head/Mk/bsd.port.mk	Sat Aug  9 15:44:27 2014	(r364450)
@@ -394,10 +394,6 @@ FreeBSD_MAINTAINER=	portmgr at FreeBSD.org
 # 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 @@ PKGCOMPATDIR?=		${LOCALBASE}/lib/compat/
 .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 @@ IGNORE=	Do not define STAGEDIR in comman
 .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

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-ports-head mailing list