aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2017-08-14 11:48:59 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2017-08-14 11:48:59 -0400
commit01de7ea85378798f2ce5da93fc5ebf5c81c2453f (patch)
tree57c5be0e8f3f48811a70073c4bf0bc47ff96e575 /src
parent5a3688dc88ec9ea52bb81711235f9de42d13677d (diff)
downloadpostgresql-01de7ea85378798f2ce5da93fc5ebf5c81c2453f.tar.gz
postgresql-01de7ea85378798f2ce5da93fc5ebf5c81c2453f.zip
Absorb -D_USE_32BIT_TIME_T switch from Perl, if relevant.
Commit 3c163a7fc's original choice to ignore all #define symbols whose names begin with underscore turns out to be too simplistic. On Windows, some Perl installations are built with -D_USE_32BIT_TIME_T, and we must absorb that or we get the wrong result for sizeof(PerlInterpreter). This effectively re-reverts commit ef58b87df, which injected that symbol in a hacky way, making it apply to all of Postgres not just PL/Perl. More significantly, it did so on *all* 32-bit Windows builds, even when the Perl build to be used did not select this option; so that it fails to work properly with some newer Perl builds. By making this change, we would be introducing an ABI break in 32-bit Windows builds; but fortunately we have not used type time_t in any exported Postgres APIs in a long time. So it should be OK, both for PL/Perl itself and for third-party extensions, if an extension library is built with a different _USE_32BIT_TIME_T setting than the core code. Patch by me, based on research by Ashutosh Sharma and Robert Haas. Back-patch to all supported branches, as commit 3c163a7fc was. Discussion: https://postgr.es/m/CANFyU97OVQ3+Mzfmt3MhuUm5NwPU=-FtbNH5Eb7nZL9ua8=rcA@mail.gmail.com
Diffstat (limited to 'src')
-rw-r--r--src/tools/msvc/MSBuildProject.pm9
-rw-r--r--src/tools/msvc/Mkvcbuild.pm5
-rw-r--r--src/tools/msvc/VCBuildProject.pm10
3 files changed, 7 insertions, 17 deletions
diff --git a/src/tools/msvc/MSBuildProject.pm b/src/tools/msvc/MSBuildProject.pm
index e1c8d81549b..ec7de131156 100644
--- a/src/tools/msvc/MSBuildProject.pm
+++ b/src/tools/msvc/MSBuildProject.pm
@@ -63,21 +63,16 @@ EOF
</PropertyGroup>
EOF
- # We have to use this flag on 32 bit targets because the 32bit perls
- # are built with it and sometimes crash if we don't.
- my $use_32bit_time_t =
- $self->{platform} eq 'Win32' ? '_USE_32BIT_TIME_T;' : '';
-
$self->WriteItemDefinitionGroup(
$f, 'Debug',
- { defs => "_DEBUG;DEBUG=1;$use_32bit_time_t",
+ { defs => "_DEBUG;DEBUG=1",
opt => 'Disabled',
strpool => 'false',
runtime => 'MultiThreadedDebugDLL' });
$self->WriteItemDefinitionGroup(
$f,
'Release',
- { defs => "$use_32bit_time_t",
+ { defs => "",
opt => 'Full',
strpool => 'true',
runtime => 'MultiThreadedDLL' });
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index d7b64a4046e..109b3ee5633 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -145,14 +145,15 @@ sub mkvcbuild
my @perl_embed_ccflags;
foreach my $f (split(" ",$Config{ccflags}))
{
- if ($f =~ /^-D[^_]/)
+ if ($f =~ /^-D[^_]/ ||
+ $f =~ /^-D_USE_32BIT_TIME_T/)
{
$f =~ s/\-D//;
push(@perl_embed_ccflags, $f);
}
}
- # XXX this probably is redundant now?
+ # Also, a hack to prevent duplicate definitions of uid_t/gid_t
push(@perl_embed_ccflags, 'PLPERL_HAVE_UID_GID');
foreach my $f (@perl_embed_ccflags)
diff --git a/src/tools/msvc/VCBuildProject.pm b/src/tools/msvc/VCBuildProject.pm
index 335a1f016d5..f4059872ac6 100644
--- a/src/tools/msvc/VCBuildProject.pm
+++ b/src/tools/msvc/VCBuildProject.pm
@@ -33,15 +33,9 @@ sub WriteHeader
<Configurations>
EOF
- # We have to use this flag on 32 bit targets because the 32bit perls
- # are built with it and sometimes crash if we don't.
- my $use_32bit_time_t =
- $self->{platform} eq 'Win32' ? '_USE_32BIT_TIME_T;' : '';
-
-
$self->WriteConfiguration(
$f, 'Debug',
- { defs => "_DEBUG;DEBUG=1;$use_32bit_time_t",
+ { defs => "_DEBUG;DEBUG=1",
wholeopt => 0,
opt => 0,
strpool => 'false',
@@ -49,7 +43,7 @@ EOF
$self->WriteConfiguration(
$f,
'Release',
- { defs => "$use_32bit_time_t",
+ { defs => "",
wholeopt => 0,
opt => 3,
strpool => 'true',