• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1## ------------------------
2## Python file handling
3## From Andrew Dalke
4## Updated by James Henstridge
5## Updated by Andy Wingo to loop through possible pythons
6## ------------------------
7
8# AS_PATH_PYTHON([MINIMUM-VERSION])
9
10# Adds support for distributing Python modules and packages.  To
11# install modules, copy them to $(pythondir), using the python_PYTHON
12# automake variable.  To install a package with the same name as the
13# automake package, install to $(pkgpythondir), or use the
14# pkgpython_PYTHON automake variable.
15
16# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as
17# locations to install python extension modules (shared libraries).
18# Another macro is required to find the appropriate flags to compile
19# extension modules.
20
21# If your package is configured with a different prefix to python,
22# users will have to add the install directory to the PYTHONPATH
23# environment variable, or create a .pth file (see the python
24# documentation for details).
25
26# If the MINIMUM-VERSION argument is passed, AS_PATH_PYTHON will
27# cause an error if the version of python installed on the system
28# doesn't meet the requirement.  MINIMUM-VERSION should consist of
29# numbers and dots only.
30
31# Updated to loop over all possible python binaries by Andy Wingo
32# <wingo@pobox.com>
33# Updated to only warn and unset PYTHON if no good one is found
34
35AC_DEFUN([AS_PATH_PYTHON],
36 [
37  dnl Find a version of Python.  I could check for python versions 1.4
38  dnl or earlier, but 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, and I don't want to maintain that logic.
41
42  dnl should we do the version check?
43  PYTHON_CANDIDATES="python python2.2 python2.1 python2.0 python2 \
44                     python1.6 python1.5"
45  ifelse([$1],[],
46         [AC_PATH_PROG(PYTHON, $PYTHON_CANDIDATES)],
47         [
48     AC_MSG_NOTICE(Looking for Python version >= $1)
49    changequote(<<, >>)dnl
50    prog="
51import sys, string
52minver = '$1'
53# split string by '.' and convert to numeric
54minver_info = map(string.atoi, string.split(minver, '.'))
55# we can now do comparisons on the two lists:
56if sys.version_info >= tuple(minver_info):
57	sys.exit(0)
58else:
59	sys.exit(1)"
60    changequote([, ])dnl
61
62    python_good=false
63    for python_candidate in $PYTHON_CANDIDATES; do
64      unset PYTHON
65      AC_PATH_PROG(PYTHON, $python_candidate) 1> /dev/null 2> /dev/null
66
67      if test "x$PYTHON" = "x"; then continue; fi
68
69      if $PYTHON -c "$prog" 1>&AC_FD_CC 2>&AC_FD_CC; then
70        AC_MSG_CHECKING(["$PYTHON":])
71	AC_MSG_RESULT([okay])
72        python_good=true
73        break;
74      else
75        dnl clear the cache val
76        unset ac_cv_path_PYTHON
77      fi
78    done
79  ])
80
81  if test "$python_good" != "true"; then
82    AC_MSG_WARN([No suitable version of python found])
83    PYTHON=
84  else
85
86  AC_MSG_CHECKING([local Python configuration])
87
88  dnl Query Python for its version number.  Getting [:3] seems to be
89  dnl the best way to do this; it's what "site.py" does in the standard
90  dnl library.  Need to change quote character because of [:3]
91
92  AC_SUBST(PYTHON_VERSION)
93  changequote(<<, >>)dnl
94  PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[:3]"`
95  changequote([, ])dnl
96
97
98  dnl Use the values of $prefix and $exec_prefix for the corresponding
99  dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX.  These are made
100  dnl distinct variables so they can be overridden if need be.  However,
101  dnl general consensus is that you shouldn't need this ability.
102
103  AC_SUBST(PYTHON_PREFIX)
104  PYTHON_PREFIX='${prefix}'
105
106  AC_SUBST(PYTHON_EXEC_PREFIX)
107  PYTHON_EXEC_PREFIX='${exec_prefix}'
108
109  dnl At times (like when building shared libraries) you may want
110  dnl to know which OS platform Python thinks this is.
111
112  AC_SUBST(PYTHON_PLATFORM)
113  PYTHON_PLATFORM=`$PYTHON -c "import sys; print sys.platform"`
114
115
116  dnl Set up 4 directories:
117
118  dnl pythondir -- where to install python scripts.  This is the
119  dnl   site-packages directory, not the python standard library
120  dnl   directory like in previous automake betas.  This behaviour
121  dnl   is more consistent with lispdir.m4 for example.
122  dnl
123  dnl Also, if the package prefix isn't the same as python's prefix,
124  dnl then the old $(pythondir) was pretty useless.
125
126  AC_SUBST(pythondir)
127  pythondir=$PYTHON_PREFIX"/lib/python"$PYTHON_VERSION/site-packages
128
129  dnl pkgpythondir -- $PACKAGE directory under pythondir.  Was
130  dnl   PYTHON_SITE_PACKAGE in previous betas, but this naming is
131  dnl   more consistent with the rest of automake.
132  dnl   Maybe this should be put in python.am?
133
134  AC_SUBST(pkgpythondir)
135  pkgpythondir=\${pythondir}/$PACKAGE
136
137  dnl pyexecdir -- directory for installing python extension modules
138  dnl   (shared libraries)  Was PYTHON_SITE_EXEC in previous betas.
139
140  AC_SUBST(pyexecdir)
141  pyexecdir=$PYTHON_EXEC_PREFIX"/lib/python"$PYTHON_VERSION/site-packages
142
143  dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE)
144  dnl   Maybe this should be put in python.am?
145
146  AC_SUBST(pkgpyexecdir)
147  pkgpyexecdir=\${pyexecdir}/$PACKAGE
148
149  AC_MSG_RESULT([looks good])
150
151  fi
152])
153