[Midnightbsd-cvs] mports [20238] trunk/Mk/extensions/python.mk: update python extension to act more like FreeBSD to ease porting code.
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Sun Sep 13 08:42:38 EDT 2015
Revision: 20238
http://svnweb.midnightbsd.org/mports/?rev=20238
Author: laffer1
Date: 2015-09-13 08:42:37 -0400 (Sun, 13 Sep 2015)
Log Message:
-----------
update python extension to act more like FreeBSD to ease porting code.
Modified Paths:
--------------
trunk/Mk/extensions/python.mk
Modified: trunk/Mk/extensions/python.mk
===================================================================
--- trunk/Mk/extensions/python.mk 2015-09-13 11:02:56 UTC (rev 20237)
+++ trunk/Mk/extensions/python.mk 2015-09-13 12:42:37 UTC (rev 20238)
@@ -8,9 +8,211 @@
# 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. PYTHON_NO_DEPENDS can be set to not add any dependencies.
+#
+# 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:
+#
+# USE_PYTHON - 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 USE_PYTHON=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
+#
+# 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: <empty>
+#
+# PYDISTUTILS_BUILDARGS
+# - Arguments to build with distutils.
+# default: <empty>
+#
+# PYDISTUTILS_INSTALLARGS
+# - Arguments to install with distutils.
+# default: -c -O1 --prefix=${PREFIX} --single-version-externally-managed --root=${STAGEDIR}
+#
+# 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
+#
+# The following variables can be read by ports and must not be modified:
+#
+# PYTHONBASE - The installation prefix of the chosen Python
+# interpreter, e.g. /usr/local
+#
+# PYTHON_PORTVERSION
+# - Version number suitable for ${PORTVERSION}.
+#
+# PYTHON_PORTSDIR - The port directory of the chosen Python interpreter
+#
+# PYTHON_REL - The release number of the chosen Python interpreter
+# without dots, e.g. 2706, 3401, ...
+#
+# PYTHON_SUFFIX - The major-minor release number of the chosen Python
+# interpreter without dots, e.g. 27, 34, ...
+# Used for prefixes and suffixes.
+#
+# PYTHON_MAJOR_VER - The major release version of the chosen Python
+# interpreter, e.g. 2, 3, ...
+#
+# PYTHON_VER - The major-minor release version of the chosen Python
+# interpreter, e.g. 2.7, 3.4, ...
+#
+# PYTHON_ABIVER - Additional ABI flags set by the chosen Python
+# interpreter, e.g. md
+#
+# 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_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 by ports instead of the above variables, so the
+# ports respect ${PREFIX} (unless USE_PYTHON=pythonprefix is specified).
+#
+# PYTHONPREFIX_INCLUDEDIR default: ${PREFIX}/include/${PYTHON_VERSION}
+# PYTHONPREFIX_LIBDIR default: ${PREFIX}/lib/${PYTHON_VERSION}
+# PYTHONPREFIX_SITELIBDIR default: ${PYTHONPREFIX_LIBDIR}/site-packages
+#
+# 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.
+#
+# PYTHON_PKGNAMEPREFIX
+# - Use this as a ${PKGNAMEPREFIX} to distinguish
+# packages for different Python versions.
+# default: py${PYTHON_SUFFIX}-
+#
+# Using USES=python.mk also will add some useful entries to 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}
+# PYTHON_VER=${PYTHON_VER}
+#
+#
+# Deprecated variables, which exist for compatibility and will be removed
+# soon:
+#
+# PYTHON_DEFAULT_VERSION
+# PYTHON2_DEFAULT_VERSION
+# PYTHON3_DEFAULT_VERSION
+# - Deprecated, use PYTHON[2,3]_DEFAULT instead,
+# see bsd.default-versions.mk
+#
+# PYTHON_PKGNAMESUFFIX
+# - Deprecated, use PYTHON_PKGNAMEPREFIX instead
+# default: -py${PYTHON_SUFFIX}
+#
+# PYDISTUTILS_INSTALLNOSINGLE
+# - Deprecated without replacement
+#
+# MAINTAINER: ports at MidinightBSD.org
-# MAINTAINER: ports at MidnightBSD.org
-
.if !defined(_INCLUDE_USES_PYTHON_MK)
_INCLUDE_USES_PYTHON_MK= yes
@@ -80,7 +282,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"
@@ -98,6 +299,21 @@
.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
@@ -142,192 +358,111 @@
.endif
.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}
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
+# NOTE:
+#
+# PYTHON_VERSION will hold whatever is passed down the dependency chain.
+# If a user runs `make PYTHON_VERSION=python3.3, PYTHON_VERSION will be
+# set to 'python3.3'. A port however may require a different version,
+# which is stored (above) in _PYTHON_VERSION.
+# Every python bit below hence should use python${_PYTHON_VERSION}, since
+# this is the value, the _port_ requires
+#
-# Propagate the chosen python version to submakes.
-.MAKEFLAGS: PYTHON_VERSION=python${_PYTHON_VERSION}
+# 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:C/\.([0-9]+)$/.0\1/:C/\.0?([0-9][0-9])$/.\1/:S/.//g}
-# 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
+# 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-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
+PYTHONBASE!= (${PYTHON_CMD} -c 'import sys; print(sys.prefix)' \
+ 2> /dev/null || ${ECHO_CMD} ${LOCALBASE}) | ${TAIL} -1
-# Python-3.1
-.elif ${PYTHON_VERSION} == "python3.1"
-PYTHON_PORTVERSION?= 3.1.5
-PYTHON_PORTSDIR= ${PORTSDIR}/lang/python31
-PYTHON_REL= 315
-PYTHON_SUFFIX= 31
-PYTHON_VER= 3.1
-
-# 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.1"
- @${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_DISTFILE= Python-${PYTHON_PORTVERSION:S/.rc/rc/}${EXTRACT_SUFX}
-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${_PYTHON_VERSION}${PYTHON_ABIVER}
+PYTHON_LIBDIR= ${PYTHONBASE}/lib/python${_PYTHON_VERSION}
+PYTHON_PLATFORM= ${OPSYS:tl}${OSREL:C/\.[0-9.]*//}
+PYTHON_SITELIBDIR= ${PYTHON_LIBDIR}/site-packages
PYTHON_PKGNAMEPREFIX= py${PYTHON_SUFFIX}-
PYTHON_PKGNAMESUFFIX= -py${PYTHON_SUFFIX}
-PYTHON_PLATFORM= ${OPSYS:tl}${OSREL:C/\.[0-9.]*//}
-PYTHON_SITELIBDIR= ${PYTHON_LIBDIR}/site-packages
PYTHONPREFIX_INCLUDEDIR= ${PYTHON_INCLUDEDIR:S;${PYTHONBASE};${TRUE_PREFIX};}
PYTHONPREFIX_LIBDIR= ${PYTHON_LIBDIR:S;${PYTHONBASE};${TRUE_PREFIX};}
PYTHONPREFIX_SITELIBDIR= ${PYTHON_SITELIBDIR:S;${PYTHONBASE};${TRUE_PREFIX};}
-_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
+# Used for recording the installed files.
+_PYTHONPKGLIST= ${WRKDIR}/.PLIST.pymodtmp
-# setuptools support
-.if defined(USE_PYDISTUTILS) && ${USE_PYDISTUTILS} == "easy_install"
+# 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_PYTHON=distutils
+#
-PYDISTUTILS_BUILD_TARGET?= bdist_egg
-PYDISTUTILS_INSTALL_TARGET?= easy_install
-PYDISTUTILS_INSTALLARGS?= -O 1 -N -S ${PYTHON_SITELIBDIR} \
- -d ${PYEASYINSTALL_SITELIBDIR} \
- -s ${PYEASYINSTALL_BINDIR} \
- ${WRKSRC}/dist/${PYEASYINSTALL_EGG}
-MAKE_ENV+= PYTHONUSERBASE=${FAKE_DESTDIR}${PYTHONBASE}
-PYDISTUTILS_INSTALLARGS:= -m -q --user ${PYDISTUTILS_INSTALLARGS}
-
-.if ${TRUE_PREFIX} != ${LOCALBASE}
-MAKE_ENV+= PYTHONPATH=${PYEASYINSTALL_SITELIBDIR}
+.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}
-.if defined(PYEASYINSTALL_ARCHDEP)
-PYEASYINSTALL_OSARCH?= -${OPSYS:tl}-${OSVERSION:C/([0-9]*)[0-9]{5}/\1/}-${ARCH}
-MAKE_ENV+= _PYTHON_HOST_PLATFORM=${PYEASYINSTALL_OSARCH}
+.if defined(_PYTHON_FEATURE_AUTOPLIST)
+UNIQUE_FIND_SUFFIX_FILES= \
+ ${SED} -e 's|^${TRUE_PREFIX}/||' ${_PYTHONPKGLIST} ${TMPPLIST} | \
+ ${GREP} -e '^bin/.*$$\|^sbin/.*$$\|^libexec/.*$$'
+.else
+UNIQUE_FIND_SUFFIX_FILES= \
+ ${GREP} -he '^bin/.*$$\|^sbin/.*$$\|^libexec/.*$$' ${TMPPLIST} 2>/dev/null
.endif
-PYEASYINSTALL_EGG?= ${PYDISTUTILS_PKGNAME:C/[^A-Za-z0-9.]+/_/g}-${PYDISTUTILS_PKGVERSION:C/[^A-Za-z0-9.]+/_/g}-py${PYTHON_VER}${PYEASYINSTALL_OSARCH}.egg
-PYEASYINSTALL_CMD?= ${LOCALBASE}/bin/easy_install-${PYTHON_VER}
-PYEASYINSTALL_BINDIR?= ${TRUE_PREFIX}/bin
-PYEASYINSTALL_SITELIBDIR?= ${PYTHONPREFIX_SITELIBDIR}
+.endif # defined(_PYTHON_FEATURE_CONCURRENT)
-PLIST_SUB+= PYEASYINSTALL_EGG=${PYEASYINSTALL_EGG}
-
-pre-install: pre-install-easyinstall
-pre-install-easyinstall:
- @${MKDIR} ${FAKE_DESTDIR}${PYEASYINSTALL_SITELIBDIR}
-
-add-plist-post: add-plist-easyinstall
-add-plist-easyinstall:
- @# Easiest to fake pyeasyinstall, or it complains about paths
- @${ECHO_CMD} "@unexec ${REINPLACE_CMD} -i '' \
- -e '\,^\./${PYEASYINSTALL_EGG}$$,d' \
- ${PYEASYINSTALL_SITELIBDIR}/easy-install.pth" \
- >> ${TMPPLIST}
- @${ECHO_CMD} "@exec ${PRINTF} '1a\n./${PYEASYINSTALL_EGG}\n.\nw\nq\n' | \
- /bin/ed ${PYEASYINSTALL_SITELIBDIR}/easy-install.pth" \
- >> ${TMPPLIST}
-
-.if !target(stage-python-compileall)
-stage-python-compileall:
- (cd ${FAKE_DESTDIR}${TRUE_PREFIX} && \
- ${PYTHON_CMD} ${PYTHON_LIBDIR}/compileall.py \
- -d ${PYTHONPREFIX_SITELIBDIR} -f ${PYTHONPREFIX_SITELIBDIR:S;${TRUE_PREFIX}/;;} && \
- ${PYTHON_CMD} -O ${PYTHON_LIBDIR}/compileall.py \
- -d ${PYTHONPREFIX_SITELIBDIR} -f ${PYTHONPREFIX_SITELIBDIR:S;${TRUE_PREFIX}/;;})
+_CURRENTPORT:= ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}
+.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
-post-install: stage-python-compileall
-
-.endif # defined(USE_PYDISTUTILS) && ${USE_PYDISTUTILS} == "easy_install"
-
# distutils support
PYSETUP?= setup.py
-PYDISTUTILS_SETUP?= -c "import setuptools; __file__='${PYSETUP}'; exec(compile(open(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))"
-PYDISTUTILS_CONFIGUREARGS?=
-PYDISTUTILS_BUILDARGS?=
+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?= # empty
+PYDISTUTILS_BUILDARGS?= # empty
PYDISTUTILS_INSTALLARGS?= -c -O1 --prefix=${TRUE_PREFIX}
-.if defined(USE_PYDISTUTILS) && ${USE_PYDISTUTILS} != "easy_install"
+.if defined(_PYTHON_FEATURE_DISTUTILS)
. if !defined(PYDISTUTILS_INSTALLNOSINGLE)
PYDISTUTILS_INSTALLARGS+= --single-version-externally-managed
. endif
-. if !defined(NO_STAGE)
PYDISTUTILS_INSTALLARGS+= --root=${FAKE_DESTDIR}
-. endif
.endif
-_PYTHONPKGLIST= ${WRKDIR}/.PLIST.pymodtmp
PYDISTUTILS_INSTALLARGS:= --record ${_PYTHONPKGLIST} \
${PYDISTUTILS_INSTALLARGS}
@@ -337,12 +472,10 @@
PYDISTUTILS_EGGINFODIR?=${FAKE_DESTDIR}${PYTHONPREFIX_SITELIBDIR}
add-plist-egginfo:
-.if !defined(PYDISTUTILS_NOEGGINFO) && \
- !defined(PYDISTUTILS_AUTOPLIST) && \
- (defined(INSTALLS_EGGINFO) || \
- (defined(USE_PYDISTUTILS) && \
- ${USE_PYDISTUTILS} != "easy_install")) && \
- defined(PYTHON_REL)
+.if !defined(_PYTHON_FEATURE_NOEGGINFO) && \
+ !defined(_PYTHON_FEATURE_AUTOPLIST) && \
+ defined(_PYTHON_FEATURE_DISTUTILS) && \
+ defined(PYTHON_REL)
. for egginfo in ${PYDISTUTILS_EGGINFO}
if [ -d "${PYDISTUTILS_EGGINFODIR}/${egginfo}" ]; then \
${LS} ${PYDISTUTILS_EGGINFODIR}/${egginfo} | while read f; do \
@@ -365,23 +498,6 @@
-e 's|^\(man/.*man[0-9]\)/\(.*\.[0-9]\)$$|\1/\2.gz|' \
-e 's|[[:alnum:]|[:space:]]*/\.\./*||g; s|/\./|/|g' \
${_PYTHONPKGLIST} | ${SORT} >> ${TMPPLIST}
- @${SED} -e 's|^${FAKE_DESTDIR}${TRUE_PREFIX}/\(.*\)/\(.*\)|\1|' \
- -e 's|^${TRUE_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} "@unexec rmdir \"%D/$${line}\" 2>/dev/null || true"; \
- }; \
- done | ${SORT} | uniq | ${SORT} -r >> ${TMPPLIST}
- @${ECHO_CMD} "@unexec rmdir \"%D/${PYTHON_SITELIBDIR:S;${PYTHONBASE}/;;}\" 2>/dev/null || true" >> ${TMPPLIST}
- @${ECHO_CMD} "@unexec rmdir \"%D/${PYTHON_LIBDIR:S;${PYTHONBASE}/;;}\" 2>/dev/null || true" >> ${TMPPLIST}
.else
.if ${PYTHON_REL} >= 3200 && defined(_PYTHON_FEATURE_PY3KPLIST)
@@ -395,7 +511,6 @@
/^@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 "@dir " sp "/" pc}} \
' \
pc="__pycache__" mt="$$(${PYMAGICTAG})" sp="${PYTHON_SITELIBDIR:S,${PYTHONBASE}/,,g}" \
${TMPPLIST} > ${TMPPLIST}.pyc_tmp
@@ -405,6 +520,7 @@
# Fix for programs that build python from a GNU auto* environment
CONFIGURE_ENV+= PYTHON="${PYTHON_CMD}"
+
# By default CMake picks up the highest available version of Python package.
# Enforce the version required by the port or the default.
CMAKE_ARGS+= -DPython_ADDITIONAL_VERSIONS=${PYTHON_VER}
@@ -416,17 +532,16 @@
PYXML= ${PYTHON_SITELIBDIR}/_xmlplus/__init__.py:${PORTSDIR}/textproc/py-xml
# dependencies
-
.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(_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
@@ -446,7 +561,7 @@
PYTHON_VER=${PYTHON_VER}
_USES_POST+= python
-.endif # _INCLUDE_USES_PYTHON_MK
+.endif # _INCLUDE_USES_PYTHON_MK
.if defined(_POSTMKINCLUDED) && !defined(_INCLUDE_USES_PYTHON_POST_MK)
_INCLUDE_USES_PYTHON_POST_MK= yes
More information about the Midnightbsd-cvs
mailing list