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
|
||||
# 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"],
|
||||
# AC_MSG_WARN([Check not found; cannot run unit tests!])
|
||||
# [have_check="no"])
|
||||
|
@ -232,6 +240,7 @@ AC_CONFIG_FILES([Makefile
|
|||
test/monotree/Makefile
|
||||
test/pobj/Makefile
|
||||
utilities/Makefile
|
||||
utilities/swig/Makefile
|
||||
examples/Makefile
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
|
|
@ -475,6 +475,8 @@ int Tbegin();
|
|||
*/
|
||||
compensated_function void Tupdate(int xid, recordid rid,
|
||||
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,
|
||||
const void *dat, int op);
|
||||
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
|
||||
*/
|
||||
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);
|
||||
|
||||
/**
|
||||
|
|
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);
|
||||
}
|
||||
|
||||
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,
|
||||
const void *dat, int op) {
|
||||
Page * p = loadPage(xid, rid.page);
|
||||
|
@ -286,6 +291,10 @@ void TreadUnlocked(int xid, recordid rid, void * dat) {
|
|||
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) {
|
||||
Page * p;
|
||||
try {
|
||||
|
|
|
@ -4,3 +4,9 @@ LDADD=$(top_builddir)/src/lladd/liblladd.a \
|
|||
$(top_builddir)/src/libdfa/librw.a
|
||||
bin_PROGRAMS=logfile_dump run_recovery truncate_log
|
||||
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