Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit f16a095

Browse files
committed
Support linking with MinGW-built Perl.
This is necessary for ActivePerl 5.18 onwards and for Strawberry Perl. It is not sufficient for 32-bit builds with newer Visual Studio; these fail with error LINK2026. Back-patch to 9.3 (all supported versions). Reported by Victor Wagner. Discussion: https://postgr.es/m/20160326154321.7754ab8f@wagner.wagner.home
1 parent c60b898 commit f16a095

File tree

4 files changed

+35
-12
lines changed

4 files changed

+35
-12
lines changed

config/perl.m4

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,19 @@ AC_DEFUN([PGAC_CHECK_PERL_EMBED_LDFLAGS],
8383
[AC_REQUIRE([PGAC_PATH_PERL])
8484
AC_MSG_CHECKING(for flags to link embedded Perl)
8585
if test "$PORTNAME" = "win32" ; then
86-
perl_lib=`basename $perl_archlibexp/CORE/perl[[5-9]]*.lib .lib`
87-
test -e "$perl_archlibexp/CORE/$perl_lib.lib" && perl_embed_ldflags="-L$perl_archlibexp/CORE -l$perl_lib"
86+
perl_lib=`basename $perl_archlibexp/CORE/perl[[5-9]]*.lib .lib`
87+
if test -e "$perl_archlibexp/CORE/$perl_lib.lib"; then
88+
perl_embed_ldflags="-L$perl_archlibexp/CORE -l$perl_lib"
89+
else
90+
perl_lib=`basename $perl_archlibexp/CORE/libperl[[5-9]]*.a .a | sed 's/^lib//'`
91+
if test -e "$perl_archlibexp/CORE/lib$perl_lib.a"; then
92+
perl_embed_ldflags="-L$perl_archlibexp/CORE -l$perl_lib"
93+
fi
94+
fi
8895
else
89-
pgac_tmp1=`$PERL -MExtUtils::Embed -e ldopts`
90-
pgac_tmp2=`$PERL -MConfig -e 'print $Config{ccdlflags}'`
91-
perl_embed_ldflags=`echo X"$pgac_tmp1" | sed -e "s/^X//" -e "s%$pgac_tmp2%%" -e ["s/ -arch [-a-zA-Z0-9_]*//g"]`
96+
pgac_tmp1=`$PERL -MExtUtils::Embed -e ldopts`
97+
pgac_tmp2=`$PERL -MConfig -e 'print $Config{ccdlflags}'`
98+
perl_embed_ldflags=`echo X"$pgac_tmp1" | sed -e "s/^X//" -e "s%$pgac_tmp2%%" -e ["s/ -arch [-a-zA-Z0-9_]*//g"]`
9299
fi
93100
AC_SUBST(perl_embed_ldflags)dnl
94101
if test -z "$perl_embed_ldflags" ; then

configure

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7874,12 +7874,19 @@ $as_echo "$perl_embed_ccflags" >&6; }
78747874
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for flags to link embedded Perl" >&5
78757875
$as_echo_n "checking for flags to link embedded Perl... " >&6; }
78767876
if test "$PORTNAME" = "win32" ; then
7877-
perl_lib=`basename $perl_archlibexp/CORE/perl[5-9]*.lib .lib`
7878-
test -e "$perl_archlibexp/CORE/$perl_lib.lib" && perl_embed_ldflags="-L$perl_archlibexp/CORE -l$perl_lib"
7877+
perl_lib=`basename $perl_archlibexp/CORE/perl[5-9]*.lib .lib`
7878+
if test -e "$perl_archlibexp/CORE/$perl_lib.lib"; then
7879+
perl_embed_ldflags="-L$perl_archlibexp/CORE -l$perl_lib"
7880+
else
7881+
perl_lib=`basename $perl_archlibexp/CORE/libperl[5-9]*.a .a | sed 's/^lib//'`
7882+
if test -e "$perl_archlibexp/CORE/lib$perl_lib.a"; then
7883+
perl_embed_ldflags="-L$perl_archlibexp/CORE -l$perl_lib"
7884+
fi
7885+
fi
78797886
else
7880-
pgac_tmp1=`$PERL -MExtUtils::Embed -e ldopts`
7881-
pgac_tmp2=`$PERL -MConfig -e 'print $Config{ccdlflags}'`
7882-
perl_embed_ldflags=`echo X"$pgac_tmp1" | sed -e "s/^X//" -e "s%$pgac_tmp2%%" -e "s/ -arch [-a-zA-Z0-9_]*//g"`
7887+
pgac_tmp1=`$PERL -MExtUtils::Embed -e ldopts`
7888+
pgac_tmp2=`$PERL -MConfig -e 'print $Config{ccdlflags}'`
7889+
perl_embed_ldflags=`echo X"$pgac_tmp1" | sed -e "s/^X//" -e "s%$pgac_tmp2%%" -e "s/ -arch [-a-zA-Z0-9_]*//g"`
78837890
fi
78847891
if test -z "$perl_embed_ldflags" ; then
78857892
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5

src/pl/plperl/plperl.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,14 @@
4242
#undef vsnprintf
4343
#endif
4444

45+
/*
46+
* ActivePerl 5.18 and later are MinGW-built, and their headers use GCC's
47+
* __inline__. Translate to something MSVC recognizes.
48+
*/
49+
#ifdef _MSC_VER
50+
#define __inline__ inline
51+
#endif
52+
4553

4654
/*
4755
* Get the basic Perl API. We use PERL_NO_GET_CONTEXT mode so that our code

src/tools/msvc/Mkvcbuild.pm

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -615,9 +615,10 @@ sub mkvcbuild
615615
}
616616
}
617617
$plperl->AddReference($postgres);
618-
my $perl_path = $solution->{options}->{perl} . '\lib\CORE\perl*.lib';
618+
my $perl_path = $solution->{options}->{perl} . '\lib\CORE\*perl*';
619+
# ActivePerl 5.16 provided perl516.lib; 5.18 provided libperl518.a
619620
my @perl_libs =
620-
grep { /perl\d+.lib$/ } glob($perl_path);
621+
grep { /perl\d+\.lib$|libperl\d+\.a$/ } glob($perl_path);
621622
if (@perl_libs == 1)
622623
{
623624
$plperl->AddLibrary($perl_libs[0]);

0 commit comments

Comments
 (0)