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
[AC_REQUIRE([PGAC_PATH_PERL])
AC_MSG_CHECKING(for flags to link embedded Perl)
if test "$PORTNAME" = "win32" ; then
-perl_lib=`basename $perl_archlibexp/CORE/perl[[5-9]]*.lib .lib`
-test -e "$perl_archlibexp/CORE/$perl_lib.lib" && perl_embed_ldflags="-L$perl_archlibexp/CORE -l$perl_lib"
+ perl_lib=`basename $perl_archlibexp/CORE/perl[[5-9]]*.lib .lib`
+ if test -e "$perl_archlibexp/CORE/$perl_lib.lib"; then
+ perl_embed_ldflags="-L$perl_archlibexp/CORE -l$perl_lib"
+ else
+ perl_lib=`basename $perl_archlibexp/CORE/libperl[[5-9]]*.a .a | sed 's/^lib//'`
+ if test -e "$perl_archlibexp/CORE/lib$perl_lib.a"; then
+ perl_embed_ldflags="-L$perl_archlibexp/CORE -l$perl_lib"
+ fi
+ fi
else
-pgac_tmp1=`$PERL -MExtUtils::Embed -e ldopts`
-pgac_tmp2=`$PERL -MConfig -e 'print $Config{ccdlflags}'`
-perl_embed_ldflags=`echo X"$pgac_tmp1" | sed -e "s/^X//" -e "s%$pgac_tmp2%%" -e ["s/ -arch [-a-zA-Z0-9_]*//g"]`
+ pgac_tmp1=`$PERL -MExtUtils::Embed -e ldopts`
+ pgac_tmp2=`$PERL -MConfig -e 'print $Config{ccdlflags}'`
+ perl_embed_ldflags=`echo X"$pgac_tmp1" | sed -e "s/^X//" -e "s%$pgac_tmp2%%" -e ["s/ -arch [-a-zA-Z0-9_]*//g"]`
fi
AC_SUBST(perl_embed_ldflags)dnl
if test -z "$perl_embed_ldflags" ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for flags to link embedded Perl" >&5
$as_echo_n "checking for flags to link embedded Perl... " >&6; }
if test "$PORTNAME" = "win32" ; then
-perl_lib=`basename $perl_archlibexp/CORE/perl[5-9]*.lib .lib`
-test -e "$perl_archlibexp/CORE/$perl_lib.lib" && perl_embed_ldflags="-L$perl_archlibexp/CORE -l$perl_lib"
+ perl_lib=`basename $perl_archlibexp/CORE/perl[5-9]*.lib .lib`
+ if test -e "$perl_archlibexp/CORE/$perl_lib.lib"; then
+ perl_embed_ldflags="-L$perl_archlibexp/CORE -l$perl_lib"
+ else
+ perl_lib=`basename $perl_archlibexp/CORE/libperl[5-9]*.a .a | sed 's/^lib//'`
+ if test -e "$perl_archlibexp/CORE/lib$perl_lib.a"; then
+ perl_embed_ldflags="-L$perl_archlibexp/CORE -l$perl_lib"
+ fi
+ fi
else
-pgac_tmp1=`$PERL -MExtUtils::Embed -e ldopts`
-pgac_tmp2=`$PERL -MConfig -e 'print $Config{ccdlflags}'`
-perl_embed_ldflags=`echo X"$pgac_tmp1" | sed -e "s/^X//" -e "s%$pgac_tmp2%%" -e "s/ -arch [-a-zA-Z0-9_]*//g"`
+ pgac_tmp1=`$PERL -MExtUtils::Embed -e ldopts`
+ pgac_tmp2=`$PERL -MConfig -e 'print $Config{ccdlflags}'`
+ perl_embed_ldflags=`echo X"$pgac_tmp1" | sed -e "s/^X//" -e "s%$pgac_tmp2%%" -e "s/ -arch [-a-zA-Z0-9_]*//g"`
fi
if test -z "$perl_embed_ldflags" ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
#undef vsnprintf
#endif
+/*
+ * ActivePerl 5.18 and later are MinGW-built, and their headers use GCC's
+ * __inline__. Translate to something MSVC recognizes.
+ */
+#ifdef _MSC_VER
+#define __inline__ inline
+#endif
+
/*
* Get the basic Perl API. We use PERL_NO_GET_CONTEXT mode so that our code
}
}
$plperl->AddReference($postgres);
- my $perl_path = $solution->{options}->{perl} . '\lib\CORE\perl*.lib';
+ my $perl_path = $solution->{options}->{perl} . '\lib\CORE\*perl*';
+ # ActivePerl 5.16 provided perl516.lib; 5.18 provided libperl518.a
my @perl_libs =
- grep { /perl\d+.lib$/ } glob($perl_path);
+ grep { /perl\d+\.lib$|libperl\d+\.a$/ } glob($perl_path);
if (@perl_libs == 1)
{
$plperl->AddLibrary($perl_libs[0]);