xref: /freebsd/contrib/unbound/acx_python.m4 (revision b7579f77d18196a58ff700756c84dc9a302a7f67)
1*b7579f77SDag-Erling SmørgravAC_DEFUN([AC_PYTHON_DEVEL],[
2*b7579f77SDag-Erling Smørgrav        #
3*b7579f77SDag-Erling Smørgrav        # Allow the use of a (user set) custom python version
4*b7579f77SDag-Erling Smørgrav        #
5*b7579f77SDag-Erling Smørgrav        AC_ARG_VAR([PYTHON_VERSION],[The installed Python
6*b7579f77SDag-Erling Smørgrav                version to use, for example '2.3'. This string
7*b7579f77SDag-Erling Smørgrav                will be appended to the Python interpreter
8*b7579f77SDag-Erling Smørgrav                canonical name.])
9*b7579f77SDag-Erling Smørgrav
10*b7579f77SDag-Erling Smørgrav        AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]])
11*b7579f77SDag-Erling Smørgrav        if test -z "$PYTHON"; then
12*b7579f77SDag-Erling Smørgrav           AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path])
13*b7579f77SDag-Erling Smørgrav           PYTHON_VERSION=""
14*b7579f77SDag-Erling Smørgrav        fi
15*b7579f77SDag-Erling Smørgrav
16*b7579f77SDag-Erling Smørgrav        if test -z "$PYTHON_VERSION"; then
17*b7579f77SDag-Erling Smørgrav		PYTHON_VERSION=`$PYTHON -c "import sys, string; \
18*b7579f77SDag-Erling Smørgrav			print string.split(sys.version)[[0]]"`
19*b7579f77SDag-Erling Smørgrav	fi
20*b7579f77SDag-Erling Smørgrav
21*b7579f77SDag-Erling Smørgrav        #
22*b7579f77SDag-Erling Smørgrav        # Check for a version of Python >= 2.1.0
23*b7579f77SDag-Erling Smørgrav        #
24*b7579f77SDag-Erling Smørgrav        AC_MSG_CHECKING([for a version of Python >= '2.1.0'])
25*b7579f77SDag-Erling Smørgrav        ac_supports_python_ver=`$PYTHON -c "import sys, string; \
26*b7579f77SDag-Erling Smørgrav                ver = string.split(sys.version)[[0]]; \
27*b7579f77SDag-Erling Smørgrav                print ver >= '2.1.0'"`
28*b7579f77SDag-Erling Smørgrav        if test "$ac_supports_python_ver" != "True"; then
29*b7579f77SDag-Erling Smørgrav                if test -z "$PYTHON_NOVERSIONCHECK"; then
30*b7579f77SDag-Erling Smørgrav                        AC_MSG_RESULT([no])
31*b7579f77SDag-Erling Smørgrav                        AC_MSG_FAILURE([
32*b7579f77SDag-Erling SmørgravThis version of the AC@&t@_PYTHON_DEVEL macro
33*b7579f77SDag-Erling Smørgravdoesn't work properly with versions of Python before
34*b7579f77SDag-Erling Smørgrav2.1.0. You may need to re-run configure, setting the
35*b7579f77SDag-Erling Smørgravvariables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG,
36*b7579f77SDag-Erling SmørgravPYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
37*b7579f77SDag-Erling SmørgravMoreover, to disable this check, set PYTHON_NOVERSIONCHECK
38*b7579f77SDag-Erling Smørgravto something else than an empty string.
39*b7579f77SDag-Erling Smørgrav])
40*b7579f77SDag-Erling Smørgrav                else
41*b7579f77SDag-Erling Smørgrav                        AC_MSG_RESULT([skip at user request])
42*b7579f77SDag-Erling Smørgrav                fi
43*b7579f77SDag-Erling Smørgrav        else
44*b7579f77SDag-Erling Smørgrav                AC_MSG_RESULT([yes])
45*b7579f77SDag-Erling Smørgrav        fi
46*b7579f77SDag-Erling Smørgrav
47*b7579f77SDag-Erling Smørgrav        #
48*b7579f77SDag-Erling Smørgrav        # if the macro parameter ``version'' is set, honour it
49*b7579f77SDag-Erling Smørgrav        #
50*b7579f77SDag-Erling Smørgrav        if test -n "$1"; then
51*b7579f77SDag-Erling Smørgrav                AC_MSG_CHECKING([for a version of Python $1])
52*b7579f77SDag-Erling Smørgrav                ac_supports_python_ver=`$PYTHON -c "import sys, string; \
53*b7579f77SDag-Erling Smørgrav                        ver = string.split(sys.version)[[0]]; \
54*b7579f77SDag-Erling Smørgrav                        print ver $1"`
55*b7579f77SDag-Erling Smørgrav                if test "$ac_supports_python_ver" = "True"; then
56*b7579f77SDag-Erling Smørgrav                   AC_MSG_RESULT([yes])
57*b7579f77SDag-Erling Smørgrav                else
58*b7579f77SDag-Erling Smørgrav                        AC_MSG_RESULT([no])
59*b7579f77SDag-Erling Smørgrav                        AC_MSG_ERROR([this package requires Python $1.
60*b7579f77SDag-Erling SmørgravIf you have it installed, but it isn't the default Python
61*b7579f77SDag-Erling Smørgravinterpreter in your system path, please pass the PYTHON_VERSION
62*b7579f77SDag-Erling Smørgravvariable to configure. See ``configure --help'' for reference.
63*b7579f77SDag-Erling Smørgrav])
64*b7579f77SDag-Erling Smørgrav                        PYTHON_VERSION=""
65*b7579f77SDag-Erling Smørgrav                fi
66*b7579f77SDag-Erling Smørgrav        fi
67*b7579f77SDag-Erling Smørgrav
68*b7579f77SDag-Erling Smørgrav        #
69*b7579f77SDag-Erling Smørgrav        # Check if you have distutils, else fail
70*b7579f77SDag-Erling Smørgrav        #
71*b7579f77SDag-Erling Smørgrav        AC_MSG_CHECKING([for the distutils Python package])
72*b7579f77SDag-Erling Smørgrav        ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
73*b7579f77SDag-Erling Smørgrav        if test -z "$ac_distutils_result"; then
74*b7579f77SDag-Erling Smørgrav                AC_MSG_RESULT([yes])
75*b7579f77SDag-Erling Smørgrav        else
76*b7579f77SDag-Erling Smørgrav                AC_MSG_RESULT([no])
77*b7579f77SDag-Erling Smørgrav                AC_MSG_ERROR([cannot import Python module "distutils".
78*b7579f77SDag-Erling SmørgravPlease check your Python installation. The error was:
79*b7579f77SDag-Erling Smørgrav$ac_distutils_result])
80*b7579f77SDag-Erling Smørgrav                PYTHON_VERSION=""
81*b7579f77SDag-Erling Smørgrav        fi
82*b7579f77SDag-Erling Smørgrav
83*b7579f77SDag-Erling Smørgrav        #
84*b7579f77SDag-Erling Smørgrav        # Check for Python include path
85*b7579f77SDag-Erling Smørgrav        #
86*b7579f77SDag-Erling Smørgrav        AC_MSG_CHECKING([for Python include path])
87*b7579f77SDag-Erling Smørgrav        if test -z "$PYTHON_CPPFLAGS"; then
88*b7579f77SDag-Erling Smørgrav                python_path=`$PYTHON -c "import distutils.sysconfig; \
89*b7579f77SDag-Erling Smørgrav                        print distutils.sysconfig.get_python_inc();"`
90*b7579f77SDag-Erling Smørgrav                if test -n "${python_path}"; then
91*b7579f77SDag-Erling Smørgrav                        python_path="-I$python_path"
92*b7579f77SDag-Erling Smørgrav                fi
93*b7579f77SDag-Erling Smørgrav                PYTHON_CPPFLAGS=$python_path
94*b7579f77SDag-Erling Smørgrav        fi
95*b7579f77SDag-Erling Smørgrav        AC_MSG_RESULT([$PYTHON_CPPFLAGS])
96*b7579f77SDag-Erling Smørgrav        AC_SUBST([PYTHON_CPPFLAGS])
97*b7579f77SDag-Erling Smørgrav
98*b7579f77SDag-Erling Smørgrav        #
99*b7579f77SDag-Erling Smørgrav        # Check for Python library path
100*b7579f77SDag-Erling Smørgrav        #
101*b7579f77SDag-Erling Smørgrav        AC_MSG_CHECKING([for Python library path])
102*b7579f77SDag-Erling Smørgrav        if test -z "$PYTHON_LDFLAGS"; then
103*b7579f77SDag-Erling Smørgrav                # (makes two attempts to ensure we've got a version number
104*b7579f77SDag-Erling Smørgrav                # from the interpreter)
105*b7579f77SDag-Erling Smørgrav                py_version=`$PYTHON -c "from distutils.sysconfig import *; \
106*b7579f77SDag-Erling Smørgrav                        from string import join; \
107*b7579f77SDag-Erling Smørgrav                        print join(get_config_vars('VERSION'))"`
108*b7579f77SDag-Erling Smørgrav                if test "$py_version" = "[None]"; then
109*b7579f77SDag-Erling Smørgrav                        if test -n "$PYTHON_VERSION"; then
110*b7579f77SDag-Erling Smørgrav                                py_version=$PYTHON_VERSION
111*b7579f77SDag-Erling Smørgrav                        else
112*b7579f77SDag-Erling Smørgrav                                py_version=`$PYTHON -c "import sys; \
113*b7579f77SDag-Erling Smørgrav                                        print sys.version[[:3]]"`
114*b7579f77SDag-Erling Smørgrav                        fi
115*b7579f77SDag-Erling Smørgrav                fi
116*b7579f77SDag-Erling Smørgrav
117*b7579f77SDag-Erling Smørgrav                PYTHON_LDFLAGS=`$PYTHON -c "from distutils.sysconfig import *; \
118*b7579f77SDag-Erling Smørgrav                        from string import join; \
119*b7579f77SDag-Erling Smørgrav                        print '-L' + get_python_lib(0,1), \
120*b7579f77SDag-Erling Smørgrav                        '-L' + os.path.dirname(get_python_lib(0,1)), \
121*b7579f77SDag-Erling Smørgrav                        '-lpython';"`$py_version
122*b7579f77SDag-Erling Smørgrav        fi
123*b7579f77SDag-Erling Smørgrav        AC_MSG_RESULT([$PYTHON_LDFLAGS])
124*b7579f77SDag-Erling Smørgrav        AC_SUBST([PYTHON_LDFLAGS])
125*b7579f77SDag-Erling Smørgrav
126*b7579f77SDag-Erling Smørgrav        #
127*b7579f77SDag-Erling Smørgrav        # Check for site packages
128*b7579f77SDag-Erling Smørgrav        #
129*b7579f77SDag-Erling Smørgrav        AC_MSG_CHECKING([for Python site-packages path])
130*b7579f77SDag-Erling Smørgrav        if test -z "$PYTHON_SITE_PKG"; then
131*b7579f77SDag-Erling Smørgrav                PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \
132*b7579f77SDag-Erling Smørgrav                        print distutils.sysconfig.get_python_lib(1,0);"`
133*b7579f77SDag-Erling Smørgrav        fi
134*b7579f77SDag-Erling Smørgrav        AC_MSG_RESULT([$PYTHON_SITE_PKG])
135*b7579f77SDag-Erling Smørgrav        AC_SUBST([PYTHON_SITE_PKG])
136*b7579f77SDag-Erling Smørgrav
137*b7579f77SDag-Erling Smørgrav        #
138*b7579f77SDag-Erling Smørgrav        # libraries which must be linked in when embedding
139*b7579f77SDag-Erling Smørgrav        #
140*b7579f77SDag-Erling Smørgrav        AC_MSG_CHECKING(python extra libraries)
141*b7579f77SDag-Erling Smørgrav        if test -z "$PYTHON_EXTRA_LIBS"; then
142*b7579f77SDag-Erling Smørgrav           PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
143*b7579f77SDag-Erling Smørgrav                conf = distutils.sysconfig.get_config_var; \
144*b7579f77SDag-Erling Smørgrav                print conf('LOCALMODLIBS'), conf('LIBS')"`
145*b7579f77SDag-Erling Smørgrav        fi
146*b7579f77SDag-Erling Smørgrav        AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
147*b7579f77SDag-Erling Smørgrav        AC_SUBST(PYTHON_EXTRA_LIBS)
148*b7579f77SDag-Erling Smørgrav
149*b7579f77SDag-Erling Smørgrav        #
150*b7579f77SDag-Erling Smørgrav        # linking flags needed when embedding
151*b7579f77SDag-Erling Smørgrav        #
152*b7579f77SDag-Erling Smørgrav        AC_MSG_CHECKING(python extra linking flags)
153*b7579f77SDag-Erling Smørgrav        if test -z "$PYTHON_EXTRA_LDFLAGS"; then
154*b7579f77SDag-Erling Smørgrav                PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
155*b7579f77SDag-Erling Smørgrav                        conf = distutils.sysconfig.get_config_var; \
156*b7579f77SDag-Erling Smørgrav                        print conf('LINKFORSHARED')"`
157*b7579f77SDag-Erling Smørgrav        fi
158*b7579f77SDag-Erling Smørgrav        AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
159*b7579f77SDag-Erling Smørgrav        AC_SUBST(PYTHON_EXTRA_LDFLAGS)
160*b7579f77SDag-Erling Smørgrav
161*b7579f77SDag-Erling Smørgrav        #
162*b7579f77SDag-Erling Smørgrav        # final check to see if everything compiles alright
163*b7579f77SDag-Erling Smørgrav        #
164*b7579f77SDag-Erling Smørgrav        AC_MSG_CHECKING([consistency of all components of python development environment])
165*b7579f77SDag-Erling Smørgrav        AC_LANG_PUSH([C])
166*b7579f77SDag-Erling Smørgrav        # save current global flags
167*b7579f77SDag-Erling Smørgrav        LIBS="$ac_save_LIBS $PYTHON_LDFLAGS"
168*b7579f77SDag-Erling Smørgrav        CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
169*b7579f77SDag-Erling Smørgrav        AC_TRY_LINK([
170*b7579f77SDag-Erling Smørgrav                #include <Python.h>
171*b7579f77SDag-Erling Smørgrav        ],[
172*b7579f77SDag-Erling Smørgrav                Py_Initialize();
173*b7579f77SDag-Erling Smørgrav        ],[pythonexists=yes],[pythonexists=no])
174*b7579f77SDag-Erling Smørgrav
175*b7579f77SDag-Erling Smørgrav        AC_MSG_RESULT([$pythonexists])
176*b7579f77SDag-Erling Smørgrav
177*b7579f77SDag-Erling Smørgrav        if test ! "$pythonexists" = "yes"; then
178*b7579f77SDag-Erling Smørgrav           AC_MSG_ERROR([
179*b7579f77SDag-Erling Smørgrav  Could not link test program to Python. Maybe the main Python library has been
180*b7579f77SDag-Erling Smørgrav  installed in some non-standard library path. If so, pass it to configure,
181*b7579f77SDag-Erling Smørgrav  via the LDFLAGS environment variable.
182*b7579f77SDag-Erling Smørgrav  Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib"
183*b7579f77SDag-Erling Smørgrav  ============================================================================
184*b7579f77SDag-Erling Smørgrav   ERROR!
185*b7579f77SDag-Erling Smørgrav   You probably have to install the development version of the Python package
186*b7579f77SDag-Erling Smørgrav   for your distribution.  The exact name of this package varies among them.
187*b7579f77SDag-Erling Smørgrav  ============================================================================
188*b7579f77SDag-Erling Smørgrav           ])
189*b7579f77SDag-Erling Smørgrav          PYTHON_VERSION=""
190*b7579f77SDag-Erling Smørgrav        fi
191*b7579f77SDag-Erling Smørgrav        AC_LANG_POP
192*b7579f77SDag-Erling Smørgrav        # turn back to default flags
193*b7579f77SDag-Erling Smørgrav        CPPFLAGS="$ac_save_CPPFLAGS"
194*b7579f77SDag-Erling Smørgrav        LIBS="$ac_save_LIBS"
195*b7579f77SDag-Erling Smørgrav
196*b7579f77SDag-Erling Smørgrav        #
197*b7579f77SDag-Erling Smørgrav        # all done!
198*b7579f77SDag-Erling Smørgrav        #
199*b7579f77SDag-Erling Smørgrav])
200*b7579f77SDag-Erling Smørgrav
201