server-1.12/macros/cf_python.m4

147 lines
4.2 KiB
Plaintext

AC_DEFUN([CF_CHECK_PYTHON],
[
PYTHON_LIB=""
PY_LIBS=""
PY_INCLUDES=""
dir=""
if test "x$PYTHON_HOME" != "x"; then
for dir in $PYTHON_HOME/include/python{,2.7,2.6,2.5,2.4} ; do
AC_CHECK_HEADERS(["$dir/Python.h"],[cf_have_python_h=yes])
if test "x$cf_have_python_h" != "x" ; then
PY_INCLUDES="-I$dir"
break
fi
done
PYTHON_SEARCH=$PYTHON
else
AC_CHECK_HEADERS([Python.h],[cf_have_python_h=yes])
if test "x$cf_have_python_h" = "x" ; then
for dir in /usr{,/local}/include/python{,2.7,2.6,2.5,2.4} ; do
AC_CHECK_HEADERS(["$dir/Python.h"],[cf_have_python_h=yes])
if test "x$cf_have_python_h" != "x" ; then
PY_INCLUDES="-I$dir"
break
fi
done
else
PY_INCLUDES=""
fi
fi
if test "x$cf_have_python_h" = "xyes" ; then
PYTHON_LIB=""
if test "x$PYTHON_HOME" != "x"; then
# I am going of how manually compiled python installed on
# my system. We can't use AC_CHECK_LIB, because that will
# find the one in the stanard location, which is what we
# want to avoid.
python=`echo $dir | awk -F/ '{print $NF}'`;
AC_MSG_CHECKING([For python lib in various places])
if test -f $PYTHON_HOME/lib/lib$python.so ; then
# Hopefully -R is a universal option
AC_MSG_RESULT([found in $PYTHON_HOME/lib/])
if test -n "$hardcode_libdir_flag_spec" ; then
oldlibdir=$libdir
libdir="$PYTHON_HOME/lib/"
rpath=`eval echo $hardcode_libdir_flag_spec`
PYTHON_LIB="$rpath -L$PYTHON_HOME/lib/ -l$python"
echo "rpath=$rpath"
libdir=$oldlibdir
else
PYTHON_LIB="-L$PYTHON_HOME/lib/ -l$python"
fi
elif test -f $PYTHON_HOME/lib/$python/lib$python.a ; then
PYTHON_LIB="$PYTHON_HOME/lib/$python/lib$python.a"
AC_MSG_RESULT([found in $PYTHON_HOME/lib/$python])
elif test -f $PYTHON_HOME/lib/$python/config/lib$python.a ; then
PYTHON_LIB="$PYTHON_HOME/lib/$python/config/lib$python.a"
AC_MSG_RESULT([found in $PYTHON_HOME/lib/$python/config])
fi
else
for lib in python{,2.7,2.6,2.5,2.4} ; do
AC_CHECK_LIB($lib, PyArg_ParseTuple,[PYTHON_LIB="-l$lib"])
if test "x$PYTHON_LIB" != "x" ; then
break
fi
done
# These checks are a bit bogus - would be better to use AC_CHECK_LIB,
# but it caches the result of the first check, even if we run AC_CHECK_LIB
# with other options.
python=`echo $dir | awk -F/ '{print $NF}'`;
if test "x$PYTHON_LIB" = "x" ; then
AC_MSG_CHECKING([For python lib in various places])
if test -f /usr/lib/$python/lib$python.a ; then
PYTHON_LIB="/usr/lib/$python/lib$python.a"
AC_MSG_RESULT([found in /usr/lib/$python])
elif test -f /usr/lib/$python/config/lib$python.a ; then
PYTHON_LIB="/usr/lib/$python/config/lib$python.a"
AC_MSG_RESULT([found in /usr/lib/$python/config])
fi
fi
fi
if test "x$PYTHON_LIB" != "x" ; then
AC_CHECK_LIB(pthread, main, PY_LIBS="$PY_LIBS -lpthread", , $PY_LIBS )
AC_CHECK_LIB(util, main, PY_LIBS="$PY_LIBS -lutil", , $PY_LIBS )
AC_CHECK_LIB(dl, main, PY_LIBS="$PY_LIBS -ldl", , $PY_LIBS )
AC_MSG_CHECKING([whether python supports the "L" format specifier])
saved_LIBS="$LIBS"
LIBS="$LIBS $PYTHON_LIB $PY_LIBS"
saved_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $PY_INCLUDES"
AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <Python.h>
#include <stdlib.h>
static PyObject *callback(PyObject *self, PyObject *args)
{
long long val;
if (!PyArg_ParseTuple(args, "L", &val))
return NULL;
if (val != 1)
exit(1);
Py_INCREF(Py_None);
return Py_None;
}
static PyMethodDef methods[] = {
{"callback", callback, METH_VARARGS},
{NULL, NULL, 0, NULL},
};
int main()
{
Py_Initialize();
Py_InitModule("test", methods);
return(PyRun_SimpleString("import test\ntest.callback(1)\n") != 0);
}
]])],[
AC_MSG_RESULT([yes])
],[
AC_MSG_RESULT([no])
PYTHON_LIB=""
PYLIBS=""
PY_INCLUDE=""
],[
AC_MSG_RESULT([skipped because cross compiling])
])
LIBS="$saved_LIBS"
CFLAGS="$saved_CFLAGS"
fi
fi
if test "x$PYTHON_LIB" = "x" ; then
$2
else
$1
fi
AC_SUBST(PYTHON_LIB)
AC_SUBST(PY_LIBS)
AC_SUBST(PY_INCLUDES)
])