147 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			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)
 | |
| ])
 |