1# =========================================================================== 2# http://www.gnu.org/software/autoconf-archive/ax_python_devel.html 3# =========================================================================== 4# 5# SYNOPSIS 6# 7# AX_PYTHON_DEVEL([version]) 8# 9# DESCRIPTION 10# 11# Note: Defines as a precious variable "PYTHON_VERSION". Don't override it 12# in your configure.ac. 13# 14# This macro checks for Python and tries to get the include path to 15# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS) 16# output variables. It also exports $(PYTHON_EXTRA_LIBS) and 17# $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code. 18# 19# You can search for some particular version of Python by passing a 20# parameter to this macro, for example ">= '2.3.1'", or "== '2.4'". Please 21# note that you *have* to pass also an operator along with the version to 22# match, and pay special attention to the single quotes surrounding the 23# version number. Don't use "PYTHON_VERSION" for this: that environment 24# variable is declared as precious and thus reserved for the end-user. 25# 26# This macro should work for all versions of Python >= 2.1.0. As an end 27# user, you can disable the check for the python version by setting the 28# PYTHON_NOVERSIONCHECK environment variable to something else than the 29# empty string. 30# 31# If you need to use this macro for an older Python version, please 32# contact the authors. We're always open for feedback. 33# 34# LICENSE 35# 36# Copyright (c) 2009 Sebastian Huber <sebastian-huber@web.de> 37# Copyright (c) 2009 Alan W. Irwin 38# Copyright (c) 2009 Rafael Laboissiere <rafael@laboissiere.net> 39# Copyright (c) 2009 Andrew Collier 40# Copyright (c) 2009 Matteo Settenvini <matteo@member.fsf.org> 41# Copyright (c) 2009 Horst Knorr <hk_classes@knoda.org> 42# Copyright (c) 2013 Daniel Mullner <muellner@math.stanford.edu> 43# 44# This program is free software: you can redistribute it and/or modify it 45# under the terms of the GNU General Public License as published by the 46# Free Software Foundation, either version 3 of the License, or (at your 47# option) any later version. 48# 49# This program is distributed in the hope that it will be useful, but 50# WITHOUT ANY WARRANTY; without even the implied warranty of 51# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 52# Public License for more details. 53# 54# You should have received a copy of the GNU General Public License along 55# with this program. If not, see <http://www.gnu.org/licenses/>. 56# 57# As a special exception, the respective Autoconf Macro's copyright owner 58# gives unlimited permission to copy, distribute and modify the configure 59# scripts that are the output of Autoconf when processing the Macro. You 60# need not follow the terms of the GNU General Public License when using 61# or distributing such scripts, even though portions of the text of the 62# Macro appear in them. The GNU General Public License (GPL) does govern 63# all other use of the material that constitutes the Autoconf Macro. 64# 65# This special exception to the GPL applies to versions of the Autoconf 66# Macro released by the Autoconf Archive. When you make and distribute a 67# modified version of the Autoconf Macro, you may extend this special 68# exception to the GPL to apply to your modified version as well. 69 70#serial 16 71 72AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL]) 73AC_DEFUN([AX_PYTHON_DEVEL],[ 74 # 75 # Allow the use of a (user set) custom python version 76 # 77 AC_ARG_VAR([PYTHON_VERSION],[The installed Python 78 version to use, for example '2.3'. This string 79 will be appended to the Python interpreter 80 canonical name.]) 81 82 AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]]) 83 if test -z "$PYTHON"; then 84 AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path]) 85 PYTHON_VERSION="" 86 fi 87 88 # 89 # Check for a version of Python >= 2.1.0 90 # 91 AC_MSG_CHECKING([for a version of Python >= '2.1.0']) 92 ac_supports_python_ver=`$PYTHON -c "import sys; \ 93 ver = sys.version.split ()[[0]]; \ 94 print (ver >= '2.1.0')"` 95 if test "$ac_supports_python_ver" != "True"; then 96 if test -z "$PYTHON_NOVERSIONCHECK"; then 97 AC_MSG_RESULT([no]) 98 AC_MSG_FAILURE([ 99This version of the AC@&t@_PYTHON_DEVEL macro 100doesn't work properly with versions of Python before 1012.1.0. You may need to re-run configure, setting the 102variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG, 103PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand. 104Moreover, to disable this check, set PYTHON_NOVERSIONCHECK 105to something else than an empty string. 106]) 107 else 108 AC_MSG_RESULT([skip at user request]) 109 fi 110 else 111 AC_MSG_RESULT([yes]) 112 fi 113 114 # 115 # if the macro parameter ``version'' is set, honour it 116 # 117 if test -n "$1"; then 118 AC_MSG_CHECKING([for a version of Python $1]) 119 ac_supports_python_ver=`$PYTHON -c "import sys; \ 120 ver = sys.version.split ()[[0]]; \ 121 print (ver $1)"` 122 if test "$ac_supports_python_ver" = "True"; then 123 AC_MSG_RESULT([yes]) 124 else 125 AC_MSG_RESULT([no]) 126 AC_MSG_ERROR([this package requires Python $1. 127If you have it installed, but it isn't the default Python 128interpreter in your system path, please pass the PYTHON_VERSION 129variable to configure. See ``configure --help'' for reference. 130]) 131 PYTHON_VERSION="" 132 fi 133 fi 134 135 # 136 # Check if you have distutils, else fail 137 # 138 AC_MSG_CHECKING([for the distutils Python package]) 139 ac_distutils_result=`$PYTHON -c "import distutils" 2>&1` 140 if test -z "$ac_distutils_result"; then 141 AC_MSG_RESULT([yes]) 142 else 143 AC_MSG_RESULT([no]) 144 AC_MSG_ERROR([cannot import Python module "distutils". 145Please check your Python installation. The error was: 146$ac_distutils_result]) 147 PYTHON_VERSION="" 148 fi 149 150 # 151 # Check for Python include path 152 # 153 AC_MSG_CHECKING([for Python include path]) 154 if test -z "$PYTHON_CPPFLAGS"; then 155 python_path=`$PYTHON -c "import distutils.sysconfig; \ 156 print (distutils.sysconfig.get_python_inc ());"` 157 plat_python_path=`$PYTHON -c "import distutils.sysconfig; \ 158 print (distutils.sysconfig.get_python_inc (plat_specific=1));"` 159 if test -n "${python_path}"; then 160 if test "${plat_python_path}" != "${python_path}"; then 161 python_path="-I$python_path -I$plat_python_path" 162 else 163 python_path="-I$python_path" 164 fi 165 fi 166 PYTHON_CPPFLAGS=$python_path 167 fi 168 AC_MSG_RESULT([$PYTHON_CPPFLAGS]) 169 AC_SUBST([PYTHON_CPPFLAGS]) 170 171 # 172 # Check for Python library path 173 # 174 AC_MSG_CHECKING([for Python library path]) 175 if test -z "$PYTHON_LDFLAGS"; then 176 # (makes two attempts to ensure we've got a version number 177 # from the interpreter) 178 ac_python_version=`cat<<EOD | $PYTHON - 179 180# join all versioning strings, on some systems 181# major/minor numbers could be in different list elements 182from distutils.sysconfig import * 183e = get_config_var('VERSION') 184if e is not None: 185 print(e) 186EOD` 187 188 if test -z "$ac_python_version"; then 189 if test -n "$PYTHON_VERSION"; then 190 ac_python_version=$PYTHON_VERSION 191 else 192 ac_python_version=`$PYTHON -c "import sys; \ 193 print (sys.version[[:3]])"` 194 fi 195 fi 196 197 # Make the versioning information available to the compiler 198 AC_DEFINE_UNQUOTED([HAVE_PYTHON], ["$ac_python_version"], 199 [If available, contains the Python version number currently in use.]) 200 201 # First, the library directory: 202 ac_python_libdir=`cat<<EOD | $PYTHON - 203 204# There should be only one 205import distutils.sysconfig 206e = distutils.sysconfig.get_config_var('LIBDIR') 207if e is not None: 208 print (e) 209EOD` 210 211 # Now, for the library: 212 ac_python_library=`cat<<EOD | $PYTHON - 213 214import distutils.sysconfig 215c = distutils.sysconfig.get_config_vars() 216if 'LDVERSION' in c: 217 print ('python'+c[['LDVERSION']]) 218else: 219 print ('python'+c[['VERSION']]) 220EOD` 221 222 # This small piece shamelessly adapted from PostgreSQL python macro; 223 # credits goes to momjian, I think. I'd like to put the right name 224 # in the credits, if someone can point me in the right direction... ? 225 # 226 if test -n "$ac_python_libdir" -a -n "$ac_python_library" 227 then 228 # use the official shared library 229 ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"` 230 PYTHON_LDFLAGS="-L$ac_python_libdir -l$ac_python_library" 231 else 232 # old way: use libpython from python_configdir 233 ac_python_libdir=`$PYTHON -c \ 234 "from distutils.sysconfig import get_python_lib as f; \ 235 import os; \ 236 print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"` 237 PYTHON_LDFLAGS="-L$ac_python_libdir -lpython$ac_python_version" 238 fi 239 240 if test -z "PYTHON_LDFLAGS"; then 241 AC_MSG_ERROR([ 242 Cannot determine location of your Python DSO. Please check it was installed with 243 dynamic libraries enabled, or try setting PYTHON_LDFLAGS by hand. 244 ]) 245 fi 246 fi 247 AC_MSG_RESULT([$PYTHON_LDFLAGS]) 248 AC_SUBST([PYTHON_LDFLAGS]) 249 250 # 251 # Check for site packages 252 # 253 AC_MSG_CHECKING([for Python site-packages path]) 254 if test -z "$PYTHON_SITE_PKG"; then 255 PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \ 256 print (distutils.sysconfig.get_python_lib(1,0));"` 257 fi 258 AC_MSG_RESULT([$PYTHON_SITE_PKG]) 259 AC_SUBST([PYTHON_SITE_PKG]) 260 261 # 262 # libraries which must be linked in when embedding 263 # 264 AC_MSG_CHECKING(python extra libraries) 265 if test -z "$PYTHON_EXTRA_LIBS"; then 266 PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \ 267 conf = distutils.sysconfig.get_config_var; \ 268 print (conf('LIBS'))"` 269 fi 270 AC_MSG_RESULT([$PYTHON_EXTRA_LIBS]) 271 AC_SUBST(PYTHON_EXTRA_LIBS) 272 273 # 274 # linking flags needed when embedding 275 # 276 AC_MSG_CHECKING(python extra linking flags) 277 if test -z "$PYTHON_EXTRA_LDFLAGS"; then 278 PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \ 279 conf = distutils.sysconfig.get_config_var; \ 280 print (conf('LINKFORSHARED'))"` 281 fi 282 AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS]) 283 AC_SUBST(PYTHON_EXTRA_LDFLAGS) 284 285 # 286 # final check to see if everything compiles alright 287 # 288 AC_MSG_CHECKING([consistency of all components of python development environment]) 289 # save current global flags 290 ac_save_LIBS="$LIBS" 291 ac_save_CPPFLAGS="$CPPFLAGS" 292 LIBS="$ac_save_LIBS $PYTHON_LDFLAGS $PYTHON_EXTRA_LDFLAGS $PYTHON_EXTRA_LIBS" 293 CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS" 294 AC_LANG_PUSH([C]) 295 AC_LINK_IFELSE([ 296 AC_LANG_PROGRAM([[#include <Python.h>]], 297 [[Py_Initialize();]]) 298 ],[pythonexists=yes],[pythonexists=no]) 299 AC_LANG_POP([C]) 300 # turn back to default flags 301 CPPFLAGS="$ac_save_CPPFLAGS" 302 LIBS="$ac_save_LIBS" 303 304 AC_MSG_RESULT([$pythonexists]) 305 306 if test ! "x$pythonexists" = "xyes"; then 307 AC_MSG_FAILURE([ 308 Could not link test program to Python. Maybe the main Python library has been 309 installed in some non-standard library path. If so, pass it to configure, 310 via the LDFLAGS environment variable. 311 Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib" 312 ============================================================================ 313 ERROR! 314 You probably have to install the development version of the Python package 315 for your distribution. The exact name of this package varies among them. 316 ============================================================================ 317 ]) 318 PYTHON_VERSION="" 319 fi 320 321 # 322 # all done! 323 # 324]) 325