# New Ticket Created by Sylvain Colinet # Please include the string: [perl #126645] # in the subject line of all future correspondence about this issue. # <URL: https://rt.perl.org/Ticket/Display.html?id=126645 >
Some distribution (debian) does not provide the libfoo.so symlink in the binary that provide a libfoo. In the case of debian it's provided by libfoo-dev. I was not able to find what was a standard behavior for the unversioned .so file But allowing to specify the api version could fix this so NC can find libfoo.so.apiversion Here a quick patch that make it work. It allows to write sub foo is native('libfoo:42') ...
diff --git a/lib/NativeCall.pm b/lib/NativeCall.pm index cc5d1d0..0702e17 100644 --- a/lib/NativeCall.pm +++ b/lib/NativeCall.pm @@ -162,7 +162,10 @@ sub guess_library_name($lib) { else { $libname = $lib; } - + my $apiversion = ''; + if ($libname.index(":")) { + ($libname, $apiversion) = $libname.split(':'); + } if !$libname.DEFINITE { '' } elsif $libname ~~ /\.<.alpha>+$/ { $libname } elsif $libname ~~ /\.so(\.<.digit>+)+$/ { $libname } @@ -175,14 +178,16 @@ sub guess_library_name($lib) { $libname ~ '.' ~ $*VM.config<nativecall.so> } } + # seem like this one is called for rakudo elsif $*VM.config<dll> :exists { my $ext = $*VM.config<dll>; $ext ~~ s/^.*\%s//; - "$libname$ext"; + "$libname$ext" unless $apiversion; + "$libname$ext.$apiversion" if $apiversion and !$*DISTRO.is-win; } elsif $*DISTRO.is-win { "{$libname}.dll"; } # TODO: more extension guessing - else { "{$libname}.so"; } + else { "{$libname}.so"} } my %lib;