| 1 | ## ------------------------ -*- Autoconf -*-
|
|---|
| 2 | ## Python file handling
|
|---|
| 3 | ## From Andrew Dalke
|
|---|
| 4 | ## Updated by James Henstridge
|
|---|
| 5 | ## ------------------------
|
|---|
| 6 | # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
|---|
| 7 | # Free Software Foundation, Inc.
|
|---|
| 8 | #
|
|---|
| 9 | # This file is free software; the Free Software Foundation
|
|---|
| 10 | # gives unlimited permission to copy and/or distribute it,
|
|---|
| 11 | # with or without modifications, as long as this notice is preserved.
|
|---|
| 12 |
|
|---|
| 13 | # AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
|---|
| 14 | # ---------------------------------------------------------------------------
|
|---|
| 15 | # Adds support for distributing Python modules and packages. To
|
|---|
| 16 | # install modules, copy them to $(pythondir), using the python_PYTHON
|
|---|
| 17 | # automake variable. To install a package with the same name as the
|
|---|
| 18 | # automake package, install to $(pkgpythondir), or use the
|
|---|
| 19 | # pkgpython_PYTHON automake variable.
|
|---|
| 20 | #
|
|---|
| 21 | # The variables $(pyexecdir) and $(pkgpyexecdir) are provided as
|
|---|
| 22 | # locations to install python extension modules (shared libraries).
|
|---|
| 23 | # Another macro is required to find the appropriate flags to compile
|
|---|
| 24 | # extension modules.
|
|---|
| 25 | #
|
|---|
| 26 | # If your package is configured with a different prefix to python,
|
|---|
| 27 | # users will have to add the install directory to the PYTHONPATH
|
|---|
| 28 | # environment variable, or create a .pth file (see the python
|
|---|
| 29 | # documentation for details).
|
|---|
| 30 | #
|
|---|
| 31 | # If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will
|
|---|
| 32 | # cause an error if the version of python installed on the system
|
|---|
| 33 | # doesn't meet the requirement. MINIMUM-VERSION should consist of
|
|---|
| 34 | # numbers and dots only.
|
|---|
| 35 | AC_DEFUN([AM_PATH_PYTHON],
|
|---|
| 36 | [
|
|---|
| 37 | dnl Find a Python interpreter. Python versions prior to 1.5 are not
|
|---|
| 38 | dnl supported because the default installation locations changed from
|
|---|
| 39 | dnl $prefix/lib/site-python in 1.4 to $prefix/lib/python1.5/site-packages
|
|---|
| 40 | dnl in 1.5.
|
|---|
| 41 | m4_define_default([_AM_PYTHON_INTERPRETER_LIST],
|
|---|
| 42 | [python python2 python2.5 python2.4 python2.3 python2.2 dnl
|
|---|
| 43 | python2.1 python2.0 python1.6 python1.5])
|
|---|
| 44 |
|
|---|
| 45 | m4_if([$1],[],[
|
|---|
| 46 | dnl No version check is needed.
|
|---|
| 47 | # Find any Python interpreter.
|
|---|
| 48 | if test -z "$PYTHON"; then
|
|---|
| 49 | AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :)
|
|---|
| 50 | fi
|
|---|
| 51 | am_display_PYTHON=python
|
|---|
| 52 | ], [
|
|---|
| 53 | dnl A version check is needed.
|
|---|
| 54 | if test -n "$PYTHON"; then
|
|---|
| 55 | # If the user set $PYTHON, use it and don't search something else.
|
|---|
| 56 | AC_MSG_CHECKING([whether $PYTHON version >= $1])
|
|---|
| 57 | AM_PYTHON_CHECK_VERSION([$PYTHON], [$1],
|
|---|
| 58 | [AC_MSG_RESULT(yes)],
|
|---|
| 59 | [AC_MSG_ERROR(too old)])
|
|---|
| 60 | am_display_PYTHON=$PYTHON
|
|---|
| 61 | else
|
|---|
| 62 | # Otherwise, try each interpreter until we find one that satisfies
|
|---|
| 63 | # VERSION.
|
|---|
| 64 | AC_CACHE_CHECK([for a Python interpreter with version >= $1],
|
|---|
| 65 | [am_cv_pathless_PYTHON],[
|
|---|
| 66 | for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do
|
|---|
| 67 | test "$am_cv_pathless_PYTHON" = none && break
|
|---|
| 68 | AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break])
|
|---|
| 69 | done])
|
|---|
| 70 | # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON.
|
|---|
| 71 | if test "$am_cv_pathless_PYTHON" = none; then
|
|---|
| 72 | PYTHON=:
|
|---|
| 73 | else
|
|---|
| 74 | AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON])
|
|---|
| 75 | fi
|
|---|
| 76 | am_display_PYTHON=$am_cv_pathless_PYTHON
|
|---|
| 77 | fi
|
|---|
| 78 | ])
|
|---|
| 79 |
|
|---|
| 80 | if test "$PYTHON" = :; then
|
|---|
| 81 | dnl Run any user-specified action, or abort.
|
|---|
| 82 | m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])])
|
|---|
| 83 | else
|
|---|
| 84 |
|
|---|
| 85 | dnl Query Python for its version number. Getting [:3] seems to be
|
|---|
| 86 | dnl the best way to do this; it's what "site.py" does in the standard
|
|---|
| 87 | dnl library.
|
|---|
| 88 |
|
|---|
| 89 | AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version],
|
|---|
| 90 | [am_cv_python_version=`$PYTHON -c "import sys; print sys.version[[:3]]"`])
|
|---|
| 91 | AC_SUBST([PYTHON_VERSION], [$am_cv_python_version])
|
|---|
| 92 |
|
|---|
| 93 | dnl Use the values of $prefix and $exec_prefix for the corresponding
|
|---|
| 94 | dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made
|
|---|
| 95 | dnl distinct variables so they can be overridden if need be. However,
|
|---|
| 96 | dnl general consensus is that you shouldn't need this ability.
|
|---|
| 97 |
|
|---|
| 98 | AC_SUBST([PYTHON_PREFIX], ['${prefix}'])
|
|---|
| 99 | AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}'])
|
|---|
| 100 |
|
|---|
| 101 | dnl At times (like when building shared libraries) you may want
|
|---|
| 102 | dnl to know which OS platform Python thinks this is.
|
|---|
| 103 |
|
|---|
| 104 | AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform],
|
|---|
| 105 | [am_cv_python_platform=`$PYTHON -c "import sys; print sys.platform"`])
|
|---|
| 106 | AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform])
|
|---|
| 107 |
|
|---|
| 108 |
|
|---|
| 109 | dnl Set up 4 directories:
|
|---|
| 110 |
|
|---|
| 111 | dnl pythondir -- where to install python scripts. This is the
|
|---|
| 112 | dnl site-packages directory, not the python standard library
|
|---|
| 113 | dnl directory like in previous automake betas. This behavior
|
|---|
| 114 | dnl is more consistent with lispdir.m4 for example.
|
|---|
| 115 | dnl Query distutils for this directory. distutils does not exist in
|
|---|
| 116 | dnl Python 1.5, so we fall back to the hardcoded directory if it
|
|---|
| 117 | dnl doesn't work.
|
|---|
| 118 | AC_CACHE_CHECK([for $am_display_PYTHON script directory],
|
|---|
| 119 | [am_cv_python_pythondir],
|
|---|
| 120 | [am_cv_python_pythondir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(0,0,prefix='$PYTHON_PREFIX')" 2>/dev/null ||
|
|---|
| 121 | echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"`])
|
|---|
| 122 | AC_SUBST([pythondir], [$am_cv_python_pythondir])
|
|---|
| 123 |
|
|---|
| 124 | dnl pkgpythondir -- $PACKAGE directory under pythondir. Was
|
|---|
| 125 | dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is
|
|---|
| 126 | dnl more consistent with the rest of automake.
|
|---|
| 127 |
|
|---|
| 128 | AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE])
|
|---|
| 129 |
|
|---|
| 130 | dnl pyexecdir -- directory for installing python extension modules
|
|---|
| 131 | dnl (shared libraries)
|
|---|
| 132 | dnl Query distutils for this directory. distutils does not exist in
|
|---|
| 133 | dnl Python 1.5, so we fall back to the hardcoded directory if it
|
|---|
| 134 | dnl doesn't work.
|
|---|
| 135 | AC_CACHE_CHECK([for $am_display_PYTHON extension module directory],
|
|---|
| 136 | [am_cv_python_pyexecdir],
|
|---|
| 137 | [am_cv_python_pyexecdir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(1,0,prefix='$PYTHON_EXEC_PREFIX')" 2>/dev/null ||
|
|---|
| 138 | echo "${PYTHON_EXEC_PREFIX}/lib/python${PYTHON_VERSION}/site-packages"`])
|
|---|
| 139 | AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir])
|
|---|
| 140 |
|
|---|
| 141 | dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE)
|
|---|
| 142 |
|
|---|
| 143 | AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE])
|
|---|
| 144 |
|
|---|
| 145 | dnl Run any user-specified action.
|
|---|
| 146 | $2
|
|---|
| 147 | fi
|
|---|
| 148 |
|
|---|
| 149 | ])
|
|---|
| 150 |
|
|---|
| 151 |
|
|---|
| 152 | # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
|
|---|
| 153 | # ---------------------------------------------------------------------------
|
|---|
| 154 | # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
|
|---|
| 155 | # Run ACTION-IF-FALSE otherwise.
|
|---|
| 156 | # This test uses sys.hexversion instead of the string equivalent (first
|
|---|
| 157 | # word of sys.version), in order to cope with versions such as 2.2c1.
|
|---|
| 158 | # hexversion has been introduced in Python 1.5.2; it's probably not
|
|---|
| 159 | # worth to support older versions (1.5.1 was released on October 31, 1998).
|
|---|
| 160 | AC_DEFUN([AM_PYTHON_CHECK_VERSION],
|
|---|
| 161 | [prog="import sys, string
|
|---|
| 162 | # split strings by '.' and convert to numeric. Append some zeros
|
|---|
| 163 | # because we need at least 4 digits for the hex conversion.
|
|---|
| 164 | minver = map(int, string.split('$2', '.')) + [[0, 0, 0]]
|
|---|
| 165 | minverhex = 0
|
|---|
| 166 | for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[[i]]
|
|---|
| 167 | sys.exit(sys.hexversion < minverhex)"
|
|---|
| 168 | AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])
|
|---|