Synopsis - Cross-Reference

File: /config/python_ext.m4
 1#
 2# Copyright (C) 2007 Stefan Seefeld
 3# All rights reserved.
 4# Licensed to the public under the terms of the GNU LGPL (>= 2),
 5# see the file COPYING for details.
 6#
 7
 8AC_DEFUN([AC_PYTHON_EXT],
 9[AC_MSG_CHECKING(for python extension module build information)
10AC_MSG_RESULT([])
11
12AC_ARG_WITH(python, 
13  [  --with-python=PATH      specify the Python interpreter],
14  [PYTHON="$with_python"],
15  [PYTHON="python"]
16)
17
18if test -n "$PYTHON" -a "$PYTHON" != yes; then
19  AC_CHECK_PROG(PYTHON, $PYTHON, AC_MSG_ERROR([Cannot find Python interpreter]))
20else
21  AC_PATH_PROG(PYTHON, python2 python, python)
22fi
23PYTHON_PREFIX=`$PYTHON -c "import sys; print sys.prefix" | tr -d "\r"`
24AC_MSG_CHECKING(for Python development environment)
25PYTHON_INCLUDE=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_inc()" | tr -d "\r"`
26PYTHON_H=`$PYTHON -c "from os.path import *; h = join('$PYTHON_INCLUDE', 'Python.h'); print exists(h) and h or ''"`
27if test $PYTHON_H
28then AC_MSG_RESULT(yes)
29else AC_MSG_ERROR([Python.h not found.])
30fi
31
32AC_SUBST(PYTHON)
33AC_SUBST(PYTHON_INCLUDE)
34
35LIBEXT=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_config_var('SO')" | tr -d "\r"`
36case `uname -s` in
37CYGWIN*)
38    if test `$PYTHON -c "import os; print os.name" | tr -d "\r"` = posix; then
39      PYTHON_VERSION=`$PYTHON -c "import sys; print '%d.%d'%(sys.version_info[[0]],sys.version_info[[1]])"`
40      PYTHON_LIBS="-L$PYTHON_PREFIX/lib/python$PYTHON_VERSION/config -lpython$PYTHON_VERSION"
41dnl Cygwin doesn't have an -lutil, but some versions of distutils tell us to use it anyway.
42dnl It would be better to check for each library it tells us to use with AC_CHECK_LIB, but
43dnl to do that, we need the name of a function in each one, so we'll just hack -lutil out 
44dnl of the list.
45      PYTHON_DEP_LIBS=`$PYTHON -c "from distutils import sysconfig; import re; print re.sub(r'\\s*-lutil', '', sysconfig.get_config_var('LIBS') or '')"`
46    else dnl this is 'nt'
47      if test "$CXX" = "g++"; then
48        CPPFLAGS="$CPPFLAGS -D PARSE_MSVC"
49        CFLAGS="-mno-cygwin $CFLAGS"
50        CXXFLAGS="-mno-cygwin $CXXFLAGS"
51        LDFLAGS="-mno-cygwin $LDFLAGS"
52        PYTHON_VERSION=`$PYTHON -c "import sys; print '%d%d'%(sys.version_info[[0]],sys.version_info[[1]])" | tr -d "\r"`
53        PYTHON_LIBS="-L`cygpath -a $PYTHON_PREFIX | tr -d \"\r\"`/Libs -lpython$PYTHON_VERSION"
54      fi
55      PYTHON_INCLUDE=`cygpath -a $PYTHON_INCLUDE | tr -d "\r"`
56      PYTHON_DEP_LIBS=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_config_var('LIBS') or ''" | tr -d "\r"`
57    fi
58    LDSHARED="$CXX -shared"
59    CXXFLAGS="-D_REENTRANT $CXXFLAGS"
60    LIBS="$LIBS $PYTHON_LIBS $PYTHON_DEP_LIBS"
61    ;;
62Darwin)
63    PYTHON_VERSION=`$PYTHON -c "import sys; print '%d.%d'%(sys.version_info[[0]],sys.version_info[[1]])"`
64    PYTHON_LIBS="-L$PYTHON_PREFIX/lib/python$PYTHON_VERSION/config -lpython$PYTHON_VERSION"
65
66    CFLAGS="$CFLAGS -fPIC"
67    CXXFLAGS="$CXXFLAGS -fPIC"
68    LDSHARED="$CXX -dynamiclib -Wl,-undefined,dynamic_lookup"
69    ;;
70*)
71    PYTHON_VERSION=`$PYTHON -c "import sys; print '%d.%d'%(sys.version_info[[0]],sys.version_info[[1]])"`
72    PYTHON_LIBS="-L$PYTHON_PREFIX/lib/python$PYTHON_VERSION/config -lpython$PYTHON_VERSION"
73
74    CFLAGS="$CFLAGS -fPIC"
75    CXXFLAGS="$CXXFLAGS -fPIC"
76    LDSHARED="$CXX -shared"
77    ;;
78esac
79
80dnl do not substitute PYTHON_LIBS, as it is only defined for further configuration
81AC_SUBST(LIBEXT)
82AC_SUBST(LDSHARED)
83
84])dnl