Open hakonhagland opened 4 years ago
I am trying to install
Alien::GSL
on macOS Catalina 10.15 usingcpanm Alien::GSL
and it aborts with error:==> Found dependencies: ExtUtils::ParseXS --> Working on ExtUtils::ParseXS Fetching http://www.cpan.org/authors/id/S/SM/SMUELLER/ExtUtils-ParseXS-3.35.tar.gz ... OK Configuring ExtUtils-ParseXS-3.35 ... OK Building and testing ExtUtils-ParseXS-3.35 ... FAIL ! Installing ExtUtils::ParseXS failed. See /Users/hakonhaegland/.cpanm/work/1591973800.3440/build.log for details. Retry with --force to force install it. ! Installing the dependencies failed: Installed version (3.18) of ExtUtils::ParseXS is not in range '3.30' ! Bailing out the installation for Alien-Build-2.25.
I downloaded the
ExtUtils::ParseXS
distribution from metacpan:wget https://cpan.metacpan.org/authors/id/S/SM/SMUELLER/ExtUtils-ParseXS-3.35.tar.gz
and run
tar zxvf ExtUtils-ParseXS-3.35.tar.gz cd ExtUtils-ParseXS-3.35 perl Makefile.PL make make test
and observed that the first test
t/001-basic.t
failed. Reproduced below:perl -Mblib t/001-basic.t 1..17 ok 1 - require ExtUtils::ParseXS; ok 2 - Test that output contains some text ok 3 - Create an output file cc -iwithsysroot /System/Library/Perl/5.18/darwin-thread-multi-2level/CORE -c -arch x86_64 -g -pipe -fno-common -DPERL_DARWIN -fno-strict-aliasing -fstack-protector -Os -o XSTest.o XSTest.c ok 4 - ExtUtils::CBuilder::compile() returned true value ok 5 - Make sure XSTest.o exists env LD_RUN_PATH=/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE cc -arch x86_64 -bundle -undefined dynamic_lookup -fstack-protector -o XSTest.bundle XSTest.o ok 6 - ExtUtils::CBuilder::link() returned true value ok 7 - Make sure XSTest.bundle exists not ok 8 - No error message recorded, as expected # Failed test 'No error message recorded, as expected' # at t/001-basic.t line 61. # got: 'Can't load './XSTest.bundle' for module XSTest: dlopen(./XSTest.bundle, 1): no suitable image found. Did find: # file system relative paths not allowed in hardened programs at /System/Library/Perl/5.18/darwin-thread-multi-2level/DynaLoader.pm line 194. # at t/001-basic.t line 60. # Compilation failed in require at t/001-basic.t line 60. # ' # expected: '' Undefined subroutine &XSTest::is_even called at t/001-basic.t line 62. # Looks like you planned 17 tests but ran 8. # Looks like you failed 1 test of 8 run. # Looks like your test exited with 2 just after 8.
I'm a bit puzzled by your report. ExtUtils::ParseXS has been part of the Perl 5 core distribution since perl-5.8.9, so you shouldn't need to install it separately. For example, with a perlbrew
perl, I get this:
$ perlbrew use perl-5.18.4
$ perl -v | head -2 | tail -1
This is perl 5, version 18, subversion 4 (v5.18.4) built for x86_64-linux
$ perl -MExtUtils::ParseXS -E 'say $ExtUtils::ParseXS::VERSION'
3.18
Can you clarify?
Thank you very much. Jim Keenan
@jkeenan Yes you are right, I also have this:
$ perl -v | head -2 | tail -1
This is perl 5, version 18, subversion 4 (v5.18.4) built for darwin-thread-multi-2level
$ perl -MExtUtils::ParseXS -E 'say $ExtUtils::ParseXS::VERSION'
3.18
But notice that the version of ExtUtils::ParseXS
is only version 3.18, when I do cpanm Alien::Build
it requires at least version 3.30, see:
https://metacpan.org/source/PLICEASE/Alien-Build-2.25/META.json#L34
I think that is why cpanm
does not want to use the version that comes with the distribution.
'Can't load './XSTest.bundle' for module XSTest: dlopen(./XSTest.bundle, 1): no suitable image found.
Can this issue be related to macOS system integrity protection prevents programs in protected locations (like /usr) from calling a shared library that uses a relative reference to another shared library? See this answer for more information
I did some debugging to check more: If I create a new test file t/debug.t
based on the failed test file like this:
use strict;
use Config;
use DynaLoader;
use ExtUtils::CBuilder;
use ExtUtils::ParseXS;
use File::Spec;
my ($source_file, $obj_file, $lib_file);
chdir('t') if -d 't';
#push @INC, File::Spec->rel2abs('.');
push @INC, '.';
use Carp; $SIG{__WARN__} = \&Carp::cluck;
my $pxs = ExtUtils::ParseXS->new;
# Try sending to filehandle
$source_file = 'XSTest.c';
# Try sending to file
$pxs->process_file(filename => 'XSTest.xs', output => $source_file, prototypes => 0);
my $quiet = 0;
my $b = ExtUtils::CBuilder->new(quiet => $quiet);
die "no compiler available" if ! $b->have_compiler;
$obj_file = $b->compile( source => $source_file );
my $module = 'XSTest';
$lib_file = $b->link( objects => $obj_file, module_name => $module );
require XSTest;
and then edit t/XSTest.pm
to become:
package XSTest;
use feature qw(say);
use strict;
use warnings;
use Cwd qw(getcwd);
require DynaLoader;
our @ISA = qw(Exporter DynaLoader);
our $VERSION = '0.01';
$DynaLoader::dl_debug = 1;
bootstrap XSTest $VERSION;
1;
and now run
$ perl -Mblib t/debug.t
cc -iwithsysroot /System/Library/Perl/5.18/darwin-thread-multi-2level/CORE -c -arch x86_64 -g -pipe -fno-common -DPERL_DARWIN -fno-strict-aliasing -fstack-protector -Os -o XSTest.o XSTest.c
env LD_RUN_PATH=/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE cc -arch x86_64 -bundle -undefined dynamic_lookup -fstack-protector -o XSTest.bundle XSTest.o
DynaLoader::bootstrap for XSTest (auto/XSTest/XSTest.bundle)
dl_findfile(-L/Users/hakonhaegland/perl/ExtUtils-ParseXS-3.35/blib/arch -L/Users/hakonhaegland/perl/ExtUtils-ParseXS-3.35/blib/lib -L/Library/Perl/5.18/darwin-thread-multi-2level -L/Library/Perl/5.18 -L/Network/Library/Perl/5.18/darwin-thread-multi-2level -L/Network/Library/Perl/5.18 -L/Library/Perl/Updates/5.18.4/darwin-thread-multi-2level -L/Library/Perl/Updates/5.18.4 -L/System/Library/Perl/5.18/darwin-thread-multi-2level -L/System/Library/Perl/5.18 -L/System/Library/Perl/Extras/5.18/darwin-thread-multi-2level -L/System/Library/Perl/Extras/5.18 -L. -L. XSTest)
checking in /Users/hakonhaegland/perl/ExtUtils-ParseXS-3.35/blib/arch for XSTest.bundle
checking in /Users/hakonhaegland/perl/ExtUtils-ParseXS-3.35/blib/arch for XSTest.dylib
checking in /Users/hakonhaegland/perl/ExtUtils-ParseXS-3.35/blib/arch for libXSTest.dylib
checking in /Users/hakonhaegland/perl/ExtUtils-ParseXS-3.35/blib/arch for XSTest
checking in /Users/hakonhaegland/perl/ExtUtils-ParseXS-3.35/blib/lib for XSTest.bundle
checking in /Users/hakonhaegland/perl/ExtUtils-ParseXS-3.35/blib/lib for XSTest.dylib
checking in /Users/hakonhaegland/perl/ExtUtils-ParseXS-3.35/blib/lib for libXSTest.dylib
checking in /Users/hakonhaegland/perl/ExtUtils-ParseXS-3.35/blib/lib for XSTest
checking in /Library/Perl/5.18/darwin-thread-multi-2level for XSTest.bundle
checking in /Library/Perl/5.18/darwin-thread-multi-2level for XSTest.dylib
checking in /Library/Perl/5.18/darwin-thread-multi-2level for libXSTest.dylib
checking in /Library/Perl/5.18/darwin-thread-multi-2level for XSTest
checking in /Library/Perl/5.18 for XSTest.bundle
checking in /Library/Perl/5.18 for XSTest.dylib
checking in /Library/Perl/5.18 for libXSTest.dylib
checking in /Library/Perl/5.18 for XSTest
checking in /Library/Perl/Updates/5.18.4/darwin-thread-multi-2level for XSTest.bundle
checking in /Library/Perl/Updates/5.18.4/darwin-thread-multi-2level for XSTest.dylib
checking in /Library/Perl/Updates/5.18.4/darwin-thread-multi-2level for libXSTest.dylib
checking in /Library/Perl/Updates/5.18.4/darwin-thread-multi-2level for XSTest
checking in /Library/Perl/Updates/5.18.4 for XSTest.bundle
checking in /Library/Perl/Updates/5.18.4 for XSTest.dylib
checking in /Library/Perl/Updates/5.18.4 for libXSTest.dylib
checking in /Library/Perl/Updates/5.18.4 for XSTest
checking in /System/Library/Perl/5.18/darwin-thread-multi-2level for XSTest.bundle
checking in /System/Library/Perl/5.18/darwin-thread-multi-2level for XSTest.dylib
checking in /System/Library/Perl/5.18/darwin-thread-multi-2level for libXSTest.dylib
checking in /System/Library/Perl/5.18/darwin-thread-multi-2level for XSTest
checking in /System/Library/Perl/5.18 for XSTest.bundle
checking in /System/Library/Perl/5.18 for XSTest.dylib
checking in /System/Library/Perl/5.18 for libXSTest.dylib
checking in /System/Library/Perl/5.18 for XSTest
checking in /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level for XSTest.bundle
checking in /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level for XSTest.dylib
checking in /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level for libXSTest.dylib
checking in /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level for XSTest
checking in /System/Library/Perl/Extras/5.18 for XSTest.bundle
checking in /System/Library/Perl/Extras/5.18 for XSTest.dylib
checking in /System/Library/Perl/Extras/5.18 for libXSTest.dylib
checking in /System/Library/Perl/Extras/5.18 for XSTest
checking in . for XSTest.bundle
dl_findfile ignored non-existent directory: /Network/Library/Perl/5.18/darwin-thread-multi-2level
dl_findfile ignored non-existent directory: /Network/Library/Perl/5.18
dl_findfile found: ./XSTest.bundle
Can't load './XSTest.bundle' for module XSTest: dlopen(./XSTest.bundle, 1): no suitable image found. Did find:
file system relative paths not allowed in hardened programs at /System/Library/Perl/5.18/darwin-thread-multi-2level/DynaLoader.pm line 194.
at t/debug.t line 28.
Compilation failed in require at t/debug.t line 28.
Notice the line:
checking in . for XSTest.bundle
shows that it searches in the current directory and then
dl_findfile found: ./XSTest.bundle
it finds it, but then
Can't load './XSTest.bundle' for module XSTest: dlopen(./XSTest.bundle, 1): no suitable image found. Did find:
file system relative paths not allowed in hardened programs at /System/Library/Perl/5.18/darwin-thread-multi-2level/DynaLoader.pm line 194.
Something prevented it from loading it..
'Can't load './XSTest.bundle' for module XSTest: dlopen(./XSTest.bundle, 1): no suitable image found.
Can this issue be related to macOS system integrity protection prevents programs in protected locations (like /usr) from calling a shared library that uses a relative reference to another shared library? See this answer for more information
Quite possibly so -- but I don't currently have a Mac, so I've placed a distro-darwin
label on this report so that people with Mac are prompted to look at it.
Thank you very much. Jim Keenan
@haarg Yes #17863 works! Thanks a lot!
I am trying to install
Alien::GSL
on macOS Catalina 10.15 usingcpanm Alien::GSL
and it aborts with error:I downloaded the
ExtUtils::ParseXS
distribution from metacpan:and run
and observed that the first test
t/001-basic.t
failed. Reproduced below:Output from
perlbug -vd
:Module: ExtUtils::ParseXS
Perl configuration