1b7579f77SDag-Erling SmørgravAC_DEFUN([AC_PYTHON_DEVEL],[ 2b7579f77SDag-Erling Smørgrav # 3b7579f77SDag-Erling Smørgrav # Allow the use of a (user set) custom python version 4b7579f77SDag-Erling Smørgrav # 5b7579f77SDag-Erling Smørgrav AC_ARG_VAR([PYTHON_VERSION],[The installed Python 6b7579f77SDag-Erling Smørgrav version to use, for example '2.3'. This string 7b7579f77SDag-Erling Smørgrav will be appended to the Python interpreter 8b7579f77SDag-Erling Smørgrav canonical name.]) 9b7579f77SDag-Erling Smørgrav 10b7579f77SDag-Erling Smørgrav AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]]) 11b7579f77SDag-Erling Smørgrav if test -z "$PYTHON"; then 12*56850988SCy Schubert AC_MSG_ERROR([Cannot find 'python$PYTHON_VERSION' in your system path. You can use the environment variable 'PYTHON_VERSION=version_number' for an explicit version.]) 13b7579f77SDag-Erling Smørgrav PYTHON_VERSION="" 14b7579f77SDag-Erling Smørgrav fi 15b7579f77SDag-Erling Smørgrav 16b7579f77SDag-Erling Smørgrav if test -z "$PYTHON_VERSION"; then 17ff825849SDag-Erling Smørgrav PYTHON_VERSION=`$PYTHON -c "import sys; \ 18ff825849SDag-Erling Smørgrav print(sys.version.split()[[0]])"` 19b7579f77SDag-Erling Smørgrav fi 208f76bb7dSCy Schubert # calculate the version number components. 218f76bb7dSCy Schubert [ 228f76bb7dSCy Schubert v="$PYTHON_VERSION" 238f76bb7dSCy Schubert PYTHON_VERSION_MAJOR=`echo $v | sed 's/[^0-9].*//'` 248f76bb7dSCy Schubert if test -z "$PYTHON_VERSION_MAJOR"; then PYTHON_VERSION_MAJOR="0"; fi 258f76bb7dSCy Schubert v=`echo $v | sed -e 's/^[0-9]*$//' -e 's/[0-9]*[^0-9]//'` 268f76bb7dSCy Schubert PYTHON_VERSION_MINOR=`echo $v | sed 's/[^0-9].*//'` 278f76bb7dSCy Schubert if test -z "$PYTHON_VERSION_MINOR"; then PYTHON_VERSION_MINOR="0"; fi 288f76bb7dSCy Schubert v=`echo $v | sed -e 's/^[0-9]*$//' -e 's/[0-9]*[^0-9]//'` 298f76bb7dSCy Schubert PYTHON_VERSION_PATCH=`echo $v | sed 's/[^0-9].*//'` 308f76bb7dSCy Schubert if test -z "$PYTHON_VERSION_PATCH"; then PYTHON_VERSION_PATCH="0"; fi 318f76bb7dSCy Schubert ] 32b7579f77SDag-Erling Smørgrav 338f76bb7dSCy Schubert # For some systems, sysconfig exists, but has the wrong paths, 348f76bb7dSCy Schubert # on Debian 10, for python 2.7 and 3.7. So, we check the version, 358f76bb7dSCy Schubert # and for older versions try distutils.sysconfig first. For newer 368f76bb7dSCy Schubert # versions>=3.10, where distutils.sysconfig is deprecated, use 378f76bb7dSCy Schubert # sysconfig first and then attempt the other one. 388f76bb7dSCy Schubert py_distutils_first="no" 398f76bb7dSCy Schubert if test $PYTHON_VERSION_MAJOR -lt 3; then 408f76bb7dSCy Schubert py_distutils_first="yes" 418f76bb7dSCy Schubert fi 428f76bb7dSCy Schubert if test $PYTHON_VERSION_MAJOR -eq 3 -a $PYTHON_VERSION_MINOR -lt 10; then 438f76bb7dSCy Schubert py_distutils_first="yes" 448f76bb7dSCy Schubert fi 458f76bb7dSCy Schubert 468f76bb7dSCy Schubert # Check if you have the first module 478f76bb7dSCy Schubert if test "$py_distutils_first" = "yes"; then m="distutils"; else m="sysconfig"; fi 488f76bb7dSCy Schubert sysconfig_module="" 498f76bb7dSCy Schubert AC_MSG_CHECKING([for the $m Python module]) 508f76bb7dSCy Schubert if ac_modulecheck_result1=`$PYTHON -c "import $m" 2>&1`; then 51a39a5a69SCy Schubert AC_MSG_RESULT([yes]) 528f76bb7dSCy Schubert sysconfig_module="$m" 53a39a5a69SCy Schubert else 54a39a5a69SCy Schubert AC_MSG_RESULT([no]) 558f76bb7dSCy Schubert fi 56a39a5a69SCy Schubert 578f76bb7dSCy Schubert # if not found, try the other one. 588f76bb7dSCy Schubert if test -z "$sysconfig_module"; then 598f76bb7dSCy Schubert if test "$py_distutils_first" = "yes"; then m2="sysconfig"; else m2="distutils"; fi 608f76bb7dSCy Schubert AC_MSG_CHECKING([for the $m2 Python module]) 618f76bb7dSCy Schubert if ac_modulecheck_result2=`$PYTHON -c "import $m2" 2>&1`; then 62b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([yes]) 638f76bb7dSCy Schubert sysconfig_module="$m2" 64b7579f77SDag-Erling Smørgrav else 65b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([no]) 668f76bb7dSCy Schubert AC_MSG_ERROR([cannot import Python module "$m", or "$m2". 678f76bb7dSCy Schubert Please check your Python installation. The errors are: 688f76bb7dSCy Schubert $m 698f76bb7dSCy Schubert $ac_modulecheck_result1 708f76bb7dSCy Schubert $m2 718f76bb7dSCy Schubert $ac_modulecheck_result2]) 72b7579f77SDag-Erling Smørgrav PYTHON_VERSION="" 73b7579f77SDag-Erling Smørgrav fi 74a39a5a69SCy Schubert fi 758f76bb7dSCy Schubert if test "$sysconfig_module" = "distutils"; then sysconfig_module="distutils.sysconfig"; fi 76a39a5a69SCy Schubert 77b7579f77SDag-Erling Smørgrav # 78b7579f77SDag-Erling Smørgrav # Check for Python include path 79b7579f77SDag-Erling Smørgrav # 80b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING([for Python include path]) 81b7579f77SDag-Erling Smørgrav if test -z "$PYTHON_CPPFLAGS"; then 82a39a5a69SCy Schubert if test "$sysconfig_module" = "sysconfig"; then 83a39a5a69SCy Schubert python_path=`$PYTHON -c 'import sysconfig; \ 84a39a5a69SCy Schubert print(sysconfig.get_path("include"));'` 85a39a5a69SCy Schubert else 86b7579f77SDag-Erling Smørgrav python_path=`$PYTHON -c "import distutils.sysconfig; \ 87ff825849SDag-Erling Smørgrav print(distutils.sysconfig.get_python_inc());"` 88a39a5a69SCy Schubert fi 89b7579f77SDag-Erling Smørgrav if test -n "${python_path}"; then 90b7579f77SDag-Erling Smørgrav python_path="-I$python_path" 91b7579f77SDag-Erling Smørgrav fi 92b7579f77SDag-Erling Smørgrav PYTHON_CPPFLAGS=$python_path 93b7579f77SDag-Erling Smørgrav fi 94b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([$PYTHON_CPPFLAGS]) 95b7579f77SDag-Erling Smørgrav AC_SUBST([PYTHON_CPPFLAGS]) 96b7579f77SDag-Erling Smørgrav 97b7579f77SDag-Erling Smørgrav # 98b7579f77SDag-Erling Smørgrav # Check for Python library path 99b7579f77SDag-Erling Smørgrav # 100b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING([for Python library path]) 101b7579f77SDag-Erling Smørgrav if test -z "$PYTHON_LDFLAGS"; then 102a39a5a69SCy Schubert PYTHON_LDFLAGS=`$PYTHON -c "from $sysconfig_module import *; \ 103b5663de9SDag-Erling Smørgrav print('-L'+get_config_var('LIBDIR')+' -L'+get_config_var('LIBDEST')+' '+get_config_var('BLDLIBRARY'));"` 104b7579f77SDag-Erling Smørgrav fi 105b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([$PYTHON_LDFLAGS]) 106b7579f77SDag-Erling Smørgrav AC_SUBST([PYTHON_LDFLAGS]) 107b7579f77SDag-Erling Smørgrav 10825039b37SCy Schubert if test -z "$PYTHON_LIBDIR"; then 109a39a5a69SCy Schubert PYTHON_LIBDIR=`$PYTHON -c "from $sysconfig_module import *; \ 11025039b37SCy Schubert print(get_config_var('LIBDIR'));"` 11125039b37SCy Schubert fi 11225039b37SCy Schubert 113b7579f77SDag-Erling Smørgrav # 114b7579f77SDag-Erling Smørgrav # Check for site packages 115b7579f77SDag-Erling Smørgrav # 116b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING([for Python site-packages path]) 117b7579f77SDag-Erling Smørgrav if test -z "$PYTHON_SITE_PKG"; then 118a39a5a69SCy Schubert if test "$sysconfig_module" = "sysconfig"; then 119a39a5a69SCy Schubert PYTHON_SITE_PKG=`$PYTHON -c 'import sysconfig; \ 120a39a5a69SCy Schubert print(sysconfig.get_path("platlib"));'` 121a39a5a69SCy Schubert else 122b7579f77SDag-Erling Smørgrav PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \ 123ff825849SDag-Erling Smørgrav print(distutils.sysconfig.get_python_lib(1,0));"` 124b7579f77SDag-Erling Smørgrav fi 125a39a5a69SCy Schubert fi 126b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([$PYTHON_SITE_PKG]) 127b7579f77SDag-Erling Smørgrav AC_SUBST([PYTHON_SITE_PKG]) 128b7579f77SDag-Erling Smørgrav 129b7579f77SDag-Erling Smørgrav # 130b7579f77SDag-Erling Smørgrav # final check to see if everything compiles alright 131b7579f77SDag-Erling Smørgrav # 132b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING([consistency of all components of python development environment]) 133b7579f77SDag-Erling Smørgrav AC_LANG_PUSH([C]) 134b7579f77SDag-Erling Smørgrav # save current global flags 1358ed2b524SDag-Erling Smørgrav ac_save_LIBS="$LIBS" 1368ed2b524SDag-Erling Smørgrav ac_save_CPPFLAGS="$CPPFLAGS" 1378ed2b524SDag-Erling Smørgrav 1388ed2b524SDag-Erling Smørgrav LIBS="$LIBS $PYTHON_LDFLAGS" 1398ed2b524SDag-Erling Smørgrav CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" 140f44e67d1SCy Schubert AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 141b7579f77SDag-Erling Smørgrav #include <Python.h> 142f44e67d1SCy Schubert ]],[[ 143b7579f77SDag-Erling Smørgrav Py_Initialize(); 144f44e67d1SCy Schubert ]])],[pythonexists=yes],[pythonexists=no]) 145b7579f77SDag-Erling Smørgrav 146b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([$pythonexists]) 147b7579f77SDag-Erling Smørgrav 148b7579f77SDag-Erling Smørgrav if test ! "$pythonexists" = "yes"; then 149b7579f77SDag-Erling Smørgrav AC_MSG_ERROR([ 150b7579f77SDag-Erling Smørgrav Could not link test program to Python. Maybe the main Python library has been 151b7579f77SDag-Erling Smørgrav installed in some non-standard library path. If so, pass it to configure, 152b7579f77SDag-Erling Smørgrav via the LDFLAGS environment variable. 153b7579f77SDag-Erling Smørgrav Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib" 154b7579f77SDag-Erling Smørgrav ============================================================================ 155b7579f77SDag-Erling Smørgrav ERROR! 156b7579f77SDag-Erling Smørgrav You probably have to install the development version of the Python package 157b7579f77SDag-Erling Smørgrav for your distribution. The exact name of this package varies among them. 158b7579f77SDag-Erling Smørgrav ============================================================================ 159b7579f77SDag-Erling Smørgrav ]) 160b7579f77SDag-Erling Smørgrav PYTHON_VERSION="" 161b7579f77SDag-Erling Smørgrav fi 162b7579f77SDag-Erling Smørgrav AC_LANG_POP 163b7579f77SDag-Erling Smørgrav # turn back to default flags 164b7579f77SDag-Erling Smørgrav CPPFLAGS="$ac_save_CPPFLAGS" 165b7579f77SDag-Erling Smørgrav LIBS="$ac_save_LIBS" 166b7579f77SDag-Erling Smørgrav 167b7579f77SDag-Erling Smørgrav # 168b7579f77SDag-Erling Smørgrav # all done! 169b7579f77SDag-Erling Smørgrav # 170b7579f77SDag-Erling Smørgrav]) 171b7579f77SDag-Erling Smørgrav 172