Simple SWIG interface
This commit is contained in:
parent
15addf35aa
commit
12c7f6a1c5
12 changed files with 644 additions and 0 deletions
|
@ -20,6 +20,14 @@ AC_PROG_AWK
|
||||||
AC_PROG_RANLIB
|
AC_PROG_RANLIB
|
||||||
# Checks for libraries.
|
# Checks for libraries.
|
||||||
|
|
||||||
|
# For SWIG & Python
|
||||||
|
# AC_PROG_LIBTOOL
|
||||||
|
AM_PATH_PYTHON(2.3)
|
||||||
|
AC_PROG_SWIG(1.3)
|
||||||
|
SWIG_ENABLE_CXX
|
||||||
|
SWIG_PYTHON
|
||||||
|
AM_CONDITIONAL(HAVE_SWIG, test x"$have_swig" = "xyes")
|
||||||
|
|
||||||
#AM_PATH_CHECK(,[have_check="yes"],
|
#AM_PATH_CHECK(,[have_check="yes"],
|
||||||
# AC_MSG_WARN([Check not found; cannot run unit tests!])
|
# AC_MSG_WARN([Check not found; cannot run unit tests!])
|
||||||
# [have_check="no"])
|
# [have_check="no"])
|
||||||
|
@ -232,6 +240,7 @@ AC_CONFIG_FILES([Makefile
|
||||||
test/monotree/Makefile
|
test/monotree/Makefile
|
||||||
test/pobj/Makefile
|
test/pobj/Makefile
|
||||||
utilities/Makefile
|
utilities/Makefile
|
||||||
|
utilities/swig/Makefile
|
||||||
examples/Makefile
|
examples/Makefile
|
||||||
])
|
])
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
|
@ -475,6 +475,8 @@ int Tbegin();
|
||||||
*/
|
*/
|
||||||
compensated_function void Tupdate(int xid, recordid rid,
|
compensated_function void Tupdate(int xid, recordid rid,
|
||||||
const void *dat, int op);
|
const void *dat, int op);
|
||||||
|
compensated_function void TupdateStr(int xid, recordid rid,
|
||||||
|
const char *dat, int op);
|
||||||
compensated_function void TupdateRaw(int xid, recordid rid,
|
compensated_function void TupdateRaw(int xid, recordid rid,
|
||||||
const void *dat, int op);
|
const void *dat, int op);
|
||||||
compensated_function void TupdateDeferred(int xid, recordid rid,
|
compensated_function void TupdateDeferred(int xid, recordid rid,
|
||||||
|
@ -485,6 +487,7 @@ compensated_function void TupdateDeferred(int xid, recordid rid,
|
||||||
* @param dat buffer into which data goes
|
* @param dat buffer into which data goes
|
||||||
*/
|
*/
|
||||||
compensated_function void Tread(int xid, recordid rid, void *dat);
|
compensated_function void Tread(int xid, recordid rid, void *dat);
|
||||||
|
compensated_function void TreadStr(int xid, recordid rid, char *dat);
|
||||||
void TreadUnlocked(int xid, recordid rid, void *dat);
|
void TreadUnlocked(int xid, recordid rid, void *dat);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
127
m4/ac_pkg_swig.m4
Normal file
127
m4/ac_pkg_swig.m4
Normal file
|
@ -0,0 +1,127 @@
|
||||||
|
##### http://autoconf-archive.cryp.to/ac_pkg_swig.html
|
||||||
|
#
|
||||||
|
# SYNOPSIS
|
||||||
|
#
|
||||||
|
# AC_PROG_SWIG([major.minor.micro])
|
||||||
|
#
|
||||||
|
# DESCRIPTION
|
||||||
|
#
|
||||||
|
# This macro searches for a SWIG installation on your system. If
|
||||||
|
# found you should call SWIG via $(SWIG). You can use the optional
|
||||||
|
# first argument to check if the version of the available SWIG is
|
||||||
|
# greater than or equal to the value of the argument. It should have
|
||||||
|
# the format: N[.N[.N]] (N is a number between 0 and 999. Only the
|
||||||
|
# first N is mandatory.)
|
||||||
|
#
|
||||||
|
# If the version argument is given (e.g. 1.3.17), AC_PROG_SWIG checks
|
||||||
|
# that the swig package is this version number or higher.
|
||||||
|
#
|
||||||
|
# In configure.in, use as:
|
||||||
|
#
|
||||||
|
# AC_PROG_SWIG(1.3.17)
|
||||||
|
# SWIG_ENABLE_CXX
|
||||||
|
# SWIG_MULTI_MODULE_SUPPORT
|
||||||
|
# SWIG_PYTHON
|
||||||
|
#
|
||||||
|
# LAST MODIFICATION
|
||||||
|
#
|
||||||
|
# 2006-10-22
|
||||||
|
#
|
||||||
|
# COPYLEFT
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006 Sebastian Huber <sebastian-huber@web.de>
|
||||||
|
# Copyright (c) 2006 Alan W. Irwin <irwin@beluga.phys.uvic.ca>
|
||||||
|
# Copyright (c) 2006 Rafael Laboissiere <rafael@laboissiere.net>
|
||||||
|
# Copyright (c) 2006 Andrew Collier <colliera@ukzn.ac.za>
|
||||||
|
#
|
||||||
|
# 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 2 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, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
# 02111-1307, USA.
|
||||||
|
#
|
||||||
|
# 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 Macro 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.
|
||||||
|
|
||||||
|
AC_DEFUN([AC_PROG_SWIG],[
|
||||||
|
AC_PATH_PROG([SWIG],[swig])
|
||||||
|
have_swig="no"
|
||||||
|
if test -z "$SWIG" ; then
|
||||||
|
AC_MSG_WARN([cannot find 'swig' program. You should look at http://www.swig.org])
|
||||||
|
SWIG='echo "Error: SWIG is not installed. You should look at http://www.swig.org" ; false'
|
||||||
|
elif test -n "$1" ; then
|
||||||
|
AC_MSG_CHECKING([for SWIG version])
|
||||||
|
[swig_version=`$SWIG -version 2>&1 | grep 'SWIG Version' | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`]
|
||||||
|
AC_MSG_RESULT([$swig_version])
|
||||||
|
if test -n "$swig_version" ; then
|
||||||
|
# Calculate the required version number components
|
||||||
|
[required=$1]
|
||||||
|
[required_major=`echo $required | sed 's/[^0-9].*//'`]
|
||||||
|
if test -z "$required_major" ; then
|
||||||
|
[required_major=0]
|
||||||
|
fi
|
||||||
|
[required=`echo $required | sed 's/[0-9]*[^0-9]//'`]
|
||||||
|
[required_minor=`echo $required | sed 's/[^0-9].*//'`]
|
||||||
|
if test -z "$required_minor" ; then
|
||||||
|
[required_minor=0]
|
||||||
|
fi
|
||||||
|
[required=`echo $required | sed 's/[0-9]*[^0-9]//'`]
|
||||||
|
[required_patch=`echo $required | sed 's/[^0-9].*//'`]
|
||||||
|
if test -z "$required_patch" ; then
|
||||||
|
[required_patch=0]
|
||||||
|
fi
|
||||||
|
# Calculate the available version number components
|
||||||
|
[available=$swig_version]
|
||||||
|
[available_major=`echo $available | sed 's/[^0-9].*//'`]
|
||||||
|
if test -z "$available_major" ; then
|
||||||
|
[available_major=0]
|
||||||
|
fi
|
||||||
|
[available=`echo $available | sed 's/[0-9]*[^0-9]//'`]
|
||||||
|
[available_minor=`echo $available | sed 's/[^0-9].*//'`]
|
||||||
|
if test -z "$available_minor" ; then
|
||||||
|
[available_minor=0]
|
||||||
|
fi
|
||||||
|
[available=`echo $available | sed 's/[0-9]*[^0-9]//'`]
|
||||||
|
[available_patch=`echo $available | sed 's/[^0-9].*//'`]
|
||||||
|
if test -z "$available_patch" ; then
|
||||||
|
[available_patch=0]
|
||||||
|
fi
|
||||||
|
if test $available_major -ne $required_major \
|
||||||
|
-o $available_minor -ne $required_minor \
|
||||||
|
-o $available_patch -lt $required_patch ; then
|
||||||
|
AC_MSG_WARN([SWIG version >= $1 is required. You have $swig_version. You should look at http://www.swig.org])
|
||||||
|
SWIG='echo "Error: SWIG version >= $1 is required. You have '"$swig_version"'. You should look at http://www.swig.org" ; false'
|
||||||
|
else
|
||||||
|
AC_MSG_NOTICE([SWIG executable is '$SWIG'])
|
||||||
|
SWIG_LIB=`$SWIG -swiglib`
|
||||||
|
AC_MSG_NOTICE([SWIG library directory is '$SWIG_LIB'])
|
||||||
|
have_swig="yes"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
AC_MSG_WARN([cannot determine SWIG version])
|
||||||
|
SWIG='echo "Error: Cannot determine SWIG version. You should look at http://www.swig.org" ; false'
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
AC_SUBST([SWIG_LIB])
|
||||||
|
])
|
269
m4/ac_python_devel.m4
Normal file
269
m4/ac_python_devel.m4
Normal file
|
@ -0,0 +1,269 @@
|
||||||
|
##### http://autoconf-archive.cryp.to/ac_python_devel.html
|
||||||
|
#
|
||||||
|
# SYNOPSIS
|
||||||
|
#
|
||||||
|
# AC_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.
|
||||||
|
#
|
||||||
|
# LAST MODIFICATION
|
||||||
|
#
|
||||||
|
# 2006-10-22
|
||||||
|
#
|
||||||
|
# COPYLEFT
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006 Sebastian Huber <sebastian-huber@web.de>
|
||||||
|
# Copyright (c) 2006 Alan W. Irwin <irwin@beluga.phys.uvic.ca>
|
||||||
|
# Copyright (c) 2006 Rafael Laboissiere <rafael@laboissiere.net>
|
||||||
|
# Copyright (c) 2006 Andrew Collier <colliera@ukzn.ac.za>
|
||||||
|
# Copyright (c) 2006 Matteo Settenvini <matteo@member.fsf.org>
|
||||||
|
# Copyright (c) 2006 Horst Knorr <hk_classes@knoda.org>
|
||||||
|
#
|
||||||
|
# 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 2 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, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
# 02111-1307, USA.
|
||||||
|
#
|
||||||
|
# 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 Macro 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.
|
||||||
|
|
||||||
|
AC_DEFUN([AC_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_ERROR([Cannot find python$PYTHON_VERSION in your system path])
|
||||||
|
PYTHON_VERSION=""
|
||||||
|
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, string; \
|
||||||
|
ver = string.split(sys.version)[[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_FAILURE([
|
||||||
|
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.
|
||||||
|
])
|
||||||
|
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 -n "$1"; then
|
||||||
|
AC_MSG_CHECKING([for a version of Python $1])
|
||||||
|
ac_supports_python_ver=`$PYTHON -c "import sys, string; \
|
||||||
|
ver = string.split(sys.version)[[0]]; \
|
||||||
|
print ver $1"`
|
||||||
|
if test "$ac_supports_python_ver" = "True"; then
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
AC_MSG_ERROR([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=""
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check if you have distutils, else fail
|
||||||
|
#
|
||||||
|
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_ERROR([cannot import Python module "distutils".
|
||||||
|
Please check your Python installation. The error was:
|
||||||
|
$ac_distutils_result])
|
||||||
|
PYTHON_VERSION=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check for Python include path
|
||||||
|
#
|
||||||
|
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();"`
|
||||||
|
if test -n "${python_path}"; then
|
||||||
|
python_path="-I$python_path"
|
||||||
|
fi
|
||||||
|
PYTHON_CPPFLAGS=$python_path
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT([$PYTHON_CPPFLAGS])
|
||||||
|
AC_SUBST([PYTHON_CPPFLAGS])
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check for Python library path
|
||||||
|
#
|
||||||
|
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)
|
||||||
|
py_version=`$PYTHON -c "from distutils.sysconfig import *; \
|
||||||
|
from string import join; \
|
||||||
|
print join(get_config_vars('VERSION'))"`
|
||||||
|
if test "$py_version" == "[None]"; then
|
||||||
|
if test -n "$PYTHON_VERSION"; then
|
||||||
|
py_version=$PYTHON_VERSION
|
||||||
|
else
|
||||||
|
py_version=`$PYTHON -c "import sys; \
|
||||||
|
print sys.version[[:3]]"`
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
PYTHON_LDFLAGS=`$PYTHON -c "from distutils.sysconfig import *; \
|
||||||
|
from string import join; \
|
||||||
|
print '-L' + get_python_lib(0,1), \
|
||||||
|
'-lpython';"`$py_version
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT([$PYTHON_LDFLAGS])
|
||||||
|
AC_SUBST([PYTHON_LDFLAGS])
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check for site packages
|
||||||
|
#
|
||||||
|
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])
|
||||||
|
|
||||||
|
#
|
||||||
|
# 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('LOCALMODLIBS'), conf('LIBS')"`
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
|
||||||
|
AC_SUBST(PYTHON_EXTRA_LIBS)
|
||||||
|
|
||||||
|
#
|
||||||
|
# linking flags needed when embedding
|
||||||
|
#
|
||||||
|
AC_MSG_CHECKING(python extra linking flags)
|
||||||
|
if test -z "$PYTHON_EXTRA_LDFLAGS"; then
|
||||||
|
PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
|
||||||
|
conf = distutils.sysconfig.get_config_var; \
|
||||||
|
print conf('LINKFORSHARED')"`
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
|
||||||
|
AC_SUBST(PYTHON_EXTRA_LDFLAGS)
|
||||||
|
|
||||||
|
#
|
||||||
|
# final check to see if everything compiles alright
|
||||||
|
#
|
||||||
|
AC_MSG_CHECKING([consistency of all components of python development environment])
|
||||||
|
AC_LANG_PUSH([C])
|
||||||
|
# save current global flags
|
||||||
|
LIBS="$ac_save_LIBS $PYTHON_LDFLAGS"
|
||||||
|
CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
|
||||||
|
AC_TRY_LINK([
|
||||||
|
#include <Python.h>
|
||||||
|
],[
|
||||||
|
Py_Initialize();
|
||||||
|
],[pythonexists=yes],[pythonexists=no])
|
||||||
|
|
||||||
|
AC_MSG_RESULT([$pythonexists])
|
||||||
|
|
||||||
|
if test ! "$pythonexists" = "yes"; then
|
||||||
|
AC_MSG_ERROR([
|
||||||
|
Could not link test program to Python. Maybe the main Python library has been
|
||||||
|
installed in some non-standard library path. If so, pass it to configure,
|
||||||
|
via the LDFLAGS environment variable.
|
||||||
|
Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib"
|
||||||
|
============================================================================
|
||||||
|
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=""
|
||||||
|
fi
|
||||||
|
AC_LANG_POP
|
||||||
|
# turn back to default flags
|
||||||
|
CPPFLAGS="$ac_save_CPPFLAGS"
|
||||||
|
LIBS="$ac_save_LIBS"
|
||||||
|
|
||||||
|
#
|
||||||
|
# all done!
|
||||||
|
#
|
||||||
|
])
|
56
m4/swig_enable_cxx.m4
Normal file
56
m4/swig_enable_cxx.m4
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
##### http://autoconf-archive.cryp.to/swig_enable_cxx.html
|
||||||
|
#
|
||||||
|
# SYNOPSIS
|
||||||
|
#
|
||||||
|
# SWIG_ENABLE_CXX
|
||||||
|
#
|
||||||
|
# DESCRIPTION
|
||||||
|
#
|
||||||
|
# Enable SWIG C++ support. This affects all invocations of $(SWIG).
|
||||||
|
#
|
||||||
|
# LAST MODIFICATION
|
||||||
|
#
|
||||||
|
# 2006-10-22
|
||||||
|
#
|
||||||
|
# COPYLEFT
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006 Sebastian Huber <sebastian-huber@web.de>
|
||||||
|
# Copyright (c) 2006 Alan W. Irwin <irwin@beluga.phys.uvic.ca>
|
||||||
|
# Copyright (c) 2006 Rafael Laboissiere <rafael@laboissiere.net>
|
||||||
|
# Copyright (c) 2006 Andrew Collier <colliera@ukzn.ac.za>
|
||||||
|
#
|
||||||
|
# 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 2 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, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
# 02111-1307, USA.
|
||||||
|
#
|
||||||
|
# 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 Macro 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.
|
||||||
|
|
||||||
|
AC_DEFUN([SWIG_ENABLE_CXX],[
|
||||||
|
AC_REQUIRE([AC_PROG_SWIG])
|
||||||
|
AC_REQUIRE([AC_PROG_CXX])
|
||||||
|
SWIG="$SWIG -c++"
|
||||||
|
])
|
67
m4/swig_python.m4
Normal file
67
m4/swig_python.m4
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
##### http://autoconf-archive.cryp.to/swig_python.html
|
||||||
|
#
|
||||||
|
# SYNOPSIS
|
||||||
|
#
|
||||||
|
# SWIG_PYTHON([use-shadow-classes = {no, yes}])
|
||||||
|
#
|
||||||
|
# DESCRIPTION
|
||||||
|
#
|
||||||
|
# Checks for Python and provides the $(SWIG_PYTHON_CPPFLAGS), and
|
||||||
|
# $(SWIG_PYTHON_OPT) output variables.
|
||||||
|
#
|
||||||
|
# $(SWIG_PYTHON_OPT) contains all necessary SWIG options to generate
|
||||||
|
# code for Python. Shadow classes are enabled unless the value of the
|
||||||
|
# optional first argument is exactly 'no'. If you need multi module
|
||||||
|
# support (provided by the SWIG_MULTI_MODULE_SUPPORT macro) use
|
||||||
|
# $(SWIG_PYTHON_LIBS) to link against the appropriate library. It
|
||||||
|
# contains the SWIG Python runtime library that is needed by the type
|
||||||
|
# check system for example.
|
||||||
|
#
|
||||||
|
# LAST MODIFICATION
|
||||||
|
#
|
||||||
|
# 2006-10-22
|
||||||
|
#
|
||||||
|
# COPYLEFT
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006 Sebastian Huber <sebastian-huber@web.de>
|
||||||
|
# Copyright (c) 2006 Alan W. Irwin <irwin@beluga.phys.uvic.ca>
|
||||||
|
# Copyright (c) 2006 Rafael Laboissiere <rafael@laboissiere.net>
|
||||||
|
# Copyright (c) 2006 Andrew Collier <colliera@ukzn.ac.za>
|
||||||
|
#
|
||||||
|
# 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 2 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, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
# 02111-1307, USA.
|
||||||
|
#
|
||||||
|
# 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 Macro 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.
|
||||||
|
|
||||||
|
AC_DEFUN([SWIG_PYTHON],[
|
||||||
|
AC_REQUIRE([AC_PROG_SWIG])
|
||||||
|
AC_REQUIRE([AC_PYTHON_DEVEL])
|
||||||
|
test "x$1" != "xno" || swig_shadow=" -noproxy"
|
||||||
|
AC_SUBST([SWIG_PYTHON_OPT],[-python$swig_shadow])
|
||||||
|
AC_SUBST([SWIG_PYTHON_CPPFLAGS],[$PYTHON_CPPFLAGS])
|
||||||
|
])
|
|
@ -244,6 +244,11 @@ compensated_function void TupdateRaw(int xid, recordid rid,
|
||||||
releasePage(p);
|
releasePage(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
compensated_function void TupdateStr(int xid, recordid rid,
|
||||||
|
const char *dat, int op) {
|
||||||
|
Tupdate(xid, rid, dat, op);
|
||||||
|
}
|
||||||
|
|
||||||
compensated_function void Tupdate(int xid, recordid rid,
|
compensated_function void Tupdate(int xid, recordid rid,
|
||||||
const void *dat, int op) {
|
const void *dat, int op) {
|
||||||
Page * p = loadPage(xid, rid.page);
|
Page * p = loadPage(xid, rid.page);
|
||||||
|
@ -286,6 +291,10 @@ void TreadUnlocked(int xid, recordid rid, void * dat) {
|
||||||
releasePage(p);
|
releasePage(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
compensated_function void TreadStr(int xid, recordid rid, char * dat) {
|
||||||
|
Tread(xid, rid, dat);
|
||||||
|
}
|
||||||
|
|
||||||
compensated_function void Tread(int xid, recordid rid, void * dat) {
|
compensated_function void Tread(int xid, recordid rid, void * dat) {
|
||||||
Page * p;
|
Page * p;
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -4,3 +4,9 @@ LDADD=$(top_builddir)/src/lladd/liblladd.a \
|
||||||
$(top_builddir)/src/libdfa/librw.a
|
$(top_builddir)/src/libdfa/librw.a
|
||||||
bin_PROGRAMS=logfile_dump run_recovery truncate_log
|
bin_PROGRAMS=logfile_dump run_recovery truncate_log
|
||||||
AM_CFLAGS=${GLOBAL_CFLAGS}
|
AM_CFLAGS=${GLOBAL_CFLAGS}
|
||||||
|
|
||||||
|
SUBDIRS =
|
||||||
|
|
||||||
|
if HAVE_SWIG
|
||||||
|
SUBDIRS += swig
|
||||||
|
endif
|
||||||
|
|
13
utilities/swig/Makefile.am
Normal file
13
utilities/swig/Makefile.am
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
|
||||||
|
BUILT_SOURCES = lladd_wrap.cc
|
||||||
|
|
||||||
|
all: $(BUILD_SOURCES)
|
||||||
|
pkgpython_PYTHON = lladd.py
|
||||||
|
pkgpyexec_LTLIBRARIES = _lladd.la
|
||||||
|
_lladd_la_SOURCES = lladd_wrap.cc
|
||||||
|
_lladd_la_CPPFLAGS = $(SWIG_PYTHON_CPPFLAGS) -I$(top_srcdir) -I$(top_srcdir)/src
|
||||||
|
_lladd_la_LDFLAGS = -module
|
||||||
|
_lladd_la_LIBADD = $(top_srcdir)/src/lladd/liblladd.a $(top_srcdir)/src/libdfa/librw.a
|
||||||
|
|
||||||
|
lladd_wrap.cc : lladd.i
|
||||||
|
$(SWIG) $(SWIG_PYTHON_OPT) -I$(top_srcdir)/src -I$(top_srcdir) -o $@ $<
|
0
utilities/swig/__init__.py
Normal file
0
utilities/swig/__init__.py
Normal file
46
utilities/swig/ex1.py
Normal file
46
utilities/swig/ex1.py
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
#!/usr/bin/python2.4
|
||||||
|
#
|
||||||
|
|
||||||
|
"""Example 1 in Python
|
||||||
|
"""
|
||||||
|
|
||||||
|
import lladd
|
||||||
|
import sys
|
||||||
|
import array
|
||||||
|
|
||||||
|
def runit(argv):
|
||||||
|
print "init"
|
||||||
|
lladd.Tinit()
|
||||||
|
|
||||||
|
# First transaction, for writing
|
||||||
|
print "begin & alloc"
|
||||||
|
xid = lladd.Tbegin();
|
||||||
|
record_id = lladd.Talloc(xid, 4);
|
||||||
|
|
||||||
|
print "update"
|
||||||
|
write_data = array.array('l', (42,))
|
||||||
|
data_out = write_data.tostring()
|
||||||
|
assert len(data_out) == 4
|
||||||
|
|
||||||
|
lladd.TupdateStr(xid, record_id, data_out, lladd.OPERATION_SET)
|
||||||
|
lladd.Tcommit(xid)
|
||||||
|
|
||||||
|
# Second transaction, for reading
|
||||||
|
print "read"
|
||||||
|
xid = lladd.Tbegin()
|
||||||
|
|
||||||
|
# Read from Stasis into memory for data_in
|
||||||
|
data_in = '1234'
|
||||||
|
lladd.TreadStr(xid, record_id, data_in)
|
||||||
|
read_data = array.array('l', data_in)
|
||||||
|
assert read_data[0] == 42
|
||||||
|
|
||||||
|
print "done"
|
||||||
|
lladd.Tdealloc(xid, record_id)
|
||||||
|
lladd.Tabort(xid)
|
||||||
|
|
||||||
|
lladd.Tdeinit()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
runit(sys.argv)
|
39
utilities/swig/lladd.i
Normal file
39
utilities/swig/lladd.i
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
%module lladd
|
||||||
|
%{
|
||||||
|
#include "lladd/transactional.h"
|
||||||
|
%}
|
||||||
|
|
||||||
|
extern int Tinit();
|
||||||
|
extern int Tdeinit();
|
||||||
|
|
||||||
|
extern int Tbegin();
|
||||||
|
|
||||||
|
extern void Tupdate(int xid, recordid rid, const void *dat, int op);
|
||||||
|
extern void TupdateStr(int xid, recordid rid, const char *dat, int op);
|
||||||
|
extern void TupdateRaw(int xid, recordid rid, const void *dat, int op);
|
||||||
|
|
||||||
|
extern void Tread(int xid, recordid rid, void *dat);
|
||||||
|
extern void TreadStr(int xid, recordid rid, char *dat);
|
||||||
|
|
||||||
|
extern void TreadUnlocked(int xid, recordid rid, void *dat);
|
||||||
|
|
||||||
|
extern int Tcommit(int xid);
|
||||||
|
extern int Tabort(int xid);
|
||||||
|
|
||||||
|
extern void Trevive(int xid, long lsn);
|
||||||
|
|
||||||
|
extern void TsetXIDCount(int xid);
|
||||||
|
|
||||||
|
extern int TisActiveTransaction(int xid);
|
||||||
|
|
||||||
|
extern lsn_t transactions_minRecLSN();
|
||||||
|
|
||||||
|
extern int TdurabilityLevel();
|
||||||
|
|
||||||
|
extern recordid Talloc(int xid, unsigned long size);
|
||||||
|
extern recordid TallocFromPage(int xid, long page, unsigned long size);
|
||||||
|
extern void Tdealloc(int xid, recordid rid);
|
||||||
|
|
||||||
|
%include "lladd/constants.h"
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue