From fa05153eba3ee259635ffb2ce2789386d339c077 Mon Sep 17 00:00:00 2001 From: Bryan Hundven Date: Wed, 8 Mar 2023 17:15:22 -0800 Subject: [PATCH] Make checking for python more predictable. Signed-off-by: Bryan Hundven --- configure.ac | 16 ++---- m4/ctng_python.m4 | 111 ++++++++++++++++++++++++++++++++++++++ m4/ctng_python_version.m4 | 17 ++++++ paths.sh.in | 2 +- 4 files changed, 133 insertions(+), 13 deletions(-) create mode 100644 m4/ctng_python.m4 create mode 100644 m4/ctng_python_version.m4 diff --git a/configure.ac b/configure.ac index d6e336fe..4a33c9ac 100644 --- a/configure.ac +++ b/configure.ac @@ -253,19 +253,11 @@ CTNG_PROG_VERSION([M4], [\(GNU M4\) ([2-9]\.|1\.[5-9]|1\.[1-4][0-9]|1\.4\.[2-9][0-9]|1\.4\.1[2-9])], [gnu_m4_1_4_12_or_newer]) -CTNG_PROG_VERSION([PYTHON], - [Python], - [python], - [python37 python3.7 python36 python3.6 python35 python3.5 python34 python3.4 python33 python3.3 python32 python3.2 python31 python3.1 python3 python27 python2.7 python26 python2.6 python2 python], - [^Python [23]\.], - [python]) +# Check for Python +CTNG_PYTHON -CTNG_PROG_VERSION([PYTHON], - [Python >= 3.4], - [python], - [python37 python3.7 python36 python3.6 python35 python3.5 python34 python3.4 python3 python], - [^Python 3\.([4-9]|[1-9][0-9]+)\.], - [python_3_4_or_newer]) +# Check for Python 3.4 or newer +CTNG_PYTHON_VERSION([3],[4]) CTNG_PROG_VERSION_REQ_ANY([BISON], [bison >= 2.7], diff --git a/m4/ctng_python.m4 b/m4/ctng_python.m4 new file mode 100644 index 00000000..5e04f377 --- /dev/null +++ b/m4/ctng_python.m4 @@ -0,0 +1,111 @@ +# =========================================================================== +# Based on: https://www.gnu.org/software/autoconf-archive/ctng_python.html +# =========================================================================== +# +# SYNOPSIS +# +# CTNG_PYTHON +# +# DESCRIPTION +# +# This macro does a complete Python development environment check. +# +# It checks for all known versions. When it finds an executable, it looks +# to find the header files and library. +# +# It sets PYTHON_BIN to the name of the python executable, +# PYTHON_INCLUDE_DIR to the directory holding the header files, and +# PYTHON_LIB to the name of the Python library. +# +# This macro calls AC_SUBST on PYTHON_BIN (via AC_CHECK_PROG), +# PYTHON_INCLUDE_DIR and PYTHON_LIB. +# +# Also calls CTNG_SET_KCONFIG_OPTION to set KCONFIG_python for +# crosstool-ng. +# +# LICENSE +# +# Copyright (c) 2008 Michael Tindal +# Copyright (c) 2023 Bryan Hundven +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 21 + +AC_DEFUN([CTNG_PYTHON], +[ + AC_MSG_CHECKING(for python build information) + AC_MSG_RESULT([]) + for python in python3.12 python3.11 python3.10 python3.9 python3.8 python3.7 dnl +python3.6 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0 python2.7 dnl +python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python; do + AC_CHECK_PROGS(PYTHON_BIN, [$python]) + ctng_python_bin=$PYTHON_BIN + if test "$ctng_python_bin" != ""; then + AC_CHECK_LIB($ctng_python_bin, main, ctng_python_lib=$ctng_python_bin, ctng_python_lib=no) + if test "$ctng_python_lib" = "no"; then + AC_CHECK_LIB(${ctng_python_bin}m, main, ctng_python_lib=${ctng_python_bin}m, ctng_python_lib=no) + fi + if test "$ctng_python_lib" != "no"; then + $ctng_python_bin -c 'import sysconfig' 2>&1 + if test $? -eq 0; then + ctng_python_header=$($ctng_python_bin -c "from sysconfig import get_config_var; print(get_config_var('CONFINCLUDEPY'))") + else + ctng_python_header=$($ctng_python_bin -c "from distutils.sysconfig import *; print(get_config_var('CONFINCLUDEPY'))") + fi + if test "$ctng_python_header" != ""; then + break; + fi + fi + fi + done + + python=n + AS_IF([test "$ctng_python_bin" = ""], + ctng_python_bin=no, + python=y) + CTNG_SET_KCONFIG_OPTION([python]) + + AS_IF([test "$ctng_python_header" = ""], + ctng_python_header=no) + + AS_IF([test "$ctng_python_lib" = ""], + ctng_python_lib=no) + + AC_MSG_RESULT([ results of the Python check:]) + AC_MSG_RESULT([ Binary: $ctng_python_bin]) + AC_MSG_RESULT([ Library: $ctng_python_lib]) + AC_MSG_RESULT([ Include Dir: $ctng_python_header]) + + AS_IF([test "$ctng_python_header" != "no"], + [PYTHON_INCLUDE_DIR=$ctng_python_header + AC_SUBST(PYTHON_INCLUDE_DIR)]) + + AS_IF([test "$ctng_python_lib" != "no"], + [PYTHON_LIB=$ctng_python_lib + AC_SUBST(PYTHON_LIB)]) +])dnl diff --git a/m4/ctng_python_version.m4 b/m4/ctng_python_version.m4 new file mode 100644 index 00000000..b07cc368 --- /dev/null +++ b/m4/ctng_python_version.m4 @@ -0,0 +1,17 @@ +# CTNG_PYTHON_VERSION([major],[minor]) +# +# Check for at least a specific Major.Minor of python. +# Don't error out if it isn't matched... Might go back on that. +AC_DEFUN([CTNG_PYTHON_VERSION], +[ + AC_MSG_CHECKING(for python version greater than $1.$2) + + pyvermajor=$($PYTHON_BIN -c "import sys; print(sys.version_info.major)") + pyverminor=$($PYTHON_BIN -c "import sys; print(sys.version_info.minor)") + + AS_IF([test $pyvermajor -ge $1 -a $pyverminor -ge $2], + eval "python_$1_$2_or_newer=y" + [CTNG_SET_KCONFIG_OPTION([python_$1_$2_or_newer]) + AC_MSG_RESULT([yes: ${pyvermajor}.${pyverminor}])], + AC_MSG_RESULT([no: ${pyvermajor}.${pyverminor}])) +])dnl diff --git a/paths.sh.in b/paths.sh.in index ad3d6846..9ab99889 100644 --- a/paths.sh.in +++ b/paths.sh.in @@ -6,7 +6,7 @@ export grep="@GREP@" export gmake="@MAKE@" export gnumake="@MAKE@" export make="@MAKE@" -export python="@PYTHON@" +export python="@PYTHON_BIN@" export sed="@SED@" export libtool="@LIBTOOL@" export libtoolize="@LIBTOOLIZE@"