| Newsgroups |
perl.inline |
| Message-ID |
<[email protected]> |
Mon Nov 26 18:53:28 2012: Request 81375 was acted upon.
Transaction: Correspondence added by [email protected]
Queue: Inline
Subject: Re: [rt.cpan.org #81375] 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 >
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" <[email protected]> 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: [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
>
>
>