spelling: fix misspellings
[gpgme.git] / m4 / python.m4
1 ## ------------------------                                 -*- Autoconf -*-
2 ## Python file handling
3 ## From Andrew Dalke
4 ## Updated by James Henstridge
5 ## Updated by Werner Koch 2018-10-17
6 ## ---------------------------------
7 # Copyright (C) 1999-2017 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
14 # AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]
15 #                [INTERPRETER-LIST])
16 # ---------------------------------------------------------------------------
17 # Adds support for distributing Python modules and packages.  To
18 # install modules, copy them to $(pythondir), using the python_PYTHON
19 # automake variable.  To install a package with the same name as the
20 # automake package, install to $(pkgpythondir), or use the
21 # pkgpython_PYTHON automake variable.
22 #
23 # The variables $(pyexecdir) and $(pkgpyexecdir) are provided as
24 # locations to install python extension modules (shared libraries).
25 # Another macro is required to find the appropriate flags to compile
26 # extension modules.
27 #
28 # If your package is configured with a different prefix to python,
29 # users will have to add the install directory to the PYTHONPATH
30 # environment variable, or create a .pth file (see the python
31 # documentation for details).
32 #
33 # If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will
34 # cause an error if the version of python installed on the system
35 # doesn't meet the requirement.  MINIMUM-VERSION should consist of
36 # numbers and dots only.
37 AC_DEFUN([AM_PATH_PYTHON],
38  [
39   dnl Find a Python interpreter.  Python versions prior to 2.0 are not
40   dnl supported. (2.0 was released on October 16, 2000).  Python 3.0
41   dnl through to Python 3.3 are also not supported.
42   m4_define_default([_AM_PYTHON_INTERPRETER_LIST],
43 [python2 python2.7 dnl
44  python dnl
45  python3 python3.7 python3.6 python3.5 python3.4 dnl python3.8
46  ])
47
48   AC_ARG_VAR([PYTHON], [the Python interpreter])
49
50   m4_if([$1],[],[
51     dnl No version check is needed.
52     # Find any Python interpreter.
53     if test -z "$PYTHON"; then
54       AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :)
55     fi
56     am_display_PYTHON=python
57   ], [
58     dnl A version check is needed.
59     if test -n "$PYTHON"; then
60       # If the user set $PYTHON, use it and don't search something else.
61       AC_MSG_CHECKING([whether $PYTHON version is >= $1])
62       AM_PYTHON_CHECK_VERSION([$PYTHON], [$1],
63                               [AC_MSG_RESULT([yes])],
64                               [AC_MSG_RESULT([no])
65                                AC_MSG_ERROR([Python interpreter is too old])])
66       am_display_PYTHON=$PYTHON
67     else
68       # Otherwise, try each interpreter until we find one that satisfies
69       # VERSION.
70       AC_CACHE_CHECK([for a Python interpreter with version >= $1],
71         [am_cv_pathless_PYTHON],[
72         for am_cv_pathless_PYTHON dnl
73           in m4_if([$4],[],[_AM_PYTHON_INTERPRETER_LIST],[$4]) none; do
74           test "$am_cv_pathless_PYTHON" = none && break
75           AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break])
76         done])
77       # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON.
78       if test "$am_cv_pathless_PYTHON" = none; then
79         PYTHON=:
80       else
81         AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON])
82       fi
83       am_display_PYTHON=$am_cv_pathless_PYTHON
84     fi
85   ])
86
87   if test "$PYTHON" = :; then
88   dnl Run any user-specified action, or abort.
89     m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])])
90   else
91
92   dnl Query Python for its version number.  Getting [:3] seems to be
93   dnl the best way to do this; it's what "site.py" does in the standard
94   dnl library.
95
96   AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version],
97     [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`])
98   AC_SUBST([PYTHON_VERSION], [$am_cv_python_version])
99
100   dnl Use the values of $prefix and $exec_prefix for the corresponding
101   dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX.  These are made
102   dnl distinct variables so they can be overridden if need be.  However,
103   dnl general consensus is that you shouldn't need this ability.
104
105   AC_SUBST([PYTHON_PREFIX], ['${prefix}'])
106   AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}'])
107
108   dnl At times (like when building shared libraries) you may want
109   dnl to know which OS platform Python thinks this is.
110
111   AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform],
112     [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`])
113   AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform])
114
115   # Just factor out some code duplication.
116   am_python_setup_sysconfig="\
117 import sys
118 # Prefer sysconfig over distutils.sysconfig, for better compatibility
119 # with python 3.x.  See automake bug#10227.
120 try:
121     import sysconfig
122 except ImportError:
123     can_use_sysconfig = 0
124 else:
125     can_use_sysconfig = 1
126 # Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs:
127 # <https://github.com/pypa/virtualenv/issues/118>
128 try:
129     from platform import python_implementation
130     if python_implementation() == 'CPython' and sys.version[[:3]] == '2.7':
131         can_use_sysconfig = 0
132 except ImportError:
133     pass"
134
135   dnl Set up 4 directories:
136
137   dnl pythondir -- where to install python scripts.  This is the
138   dnl   site-packages directory, not the python standard library
139   dnl   directory like in previous automake betas.  This behavior
140   dnl   is more consistent with lispdir.m4 for example.
141   dnl Query distutils for this directory.
142   AC_CACHE_CHECK([for $am_display_PYTHON script directory],
143     [am_cv_python_pythondir],
144     [if test "x$prefix" = xNONE
145      then
146        am_py_prefix=$ac_default_prefix
147      else
148        am_py_prefix=$prefix
149      fi
150      am_cv_python_pythondir=`$PYTHON -c "
151 $am_python_setup_sysconfig
152 if can_use_sysconfig:
153     sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'})
154 else:
155     from distutils import sysconfig
156     sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix')
157 sys.stdout.write(sitedir)"`
158      case $am_cv_python_pythondir in
159      $am_py_prefix*)
160        am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'`
161        am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"`
162        ;;
163      *)
164        case $am_py_prefix in
165          /usr|/System*) ;;
166          *)
167           am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages
168           ;;
169        esac
170        ;;
171      esac
172     ])
173   AC_SUBST([pythondir], [$am_cv_python_pythondir])
174
175   dnl pkgpythondir -- $PACKAGE directory under pythondir.  Was
176   dnl   PYTHON_SITE_PACKAGE in previous betas, but this naming is
177   dnl   more consistent with the rest of automake.
178
179   AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE])
180
181   dnl pyexecdir -- directory for installing python extension modules
182   dnl   (shared libraries)
183   dnl Query distutils for this directory.
184   AC_CACHE_CHECK([for $am_display_PYTHON extension module directory],
185     [am_cv_python_pyexecdir],
186     [if test "x$exec_prefix" = xNONE
187      then
188        am_py_exec_prefix=$am_py_prefix
189      else
190        am_py_exec_prefix=$exec_prefix
191      fi
192      am_cv_python_pyexecdir=`$PYTHON -c "
193 $am_python_setup_sysconfig
194 if can_use_sysconfig:
195     sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_prefix'})
196 else:
197     from distutils import sysconfig
198     sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_prefix')
199 sys.stdout.write(sitedir)"`
200      case $am_cv_python_pyexecdir in
201      $am_py_exec_prefix*)
202        am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'`
203        am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"`
204        ;;
205      *)
206        case $am_py_exec_prefix in
207          /usr|/System*) ;;
208          *)
209            am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages
210            ;;
211        esac
212        ;;
213      esac
214     ])
215   AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir])
216
217   dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE)
218
219   AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE])
220
221   dnl Run any user-specified action.
222   $2
223   fi
224
225 ])
226
227
228 # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
229 # ---------------------------------------------------------------------------
230 # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
231 # Run ACTION-IF-FALSE otherwise.
232 # This test uses sys.hexversion instead of the string equivalent (first
233 # word of sys.version), in order to cope with versions such as 2.2c1.
234 # This supports Python 2.0 or higher. (2.0 was released on October 16, 2000).
235 AC_DEFUN([AM_PYTHON_CHECK_VERSION],
236  [prog="import sys
237 # split strings by '.' and convert to numeric.  Append some zeros
238 # because we need at least 4 digits for the hex conversion.
239 # map returns an iterator in Python 3.0 and a list in 2.x
240 minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]]
241 minverhex = 0
242 # xrange is not present in Python 3.0 and range returns an iterator
243 for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]]
244 sys.exit(sys.hexversion < minverhex)"
245   AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])