develooper Front page | perl.perl5.porters | Postings from August 2009

Re: Win32, spaces and directories named t (was Re: Building from ext/ doesn't like VMS debug builds))

Thread Previous
From:
Craig A. Berry
Date:
August 29, 2009 07:49
Subject:
Re: Win32, spaces and directories named t (was Re: Building from ext/ doesn't like VMS debug builds))
Message ID:
c9ab31fc0908290749u7bd8d6csef695fad84c217a1@mail.gmail.com
On Sat, Aug 29, 2009 at 5:23 AM, Nicholas Clark<nick@ccl4.org> wrote:
> On Sat, Aug 29, 2009 at 07:39:20AM +0100, Nicholas Clark wrote:
>> There's a bit of context, and then it goes BOOM!
>>
>> On Fri, Aug 28, 2009 at 08:20:34PM +0100, Nicholas Clark wrote:
>
>> > I don't see why it won't work, so I've committed it as 1d8d82d3d8b73345e6276774
>
>
> I can replicate the exact failures for anything annotated "runperl" with this
> patch on OS X:
>
> --- a/t/test.pl
> +++ b/t/test.pl
> @@ -518,6 +518,8 @@ sub runperl {
>     my $runperl = &_create_runperl;
>     my $result;
>
> +return if $Perl =~ m!^/!;
> +
>     my $tainted = ${^TAINT};
>     my %args = @_;
>     exists $args{switches} && grep m/^-T$/, @{$args{switches}} and $tainted = $
>
> It's to do with paths that contain a directory 't' being made absolute on
> Win32. But I don't think that it's *all* cases of tests that spawn child
> perl programs.
>
>> On Sat, Aug 29, 2009 at 04:21:00AM +0100, Steve Hay wrote:
>> > Automated smoke report for 5.11.0 patch a2c4b2d6db383103b96e4733616b17d0a3bb0bd9 blead-1969-ga2c4b2d
>>
>> > Failures: (common-args) -DCCTYPE=MSVC90 -DINST_TOP=$(INST_DRV)\Smoke\doesntexist
>> > [default] -Duselargefiles
>> > [default] -DDEBUGGING -Duselargefiles
>> > [default] -Duselargefiles -Dusemymalloc
>> > [default] -DDEBUGGING -Duselargefiles -Dusemymalloc
>
>> > ../ext/B/t/concise.t........................................FAILED
>> >     2-5, 148-157
>
> uses runperl in t/test.pl
>
>> > ../ext/B/t/lint.t...........................................FAILED
>> >     1-29
>
> uses runperl in t/test.pl
>
>> > ../ext/B/t/o.t..............................................FAILED
>> >     2-5, 7-9
>
> uses runperl in t/test.pl
>
>> > ../ext/B/t/optree_check.t...................................FAILED
>> >     11-13
>
> uses runperl in t/test.pl (via ext/B/t/OptreeCheck.pm)
>
>> > ../ext/B/t/optree_concise.t.................................FAILED
>> >     12-14, 16
>
> uses runperl in t/test.pl (via ext/B/t/OptreeCheck.pm)
>
>> > ../ext/B/t/optree_constants.t...............................FAILED
>> >     27-28
> uses runperl in t/test.pl (via ext/B/t/OptreeCheck.pm)
>
>> > ../ext/B/t/optree_misc.t....................................FAILED
>> >     2
>
> uses runperl in t/test.pl (via ext/B/t/OptreeCheck.pm)
>
>> > ../ext/B/t/optree_samples.t.................................FAILED
>> >     11, 20
>
> uses runperl in t/test.pl (via ext/B/t/OptreeCheck.pm)
>
>> > ../ext/B/t/optree_sort.t....................................FAILED
>> >     3, 5, 7, 9
>
> uses runperl in t/test.pl (via ext/B/t/OptreeCheck.pm)
>
>> > ../ext/B/t/optree_specials.t................................FAILED
>> >     2-8
>
> uses runperl in t/test.pl (via ext/B/t/OptreeCheck.pm)
>
>> > ../ext/B/t/optree_varinit.t.................................FAILED
>> >     6-8, 13-15, 19-22
>
> uses runperl in t/test.pl (via ext/B/t/OptreeCheck.pm)
>
>> > ../ext/B/t/showlex.t........................................FAILED
>> >     2-3, 9-10
>
> uses runperl in t/test.pl (via ext/B/t/OptreeCheck.pm)
>
>> > ../ext/Devel-DProf/t/DProf.t................................FAILED
>> >     Bad plan.  You planned 20 tests but ran 0.
>
> Gets the perl to run from which_perl in t/test.pl
> But I can't see where things are going wrong.
>
>> > ../ext/Devel-PPPort/t/ppphtest.t............................FAILED
>> >     2-10, 12-15, 18-23, 27, 29-30, 32-40, 42-45
>> >     47-50, 55, 57-61, 63-64, 66-68, 70-71, 73-75
>> >     80-81, 83-85, 87, 89-94, 96, 98, 100-113
>> >     115-129, 131, 134, 136-138, 142-144, 147
>> >     149-158, 160-162, 164-182, 184-189, 191-209
>> >     211-214, 216-223, 225-226, 228-230, 232-234
>
> Seems to use a very similar logic to which_perl, but I can't actually work
> out where it is going wrong
>
>> > ../ext/IO-Compress/t/010examples-bzip2.t....................FAILED
>> >     2-4, 6-8, 10-12, 14-15, 17-19
>
> $Perl = qq["$Perl"] if $^O eq 'MSWin32' ;
>
>> > ../ext/IO-Compress/t/010examples-zlib.t.....................FAILED
>> >     2-4, 6-8, 10-12, 14-15, 17-19
>
> $Perl = qq["$Perl"] if $^O eq 'MSWin32' ;
>
>> > ../ext/IO-Compress/t/cz-05examples.t........................FAILED
>> >     2-4, 6-8, 10-12, 14-15, 17-19, 21-22, 24-26
>
> $Perl = qq["$Perl"] if $^O eq 'MSWin32' ;
>
>> > ../ext/Test-Harness/t/perl5lib.t............................FAILED
>> >     1
>
> sub has_crazy_patch {
>    my $sentinel = 'blirpzoffle';
>    local $ENV{PERL5LIB} = $sentinel;
>    my $command = join ' ',
>      map {qq{"$_"}} ( $^X, '-e', 'print join q(:), @INC' );
>    my $path = `$command`;
>    my @got = ( $path =~ /($sentinel)/g );
>    return @got > 1;
> }
>
> but that's to determine whether to skip, so I can't figure out why it
> takes out the entire test if it fails to execute the contents of the ``
> Is `` fatal on Win32 sometimes?
>
>> > ../ext/Test-Harness/t/process.t.............................FAILED
>> >     1-27
>
> TAP::Parser::Iterator::Process uses IPC::Open3::open3, which deep down is
> doing this:
>
>        $pid = eval { system 1, @_ }; # 1 == P_NOWAIT
>
> I can't work out why that is failing.
>
>> > ../ext/re/t/lexical_debug.t.................................FAILED
>> >     1, 3, 5, 7-10
>
> uses runperl in t/test.pl
>
>> > ../ext/re/t/regop.t.........................................FAILED
>> >     1, 3-19
>> >     Bad plan.  You planned 54 tests but ran 19.
>
> uses runperl in t/test.pl
>
>> I think that the connection is that all the failures spawn a new perl
>> But I'm not sure why they don't like spawning ../../t/perl when ../../perl
>> worked just fine. Something interpolating, where "\." is \ . but "\t" is
>> a tab character? But what has that sort of interpolation rule?
>>
>> Doesn't everything in Perl that interpolates "\t" to a tab also interpolate
>> "\." to a dot?
>
> and runperl calls this code:
>
>    my $runperl = which_perl();
>    if ($runperl =~ m/\s/) {
>        $runperl = qq{"$runperl"};
>    }
>
> which, I assume, means that we're passing something like this to the Win32
> command line:
>
> "C:\Path with Space\perl\t\perl" -le "print qq{Hello world}"
>
> Does it treat \t inside "" as something to interpolate to a tab character, but
> leave "unknown" escape sequences as 2 characters?

I don't think so; this works fine:

C:\>"C:\Documents and Settings\cberry\t\hello"

C:\>echo "Hello World"
"Hello World"

Just handwaving here, but maybe we have too much escaping rather than
too little, i.e., in the process of absolutifying the path, is there
anything that would turn "\t" into "\\t"?

Thread Previous


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About