Fri Jul 25 23:08:02 2014: Request 97519 was acted upon.
Transaction: Ticket created by Hugmeir
Queue: Module-ScanDeps
Subject: Fix for t/7-check-dynaloader.t on systems with
DynaLoader::mod2fname
Broken in: (no value)
Severity: (no value)
Owner: Nobody
Requestors: [email protected]
Status: new
Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=97519 >
Quick explanation: On some systems, DynaLoader defines mod2fname(), which is
used so that each library has a unique name. This is done because some systems
(like Windows, Android, and VMS) only the basename of a library is used by the
linker, which can lead to fairly catastrophic situations; consider Hash::Util
and List::Util -- both of which usually have a library called Util.so -- end up
getting the same library loaded, and mayhem occurs. With mod2fname around,
those two end up being called PL_Hash__Util.so and PL_List__Util.so, which is
far less likely to clash with anything.
The patch below modifies t/7-check-dynaloader.t so that it'll pass on perls
where mod2fname is defined.
diff --git a/t/7-check-dynaloader.t b/t/7-check-dynaloader.t
index fda0418..d77873a 100644
--- a/t/7-check-dynaloader.t
+++ b/t/7-check-dynaloader.t
@@ -26,7 +26,9 @@ foreach my $module (@dyna_mods)
{
# cf. XSLoader.pm
my @modparts = split(/::/,$module);
- my $modfname = $modparts[-1];
+ my $modfname = defined &DynaLoader::mod2fname
+ ? DynaLoader::mod2fname(\@modparts)
+ : $modparts[-1];
my $auto_path = join('/', 'auto', @modparts,
"$modfname.$Config::Config{dlext}");
check_bundle_path($module, $auto_path, ".pl", <<"...",