pgsql: Fix msvc builds for ActivePerl > 5.24

Started by Magnus Haganderover 8 years ago3 messagescomitters
Jump to latest
#1Magnus Hagander
magnus@hagander.net

Fix msvc builds for ActivePerl > 5.24

From this version ActivePerl ships both a .lib and a .a file for the
perl library, which our code would detect as there being no library
available. Instead, we should pick the .lib version and use that.

Report and suggested fix in bug #15065

Author: Heath Lord

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/7240962f8626ff09bb8f9e71ecdb074775bdd035

Modified Files
--------------
src/tools/msvc/Mkvcbuild.pm | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

#2Noah Misch
noah@leadboat.com
In reply to: Magnus Hagander (#1)
Re: pgsql: Fix msvc builds for ActivePerl > 5.24

On Fri, Mar 02, 2018 at 11:42:32AM +0000, Magnus Hagander wrote:

Fix msvc builds for ActivePerl > 5.24

--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -524,9 +524,11 @@ sub mkvcbuild
my $perl_path = $solution->{options}->{perl} . '\lib\CORE\*perl*';
# ActivePerl 5.16 provided perl516.lib; 5.18 provided libperl518.a
+		# Starting with ActivePerl 5.24, both  perlnn.lib and libperlnn.a are provided.
+		# In this case, prefer .lib.

Sounds reasonable, but ...

my @perl_libs =
grep { /perl\d+\.lib$|libperl\d+\.a$/ } glob($perl_path);
- if (@perl_libs == 1)
+ if (@perl_libs > 0)
{
$plperl->AddLibrary($perl_libs[0]);
}

... the behavior doesn't match the comment. By default, glob() sorts by ASCII
value, so @perl_libs = qw(libperl524.a perl524.lib).

#3Magnus Hagander
magnus@hagander.net
In reply to: Noah Misch (#2)
Re: pgsql: Fix msvc builds for ActivePerl > 5.24

On Sat, Mar 3, 2018 at 9:00 AM, Noah Misch <noah@leadboat.com> wrote:

On Fri, Mar 02, 2018 at 11:42:32AM +0000, Magnus Hagander wrote:

Fix msvc builds for ActivePerl > 5.24

--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -524,9 +524,11 @@ sub mkvcbuild
my $perl_path = $solution->{options}->{perl} .

'\lib\CORE\*perl*';

# ActivePerl 5.16 provided perl516.lib; 5.18 provided

libperl518.a

+ # Starting with ActivePerl 5.24, both perlnn.lib and

libperlnn.a are provided.

+ # In this case, prefer .lib.

Sounds reasonable, but ...

my @perl_libs =
grep { /perl\d+\.lib$|libperl\d+\.a$/ } glob($perl_path);
- if (@perl_libs == 1)
+ if (@perl_libs > 0)
{
$plperl->AddLibrary($perl_libs[0]);
}

... the behavior doesn't match the comment. By default, glob() sorts by
ASCII
value, so @perl_libs = qw(libperl524.a perl524.lib).

That's what I get for actually assuming the submission matched the
description, and not properly testing.

Not being a perl guy, I've committed what I think is a correct fix.

Thanks for the spot!

--
Magnus Hagander
Me: https://www.hagander.net/ <http://www.hagander.net/&gt;
Work: https://www.redpill-linpro.com/ <http://www.redpill-linpro.com/&gt;