Sat Nov 24 19:52:30 2012: Request 81375 was acted upon.
Transaction: Correspondence added by SISYPHUS
       Queue: Inline
     Subject: chdir without cc
   Broken in: 0.50
    Severity: Normal
       Owner: Nobody
  Requestors: bernhard+c...@lsmod.de
      Status: open
 Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=81375 >


On Sat Nov 24 07:56:37 2012, bmwiedemann wrote:

> I appended to your script:
> system("pwd");

[snip]

> 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


Reply via email to