diff options
Diffstat (limited to 'm4/ax_python_devel.m4')
| -rw-r--r-- | m4/ax_python_devel.m4 | 327 |
1 files changed, 327 insertions, 0 deletions
diff --git a/m4/ax_python_devel.m4 b/m4/ax_python_devel.m4 new file mode 100644 index 0000000..44dbd83 --- /dev/null +++ b/m4/ax_python_devel.m4 | |||
| @@ -0,0 +1,327 @@ | |||
| 1 | # =========================================================================== | ||
| 2 | # https://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_LIBS) output | ||
| 16 | # 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 <https://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 21 | ||
| 71 | |||
| 72 | AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL]) | ||
| 73 | AC_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([ | ||
| 99 | This version of the AC@&t@_PYTHON_DEVEL macro | ||
| 100 | doesn't work properly with versions of Python before | ||
| 101 | 2.1.0. You may need to re-run configure, setting the | ||
| 102 | variables PYTHON_CPPFLAGS, PYTHON_LIBS, PYTHON_SITE_PKG, | ||
| 103 | PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand. | ||
| 104 | Moreover, to disable this check, set PYTHON_NOVERSIONCHECK | ||
| 105 | to 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. | ||
| 127 | If you have it installed, but it isn't the default Python | ||
| 128 | interpreter in your system path, please pass the PYTHON_VERSION | ||
| 129 | variable 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 $? -eq 0; then | ||
| 141 | AC_MSG_RESULT([yes]) | ||
| 142 | else | ||
| 143 | AC_MSG_RESULT([no]) | ||
| 144 | AC_MSG_ERROR([cannot import Python module "distutils". | ||
| 145 | Please 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_LIBS"; 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 | ||
| 182 | from distutils.sysconfig import * | ||
| 183 | e = get_config_var('VERSION') | ||
| 184 | if e is not None: | ||
| 185 | print(e) | ||
| 186 | EOD` | ||
| 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 | ||
| 205 | import distutils.sysconfig | ||
| 206 | e = distutils.sysconfig.get_config_var('LIBDIR') | ||
| 207 | if e is not None: | ||
| 208 | print (e) | ||
| 209 | EOD` | ||
| 210 | |||
| 211 | # Now, for the library: | ||
| 212 | ac_python_library=`cat<<EOD | $PYTHON - | ||
| 213 | |||
| 214 | import distutils.sysconfig | ||
| 215 | c = distutils.sysconfig.get_config_vars() | ||
| 216 | if 'LDVERSION' in c: | ||
| 217 | print ('python'+c[['LDVERSION']]) | ||
| 218 | else: | ||
| 219 | print ('python'+c[['VERSION']]) | ||
| 220 | EOD` | ||
| 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_LIBS="-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_LIBS="-L$ac_python_libdir -lpython$ac_python_version" | ||
| 238 | fi | ||
| 239 | |||
| 240 | if test -z "PYTHON_LIBS"; 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_LIBS by hand. | ||
| 244 | ]) | ||
| 245 | fi | ||
| 246 | fi | ||
| 247 | AC_MSG_RESULT([$PYTHON_LIBS]) | ||
| 248 | AC_SUBST([PYTHON_LIBS]) | ||
| 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(0,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') + ' ' + conf('SYSLIBS'))"` | ||
| 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_LDFLAGS="$LDFLAGS" | ||
| 292 | ac_save_CPPFLAGS="$CPPFLAGS" | ||
| 293 | LIBS="$ac_save_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS $PYTHON_EXTRA_LIBS" | ||
| 294 | LDFLAGS="$ac_save_LDFLAGS $PYTHON_EXTRA_LDFLAGS" | ||
| 295 | CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS" | ||
| 296 | AC_LANG_PUSH([C]) | ||
| 297 | AC_LINK_IFELSE([ | ||
| 298 | AC_LANG_PROGRAM([[#include <Python.h>]], | ||
| 299 | [[Py_Initialize();]]) | ||
| 300 | ],[pythonexists=yes],[pythonexists=no]) | ||
| 301 | AC_LANG_POP([C]) | ||
| 302 | # turn back to default flags | ||
| 303 | CPPFLAGS="$ac_save_CPPFLAGS" | ||
| 304 | LIBS="$ac_save_LIBS" | ||
| 305 | LDFLAGS="$ac_save_LDFLAGS" | ||
| 306 | |||
| 307 | AC_MSG_RESULT([$pythonexists]) | ||
| 308 | |||
| 309 | if test ! "x$pythonexists" = "xyes"; then | ||
| 310 | AC_MSG_FAILURE([ | ||
| 311 | Could not link test program to Python. Maybe the main Python library has been | ||
| 312 | installed in some non-standard library path. If so, pass it to configure, | ||
| 313 | via the LIBS environment variable. | ||
| 314 | Example: ./configure LIBS="-L/usr/non-standard-path/python/lib" | ||
| 315 | ============================================================================ | ||
| 316 | ERROR! | ||
| 317 | You probably have to install the development version of the Python package | ||
| 318 | for your distribution. The exact name of this package varies among them. | ||
| 319 | ============================================================================ | ||
| 320 | ]) | ||
| 321 | PYTHON_VERSION="" | ||
| 322 | fi | ||
| 323 | |||
| 324 | # | ||
| 325 | # all done! | ||
| 326 | # | ||
| 327 | ]) | ||
