Last active
December 22, 2015 07:59
-
-
Save tschoonj/6441999 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#configure.ac snippet | |
#copy paste into your own configure.ac file | |
#check for swig | |
AC_CHECK_PROGS([SWIG],[swig],["noswig"]) | |
#present configure with a command-line option to disable the python bindings | |
AC_ARG_ENABLE([python],[AS_HELP_STRING([--disable-python],[build without the python bindings])],[enable_python=$enableval],[enable_python=check]) | |
#default behavior is to install the python bindings into subfolders of $prefix | |
#however, this may require the user to set the PYTHONPATH environment variable | |
#in order to avoid this, invoke configure with the --enable-python-integration option | |
AC_ARG_ENABLE([python-integration],[AS_HELP_STRING([--enable-python-integration],[install the python bindings in the interpreters site-packages folder])],[enable_python_integration=$enableval],[enable_python_integration=check]) | |
VALID_PYTHON= | |
if test "x$SWIG" = xnoswig && test "x$enable_python" = xyes ; then | |
#don't even bother when swig is not found | |
AC_MSG_ERROR([--enable-python was given as an option but swig was not found on the system]) | |
elif test "x$SWIG" = xswig && test "x$enable_python" != xno ; then | |
#verify the python installation | |
AM_PATH_PYTHON(,[PYTHON_FOUND=true],[PYTHON_FOUND=false]) | |
if test "x$PYTHON_FOUND" = xtrue ; then | |
PYTHON_CPPFLAGS= | |
PYTHON_LDFLAGS= | |
AX_PYTHON_DEVEL | |
if test "x$PYTHON" = x ; then | |
if test "x$enable_python" = xyes ; then | |
AC_MSG_ERROR([Incomplete python development package]) | |
else | |
AC_MSG_WARN([Incomplete python development package]) | |
fi | |
VALID_PYTHON=no | |
else | |
VALID_PYTHON=yes | |
fi | |
fi | |
fi | |
if test "x$VALID_PYTHON" = xyes ; then | |
AC_MSG_NOTICE([Building with Python bindings]) | |
if test "x$enable_python_integration" = xyes ; then | |
pythondir=$PYTHON_SITE_PKG | |
pyexecdir=$PYTHON_SITE_PKG_EXEC | |
fi | |
AC_SUBST(PYTHONDIR,$pythondir) | |
AC_SUBST(PKGPYTHONDIR,$pkgpythondir) | |
AC_SUBST(PYEXECDIR,$pyexecdir) | |
AC_SUBST(PKGPYEXECDIR,$pkgpyexecdir) | |
fi | |
AM_CONDITIONAL([ENABLE_PYTHON],[test x$VALID_PYTHON = xyes]) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Modified by Tom Schoonjans | |
# =========================================================================== | |
# http://www.gnu.org/software/autoconf-archive/ax_python_devel.html | |
# =========================================================================== | |
# | |
# SYNOPSIS | |
# | |
# AX_PYTHON_DEVEL([version]) | |
# | |
# DESCRIPTION | |
# | |
# Note: Defines as a precious variable "PYTHON_VERSION". Don't override it | |
# in your configure.ac. | |
# | |
# This macro checks for Python and tries to get the include path to | |
# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS) | |
# output variables. It also exports $(PYTHON_EXTRA_LIBS) and | |
# $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code. | |
# | |
# You can search for some particular version of Python by passing a | |
# parameter to this macro, for example ">= '2.3.1'", or "== '2.4'". Please | |
# note that you *have* to pass also an operator along with the version to | |
# match, and pay special attention to the single quotes surrounding the | |
# version number. Don't use "PYTHON_VERSION" for this: that environment | |
# variable is declared as precious and thus reserved for the end-user. | |
# | |
# This macro should work for all versions of Python >= 2.1.0. As an end | |
# user, you can disable the check for the python version by setting the | |
# PYTHON_NOVERSIONCHECK environment variable to something else than the | |
# empty string. | |
# | |
# If you need to use this macro for an older Python version, please | |
# contact the authors. We're always open for feedback. | |
# | |
# LICENSE | |
# | |
# Copyright (c) 2009 Sebastian Huber <[email protected]> | |
# Copyright (c) 2009 Alan W. Irwin | |
# Copyright (c) 2009 Rafael Laboissiere <[email protected]> | |
# Copyright (c) 2009 Andrew Collier | |
# Copyright (c) 2009 Matteo Settenvini <[email protected]> | |
# Copyright (c) 2009 Horst Knorr <[email protected]> | |
# Copyright (c) 2013 Daniel Mullner <[email protected]> | |
# | |
# This program is free software: you can redistribute it and/or modify it | |
# under the terms of the GNU General Public License as published by the | |
# Free Software Foundation, either version 3 of the License, or (at your | |
# option) any later version. | |
# | |
# This program is distributed in the hope that it will be useful, but | |
# WITHOUT ANY WARRANTY; without even the implied warranty of | |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General | |
# Public License for more details. | |
# | |
# You should have received a copy of the GNU General Public License along | |
# with this program. If not, see <http://www.gnu.org/licenses/>. | |
# | |
# As a special exception, the respective Autoconf Macro's copyright owner | |
# gives unlimited permission to copy, distribute and modify the configure | |
# scripts that are the output of Autoconf when processing the Macro. You | |
# need not follow the terms of the GNU General Public License when using | |
# or distributing such scripts, even though portions of the text of the | |
# Macro appear in them. The GNU General Public License (GPL) does govern | |
# all other use of the material that constitutes the Autoconf Macro. | |
# | |
# This special exception to the GPL applies to versions of the Autoconf | |
# Macro released by the Autoconf Archive. When you make and distribute a | |
# modified version of the Autoconf Macro, you may extend this special | |
# exception to the GPL to apply to your modified version as well. | |
#serial 16 | |
AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL]) | |
AC_DEFUN([AX_PYTHON_DEVEL],[ | |
# | |
# Allow the use of a (user set) custom python version | |
# | |
AC_ARG_VAR([PYTHON_VERSION],[The installed Python | |
version to use, for example '2.3'. This string | |
will be appended to the Python interpreter | |
canonical name.]) | |
AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]]) | |
if test -z "$PYTHON"; then | |
AC_MSG_WARN([Cannot find python$PYTHON_VERSION in your system path]) | |
PYTHON_VERSION="" | |
PYTHON="" | |
fi | |
# | |
# Check for a version of Python >= 2.1.0 | |
# | |
AC_MSG_CHECKING([for a version of Python >= '2.1.0']) | |
ac_supports_python_ver=`$PYTHON -c "import sys; \ | |
ver = sys.version.split ()[[0]]; \ | |
print (ver >= '2.1.0')"` | |
if test "$ac_supports_python_ver" != "True"; then | |
if test -z "$PYTHON_NOVERSIONCHECK"; then | |
AC_MSG_RESULT([no]) | |
AC_MSG_WARN([ | |
This version of the AC@&t@_PYTHON_DEVEL macro | |
doesn't work properly with versions of Python before | |
2.1.0. You may need to re-run configure, setting the | |
variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG, | |
PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand. | |
Moreover, to disable this check, set PYTHON_NOVERSIONCHECK | |
to something else than an empty string. | |
]) | |
PYTHON="" | |
PYTHON_VERSION="" | |
else | |
AC_MSG_RESULT([skip at user request]) | |
fi | |
else | |
AC_MSG_RESULT([yes]) | |
fi | |
# | |
# if the macro parameter ``version'' is set, honour it | |
# | |
if test x$PYTHON != x ; then | |
if test -n "$1"; then | |
AC_MSG_CHECKING([for a version of Python $1]) | |
ac_supports_python_ver=`$PYTHON -c "import sys; \ | |
ver = sys.version.split ()[[0]]; \ | |
print (ver $1)"` | |
if test "$ac_supports_python_ver" = "True"; then | |
AC_MSG_RESULT([yes]) | |
else | |
AC_MSG_RESULT([no]) | |
AC_MSG_WARN([this package requires Python $1. | |
If you have it installed, but it isn't the default Python | |
interpreter in your system path, please pass the PYTHON_VERSION | |
variable to configure. See ``configure --help'' for reference. | |
]) | |
PYTHON_VERSION="" | |
PYTHON="" | |
fi | |
fi | |
fi | |
# | |
# Check if you have distutils, else fail | |
# | |
if test x$PYTHON != x ; then | |
AC_MSG_CHECKING([for the distutils Python package]) | |
ac_distutils_result=`$PYTHON -c "import distutils" 2>&1` | |
if test -z "$ac_distutils_result"; then | |
AC_MSG_RESULT([yes]) | |
else | |
AC_MSG_RESULT([no]) | |
AC_MSG_WARN([cannot import Python module "distutils". | |
Please check your Python installation. The error was: | |
$ac_distutils_result]) | |
PYTHON_VERSION="" | |
PYTHON="" | |
fi | |
fi | |
# | |
# Check for Python include path | |
# | |
if test x$PYTHON != x ; then | |
AC_MSG_CHECKING([for Python include path]) | |
if test -z "$PYTHON_CPPFLAGS"; then | |
python_path=`$PYTHON -c "import distutils.sysconfig; \ | |
print (distutils.sysconfig.get_python_inc ());"` | |
plat_python_path=`$PYTHON -c "import distutils.sysconfig; \ | |
print (distutils.sysconfig.get_python_inc (plat_specific=1));"` | |
if test -n "${python_path}"; then | |
if test "${plat_python_path}" != "${python_path}"; then | |
python_path="-I$python_path -I$plat_python_path" | |
else | |
python_path="-I$python_path" | |
fi | |
fi | |
PYTHON_CPPFLAGS=$python_path | |
fi | |
AC_MSG_RESULT([$PYTHON_CPPFLAGS]) | |
AC_SUBST([PYTHON_CPPFLAGS]) | |
fi | |
# | |
# Check for Python library path | |
# | |
if test x$PYTHON != x ; then | |
AC_MSG_CHECKING([for Python library path]) | |
if test -z "$PYTHON_LDFLAGS"; then | |
# (makes two attempts to ensure we've got a version number | |
# from the interpreter) | |
ac_python_version=`cat<<EOD | $PYTHON - | |
# join all versioning strings, on some systems | |
# major/minor numbers could be in different list elements | |
from distutils.sysconfig import * | |
e = get_config_var('VERSION') | |
if e is not None: | |
print(e) | |
EOD` | |
if test -z "$ac_python_version"; then | |
if test -n "$PYTHON_VERSION"; then | |
ac_python_version=$PYTHON_VERSION | |
else | |
ac_python_version=`$PYTHON -c "import sys; \ | |
print (sys.version[[:3]])"` | |
fi | |
fi | |
# Make the versioning information available to the compiler | |
AC_DEFINE_UNQUOTED([HAVE_PYTHON], ["$ac_python_version"], | |
[If available, contains the Python version number currently in use.]) | |
# First, the library directory: | |
ac_python_libdir=`cat<<EOD | $PYTHON - | |
# There should be only one | |
import distutils.sysconfig | |
e = distutils.sysconfig.get_config_var('LIBDIR') | |
if e is not None: | |
print (e) | |
EOD` | |
# Now, for the library: | |
ac_python_library=`cat<<EOD | $PYTHON - | |
import distutils.sysconfig | |
c = distutils.sysconfig.get_config_vars() | |
if 'LDVERSION' in c: | |
print ('python'+c[['LDVERSION']]) | |
else: | |
print ('python'+c[['VERSION']]) | |
EOD` | |
# This small piece shamelessly adapted from PostgreSQL python macro; | |
# credits goes to momjian, I think. I'd like to put the right name | |
# in the credits, if someone can point me in the right direction... ? | |
# | |
#if test -n "$ac_python_libdir" -a -n "$ac_python_library" | |
#then | |
# use the official shared library | |
ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"` | |
PYTHON_LDFLAGS="-L$ac_python_libdir -l$ac_python_library" | |
#else | |
# # old way: use libpython from python_configdir | |
# ac_python_libdir=`$PYTHON -c \ | |
# "from distutils.sysconfig import get_python_lib as f; \ | |
# import os; \ | |
# print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"` | |
# PYTHON_LDFLAGS="-L$ac_python_libdir -lpython$ac_python_version" | |
#fi | |
if test -z "PYTHON_LDFLAGS"; then | |
AC_MSG_WARN([ | |
Cannot determine location of your Python DSO. Please check it was installed with | |
dynamic libraries enabled, or try setting PYTHON_LDFLAGS by hand. | |
]) | |
PYTHON="" | |
PYTHON_VERSION="" | |
fi | |
fi | |
AC_MSG_RESULT([$PYTHON_LDFLAGS]) | |
AC_SUBST([PYTHON_LDFLAGS]) | |
fi | |
# | |
# Check for site packages | |
# | |
if test x$PYTHON != x ; then | |
AC_MSG_CHECKING([for Python site-packages path]) | |
if test -z "$PYTHON_SITE_PKG"; then | |
PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \ | |
print (distutils.sysconfig.get_python_lib(0,0));"` | |
fi | |
AC_MSG_RESULT([$PYTHON_SITE_PKG]) | |
AC_SUBST([PYTHON_SITE_PKG]) | |
# | |
# Check for site exec packages | |
# | |
AC_MSG_CHECKING([for Python site-packages extension modules path]) | |
if test -z "$PYTHON_SITE_PKG_EXEC"; then | |
PYTHON_SITE_PKG_EXEC=`$PYTHON -c "import distutils.sysconfig; \ | |
print (distutils.sysconfig.get_python_lib(1,0));"` | |
fi | |
AC_MSG_RESULT([$PYTHON_SITE_PKG_EXEC]) | |
AC_SUBST([PYTHON_SITE_PKG_EXEC]) | |
# | |
# Check for package building cflags | |
# | |
AC_MSG_CHECKING([for Python module cflags]) | |
if test -z "$PYTHON_CFLAGS"; then | |
PYTHON_CFLAGS=[`$PYTHON -c "import distutils.sysconfig; \ | |
conf = distutils.sysconfig.get_config_vars(); \ | |
print (conf['OPT'])"`] | |
fi | |
AC_MSG_RESULT([$PYTHON_CFLAGS]) | |
AC_SUBST([PYTHON_CFLAGS]) | |
# | |
# libraries which must be linked in when embedding | |
# | |
#AC_MSG_CHECKING(python extra libraries) | |
#if test -z "$PYTHON_EXTRA_LIBS"; then | |
# PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \ | |
# conf = distutils.sysconfig.get_config_var; \ | |
# print (conf('LIBS'))"` | |
#fi | |
#AC_MSG_RESULT([$PYTHON_EXTRA_LIBS]) | |
#AC_SUBST(PYTHON_EXTRA_LIBS) | |
# | |
# final check to see if everything compiles alright | |
# | |
AC_MSG_CHECKING([consistency of all components of python development environment]) | |
# save current global flags | |
ac_save_LIBS="$LIBS" | |
ac_save_CPPFLAGS="$CPPFLAGS" | |
LIBS="$ac_save_LIBS $PYTHON_LDFLAGS $PYTHON_EXTRA_LIBS" | |
CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS" | |
AC_LANG_PUSH([C]) | |
AC_LINK_IFELSE([ | |
AC_LANG_PROGRAM([[#include <Python.h>]], | |
[[Py_Initialize();]]) | |
],[pythonexists=yes],[pythonexists=no]) | |
AC_LANG_POP([C]) | |
# turn back to default flags | |
CPPFLAGS="$ac_save_CPPFLAGS" | |
LIBS="$ac_save_LIBS" | |
AC_MSG_RESULT([$pythonexists]) | |
if test ! "x$pythonexists" = "xyes"; then | |
AC_MSG_WARN([ | |
Could not link test program to Python. Maybe the main Python library has been | |
installed in some non-standard library path. | |
============================================================================ | |
ERROR! | |
You probably have to install the development version of the Python package | |
for your distribution. The exact name of this package varies among them. | |
============================================================================ | |
]) | |
PYTHON_VERSION="" | |
PYTHON="" | |
fi | |
fi | |
# | |
# all done! | |
# | |
]) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#python bindings will only be built if all buildtools are available, hence the following automake conditional | |
if ENABLE_PYTHON | |
#our python extension module | |
pyexec_LTLIBRARIES = _mytest.la | |
_mytest_la_CFLAGS = $(PYTHON_CFLAGS) -I$(top_srcdir)/include $(PYTHON_CPPFLAGS) | |
#link to the C-library | |
#probably on Windows one will need to link against the python dll as well | |
_mytest_la_LIBADD = ../src/mytest.la | |
#the source code for our extensions module | |
#nodist because this file will be generated by swig | |
nodist__mytest_la_SOURCES = mytest_wrap.c | |
#-module forces libtool to generate a dynamically loadable module | |
_mytest_la_LDFLAGS = -avoid-version -module -shared -export-dynamic | |
#nodist because this file will be generated by swig | |
nodist_python_PYTHON = mytest.py | |
#this line assumes that the swig interface file mytest.i is located in the src subdirectory | |
mytest_wrap.c: $(top_srcdir)/src/mytest.i | |
$(SWIG) -I${top_srcdir}/include -includeall -o mytest_wrap.c -python ${top_srcdir}/src/mytest.i | |
mytest.py: mytest_wrap.c | |
clean-local: | |
rm -rf mytest_wrap.c mytest.py mytest.pyc | |
endif |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment