freebsd-ports/Mk/bsd.python.mk

380 lines
13 KiB
Makefile
Raw Normal View History

# -*- mode: Makefile; tab-width: 4; -*-
# ex: ts=4
#
# $FreeBSD$
#
.if !defined(_POSTMKINCLUDED) && !defined(Python_Pre_Include)
Python_Pre_Include= bsd.python.mk
Python_Include_MAINTAINER= perky@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 or PYTHON_VERSION
# is defined in the ports' makefile. Define PYTHON_VERSION to override the
# defaults that USE_PYTHON would give you. If your port requires only some
# set of Python versions, you can define USE_PYTHON as [min]-[max] or
# min+. (eg. 2.1-2.3, 2.0+ or -2.2)
#
# 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_DISTFILE: The ${DISTFILE} 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_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_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
#
# PYDISTUTILS: Dependency line for the distutils extension. As of Python-2.0,
# the distutils are in the base distribution.
#
# PYNUMERIC: Dependency line for the numeric extension. Py-Numeric-17
# is the last release that works with Python versions older
# than 1.6.
#
# PYXML: Dependency line for the XML extension. As of Python-2.0,
# this extension is in the base distribution.
#
# USE_PYTHON_PREFIX: Says that the port installs in ${PYTHONBASE}.
#
# USE_PYDISTUTILS: Use distutils as do-build and do-install target.
#
# PYDISTUTILS_BUILDARGS: Arguments to build with distutils.
# default: <empty>
#
# PYDISTUTILS_INSTALLARGS: Arguments to install with distutils.
# default: -c -O1 --prefix=${PREFIX}
#
# PYSETUP: Name of the setup script used by the distutils package.
# default: setup.py
_PYTHON_PORTBRANCH= 2.3
_PYTHON_ALLBRANCHES= 2.3 2.2 2.1 2.0 1.5 2.4 # preferred first
.if defined(USE_ZOPE)
PYTHON_VERSION= python2.1
.endif
.if defined(PYTHON_VERSION)
_PYTHON_VERSION!= echo "${PYTHON_VERSION}" | ${SED} 's/^python//'
_PYTHON_CMD= ${LOCALBASE}/bin/${PYTHON_VERSION}
.else
# Determine the currently installed version. If Python is not installed, a
# default version number is substituted and the corresponding Python
# distribution will be built through the dependency processing.
.if defined(PYTHON_CMD)
_PYTHON_CMD= ${PYTHON_CMD}
.else
_PYTHON_CMD= ${LOCALBASE}/bin/python
.endif
_PYTHON_VERSION!= ${_PYTHON_CMD} -c \
'import sys; print sys.version[:3]' 2> /dev/null \
|| echo ${_PYTHON_PORTBRANCH}
.endif # defined(PYTHON_VERSION)
# Validate Python version whether it meets USE_PYTHON version restriction.
_PYTHON_VERSION_CHECK!= echo "${USE_PYTHON}" | \
${SED} 's/^\([1-9]\.[0-9]\)$$/\1-\1/'
_PYTHON_VERSION_MINIMUM!= echo "${_PYTHON_VERSION_CHECK}" | \
${SED} -n 's/.*\([1-9]\.[0-9]\)[-+].*/\1/p'
_PYTHON_VERSION_MAXIMUM!= echo "${_PYTHON_VERSION_CHECK}" | \
${SED} -n 's/.*-\([1-9]\.[0-9]\).*/\1/p'
.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 ${_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}
PYTHONBASE!= (${PYTHON_CMD} -c 'import sys; print sys.prefix') \
2> /dev/null || echo ${LOCALBASE}
DEPENDS_ARGS+= PYTHON_VERSION=${PYTHON_VERSION}
_PYTHON_PORTVERSION!= (${PYTHON_CMD} -c 'import string, sys; \
print string.split(sys.version)[0]') 2> /dev/null || ${TRUE}
.if !defined(PYTHON_NO_DEPENDS) && !empty(_PYTHON_PORTVERSION)
PYTHON_PORTVERSION= ${_PYTHON_PORTVERSION}
.endif
2001-05-02 13:49:36 +02:00
# Python-2.4
.if ${PYTHON_VERSION} == "python2.4"
PYTHON_PORTVERSION?=2.4.a0.20040106
PYTHON_PORTSDIR= ${PORTSDIR}/lang/python-devel
PYTHON_REL= 240
PYTHON_SUFFIX= 24
# Python-2.3
.elif ${PYTHON_VERSION} == "python2.3"
PYTHON_PORTVERSION?=2.3.3
PYTHON_PORTSDIR= ${PORTSDIR}/lang/python
PYTHON_REL= 233
PYTHON_SUFFIX= 23
# Python-2.2
.elif ${PYTHON_VERSION} == "python2.2"
PYTHON_PORTVERSION?=2.2.3
PYTHON_PORTSDIR= ${PORTSDIR}/lang/python22
PYTHON_REL= 223
PYTHON_SUFFIX= 22
2001-05-02 13:49:36 +02:00
# Python-2.1
.elif ${PYTHON_VERSION} == "python2.1"
PYTHON_PORTVERSION?=2.1.3
2002-01-16 13:23:24 +01:00
PYTHON_PORTSDIR= ${PORTSDIR}/lang/python21
PYTHON_REL= 213
PYTHON_SUFFIX= 21
# Python-2.0
2001-05-02 13:49:36 +02:00
.elif ${PYTHON_VERSION} == "python2.0"
PYTHON_PORTVERSION?=2.0.1
2001-05-02 13:49:36 +02:00
PYTHON_PORTSDIR= ${PORTSDIR}/lang/python20
2001-07-05 13:21:16 +02:00
PYTHON_REL= 201
2001-05-02 13:49:36 +02:00
PYTHON_SUFFIX= 20
# Python-1.6
# ${PYTHON_PORTSDIR} is not set because we don't support building
# Python-1.6 from the ports anymore. People should use the
# latest version in ${PORTSDIR}/lang/python. The definitions here
# are for those who still have 1.6 as their default version.
.elif ${PYTHON_VERSION} == "python1.6"
PYTHON_PORTVERSION?=1.6
PYTHON_PORTSDIR= # empty
PYTHON_REL= 160
PYTHON_SUFFIX= 16
# Python-1.5
.elif ${PYTHON_VERSION} == "python1.5"
PYTHON_PORTVERSION?=1.5.2
PYTHON_PORTSDIR= ${PORTSDIR}/lang/python15
PYTHON_REL= 152
PYTHON_SUFFIX= 15
# 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]'
.else
Here come the patches! * Add ghostscript knobs [1] * Add per-port persistent build options with a menu-driven front-end [2] * Allow porters to override the message generated when do-configure fails [3] * Add patch to obviate many pkg-plist files [4] * Fix the PKG_DBDIR comment [5] * Make ports framework more robust with regard to make index [6] * Add new command macros to bsd.port.mk [7] * Remove direct command use from bsd.port.mk [8] * Make the ports system respect WITHOUT_CPU_CFLAGS [9] * Break the SDL code out into bsd.sdl.mk [10] * Add working support for USE_SIZE [11] * Fix RANDOMIZE_MASTER_SITES on -CURRENT [12] * Convert some spaces to tabs [13] * Add new physcial categories accessibility and x11-themes [14] * Speed up GNU configure scripts [15] * Remove "//" from MLINKS items in PLISTs and fix make -s install and make -s deinstall [16] * Be more specific about looking for files in distinfo [17] * Add new run-autotools target, and resort configure targets [18] * Make CONFLICTS compare prefix for installed packages and PREFIX [19] * Change directory to ${.CURDIR} before running certain make commands [20] * When INSTALL_AS_USER is set, run ldconfig with failures ignored [21] * Speed up the security check phase [22] * Fix some corner cases in the PORTDOCS code [23] * Add a new DEPRECATED macro [24] * Make INDEX breakage more informative [25] Look for a full write-up to follow on ports@ and ports-developers@. PR: 36112 [1] 59909 [4] 61351 [6] 59058 [7] 59058 [8] 59493 [9] 55494 [10] 59058 [11] 59315 [12] 59058 [13] 59811 [15] 59058 [16] 59058 [17] 60882 [18] 58149 [19] 59058 [20] 61133 [21] 55331 [22] 59070 [23] 59362 [24] 59626 [25] Submitted by: linimon [1] eivind [2] marcus [3] trevor [4] gerald [5] linimon [6] eik [7] eik [8] jeh [9] edwin [10] eik [11] Sergey Matveychuk <sem@ciam.ru> [12] eik [13] trevor gnome [14] adamw [15] eik [16] eik [17] edwin [18] clement [19] eik [20] edwin lev [21] Eugene M. Kim <ab@astralblue.com> [22] eik [23] linimon [24] eik [25]
2004-01-20 10:14:10 +01:00
check-makevars::
@${ECHO} "Makefile error: bad value for PYTHON_VERSION: ${PYTHON_VERSION}."
2001-05-02 13:49:36 +02:00
@${ECHO} "Legal values are:"
@${ECHO} " python1.5"
@${ECHO} " python1.6"
@${ECHO} " python2.0"
@${ECHO} " python2.1"
@${ECHO} " python2.2"
@${ECHO} " python2.3 (default)"
@${ECHO} " python2.4"
@${FALSE}
.endif
.if defined(PYTHON_REL) && ${PYTHON_REL} < 160
PYTHON_MASTER_SITES= ${MASTER_SITE_PYTHON}
PYTHON_MASTER_SITE_SUBDIR= ftp/python/src
PYTHON_DISTFILE= py152.tgz
.elif defined(PYTHON_REL) && ${PYTHON_REL} >= 240
PYTHON_MASTER_SITES= ${MASTER_SITE_LOCAL}
PYTHON_MASTER_SITE_SUBDIR= perky
PYTHON_DISTFILE= Python-${PYTHON_PORTVERSION}.tgz
.else
PYTHON_MASTER_SITES= ${MASTER_SITE_PYTHON}
PYTHON_MASTER_SITE_SUBDIR= ftp/python/${PYTHON_PORTVERSION}
PYTHON_DISTFILE= Python-${PYTHON_PORTVERSION}.tgz
.endif # defined(PYTHON_REL) && ${PYTHON_REL} < 160
PYTHON_WRKSRC= ${WRKDIR}/Python-${PYTHON_PORTVERSION}
PYTHON_INCLUDEDIR= ${PYTHONBASE}/include/${PYTHON_VERSION}
PYTHON_LIBDIR= ${PYTHONBASE}/lib/${PYTHON_VERSION}
PYTHON_PKGNAMEPREFIX= py${PYTHON_SUFFIX}-
PYTHON_PKGNAMESUFFIX= -py${PYTHON_SUFFIX}
PYTHON_PLATFORM!= expr ${OPSYS:L}${OSREL} : '\(.*\)\.'
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};}
PYSETUP?= setup.py
PYDISTUTILS_BUILDARGS?=
PYDISTUTILS_INSTALLARGS?= -c -O1 --prefix=${PREFIX}
# Zope specific variables
.if defined(USE_ZOPE)
# You can change this in the environment if you like
SZOPEBASEDIR?= www/Zope
# Don't change these. You'll probably want to define ZOPEPRODUCTNAME,
# too, but that is port-specific.
ZOPEBASEDIR= ${PREFIX}/${SZOPEBASEDIR}
ZOPEPRODUCTDIR= lib/python/Products
.endif
.if defined(PYTHON_REL) && ${PYTHON_REL} < 200
PYDISTUTILS= ${PYTHON_LIBDIR}/site-packages/distutils/core.py:${PORTSDIR}/misc/py-distutils
PYNUMERIC= ${PYTHON_SITELIBDIR}/Numeric/Numeric.py:${PORTSDIR}/math/py-numeric17
PYXML= ${PYTHON_SITELIBDIR}/xml/__init__.py:${PORTSDIR}/textproc/py-xml
.else
PYDISTUTILS= ${PYTHON_LIBDIR}/distutils/core.py:${PYTHON_PORTSDIR}
PYNUMERIC= ${PYTHON_SITELIBDIR}/Numeric/Numeric.py:${PORTSDIR}/math/py-numeric
PYXML= ${PYTHON_SITELIBDIR}/_xmlplus/__init__.py:${PORTSDIR}/textproc/py-xml
.endif
.if defined(PYTHON_REL) && ${PYTHON_REL} < 232
PYEXPAT= ${PYTHON_SITELIBDIR}/pyexpat.so:${PORTSDIR}/textproc/py-expat
.else
PYEXPAT= ${PYTHON_LIBDIR}/lib-dynload/pyexpat.so:${PYTHON_PORTSDIR}
.endif
# dependencies
PYTHON_NO_DEPENDS?= NO
.if ${PYTHON_NO_DEPENDS} == "NO"
BUILD_DEPENDS+= ${PYTHON_CMD}:${PYTHON_PORTSDIR}
RUN_DEPENDS+= ${PYTHON_CMD}:${PYTHON_PORTSDIR}
.if defined(USE_PYDISTUTILS) && defined(PYTHON_REL) && ${PYTHON_REL} < 200
BUILD_DEPENDS+= ${PYDISTUTILS}
.endif
.endif # ${PYTHON_NO_DEPENDS} == "NO"
.if defined(USE_ZOPE)
RUN_DEPENDS+= ${PYTHONBASE}/${SZOPEBASEDIR}/z2.py:${PORTSDIR}/www/zope
.endif
# 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}
# Zope specific substitutions
.if defined(USE_ZOPE)
PLIST_SUB+= ZOPEBASEDIR=${SZOPEBASEDIR} \
ZOPEPRODUCTDIR=${SZOPEBASEDIR}/${ZOPEPRODUCTDIR}
.endif
# XXX Hm, should I export some of the variables above to *_ENV?
.endif # !defined(_POSTMKINCLUDED) && !defined(Python_Pre_Include)
.if defined(_POSTMKINCLUDED) && !defined(Python_Post_Include)
Python_Post_Include= bsd.python.mk
# py-distutils support
.if defined(USE_PYDISTUTILS)
.if !target(do-build)
do-build:
@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYSETUP} build ${PYDISTUTILS_BUILDARGS})
.endif
.if !target(do-install)
do-install:
@(cd ${INSTALL_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} ${PYSETUP} install ${PYDISTUTILS_INSTALLARGS})
.endif
.endif # defined(USE_PYDISTUTILS)
.endif # defined(_POSTMKINCLUDED) && !defined(Python_Post_Include)