Hello hackers,

I'm porting Citus to Windows and found that we use some variables which PG
doesn't export; here is a patch which adds PGDLLIMPORT declarations to
those variables. This is unfortunately required on Windows for extensions
to be able to use those variables, and appears to already have been done to
quite a few other variables.
From 3c412b4fee7e4343b070ea85ee8b29f3ec4cc244 Mon Sep 17 00:00:00 2001
From: Brian Cloutier <git...@briancloutier.com>
Date: Tue, 31 Oct 2017 17:53:42 -0700
Subject: [PATCH] Add PGDLLIMPORT declarations to some variables

On Windows, PGDLLIMPORT is required for variables to be exported, for
those variables to be importable by extensions. Add PGDLLIMPORT to some
variables which extensions might want to use.

MSDN documentation: https://docs.microsoft.com/en-us/cpp/build/exporting-from-a-dll-using-declspec-dllexport
---
 src/include/access/twophase.h       |  2 +-
 src/include/commands/extension.h    |  2 +-
 src/include/miscadmin.h             | 10 +++++-----
 src/include/postmaster/postmaster.h |  4 ++--
 src/include/storage/fd.h            |  2 +-
 src/include/storage/proc.h          |  4 ++--
 src/include/tcop/dest.h             |  2 +-
 src/include/tcop/tcopprot.h         |  2 +-
 src/include/utils/guc.h             |  6 +++---
 9 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/src/include/access/twophase.h b/src/include/access/twophase.h
index 54dec4e..f5fbbea 100644
--- a/src/include/access/twophase.h
+++ b/src/include/access/twophase.h
@@ -25,7 +25,7 @@
 typedef struct GlobalTransactionData *GlobalTransaction;
 
 /* GUC variable */
-extern int	max_prepared_xacts;
+extern PGDLLIMPORT int max_prepared_xacts;
 
 extern Size TwoPhaseShmemSize(void);
 extern void TwoPhaseShmemInit(void);
diff --git a/src/include/commands/extension.h b/src/include/commands/extension.h
index 73bba3c..551cf2b 100644
--- a/src/include/commands/extension.h
+++ b/src/include/commands/extension.h
@@ -28,7 +28,7 @@
  * them from the extension first.
  */
 extern PGDLLIMPORT bool creating_extension;
-extern Oid	CurrentExtensionObject;
+extern PGDLLIMPORT Oid	CurrentExtensionObject;
 
 
 extern ObjectAddress CreateExtension(ParseState *pstate, CreateExtensionStmt *stmt);
diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h
index dad98de..1877769 100644
--- a/src/include/miscadmin.h
+++ b/src/include/miscadmin.h
@@ -150,14 +150,14 @@ extern PGDLLIMPORT bool IsUnderPostmaster;
 extern PGDLLIMPORT bool IsBackgroundWorker;
 extern PGDLLIMPORT bool IsBinaryUpgrade;
 
-extern bool ExitOnAnyError;
+extern PGDLLIMPORT bool ExitOnAnyError;
 
 extern PGDLLIMPORT char *DataDir;
 
 extern PGDLLIMPORT int NBuffers;
-extern int	MaxBackends;
-extern int	MaxConnections;
-extern int	max_worker_processes;
+extern PGDLLIMPORT int	MaxBackends;
+extern PGDLLIMPORT int	MaxConnections;
+extern PGDLLIMPORT int	max_worker_processes;
 extern int	max_parallel_workers;
 
 extern PGDLLIMPORT int MyProcPid;
@@ -238,7 +238,7 @@ extern PGDLLIMPORT int IntervalStyle;
 #define MAXTZLEN		10		/* max TZ name len, not counting tr. null */
 
 extern bool enableFsync;
-extern bool allowSystemTableMods;
+extern PGDLLIMPORT bool allowSystemTableMods;
 extern PGDLLIMPORT int work_mem;
 extern PGDLLIMPORT int maintenance_work_mem;
 extern PGDLLIMPORT int replacement_sort_tuples;
diff --git a/src/include/postmaster/postmaster.h b/src/include/postmaster/postmaster.h
index 0f85908..5925160 100644
--- a/src/include/postmaster/postmaster.h
+++ b/src/include/postmaster/postmaster.h
@@ -16,7 +16,7 @@
 /* GUC options */
 extern bool EnableSSL;
 extern int	ReservedBackends;
