Mon Jul 11 15:15:22 2016: Request 116056 was acted upon. Transaction: Ticket created by kbr...@cornell.edu Queue: PAR Subject: Fixes for Cygwin build of PAR::Packer Broken in: (no value) Severity: (no value) Owner: Nobody Requestors: kbr...@cornell.edu Status: new Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=116056 >
There are two problems with the build of PAR::Packer 1.033 on Cygwin: 1. The build fails with "undefined reference to `__stack_chk_fail'". This happens starting with version 1.030 due to the removal of the line $boot_ldflags .= $static_ldflags; from Makefile.PL. Adding that line back (see the attached boot_ldflags.patch) fixes the problem. 2. The method for detecting a 64-bit system in Makefile.PL, based on $Config{archname}, doesn't work on 64-bit Cygwin. Here we have the following: $ perl -e 'use Config; print $Config{archname}' cygwin-thread-multi $ perl -e 'use Config; print $Config{myuname}' cygwin_nt-6.3 cygwin 2.5.1(0.29753) 2016-04-21 22:14 x86_64 cygwin So PAR::Packer should use myuname on Cygwin instead of archname. See the attached x86_64_cygwin.patch. (This comes from a patch used by Yaakov Selkowitz, the Cygwin maintainer of PAR::Packer.) Ken
--- origsrc/PAR-Packer-1.033/myldr/Makefile.PL 2016-05-12 03:20:37.000000000 -0400 +++ src/PAR-Packer-1.033/myldr/Makefile.PL 2016-07-11 14:08:53.133669400 -0400 @@ -173,6 +173,7 @@ if ($dynperl) { $perllibshortname =~ s/\Q.$so\E$//; } $static_ldflags =~ s/(^|\s)-l$perllibshortname(\s|$)/ /g; +$boot_ldflags .= $static_ldflags; # In the $dynperl case, we've already found the $libperl DSO.
--- origsrc/PAR-Packer-1.033/myldr/Makefile.PL 2016-05-12 03:20:37.000000000 -0400 +++ src/PAR-Packer-1.033/myldr/Makefile.PL 2016-07-11 14:59:54.598986100 -0400 @@ -110,7 +110,8 @@ $res: $lddebug = ($debug or $^O eq 'darwin') ? '' : '-s '; $warn = $debug ? '-Wall -Wno-comments ' : ''; if ( $^O =~ /^(?:MSWin|cygwin)/ ) { - my $target = $Config{archname} =~ /x64/ ? 'pe-x86-64' : 'pe-i386'; + my $target = $Config{archname} =~ /x64/ || $Config{myuname} =~ /x86_64/ + ? 'pe-x86-64' : 'pe-i386'; $res = 'ppresource.coff'; # Note: On cygwin the command below will be processed by the # cygwin shell, so backslashes in pathnames might be a problem.