Re: [PATCH] C extension fails to build on Python 2.5 because of PyUnicode_FromFormat
"R. Tyler Ballance" <[email protected]> Tue, 30 Mar 2010 18:18:44 -0700
| Newsgroups | gmane.comp.python.cheetah |
|---|---|
| Message-ID | <[email protected]> |
On Wed, 31 Mar 2010, Arnaud Fontaine wrote: > Hello, > > Cheetah C extension doesn't build on Python <= 2.5 because of > PyUnicode_FromFormat() being only available on Python >= 2.6. I have > attached a patch to make it build on Python 2.5 and inferior > versions. It builds without warning on Python 2.5, 2.6 and 3.1 and I can > import _namemapper on all these versions, moreover all the tests > passed. Hope the patch is good as I'm not really familiar with Python > C/API. Aha, good catch Arnaud, I had experienced a similar quirk when I ported another C-extension that I maintain to run on Python 2.4 - 3.1, I'll squeeze an update out tonight or tomorrow :) > > BTW, my question may be silly but I'm wondering why `newExcValue' > reference returned by PyUnicode_FromFormat() > (wrapInternalNotFoundException() function) is never DECREF whereas it is > in setNotFoundException() function for `exceptionStr'. Just curious > ;)... > > Cheers, > Arnaud Fontaine > > Description: C extension fails to build because of PyUnicode_FromFormat only available on Python >= 2.6 > Author: Arnaud Fontaine <[email protected]> > > --- a/cheetah/c/cheetah.h 2010-02-08 04:17:23.000000000 +0000 > +++ b/cheetah/c/cheetah.h 2010-03-30 22:42:49.000000000 +0100 > @@ -37,6 +37,9 @@ > > #if PY_MAJOR_VERSION >= 3 > #define IS_PYTHON3 > +#elif PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION <= 5 > +/* PyUnicode_FromFormat is only available on Python >= 2.6 */ > +#define IS_PYTHON25_OR_LESS > #endif > > #define TRUE 1 > --- a/cheetah/c/_namemapper.c 2010-02-08 04:17:23.000000000 +0000 > +++ b/cheetah/c/_namemapper.c 2010-03-30 22:40:01.000000000 +0100 > @@ -35,7 +35,13 @@ > static void setNotFoundException(char *key, PyObject *namespace) > { > PyObject *exceptionStr = NULL; > +#ifdef IS_PYTHON25_OR_LESS > + exceptionStr = Py_BuildValue("s", "cannot find '"); > + PyString_ConcatAndDel(&exceptionStr, Py_BuildValue("s", key)); > + PyString_ConcatAndDel(&exceptionStr, Py_BuildValue("s", "'")); > +#else > exceptionStr = PyUnicode_FromFormat("cannot find \'%s\'", key); > +#endif > PyErr_SetObject(NotFound, exceptionStr); > Py_XDECREF(exceptionStr); > } > @@ -58,8 +64,15 @@ > > if (isAlreadyWrapped != NULL) { > if (PyLong_AsLong(isAlreadyWrapped) == -1) { > +#ifdef IS_PYTHON25_OR_LESS > + newExcValue = Py_BuildValue("U", excValue); > + PyString_ConcatAndDel(&newExcValue, Py_BuildValue("s", "while searching for '")); > + PyString_ConcatAndDel(&newExcValue, Py_BuildValue("s", fullName)); > + PyString_ConcatAndDel(&newExcValue, Py_BuildValue("s", "'")); > +#else > newExcValue = PyUnicode_FromFormat("%U while searching for \'%s\'", > excValue, fullName); > +#endif > } > Py_DECREF(isAlreadyWrapped); > } > ------------------------------------------------------------------------------ > Download Intel® Parallel Studio Eval > Try the new software tools for yourself. Speed compiling, find bugs > proactively, and fine-tune applications for parallel performance. > See why Intel Parallel Studio got high marks during beta. > http://p.sf.net/sfu/intel-sw-dev > _______________________________________________ > Cheetahtemplate-discuss mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss Cheers, -R. Tyler Ballance -------------------------------------- Jabber: [email protected] GitHub: http://github.com/rtyler Twitter: http://twitter.com/agentdero Blog: http://unethicalblogger.com ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ Cheetahtemplate-discuss mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
signature.asc
(application/pgp-signature, 198 B)
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.12 (GNU/Linux) iEYEARECAAYFAkuyovQACgkQFCbH3D9R4W+wvACfQXzUaPD+aORVphpqlzfTIFOx /L0AoJ7kjuhZC4JjKGV4qgJ1AFUlYWYF =nE5z -----END PGP SIGNATURE-----