Mon Nov 26 18:53:28 2012: Request 81375 was acted upon. Transaction: Correspondence added by dcmertens.p...@gmail.com Queue: Inline Subject: Re: [rt.cpan.org #81375] 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 >
For the curious, a CPAN solution that handles this *very* nicely is p3rl.org/File::chdir David On Nov 24, 2012 6:52 PM, "Sisyphus via RT" <bug-inl...@rt.cpan.org> wrote: > 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 > > >