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