This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
fix ExtUtils-CBuilder tests for Perl 5.6
[perl5.git] / dist / ExtUtils-CBuilder / t / 00-have-compiler.t
index 581a214..5148412 100644 (file)
@@ -4,6 +4,7 @@ use File::Spec;
 my $perl;
 BEGIN {
   $perl = File::Spec->rel2abs($^X);
 my $perl;
 BEGIN {
   $perl = File::Spec->rel2abs($^X);
+  $perl = qq{"$perl"}; # So it doesn't fail when there are spaces.
 }
 
 use strict;
 }
 
 use strict;
@@ -23,25 +24,49 @@ require_ok "ExtUtils::CBuilder";
 my $b = eval { ExtUtils::CBuilder->new(quiet => 1) };
 ok( $b, "got CBuilder object" ) or diag $@;
 
 my $b = eval { ExtUtils::CBuilder->new(quiet => 1) };
 ok( $b, "got CBuilder object" ) or diag $@;
 
-my $bogus_path = 'djaadjfkadjkfajdf';
-my $run_perl = "$perl -e1 --";
 # test missing compiler
 # test missing compiler
-$b->{config}{cc} = $bogus_path;
-$b->{config}{ld} = $bogus_path;
+{
+
+    my $b1 = ExtUtils::CBuilder->new(quiet => 1);
+
+    configure_fake_missing_compilers($b1);
 
 
-$b->{have_cc} = undef;
-is( $b->have_compiler, 0, "have_compiler: fake missing cc" );
-$b->{have_cxx} = undef;
-is( $b->have_cplusplus, 0, "have_cplusplus: fake missing c++" );
+    # This will fork a child that will print
+    #    'Can't exec "djaadjfkadjkfajdf"'
+    # or similar on STDERR; so make sure fd2 is temporarily closed before
+    # the fork
+    open(OLDERR, ">&STDERR") or die "Can't dup STDERR: $!";
+    close(STDERR);
+    my $res = $b1->have_compiler;
+    open(STDERR, ">&OLDERR") or die "Can't restore STDERR: $!";
+    close(OLDERR);
+
+    is($res, 0, "have_compiler: fake missing cc" );
+}
+{
+    my $b2 = ExtUtils::CBuilder->new(quiet => 1);
+    configure_fake_missing_compilers($b2);
+
+    open(OLDERR, ">&STDERR") or die "Can't dup STDERR: $!";
+    close(STDERR);
+    my $res = $b2->have_cplusplus;
+    open(STDERR, ">&OLDERR") or die "Can't restore STDERR: $!";
+    close(OLDERR);
+
+    is($res, 0, "have_cplusplus: fake missing c++" );
+}
 
 # test found compiler
 
 # test found compiler
-$b->{config}{cc} = $run_perl;
-$b->{config}{ld} = $run_perl;
-$b->{config}{cxx} = $run_perl;
-$b->{have_cc} = undef;
-is( $b->have_compiler, 1, "have_compiler: fake present cc" );
-$b->{have_cxx} = undef;
-is( $b->have_cplusplus, 1, "have_cpp_compiler: fake present c++" );
+{
+my $b3 = ExtUtils::CBuilder->new(quiet => 1);
+configure_fake_present_compilers($b3);
+is( $b3->have_compiler, 1, "have_compiler: fake present cc" );
+}
+{
+my $b4 = ExtUtils::CBuilder->new(quiet => 1);
+configure_fake_present_compilers($b4);
+is( $b4->have_cplusplus, 1, "have_cpp_compiler: fake present c++" );
+}
 
 # test missing cpp compiler
 
 
 # test missing cpp compiler
 
@@ -55,3 +80,22 @@ is( $b->have_cplusplus, 1, "have_cpp_compiler: fake present c++" );
         pass( "OS type not yet listed for $^O" );
     }
 }
         pass( "OS type not yet listed for $^O" );
     }
 }
+
+sub configure_fake_missing_compilers {
+    my $b = shift;
+    my $bogus_path = 'djaadjfkadjkfajdf';
+    $b->{config}{cc} = $bogus_path;
+    $b->{config}{ld} = $bogus_path;
+    $b->{have_cc} = undef;
+    $b->{have_cxx} = undef;
+}
+
+sub configure_fake_present_compilers {
+    my $b = shift;
+    my $run_perl = "$perl -e1 --";
+    $b->{config}{cc} = $run_perl;
+    $b->{config}{ld} = $run_perl;
+    $b->{config}{cxx} = $run_perl;
+    $b->{have_cc} = undef;
+    $b->{have_cxx} = undef;
+}