PL/Python warnings in CVS HEAD

Started by Neil Conwayabout 19 years ago19 messageshackers
Jump to latest
#1Neil Conway
neilc@samurai.com

FYI, I see the following warnings compiling CVS HEAD:

src/pl/plpython/plpython.c:2006: warning: initialization from
incompatible pointer type
src/pl/plpython/plpython.c:2008: warning: 'intargfunc' is deprecated
src/pl/plpython/plpython.c:2008: warning: initialization from
incompatible pointer type
src/pl/plpython/plpython.c:2009: warning: 'intargfunc' is deprecated
src/pl/plpython/plpython.c:2009: warning: initialization from
incompatible pointer type
src/pl/plpython/plpython.c:2010: warning: 'intintargfunc' is deprecated
src/pl/plpython/plpython.c:2010: warning: initialization from
incompatible pointer type
src/pl/plpython/plpython.c:2011: warning: initialization from
incompatible pointer type
src/pl/plpython/plpython.c:2012: warning: initialization from
incompatible pointer type

This is on Ubuntu fiesty, Python 2.5, gcc 4.1.2, AMD64.

-Neil

#2Joshua D. Drake
jd@commandprompt.com
In reply to: Neil Conway (#1)
Re: PL/Python warnings in CVS HEAD

Neil Conway wrote:

FYI, I see the following warnings compiling CVS HEAD:

src/pl/plpython/plpython.c:2006: warning: initialization from
incompatible pointer type
src/pl/plpython/plpython.c:2008: warning: 'intargfunc' is deprecated
src/pl/plpython/plpython.c:2008: warning: initialization from
incompatible pointer type
src/pl/plpython/plpython.c:2009: warning: 'intargfunc' is deprecated
src/pl/plpython/plpython.c:2009: warning: initialization from
incompatible pointer type
src/pl/plpython/plpython.c:2010: warning: 'intintargfunc' is deprecated
src/pl/plpython/plpython.c:2010: warning: initialization from
incompatible pointer type
src/pl/plpython/plpython.c:2011: warning: initialization from
incompatible pointer type
src/pl/plpython/plpython.c:2012: warning: initialization from
incompatible pointer type

This is on Ubuntu fiesty, Python 2.5, gcc 4.1.2, AMD64.

There is no Ubuntu Fiesty... yet ;) you are compile -head with -head...
sounds like a snafu to begin with (yes I am being a pain on purpose.

Joshua D. Drake

-Neil

---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend

--

=== The PostgreSQL Company: Command Prompt, Inc. ===
Sales/Support: +1.503.667.4564 || 24x7/Emergency: +1.800.492.2240
Providing the most comprehensive PostgreSQL solutions since 1997
http://www.commandprompt.com/

Donate to the PostgreSQL Project: http://www.postgresql.org/about/donate
PostgreSQL Replication: http://www.commandprompt.com/products/

#3Joshua D. Drake
jd@commandprompt.com
In reply to: Joshua D. Drake (#2)
Re: PL/Python warnings in CVS HEAD

src/pl/plpython/plpython.c:2010: warning: 'intintargfunc' is deprecated
src/pl/plpython/plpython.c:2010: warning: initialization from
incompatible pointer type
src/pl/plpython/plpython.c:2011: warning: initialization from
incompatible pointer type
src/pl/plpython/plpython.c:2012: warning: initialization from
incompatible pointer type

This is on Ubuntu fiesty, Python 2.5, gcc 4.1.2, AMD64.

There is no Ubuntu Fiesty... yet ;) you are compile -head with -head...
sounds like a snafu to begin with (yes I am being a pain on purpose.

Ubuntu Edgy, Python 2.4, gcc 4.1.2 AMD64

jd@scratch:/media/music/jd/pgsql/src/pl/plpython$ make
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline
-Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fpic
-I. -I/usr/include/python2.4 -I../../../src/include -D_GNU_SOURCE -c
-o plpython.o plpython.c
ar crs libplpython.a plpython.o
ranlib libplpython.a
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline
-Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fpic
-shared -Wl,-soname,libplpython.so.0 plpython.o -L/usr/lib
-L../../../src/port -lpython2.4 -lpthread -ldl -lutil -lm
-Wl,-rpath,'/usr/lib' -o libplpython.so.0.0
rm -f libplpython.so.0
ln -s libplpython.so.0.0 libplpython.so.0
rm -f libplpython.so
ln -s libplpython.so.0.0 libplpython.so

So looks like a python issue (I know things changed a bit in 2.5).

Joshua D. Drake

Joshua D. Drake

-Neil

---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend

--

=== The PostgreSQL Company: Command Prompt, Inc. ===
Sales/Support: +1.503.667.4564 || 24x7/Emergency: +1.800.492.2240
Providing the most comprehensive PostgreSQL solutions since 1997
http://www.commandprompt.com/

Donate to the PostgreSQL Project: http://www.postgresql.org/about/donate
PostgreSQL Replication: http://www.commandprompt.com/products/

#4Neil Conway
neilc@samurai.com
In reply to: Joshua D. Drake (#2)
Re: PL/Python warnings in CVS HEAD

On Sat, 2007-03-03 at 11:21 -0800, Joshua D. Drake wrote:

There is no Ubuntu Fiesty... yet ;) you are compile -head with -head...
sounds like a snafu to begin with

No, it just looks like a Python API 2.5 change to me. I'd look into it
myself, but I don't have the free cycles at the moment.

yes I am being a pain on purpose.

Well, more signal and less noise would be nice.

-Neil

#5Neil Conway
neilc@samurai.com
In reply to: Neil Conway (#4)
Re: PL/Python warnings in CVS HEAD

On Sat, 2007-03-03 at 14:29 -0500, Neil Conway wrote:

No, it just looks like a Python API 2.5 change to me

Attached is a patch that fixes the warnings. Unfortunately, it seems
this patch won't compile against Python 2.4: the 2.5 API requires the
use of some typedef's that AFAICS were only introduced in 2.5.

Since we presumably still want to support Python < 2.5, we can either
not apply this patch and tolerate the warnings, or else we can
workaround the incompatibility with some preprecessor hackery (e.g.
supply the missing typedef's ourselves if Python doesn't provide them).

Comments?

-Neil

Attachments:

python_25_ssize_t-1.patchtext/x-patch; charset=us-ascii; name=python_25_ssize_t-1.patchDownload+34-34
#6Tom Lane
tgl@sss.pgh.pa.us
In reply to: Neil Conway (#5)
Re: PL/Python warnings in CVS HEAD

Neil Conway <neilc@samurai.com> writes:

No, it just looks like a Python API 2.5 change to me

Attached is a patch that fixes the warnings. Unfortunately, it seems
this patch won't compile against Python 2.4: the 2.5 API requires the
use of some typedef's that AFAICS were only introduced in 2.5.

Since we presumably still want to support Python < 2.5, we can either
not apply this patch and tolerate the warnings, or else we can
workaround the incompatibility with some preprecessor hackery (e.g.
supply the missing typedef's ourselves if Python doesn't provide them).

Sounds like #ifdef time to me --- but it seems a bit strange; wouldn't
the Python guys have taken a bit more care for compatibility of
user-supplied code? We're hardly the only people who want to support
multiple Python versions. Perhaps they provide a compatibility hack
that you didn't spot?

regards, tom lane

#7Neil Conway
neilc@samurai.com
In reply to: Tom Lane (#6)
Re: PL/Python warnings in CVS HEAD

On Tue, 2007-03-06 at 00:18 -0500, Tom Lane wrote:

Sounds like #ifdef time to me --- but it seems a bit strange; wouldn't
the Python guys have taken a bit more care for compatibility of
user-supplied code?

Yeah, I was a bit surprised as well. I won't claim to have any
familiarity with the Python C API, though. Py_Deprecated() is simply
defined as:

/* Py_DEPRECATED(version)
* Declare a variable, type, or function deprecated.
* Usage:
* extern int old_var Py_DEPRECATED(2.3);
* typedef int T1 Py_DEPRECATED(2.4);
* extern int x() Py_DEPRECATED(2.5);
*/
#if defined(__GNUC__) && ((__GNUC__ >= 4) || \
(__GNUC__ == 3) && (__GNUC_MINOR__ >= 1))
#define Py_DEPRECATED(VERSION_UNUSED) __attribute__((__deprecated__))
#else
#define Py_DEPRECATED(VERSION_UNUSED)
#endif

Perhaps they provide a compatibility hack that you didn't spot?

Quite possibly. Anyone have any suggestions?

-Neil

#8Marko Kreen
markokr@gmail.com
In reply to: Neil Conway (#7)
Re: PL/Python warnings in CVS HEAD

On 3/6/07, Neil Conway <neilc@samurai.com> wrote:

On Tue, 2007-03-06 at 00:18 -0500, Tom Lane wrote:

Perhaps they provide a compatibility hack that you didn't spot?

Quite possibly. Anyone have any suggestions?

Python guys discuss the situation here:

http://www.python.org/dev/peps/pep-0353/

--
marko

#9Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#6)
Re: PL/Python warnings in CVS HEAD

Where are we on Python 2.5?

---------------------------------------------------------------------------

Tom Lane wrote:

Neil Conway <neilc@samurai.com> writes:

No, it just looks like a Python API 2.5 change to me

Attached is a patch that fixes the warnings. Unfortunately, it seems
this patch won't compile against Python 2.4: the 2.5 API requires the
use of some typedef's that AFAICS were only introduced in 2.5.

Since we presumably still want to support Python < 2.5, we can either
not apply this patch and tolerate the warnings, or else we can
workaround the incompatibility with some preprecessor hackery (e.g.
supply the missing typedef's ourselves if Python doesn't provide them).

Sounds like #ifdef time to me --- but it seems a bit strange; wouldn't
the Python guys have taken a bit more care for compatibility of
user-supplied code? We're hardly the only people who want to support
multiple Python versions. Perhaps they provide a compatibility hack
that you didn't spot?

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

http://archives.postgresql.org

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://www.enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

#10Marko Kreen
markokr@gmail.com
In reply to: Bruce Momjian (#9)
Re: PL/Python warnings in CVS HEAD

On 4/3/07, Bruce Momjian <bruce@momjian.us> wrote:

Where are we on Python 2.5?

I'll look into it.

--
marko

#11Marko Kreen
markokr@gmail.com
In reply to: Marko Kreen (#10)
Re: PL/Python warnings in CVS HEAD

On 4/3/07, Marko Kreen <markokr@gmail.com> wrote:

On 4/3/07, Bruce Momjian <bruce@momjian.us> wrote:

Where are we on Python 2.5?

I'll look into it.

Following patch converts plpython.c to use Python 2.5 types,
with compat ifdef for older version. This is recommended
method by PEP 353 to fix the issue.

Tested with python 2.4.3, 2.5.

--
marko

Attachments:

python25.diffapplication/octet-stream; name=python25.diffDownload+43-35
#12Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Marko Kreen (#11)
Re: PL/Python warnings in CVS HEAD

Marko Kreen escribi�:

On 4/3/07, Marko Kreen <markokr@gmail.com> wrote:

On 4/3/07, Bruce Momjian <bruce@momjian.us> wrote:

Where are we on Python 2.5?

I'll look into it.

Following patch converts plpython.c to use Python 2.5 types,
with compat ifdef for older version. This is recommended
method by PEP 353 to fix the issue.

Tested with python 2.4.3, 2.5.

No compiler warnings, regression tests pass here on Python 2.4.4.

$ uname -a
Linux perhan 2.6.18-3-amd64 #1 SMP Mon Dec 4 17:04:37 CET 2006 x86_64 GNU/Linux

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

#13Bruce Momjian
bruce@momjian.us
In reply to: Marko Kreen (#11)
Re: PL/Python warnings in CVS HEAD

Great. Care to take on the Python boolean patch?

o Allow PL/PythonU to return boolean rather than 1/0

http://archives.postgresql.org/pgsql-patches/2007-01/msg00596.php

It requires only a few lines of code, but some testing, which you seem
to have available.

---------------------------------------------------------------------------

Marko Kreen wrote:

On 4/3/07, Marko Kreen <markokr@gmail.com> wrote:

On 4/3/07, Bruce Momjian <bruce@momjian.us> wrote:

Where are we on Python 2.5?

I'll look into it.

Following patch converts plpython.c to use Python 2.5 types,
with compat ifdef for older version. This is recommended
method by PEP 353 to fix the issue.

Tested with python 2.4.3, 2.5.

--
marko

[ Attachment, skipping... ]

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://www.enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

#14Bruce Momjian
bruce@momjian.us
In reply to: Marko Kreen (#11)
Re: PL/Python warnings in CVS HEAD

Patch applied. Thanks.

---------------------------------------------------------------------------

Marko Kreen wrote:

On 4/3/07, Marko Kreen <markokr@gmail.com> wrote:

On 4/3/07, Bruce Momjian <bruce@momjian.us> wrote:

Where are we on Python 2.5?

I'll look into it.

Following patch converts plpython.c to use Python 2.5 types,
with compat ifdef for older version. This is recommended
method by PEP 353 to fix the issue.

Tested with python 2.4.3, 2.5.

--
marko

[ Attachment, skipping... ]

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://www.enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

#15Marko Kreen
markokr@gmail.com
In reply to: Bruce Momjian (#13)
Re: PL/Python warnings in CVS HEAD

On 4/3/07, Bruce Momjian <bruce@momjian.us> wrote:

Great. Care to take on the Python boolean patch?

o Allow PL/PythonU to return boolean rather than 1/0

http://archives.postgresql.org/pgsql-patches/2007-01/msg00596.php

It requires only a few lines of code, but some testing, which you seem
to have available.

Ok.

--
marko

#16Marko Kreen
markokr@gmail.com
In reply to: Marko Kreen (#15)
Re: PL/Python warnings in CVS HEAD

On 4/3/07, Marko Kreen <markokr@gmail.com> wrote:

On 4/3/07, Bruce Momjian <bruce@momjian.us> wrote:

Great. Care to take on the Python boolean patch?

o Allow PL/PythonU to return boolean rather than 1/0

I think this should be also solved with backwards-compat ifdef.

Tested with python 2.2, 2.3, 2.4, 2.5.

--
marko

Attachments:

py-bool.diffapplication/octet-stream; name=py-bool.diffDownload+12-4
#17Bruce Momjian
bruce@momjian.us
In reply to: Marko Kreen (#16)
Re: PL/Python warnings in CVS HEAD

Great, patch applied and TODO item removed.

---------------------------------------------------------------------------

Marko Kreen wrote:

On 4/3/07, Marko Kreen <markokr@gmail.com> wrote:

On 4/3/07, Bruce Momjian <bruce@momjian.us> wrote:

Great. Care to take on the Python boolean patch?

o Allow PL/PythonU to return boolean rather than 1/0

I think this should be also solved with backwards-compat ifdef.

Tested with python 2.2, 2.3, 2.4, 2.5.

--
marko

[ Attachment, skipping... ]

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://www.enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

#18Marko Kreen
markokr@gmail.com
In reply to: Bruce Momjian (#17)
Re: PL/Python warnings in CVS HEAD

On 4/3/07, Bruce Momjian <bruce@momjian.us> wrote:

Great, patch applied and TODO item removed.

If you are already patching, please apply the following patch also.

It removes last remaining casts inside struct definitions.
Such usage is bad practice, as it hides problems from compiler.

Reason for the cast is popular practice in some circles
to define functions as foo(MyObj *) instead of foo(PyObject *)
thus avoiding a local variable inside functions and make
direct calling easier. As pl/python does not use such style,
the casts were unnecessary from the start.

--
marko

Attachments:

plpy-uglycasts.diffapplication/octet-stream; name=plpy-uglycasts.diffDownload+8-8
#19Bruce Momjian
bruce@momjian.us
In reply to: Marko Kreen (#18)
Re: PL/Python warnings in CVS HEAD

Patch applied. Thanks.

---------------------------------------------------------------------------

Marko Kreen wrote:

On 4/3/07, Bruce Momjian <bruce@momjian.us> wrote:

Great, patch applied and TODO item removed.

If you are already patching, please apply the following patch also.

It removes last remaining casts inside struct definitions.
Such usage is bad practice, as it hides problems from compiler.

Reason for the cast is popular practice in some circles
to define functions as foo(MyObj *) instead of foo(PyObject *)
thus avoiding a local variable inside functions and make
direct calling easier. As pl/python does not use such style,
the casts were unnecessary from the start.

--
marko

[ Attachment, skipping... ]

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://www.enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +