Whamcloud - gitweb
LU-19049 lutf: Debian 13: swig 4.3, python 3.13.3 01/59401/3 master
authorShaun Tancheff <shaun.tancheff@hpe.com>
Sat, 24 May 2025 00:56:10 +0000 (07:56 +0700)
committerOleg Drokin <green@whamcloud.com>
Tue, 17 Jun 2025 02:51:16 +0000 (02:51 +0000)
Update the config/ac_python_devel.m4 to handle distutils
being removed.

Handle swig 4.3 api change, SWIG_Python_AppendOutput() takes a
3rd argument 'is_null'

Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: I35968b6928f682f5a70731e316db5e171fad00be
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/59401
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Jian Yu <yujian@whamcloud.com>
Reviewed-by: Yang Sheng <ys@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
autoMakefile.am
config/ac_python_devel.m4
config/lustre-build.m4
lustre/tests/lutf/swig_templates/typemap.template

index b707807..6488905 100644 (file)
@@ -615,7 +615,7 @@ dkms-debs: undef.h debs_common
           ../lustre-*-utils_$${VER}_*.deb \
           ../lustre_$${VER}.dsc ../lustre_$${VER}_*.changes \
           ../lustre_$${VER}.tar.gz ../lustre-*-modules-dkms_$${VER}_*.deb \
