Further tweaks to compiler flags for PL/Perl on Windows.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 17 Aug 2017 17:13:47 +0000 (13:13 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 17 Aug 2017 17:14:06 +0000 (13:14 -0400)
It now emerges that we can only rely on Perl to tell us we must use
-D_USE_32BIT_TIME_T if it's Perl 5.13.4 or later.  For older versions,
revert to our previous practice of assuming we need that symbol in
all 32-bit Windows builds.  This is not ideal, but inquiring into
which compiler version Perl was built with seems far too fragile.
In any case, we had not previously had complaints about these old
Perl versions, so let's assume this is Good Enough.  (It's still
better than the situation ante commit 5a5c2feca, in that at least
the effects are confined to PL/Perl rather than the whole PG build.)

Back-patch to all supported versions, like 5a5c2feca and predecessors.

Discussion: https://postgr.es/m/CANFyU97OVQ3+Mzfmt3MhuUm5NwPU=-FtbNH5Eb7nZL9ua8=rcA@mail.gmail.com

src/tools/msvc/Mkvcbuild.pm

index 6988eea1c88e3a6ba0e0a36a89b4c1969f2a31b4..31a8294d300c1c1fb57321c5f31dd2be92959df7 100644 (file)
@@ -529,6 +529,18 @@ sub mkvcbuild
                        }
                }
 
+               # Perl versions before 5.13.4 don't provide -D_USE_32BIT_TIME_T
+               # regardless of how they were built.  On 32-bit Windows, assume
+               # such a version was built with a pre-MSVC-2005 compiler, and
+               # define the symbol anyway, so that we are compatible if we're
+               # being built with a later MSVC version.
+               push(@perl_embed_ccflags, '_USE_32BIT_TIME_T')
+                 if $solution->{platform} eq 'Win32'
+                         && $Config{PERL_REVISION} == 5
+                         && ($Config{PERL_VERSION} < 13
+                                 || (   $Config{PERL_VERSION} == 13
+                                         && $Config{PERL_SUBVERSION} < 4));
+
                # Also, a hack to prevent duplicate definitions of uid_t/gid_t
                push(@perl_embed_ccflags, 'PLPERL_HAVE_UID_GID');