diff options
author | David Rowley <drowley@postgresql.org> | 2021-07-29 12:01:23 +1200 |
---|---|---|
committer | David Rowley <drowley@postgresql.org> | 2021-07-29 12:01:23 +1200 |
commit | 245de48455daaf51f2f3e8b198d87b5dd9fd4516 (patch) | |
tree | 018b8721d33d2a93862860d6aa207c9b08dbbe07 | |
parent | 15f16ec6511cf50374b09876e39c6939f2da0f08 (diff) | |
download | postgresql-245de48455daaf51f2f3e8b198d87b5dd9fd4516.tar.gz postgresql-245de48455daaf51f2f3e8b198d87b5dd9fd4516.zip |
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/Makefile | 1 | ||||
-rw-r--r-- | contrib/ltree/crc32.c | 1 | ||||
-rw-r--r-- | contrib/ltree/ltree.h | 13 | ||||
-rw-r--r-- | src/tools/msvc/Mkvcbuild.pm | 21 |
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; |