aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/include/fmgr.h11
-rw-r--r--src/include/jit/jit.h2
-rw-r--r--src/include/postmaster/pgarch.h2
-rw-r--r--src/include/replication/output_plugin.h2
4 files changed, 16 insertions, 1 deletions
diff --git a/src/include/fmgr.h b/src/include/fmgr.h
index 5314b737052..f251ac9ba2b 100644
--- a/src/include/fmgr.h
+++ b/src/include/fmgr.h
@@ -424,6 +424,17 @@ CppConcat(pg_finfo_,funcname) (void) \
extern int no_such_variable
+/*
+ * Declare _PG_init/_PG_fini centrally. Historically each shared library had
+ * its own declaration; but now that we want to mark these PGDLLEXPORT, using
+ * central declarations avoids each extension having to add that. Any
+ * existing declarations in extensions will continue to work if fmgr.h is
+ * included before them, otherwise compilation for Windows will fail.
+ */
+extern PGDLLEXPORT void _PG_init(void);
+extern PGDLLEXPORT void _PG_fini(void);
+
+
/*-------------------------------------------------------------------------
* Support for verifying backend compatibility of loaded modules
*
diff --git a/src/include/jit/jit.h b/src/include/jit/jit.h
index d1940332094..600ddfc7539 100644
--- a/src/include/jit/jit.h
+++ b/src/include/jit/jit.h
@@ -63,7 +63,7 @@ typedef struct JitContext
typedef struct JitProviderCallbacks JitProviderCallbacks;
-extern void _PG_jit_provider_init(JitProviderCallbacks *cb);
+extern PGDLLEXPORT void _PG_jit_provider_init(JitProviderCallbacks *cb);
typedef void (*JitProviderInit) (JitProviderCallbacks *cb);
typedef void (*JitProviderResetAfterErrorCB) (void);
typedef void (*JitProviderReleaseContextCB) (JitContext *context);
diff --git a/src/include/postmaster/pgarch.h b/src/include/postmaster/pgarch.h
index f366a159a8e..2546e2ae883 100644
--- a/src/include/postmaster/pgarch.h
+++ b/src/include/postmaster/pgarch.h
@@ -63,6 +63,8 @@ typedef struct ArchiveModuleCallbacks
*/
typedef void (*ArchiveModuleInit) (ArchiveModuleCallbacks *cb);
+extern PGDLLEXPORT void _PG_archive_module_init(ArchiveModuleCallbacks *cb);
+
/*
* Since the logic for archiving via a shell command is in the core server
* and does not need to be loaded via a shared library, it has a special
diff --git a/src/include/replication/output_plugin.h b/src/include/replication/output_plugin.h
index 539dc8e6974..b7d28d7045c 100644
--- a/src/include/replication/output_plugin.h
+++ b/src/include/replication/output_plugin.h
@@ -35,6 +35,8 @@ typedef struct OutputPluginOptions
*/
typedef void (*LogicalOutputPluginInit) (struct OutputPluginCallbacks *cb);
+extern PGDLLEXPORT void _PG_output_plugin_init(struct OutputPluginCallbacks *cb);
+
/*
* Callback that gets called in a user-defined plugin. ctx->private_data can
* be set to some private data.