Imported Upstream version 3.2.2
[debian/gnuradio] / config / gr_python.m4
index 5816b276c7e1ec60f9310f9c05adc11927d90a2b..7479f0533dc921853d8e5bf6057344d007bdc855 100644 (file)
@@ -22,27 +22,43 @@ dnl
 # PYTHON_DEVEL()
 #
 # Checks for Python and tries to get the include path to 'Python.h'.
-# It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS) output variables.
+# It sets the $(PYTHON_CPPFLAGS), $(PYTHON_LDFLAGS) and $(pythondir) output variables,
 #
 AC_DEFUN([PYTHON_DEVEL],[
        AC_REQUIRE([AM_PATH_PYTHON])
        AC_REQUIRE([AC_CANONICAL_HOST])
 
-       # For Fedora Core 5 and 6, see ticket:39 in Trac
-       if test -f '/etc/redhat-release'; then
-               if  (echo $pyexecdir | grep -q lib64); then
-                       pythondir="$pyexecdir"
-               fi
-       fi
+       AC_ARG_WITH(pythondir,
+                    AC_HELP_STRING([--with-pythondir=DIR], 
+                       [python installation directory (cross-compiling) [[default=$prefix/lib/python2.5/site-packages]]]),
+                   [with_pythondir=${withval}],[with_pythondir=${prefix}/lib/python2.5/site-packages])
 
-       # Check for Python include path
-       AC_MSG_CHECKING([for Python include path])
-       if test -z "$PYTHON" ; then
-               AC_MSG_ERROR([cannot find Python path])
-       fi
+       # if we're cross-compiling, asking the host python about any of
+       # this is completely useless...
+
+       if test x$cross_compiling != xno
+       then
+               pythondir=$with_pythondir
+               pyexecdir=$with_pythondir
+               AC_SUBST(PYTHON_CPPFLAGS)
+               AC_SUBST(PYTHON_LDFLAGS)
+        else
 
-       # ask distutils which include path we should use
-       python_cmd='
+           # For Fedora Core 5 and 6, see ticket:39 in Trac
+           if test -f '/etc/redhat-release'; then
+                   if  (echo $pyexecdir | grep -q lib64); then
+                           pythondir="$pyexecdir"
+                   fi
+           fi
+
+           # Check for Python include path
+           AC_MSG_CHECKING([for Python include path])
+           if test -z "$PYTHON" ; then
+                   AC_MSG_ERROR([cannot find Python path])
+           fi
+
+           # ask distutils which include path we should use
+           python_cmd='
 import distutils.sysconfig
 import os
 path = distutils.sysconfig.get_python_inc(plat_specific=False)
@@ -50,30 +66,30 @@ if os.sep == "\\":
   path = path.replace("\\", "/")
 print path
 '
-       python_path=`$PYTHON -c "$python_cmd"`
-       AC_MSG_RESULT([$python_path])
-       if test -z "$python_path" ; then
-               AC_MSG_ERROR([cannot find Python include path])
-       fi
+           python_path=`$PYTHON -c "$python_cmd"`
+           AC_MSG_RESULT([$python_path])
+           if test -z "$python_path" ; then
+                   AC_MSG_ERROR([cannot find Python include path])
+           fi
 
-       AC_SUBST(PYTHON_CPPFLAGS,[-I$python_path])
+           AC_SUBST(PYTHON_CPPFLAGS,[-I$python_path])
 
-       # Check for Python headers usability
-       python_save_CPPFLAGS=$CPPFLAGS
-       CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS"
-       AC_CHECK_HEADERS([Python.h], [],
-                       [AC_MSG_ERROR([cannot find usable Python headers])])
-       CPPFLAGS="$python_save_CPPFLAGS"
+           # Check for Python headers usability
+           python_save_CPPFLAGS=$CPPFLAGS
+           CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS"
+           AC_CHECK_HEADERS([Python.h], [],
+                           [AC_MSG_ERROR([cannot find usable Python headers])])
+           CPPFLAGS="$python_save_CPPFLAGS"
 
-       # Only set this on mingw and cygwin hosts, (only implemented
-       # for mingw host, for crosscompiling you need to trick this)
+           # Only set this on mingw and cygwin hosts, (only implemented
+           # for mingw host, for crosscompiling you need to trick this)
 
-       PYTHON_LDFLAGS=""
-       case $host_os in
-            *mingw* | *cygwin* )
-         AC_MSG_CHECKING([for Python LDFLAGS])
+           PYTHON_LDFLAGS=""
+           case $host_os in
+                *mingw* | *cygwin* )
+             AC_MSG_CHECKING([for Python LDFLAGS])
 
