Discussion:
Py_TPFLAGS_HAVE_{WEAKREFS,ITER} in Python 3
Barry Warsaw
2012-04-27 15:38:22 UTC
Permalink
Someone is trying to build gdb 7.4 with Python 3 and hit a problem with
Py_TPFLAGS_HAVE_ITER. PEP 234 describes this flag, which no longer exists in
Python 3. python3porting.com has precious little to say about Py_TPFLAGS
changes in Python 3.

When I did the dbus-python port, I found that Py_TPFLAGS_HAVE_WEAKREFS is both
unnecessary and undefined in Python 3. Unfortunately, if you're going to
support both Python 2 and 3 with the same C code, you'll need to #ifdef that
away (since it's still required in Python 2).

My guess is that HAVE_ITER falls under the same recommendation, but I'm
looking for verification. For now, I've added this to
https://wiki.ubuntu.com/Python/3

Cheers,
-Barry
Amaury Forgeot d'Arc
2012-04-27 15:48:49 UTC
Permalink
Hi,
Post by Barry Warsaw
Someone is trying to build gdb 7.4 with Python 3 and hit a problem with
Py_TPFLAGS_HAVE_ITER. PEP 234 describes this flag, which no longer exists in
Python 3. python3porting.com has precious little to say about Py_TPFLAGS
changes in Python 3.
When I did the dbus-python port, I found that Py_TPFLAGS_HAVE_WEAKREFS is both
unnecessary and undefined in Python 3. Unfortunately, if you're going to
support both Python 2 and 3 with the same C code, you'll need to #ifdef that
away (since it's still required in Python 2).
My guess is that HAVE_ITER falls under the same recommendation, but I'm
looking for verification. For now, I've added this to
https://wiki.ubuntu.com/Python/3
This is correct. I checked that everywhere Py_TPFLAGS_HAVE_ITER is used in
Python2.7,
the corresponding code in Python 3 does as if this flag is always set.

So you could either #ifdef its usage, or simply put in some compatibility
header file:
#if PY_MAJOR_VERSION >=3
# define Py_TPFLAGS_HAVE_ITER 0
#endif
--
Amaury Forgeot d'Arc
Barry Warsaw
2012-04-27 17:06:52 UTC
Permalink
Post by Amaury Forgeot d'Arc
This is correct. I checked that everywhere Py_TPFLAGS_HAVE_ITER is used in
Python2.7, the corresponding code in Python 3 does as if this flag is always
set.
So you could either #ifdef its usage, or simply put in some compatibility
#if PY_MAJOR_VERSION >=3
# define Py_TPFLAGS_HAVE_ITER 0
#endif
Thanks for the confirmation. I've been wondering if Benjamin might be
interested in contributions to `six` that address C compatibility.

-Barry
Lennart Regebro
2012-04-27 21:23:23 UTC
Permalink
Thanks for the confirmation.  I've been wondering if Benjamin might be
interested in contributions to `six` that address C compatibility.
A big header file with ifdefs would definitely help a lot of people, I
think. I only did the things I encountered, and I only did some small
things like zope.interface.

//Lennart
Barry Warsaw
2012-04-27 21:29:03 UTC
Permalink
Post by Lennart Regebro
Thanks for the confirmation.  I've been wondering if Benjamin might be
interested in contributions to `six` that address C compatibility.
A big header file with ifdefs would definitely help a lot of people, I
think. I only did the things I encountered, and I only did some small
things like zope.interface.
Cool, also Lennart, what's the best way to give you updates for
python3porting.com?

-Barry
Lennart Regebro
2012-04-27 21:47:27 UTC
Permalink
Post by Barry Warsaw
Cool, also Lennart, what's the best way to give you updates for
python3porting.com?
Not sure, I'm pondering the options. :-)

//Lennart
Benjamin Peterson
2012-04-27 21:33:19 UTC
Permalink
Post by Amaury Forgeot d'Arc
This is correct. I checked that everywhere Py_TPFLAGS_HAVE_ITER is used in
Python2.7, the corresponding code in Python 3 does as if this flag is always
set.
So you could either #ifdef its usage, or simply put in some compatibility
#if PY_MAJOR_VERSION >=3
#  define Py_TPFLAGS_HAVE_ITER 0
#endif
Thanks for the confirmation.  I've been wondering if Benjamin might be
interested in contributions to `six` that address C compatibility.
Yes, absolutely. I haven't ported gobs of C code, so I'm not up on
what exactly people want.
--
Regards,
Benjamin
Barry Warsaw
2012-04-27 22:23:21 UTC
Permalink
Post by Benjamin Peterson
Yes, absolutely. I haven't ported gobs of C code, so I'm not up on
what exactly people want.
I have a few big extensions under my belt, so I can take a first crack at it.
I guess the thing to do is to branch six on bitbucket. I'll probably do that
next week.

-Barry

Loading...