123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647 |
- 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'
- ])
- AU_DEFUN([AC_LANG_PYTHON], [AC_LANG(Python)])
- m4_define([AC_LANG_PROGRAM(Python)], [dnl
- @%:@!$PYTHON
- $1
- m4_if([$2], [], [], [dnl
- if __name__ == '__main__':
- $2])])
- 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)
- ], [])])
- m4_define([_AC_LANG_CALL(Python)],
- [AC_LANG_PROGRAM([$1], [$2])])
- AC_DEFUN([AC_LANG_COMPILER(Python)],
- [AC_REQUIRE([PC_PROG_PYTHON])])
- 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.])])])
- ])
- 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],
- [[python] \
- 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)])])
- 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])])
- ])
-
- 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)])
- ])
- 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
-
-
-
- reqver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]]
- reqverhex = 0
-
- for i in list(range(4)):
- reqverhex = (reqverhex << 8) + reqver[[i]]
-
-
-
- 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])
- ])
- 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])
- ])
- 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])])
- 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])])
- 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])])
- 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
- ])
- 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])])
- 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])])
- 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])])
- 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])])
- 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])])
- 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])])
- 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])
- ])
- 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
- 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_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])])
- AC_DEFUN([PC_PYTHON_SITE_PACKAGE_DIR],
- [AC_REQUIRE([PC_PYTHON_CHECK_SITE_DIR])[]dnl
- AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE_NAME])])
- 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
- 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])])
- AC_DEFUN([PC_PYTHON_EXEC_PACKAGE_DIR],
- [AC_REQUIRE([PC_PYTHON_CHECK_EXEC_DIR])[]dnl
- AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE_NAME])])
- 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])
- ])
- 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])
- ])
|