Skip to content

Commit

Permalink
fix and test execution of non-empty .bs files
Browse files Browse the repository at this point in the history
During the build of XS modules, an empty Foo.bs file is normally created
for each Foo.so file. If a Foo_BS file is present, instead this triggers
the auto-generatation of a .bs file which may have executable perl
content.

However, nothing in core currently generates a non-empty .bs file.  So add
a test that this mechanism works, and fix up the three dynamic lib loaders
which implement the 'do $bs if -s $bs' mechanism to not rely on the
process having '.' present in @inc.

As it happens this already works currently, because the name of the
.bs file to load will usually be something like

    ../../lib/auto/Foo/Foo.bs

and the presence of the leading '..' causes 'do' to load the file directly
rather than via @inc.  But locally fix up @inc anyway, in case '../' isn't
always the case.
  • Loading branch information
iabyn committed Apr 7, 2017
1 parent 24263f7 commit 2e6f1ae
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 4 deletions.
2 changes: 2 additions & 0 deletions MANIFEST
Expand Up @@ -4189,6 +4189,7 @@ ext/Win32CORE/Win32CORE.c Win32CORE extension
ext/Win32CORE/Win32CORE.pm Win32CORE extension (stubs for Win32 CORE subs)
ext/XS-APItest/APItest.pm XS::APItest extension
ext/XS-APItest/APItest.xs XS::APItest extension
ext/XS-APItest/APItest_BS autogenerate APItest.bs
ext/XS-APItest/core.c Test API functions when PERL_CORE is defined
ext/XS-APItest/core_or_not.inc Code common to core.c and notcore.c
ext/XS-APItest/exception.c XS::APItest extension
Expand All @@ -4203,6 +4204,7 @@ ext/XS-APItest/t/Block.pm Helper for ./blockhooks.t
ext/XS-APItest/t/blockasexpr.t test recursive descent block parsing
ext/XS-APItest/t/blockhooks.t XS::APItest: tests for PL_blockhooks
ext/XS-APItest/t/blockhooks-csc.t XS::APItest: more tests for PL_blockhooks
ext/XS-APItest/t/bootstrap.t XS::APItest: test APItest.bs
ext/XS-APItest/t/call.t Test calling perl from C
ext/XS-APItest/t/call_checker.t test call checker plugin API
ext/XS-APItest/t/caller.t XS::APItest: tests for caller_cx
Expand Down
4 changes: 2 additions & 2 deletions dist/XSLoader/XSLoader_pm.PL
Expand Up @@ -11,7 +11,7 @@ print OUT <<'EOT';
package XSLoader;
$VERSION = "0.26";
$VERSION = "0.27";
#use strict;
Expand Down Expand Up @@ -145,7 +145,7 @@ print OUT <<'EOT';
if (-s $bs) { # only read file if it's not empty
# print STDERR "BS: $bs ($^O, $dlsrc)\n" if $dl_debug;
eval { do $bs; };
eval { local @INC = ('.'); do $bs; };
warn "$bs: $@\n" if $@;
goto \&XSLoader::bootstrap_inherit;
}
Expand Down
4 changes: 2 additions & 2 deletions ext/DynaLoader/DynaLoader_pm.PL
Expand Up @@ -85,7 +85,7 @@ package DynaLoader;
# Tim.Bunce@ig.co.uk, August 1994

BEGIN {
$VERSION = '1.41';
$VERSION = '1.42';
}

EOT
Expand Down Expand Up @@ -373,7 +373,7 @@ sub bootstrap {
$bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library
if (-s $bs) { # only read file if it's not empty
print STDERR "BS: $bs ($^O, $dlsrc)\n" if $dl_debug;
eval { do $bs; };
eval { local @INC = ('.'); do $bs; };
warn "$bs: $@\n" if $@;
}

Expand Down
7 changes: 7 additions & 0 deletions ext/XS-APItest/APItest_BS
@@ -0,0 +1,7 @@
#
# test that non-empty .bs files get executed

$bscode = <<'EOF';
$::bs_file_got_executed = 1;
EOF

17 changes: 17 additions & 0 deletions ext/XS-APItest/t/bootstrap.t
@@ -0,0 +1,17 @@
#!perl -w
#
# check that .bs files are loaded and executed.
# During build of XS::APItest, the presence of APItest_BS should
# cause a non-empty APItest.bs file to auto-generated. When loading
# APItest.so, the .bs should be automatically executed, which should
# set $::bs_file_got_executed.

use strict;

use Test::More;
use XS::APItest;

is $::bs_file_got_executed, 1, "BS file was executed";

done_testing();

1 change: 1 addition & 0 deletions win32/ce-helpers/makedist.pl
Expand Up @@ -237,6 +237,7 @@ sub bootstrap {
my $bs = $file;
$bs =~ s/(\.\w+)?(;\d*)?$/\.bs/;
if (-s $bs) { # only read file if it's not empty
local @INC = ('.');
do $bs;
warn "$bs: $@\n" if $@;
}
Expand Down

0 comments on commit 2e6f1ae

Please sign in to comment.