12 my $can_fork = $Config{d_fork} ||
13 (($^O eq 'MSWin32' || $^O eq 'NetWare') and
14 $Config{useithreads} and
15 $Config{ccflags} =~ /-DPERL_IMPLICIT_SYS/
18 if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bIO\b/) {
19 $reason = 'IO extension unavailable';
24 elsif ($^O eq 'MSWin32' && !$ENV{TEST_IO_PIPE}) {
25 $reason = 'Win32 testing environment not set';
28 print "1..0 # Skip: $reason\n";
35 my $is_win32=$^O eq 'MSWin32' ? "MSWin32 has broken pipes" : "";
41 print "ok $_ # skipped: $is_win32\n" for 1..4;
43 $pipe = new IO::Pipe->reader($perl, '-e', 'print qq(not ok 1\n)');
48 $pipe->close or print "# \$!=$!\nnot ";
50 $cmd = 'BEGIN{$SIG{ALRM} = sub {print qq(not ok 4\n); exit}; alarm 10} s/not //';
51 $pipe = new IO::Pipe->writer($perl, '-pe', $cmd);
52 print $pipe "not ok 3\n" ;
53 $pipe->close or print "# \$!=$!\nnot ";
57 # Check if can fork with dynamic extensions (bug in CRT):
59 system "$^X -I../lib -MOpcode -e 'defined fork or die' > /dev/null 2>&1") {
60 print "ok $_ # skipped: broken fork\n" for 5..10;
79 $stdin = bless \*STDIN, "IO::Handle";
80 $stdin->fdopen($pipe,"r");
81 exec $^X, '-pne', 'tr/YX/ko/';
89 print "ok $_ # skipped: $is_win32\n" for 7..8;
108 $stdout = bless \*STDOUT, "IO::Handle";
109 $stdout->fdopen($pipe,"w");
110 print STDOUT "not ok 7\n";
112 if ( $^O =~ /android/ ) {
113 @echo = ('sh', '-c', q{echo $@}, '--');
115 exec @echo, 'not ok 8';
123 print "ok $_ # skipped: $is_win32\n" for 9;
125 $pipe = new IO::Pipe;
128 $SIG{'PIPE'} = 'broken_pipe';
134 print $pipe "not ok 9\n";