On Sat Nov 24 07:56:37 2012, bmwiedemann wrote:
Show quoted text> I appended to your script:
> system("pwd");
[snip]
Show quoted text> Using Pure Perl Implementation
> 42
> /home/bernhard/temp/_Inline/build/testc_pl_b91d
>
> and it showed that it changed the current dir for the perl process
Yes, this could be fixed from within the script I provided as follows:
#################################
use strict;
use warnings;
use Cwd;
my $cwd = getcwd();
eval {
require Inline; Inline->import (C => Config =>
#CC => 'bogus', # Easy way to make the build fail
BUILD_NOISY => 1);
require Inline; Inline->import (C =><<' EOC');
int foo() {
warn("Using Inline\n");
return 42;
}
EOC
};
# If Inline is unavailable, foo() simply calls
# the sub bar() pure perl implementation.
if($@) {
chdir $cwd or warn "Couldn't chdir to $cwd";
*foo =\&bar;
}
sub bar {
warn("Using Pure Perl Implementation\n");
return 42;
}
my $x = foo();
print "$x\n";
print $cwd, "\n";
#################################
(I've used Cwd::getcwd instead of the pwd system call because pwd is not
available on all systems.)
However, I think (not yet fully tested) this can also be fixed quite
simply from within C.pm by rewriting sub compile as:
#################################
sub compile {
my $o = shift;
my $build_dir = $o->{API}{build_dir};
my $cwd = &cwd;
($cwd) = $cwd =~ /(.*)/ if $o->UNTAINT;
chdir $build_dir;
eval {
$o->call('makefile_pl', '"perl Makefile.PL"', 2);
$o->call('make', '"make"', 2);
$o->call('make_install', '"make install"', 2);
};
chdir $cwd;
die if $@;
$o->call('cleanup', 'Cleaning Up', 2);
}
#################################
So I'll go with that changed version of C.pm's sub compile unless, in
the course of more thorough testing, I discover a problem with it.
If it tests ok for me, I'll release an Inline-0.51_03 that contains the
fix in a day or two.
Thanks for the report !
Cheers,
Rob