Skip to content

Commit

Permalink
XSConfig compatibility
Browse files Browse the repository at this point in the history
With XSConfig with p5p perl, or cperl, Test::Harness fails in
t/nofork-mux.t because of reliance on internal implementation of Config.pm.

Without using any external libraries or modules, fake not having fork by
putting a shim between the XS FETCH sub/method and the Config class that
traps and changes 'd_fork' key. Sample of error below that is fixed with
this patch.

C:\cpan\testharness>prove -v t/nofork-mux.t
t/nofork-mux.t .. Not a HASH reference at t/lib/NoFork.pm line 7.
Compilation failed in require at t/nofork-mux.t line 10.
BEGIN failed--compilation aborted at t/nofork-mux.t line 10.
Dubious, test returned 255 (wstat 65280, 0xff00)
No subtests run

Test Summary Report
-------------------
t/nofork-mux.t (Wstat: 65280 Tests: 0 Failed: 0)
  Non-zero exit status: 255
  Parse errors: No plan found in TAP output
Files=1, Tests=0,  0 wallclock secs ( 0.11 usr +  0.00 sys =  0.11 CPU)
Result: FAIL

Original author of this code is Reini Urban, in cperl commit
42cac300080de7d3a9df8eed040750ec9583de20 "Test-Harness: fix 2 tests"
on "Date: 9/28/2015 10:59:36 AM". The code was submitted upstream in Apr
2017 in Perl-Toolchain-Gang#63 but
that PR stalled. I've extracted the minimum code needed to get T::H to pass
with XSConfig with p5p perl and placed it in this patch so that the code
can be published sooner.
  • Loading branch information
bulk88 committed May 29, 2018
1 parent 0c59c50 commit 90886bd
Showing 1 changed file with 15 additions and 1 deletion.
16 changes: 15 additions & 1 deletion t/lib/NoFork.pm
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,21 @@ BEGIN {
*CORE::GLOBAL::fork = sub { die "you should not fork" };
}
use Config;
tied(%Config)->{d_fork} = 0; # blatant lie
if ($Config::Config{d_fork}) {
if (exists &Config::KEYS) { # compiled Config
*Config_FETCHorig = \&Config::FETCH;
no warnings 'redefine';
*Config::FETCH = sub {
if ($_[0] and $_[1] eq 'd_fork') {
return 0;
} else {
return Config_FETCHorig(@_);
}
}
} else {
tied(%Config)->{d_fork} = 0; # uncompiled Config
}
}

=begin TEST
Expand Down

0 comments on commit 90886bd

Please sign in to comment.