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