From 03df45cc055bb3adbc3882e0036a7e3537f8af0c Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Sun, 25 Sep 2022 12:07:29 -0700
Subject: [PATCH v16 11/16] windows: adjust FD_SETSIZE via commandline define

This is a prerequisite to using precompiled headers.
---
 src/fe_utils/Makefile        |  4 ++++
 src/fe_utils/meson.build     |  1 +
 src/fe_utils/parallel_slot.c |  4 ++--
 src/bin/pgbench/Makefile     |  2 ++
 src/bin/pgbench/meson.build  |  2 ++
 src/bin/pgbench/pgbench.c    |  4 ++--
 src/tools/msvc/Mkvcbuild.pm  | 17 +++++++++++++++--
 7 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/src/fe_utils/Makefile b/src/fe_utils/Makefile
index 44bc7a1215d..40d4b1d8698 100644
--- a/src/fe_utils/Makefile
+++ b/src/fe_utils/Makefile
@@ -34,6 +34,10 @@ OBJS = \
 	simple_list.o \
 	string_utils.o
 
+ifeq ($(PORTNAME), win32)
+override CFLAGS += -DFD_SETSIZE=1024
+endif
+
 all: libpgfeutils.a
 
 libpgfeutils.a: $(OBJS)
diff --git a/src/fe_utils/meson.build b/src/fe_utils/meson.build
index b6bf8e1ca21..3e226c260ac 100644
--- a/src/fe_utils/meson.build
+++ b/src/fe_utils/meson.build
@@ -24,6 +24,7 @@ fe_utils_sources += psqlscan
 fe_utils = static_library('libpgfeutils',
   fe_utils_sources + generated_headers,
   include_directories: [postgres_inc, libpq_inc],
+  c_args: host_system == 'windows' ? ['-DFD_SETSIZE=1024'] : [],
   dependencies: frontend_common_code,
   kwargs: default_lib_args,
 )
diff --git a/src/fe_utils/parallel_slot.c b/src/fe_utils/parallel_slot.c
index 2be2903c9c6..767256757f2 100644
--- a/src/fe_utils/parallel_slot.c
+++ b/src/fe_utils/parallel_slot.c
@@ -12,8 +12,8 @@
  *-------------------------------------------------------------------------
  */
 
-#ifdef WIN32
-#define FD_SETSIZE 1024			/* must set before winsock2.h is included */
+#if defined(WIN32) && FD_SETSIZE < 1024
+#error FD_SETSIZE needs to have been increased
 #endif
 
 #include "postgres_fe.h"
diff --git a/src/bin/pgbench/Makefile b/src/bin/pgbench/Makefile
index 6647c9fe97d..68e9f03e79f 100644
--- a/src/bin/pgbench/Makefile
+++ b/src/bin/pgbench/Makefile
@@ -18,6 +18,8 @@ LDFLAGS_INTERNAL += -L$(top_builddir)/src/fe_utils -lpgfeutils $(libpq_pgport)
 
 ifneq ($(PORTNAME), win32)
 override CFLAGS += $(PTHREAD_CFLAGS)
+else
+override CFLAGS += -DFD_SETSIZE=1024
 endif
 LIBS += $(PTHREAD_LIBS)
 
diff --git a/src/bin/pgbench/meson.build b/src/bin/pgbench/meson.build
index a32eb51fe07..1a3ec5d1295 100644
--- a/src/bin/pgbench/meson.build
+++ b/src/bin/pgbench/meson.build
@@ -27,6 +27,8 @@ pgbench = executable('pgbench',
   pgbench_sources,
   dependencies: [frontend_code, libpq, thread_dep],
   include_directories: include_directories('.'),
+  c_pch: pch_postgres_fe_h,
+  c_args: host_system == 'windows' ? ['-DFD_SETSIZE=1024'] : [],
   kwargs: default_bin_args,
 )
 bin_targets += pgbench
diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
index aa1a3541fe6..7da7c36fbe6 100644
--- a/src/bin/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -27,8 +27,8 @@
  *
  */
 
-#ifdef WIN32
-#define FD_SETSIZE 1024			/* must set before winsock2.h is included */
+#if defined(WIN32) && FD_SETSIZE < 1024
+#error FD_SETSIZE needs to have been increased
 #endif
 
 #include "postgres_fe.h"
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index ddb4f25eb12..4d1e4f4e4d4 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -35,6 +35,7 @@ my $libpq;
 my @unlink_on_exit;
 
 # Set of variables for modules in contrib/ and src/test/modules/
+my $contrib_defines        = {};
 my @contrib_uselibpq       = ();
 my @contrib_uselibpgport   = ();
 my @contrib_uselibpgcommon = ();
@@ -52,6 +53,7 @@ my @contrib_excludes       = (
 	'unsafe_tests');
 
 # Set of variables for frontend modules
+my $frontend_defines = { 'pgbench' => 'FD_SETSIZE=1024' };
 my @frontend_uselibpq =
   ('pg_amcheck', 'pg_ctl', 'pg_upgrade', 'pgbench', 'psql', 'initdb');
 my @frontend_uselibpgport = (
@@ -175,6 +177,7 @@ sub mkvcbuild
 
 	$libpgfeutils = $solution->AddProject('libpgfeutils', 'lib', 'misc');
 	$libpgfeutils->AddDefine('FRONTEND');
+	$libpgfeutils->AddDefine('FD_SETSIZE=1024');
 	$libpgfeutils->AddIncludeDir('src/interfaces/libpq');
 	$libpgfeutils->AddFiles('src/fe_utils', @pgfeutilsfiles);
 
@@ -1120,7 +1123,8 @@ sub AdjustContribProj
 {
 	my $proj = shift;
 	AdjustModule(
-		$proj,                  \@contrib_uselibpq,
+		$proj,                  $contrib_defines,
+		\@contrib_uselibpq,
 		\@contrib_uselibpgport, \@contrib_uselibpgcommon,
 		$contrib_extralibs,     $contrib_extrasource,
 		$contrib_extraincludes);
@@ -1131,7 +1135,8 @@ sub AdjustFrontendProj
 {
 	my $proj = shift;
 	AdjustModule(
-		$proj,                   \@frontend_uselibpq,
+		$proj,                   $frontend_defines,
+		\@frontend_uselibpq,
 		\@frontend_uselibpgport, \@frontend_uselibpgcommon,
 		$frontend_extralibs,     $frontend_extrasource,
 		$frontend_extraincludes);
@@ -1141,6 +1146,7 @@ sub AdjustFrontendProj
 sub AdjustModule
 {
 	my $proj                  = shift;
+	my $module_defines        = shift;
 	my $module_uselibpq       = shift;
 	my $module_uselibpgport   = shift;
 	my $module_uselibpgcommon = shift;
@@ -1149,6 +1155,13 @@ sub AdjustModule
 	my $module_extraincludes  = shift;
 	my $n                     = $proj->{name};
 
+    if ($module_defines->{$n})
+    {
+        foreach my $d ($module_defines->{$n})
+        {
+            $proj->AddDefine($d);
+        }
+    }
 	if (grep { /^$n$/ } @{$module_uselibpq})
 	{
 		$proj->AddIncludeDir('src\interfaces\libpq');
-- 
2.37.3.542.gdd3f6c4cae

