summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Rowley2021-07-29 00:01:23 +0000
committerDavid Rowley2021-07-29 00:01:23 +0000
commit245de48455daaf51f2f3e8b198d87b5dd9fd4516 (patch)
tree018b8721d33d2a93862860d6aa207c9b08dbbe07
parent15f16ec6511cf50374b09876e39c6939f2da0f08 (diff)
Adjust MSVC build scripts to parse Makefiles for defines
This adjusts the MSVC build scripts to look at the compile flags mentioned in the Makefile to look for -D arguments in order to determine which constants should be defined in Visual Studio builds. One small anomaly that appeared as a result of this change is that the Makefile for the ltree contrib module defined LOWER_NODE, but this was not properly defined in the MSVC build scripts. This meant that MSVC builds would differ in case sensitivity in the ltree module when compared to builds using a make build environment. To maintain the same behavior here we remove the -DLOWER_NODE from the Makefile and just always define it in ltree.h for non-MSVC builds. We need to maintain the old behavior here as this affects the on-disk compatibility of GiST indexes when using the ltree type. The only other resulting change here is that REFINT_VERBOSE is now defined for the autoinc, insert_username and moddatetime contrib modules. Previously on MSVC, this was only defined for the refint module. This aligns the behavior to build environments using make as all 4 of these modules share the same Makefile. Reviewed-by: Tom Lane Discussion: https://postgr.es/m/CAApHDvpo6g5csCTjc_0C7DMvgFPomVb0Rh-AcW5afd=Ya=LRuw@mail.gmail.com
-rw-r--r--contrib/ltree/Makefile1
-rw-r--r--contrib/ltree/crc32.c1
-rw-r--r--contrib/ltree/ltree.h13
-rw-r--r--src/tools/msvc/Mkvcbuild.pm21
4 files changed, 34 insertions, 2 deletions
diff --git a/contrib/ltree/Makefile b/contrib/ltree/Makefile
index b16a5668523..770769a730d 100644
--- a/contrib/ltree/Makefile
+++ b/contrib/ltree/Makefile
@@ -12,7 +12,6 @@ OBJS = \
ltree_op.o \
ltxtquery_io.o \
ltxtquery_op.o
-PG_CPPFLAGS = -DLOWER_NODE
EXTENSION = ltree
DATA = ltree--1.1--1.2.sql ltree--1.1.sql ltree--1.0--1.1.sql
diff --git a/contrib/ltree/crc32.c b/contrib/ltree/crc32.c
index 8fed3346e8a..134f46a805e 100644
--- a/contrib/ltree/crc32.c
+++ b/contrib/ltree/crc32.c
@@ -8,6 +8,7 @@
*/
#include "postgres.h"
+#include "ltree.h"
#ifdef LOWER_NODE
#include <ctype.h>
diff --git a/contrib/ltree/ltree.h b/contrib/ltree/ltree.h
index dc68a0c212f..5b4be5e680a 100644
--- a/contrib/ltree/ltree.h
+++ b/contrib/ltree/ltree.h
@@ -17,6 +17,19 @@
*/
#define LTREE_LABEL_MAX_CHARS 255
+/*
+ * LOWER_NODE used to be defined in the Makefile via the compile flags.
+ * However the MSVC build scripts neglected to do the same which resulted in
+ * MSVC builds not using LOWER_NODE. Since then, the MSVC scripts have been
+ * modified to look for -D compile flags in Makefiles, so here, in order to
+ * get the historic behavior of LOWER_NODE not being defined on MSVC, we only
+ * define it when not building in that environment. This is important as we
+ * want to maintain the same LOWER_NODE behavior after a pg_update.
+ */
+#ifndef _MSC_VER
+#define LOWER_NODE
+#endif
+
typedef struct
{
uint16 len; /* label string length in bytes */
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 803d9cf30cb..aab559e3ef9 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -35,7 +35,7 @@ my $libpq;
my @unlink_on_exit;
# Set of variables for modules in contrib/ and src/test/modules/
-my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
+my $contrib_defines = {};
my @contrib_uselibpq =
('dblink', 'oid2name', 'postgres_fdw', 'vacuumlo', 'libpq_pipeline');
my @contrib_uselibpgport = ('libpq_pipeline', 'oid2name', 'vacuumlo');
@@ -964,6 +964,7 @@ sub AddContrib
my $subdir = shift;
my $n = shift;
my $mf = Project::read_file("$subdir/$n/Makefile");
+ my @projects = ();
if ($mf =~ /^MODULE_big\s*=\s*(.*)$/mg)
{
@@ -971,6 +972,7 @@ sub AddContrib
my $proj = $solution->AddProject($dn, 'dll', 'contrib', "$subdir/$n");
$proj->AddReference($postgres);
AdjustContribProj($proj);
+ push @projects, $proj;
}
elsif ($mf =~ /^MODULES\s*=\s*(.*)$/mg)
{
@@ -982,18 +984,35 @@ sub AddContrib
$proj->AddFile("$subdir/$n/$filename");
$proj->AddReference($postgres);
AdjustContribProj($proj);
+ push @projects, $proj;
}
}
elsif ($mf =~ /^PROGRAM\s*=\s*(.*)$/mg)
{
my $proj = $solution->AddProject($1, 'exe', 'contrib', "$subdir/$n");
AdjustContribProj($proj);
+ push @projects, $proj;
}
else
{
croak "Could not determine contrib module type for $n\n";
}
+ # Process custom compiler flags
+ if ($mf =~ /^PG_CPPFLAGS\s*=\s*(.*)$/mg || $mf =~ /^override\s*CPPFLAGS\s*[+:]?=\s*(.*)$/mg)
+ {
+ foreach my $flag (split /\s+/, $1)
+ {
+ if ($flag =~ /^-D(.*)$/)
+ {
+ foreach my $proj (@projects)
+ {
+ $proj->AddDefine($1);
+ }
+ }
+ }
+ }
+
# Are there any output data files to build?
GenerateContribSqlFiles($n, $mf);
return;