summaryrefslogtreecommitdiff
path: root/config/perl.m4
diff options
context:
space:
mode:
authorTom Lane2017-08-14 15:48:59 +0000
committerTom Lane2017-08-14 15:48:59 +0000
commit01de7ea85378798f2ce5da93fc5ebf5c81c2453f (patch)
tree57c5be0e8f3f48811a70073c4bf0bc47ff96e575 /config/perl.m4
parent5a3688dc88ec9ea52bb81711235f9de42d13677d (diff)
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 'config/perl.m4')
-rw-r--r--config/perl.m46
1 files changed, 4 insertions, 2 deletions
diff --git a/config/perl.m4 b/config/perl.m4
index 9706c4de6ac..fbb13ed1c02 100644
--- a/config/perl.m4
+++ b/config/perl.m4
@@ -59,7 +59,9 @@ AC_DEFUN([PGAC_CHECK_PERL_CONFIGS],
# to a different libc ABI than core Postgres uses. The available information
# says that all the symbols that affect Perl's own ABI begin with letters,
# so it should be sufficient to adopt -D switches for symbols not beginning
-# with underscore.
+# with underscore. An exception is that we need to let through
+# -D_USE_32BIT_TIME_T if it's present. (We probably could restrict that to
+# only get through on Windows, but for the moment we let it through always.)
# For debugging purposes, let's have the configure output report the raw
# ccflags value as well as the set of flags we chose to adopt.
AC_DEFUN([PGAC_CHECK_PERL_EMBED_CCFLAGS],
@@ -68,7 +70,7 @@ AC_MSG_CHECKING([for CFLAGS recommended by Perl])
perl_ccflags=`$PERL -MConfig -e ['print $Config{ccflags}']`
AC_MSG_RESULT([$perl_ccflags])
AC_MSG_CHECKING([for CFLAGS to compile embedded Perl])
-perl_embed_ccflags=`$PERL -MConfig -e ['foreach $f (split(" ",$Config{ccflags})) {print $f, " " if ($f =~ /^-D[^_]/)}']`
+perl_embed_ccflags=`$PERL -MConfig -e ['foreach $f (split(" ",$Config{ccflags})) {print $f, " " if ($f =~ /^-D[^_]/ || $f =~ /^-D_USE_32BIT_TIME_T/)}']`
AC_SUBST(perl_embed_ccflags)dnl
AC_MSG_RESULT([$perl_embed_ccflags])
])# PGAC_CHECK_PERL_EMBED_CCFLAGS