apply pragma system_header to python headers

Started by Peter Eisentrautover 2 years ago6 messageshackers
Jump to latest
#1Peter Eisentraut
peter_e@gmx.net

Analogous to 388e80132c (which was for Perl) but for Python, I propose
adding #pragma GCC system_header to plpython.h. Without it, you get
tons of warnings about -Wdeclaration-after-statement, starting with
Python 3.12. (In the past, I have regularly sent feedback to Python to
fix their header files, but this is getting old, and we have an easier
solution now.)

Attachments:

0001-python-Hide-warnings-inside-Python-headers-when-usin.patchtext/plain; charset=UTF-8; name=0001-python-Hide-warnings-inside-Python-headers-when-usin.patchDownload+10-1
#2Andrew Dunstan
andrew@dunslane.net
In reply to: Peter Eisentraut (#1)
Re: apply pragma system_header to python headers

On 2023-11-06 Mo 07:02, Peter Eisentraut wrote:

Analogous to 388e80132c (which was for Perl) but for Python, I propose
adding #pragma GCC system_header to plpython.h.  Without it, you get
tons of warnings about -Wdeclaration-after-statement, starting with
Python 3.12.  (In the past, I have regularly sent feedback to Python
to fix their header files, but this is getting old, and we have an
easier solution now.)

WFM

cheers

andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#1)
Re: apply pragma system_header to python headers

Peter Eisentraut <peter@eisentraut.org> writes:

Analogous to 388e80132c (which was for Perl) but for Python, I propose
adding #pragma GCC system_header to plpython.h. Without it, you get
tons of warnings about -Wdeclaration-after-statement, starting with
Python 3.12. (In the past, I have regularly sent feedback to Python to
fix their header files, but this is getting old, and we have an easier
solution now.)

+1 for the concept --- I was just noticing yesterday that my buildfarm
warning scraping script is turning up some of these. However, we ought
to try to minimize the amount of our own code that is subject to the
pragma. So I think a prerequisite ought to be to get this out of
plpython.h:

/*
* Used throughout, so it's easier to just include it everywhere.
*/
#include "plpy_util.h"

Alternatively, is there a way to reverse the effect of the
pragma after we've included what we need?

(I'm not too happy about the state of plperl.h on this point, either.)

regards, tom lane

#4Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#3)
Re: apply pragma system_header to python headers

On 2023-11-06 Mo 09:57, Tom Lane wrote:

Peter Eisentraut <peter@eisentraut.org> writes:

Analogous to 388e80132c (which was for Perl) but for Python, I propose
adding #pragma GCC system_header to plpython.h. Without it, you get
tons of warnings about -Wdeclaration-after-statement, starting with
Python 3.12. (In the past, I have regularly sent feedback to Python to
fix their header files, but this is getting old, and we have an easier
solution now.)

+1 for the concept --- I was just noticing yesterday that my buildfarm
warning scraping script is turning up some of these. However, we ought
to try to minimize the amount of our own code that is subject to the
pragma. So I think a prerequisite ought to be to get this out of
plpython.h:

/*
* Used throughout, so it's easier to just include it everywhere.
*/
#include "plpy_util.h"

Alternatively, is there a way to reverse the effect of the
pragma after we've included what we need?

There's "GCC diagnostic push" and "GCC diagnostic pop" but I don't know
if they apply to "GCC system_header". Instead of using "GCC
system_header" we could just ignore the warnings we're seeing. e.g. "GCC
diagnostic ignored \"-Wdeclaration-after-statement\""

cheers

andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com

#5Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#4)
Re: apply pragma system_header to python headers

Andrew Dunstan <andrew@dunslane.net> writes:

On 2023-11-06 Mo 09:57, Tom Lane wrote:

+1 for the concept --- I was just noticing yesterday that my buildfarm
warning scraping script is turning up some of these. However, we ought
to try to minimize the amount of our own code that is subject to the
pragma. So I think a prerequisite ought to be to get this out of
plpython.h:

/*
* Used throughout, so it's easier to just include it everywhere.
*/
#include "plpy_util.h"

Alternatively, is there a way to reverse the effect of the
pragma after we've included what we need?

There's "GCC diagnostic push" and "GCC diagnostic pop" but I don't know
if they apply to "GCC system_header". Instead of using "GCC
system_header" we could just ignore the warnings we're seeing. e.g. "GCC
diagnostic ignored \"-Wdeclaration-after-statement\""

Probably a better way is to invent a separate header "plpython_system.h"
that just includes the Python headers, to scope the pragma precisely.
(I guess it could have the fixup #defines we're wrapping those headers
in, too.)

The same idea would work in plperl.

regards, tom lane

#6Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#5)
Re: apply pragma system_header to python headers

I wrote:

Probably a better way is to invent a separate header "plpython_system.h"
that just includes the Python headers, to scope the pragma precisely.
(I guess it could have the fixup #defines we're wrapping those headers
in, too.)

The same idea would work in plperl.

After updating one of my test machines to Fedora 39, I'm seeing these
Python warnings too. So here's a fleshed-out patch proposal for doing
it like that.

regards, tom lane

Attachments:

v2-apply-system_header-pragma.patchtext/x-diff; charset=us-ascii; name=v2-apply-system_header-pragma.patchDownload+280-215