Re: [HACKERS] pl/perl extension fails on Windows

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: [HACKERS] pl/perl extension fails on Windows
Дата
Msg-id 14838.1502379286@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: [HACKERS] pl/perl extension fails on Windows  (Ashutosh Sharma <ashu.coek88@gmail.com>)
Ответы Re: [HACKERS] pl/perl extension fails on Windows  (Sandeep Thakkar <sandeep.thakkar@enterprisedb.com>)
Список pgsql-hackers
Ashutosh Sharma <ashu.coek88@gmail.com> writes:
> On Thu, Aug 10, 2017 at 8:06 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> Yeah ... however, if that's there, then there's something wrong with
>> Ashutosh's explanation, because that means we *are* building with
>> _USE_32BIT_TIME_T in 32-bit builds.  It's just getting there in a
>> roundabout way.  (Or, alternatively, this code is somehow not doing
>> anything at all.)

> I am extremely sorry if i have communicated the things wrongly, what i
> meant was we are always considering _USE_32BIT_TIME_T flag to build
> plperl module on Windows 32-bit platform but unfortunately that is not
> being considered/defined in perl code in case we use VC++ compiler
> version greater than 8.0. and that's the reason for the binary
> mismatch error on 32 bit platform.

Got it.  So in short, it seems like the attached patch ought to fix it
for MSVC builds.  (We'd also need to teach PGAC_CHECK_PERL_EMBED_CCFLAGS
to let _USE_32BIT_TIME_T through on Windows, but let's confirm the theory
first.)

            regards, tom lane

diff --git a/src/tools/msvc/MSBuildProject.pm b/src/tools/msvc/MSBuildProject.pm
index d7638b4..27329f9 100644
*** a/src/tools/msvc/MSBuildProject.pm
--- b/src/tools/msvc/MSBuildProject.pm
*************** EOF
*** 63,83 ****
    </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",
              opt     => 'Disabled',
              strpool => 'false',
              runtime => 'MultiThreadedDebugDLL' });
      $self->WriteItemDefinitionGroup(
          $f,
          'Release',
!         {   defs    => "$use_32bit_time_t",
              opt     => 'Full',
              strpool => 'true',
              runtime => 'MultiThreadedDLL' });
--- 63,78 ----
    </PropertyGroup>
  EOF

      $self->WriteItemDefinitionGroup(
          $f, 'Debug',
!         {   defs    => "_DEBUG;DEBUG=1",
              opt     => 'Disabled',
              strpool => 'false',
              runtime => 'MultiThreadedDebugDLL' });
      $self->WriteItemDefinitionGroup(
          $f,
          'Release',
!         {   defs    => "",
              opt     => 'Full',
              strpool => 'true',
              runtime => 'MultiThreadedDLL' });
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index a7e3a01..940bef6 100644
*** a/src/tools/msvc/Mkvcbuild.pm
--- b/src/tools/msvc/Mkvcbuild.pm
*************** sub mkvcbuild
*** 522,528 ****
          my @perl_embed_ccflags;
          foreach my $f (split(" ",$Config{ccflags}))
          {
!             if ($f =~ /^-D[^_]/)
              {
                  $f =~ s/\-D//;
                  push(@perl_embed_ccflags, $f);
--- 522,529 ----
          my @perl_embed_ccflags;
          foreach my $f (split(" ",$Config{ccflags}))
          {
!             if ($f =~ /^-D[^_]/ ||
!                 $f =~ /^-D_USE_32BIT_TIME_T/)
              {
                  $f =~ s/\-D//;
                  push(@perl_embed_ccflags, $f);
diff --git a/src/tools/msvc/VCBuildProject.pm b/src/tools/msvc/VCBuildProject.pm
index a8d75d8..669ba17 100644
*** a/src/tools/msvc/VCBuildProject.pm
--- b/src/tools/msvc/VCBuildProject.pm
*************** sub WriteHeader
*** 33,47 ****
   <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",
              wholeopt => 0,
              opt      => 0,
              strpool  => 'false',
--- 33,41 ----
   <Configurations>
  EOF

      $self->WriteConfiguration(
          $f, 'Debug',
!         {   defs     => "_DEBUG;DEBUG=1",
              wholeopt => 0,
              opt      => 0,
              strpool  => 'false',
*************** EOF
*** 49,55 ****
      $self->WriteConfiguration(
          $f,
          'Release',
!         {   defs     => "$use_32bit_time_t",
              wholeopt => 0,
              opt      => 3,
              strpool  => 'true',
--- 43,49 ----
      $self->WriteConfiguration(
          $f,
          'Release',
!         {   defs     => "",
              wholeopt => 0,
              opt      => 3,
              strpool  => 'true',

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Craig Ringer
Дата:
Сообщение: Re: [HACKERS] [TRAP: FailedAssertion] causing server to crash
Следующее
От: Tom Lane
Дата:
Сообщение: Re: [HACKERS] Remove 1MB size limit in tsvector