[rt.cpan.org #81375] chdir without cc

[email protected] ("Sisyphus via RT")
Newsgroups perl.inline
Message-ID <[email protected]>
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: [email protected]
      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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.