On 2/2/06, Ingy dot Net <[EMAIL PROTECTED]> wrote:
> On 02/02/06 11:52 -0800, Eric Wilhelm wrote:
> > Hi all,
> >
> > Finally got this guess worked into a patch and test (attached.)
> >
> > Patrick:  does Inline::Java call fix_make() from Inline::C or do any
> > similar munging of the makefile?  If so, you would need to apply some
> > similar fixes.  The original entry point of the bug is in Inline.pm and
> > therefore applies to all inline-derived modules.  The test I wrote is
> > just for Inline::C.  Maybe Ingy can say how to write a
> > language-agnostic test.

Inline::Java does some of that stuff, but IIRC I did a pass a while to
plug File::Spec
everywhere and make sure that everything was quoted properly.

> >
> > Ingy:  do you have a repository for Inline.pm?  May I see it? :-)
>
> Eric, the repos is here, but I'm not sure of its current state. Best to just
> work with Inline-0.44.
>
>     http://svn.kwiki.org/ingy/Inline/
>
> Patrick, if this patch looks good to you, I'll apply and release it.

I'll take a look at it and apply it on my Inline.pm. I'll then test it
out with Inline::Java and I'll post my results soon.

Patrick


>
> Cheers, Ingy
>
> >
> > --Eric
> > --
> > Like a lot of people, I was mathematically abused as a child.
> > --Paul Graham
> > ---------------------------------------------------
> >     http://scratchcomputing.com
> > ---------------------------------------------------
>
> > === C.pm
> > ==================================================================
> > --- C.pm  (revision 6)
> > +++ C.pm  (revision 8)
> > @@ -800,7 +800,11 @@
> >       if (/^(\w+)\s*=\s*\S+.*$/ and
> >           $fix = $fixes{$1}
> >          ) {
> > -         print MAKEFILE "$1 = $o->{ILSM}{$fix}\n"
> > +              my $target = $1;
> > +              my $f = $o->{ILSM}{$fix};
> > +              ($fix =~ m/^install_/) and ($f = "'$f'");
> > +              print MAKEFILE "$target = $f\n"
> > +
> >       }
> >       else {
> >           print MAKEFILE;
> > === Inline.pm
> > ==================================================================
> > --- Inline.pm  (revision 6)
> > +++ Inline.pm  (revision 8)
> > @@ -740,13 +740,13 @@
> >          my($v,$d,$f) = File::Spec->splitpath($inline);
> >          $f = "" if $f eq 'Inline.pm';
> >          $inline = File::Spec->catpath($v,$d,$f);
> > -        my $INC = "-I$inline -I" .
> > -                  join(" -I", grep {(-d File::Spec->catdir($_,"Inline") or
> > +        my @inc = ("-I$inline", "-I" .
> > +                  map({"-I$_"} grep {(-d File::Spec->catdir($_,"Inline") or
> >                                       -d 
> > File::Spec->catdir($_,"auto","Inline")
> > -                                 )} @INC);
> > -     system "$perl $INC -MInline=_CONFIG_ -e1 $dir"
> > -       and croak M20_config_creation_failed($dir);
> > -     return;
> > +                                    )} @INC));
> > +        system($perl, @inc, qw(-MInline=_CONFIG_ -e1), $dir)
> > +          and croak M20_config_creation_failed($dir);
> > +        return;
> >      }
> >
> >      my ($lib, $mod, $register, %checked,
> > === 06spaces.t
> > ==================================================================
> > --- 06spaces.t  (revision 6)
> > +++ 06spaces.t  (revision 8)
> > @@ -0,0 +1,43 @@
> > +use File::Spec;
> > +use lib (File::Spec->catdir(File::Spec->updir(),'blib','lib'), 
> > File::Spec->catdir(File::Spec->curdir(),'blib','lib'));
> > +use strict;
> > +use Test;
> > +use diagnostics;
> > +
> > +BEGIN {
> > +    plan(tests => 2,
> > +     todo => [2],
> > +     onfail => sub {},
> > +    );
> > +    my $dir = "_Inline_test";
> > +    for(0..1) {
> > +        unless(-d $dir) {
> > +            mkdir($dir) or die "create $dir failed";
> > +        }
> > +        $dir .= "/inline dir";
> > +    }
> > +}
> > +
> > +# test 1 - make sure directories with spaces work
> > +BEGIN {
> > +    eval <<'END';
> > +    use Inline(C => "void foo(){}",
> > +           DIRECTORY => '_Inline_test/inline dir',
> > +          );
> > +END
> > +    ok((not $@));
> > +}
> > +
> > +# XXX maybe some more holes in that directories which don't exist but
> > +# contain spaces don't work?
> > +BEGIN {
> > +    eval <<'END';
> > +    use Inline(C => "void foo(){}",
> > +           DIRECTORY => '_Inline_test/inline dir/_Inline',
> > +          );
> > +END
> > +    ok(not $@);
> > +    # ok((not $@)) or warn $@;
> > +}
> > +
> > +
>
>


--
=====================
Patrick LeBoutillier
Laval, Québec, Canada

Reply via email to