mirror of
https://github.com/postgres/postgres.git
synced 2025-07-17 06:41:09 +03:00
Hide warnings from Python headers when using gcc-compatible compiler.
Like commit388e80132
, use "#pragma GCC system_header" to silence warnings appearing within the Python headers, since newer Python versions no longer worry about some restrictions we still use like -Wdeclaration-after-statement. This patch improves on388e80132
by inventing a separate wrapper header file, allowing the pragma to be tightly scoped to just the Python headers and not other stuff we have laying about in plpython.h. I applied the same technique to plperl for the same reason: the original patch suppressed warnings for a good deal of our own code, not only the Perl headers. Like the previous commit, back-patch to supported branches. Peter Eisentraut and Tom Lane Discussion: https://postgr.es/m/ae523163-6d2a-4b81-a875-832e48dec502@eisentraut.org
This commit is contained in:
@ -39,6 +39,7 @@ DATA = $(NAME)u.control $(NAME)u--1.0.sql
|
||||
# header files to install - it's not clear which of these might be needed
|
||||
# so install them all.
|
||||
INCS = plpython.h \
|
||||
plpython_system.h \
|
||||
plpy_cursorobject.h \
|
||||
plpy_elog.h \
|
||||
plpy_exec.h \
|
||||
@ -120,7 +121,7 @@ install-data: installdirs
|
||||
|
||||
uninstall-data:
|
||||
rm -f $(addprefix '$(DESTDIR)$(datadir)/extension'/, $(notdir $(DATA)))
|
||||
rm -f $(addprefix '$(DESTDIR)$(includedir_server)'/, plpython.h plpy_util.h)
|
||||
rm -f $(addprefix '$(DESTDIR)$(includedir_server)'/, $(INCS))
|
||||
|
||||
.PHONY: install-data uninstall-data
|
||||
|
||||
|
@ -67,6 +67,7 @@ install_headers(
|
||||
'plpy_typeio.h',
|
||||
'plpy_util.h',
|
||||
'plpython.h',
|
||||
'plpython_server.h',
|
||||
install_dir: dir_include_server,
|
||||
)
|
||||
|
||||
|
@ -20,27 +20,10 @@
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Python versions <= 3.8 otherwise define a replacement, causing macro
|
||||
* redefinition warnings.
|
||||
* Pull in Python headers via a wrapper header, to control the scope of
|
||||
* the system_header pragma therein.
|
||||
*/
|
||||
#define HAVE_SNPRINTF 1
|
||||
|
||||
#if defined(_MSC_VER) && defined(_DEBUG)
|
||||
/* Python uses #pragma to bring in a non-default libpython on VC++ if
|
||||
* _DEBUG is defined */
|
||||
#undef _DEBUG
|
||||
/* Also hide away errcode, since we load Python.h before postgres.h */
|
||||
#define errcode __msvc_errcode
|
||||
#include <Python.h>
|
||||
#undef errcode
|
||||
#define _DEBUG
|
||||
#elif defined (_MSC_VER)
|
||||
#define errcode __msvc_errcode
|
||||
#include <Python.h>
|
||||
#undef errcode
|
||||
#else
|
||||
#include <Python.h>
|
||||
#endif
|
||||
#include "plpython_system.h"
|
||||
|
||||
/* define our text domain for translations */
|
||||
#undef TEXTDOMAIN
|
||||
|
53
src/pl/plpython/plpython_system.h
Normal file
53
src/pl/plpython/plpython_system.h
Normal file
@ -0,0 +1,53 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* plpython_system.h - pull in Python's system header files
|
||||
*
|
||||
* We break this out as a separate header file to precisely control
|
||||
* the scope of the "system_header" pragma. No Postgres-specific
|
||||
* declarations should be put here. However, we do include some stuff
|
||||
* that is meant to prevent conflicts between our code and Python.
|
||||
*
|
||||
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/pl/plpython/plpython_system.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef PLPYTHON_SYSTEM_H
|
||||
#define PLPYTHON_SYSTEM_H
|
||||
|
||||
/*
|
||||
* Newer versions of the Python headers trigger a lot of warnings with our
|
||||
* preferred compiler flags (at least -Wdeclaration-after-statement is known
|
||||
* to be problematic). The system_header pragma hides warnings from within
|
||||
* the rest of this file, if supported.
|
||||
*/
|
||||
#ifdef HAVE_PRAGMA_GCC_SYSTEM_HEADER
|
||||
#pragma GCC system_header
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Python versions <= 3.8 otherwise define a replacement, causing macro
|
||||
* redefinition warnings.
|
||||
*/
|
||||
#define HAVE_SNPRINTF 1
|
||||
|
||||
#if defined(_MSC_VER) && defined(_DEBUG)
|
||||
/* Python uses #pragma to bring in a non-default libpython on VC++ if
|
||||
* _DEBUG is defined */
|
||||
#undef _DEBUG
|
||||
/* Also hide away errcode, since we load Python.h before postgres.h */
|
||||
#define errcode __msvc_errcode
|
||||
#include <Python.h>
|
||||
#undef errcode
|
||||
#define _DEBUG
|
||||
#elif defined (_MSC_VER)
|
||||
#define errcode __msvc_errcode
|
||||
#include <Python.h>
|
||||
#undef errcode
|
||||
#else
|
||||
#include <Python.h>
|
||||
#endif
|
||||
|
||||
#endif /* PLPYTHON_SYSTEM_H */
|
Reference in New Issue
Block a user