-        python_cmd='
+           python_cmd='
 import distutils.sysconfig
 import os
 path = distutils.sysconfig.get_config_var("LIBPL")
@@ -82,30 +98,69 @@ if path == None:
 if os.sep == "\\":
   path = path.replace("\\", "/")
 print path
-'      
-         python_stdlib_path=`$PYTHON -c "$python_cmd"`
-
-         python_version_nodot=`echo $PYTHON_VERSION | sed "s,\.,,"`
-         libpython_name="python$PYTHON_VERSION"
-
-         # Standard install of python for win32 has libpython24.a
-         # instead of libpython2.4.a so we check for the library
-         # without the dot in the version number.
-
-         python_stdlib_filename=`find $python_stdlib_path -type f -name libpython$python_version_nodot.* -print | sed "1q"`
-         if test -n "$python_stdlib_filename" ; then
-               libpython_name="python$python_version_nodot"
-         fi
-
-          PYTHON_LDFLAGS="-L$python_stdlib_path -l$libpython_name"
-          AC_MSG_RESULT($PYTHON_LDFLAGS) 
-          # Replace all backslashes in PYTHON Paths with forward slashes
-          pythondir=`echo $pythondir |sed 's,\\\\,/,g'`
-          pkgpythondir=`echo $pkgpythondir |sed 's,\\\\,/,g'`
-          pyexecdir=`echo $pyexecdir |sed 's,\\\\,/,g'`
-          pkgpyexecdir=`echo $pkgpyexecdir |sed 's,\\\\,/,g'`
-         ;;
-        esac
-
-       AC_SUBST([PYTHON_LDFLAGS])
+'
+             python_stdlib_path=`$PYTHON -c "$python_cmd"`
+
+             python_version_nodot=`echo $PYTHON_VERSION | sed "s,\.,,"`
+             libpython_name="python$PYTHON_VERSION"
+
+             # Standard install of python for win32 has libpython24.a
+             # instead of libpython2.4.a so we check for the library
+             # without the dot in the version number.
+
+             python_stdlib_filename=`find $python_stdlib_path -type f -name libpython$python_version_nodot.* -print | sed "1q"`
+             if test -n "$python_stdlib_filename" ; then
+                   libpython_name="python$python_version_nodot"
+             fi
+
+             PYTHON_LDFLAGS="-L$python_stdlib_path -l$libpython_name"
+             AC_MSG_RESULT($PYTHON_LDFLAGS) 
+             # Replace all backslashes in PYTHON Paths with forward slashes
+             pythondir=`echo $pythondir |sed 's,\\\\,/,g'`
+             pkgpythondir=`echo $pkgpythondir |sed 's,\\\\,/,g'`
+             pyexecdir=`echo $pyexecdir |sed 's,\\\\,/,g'`
+             pkgpyexecdir=`echo $pkgpyexecdir |sed 's,\\\\,/,g'`
+             ;;
+           esac
+
+           AC_SUBST(PYTHON_LDFLAGS)
+       fi
+])
+
+# PYTHON_CHECK_MODULE
+#
+# Determines if a particular Python module can be imported
+#
+# $1 - module name
+# $2 - module description
+# $3 - action if found
+# $4 - action if not found
+# $5 - test command
+
+AC_DEFUN([PYTHON_CHECK_MODULE],[
+    AC_MSG_CHECKING([for $2])
+    dnl ########################################
+    dnl # import and test checking
+    dnl ########################################
+    if test "$5"; then
+        python_cmd='
+try:
+    import $1
+    assert $5
+except: exit(1)'
+    dnl ########################################
+    dnl # import checking only
+    dnl ########################################
+    else
+        python_cmd='
+try: import $1
+except: exit(1)'
+    fi
+    if ! $PYTHON -c "$python_cmd" 2> /dev/null; then
+        AC_MSG_RESULT([no])
+        $4
+    else
+        AC_MSG_RESULT([yes])
+        $3
+    fi
 ])