1*b7579f77SDag-Erling SmørgravAC_DEFUN([AC_PYTHON_DEVEL],[ 2*b7579f77SDag-Erling Smørgrav # 3*b7579f77SDag-Erling Smørgrav # Allow the use of a (user set) custom python version 4*b7579f77SDag-Erling Smørgrav # 5*b7579f77SDag-Erling Smørgrav AC_ARG_VAR([PYTHON_VERSION],[The installed Python 6*b7579f77SDag-Erling Smørgrav version to use, for example '2.3'. This string 7*b7579f77SDag-Erling Smørgrav will be appended to the Python interpreter 8*b7579f77SDag-Erling Smørgrav canonical name.]) 9*b7579f77SDag-Erling Smørgrav 10*b7579f77SDag-Erling Smørgrav AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]]) 11*b7579f77SDag-Erling Smørgrav if test -z "$PYTHON"; then 12*b7579f77SDag-Erling Smørgrav AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path]) 13*b7579f77SDag-Erling Smørgrav PYTHON_VERSION="" 14*b7579f77SDag-Erling Smørgrav fi 15*b7579f77SDag-Erling Smørgrav 16*b7579f77SDag-Erling Smørgrav if test -z "$PYTHON_VERSION"; then 17*b7579f77SDag-Erling Smørgrav PYTHON_VERSION=`$PYTHON -c "import sys, string; \ 18*b7579f77SDag-Erling Smørgrav print string.split(sys.version)[[0]]"` 19*b7579f77SDag-Erling Smørgrav fi 20*b7579f77SDag-Erling Smørgrav 21*b7579f77SDag-Erling Smørgrav # 22*b7579f77SDag-Erling Smørgrav # Check for a version of Python >= 2.1.0 23*b7579f77SDag-Erling Smørgrav # 24*b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING([for a version of Python >= '2.1.0']) 25*b7579f77SDag-Erling Smørgrav ac_supports_python_ver=`$PYTHON -c "import sys, string; \ 26*b7579f77SDag-Erling Smørgrav ver = string.split(sys.version)[[0]]; \ 27*b7579f77SDag-Erling Smørgrav print ver >= '2.1.0'"` 28*b7579f77SDag-Erling Smørgrav if test "$ac_supports_python_ver" != "True"; then 29*b7579f77SDag-Erling Smørgrav if test -z "$PYTHON_NOVERSIONCHECK"; then 30*b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([no]) 31*b7579f77SDag-Erling Smørgrav AC_MSG_FAILURE([ 32*b7579f77SDag-Erling SmørgravThis version of the AC@&t@_PYTHON_DEVEL macro 33*b7579f77SDag-Erling Smørgravdoesn't work properly with versions of Python before 34*b7579f77SDag-Erling Smørgrav2.1.0. You may need to re-run configure, setting the 35*b7579f77SDag-Erling Smørgravvariables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG, 36*b7579f77SDag-Erling SmørgravPYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand. 37*b7579f77SDag-Erling SmørgravMoreover, to disable this check, set PYTHON_NOVERSIONCHECK 38*b7579f77SDag-Erling Smørgravto something else than an empty string. 39*b7579f77SDag-Erling Smørgrav]) 40*b7579f77SDag-Erling Smørgrav else 41*b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([skip at user request]) 42*b7579f77SDag-Erling Smørgrav fi 43*b7579f77SDag-Erling Smørgrav else 44*b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([yes]) 45*b7579f77SDag-Erling Smørgrav fi 46*b7579f77SDag-Erling Smørgrav 47*b7579f77SDag-Erling Smørgrav # 48*b7579f77SDag-Erling Smørgrav # if the macro parameter ``version'' is set, honour it 49*b7579f77SDag-Erling Smørgrav # 50*b7579f77SDag-Erling Smørgrav if test -n "$1"; then 51*b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING([for a version of Python $1]) 52*b7579f77SDag-Erling Smørgrav ac_supports_python_ver=`$PYTHON -c "import sys, string; \ 53*b7579f77SDag-Erling Smørgrav ver = string.split(sys.version)[[0]]; \ 54*b7579f77SDag-Erling Smørgrav print ver $1"` 55*b7579f77SDag-Erling Smørgrav if test "$ac_supports_python_ver" = "True"; then 56*b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([yes]) 57*b7579f77SDag-Erling Smørgrav else 58*b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([no]) 59*b7579f77SDag-Erling Smørgrav AC_MSG_ERROR([this package requires Python $1. 60*b7579f77SDag-Erling SmørgravIf you have it installed, but it isn't the default Python 61*b7579f77SDag-Erling Smørgravinterpreter in your system path, please pass the PYTHON_VERSION 62*b7579f77SDag-Erling Smørgravvariable to configure. See ``configure --help'' for reference. 63*b7579f77SDag-Erling Smørgrav]) 64*b7579f77SDag-Erling Smørgrav PYTHON_VERSION="" 65*b7579f77SDag-Erling Smørgrav fi 66*b7579f77SDag-Erling Smørgrav fi 67*b7579f77SDag-Erling Smørgrav 68*b7579f77SDag-Erling Smørgrav # 69*b7579f77SDag-Erling Smørgrav # Check if you have distutils, else fail 70*b7579f77SDag-Erling Smørgrav # 71*b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING([for the distutils Python package]) 72*b7579f77SDag-Erling Smørgrav ac_distutils_result=`$PYTHON -c "import distutils" 2>&1` 73*b7579f77SDag-Erling Smørgrav if test -z "$ac_distutils_result"; then 74*b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([yes]) 75*b7579f77SDag-Erling Smørgrav else 76*b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([no]) 77*b7579f77SDag-Erling Smørgrav AC_MSG_ERROR([cannot import Python module "distutils". 78*b7579f77SDag-Erling SmørgravPlease check your Python installation. The error was: 79*b7579f77SDag-Erling Smørgrav$ac_distutils_result]) 80*b7579f77SDag-Erling Smørgrav PYTHON_VERSION="" 81*b7579f77SDag-Erling Smørgrav fi 82*b7579f77SDag-Erling Smørgrav 83*b7579f77SDag-Erling Smørgrav # 84*b7579f77SDag-Erling Smørgrav # Check for Python include path 85*b7579f77SDag-Erling Smørgrav # 86*b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING([for Python include path]) 87*b7579f77SDag-Erling Smørgrav if test -z "$PYTHON_CPPFLAGS"; then 88*b7579f77SDag-Erling Smørgrav python_path=`$PYTHON -c "import distutils.sysconfig; \ 89*b7579f77SDag-Erling Smørgrav print distutils.sysconfig.get_python_inc();"` 90*b7579f77SDag-Erling Smørgrav if test -n "${python_path}"; then 91*b7579f77SDag-Erling Smørgrav python_path="-I$python_path" 92*b7579f77SDag-Erling Smørgrav fi 93*b7579f77SDag-Erling Smørgrav PYTHON_CPPFLAGS=$python_path 94*b7579f77SDag-Erling Smørgrav fi 95*b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([$PYTHON_CPPFLAGS]) 96*b7579f77SDag-Erling Smørgrav AC_SUBST([PYTHON_CPPFLAGS]) 97*b7579f77SDag-Erling Smørgrav 98*b7579f77SDag-Erling Smørgrav # 99*b7579f77SDag-Erling Smørgrav # Check for Python library path 100*b7579f77SDag-Erling Smørgrav # 101*b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING([for Python library path]) 102*b7579f77SDag-Erling Smørgrav if test -z "$PYTHON_LDFLAGS"; then 103*b7579f77SDag-Erling Smørgrav # (makes two attempts to ensure we've got a version number 104*b7579f77SDag-Erling Smørgrav # from the interpreter) 105*b7579f77SDag-Erling Smørgrav py_version=`$PYTHON -c "from distutils.sysconfig import *; \ 106*b7579f77SDag-Erling Smørgrav from string import join; \ 107*b7579f77SDag-Erling Smørgrav print join(get_config_vars('VERSION'))"` 108*b7579f77SDag-Erling Smørgrav if test "$py_version" = "[None]"; then 109*b7579f77SDag-Erling Smørgrav if test -n "$PYTHON_VERSION"; then 110*b7579f77SDag-Erling Smørgrav py_version=$PYTHON_VERSION 111*b7579f77SDag-Erling Smørgrav else 112*b7579f77SDag-Erling Smørgrav py_version=`$PYTHON -c "import sys; \ 113*b7579f77SDag-Erling Smørgrav print sys.version[[:3]]"` 114*b7579f77SDag-Erling Smørgrav fi 115*b7579f77SDag-Erling Smørgrav fi 116*b7579f77SDag-Erling Smørgrav 117*b7579f77SDag-Erling Smørgrav PYTHON_LDFLAGS=`$PYTHON -c "from distutils.sysconfig import *; \ 118*b7579f77SDag-Erling Smørgrav from string import join; \ 119*b7579f77SDag-Erling Smørgrav print '-L' + get_python_lib(0,1), \ 120*b7579f77SDag-Erling Smørgrav '-L' + os.path.dirname(get_python_lib(0,1)), \ 121*b7579f77SDag-Erling Smørgrav '-lpython';"`$py_version 122*b7579f77SDag-Erling Smørgrav fi 123*b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([$PYTHON_LDFLAGS]) 124*b7579f77SDag-Erling Smørgrav AC_SUBST([PYTHON_LDFLAGS]) 125*b7579f77SDag-Erling Smørgrav 126*b7579f77SDag-Erling Smørgrav # 127*b7579f77SDag-Erling Smørgrav # Check for site packages 128*b7579f77SDag-Erling Smørgrav # 129*b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING([for Python site-packages path]) 130*b7579f77SDag-Erling Smørgrav if test -z "$PYTHON_SITE_PKG"; then 131*b7579f77SDag-Erling Smørgrav PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \ 132*b7579f77SDag-Erling Smørgrav print distutils.sysconfig.get_python_lib(1,0);"` 133*b7579f77SDag-Erling Smørgrav fi 134*b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([$PYTHON_SITE_PKG]) 135*b7579f77SDag-Erling Smørgrav AC_SUBST([PYTHON_SITE_PKG]) 136*b7579f77SDag-Erling Smørgrav 137*b7579f77SDag-Erling Smørgrav # 138*b7579f77SDag-Erling Smørgrav # libraries which must be linked in when embedding 139*b7579f77SDag-Erling Smørgrav # 140*b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING(python extra libraries) 141*b7579f77SDag-Erling Smørgrav if test -z "$PYTHON_EXTRA_LIBS"; then 142*b7579f77SDag-Erling Smørgrav PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \ 143*b7579f77SDag-Erling Smørgrav conf = distutils.sysconfig.get_config_var; \ 144*b7579f77SDag-Erling Smørgrav print conf('LOCALMODLIBS'), conf('LIBS')"` 145*b7579f77SDag-Erling Smørgrav fi 146*b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([$PYTHON_EXTRA_LIBS]) 147*b7579f77SDag-Erling Smørgrav AC_SUBST(PYTHON_EXTRA_LIBS) 148*b7579f77SDag-Erling Smørgrav 149*b7579f77SDag-Erling Smørgrav # 150*b7579f77SDag-Erling Smørgrav # linking flags needed when embedding 151*b7579f77SDag-Erling Smørgrav # 152*b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING(python extra linking flags) 153*b7579f77SDag-Erling Smørgrav if test -z "$PYTHON_EXTRA_LDFLAGS"; then 154*b7579f77SDag-Erling Smørgrav PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \ 155*b7579f77SDag-Erling Smørgrav conf = distutils.sysconfig.get_config_var; \ 156*b7579f77SDag-Erling Smørgrav print conf('LINKFORSHARED')"` 157*b7579f77SDag-Erling Smørgrav fi 158*b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS]) 159*b7579f77SDag-Erling Smørgrav AC_SUBST(PYTHON_EXTRA_LDFLAGS) 160*b7579f77SDag-Erling Smørgrav 161*b7579f77SDag-Erling Smørgrav # 162*b7579f77SDag-Erling Smørgrav # final check to see if everything compiles alright 163*b7579f77SDag-Erling Smørgrav # 164*b7579f77SDag-Erling Smørgrav AC_MSG_CHECKING([consistency of all components of python development environment]) 165*b7579f77SDag-Erling Smørgrav AC_LANG_PUSH([C]) 166*b7579f77SDag-Erling Smørgrav # save current global flags 167*b7579f77SDag-Erling Smørgrav LIBS="$ac_save_LIBS $PYTHON_LDFLAGS" 168*b7579f77SDag-Erling Smørgrav CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS" 169*b7579f77SDag-Erling Smørgrav AC_TRY_LINK([ 170*b7579f77SDag-Erling Smørgrav #include <Python.h> 171*b7579f77SDag-Erling Smørgrav ],[ 172*b7579f77SDag-Erling Smørgrav Py_Initialize(); 173*b7579f77SDag-Erling Smørgrav ],[pythonexists=yes],[pythonexists=no]) 174*b7579f77SDag-Erling Smørgrav 175*b7579f77SDag-Erling Smørgrav AC_MSG_RESULT([$pythonexists]) 176*b7579f77SDag-Erling Smørgrav 177*b7579f77SDag-Erling Smørgrav if test ! "$pythonexists" = "yes"; then 178*b7579f77SDag-Erling Smørgrav AC_MSG_ERROR([ 179*b7579f77SDag-Erling Smørgrav Could not link test program to Python. Maybe the main Python library has been 180*b7579f77SDag-Erling Smørgrav installed in some non-standard library path. If so, pass it to configure, 181*b7579f77SDag-Erling Smørgrav via the LDFLAGS environment variable. 182*b7579f77SDag-Erling Smørgrav Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib" 183*b7579f77SDag-Erling Smørgrav ============================================================================ 184*b7579f77SDag-Erling Smørgrav ERROR! 185*b7579f77SDag-Erling Smørgrav You probably have to install the development version of the Python package 186*b7579f77SDag-Erling Smørgrav for your distribution. The exact name of this package varies among them. 187*b7579f77SDag-Erling Smørgrav ============================================================================ 188*b7579f77SDag-Erling Smørgrav ]) 189*b7579f77SDag-Erling Smørgrav PYTHON_VERSION="" 190*b7579f77SDag-Erling Smørgrav fi 191*b7579f77SDag-Erling Smørgrav AC_LANG_POP 192*b7579f77SDag-Erling Smørgrav # turn back to default flags 193*b7579f77SDag-Erling Smørgrav CPPFLAGS="$ac_save_CPPFLAGS" 194*b7579f77SDag-Erling Smørgrav LIBS="$ac_save_LIBS" 195*b7579f77SDag-Erling Smørgrav 196*b7579f77SDag-Erling Smørgrav # 197*b7579f77SDag-Erling Smørgrav # all done! 198*b7579f77SDag-Erling Smørgrav # 199*b7579f77SDag-Erling Smørgrav]) 200*b7579f77SDag-Erling Smørgrav 201