[svn:parrot] r41933 - in branches/auto_libjit: config/auto t/steps/auto

jkeenan at svn.parrot.org jkeenan at svn.parrot.org
Sun Oct 18 17:28:19 UTC 2009


Author: jkeenan
Date: Sun Oct 18 17:28:18 2009
New Revision: 41933
URL: https://trac.parrot.org/parrot/changeset/41933

Log:
Refactor some code into _handle_has_libjit() and write tests for it.  Reduce the number of points at which runstep() returns to facilitate good test coverage.

Modified:
   branches/auto_libjit/config/auto/libjit.pm
   branches/auto_libjit/t/steps/auto/libjit-01.t

Modified: branches/auto_libjit/config/auto/libjit.pm
==============================================================================
--- branches/auto_libjit/config/auto/libjit.pm	Sun Oct 18 16:49:56 2009	(r41932)
+++ branches/auto_libjit/config/auto/libjit.pm	Sun Oct 18 17:28:18 2009	(r41933)
@@ -38,54 +38,43 @@
                                     without-libjit
     });
 
+    my ($has_libjit, $extra_libs);
     if ($without) {
-        $conf->data->set( HAS_LIBJIT => 0 );
-        $self->set_result('no');
-        return 1;
-    }
-
-    my $extra_libs = $self->_select_lib( {
-        conf         => $conf,
-        osname       => $conf->data->get_p5('OSNAME'),
-        cc           => $conf->data->get('cc'),
-        win32_nongcc => 'libjit.lib',
-        default      => '-ljit',
-    } );
-    my $has_libjit = 0;
-
-    $conf->cc_gen('config/auto/libjit/libjit_c.in');
-    eval { $conf->cc_build('', $extra_libs) };
-    if ($@) {
-        print "cc_build() failed: $@\n" if $verbose;
-        $conf->data->set( HAS_LIBJIT => 0 );
-        $self->set_result('no');
-        return 1;
+        $has_libjit = 0;
     }
     else {
-        my $test;
-        eval { $test = $conf->cc_run(); };
+        $extra_libs = $self->_select_lib( {
+            conf         => $conf,
+            osname       => $conf->data->get_p5('OSNAME'),
+            cc           => $conf->data->get('cc'),
+            win32_nongcc => 'libjit.lib',
+            default      => '-ljit',
+        } );
+    
+        $conf->cc_gen('config/auto/libjit/libjit_c.in');
+        eval { $conf->cc_build('', $extra_libs) };
         if ($@) {
-            print "cc_run() failed: $@\n" if $verbose;
-            $conf->data->set( HAS_LIBJIT => 0 );
-            $self->set_result('no');
-            return 1;
+            print "cc_build() failed: $@\n" if $verbose;
+            $has_libjit = 0;
         }
         else {
-            $has_libjit = $self->_evaluate_cc_run($test, $has_libjit, $verbose);
+            my $test;
+            eval { $test = $conf->cc_run(); };
+            if ($@) {
+                print "cc_run() failed: $@\n" if $verbose;
+                $has_libjit = 0;
+            }
+            else {
+                $has_libjit =
+                    $self->_evaluate_cc_run($test, $has_libjit, $verbose);
+            }
         }
+        $conf->cc_clean();
     }
 
     $conf->data->set( HAS_LIBJIT => $has_libjit );
+    _handle_has_libjit($conf, $has_libjit, $extra_libs);
     $self->set_result( $has_libjit ? 'yes' : 'no' );
-    $conf->cc_clean();
-
-    if ($has_libjit) {
-        $conf->data->set(
-            cc_build_call_frames => '-DCAN_BUILD_CALL_FRAMES',
-            has_exec_protect => 1,
-        );
-        $conf->data->add( ' ', libs => $extra_libs );
-    }
 
     return 1;
 }
@@ -100,6 +89,17 @@
     return $has_libjit;
 }
 
+sub _handle_has_libjit {
+    my ($conf, $has_libjit, $extra_libs) = @_;
+    if ($has_libjit) {
+        $conf->data->set(
+            cc_build_call_frames => '-DCAN_BUILD_CALL_FRAMES',
+            has_exec_protect => 1,
+        );
+        $conf->data->add( ' ', libs => $extra_libs );
+    }
+}
+
 1;
 
 # Local Variables:

Modified: branches/auto_libjit/t/steps/auto/libjit-01.t
==============================================================================
--- branches/auto_libjit/t/steps/auto/libjit-01.t	Sun Oct 18 16:49:56 2009	(r41932)
+++ branches/auto_libjit/t/steps/auto/libjit-01.t	Sun Oct 18 17:28:18 2009	(r41933)
@@ -6,7 +6,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 28;
+use Test::More tests => 34;
 use lib qw( lib t/configure/testlib );
 use Parrot::Configure;
 use Parrot::Configure::Options 'process_options';
@@ -20,8 +20,6 @@
 use_ok('config::init::defaults');
 use_ok('config::auto::libjit');
 
-########## _select_lib() ##########
-
 my ($args, $step_list_ref) = process_options( {
         argv => [ q{--without-libjit} ],
         mode => 'configure',
@@ -103,6 +101,35 @@
     like( $stdout, qr/\(yes\)/, "Got expected verbose output" );
 }
 
+########## _handle_has_libjit() ##########
+
+my $extra_libs;
+
+$conf->data->set( 'cc_build_call_frames' => undef );
+$conf->data->set( 'has_exec_protect' => undef );
+$conf->data->set( 'libs' => '' );
+$has_libjit = 1;
+$extra_libs = 'mylibs';
+auto::libjit::_handle_has_libjit($conf, $has_libjit, $extra_libs);
+is( $conf->data->get( 'cc_build_call_frames' ), '-DCAN_BUILD_CALL_FRAMES',
+    "Got expected value for cc_build_call_frames" );
+ok( $conf->data->get( 'has_exec_protect' ), "has_exec_protect' set" );
+is( $conf->data->get( 'libs' ), " $extra_libs",
+    "Got expected value for libs" );
+
+$conf->data->set( 'cc_build_call_frames' => undef );
+$conf->data->set( 'has_exec_protect' => undef );
+$conf->data->set( 'libs' => '' );
+$has_libjit = 0;
+$extra_libs = 'mylibs';
+auto::libjit::_handle_has_libjit($conf, $has_libjit, $extra_libs);
+ok( ! defined($conf->data->get( 'cc_build_call_frames' )), 
+    "cc_build_call_frames undefined as expected" );
+ok( ! defined($conf->data->get( 'has_exec_protect' )),
+    "has_exec_protect' undefined" );
+is( $conf->data->get( 'libs' ), "",
+    "Got expected value for libs" );
+
 ################### DOCUMENTATION ###################
 
 =head1 NAME


More information about the parrot-commits mailing list