Running pytst 1.15 on a 64-bit platform
by Thomas Brox Røst on January 25, 2009
in Python, pytst
Update: The latest version, 1.17, compiles on 64-bit platforms out of the box, so the patch below is no longer necessary.
Nicolas Lehuen’s pytst is a C++ ternary search tree implementation with a Python interface. It’s an excellent tool—and it is also really, really fast.
Unfortunately version 1.15 doesn’t compile on 64-bit platforms, giving the following error messages:
01.
pythonTST.h:178: error: cannot convert 'int*' to 'Py_ssize_t*'
for
argument '3'
02.
to 'int PyString_AsStringAndSize(PyObject*, char**, Py_ssize_t*)'
03.
tst_wrap.cxx: In
function
'PyObject* _wrap__TST_walk__SWIG_1(PyObject*, int, PyO
04.
bject**)':
05.
tst_wrap.cxx:3175: error: cannot convert 'int*' to 'Py_ssize_t*'
for
argument '3
06.
' to 'int PyString_AsStringAndSize(PyObject*, char**, Py_ssize_t*)'
07.
tst_wrap.cxx: In
function
'PyObject* _wrap__TST_close_match(PyObject*, PyObject*
08.
)':
09.
tst_wrap.cxx:3250: error: cannot convert 'int*' to 'Py_ssize_t*'
for
argument '3
10.
' to 'int PyString_AsStringAndSize(PyObject*, char**, Py_ssize_t*)'
11.
tst_wrap.cxx: In
function
'PyObject* _wrap__TST_prefix_match(PyObject*, PyObject
12.
*)':
13.
[...and so on...]
Until Nicolas releases an updated version, here is the quick fix:
1.
cp pythonTST.h pythonTST.h.orig
2.
cp tst_wrap.cxx tst_wrap.cxx.orig
3.
sed
-
r
's/int size/Py_ssize_t size/'
< tst_wrap.cxx.orig > tst_wrap.cxx
4.
sed
-
r
's/int length/Py_ssize_t length/'
< pythonTST.h.orig > tmpfile
5.
sed
-
r
's/sizeof\(int\)/sizeof(long)/'
< tmpfile > pythonTST.h
Run these commands from the pytst source directory and you should be all set. I’m not sure if this a fully satisfactory solution, but at least this will get the test suite running again.