-extern int	PostPortNumber;
+extern PGDLLIMPORT int	PostPortNumber;
 extern int	Unix_socket_permissions;
 extern char *Unix_socket_group;
 extern char *Unix_socket_directories;
@@ -44,7 +44,7 @@ extern int	postmaster_alive_fds[2];
 #define POSTMASTER_FD_OWN		1	/* kept open by postmaster only */
 #endif
 
-extern const char *progname;
+extern PGDLLIMPORT const char *progname;
 
 extern void PostmasterMain(int argc, char *argv[]) pg_attribute_noreturn();
 extern void ClosePostmasterPorts(bool am_syslogger);
diff --git a/src/include/storage/fd.h b/src/include/storage/fd.h
index faef39e..ea2ab8f 100644
--- a/src/include/storage/fd.h
+++ b/src/include/storage/fd.h
@@ -52,7 +52,7 @@ typedef int File;
 
 
 /* GUC parameter */
-extern int	max_files_per_process;
+extern PGDLLIMPORT int	max_files_per_process;
 
 /*
  * This is private to fd.c, but exported for save/restore_backend_variables()
diff --git a/src/include/storage/proc.h b/src/include/storage/proc.h
index 7dbaa81..2e59821 100644
--- a/src/include/storage/proc.h
+++ b/src/include/storage/proc.h
@@ -255,7 +255,7 @@ typedef struct PROC_HDR
 	int			startupBufferPinWaitBufId;
 } PROC_HDR;
 
-extern PROC_HDR *ProcGlobal;
+extern PGDLLIMPORT PROC_HDR *ProcGlobal;
 
 extern PGPROC *PreparedXactProcs;
 
@@ -273,7 +273,7 @@ extern PGPROC *PreparedXactProcs;
 #define NUM_AUXILIARY_PROCS		4
 
 /* configurable options */
-extern int	DeadlockTimeout;
+extern PGDLLIMPORT int	DeadlockTimeout;
 extern int	StatementTimeout;
 extern int	LockTimeout;
 extern int	IdleInTransactionSessionTimeout;
diff --git a/src/include/tcop/dest.h b/src/include/tcop/dest.h
index c990544..6de5812 100644
--- a/src/include/tcop/dest.h
+++ b/src/include/tcop/dest.h
@@ -129,7 +129,7 @@ struct _DestReceiver
 	/* Private fields might appear beyond this point... */
 };
 
-extern DestReceiver *None_Receiver; /* permanent receiver for DestNone */
+extern PGDLLIMPORT DestReceiver *None_Receiver; /* permanent receiver for DestNone */
 
 /* The primary destination management functions */
 
diff --git a/src/include/tcop/tcopprot.h b/src/include/tcop/tcopprot.h
index f8c535c..baaf45e 100644
--- a/src/include/tcop/tcopprot.h
+++ b/src/include/tcop/tcopprot.h
@@ -45,7 +45,7 @@ typedef enum
 	LOGSTMT_ALL					/* log all statements */
 } LogStmtLevel;
 
-extern int	log_statement;
+extern PGDLLIMPORT int	log_statement;
 
 extern List *pg_parse_query(const char *query_string);
 extern List *pg_analyze_and_rewrite(RawStmt *parsetree,
diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h
index c1870d2..72134ae 100644
--- a/src/include/utils/guc.h
+++ b/src/include/utils/guc.h
@@ -246,8 +246,8 @@ extern PGDLLIMPORT bool check_function_bodies;
 extern bool default_with_oids;
 
 extern int	log_min_error_statement;
-extern int	log_min_messages;
-extern int	client_min_messages;
+extern PGDLLIMPORT int	log_min_messages;
+extern PGDLLIMPORT int	client_min_messages;
 extern int	log_min_duration_statement;
 extern int	log_temp_files;
 
@@ -256,7 +256,7 @@ extern int	temp_file_limit;
 extern int	num_temp_buffers;
 
 extern char *cluster_name;
-extern char *ConfigFileName;
+extern PGDLLIMPORT char *ConfigFileName;
 extern char *HbaFileName;
 extern char *IdentFileName;
 extern char *external_pid_file;
-- 
2.7.4

Reply via email to