mirror of
https://github.com/Ponce/slackbuilds
synced 2024-11-16 19:50:19 +01:00
libraries/tre: Add Python 3 support.
Signed-off-by: Benjamin Trigona-Harany <bosth@alumni.sfu.ca>
This commit is contained in:
parent
a453472a1a
commit
abb617ff62
2 changed files with 298 additions and 10 deletions
278
libraries/tre/python3.patch
Normal file
278
libraries/tre/python3.patch
Normal file
|
@ -0,0 +1,278 @@
|
|||
--- tre-python.c 2009-09-19 07:38:42.000000000 -0700
|
||||
+++ /home/ben/Downloads/tre-python.c 2018-03-15 23:32:07.540064053 -0700
|
||||
@@ -86,9 +86,9 @@
|
||||
TreFuzzynessObject *self = (TreFuzzynessObject*)obj;
|
||||
PyObject *o;
|
||||
|
||||
- o = PyString_FromFormat("%s(delcost=%d,inscost=%d,maxcost=%d,subcost=%d,"
|
||||
+ o = PyUnicode_FromFormat("%s(delcost=%d,inscost=%d,maxcost=%d,subcost=%d,"
|
||||
"maxdel=%d,maxerr=%d,maxins=%d,maxsub=%d)",
|
||||
- self->ob_type->tp_name, self->ap.cost_del,
|
||||
+ Py_TYPE(self)->tp_name, self->ap.cost_del,
|
||||
self->ap.cost_ins, self->ap.max_cost,
|
||||
self->ap.cost_subst, self->ap.max_del,
|
||||
self->ap.max_err, self->ap.max_ins,
|
||||
@@ -118,8 +118,7 @@
|
||||
};
|
||||
|
||||
static PyTypeObject TreFuzzynessType = {
|
||||
- PyObject_HEAD_INIT(NULL)
|
||||
- 0, /* ob_size */
|
||||
+ PyVarObject_HEAD_INIT(NULL, 0)
|
||||
TRE_MODULE ".Fuzzyness", /* tp_name */
|
||||
sizeof(TreFuzzynessObject), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
@@ -193,7 +192,7 @@
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
-PyTreMatch_groupi(PyObject *obj, int gn)
|
||||
+PyTreMatch_groupi(PyObject *obj, Py_ssize_t gn)
|
||||
{
|
||||
TreMatchObject *self = (TreMatchObject*)obj;
|
||||
PyObject *result;
|
||||
@@ -220,7 +219,7 @@
|
||||
PyObject *result;
|
||||
long gn;
|
||||
|
||||
- gn = PyInt_AsLong(grpno);
|
||||
+ gn = PyLong_AsLong(grpno);
|
||||
|
||||
if (PyErr_Occurred())
|
||||
return NULL;
|
||||
@@ -277,8 +276,7 @@
|
||||
};
|
||||
|
||||
static PyTypeObject TreMatchType = {
|
||||
- PyObject_HEAD_INIT(NULL)
|
||||
- 0, /* ob_size */
|
||||
+ PyVarObject_HEAD_INIT(NULL, 0)
|
||||
TRE_MODULE ".Match", /* tp_name */
|
||||
sizeof(TreMatchObject), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
@@ -337,9 +335,18 @@
|
||||
char *targ;
|
||||
size_t tlen;
|
||||
|
||||
- if (!PyArg_ParseTuple(args, "SO!|i:match", &pstring, &TreFuzzynessType,
|
||||
+ if (PyTuple_Size(args) > 0 && PyUnicode_Check(PyTuple_GetItem(args, 0)))
|
||||
+ {
|
||||
+ if (!PyArg_ParseTuple(args, "UO!|i:search", &pstring, &TreFuzzynessType,
|
||||
&fz, &eflags))
|
||||
- return NULL;
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ if (!PyArg_ParseTuple(args, "SO!|i:search", &pstring, &TreFuzzynessType,
|
||||
+ &fz, &eflags))
|
||||
+ return NULL;
|
||||
+ }
|
||||
|
||||
mo = newTreMatchObject();
|
||||
if (mo == NULL)
|
||||
@@ -347,22 +354,35 @@
|
||||
|
||||
nsub = self->rgx.re_nsub + 1;
|
||||
pm = PyMem_New(regmatch_t, nsub);
|
||||
- if (pm != NULL)
|
||||
- {
|
||||
- mo->am.nmatch = nsub;
|
||||
- mo->am.pmatch = pm;
|
||||
- }
|
||||
- else
|
||||
+ if (!pm)
|
||||
{
|
||||
- /* XXX */
|
||||
Py_DECREF(mo);
|
||||
- return NULL;
|
||||
+ return PyErr_NoMemory();
|
||||
}
|
||||
|
||||
- targ = PyString_AsString(pstring);
|
||||
- tlen = PyString_Size(pstring);
|
||||
+ mo->am.nmatch = nsub;
|
||||
+ mo->am.pmatch = pm;
|
||||
|
||||
- rc = tre_reganexec(&self->rgx, targ, tlen, &mo->am, fz->ap, eflags);
|
||||
+ if (PyUnicode_Check(pstring))
|
||||
+ {
|
||||
+ Py_ssize_t len = PyUnicode_GetSize(pstring);
|
||||
+ wchar_t *buf = calloc(sizeof(wchar_t), len);
|
||||
+ if(!buf)
|
||||
+ {
|
||||
+ Py_DECREF(mo);
|
||||
+ return PyErr_NoMemory();
|
||||
+ }
|
||||
+ PyUnicode_AsWideChar(pstring, buf, len);
|
||||
+ rc = tre_regawnexec(&self->rgx, buf, len, &mo->am, fz->ap, eflags);
|
||||
+ free(buf);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ targ = PyBytes_AsString(pstring);
|
||||
+ tlen = PyBytes_Size(pstring);
|
||||
+
|
||||
+ rc = tre_reganexec(&self->rgx, targ, tlen, &mo->am, fz->ap, eflags);
|
||||
+ }
|
||||
|
||||
if (PyErr_Occurred())
|
||||
{
|
||||
@@ -392,7 +412,7 @@
|
||||
|
||||
static PyMethodDef TrePattern_methods[] = {
|
||||
{ "search", (PyCFunction)PyTrePattern_search, METH_VARARGS,
|
||||
- "try to match against given string, returning " TRE_MODULE ".match object "
|
||||
+ "try to search in the given string, returning " TRE_MODULE ".match object "
|
||||
"or None on failure" },
|
||||
{NULL, NULL}
|
||||
};
|
||||
@@ -411,8 +431,7 @@
|
||||
}
|
||||
|
||||
static PyTypeObject TrePatternType = {
|
||||
- PyObject_HEAD_INIT(NULL)
|
||||
- 0, /* ob_size */
|
||||
+ PyVarObject_HEAD_INIT(NULL, 0)
|
||||
TRE_MODULE ".Pattern", /* tp_name */
|
||||
sizeof(TrePatternObject), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
@@ -445,7 +464,7 @@
|
||||
};
|
||||
|
||||
static TrePatternObject *
|
||||
-newTrePatternObject(PyObject *args)
|
||||
+newTrePatternObject(void)
|
||||
{
|
||||
TrePatternObject *self;
|
||||
|
||||
@@ -460,19 +479,43 @@
|
||||
PyTre_ncompile(PyObject *self, PyObject *args)
|
||||
{
|
||||
TrePatternObject *rv;
|
||||
- char *pattern;
|
||||
+ PyObject *upattern = NULL;
|
||||
+ char *pattern = NULL;
|
||||
int pattlen;
|
||||
int cflags = 0;
|
||||
int rc;
|
||||
|
||||
- if (!PyArg_ParseTuple(args, "s#|i:compile", &pattern, &pattlen, &cflags))
|
||||
- return NULL;
|
||||
+ if (PyTuple_Size(args) > 0 && PyUnicode_Check(PyTuple_GetItem(args, 0)))
|
||||
+ {
|
||||
+ if (!PyArg_ParseTuple(args, "U|i:compile", &upattern, &cflags))
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ if (!PyArg_ParseTuple(args, "s#|i:compile", &pattern, &pattlen, &cflags))
|
||||
+ return NULL;
|
||||
+ }
|
||||
|
||||
- rv = newTrePatternObject(args);
|
||||
+ rv = newTrePatternObject();
|
||||
if (rv == NULL)
|
||||
return NULL;
|
||||
|
||||
- rc = tre_regncomp(&rv->rgx, (char*)pattern, pattlen, cflags);
|
||||
+ if (upattern != NULL)
|
||||
+ {
|
||||
+ Py_ssize_t len = PyUnicode_GetSize(upattern);
|
||||
+ wchar_t *buf = calloc(sizeof(wchar_t), len);
|
||||
+ if(!buf)
|
||||
+ {
|
||||
+ Py_DECREF(rv);
|
||||
+ return PyErr_NoMemory();
|
||||
+ }
|
||||
+ PyUnicode_AsWideChar(upattern, buf, len);
|
||||
+ rc = tre_regwncomp(&rv->rgx, buf, len, cflags);
|
||||
+ free(buf);
|
||||
+ }
|
||||
+ else
|
||||
+ rc = tre_regncomp(&rv->rgx, (char*)pattern, pattlen, cflags);
|
||||
+
|
||||
if (rc != REG_OK)
|
||||
{
|
||||
if (!PyErr_Occurred())
|
||||
@@ -491,9 +534,8 @@
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
-static char *tre_doc =
|
||||
-"Python module for TRE library\n\nModule exports "
|
||||
-"the only function: compile";
|
||||
+
|
||||
+#define tre_doc "Python module for TRE library\n\nModule exports the only function: compile"
|
||||
|
||||
static struct _tre_flags {
|
||||
char *name;
|
||||
@@ -510,40 +552,57 @@
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
+
|
||||
+static struct PyModuleDef moduledef = {
|
||||
+ PyModuleDef_HEAD_INIT,
|
||||
+ TRE_MODULE ".Module", /* m_name */
|
||||
+ tre_doc, /* m_doc */
|
||||
+ -1, /* m_size */
|
||||
+ tre_methods, /* m_methods */
|
||||
+ NULL, /* m_reload */
|
||||
+ NULL, /* m_traverse */
|
||||
+ NULL, /* m_clear */
|
||||
+ NULL, /* m_free */
|
||||
+};
|
||||
+
|
||||
+
|
||||
PyMODINIT_FUNC
|
||||
-inittre(void)
|
||||
+PyInit_tre(void)
|
||||
{
|
||||
PyObject *m;
|
||||
struct _tre_flags *fp;
|
||||
|
||||
if (PyType_Ready(&TreFuzzynessType) < 0)
|
||||
- return;
|
||||
+ return NULL;
|
||||
if (PyType_Ready(&TreMatchType) < 0)
|
||||
- return;
|
||||
+ return NULL;
|
||||
if (PyType_Ready(&TrePatternType) < 0)
|
||||
- return;
|
||||
+ return NULL;
|
||||
|
||||
/* Create the module and add the functions */
|
||||
- m = Py_InitModule3(TRE_MODULE, tre_methods, tre_doc);
|
||||
+
|
||||
+ m = PyModule_Create (&moduledef);
|
||||
+
|
||||
if (m == NULL)
|
||||
- return;
|
||||
+ return NULL;
|
||||
|
||||
Py_INCREF(&TreFuzzynessType);
|
||||
if (PyModule_AddObject(m, "Fuzzyness", (PyObject*)&TreFuzzynessType) < 0)
|
||||
- return;
|
||||
+ return NULL;
|
||||
Py_INCREF(&TreMatchType);
|
||||
if (PyModule_AddObject(m, "Match", (PyObject*)&TreMatchType) < 0)
|
||||
- return;
|
||||
+ return NULL;
|
||||
Py_INCREF(&TrePatternType);
|
||||
if (PyModule_AddObject(m, "Pattern", (PyObject*)&TrePatternType) < 0)
|
||||
- return;
|
||||
+ return NULL;
|
||||
ErrorObject = PyErr_NewException(TRE_MODULE ".Error", NULL, NULL);
|
||||
Py_INCREF(ErrorObject);
|
||||
if (PyModule_AddObject(m, "Error", ErrorObject) < 0)
|
||||
- return;
|
||||
+ return NULL;
|
||||
|
||||
/* Insert the flags */
|
||||
for (fp = tre_flags; fp->name != NULL; fp++)
|
||||
if (PyModule_AddIntConstant(m, fp->name, fp->val) < 0)
|
||||
- return;
|
||||
+ return NULL;
|
||||
+ return m;
|
||||
}
|
|
@ -29,7 +29,7 @@ TAG=${TAG:-_SBo}
|
|||
|
||||
if [ -z "$ARCH" ]; then
|
||||
case "$( uname -m )" in
|
||||
i?86) ARCH=i486 ;;
|
||||
i?86) ARCH=i586 ;;
|
||||
arm*) ARCH=arm ;;
|
||||
*) ARCH=$( uname -m ) ;;
|
||||
esac
|
||||
|
@ -40,8 +40,8 @@ TMP=${TMP:-/tmp/SBo}
|
|||
PKG=$TMP/package-$PRGNAM
|
||||
OUTPUT=${OUTPUT:-/tmp}
|
||||
|
||||
if [ "$ARCH" = "i486" ]; then
|
||||
SLKCFLAGS="-O2 -march=i486 -mtune=i686"
|
||||
if [ "$ARCH" = "i586" ]; then
|
||||
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
|
||||
LIBDIRSUFFIX=""
|
||||
elif [ "$ARCH" = "i686" ]; then
|
||||
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
|
||||
|
@ -60,14 +60,14 @@ rm -rf $PKG
|
|||
mkdir -p $TMP $PKG $OUTPUT
|
||||
cd $TMP
|
||||
rm -rf $PRGNAM-$VERSION
|
||||
tar xvf $CWD/$PRGNAM-$VERSION.tar.?z*
|
||||
tar xvf $CWD/$PRGNAM-$VERSION.tar.bz2
|
||||
cd $PRGNAM-$VERSION
|
||||
chown -R root:root .
|
||||
find -L . \
|
||||
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) \
|
||||
-exec chmod 755 {} \; -o \
|
||||
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
|
||||
-exec chmod 644 {} \;
|
||||
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
|
||||
-o -perm 511 \) -exec chmod 755 {} \; -o \
|
||||
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
|
||||
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
|
||||
|
||||
CFLAGS="$SLKCFLAGS" \
|
||||
./configure \
|
||||
|
@ -78,14 +78,24 @@ CFLAGS="$SLKCFLAGS" \
|
|||
--mandir=/usr/man \
|
||||
--build=$ARCH-slackware-linux
|
||||
|
||||
make
|
||||
make install-strip DESTDIR=$PKG
|
||||
|
||||
cp -r python python3
|
||||
cd python
|
||||
CFLAGS="-I$PKG/usr/include" \
|
||||
LDFLAGS="-L$PKG/usr/lib$LIBDIRSUFFIX" \
|
||||
python setup.py install --root=$PKG
|
||||
cd ..
|
||||
cd -
|
||||
|
||||
if $(python3 -c 'import sys' 2>/dev/null); then
|
||||
cd python3
|
||||
# Python 3 support from https://github.com/ahomansikka/tre/commit/d6a0220
|
||||
patch -p0 < $CWD/python3.patch
|
||||
CFLAGS="-I$PKG/usr/include" \
|
||||
LDFLAGS="-L$PKG/usr/lib$LIBDIRSUFFIX" \
|
||||
python3 setup.py install --root=$PKG
|
||||
cd -
|
||||
fi
|
||||
|
||||
find $PKG/usr/man -type f -exec gzip -9 {} \;
|
||||
for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
|
||||
|
|
Loading…
Reference in a new issue