source: branches/r9/lang/cf/ac_python_devel.m4 @ 4837

Last change on this file since 4837 was 4837, checked in by gah, 9 years ago
File size: 8.9 KB
RevLine 
[4837]1# ===========================================================================
2#            http://autoconf-archive.cryp.to/ac_python_devel.html
3# ===========================================================================
4#
5# SYNOPSIS
6#
7#   AC_PYTHON_DEVEL([version])
8#
9# DESCRIPTION
10#
11#   Note: Defines as a precious variable "PYTHON_VERSION". Don't override it
12#   in your configure.ac.
13#
14#   This macro checks for Python and tries to get the include path to
15#   'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS)
16#   output variables. It also exports $(PYTHON_EXTRA_LIBS) and
17#   $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code.
18#
19#   You can search for some particular version of Python by passing a
20#   parameter to this macro, for example ">= '2.3.1'", or "== '2.4'". Please
21#   note that you *have* to pass also an operator along with the version to
22#   match, and pay special attention to the single quotes surrounding the
23#   version number. Don't use "PYTHON_VERSION" for this: that environment
24#   variable is declared as precious and thus reserved for the end-user.
25#
26#   This macro should work for all versions of Python >= 2.1.0. As an end
27#   user, you can disable the check for the python version by setting the
28#   PYTHON_NOVERSIONCHECK environment variable to something else than the
29#   empty string.
30#
31#   If you need to use this macro for an older Python version, please
32#   contact the authors. We're always open for feedback.
33#
34# LAST MODIFICATION
35#
36#   2008-04-12
37#
38# COPYLEFT
39#
40#   Copyright (c) 2008 Sebastian Huber <sebastian-huber@web.de>
41#   Copyright (c) 2008 Alan W. Irwin <irwin@beluga.phys.uvic.ca>
42#   Copyright (c) 2008 Rafael Laboissiere <rafael@laboissiere.net>
43#   Copyright (c) 2008 Andrew Collier <colliera@ukzn.ac.za>
44#   Copyright (c) 2008 Matteo Settenvini <matteo@member.fsf.org>
45#   Copyright (c) 2008 Horst Knorr <hk_classes@knoda.org>
46#
47#   This program is free software: you can redistribute it and/or modify it
48#   under the terms of the GNU General Public License as published by the
49#   Free Software Foundation, either version 3 of the License, or (at your
50#   option) any later version.
51#
52#   This program is distributed in the hope that it will be useful, but
53#   WITHOUT ANY WARRANTY; without even the implied warranty of
54#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
55#   Public License for more details.
56#
57#   You should have received a copy of the GNU General Public License along
58#   with this program. If not, see <http://www.gnu.org/licenses/>.
59#
60#   As a special exception, the respective Autoconf Macro's copyright owner
61#   gives unlimited permission to copy, distribute and modify the configure
62#   scripts that are the output of Autoconf when processing the Macro. You
63#   need not follow the terms of the GNU General Public License when using
64#   or distributing such scripts, even though portions of the text of the
65#   Macro appear in them. The GNU General Public License (GPL) does govern
66#   all other use of the material that constitutes the Autoconf Macro.
67#
68#   This special exception to the GPL applies to versions of the Autoconf
69#   Macro released by the Autoconf Macro Archive. When you make and
70#   distribute a modified version of the Autoconf Macro, you may extend this
71#   special exception to the GPL to apply to your modified version as well.
72
73AC_DEFUN([AC_PYTHON_DEVEL],[
74        #
75        # Allow the use of a (user set) custom python version
76        #
77        AC_ARG_VAR([PYTHON_VERSION],[The installed Python
78                version to use, for example '2.3'. This string
79                will be appended to the Python interpreter
80                canonical name.])
81
82        AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]])
83        if test -z "$PYTHON"; then
84           AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path])
85           PYTHON_VERSION=""
86        fi
87
88        #
89        # Check for a version of Python >= 2.1.0
90        #
91        AC_MSG_CHECKING([for a version of Python >= '2.1.0'])
92        ac_supports_python_ver=`$PYTHON -c "import sys, string; \
93                ver = string.split(sys.version)[[0]]; \
94                print ver >= '2.1.0'"`
95        if test "$ac_supports_python_ver" != "True"; then
96                if test -z "$PYTHON_NOVERSIONCHECK"; then
97                        AC_MSG_RESULT([no])
98                        AC_MSG_FAILURE([
99This version of the AC@&t@_PYTHON_DEVEL macro
100doesn't work properly with versions of Python before
1012.1.0. You may need to re-run configure, setting the
102variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG,
103PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
104Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
105to something else than an empty string.
106])
107                else
108                        AC_MSG_RESULT([skip at user request])
109                fi
110        else
111                AC_MSG_RESULT([yes])
112        fi
113
114        #
115        # if the macro parameter ``version'' is set, honour it
116        #
117        if test -n "$1"; then
118                AC_MSG_CHECKING([for a version of Python $1])
119                ac_supports_python_ver=`$PYTHON -c "import sys, string; \
120                        ver = string.split(sys.version)[[0]]; \
121                        print ver $1"`
122                if test "$ac_supports_python_ver" = "True"; then
123                   AC_MSG_RESULT([yes])
124                else
125                        AC_MSG_RESULT([no])
126                        AC_MSG_ERROR([this package requires Python $1.
127If you have it installed, but it isn't the default Python
128interpreter in your system path, please pass the PYTHON_VERSION
129variable to configure. See ``configure --help'' for reference.
130])
131                        PYTHON_VERSION=""
132                fi
133        fi
134
135        #
136        # Check if you have distutils, else fail
137        #
138        AC_MSG_CHECKING([for the distutils Python package])
139        ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
140        if test -z "$ac_distutils_result"; then
141                AC_MSG_RESULT([yes])
142        else
143                AC_MSG_RESULT([no])
144                AC_MSG_ERROR([cannot import Python module "distutils".
145Please check your Python installation. The error was:
146$ac_distutils_result])
147                PYTHON_VERSION=""
148        fi
149
150        #
151        # Check for Python include path
152        #
153        AC_MSG_CHECKING([for Python include path])
154        if test -z "$PYTHON_CPPFLAGS"; then
155                python_path=`$PYTHON -c "import distutils.sysconfig; \
156                        print distutils.sysconfig.get_python_inc();"`
157                if test -n "${python_path}"; then
158                        python_path="-I$python_path"
159                fi
160                PYTHON_CPPFLAGS=$python_path
161        fi
162        AC_MSG_RESULT([$PYTHON_CPPFLAGS])
163        AC_SUBST([PYTHON_CPPFLAGS])
164
165        #
166        # Check for Python library path
167        #
168        AC_MSG_CHECKING([for Python library path])
169        if test -z "$PYTHON_LDFLAGS"; then
170                # (makes two attempts to ensure we've got a version number
171                # from the interpreter)
172                py_version=`$PYTHON -c "from distutils.sysconfig import *; \
173                        from string import join; \
174                        print join(get_config_vars('VERSION'))"`
175                if test "$py_version" == "[None]"; then
176                        if test -n "$PYTHON_VERSION"; then
177                                py_version=$PYTHON_VERSION
178                        else
179                                py_version=`$PYTHON -c "import sys; \
180                                        print sys.version[[:3]]"`
181                        fi
182                fi
183
184                PYTHON_LDFLAGS=`$PYTHON -c "from distutils.sysconfig import *; \
185                        from string import join; \
186                        print '-L' + get_python_lib(0,1), \
187                        '-lpython';"`$py_version
188        fi
189        AC_MSG_RESULT([$PYTHON_LDFLAGS])
190        AC_SUBST([PYTHON_LDFLAGS])
191
192        #
193        # Check for site packages
194        #
195        AC_MSG_CHECKING([for Python site-packages path])
196        if test -z "$PYTHON_SITE_PKG"; then
197                PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \
198                        print distutils.sysconfig.get_python_lib(0,0);"`
199        fi
200        AC_MSG_RESULT([$PYTHON_SITE_PKG])
201        AC_SUBST([PYTHON_SITE_PKG])
202
203        #
204        # libraries which must be linked in when embedding
205        #
206        AC_MSG_CHECKING(python extra libraries)
207        if test -z "$PYTHON_EXTRA_LIBS"; then
208           PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
209                conf = distutils.sysconfig.get_config_var; \
210                print conf('LOCALMODLIBS'), conf('LIBS')"`
211        fi
212        AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
213        AC_SUBST(PYTHON_EXTRA_LIBS)
214
215        #
216        # linking flags needed when embedding
217        #
218        AC_MSG_CHECKING(python extra linking flags)
219        if test -z "$PYTHON_EXTRA_LDFLAGS"; then
220                PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
221                        conf = distutils.sysconfig.get_config_var; \
222                        print conf('LINKFORSHARED')"`
223        fi
224        AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
225        AC_SUBST(PYTHON_EXTRA_LDFLAGS)
226
227        #
228        # final check to see if everything compiles alright
229        #
230        AC_MSG_CHECKING([consistency of all components of python development environment])
231        AC_LANG_PUSH([C])
232        # save current global flags
233        LIBS="$ac_save_LIBS $PYTHON_LDFLAGS"
234        CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
235        AC_TRY_LINK([
236                #include <Python.h>
237        ],[
238                Py_Initialize();
239        ],[pythonexists=yes],[pythonexists=no])
240
241        AC_MSG_RESULT([$pythonexists])
242
243        if test ! "$pythonexists" = "yes"; then
244           AC_MSG_ERROR([
245  Could not link test program to Python. Maybe the main Python library has been
246  installed in some non-standard library path. If so, pass it to configure,
247  via the LDFLAGS environment variable.
248  Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib"
249  ============================================================================
250   ERROR!
251   You probably have to install the development version of the Python package
252   for your distribution.  The exact name of this package varies among them.
253  ============================================================================
254           ])
255          PYTHON_VERSION=""
256        fi
257        AC_LANG_POP
258        # turn back to default flags
259        CPPFLAGS="$ac_save_CPPFLAGS"
260        LIBS="$ac_save_LIBS"
261
262        #
263        # all done!
264        #
265])
Note: See TracBrowser for help on using the repository browser.