123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755 |
- # Copyright 2012, 2013, 2014 Brandon Invergo <brandon@invergo.net>
- #
- # This file is part of pyconfigure. This program is free
- # software; you can redistribute it and/or modify it under the
- # terms of the GNU General Public License as published by the
- # Free Software Foundation, either version 3 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # Under Section 7 of GPL version 3, you are granted additional
- # permissions described in the Autoconf Configure Script Exception,
- # version 3.0, as published by the Free Software Foundation.
- #
- # You should have received a copy of the GNU General Public License
- # and a copy of the Autoconf Configure Script Exception along with
- # this program; see the files COPYINGv3 and COPYING.EXCEPTION
- # respectively. If not, see <http://www.gnu.org/licenses/>.
-
-
- # Many of these macros were adapted from ones written by Andrew Dalke
- # and James Henstridge and are included with the Automake utility
- # under the following copyright terms:
- #
- # Copyright (C) 1999-2012 Free Software Foundation, Inc.
- #
- # This file is free software; the Free Software Foundation
- # gives unlimited permission to copy and/or distribute it,
- # with or without modifications, as long as this notice is preserved.
-
- # Table of Contents:
- #
- # 1. Language selection
- # and routines to produce programs in a given language.
- #
- # 2. Producing programs in a given language.
- #
- # 3. Looking for a compiler
- # And possibly the associated preprocessor.
- #
- # 4. Looking for specific libs & functionality
-
-
- ## ----------------------- ##
- ## 1. Language selection. ##
- ## ----------------------- ##
-
-
- # AC_LANG(Python)
- # ---------------
- AC_LANG_DEFINE([Python], [py], [PY], [PYTHON], [],
- [ac_ext=py
- ac_compile='chmod +x conftest.$ac_ext >&AS_MESSAGE_LOG_FD'
- ac_link='chmod +x conftest.$ac_ext && cp conftest.$ac_ext conftest >&AS_MESSAGE_LOG_FD'
- ])
-
-
- # AC_LANG_PYTHON
- # --------------
- AU_DEFUN([AC_LANG_PYTHON], [AC_LANG(Python)])
-
-
- ## ----------------------- ##
- ## 2. Producing programs. ##
- ## ----------------------- ##
-
-
- # AC_LANG_PROGRAM(Python)([PROLOGUE], [BODY])
- # -------------------------------------------
- m4_define([AC_LANG_PROGRAM(Python)], [dnl
- @%:@!$PYTHON
- $1
- m4_if([$2], [], [], [dnl
- if __name__ == '__main__':
- $2])])
-
-
- # _AC_LANG_IO_PROGRAM(Python)
- # ---------------------------
- # Produce source that performs I/O.
- m4_define([_AC_LANG_IO_PROGRAM(Python)],
- [AC_LANG_PROGRAM([dnl
- import sys
- try:
- h = open('conftest.out')
- except:
- sys.exit(1)
- else:
- close(h)
- sys.exit(0)
- ], [])])
-
-
- # _AC_LANG_CALL(Python)([PROLOGUE], [FUNCTION])
- # ---------------------
- # Produce source that calls FUNCTION
- m4_define([_AC_LANG_CALL(Python)],
- [AC_LANG_PROGRAM([$1], [$2])])
-
-
- ## -------------------------------------------- ##
- ## 3. Looking for Compilers and Interpreters. ##
- ## -------------------------------------------- ##
-
-
- AC_DEFUN([AC_LANG_COMPILER(Python)],
- [AC_REQUIRE([PC_PROG_PYTHON])])
-
-
- # PC_INIT([MIN-VERSION], [MAX-VERSION])
- # -----------------------------
- # Initialize pyconfigure, finding a Python interpreter with a given
- # minimum and/or maximum version.
- AC_DEFUN([PC_INIT],
- [PC_PROG_PYTHON([], [$1], [$2])
- dnl If we found something, do a sanity check that the interpreter really
- dnl has the version its name would suggest.
- m4_ifval([PYTHON],
- [PC_PYTHON_VERIFY_VERSION([>=], [pc_min_ver], [],
- [AC_MSG_FAILURE([No compatible Python interpreter found. If you're sure that you have one, try setting the PYTHON environment variable to the location of the interpreter.])])])
- m4_ifval([PYTHON],
- [PC_PYTHON_VERIFY_VERSION([<=], [pc_max_ver], [],
- [AC_MSG_FAILURE([No compatible Python interpreter found. If you're sure that you have one, try setting the PYTHON environment variable to the location of the interpreter.])])])
- ])# PC_INIT
-
- # PC_PROG_PYTHON([PROG-TO-CHECK-FOR], [MIN-VERSION], [MAX-VERSION])
- # ---------------------------------
- # Find a Python interpreter. Python versions prior to 2.0 are not
- # supported. (2.0 was released on October 16, 2000).
- AC_DEFUN_ONCE([PC_PROG_PYTHON],
- [AC_ARG_VAR([PYTHON], [the Python interpreter])
- dnl The default minimum version is 2.0
- m4_define_default([pc_min_ver], m4_ifval([$2], [$2], [2.0]))
- dnl The default maximum version is 3.3
- m4_define_default([pc_max_ver], m4_ifval([$3], [$3], [4.0]))
- dnl Build up a list of possible interpreter names.
- m4_define_default([_PC_PYTHON_INTERPRETER_LIST],
- [dnl If we want some Python 3 versions (max version >= 3.0),
- dnl also search for "python3"
- m4_if(m4_version_compare(pc_max_ver, [2.9]), [1], [python3], []) \
- dnl If we want some Python 2 versions (min version <= 2.7),
- dnl also search for "python2".
- m4_if(m4_version_compare(pc_min_ver, [2.8]), [-1], [python2], []) \
- dnl Construct a comma-separated list of interpreter names (python2.6,
- dnl python2.7, etc). We only care about the first 3 characters of the
- dnl version strings (major-dot-minor; not
- dnl major-dot-minor-dot-bugfix[-dot-whatever])
- m4_foreach([pc_ver],
- m4_esyscmd_s(seq -s[[", "]] -f["[[%.1f]]"] m4_substr(pc_max_ver, [0], [3]) -0.1 m4_substr(pc_min_ver, [0], [3])),
- dnl Remove python2.8 and python2.9 since they will never exist
- [m4_bmatch(pc_ver, [2.[89]], [], [python]pc_ver)]) \
- [python]])
- dnl Do the actual search at last.
- m4_ifval([$1],
- [AC_PATH_PROGS(PYTHON, [$1 _PC_PYTHON_INTERPRETER_LIST])],
- [AC_PATH_PROGS(PYTHON, [_PC_PYTHON_INTERPRETER_LIST])])
- ])# PC_PROG_PYTHON
-
-
- # PC_PYTHON_PROG_PYTHON_CONFIG(PROG-TO-CHECK-FOR)
- # ----------------------------------------------
- # Find the python-config program
- AC_DEFUN([PC_PYTHON_PROG_PYTHON_CONFIG],
- [AC_REQUIRE([PC_PROG_PYTHON])[]dnl
- AC_ARG_VAR([PYTHON_CONFIG], [the Python-config program])
- dnl python-config's binary name is normally based on the Python interpreter's
- dnl binary name (i.e. python2.7 -> python2.7-config)
- m4_define([_PYTHON_BASENAME], [`basename $PYTHON`])
- m4_ifval([$1],
- [AC_PATH_PROGS(PYTHON_CONFIG, [$1 _PYTHON_BASENAME-config])],
- [AC_PATH_PROG(PYTHON_CONFIG, _PYTHON_BASENAME-config)])
- ]) # PC_PYTHON_PROG_PYTHON_CONFIG
-
-
- # PC_PYTHON_VERIFY_VERSION([RELATION], [VERSION], [ACTION-IF-TRUE], [ACTION-IF-FALSE])
- # ---------------------------------------------------------------------------
- # Run ACTION-IF-TRUE if the Python interpreter PROG has version [RELATION] VERSION.
- # i.e if RELATION is "<", check if PROG has a version number less than VERSION.
- # Run ACTION-IF-FALSE otherwise.
- # Specify RELATION as any mathematical comparison "<", ">", "<=", ">=", "==" or "!="
- # This test uses sys.hexversion instead of the string equivalent (first
- # word of sys.version), in order to cope with versions such as 2.2c1.
- # This supports Python 2.0 or higher. (2.0 was released on October 16, 2000).
- AC_DEFUN([PC_PYTHON_VERIFY_VERSION],
- [m4_define([pc_python_safe_ver], m4_bpatsubsts($2, [\.], [_]))
- AC_CACHE_CHECK([if Python $1 '$2'],
- [[pc_cv_python_req_version_]pc_python_safe_ver],
- [AC_LANG_PUSH(Python)[]dnl
- AC_RUN_IFELSE(
- [AC_LANG_PROGRAM([dnl
- import sys
- ], [dnl
- # split strings by '.' and convert to numeric. Append some zeros
- # because we need at least 4 digits for the hex conversion.
- # map returns an iterator in Python 3.0 and a list in 2.x
- reqver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]]
- reqverhex = 0
- # xrange is not present in Python 3.0 and range returns an iterator
- for i in list(range(4)):
- reqverhex = (reqverhex << 8) + reqver[[i]]
- # the final 8 bits are "0xf0" for final versions, which are all
- # we'll test against, since it's doubtful that a released software
- # will depend on an alpha- or beta-state Python.
- reqverhex += 0xf0
- if sys.hexversion $1 reqverhex:
- sys.exit()
- else:
- sys.exit(1)
- ])],
- [[pc_cv_python_req_version_]pc_python_safe_ver=yes],
- [[pc_cv_python_req_version_]pc_python_safe_ver=no])
- AC_LANG_POP(Python)[]dnl
- ])
- AS_IF([test "$[pc_cv_python_req_version_]pc_python_safe_ver" = "no"], [$4], [$3])
- ])# PC_PYTHON_VERIFY_VERSION
-
-
- # PC_PYTHON_CHECK_VERSION
- # -----------------------
- # Query Python for its version number. Getting [:3] seems to be
- # the best way to do this; it's what "site.py" does in the standard
- # library.
- AC_DEFUN([PC_PYTHON_CHECK_VERSION],
- [AC_REQUIRE([PC_PROG_PYTHON])[]dnl
- AC_CACHE_CHECK([for $1 version],
- [pc_cv_python_version],
- [AC_LANG_PUSH(Python)[]dnl
- AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
- import sys
- ], [dnl
- sys.stdout.write(sys.version[[:3]])
- ])],
- [pc_cv_python_version=`./conftest`],
- [AC_MSG_FAILURE([failed to run Python program])])
- AC_LANG_POP(Python)[]dnl
- ])
- AC_SUBST([PYTHON_VERSION], [$pc_cv_python_version])
- ])# PC_PYTHON_CHECK_VERSION
-
-
- # PC_PYTHON_CHECK_PREFIX
- # ----------------------
- # Use the value of $prefix for the corresponding value of
- # PYTHON_PREFIX. This is made a distinct variable so it can be
- # overridden if need be. However, general consensus is that you
- # shouldn't need this ability.
- AC_DEFUN([PC_PYTHON_CHECK_PREFIX],
- [AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
- dnl Try to get it with python-config otherwise do it from within Python
- AC_CACHE_CHECK([for Python prefix], [pc_cv_python_prefix],
- [if test -x "$PYTHON_CONFIG"; then
- pc_cv_python_prefix=`$PYTHON_CONFIG --prefix 2>&AS_MESSAGE_LOG_FD`
- else
- AC_LANG_PUSH(Python)[]dnl
- AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
- import sys
- ], [dnl
- sys.stdout.write(sys.prefix)
- ])], [pc_cv_python_prefix=`./conftest`;
- if test $? != 0; then
- AC_MSG_FAILURE([could not determine Python prefix])
- fi],
- [AC_MSG_FAILURE([failed to run Python program])])
- AC_LANG_POP(Python)[]dnl
- fi])
- AC_SUBST([PYTHON_PREFIX], [$pc_cv_python_prefix])])
-
-
- # PC_PYTHON_CHECK_EXEC_PREFIX
- # --------------------------
- # Like above, but for $exec_prefix
- AC_DEFUN([PC_PYTHON_CHECK_EXEC_PREFIX],
- [AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
- dnl Try to get it with python-config otherwise do it from within Python
- AC_CACHE_CHECK([for Python exec-prefix], [pc_cv_python_exec_prefix],
- [if test -x "$PYTHON_CONFIG"; then
- pc_cv_python_exec_prefix=`$PYTHON_CONFIG --exec-prefix 2>&AS_MESSAGE_LOG_FD`
- else
- AC_LANG_PUSH(Python)[]dnl
- AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
- import sys
- ], [dnl
- sys.stdout.write(sys.exec_prefix)
- ])],
- [pc_cv_python_exec_prefix=`./conftest`;
- if test $? != 0; then
- AC_MSG_FAILURE([could not determine Python exec_prefix])
- fi],
- [AC_MSG_FAILURE([failed to run Python program])])
- AC_LANG_POP(Python)[]dnl
- fi
- ])
- AC_SUBST([PYTHON_EXEC_PREFIX], [$pc_cv_python_exec_prefix])])
-
-
- # PC_PYTHON_CHECK_INCLUDES
- # ------------------------
- # Find the Python header file include flags (ie
- # '-I/usr/include/python')
- AC_DEFUN([PC_PYTHON_CHECK_INCLUDES],
- [AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
- dnl Try to find the headers location with python-config otherwise guess
- AC_CACHE_CHECK([for Python includes], [pc_cv_python_includes],
- [if test -x "$PYTHON_CONFIG"; then
- pc_cv_python_includes=`$PYTHON_CONFIG --includes 2>&AS_MESSAGE_LOG_FD`
- else
- pc_cv_python_includes="[-I$includedir/$_PYTHON_BASENAME]m4_ifdef(PYTHON_ABI_FLAGS,
- PYTHON_ABI_FLAGS,)"
- fi
- ])
- AC_SUBST([PYTHON_INCLUDES], [$pc_cv_python_includes])])
-
-
- # PC_PYTHON_CHECK_HEADERS([ACTION-IF-PRESENT], [ACTION-IF-ABSENT])
- # -----------------------
- # Check for the presence and usability of Python.h
- AC_DEFUN([PC_PYTHON_CHECK_HEADERS],
- [AC_REQUIRE([PC_PYTHON_CHECK_INCLUDES])[]dnl
- pc_cflags_store=$CPPFLAGS
- CPPFLAGS="$CFLAGS $PYTHON_INCLUDES"
- AC_CHECK_HEADER([Python.h], [$1], [$2])
- CPPFLAGS=$pc_cflags_store
- ])
-
-
- # PC_PYTHON_CHECK_LIBS
- # --------------------
- # Find the Python lib flags (ie '-lpython')
- AC_DEFUN([PC_PYTHON_CHECK_LIBS],
- [AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
- dnl Try to find the lib flags with python-config otherwise guess
- AC_CACHE_CHECK([for Python libs], [pc_cv_python_libs],
- [if test -x "$PYTHON_CONFIG"; then
- pc_cv_python_libs=`$PYTHON_CONFIG --libs 2>&AS_MESSAGE_LOG_FD`
- else
- pc_cv_python_libs="[-l$_PYTHON_BASENAME]m4_ifdef(PYTHON_ABI_FLAGS, PYTHON_ABI_FLAGS,)"
- fi
- ])
- AC_SUBST([PYTHON_LIBS], [$pc_cv_python_libs])])
-
-
- # PC_PYTHON_TEST_LIBS(LIBRARY-FUNCTION, [ACTION-IF-PRESENT], [ACTION-IF-ABSENT])
- # -------------------
- # Verify that the Python libs can be loaded
- AC_DEFUN([PC_PYTHON_TEST_LIBS],
- [AC_REQUIRE([PC_PYTHON_CHECK_LIBS])[]dnl
- pc_libflags_store=$LIBS
- for lflag in $PYTHON_LIBS; do
- case $lflag in
- -lpython*@:}@
- LIBS="$LIBS $lflag"
- pc_libpython=`echo $lflag | sed -e 's/^-l//'`
- ;;
- *@:}@;;
- esac
- done
- AC_CHECK_LIB([$pc_libpython], [$1], [$2], [$3])])
-
-
- # PC_PYTHON_CHECK_CFLAGS
- # ----------------------
- # Find the Python CFLAGS
- AC_DEFUN([PC_PYTHON_CHECK_CFLAGS],
- [AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
- dnl Try to find the CFLAGS with python-config otherwise give up
- AC_CACHE_CHECK([for Python CFLAGS], [pc_cv_python_cflags],
- [if test -x "$PYTHON_CONFIG"; then
- pc_cv_python_cflags=`$PYTHON_CONFIG --cflags 2>&AS_MESSAGE_LOG_FD`
- else
- pc_cv_python_cflags=
- fi
- ])
- AC_SUBST([PYTHON_CFLAGS], [$pc_cv_python_cflags])])
-
-
- # PC_PYTHON_CHECK_LDFLAGS
- # -----------------------
- # Find the Python LDFLAGS
- AC_DEFUN([PC_PYTHON_CHECK_LDFLAGS],
- [AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
- dnl Try to find the LDFLAGS with python-config otherwise give up
- AC_CACHE_CHECK([for Python LDFLAGS], [pc_cv_python_ldflags],
- [if test -x "$PYTHON_CONFIG"; then
- pc_cv_python_ldflags=`$PYTHON_CONFIG --ldflags 2>&AS_MESSAGE_LOG_FD`
- else
- pc_cv_python_ldflags=
- fi
- ])
- AC_SUBST([PYTHON_LDFLAGS], [$pc_cv_python_ldflags])])
-
-
- # PC_PYTHON_CHECK_EXTENSION_SUFFIX
- # --------------------------------
- # Find the Python extension suffix (i.e. '.cpython-32.so')
- AC_DEFUN([PC_PYTHON_CHECK_EXTENSION_SUFFIX],
- [AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
- dnl Try to find the suffix with python-config otherwise give up
- AC_CACHE_CHECK([for Python extension suffix], [pc_cv_python_extension_suffix],
- [if test -x "$PYTHON_CONFIG"; then
- pc_cv_python_extension_suffix=`$PYTHON_CONFIG --extension-suffix 2>&AS_MESSAGE_LOG_FD`
- else
- pc_cv_python_extension_suffix=
- fi
- ])
- AC_SUBST([PYTHON_EXTENSION_SUFFIX], [$pc_cv_python_extension_suffix])])
-
-
- # PC_PYTHON_CHECK_ABI_FLAGS
- # -------------------------
- # Find the Python ABI flags
- AC_DEFUN([PC_PYTHON_CHECK_ABI_FLAGS],
- [AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
- dnl Try to find the ABI flags with python-config otherwise give up
- AC_CACHE_CHECK([for Python ABI flags], [pc_cv_python_abi_flags],
- [if test -x "$PYTHON_CONFIG"; then
- pc_cv_python_abi_flags=`$PYTHON_CONFIG --abiflags 2>&AS_MESSAGE_LOG_FD`
- else
- pc_cv_python_abi_flags=
- fi
- ])
- AC_SUBST([PYTHON_ABI_FLAGS], [$pc_cv_python_abi_flags])])
-
-
- # PC_PYTHON_CHECK_PLATFORM
- # ------------------------
- # At times (like when building shared libraries) you may want
- # to know which OS platform Python thinks this is.
- AC_DEFUN([PC_PYTHON_CHECK_PLATFORM],
- [AC_REQUIRE([PC_PROG_PYTHON])[]dnl
- dnl Get the platform from within Python (sys.platform)
- AC_CACHE_CHECK([for Python platform], [pc_cv_python_platform],
- [AC_LANG_PUSH(Python)[]dnl
- AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
- import sys
- ], [dnl
- sys.stdout.write(sys.platform)
- ])], [pc_cv_python_platform=`./conftest`;
- if test $? != 0; then
- AC_MSG_FAILURE([could not determine Python platform])
- fi],
- [AC_MSG_FAILURE([failed to run Python program])])
- AC_LANG_POP(Python)[]dnl
- ])
- AC_SUBST([PYTHON_PLATFORM], [$pc_cv_python_platform])
- ])
-
-
- # PC_PYTHON_CHECK_SITE_DIR
- # ---------------------
- # The directory to which new libraries are installed (i.e. the
- # "site-packages" directory.
- AC_DEFUN([PC_PYTHON_CHECK_SITE_DIR],
- [AC_REQUIRE([PC_PROG_PYTHON])AC_REQUIRE([PC_PYTHON_CHECK_PREFIX])[]dnl
- AC_CACHE_CHECK([for Python site-packages directory],
- [pc_cv_python_site_dir],
- [AC_LANG_PUSH(Python)[]dnl
- if test "x$prefix" = xNONE
- then
- pc_py_prefix=$ac_default_prefix
- else
- pc_py_prefix=$prefix
- fi
- AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
- import sys
- from platform import python_implementation
- # sysconfig in CPython 2.7 doesn't work in virtualenv
- # <https://github.com/pypa/virtualenv/issues/118>
- try:
- import sysconfig
- except:
- can_use_sysconfig = False
- else:
- can_use_sysconfig = True
- if can_use_sysconfig:
- # Can't use sysconfig in CPython > 3.0 in debian since it's broken :
- # <https://bugs.launchpad.net/ubuntu/+source/python3-defaults/+bug/1408092>
- if python_implementation() == "CPython" (
- float(sys.version[[:3]]) > 3.0 or sys.version[[:3]] == '2.7'):
- can_use_sysconfig = False
- if not can_use_sysconfig:
- from distutils import sysconfig
- sitedir = sysconfig.get_python_lib(False, False, prefix='$pc_py_prefix')
- else:
- sitedir = sysconfig.get_path('purelib', vars={'base':'$pc_py_prefix'})
- ], [dnl
- sys.stdout.write(sitedir)
- ])], [pc_cv_python_site_dir=`./conftest`],
- [AC_MSG_FAILURE([failed to run Python program])])
- AC_LANG_POP(Python)[]dnl
- case $pc_cv_python_site_dir in
- $pc_py_prefix*)
- pc__strip_prefix=`echo "$pc_py_prefix" | sed 's|.|.|g'`
- pc_cv_python_site_dir=`echo "$pc_cv_python_site_dir" | sed "s,^$pc__strip_prefix/,,"`
- ;;
- *)
- case $pc_py_prefix in
- /usr|/System*) ;;
- *)
- pc_cv_python_site_dir=lib/python$PYTHON_VERSION/site-packages
- ;;
- esac
- ;;
- esac
- ])
- AC_SUBST([pythondir], [\${prefix}/$pc_cv_python_site_dir])])# PC_PYTHON_CHECK_SITE_DIR
-
- # PC_PYTHON_SITE_PACKAGE_DIR
- # --------------------------
- # $PACKAGE directory under PYTHON_SITE_DIR
- AC_DEFUN([PC_PYTHON_SITE_PACKAGE_DIR],
- [AC_REQUIRE([PC_PYTHON_CHECK_SITE_DIR])[]dnl
- AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE_NAME])])
-
-
- # PC_PYTHON_CHECK_EXEC_DIR
- # ------------------------
- # directory for installing python extension modules (shared libraries)
- AC_DEFUN([PC_PYTHON_CHECK_EXEC_DIR],
- [AC_REQUIRE([PC_PROG_PYTHON])AC_REQUIRE([PC_PYTHON_CHECK_EXEC_PREFIX])[]dnl
- AC_CACHE_CHECK([for Python extension module directory],
- [pc_cv_python_exec_dir],
- [AC_LANG_PUSH(Python)[]dnl
- if test "x$pc_cv_python_exec_prefix" = xNONE
- then
- pc_py_exec_prefix=$pc_cv_python_prefix
- else
- pc_py_exec_prefix=$pc_cv_python_exec_prefix
- fi
- AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
- import sys
- from platform import python_implementation
- # sysconfig in CPython 2.7 doesn't work in virtualenv
- # <https://github.com/pypa/virtualenv/issues/118>
- try:
- import sysconfig
- except:
- can_use_sysconfig = False
- else:
- can_use_sysconfig = True
- if can_use_sysconfig:
- if python_implementation() == "CPython" and sys.version[[:3]] == '2.7':
- can_use_sysconfig = False
- if not can_use_sysconfig:
- from distutils import sysconfig
- sitedir = sysconfig.get_python_lib(False, False, prefix='$pc_py__exec_prefix')
- else:
- sitedir = sysconfig.get_path('purelib', vars={'platbase':'$pc_py_exec_prefix'})
- ], [dnl
- sys.stdout.write(sitedir)
- ])], [pc_cv_python_exec_dir=`./conftest`],
- [AC_MSG_FAILURE([failed to run Python program])])
- AC_LANG_POP(Python)[]dnl
- case $pc_cv_python_exec_dir in
- $pc_py_exec_prefix*)
- pc__strip_prefix=`echo "$pc_py_exec_prefix" | sed 's|.|.|g'`
- pc_cv_python_exec_dir=`echo "$pc_cv_python_exec_dir" | sed "s,^$pc__strip_prefix/,,"`
- ;;
- *)
- case $pc_py_exec_prefix in
- /usr|/System*) ;;
- *)
- pc_cv_python_exec_dir=lib/python$PYTHON_VERSION/site-packages
- ;;
- esac
- ;;
- esac
- ])
- AC_SUBST([pyexecdir], [\${exec_prefix}/$pc_cv_python_pyexecdir])]) #PY_PYTHON_CHECK_EXEC_LIB_DIR
-
-
- # PC_PYTHON_EXEC_PACKAGE_DIR
- # --------------------------
- # $PACKAGE directory under PYTHON_SITE_DIR
- AC_DEFUN([PC_PYTHON_EXEC_PACKAGE_DIR],
- [AC_REQUIRE([PC_PYTHON_CHECK_EXEC_DIR])[]dnl
- AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE_NAME])])
-
-
- ## -------------------------------------------- ##
- ## 4. Looking for specific libs & functionality ##
- ## -------------------------------------------- ##
-
-
- # PC_PYTHON_CHECK_MODULE(LIBRARY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
- # ----------------------------------------------------------------------
- # Macro for checking if a Python library is installed
- AC_DEFUN([PC_PYTHON_CHECK_MODULE],
- [AC_REQUIRE([PC_PROG_PYTHON])[]dnl
- m4_define([pc_python_safe_mod], m4_bpatsubsts($1, [\.], [_]))
- AC_CACHE_CHECK([for Python '$1' library],
- [[pc_cv_python_module_]pc_python_safe_mod],
- [AC_LANG_PUSH(Python)[]dnl
- AC_RUN_IFELSE(
- [AC_LANG_PROGRAM([dnl
- import sys
- try:
- import $1
- except:
- sys.exit(1)
- else:
- sys.exit(0)
- ], [])],
- [[pc_cv_python_module_]pc_python_safe_mod="yes"],
- [[pc_cv_python_module_]pc_python_safe_mod="no"])
- AC_LANG_POP(Python)[]dnl
- ])
- AS_IF([test "$[pc_cv_python_module_]pc_python_safe_mod" = "no"], [$3], [$2])
- ])# PC_PYTHON_CHECK_MODULE
-
-
- # PC_PYTHON_CHECK_FUNC([LIBRARY], FUNCTION, ARGS, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
- # ---------------------------------------------------------------------------------------
- # Check to see if a given function call, optionally from a module, can
- # be successfully called
- AC_DEFUN([PC_PYTHON_CHECK_FUNC],
- [AC_REQUIRE([PC_PROG_PYTHON])[]dnl
- m4_define([pc_python_safe_mod], m4_bpatsubsts($1, [\.], [_]))
- AC_CACHE_CHECK([for Python m4_ifnblank($1, '$1.$2()', '$2()') function],
- [[pc_cv_python_func_]pc_python_safe_mod[_$2]],
- [AC_LANG_PUSH(Python)[]dnl
- AC_RUN_IFELSE(
- [AC_LANG_PROGRAM([dnl
- import sys
- m4_ifnblank([$1], [dnl
- try:
- import $1
- except:
- sys.exit(1)
- ], [])],
- [
- m4_ifnblank([$1], [
- try:
- $1.$2($3)], [
- try:
- $2($3)])
- except:
- sys.exit(1)
- else:
- sys.exit(0)
- ])],
- [[pc_cv_python_func_]pc_python_safe_mod[_$2]="yes"],
- [[pc_cv_python_func_]pc_python_safe_mod[_$2]="no"])
- AC_LANG_POP(Python)[]dnl
- ])
- AS_IF([test "$[pc_cv_python_func_]pc_python_safe_mod[_$2]" = "no"], [$5], [$4])
- ])# PC_PYTHON_CHECK_FUNC
-
- # PC_PYTHON_CHECK_MODULE_MATCH_VERSION(LIBRARY, VERSION, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND)
- # -------------------------------------------------
- # Macro for checking if a Python library with this version is installed
- #
- AC_DEFUN([PC_PYTHON_CHECK_MODULE_MATCH_VERSION],
- [AC_REQUIRE([PC_PROG_PYTHON])[]dnl
- m4_define([pc_python_safe_mod], m4_bpatsubsts($1, [\.], [_]))
- AC_CACHE_CHECK([for Python '$1' library version '$2'],
- [[pc_cv_python_module_version]pc_python_safe_mod],
- [AC_LANG_PUSH(Python)[]dnl
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([dnl
- import sys
- try:
- import $1
- except:
- version='no'
- else:
- for vers_attr in ('__version__', 'version', 'version_info'):
- if hasattr($1, vers_attr):
- version = getattr($1, vers_attr)
- break
- else:
- version = 'unknown'
- sys.stdout.write(version)
- ], [])],
- [[pc_cv_python_module_version]pc_python_safe_mod=`./conftest`],
- [AC_MSG_FAILURE([failed to run Python program])])
- AC_LANG_POP(Python)[]dnl
- ])
-
- AS_IF([test "x$[pc_cv_python_module_version]pc_python_safe_mod" = "x$2" ],
- [$3],
- [ AS_IF(
- [test "x$[pc_cv_python_module_version]pc_python_safe_mod" = 'unknown'],
- AC_MSG_WARN([Unable to fetch version of Python module $1]))
- [$4]
- ])
- ])# PC_PYTHON_CHECK_MODULE_VERSION
-
-
- # PC_PYTHON_CHECK_MODULE_VERSION(LIBRARY, MIN-VERSION, MAX-VERSION, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND)
- # -------------------------------------------------
- # Macro for checking if a Python library with this version is installed
- #
- AC_DEFUN([PC_PYTHON_CHECK_MODULE_VERSION],
- [AC_REQUIRE([PC_PROG_PYTHON])[]dnl
- m4_define([pc_python_safe_mod], m4_bpatsubsts($1, [\.], [_]))
- m4_append([pc_python_safe_mod], m4_bpatsubsts($2, [\.], [_]))
- m4_append([pc_python_safe_mod], m4_bpatsubsts($3, [\.], [_]))
- AC_CACHE_CHECK(
- [for Python '$1' library m4_ifnblank([$2],['$2' <= ]) version m4_ifnblank([$3], [<= '$3'])],
- [[pc_cv_python_module_version]pc_python_safe_mod],
- [AC_LANG_PUSH(Python)[]dnl
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([dnl
- import sys
- def cmp_vers(v1,v2):
- v1 = v1.split('.')
- v2 = v2.split('.')
- for i in range(max([len](v1), [len](v2))):
- v1v = int(v1[[i]] if i < [len](v1) else 0)
- v2v = int(v2[[i]] if i < [len](v2) else 0)
- if v1v > v2v:
- return 1
- if v1v < v2v:
- return -1
- return 0
- try:
- import $1
- except:
- result='not found'
- else:
- result='yes'
- vmin = '$2'
- vmax = '$3'
- for vers_attr in ('__version__', 'version', 'version_info'):
- if hasattr($1, vers_attr):
- version = getattr($1, vers_attr)
- break
- else:
- result = 'unknown'
- if version not in ('unknonwn', 'no'):
- failmsg = "but "+ version + " found"
- if [len](vmin) > 0:
- if cmp_vers(version, vmin) < 0:
- result = failmsg
- if [len](vmax) > 0:
- if cmp_vers(version, vmax) > 0:
- result = failmsg
-
- sys.stdout.write(result)
- ], [])],
- [[pc_cv_python_module_version]pc_python_safe_mod=`./conftest`],
- [AC_MSG_FAILURE([failed to run Python program])])
- AC_LANG_POP(Python)[]dnl
- ])
- AS_IF( [test "$[pc_cv_python_module_version]pc_python_safe_mod" = "yes"],
- [$4],
- [ AS_IF(
- [test "x$[pc_cv_python_module_version]pc_python_safe_mod" = 'unknown'],
- AC_MSG_WARN([Unable to fetch version of Python module $1]))
- [$5]
- ])
- ])# PC_PYTHON_CHECK_MODULE_VERSION
|