summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Mitchell <davem@iabyn.com>2017-04-07 12:39:53 +0100
committerDavid Mitchell <davem@iabyn.com>2017-04-07 14:42:24 +0100
commit2e6f1ae9c4f7857e86f85fde07fe1af1254c4600 (patch)
tree3ba35a262ee061586a2b7a975194dc3f858d6568
parent24263f7d0899237e9133f040d7554d932e4cc397 (diff)
downloadperl-2e6f1ae9c4f7857e86f85fde07fe1af1254c4600.tar.gz
fix and test execution of non-empty .bs files
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.
-rw-r--r--MANIFEST2
-rw-r--r--dist/XSLoader/XSLoader_pm.PL4
-rw-r--r--ext/DynaLoader/DynaLoader_pm.PL4
-rw-r--r--ext/XS-APItest/APItest_BS7
-rw-r--r--ext/XS-APItest/t/bootstrap.t17
-rw-r--r--win32/ce-helpers/makedist.pl1
6 files changed, 31 insertions, 4 deletions
diff --git a/MANIFEST b/MANIFEST
index 185766cbb5..ebad534a42 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -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
@@ -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
diff --git a/dist/XSLoader/XSLoader_pm.PL b/dist/XSLoader/XSLoader_pm.PL
index ddf68f8818..8012e35e32 100644
--- a/dist/XSLoader/XSLoader_pm.PL
+++ b/dist/XSLoader/XSLoader_pm.PL
@@ -11,7 +11,7 @@ print OUT <<'EOT';
package XSLoader;
-$VERSION = "0.26";
+$VERSION = "0.27";
#use strict;
@@ -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;
}
diff --git a/ext/DynaLoader/DynaLoader_pm.PL b/ext/DynaLoader/DynaLoader_pm.PL
index 24c8bea36c..bd95625822 100644
--- a/ext/DynaLoader/DynaLoader_pm.PL
+++ b/ext/DynaLoader/DynaLoader_pm.PL
@@ -85,7 +85,7 @@ package DynaLoader;
# Tim.Bunce@ig.co.uk, August 1994
BEGIN {
- $VERSION = '1.41';
+ $VERSION = '1.42';
}
EOT
@@ -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 $@;
}
diff --git a/ext/XS-APItest/APItest_BS b/ext/XS-APItest/APItest_BS
new file mode 100644
index 0000000000..270dc9c682
--- /dev/null
+++ b/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
+
diff --git a/ext/XS-APItest/t/bootstrap.t b/ext/XS-APItest/t/bootstrap.t
new file mode 100644
index 0000000000..6992b10850
--- /dev/null
+++ b/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();
+
diff --git a/win32/ce-helpers/makedist.pl b/win32/ce-helpers/makedist.pl
index 2ad0f70c9f..daf4f3e96c 100644
--- a/win32/ce-helpers/makedist.pl
+++ b/win32/ce-helpers/makedist.pl
@@ -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 $@;
}