Re: libpq-fe.h should compile *entirely* standalone

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: libpq-fe.h should compile *entirely* standalone
Дата
Msg-id 2560111.1677869197@sss.pgh.pa.us
обсуждение исходный текст
Ответ на libpq-fe.h should compile *entirely* standalone  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: libpq-fe.h should compile *entirely* standalone  (Andrew Dunstan <andrew@dunslane.net>)
Список pgsql-hackers
I wrote:
> We can easily do better, as attached, but I wonder which other
> headers should get the same treatment.

After a bit of further research I propose the attached.  I'm not
sure exactly what subset of ECPG headers is meant to be exposed
to clients, but we can adjust these patterns if new info emerges.

This is actually moving the inclusion-check goalposts quite far,
but HEAD seems to pass cleanly, and again we can always adjust later.
Any objections?

            regards, tom lane

diff --git a/src/tools/pginclude/cpluspluscheck b/src/tools/pginclude/cpluspluscheck
index 2c5042eb41..6ad5ef6942 100755
--- a/src/tools/pginclude/cpluspluscheck
+++ b/src/tools/pginclude/cpluspluscheck
@@ -161,7 +161,31 @@ do
     # OK, create .c file to include this .h file.
     {
         echo 'extern "C" {'
-        test "$f" != src/include/postgres_fe.h && echo '#include "postgres.h"'
+        # Ideally we'd pre-include only the appropriate one of
+        # postgres.h, postgres_fe.h, or c.h.  We don't always have enough
+        # info to guess which, but in some subdirectories there's a
+        # reasonable choice to make, and otherwise we use postgres.h.
+        # Also, those three files should compile with no pre-include, as
+        # should src/interfaces headers meant to be exposed to clients.
+        case "$f" in
+        src/include/postgres.h) ;;
+        src/include/postgres_fe.h) ;;
+        src/include/c.h) ;;
+        src/interfaces/libpq/libpq-fe.h) ;;
+        src/interfaces/libpq/libpq-events.h) ;;
+        src/interfaces/ecpg/ecpglib/ecpglib_extern.h)
+            echo '#include "postgres_fe.h"' ;;
+        src/interfaces/ecpg/ecpglib/*) ;;
+        src/interfaces/*)
+            echo '#include "postgres_fe.h"' ;;
+        src/bin/*)
+            echo '#include "postgres_fe.h"' ;;
+        src/port/*) ;;
+        src/common/*)
+            echo '#include "c.h"' ;;
+        *)
+            echo '#include "postgres.h"' ;;
+        esac
         echo "#include \"$f\""
         echo '};'
     } >$tmp/test.cpp
diff --git a/src/tools/pginclude/headerscheck b/src/tools/pginclude/headerscheck
index abbba7aa63..f1810c09bb 100755
--- a/src/tools/pginclude/headerscheck
+++ b/src/tools/pginclude/headerscheck
@@ -142,7 +142,31 @@ do

     # OK, create .c file to include this .h file.
     {
-        test "$f" != src/include/postgres_fe.h && echo '#include "postgres.h"'
+        # Ideally we'd pre-include only the appropriate one of
+        # postgres.h, postgres_fe.h, or c.h.  We don't always have enough
+        # info to guess which, but in some subdirectories there's a
+        # reasonable choice to make, and otherwise we use postgres.h.
+        # Also, those three files should compile with no pre-include, as
+        # should src/interfaces headers meant to be exposed to clients.
+        case "$f" in
+        src/include/postgres.h) ;;
+        src/include/postgres_fe.h) ;;
+        src/include/c.h) ;;
+        src/interfaces/libpq/libpq-fe.h) ;;
+        src/interfaces/libpq/libpq-events.h) ;;
+        src/interfaces/ecpg/ecpglib/ecpglib_extern.h)
+            echo '#include "postgres_fe.h"' ;;
+        src/interfaces/ecpg/ecpglib/*) ;;
+        src/interfaces/*)
+            echo '#include "postgres_fe.h"' ;;
+        src/bin/*)
+            echo '#include "postgres_fe.h"' ;;
+        src/port/*) ;;
+        src/common/*)
+            echo '#include "c.h"' ;;
+        *)
+            echo '#include "postgres.h"' ;;
+        esac
         echo "#include \"$f\""
     } >$tmp/test.c


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Jacob Champion
Дата:
Сообщение: Re: zstd compression for pg_dump
Следующее
От: Tom Lane
Дата:
Сообщение: Re: libpq: PQgetCopyData() and allocation overhead