python: Update python.m4 configure script.

* configure.ac: Unset PYTHON_LIBS.  Support python 3.10.
* m4/python.m4: Find correct version string for python >= 3.10.
--

See-also: https://dev.gnupg.org/D546

Also test for 3.11 and 3.12 (wk).
This commit is contained in:
Ben Greiner (bnavigator) 2023-03-16 15:09:38 +01:00 committed by Werner Koch
parent e50724e1bb
commit d086653cc3
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
2 changed files with 198 additions and 91 deletions

View File

@ -521,11 +521,13 @@ if test "$found_py" = "1"; then
if test "$found_py" = "1" -o "$found_py3" = "1"; then if test "$found_py" = "1" -o "$found_py3" = "1"; then
# Reset everything, so that we can look for another Python. # Reset everything, so that we can look for another Python.
m4_foreach([mym4pythonver], m4_foreach([mym4pythonver],
[[2.7],[3.4],[3.5],[3.6],[3.7],[3.8],[3.9],[all]], [[2.7],[3.4],[3.5],[3.6],[3.7],[3.8],[3.9],[3.10],
[3.11],[3.12],[all]],
[unset PYTHON [unset PYTHON
unset PYTHON_VERSION unset PYTHON_VERSION
unset PYTHON_CPPFLAGS unset PYTHON_CPPFLAGS
unset PYTHON_LDFLAGS unset PYTHON_LDFLAGS
unset PYTHON_LIBS
unset PYTHON_SITE_PKG unset PYTHON_SITE_PKG
unset PYTHON_EXTRA_LIBS unset PYTHON_EXTRA_LIBS
unset PYTHON_EXTRA_LDFLAGS unset PYTHON_EXTRA_LDFLAGS

View File

@ -1,10 +1,10 @@
## ------------------------ -*- Autoconf -*- ## ------------------------ -*- Autoconf -*-
## Python file handling ## Python file handling
## From Andrew Dalke ## From Andrew Dalke
## Updated by James Henstridge ## Updated by James Henstridge and other contributors.
## Updated by Werner Koch 2018-10-17 ## Updated by Werner Koch 2018-10-17
## --------------------------------- ## ------------------------
# Copyright (C) 1999-2017 Free Software Foundation, Inc. # Copyright (C) 1999-2021 Free Software Foundation, Inc.
# #
# This file is free software; the Free Software Foundation # This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@ -36,13 +36,12 @@
# numbers and dots only. # numbers and dots only.
AC_DEFUN([AM_PATH_PYTHON], AC_DEFUN([AM_PATH_PYTHON],
[ [
dnl Find a Python interpreter. Python versions prior to 2.0 are not dnl Find a Python interpreter. Python versions prior to 2.7 are not
dnl supported. (2.0 was released on October 16, 2000). Python 3.0 dnl supported. Python 3.0 through to Python 3.3 are also not supported.
dnl through to Python 3.9 are also not supported.
m4_define_default([_AM_PYTHON_INTERPRETER_LIST], m4_define_default([_AM_PYTHON_INTERPRETER_LIST],
[python2 python2.7 dnl [python2 python2.7 dnl
python dnl python dnl
python3 python3.9 python3.8 python3.7 python3.6 python3.5 python3.4 python3 python3.10 python3.9 python3.8 python3.7 python3.6 python3.5 python3.4
]) ])
AC_ARG_VAR([PYTHON], [the Python interpreter]) AC_ARG_VAR([PYTHON], [the Python interpreter])
@ -85,34 +84,141 @@ AC_DEFUN([AM_PATH_PYTHON],
]) ])
if test "$PYTHON" = :; then if test "$PYTHON" = :; then
dnl Run any user-specified action, or abort. dnl Run any user-specified action, or abort.
m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])])
else else
dnl Query Python for its version number. Getting [:3] seems to be dnl Query Python for its version number. Although site.py simply uses
dnl the best way to do this; it's what "site.py" does in the standard dnl sys.version[:3], printing that failed with Python 3.10, since the
dnl library. dnl trailing zero was eliminated. So now we output just the major
dnl and minor version numbers, as numbers. Apparently the tertiary
dnl version is not of interest.
dnl
AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], 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]])"`]) [am_cv_python_version=`$PYTHON -c "import sys; print ('%u.%u' % sys.version_info[[:2]])"`])
AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) AC_SUBST([PYTHON_VERSION], [$am_cv_python_version])
dnl Use the values of $prefix and $exec_prefix for the corresponding dnl At times, e.g., when building shared libraries, you may want
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. dnl to know which OS platform Python thinks this is.
dnl
AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], 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)"`]) [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`])
AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform])
# Just factor out some code duplication. dnl emacs-page
dnl If --with-python-sys-prefix is given, use the values of sys.prefix
dnl and sys.exec_prefix for the corresponding values of PYTHON_PREFIX
dnl and PYTHON_EXEC_PREFIX. Otherwise, use the GNU ${prefix} and
dnl ${exec_prefix} variables.
dnl
dnl The two are made distinct variables so they can be overridden if
dnl need be, although general consensus is that you shouldn't need
dnl this separation.
dnl
dnl Also allow directly setting the prefixes via configure options,
dnl overriding any default.
dnl
if test "x$prefix" = xNONE; then
am__usable_prefix=$ac_default_prefix
else
am__usable_prefix=$prefix
fi
# Allow user to request using sys.* values from Python,
# instead of the GNU $prefix values.
AC_ARG_WITH([python-sys-prefix],
[AS_HELP_STRING([--with-python-sys-prefix],
[use Python's sys.prefix and sys.exec_prefix values])],
[am_use_python_sys=:],
[am_use_python_sys=false])
# Allow user to override whatever the default Python prefix is.
AC_ARG_WITH([python_prefix],
[AS_HELP_STRING([--with-python_prefix],
[override the default PYTHON_PREFIX])],
[am_python_prefix_subst=$withval
am_cv_python_prefix=$withval
AC_MSG_CHECKING([for explicit $am_display_PYTHON prefix])
AC_MSG_RESULT([$am_cv_python_prefix])],
[
if $am_use_python_sys; then
# using python sys.prefix value, not GNU
AC_CACHE_CHECK([for python default $am_display_PYTHON prefix],
[am_cv_python_prefix],
[am_cv_python_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.prefix)"`])
dnl If sys.prefix is a subdir of $prefix, replace the literal value of
dnl $prefix with a variable reference so it can be overridden.
case $am_cv_python_prefix in
$am__usable_prefix*)
am__strip_prefix=`echo "$am__usable_prefix" | sed 's|.|.|g'`
am_python_prefix_subst=`echo "$am_cv_python_prefix" | sed "s,^$am__strip_prefix,\\${prefix},"`
;;
*)
am_python_prefix_subst=$am_cv_python_prefix
;;
esac
else # using GNU prefix value, not python sys.prefix
am_python_prefix_subst='${prefix}'
am_python_prefix=$am_python_prefix_subst
AC_MSG_CHECKING([for GNU default $am_display_PYTHON prefix])
AC_MSG_RESULT([$am_python_prefix])
fi])
# Substituting python_prefix_subst value.
AC_SUBST([PYTHON_PREFIX], [$am_python_prefix_subst])
# emacs-page Now do it all over again for Python exec_prefix, but with yet
# another conditional: fall back to regular prefix if that was specified.
AC_ARG_WITH([python_exec_prefix],
[AS_HELP_STRING([--with-python_exec_prefix],
[override the default PYTHON_EXEC_PREFIX])],
[am_python_exec_prefix_subst=$withval
am_cv_python_exec_prefix=$withval
AC_MSG_CHECKING([for explicit $am_display_PYTHON exec_prefix])
AC_MSG_RESULT([$am_cv_python_exec_prefix])],
[
# no explicit --with-python_exec_prefix, but if
# --with-python_prefix was given, use its value for python_exec_prefix too.
AS_IF([test -n "$with_python_prefix"],
[am_python_exec_prefix_subst=$with_python_prefix
am_cv_python_exec_prefix=$with_python_prefix
AC_MSG_CHECKING([for python_prefix-given $am_display_PYTHON exec_prefix])
AC_MSG_RESULT([$am_cv_python_exec_prefix])],
[
# Set am__usable_exec_prefix whether using GNU or Python values,
# since we use that variable for pyexecdir.
if test "x$exec_prefix" = xNONE; then
am__usable_exec_prefix=$am__usable_prefix
else
am__usable_exec_prefix=$exec_prefix
fi
#
if $am_use_python_sys; then # using python sys.exec_prefix, not GNU
AC_CACHE_CHECK([for python default $am_display_PYTHON exec_prefix],
[am_cv_python_exec_prefix],
[am_cv_python_exec_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.exec_prefix)"`])
dnl If sys.exec_prefix is a subdir of $exec_prefix, replace the
dnl literal value of $exec_prefix with a variable reference so it can
dnl be overridden.
case $am_cv_python_exec_prefix in
$am__usable_exec_prefix*)
am__strip_prefix=`echo "$am__usable_exec_prefix" | sed 's|.|.|g'`
am_python_exec_prefix_subst=`echo "$am_cv_python_exec_prefix" | sed "s,^$am__strip_prefix,\\${exec_prefix},"`
;;
*)
am_python_exec_prefix_subst=$am_cv_python_exec_prefix
;;
esac
else # using GNU $exec_prefix, not python sys.exec_prefix
am_python_exec_prefix_subst='${exec_prefix}'
am_python_exec_prefix=$am_python_exec_prefix_subst
AC_MSG_CHECKING([for GNU default $am_display_PYTHON exec_prefix])
AC_MSG_RESULT([$am_python_exec_prefix])
fi])])
# Substituting python_exec_prefix_subst.
AC_SUBST([PYTHON_EXEC_PREFIX], [$am_python_exec_prefix_subst])
# Factor out some code duplication into this shell variable.
am_python_setup_sysconfig="\ am_python_setup_sysconfig="\
import sys import sys
# Prefer sysconfig over distutils.sysconfig, for better compatibility # Prefer sysconfig over distutils.sysconfig, for better compatibility
@ -132,96 +238,95 @@ try:
except ImportError: except ImportError:
pass" pass"
dnl Set up 4 directories: dnl emacs-page Set up 4 directories:
dnl pythondir -- where to install python scripts. This is the dnl 1. pythondir: where to install python scripts. This is the
dnl site-packages directory, not the python standard library dnl site-packages directory, not the python standard library
dnl directory like in previous automake betas. This behavior dnl directory like in previous automake betas. This behavior
dnl is more consistent with lispdir.m4 for example. dnl is more consistent with lispdir.m4 for example.
dnl Query distutils for this directory. dnl Query distutils for this directory.
AC_CACHE_CHECK([for $am_display_PYTHON script directory], dnl
[am_cv_python_pythondir], AC_CACHE_CHECK([for $am_display_PYTHON script directory (pythondir)],
[if test "x$prefix" = xNONE [am_cv_python_pythondir],
then [if test "x$am_cv_python_prefix" = x; then
am_py_prefix=$ac_default_prefix am_py_prefix=$am__usable_prefix
else else
am_py_prefix=$prefix am_py_prefix=$am_cv_python_prefix
fi fi
am_cv_python_pythondir=`$PYTHON -c " am_cv_python_pythondir=`$PYTHON -c "
$am_python_setup_sysconfig $am_python_setup_sysconfig
if can_use_sysconfig: if can_use_sysconfig:
sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'}) sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'})
else: else:
from distutils import sysconfig from distutils import sysconfig
sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix') sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix')
sys.stdout.write(sitedir)"` sys.stdout.write(sitedir)"`
case $am_cv_python_pythondir in #
$am_py_prefix*) case $am_cv_python_pythondir in
am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` $am_py_prefix*)
am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_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*) ;; case $am_py_prefix in
*) /usr|/System*) ;;
am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages *) am_cv_python_pythondir="\${PYTHON_PREFIX}/lib/python$PYTHON_VERSION/site-packages"
;; ;;
esac
;;
esac esac
]) ;;
esac
])
AC_SUBST([pythondir], [$am_cv_python_pythondir]) AC_SUBST([pythondir], [$am_cv_python_pythondir])
dnl pkgpythondir -- $PACKAGE directory under pythondir. Was dnl 2. pkgpythondir: $PACKAGE directory under pythondir. Was
dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is
dnl more consistent with the rest of automake. dnl more consistent with the rest of automake.
dnl
AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE])
dnl pyexecdir -- directory for installing python extension modules dnl 3. pyexecdir: directory for installing python extension modules
dnl (shared libraries) dnl (shared libraries).
dnl Query distutils for this directory. dnl Query distutils for this directory.
AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], dnl
[am_cv_python_pyexecdir], AC_CACHE_CHECK([for $am_display_PYTHON extension module directory (pyexecdir)],
[if test "x$exec_prefix" = xNONE [am_cv_python_pyexecdir],
then [if test "x$am_cv_python_exec_prefix" = x; then
am_py_exec_prefix=$am_py_prefix am_py_exec_prefix=$am__usable_exec_prefix
else else
am_py_exec_prefix=$exec_prefix am_py_exec_prefix=$am_cv_python_exec_prefix
fi fi
am_cv_python_pyexecdir=`$PYTHON -c " am_cv_python_pyexecdir=`$PYTHON -c "
$am_python_setup_sysconfig $am_python_setup_sysconfig
if can_use_sysconfig: if can_use_sysconfig:
sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_prefix'}) sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_exec_prefix'})
else: else:
from distutils import sysconfig from distutils import sysconfig
sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_prefix') sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_exec_prefix')
sys.stdout.write(sitedir)"` sys.stdout.write(sitedir)"`
case $am_cv_python_pyexecdir in #
$am_py_exec_prefix*) case $am_cv_python_pyexecdir in
am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` $am_py_exec_prefix*)
am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_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*) ;; case $am_py_exec_prefix in
*) /usr|/System*) ;;
am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages *) am_cv_python_pyexecdir="\${PYTHON_EXEC_PREFIX}/lib/python$PYTHON_VERSION/site-packages"
;; ;;
esac
;;
esac esac
]) ;;
esac
])
AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir])
dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) dnl 4. pkgpyexecdir: $(pyexecdir)/$(PACKAGE)
dnl
AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE])
dnl Run any user-specified action. dnl Run any user-specified action.
$2 $2
fi fi
]) ])