-          ../lustre-*-dbgsym_$${VER}_*.ddeb ../lustre_$${VER}_*.buildinfo \
+          ../lustre-*-dbgsym_$${VER}_*.*deb ../lustre_$${VER}_*.buildinfo \
           debs/
 
 EXTRA_DIST += debian/*
index 4e896de..935056c 100644 (file)
@@ -4,7 +4,7 @@
 #
 # SYNOPSIS
 #
-#   AX_PYTHON_DEVEL([version])
+#   AX_PYTHON_DEVEL([version[,optional]])
 #
 # DESCRIPTION
 #
 #   version number. Don't use "PYTHON_VERSION" for this: that environment
 #   variable is declared as precious and thus reserved for the end-user.
 #
+#   By default this will fail if it does not detect a development version of
+#   python.  If you want it to continue, set optional to true, like
+#   AX_PYTHON_DEVEL([], [true]).  The ax_python_devel_found variable will be
+#   "no" if it fails.
+#
 #   This macro should work for all versions of Python >= 2.1.0. As an end
 #   user, you can disable the check for the python version by setting the
 #   PYTHON_NOVERSIONCHECK environment variable to something else than the
 #   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
+#serial 37
 
 AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL])
 AC_DEFUN([AX_PYTHON_DEVEL],[
+       # Get whether it's optional
+       if test -z "$2"; then
+          ax_python_devel_optional=false
+       else
+          ax_python_devel_optional=$2
+       fi
+       ax_python_devel_found=yes
+
        #
        # Allow the use of a (user set) custom python version
        #
-       #AC_ARG_VAR([PYTHON_VERSION],[The installed Python
-       #       version to use, for example '2.3'. This string
-       #       will be appended to the Python interpreter
-       #       canonical name.])
+       AC_ARG_VAR([PYTHON_VERSION],[The installed Python
+               version to use, for example '2.3'. This string
+               will be appended to the Python interpreter
+               canonical name.])
 
-       AC_PATH_PROGS([PYTHON],[python3 python])
-       #AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]])
+       AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]])
        if test -z "$PYTHON"; then
-          #AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path])
-          AC_MSG_WARN([Cannot find python in your system path])
-          PYTHON_VERSION_CHECK="no"
-          AC_SUBST([PYTHON_VERSION_CHECK])
+          AC_MSG_WARN([Cannot find python$PYTHON_VERSION in your system path])
+          if ! $ax_python_devel_optional; then
+             AC_MSG_ERROR([Giving up, python development not available])
+          fi
+          ax_python_devel_found=no
           PYTHON_VERSION=""
        fi
 
-       PYTHON_VERSION_CHECK="yes"
-       #
-       # Check for a version of Python >= 2.1.0
-       #
-       AC_MSG_CHECKING([for a version of Python >= '3.6.0'])
-       ac_supports_python_ver=`$PYTHON -c "import sys; \
+       if test $ax_python_devel_found = yes; then
+          #
+          # Check for a version of Python >= 2.1.0
+          #
+          AC_MSG_CHECKING([for a version of Python >= '2.1.0'])
+          ac_supports_python_ver=`$PYTHON -c "import sys; \
                ver = sys.version.split ()[[0]]; \
-               print (ver >= '3.0')"`
-       if test "$ac_supports_python_ver" != "True"; then
+               print (ver >= '2.1.0')"`
+          if test "$ac_supports_python_ver" != "True"; then
                if test -z "$PYTHON_NOVERSIONCHECK"; then
                        AC_MSG_RESULT([no])
-                       PYTHON_VERSION_CHECK="no"
-                       AC_SUBST([PYTHON_VERSION_CHECK])
                        AC_MSG_WARN([
 This version of the AC@&t@_PYTHON_DEVEL macro
 doesn't work properly with versions of Python before
-3.6.0. You may need to re-run configure, setting the
+2.1.0. You may need to re-run configure, setting the
 variables PYTHON_CPPFLAGS, PYTHON_LIBS, PYTHON_SITE_PKG,
 PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
 Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
 to something else than an empty string.
 ])
+                       if ! $ax_python_devel_optional; then
+                          AC_MSG_FAILURE([Giving up])
+                       fi
+                       ax_python_devel_found=no
+                       PYTHON_VERSION=""
                else
                        AC_MSG_RESULT([skip at user request])
                fi
-       else
+          else
                AC_MSG_RESULT([yes])
+          fi
        fi
 
-       #
-       # if the macro parameter ``version'' is set, honour it
-       #
-       if test -n "$1" ; then
+       if test $ax_python_devel_found = yes; then
+          #
+          # If the macro parameter ``version'' is set, honour it.
+          # A Python shim class, VPy, is used to implement correct version comparisons via
+          # string expressions, since e.g. a naive textual ">= 2.7.3" won't work for
+          # Python 2.7.10 (the ".1" being evaluated as less than ".3").
+          #
+          if test -n "$1"; then
                AC_MSG_CHECKING([for a version of Python $1])
-               ac_supports_python_ver=`$PYTHON -c "import sys; \
-                       ver = sys.version.split ()[[0]]; \
+                cat << EOF > ax_python_devel_vpy.py
+class VPy:
+    def vtup(self, s):
+        return tuple(map(int, s.strip().replace("rc", ".").split(".")))
+    def __init__(self):
+        import sys
+        self.vpy = tuple(sys.version_info)[[:3]]
+    def __eq__(self, s):
+        return self.vpy == self.vtup(s)
+    def __ne__(self, s):
+        return self.vpy != self.vtup(s)
+    def __lt__(self, s):
+        return self.vpy < self.vtup(s)
+    def __gt__(self, s):
+        return self.vpy > self.vtup(s)
+    def __le__(self, s):
+        return self.vpy <= self.vtup(s)
+    def __ge__(self, s):
+        return self.vpy >= self.vtup(s)
+EOF
+               ac_supports_python_ver=`$PYTHON -c "import ax_python_devel_vpy; \
+                        ver = ax_python_devel_vpy.VPy(); \
                        print (ver $1)"`
+                rm -rf ax_python_devel_vpy*.py* __pycache__/ax_python_devel_vpy*.py*
                if test "$ac_supports_python_ver" = "True"; then
-                  AC_MSG_RESULT([yes])
+                       AC_MSG_RESULT([yes])
                else
                        AC_MSG_RESULT([no])
-                       PYTHON_VERSION_CHECK="no"
-                       AC_SUBST([PYTHON_VERSION_CHECK])
                        AC_MSG_WARN([this package requires Python $1.
 If you have it installed, but it isn't the default Python
 interpreter in your system path, please pass the PYTHON_VERSION
 variable to configure. See ``configure --help'' for reference.
 ])
+                       if ! $ax_python_devel_optional; then
+                          AC_MSG_ERROR([Giving up])
+                       fi
+                       ax_python_devel_found=no
                        PYTHON_VERSION=""
                fi
+          fi
        fi
 
-       #
-       # Check if you have distutils, else fail
-       #
-       if test "yes" = "$PYTHON_VERSION_CHECK" ; then
+       if test $ax_python_devel_found = yes; then
+          #
+          # Check if you have distutils, else fail
+          #
+          AC_MSG_CHECKING([for the sysconfig Python package])
+          ac_sysconfig_result=`$PYTHON -c "import sysconfig" 2>&1`
+          if test $? -eq 0; then
+               AC_MSG_RESULT([yes])
+               IMPORT_SYSCONFIG="import sysconfig"
+          else
+               AC_MSG_RESULT([no])
+
                AC_MSG_CHECKING([for the distutils Python package])
-               ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
+               ac_sysconfig_result=`$PYTHON -c "from distutils import sysconfig" 2>&1`
                if test $? -eq 0; then
                        AC_MSG_RESULT([yes])
+                       IMPORT_SYSCONFIG="from distutils import sysconfig"
                else
-                       AC_MSG_RESULT([no])
-                       PYTHON_VERSION_CHECK="no"
-                       AC_SUBST([PYTHON_VERSION_CHECK])
                        AC_MSG_WARN([cannot import Python module "distutils".
-       Please check your Python installation. The error was:
-       $ac_distutils_result])
+Please check your Python installation. The error was:
+$ac_sysconfig_result])
+                       if ! $ax_python_devel_optional; then
+                          AC_MSG_ERROR([Giving up])
+                       fi
+                       ax_python_devel_found=no
                        PYTHON_VERSION=""
                fi
+          fi
+       fi
 
-               #
-               # Check for Python include path
-               #
-               AC_MSG_CHECKING([for Python include path])
-               if test -z "$PYTHON_CPPFLAGS"; then
-                       python_path=`$PYTHON -c "import distutils.sysconfig; \
-                               print (distutils.sysconfig.get_python_inc ());"`
-                       plat_python_path=`$PYTHON -c "import distutils.sysconfig; \
-                               print (distutils.sysconfig.get_python_inc (plat_specific=1));"`
-                       if test -n "${python_path}"; then
-                               if test "${plat_python_path}" != "${python_path}"; then
-                                       python_path="-I$python_path -I$plat_python_path"
-                               else
-                                       python_path="-I$python_path"
-                               fi
+       if test $ax_python_devel_found = yes; then
+          #
+          # Check for Python include path
+          #
+          AC_MSG_CHECKING([for Python include path])
+          if test -z "$PYTHON_CPPFLAGS"; then
+               if test "$IMPORT_SYSCONFIG" = "import sysconfig"; then
+                       # sysconfig module has different functions
+                       python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \
+                               print (sysconfig.get_path ('include'));"`
+                       plat_python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \
+                               print (sysconfig.get_path ('platinclude'));"`
+               else
+                       # old distutils way
+                       python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \
+                               print (sysconfig.get_python_inc ());"`
+                       plat_python_path=`$PYTHON -c "$IMPORT_SYSCONFIG; \
+                               print (sysconfig.get_python_inc (plat_specific=1));"`
+               fi
+               if test -n "${python_path}"; then
+                       if test "${plat_python_path}" != "${python_path}"; then
+                               python_path="-I$python_path -I$plat_python_path"
+                       else
+                               python_path="-I$python_path"
                        fi
-                       PYTHON_CPPFLAGS=$python_path
                fi
-               AC_MSG_RESULT([$PYTHON_CPPFLAGS])
-               AC_SUBST([PYTHON_CPPFLAGS])
+               PYTHON_CPPFLAGS=$python_path
+          fi
+          AC_MSG_RESULT([$PYTHON_CPPFLAGS])
+          AC_SUBST([PYTHON_CPPFLAGS])
 
-               #
-               # Check for Python library path
-               #
-               AC_MSG_CHECKING([for Python library path])
-               if test -z "$PYTHON_LIBS"; then
-                       # (makes two attempts to ensure we've got a version number
-                       # from the interpreter)
-                       ac_python_version=`cat<<EOD | $PYTHON -
+          #
+          # Check for Python library path
+          #
+          AC_MSG_CHECKING([for Python library path])
+          if test -z "$PYTHON_LIBS"; then
+               # (makes two attempts to ensure we've got a version number
+               # from the interpreter)
+               ac_python_version=`cat<<EOD | $PYTHON -
 
 # join all versioning strings, on some systems
 # major/minor numbers could be in different list elements
-from distutils.sysconfig import *
+from sysconfig import *
 e = get_config_var('VERSION')
 if e is not None:
        print(e)
 EOD`
 
-                       if test -z "$ac_python_version"; then
-                               if test -n "$PYTHON_VERSION"; then
-                                       ac_python_version=$PYTHON_VERSION
-                               else
-                                       ac_python_version=`$PYTHON -c "import sys; \
-                                               print (sys.version[[:3]])"`
-                               fi
+               if test -z "$ac_python_version"; then
+                       if test -n "$PYTHON_VERSION"; then
+                               ac_python_version=$PYTHON_VERSION
+                       else
+                               ac_python_version=`$PYTHON -c "import sys; \
+                                       print ("%d.%d" % sys.version_info[[:2]])"`
                        fi
+               fi
 
-                       # Make the versioning information available to the compiler
-                       AC_DEFINE_UNQUOTED([HAVE_PYTHON], ["$ac_python_version"],
-                                       [If available, contains the Python version number currently in use.])
+               # Make the versioning information available to the compiler
+               AC_DEFINE_UNQUOTED([HAVE_PYTHON], ["$ac_python_version"],
+                                   [If available, contains the Python version number currently in use.])
 
-                       # First, the library directory:
-                       ac_python_libdir=`cat<<EOD | $PYTHON -
+               # First, the library directory:
+               ac_python_libdir=`cat<<EOD | $PYTHON -
 
 # There should be only one
-import distutils.sysconfig
-e = distutils.sysconfig.get_config_var('LIBDIR')
+$IMPORT_SYSCONFIG
+e = sysconfig.get_config_var('LIBDIR')
 if e is not None:
        print (e)
 EOD`
 
-                       # Now, for the library:
-                       ac_python_library=`cat<<EOD | $PYTHON -
+               # Now, for the library:
+               ac_python_library=`cat<<EOD | $PYTHON -
 
-import distutils.sysconfig
-c = distutils.sysconfig.get_config_vars()
+$IMPORT_SYSCONFIG
+c = sysconfig.get_config_vars()
 if 'LDVERSION' in c:
        print ('python'+c[['LDVERSION']])
 else:
        print ('python'+c[['VERSION']])
 EOD`
 
-                       # This small piece shamelessly adapted from PostgreSQL python macro;
-                       # credits goes to momjian, I think. I'd like to put the right name
-                       # in the credits, if someone can point me in the right direction... ?
-                       #
-                       if test -n "$ac_python_libdir" -a -n "$ac_python_library"
-                       then
-                               # use the official shared library
-                               ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"`
-                               PYTHON_LIBS="-L$ac_python_libdir -l$ac_python_library"
-                       else
-                               # old way: use libpython from python_configdir
-                               ac_python_libdir=`$PYTHON -c \
-                               "from distutils.sysconfig import get_python_lib as f; \
-                               import os; \
-                               print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"`
-                               PYTHON_LIBS="-L$ac_python_libdir -lpython$ac_python_version"
-                       fi
+               # This small piece shamelessly adapted from PostgreSQL python macro;
+               # credits goes to momjian, I think. I'd like to put the right name
+               # in the credits, if someone can point me in the right direction... ?
+               #
+               if test -n "$ac_python_libdir" -a -n "$ac_python_library"
+               then
+                       # use the official shared library
+                       ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"`
+                       PYTHON_LIBS="-L$ac_python_libdir -l$ac_python_library"
+               else
+                       # old way: use libpython from python_configdir
+                       ac_python_libdir=`$PYTHON -c \
+                         "from sysconfig import get_python_lib as f; \
+                         import os; \
+                         print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"`
+                       PYTHON_LIBS="-L$ac_python_libdir -lpython$ac_python_version"
+               fi
 
-                       if test -z "PYTHON_LIBS"; then
-                               PYTHON_VERSION_CHECK="no"
-                               AC_SUBST([PYTHON_VERSION_CHECK])
-                               AC_MSG_WARN([
-       Cannot determine location of your Python DSO. Please check it was installed with
-       dynamic libraries enabled, or try setting PYTHON_LIBS by hand.
-                               ])
+               if test -z "$PYTHON_LIBS"; then
+                       AC_MSG_WARN([
+  Cannot determine location of your Python DSO. Please check it was installed with
+  dynamic libraries enabled, or try setting PYTHON_LIBS by hand.
+                       ])
+                       if ! $ax_python_devel_optional; then
+                          AC_MSG_ERROR([Giving up])
                        fi
+                       ax_python_devel_found=no
+                       PYTHON_VERSION=""
                fi
-               AC_MSG_RESULT([$PYTHON_LIBS])
-               AC_SUBST([PYTHON_LIBS])
+          fi
+       fi
 
-               #
-               # Check for site packages
-               #
-               AC_MSG_CHECKING([for Python site-packages path])
-               if test -z "$PYTHON_SITE_PKG"; then
-                       PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \
-                               print (distutils.sysconfig.get_python_lib(0,0));"`
-               fi
-               AC_MSG_RESULT([$PYTHON_SITE_PKG])
-               AC_SUBST([PYTHON_SITE_PKG])
+       if test $ax_python_devel_found = yes; then
+          AC_MSG_RESULT([$PYTHON_LIBS])
+          AC_SUBST([PYTHON_LIBS])
 
-               #
-               # libraries which must be linked in when embedding
-               #
-               AC_MSG_CHECKING(python extra libraries)
-               if test -z "$PYTHON_EXTRA_LIBS"; then
-               PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
-                       conf = distutils.sysconfig.get_config_var; \
-                       print (conf('LIBS') + ' ' + conf('SYSLIBS'))"`
+          #
+          # Check for site packages
+          #
+          AC_MSG_CHECKING([for Python site-packages path])
+          if test -z "$PYTHON_SITE_PKG"; then
+               if test "$IMPORT_SYSCONFIG" = "import sysconfig"; then
+                       PYTHON_SITE_PKG=`$PYTHON -c "
+$IMPORT_SYSCONFIG;
+if hasattr(sysconfig, 'get_default_scheme'):
+    scheme = sysconfig.get_default_scheme()
+else:
+    scheme = sysconfig._get_default_scheme()
+if scheme == 'posix_local':
+    # Debian's default scheme installs to /usr/local/ but we want to find headers in /usr/
+    scheme = 'posix_prefix'
+prefix = '$prefix'
+if prefix == 'NONE':
+    prefix = '$ac_default_prefix'
+sitedir = sysconfig.get_path('purelib', scheme, vars={'base': prefix})
+print(sitedir)"`
+               else
+                       # distutils.sysconfig way
+                       PYTHON_SITE_PKG=`$PYTHON -c "$IMPORT_SYSCONFIG; \
+                               print (sysconfig.get_python_lib(0,0));"`
                fi
-               AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
-               AC_SUBST(PYTHON_EXTRA_LIBS)
+          fi
+          AC_MSG_RESULT([$PYTHON_SITE_PKG])
+          AC_SUBST([PYTHON_SITE_PKG])
 
-               #
-               # linking flags needed when embedding
-               #
-               AC_MSG_CHECKING(python extra linking flags)
-               if test -z "$PYTHON_EXTRA_LDFLAGS"; then
-                       PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
-                               conf = distutils.sysconfig.get_config_var; \
-                               print (conf('LINKFORSHARED'))"`
+          #
+          # Check for platform-specific site packages
+          #
+          AC_MSG_CHECKING([for Python platform specific site-packages path])
+          if test -z "$PYTHON_PLATFORM_SITE_PKG"; then
+               if test "$IMPORT_SYSCONFIG" = "import sysconfig"; then
+                       PYTHON_PLATFORM_SITE_PKG=`$PYTHON -c "
+$IMPORT_SYSCONFIG;
+if hasattr(sysconfig, 'get_default_scheme'):
+    scheme = sysconfig.get_default_scheme()
+else:
+    scheme = sysconfig._get_default_scheme()
+if scheme == 'posix_local':
+    # Debian's default scheme installs to /usr/local/ but we want to find headers in /usr/
+    scheme = 'posix_prefix'
+prefix = '$prefix'
+if prefix == 'NONE':
+    prefix = '$ac_default_prefix'
+sitedir = sysconfig.get_path('platlib', scheme, vars={'platbase': prefix})
+print(sitedir)"`
+               else
+                       # distutils.sysconfig way
+                       PYTHON_PLATFORM_SITE_PKG=`$PYTHON -c "$IMPORT_SYSCONFIG; \
+                               print (sysconfig.get_python_lib(1,0));"`
                fi
-               AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
-               AC_SUBST(PYTHON_EXTRA_LDFLAGS)
+          fi
+          AC_MSG_RESULT([$PYTHON_PLATFORM_SITE_PKG])
+          AC_SUBST([PYTHON_PLATFORM_SITE_PKG])
 
-               #
-               # final check to see if everything compiles alright
-               #
-               AC_MSG_CHECKING([consistency of all components of python development environment])
-               # save current global flags
-               ac_save_LIBS="$LIBS"
-               ac_save_LDFLAGS="$LDFLAGS"
-               ac_save_CPPFLAGS="$CPPFLAGS"
-               LIBS="$ac_save_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS $PYTHON_EXTRA_LIBS"
-               LDFLAGS="$ac_save_LDFLAGS $PYTHON_EXTRA_LDFLAGS"
-               CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
-               AC_LANG_PUSH([C])
-               AC_LINK_IFELSE([
-                       AC_LANG_PROGRAM([[#include <Python.h>]],
-                                       [[Py_Initialize();]])
-                       ],[pythonexists=yes],[pythonexists=no])
-               AC_LANG_POP([C])
-               # turn back to default flags
-               CPPFLAGS="$ac_save_CPPFLAGS"
-               LIBS="$ac_save_LIBS"
-               LDFLAGS="$ac_save_LDFLAGS"
+          #
+          # libraries which must be linked in when embedding
+          #
+          AC_MSG_CHECKING(python extra libraries)
+          if test -z "$PYTHON_EXTRA_LIBS"; then
+             PYTHON_EXTRA_LIBS=`$PYTHON -c "$IMPORT_SYSCONFIG; \
+                conf = sysconfig.get_config_var; \
+                print (conf('LIBS') + ' ' + conf('SYSLIBS'))"`
+          fi
+          AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
+          AC_SUBST(PYTHON_EXTRA_LIBS)
 
-               AC_MSG_RESULT([$pythonexists])
+          #
+          # linking flags needed when embedding
+          #
+          AC_MSG_CHECKING(python extra linking flags)
+          if test -z "$PYTHON_EXTRA_LDFLAGS"; then
+               PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "$IMPORT_SYSCONFIG; \
+                       conf = sysconfig.get_config_var; \
+                       print (conf('LINKFORSHARED'))"`
+               # Hack for macos, it sticks this in here.
+               PYTHON_EXTRA_LDFLAGS=`echo $PYTHON_EXTRA_LDFLAGS | sed 's/CoreFoundation.*$/CoreFoundation/'`
+          fi
+          AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
+          AC_SUBST(PYTHON_EXTRA_LDFLAGS)
 
-               if test ! "x$pythonexists" = "xyes"; then
-               PYTHON_VERSION_CHECK="no"
-               AC_SUBST([PYTHON_VERSION_CHECK])
-               AC_MSG_WARN([
-       Could not link test program to Python. Maybe the main Python library has been
-       installed in some non-standard library path. If so, pass it to configure,
-       via the LIBS environment variable.
-       Example: ./configure LIBS="-L/usr/non-standard-path/python/lib"
-       ============================================================================
-       ERROR!
-       You probably have to install the development version of the Python package
-       for your distribution.  The exact name of this package varies among them.
-       ============================================================================
-               ])
-               PYTHON_VERSION=""
-               fi
+          #
+          # final check to see if everything compiles alright
+          #
+          AC_MSG_CHECKING([consistency of all components of python development environment])
+          # save current global flags
+          ac_save_LIBS="$LIBS"
+          ac_save_LDFLAGS="$LDFLAGS"
+          ac_save_CPPFLAGS="$CPPFLAGS"
+          LIBS="$ac_save_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS"
+          LDFLAGS="$ac_save_LDFLAGS $PYTHON_EXTRA_LDFLAGS"
+          CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
+          AC_LANG_PUSH([C])
+          AC_LINK_IFELSE([
+               AC_LANG_PROGRAM([[#include <Python.h>]],
+                               [[Py_Initialize();]])
+               ],[pythonexists=yes],[pythonexists=no])
+          AC_LANG_POP([C])
+          # turn back to default flags
+          CPPFLAGS="$ac_save_CPPFLAGS"
+          LIBS="$ac_save_LIBS"
+          LDFLAGS="$ac_save_LDFLAGS"
+
+          AC_MSG_RESULT([$pythonexists])
+
+          if test ! "x$pythonexists" = "xyes"; then
+             AC_MSG_WARN([
+  Could not link test program to Python. Maybe the main Python library has been
+  installed in some non-standard library path. If so, pass it to configure,
+  via the LIBS environment variable.
+  Example: ./configure LIBS="-L/usr/non-standard-path/python/lib"
+  ============================================================================
+   ERROR!
+   You probably have to install the development version of the Python package
+   for your distribution.  The exact name of this package varies among them.
+  ============================================================================
+             ])
+             if ! $ax_python_devel_optional; then
+                AC_MSG_ERROR([Giving up])
+             fi
+             ax_python_devel_found=no
+             PYTHON_VERSION=""
+          fi
        fi
+
        #
        # all done!
        #
index f5e4366..00eb989 100644 (file)
@@ -251,11 +251,15 @@ AC_MSG_RESULT([$enable_utils])
 # Build LNet Unit Test Framework?
 #
 AC_DEFUN([LB_CONFIG_LUTF], [
-AX_PYTHON_DEVEL()
+# Python development libs are optional, disable LUTF is not available
+# if you have python 2 and python3 and python defaults to 2 you can enable
+# python3 here by setting PYTHON_VERSION=3 before calling configure, example:
+#  $ PYTHON_VERSION=3 ./configure [options]
+AX_PYTHON_DEVEL([>= '3.6'], [true])
 AS_IF([test "x$enable_dist" != xno], [
        enable_lutf="yes"
 ], [
-  AS_IF([test "x$PYTHON_VERSION_CHECK" = xno], [
+  AS_IF([test "x$ax_python_devel_found" = xno], [
        enable_lutf="no"
   ], [
        AX_PKG_SWIG(2.0, [ enable_lutf="yes" ],
index f956dbd..7249dfb 100755 (executable)
     if (*$1 == NULL)
        goto fail;
     obj = PyUnicode_FromString(*$1);
+#if SWIG_VERSION >= 0x040300  /* 4.3.0 or later */
+    $result = SWIG_Python_AppendOutput($result,obj,0);
+#else
     $result = SWIG_Python_AppendOutput($result,obj);
+#endif
 %}
 
 /* The malloc'ed pointer is no longer needed, so make sure it is freed. */