2b8680aba9
-- Signed-off-by: Werner Koch <wk@gnupg.org>
246 lines
9.0 KiB
Plaintext
246 lines
9.0 KiB
Plaintext
## ------------------------ -*- Autoconf -*-
|
|
## Python file handling
|
|
## From Andrew Dalke
|
|
## Updated by James Henstridge
|
|
## Updated by Werner Koch 2018-10-17
|
|
## ---------------------------------
|
|
# Copyright (C) 1999-2017 Free Software Foundation, Inc.
|
|
#
|
|
# This file is free software; the Free Software Foundation
|
|
# gives unlimited permission to copy and/or distribute it,
|
|
# with or without modifications, as long as this notice is preserved.
|
|
|
|
|
|
# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]
|
|
# [INTERPRETER-LIST])
|
|
# ---------------------------------------------------------------------------
|
|
# Adds support for distributing Python modules and packages. To
|
|
# install modules, copy them to $(pythondir), using the python_PYTHON
|
|
# automake variable. To install a package with the same name as the
|
|
# automake package, install to $(pkgpythondir), or use the
|
|
# pkgpython_PYTHON automake variable.
|
|
#
|
|
# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as
|
|
# locations to install python extension modules (shared libraries).
|
|
# Another macro is required to find the appropriate flags to compile
|
|
# extension modules.
|
|
#
|
|
# If your package is configured with a different prefix to python,
|
|
# users will have to add the install directory to the PYTHONPATH
|
|
# environment variable, or create a .pth file (see the python
|
|
# documentation for details).
|
|
#
|
|
# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will
|
|
# cause an error if the version of python installed on the system
|
|
# doesn't meet the requirement. MINIMUM-VERSION should consist of
|
|
# numbers and dots only.
|
|
AC_DEFUN([AM_PATH_PYTHON],
|
|
[
|
|
dnl Find a Python interpreter. Python versions prior to 2.0 are not
|
|
dnl supported. (2.0 was released on October 16, 2000). Python 3.0
|
|
dnl through to Python 3.9 are also not supported.
|
|
m4_define_default([_AM_PYTHON_INTERPRETER_LIST],
|
|
[python2 python2.7 dnl
|
|
python dnl
|
|
python3 python3.9 python3.8 python3.7 python3.6 python3.5 python3.4
|
|
])
|
|
|
|
AC_ARG_VAR([PYTHON], [the Python interpreter])
|
|
|
|
m4_if([$1],[],[
|
|
dnl No version check is needed.
|
|
# Find any Python interpreter.
|
|
if test -z "$PYTHON"; then
|
|
AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :)
|
|
fi
|
|
am_display_PYTHON=python
|
|
], [
|
|
dnl A version check is needed.
|
|
if test -n "$PYTHON"; then
|
|
# If the user set $PYTHON, use it and don't search something else.
|
|
AC_MSG_CHECKING([whether $PYTHON version is >= $1])
|
|
AM_PYTHON_CHECK_VERSION([$PYTHON], [$1],
|
|
[AC_MSG_RESULT([yes])],
|
|
[AC_MSG_RESULT([no])
|
|
AC_MSG_ERROR([Python interpreter is too old])])
|
|
am_display_PYTHON=$PYTHON
|
|
else
|
|
# Otherwise, try each interpreter until we find one that satisfies
|
|
# VERSION.
|
|
AC_CACHE_CHECK([for a Python interpreter with version >= $1],
|
|
[am_cv_pathless_PYTHON],[
|
|
for am_cv_pathless_PYTHON dnl
|
|
in m4_if([$4],[],[_AM_PYTHON_INTERPRETER_LIST],[$4]) none; do
|
|
test "$am_cv_pathless_PYTHON" = none && break
|
|
AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break])
|
|
done])
|
|
# Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON.
|
|
if test "$am_cv_pathless_PYTHON" = none; then
|
|
PYTHON=:
|
|
else
|
|
AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON])
|
|
fi
|
|
am_display_PYTHON=$am_cv_pathless_PYTHON
|
|
fi
|
|
])
|
|
|
|
if test "$PYTHON" = :; then
|
|
dnl Run any user-specified action, or abort.
|
|
m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])])
|
|
else
|
|
|
|
dnl Query Python for its version number. Getting [:3] seems to be
|
|
dnl the best way to do this; it's what "site.py" does in the standard
|
|
dnl library.
|
|
|
|
AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version],
|
|
[am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`])
|
|
AC_SUBST([PYTHON_VERSION], [$am_cv_python_version])
|
|
|
|
dnl Use the values of $prefix and $exec_prefix for the corresponding
|
|
dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made
|
|
dnl distinct variables so they can be overridden if need be. However,
|
|
dnl general consensus is that you shouldn't need this ability.
|
|
|
|
AC_SUBST([PYTHON_PREFIX], ['${prefix}'])
|
|
AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}'])
|
|
|
|
dnl At times (like when building shared libraries) you may want
|
|
dnl to know which OS platform Python thinks this is.
|
|
|
|
AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform],
|
|
[am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`])
|
|
AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform])
|
|
|
|
# Just factor out some code duplication.
|
|
am_python_setup_sysconfig="\
|
|
import sys
|
|
# Prefer sysconfig over distutils.sysconfig, for better compatibility
|
|
# with python 3.x. See automake bug#10227.
|
|
try:
|
|
import sysconfig
|
|
except ImportError:
|
|
can_use_sysconfig = 0
|
|
else:
|
|
can_use_sysconfig = 1
|
|
# Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs:
|
|
# <https://github.com/pypa/virtualenv/issues/118>
|
|
try:
|
|
from platform import python_implementation
|
|
if python_implementation() == 'CPython' and sys.version[[:3]] == '2.7':
|
|
can_use_sysconfig = 0
|
|
except ImportError:
|
|
pass"
|
|
|
|
dnl Set up 4 directories:
|
|
|
|
dnl pythondir -- where to install python scripts. This is the
|
|
dnl site-packages directory, not the python standard library
|
|
dnl directory like in previous automake betas. This behavior
|
|
dnl is more consistent with lispdir.m4 for example.
|
|
dnl Query distutils for this directory.
|
|
AC_CACHE_CHECK([for $am_display_PYTHON script directory],
|
|
[am_cv_python_pythondir],
|
|
[if test "x$prefix" = xNONE
|
|
then
|
|
am_py_prefix=$ac_default_prefix
|
|
else
|
|
am_py_prefix=$prefix
|
|
fi
|
|
am_cv_python_pythondir=`$PYTHON -c "
|
|
$am_python_setup_sysconfig
|
|
if can_use_sysconfig:
|
|
sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'})
|
|
else:
|
|
from distutils import sysconfig
|
|
sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix')
|
|
sys.stdout.write(sitedir)"`
|
|
case $am_cv_python_pythondir in
|
|
$am_py_prefix*)
|
|
am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'`
|
|
am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"`
|
|
;;
|
|
*)
|
|
case $am_py_prefix in
|
|
/usr|/System*) ;;
|
|
*)
|
|
am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
])
|
|
AC_SUBST([pythondir], [$am_cv_python_pythondir])
|
|
|
|
dnl pkgpythondir -- $PACKAGE directory under pythondir. Was
|
|
dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is
|
|
dnl more consistent with the rest of automake.
|
|
|
|
AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE])
|
|
|
|
dnl pyexecdir -- directory for installing python extension modules
|
|
dnl (shared libraries)
|
|
dnl Query distutils for this directory.
|
|
AC_CACHE_CHECK([for $am_display_PYTHON extension module directory],
|
|
[am_cv_python_pyexecdir],
|
|
[if test "x$exec_prefix" = xNONE
|
|
then
|
|
am_py_exec_prefix=$am_py_prefix
|
|
else
|
|
am_py_exec_prefix=$exec_prefix
|
|
fi
|
|
am_cv_python_pyexecdir=`$PYTHON -c "
|
|
$am_python_setup_sysconfig
|
|
if can_use_sysconfig:
|
|
sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_prefix'})
|
|
else:
|
|
from distutils import sysconfig
|
|
sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_prefix')
|
|
sys.stdout.write(sitedir)"`
|
|
case $am_cv_python_pyexecdir in
|
|
$am_py_exec_prefix*)
|
|
am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'`
|
|
am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"`
|
|
;;
|
|
*)
|
|
case $am_py_exec_prefix in
|
|
/usr|/System*) ;;
|
|
*)
|
|
am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
])
|
|
AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir])
|
|
|
|
dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE)
|
|
|
|
AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE])
|
|
|
|
dnl Run any user-specified action.
|
|
$2
|
|
fi
|
|
|
|
])
|
|
|
|
|
|
# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
|
|
# ---------------------------------------------------------------------------
|
|
# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
|
|
# Run ACTION-IF-FALSE otherwise.
|
|
# This test uses sys.hexversion instead of the string equivalent (first
|
|
# word of sys.version), in order to cope with versions such as 2.2c1.
|
|
# This supports Python 2.0 or higher. (2.0 was released on October 16, 2000).
|
|
AC_DEFUN([AM_PYTHON_CHECK_VERSION],
|
|
[prog="import sys
|
|
# split strings by '.' and convert to numeric. Append some zeros
|
|
# because we need at least 4 digits for the hex conversion.
|
|
# map returns an iterator in Python 3.0 and a list in 2.x
|
|
minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]]
|
|
minverhex = 0
|
|
# xrange is not present in Python 3.0 and range returns an iterator
|
|
for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]]
|
|
sys.exit(sys.hexversion < minverhex)"
|
|
AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])
|