# New Ticket Created by James Keenan
# Please include the string: [perl #53592]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=53592 >
Hmm, yet another config step class that appeared without an RT ...
In any case, here are some touch-ups to the code and some tests which
closely follow those for other recently added configuration step
classes.
kid51
Index: MANIFEST
===================================================================
--- MANIFEST (revision 27261)
+++ MANIFEST (working copy)
@@ -1,7 +1,7 @@
# ex: set ro:
# $Id$
#
-# generated by tools/dev/mk_manifest_and_skip.pl Wed Apr 30 20:45:06 2008 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Thu May 1 02:02:56 2008 UT
#
# See tools/dev/install_files.pl for documentation on the
# format of this file.
@@ -3494,6 +3494,9 @@
t/steps/auto_opengl-03.t []
t/steps/auto_ops-01.t []
t/steps/auto_pack-01.t []
+t/steps/auto_pcre-01.t []
+t/steps/auto_pcre-02.t []
+t/steps/auto_pcre-03.t []
t/steps/auto_perldoc-01.t []
t/steps/auto_perldoc-02.t []
t/steps/auto_pmc-01.t []
Index: t/steps/auto_pcre-02.t
===================================================================
--- t/steps/auto_pcre-02.t (revision 27261)
+++ t/steps/auto_pcre-02.t (working copy)
@@ -1,11 +1,11 @@
#! perl
# Copyright (C) 2007-2008, The Perl Foundation.
# $Id$
-# auto_pcre-01.t
+# auto_pcre-02.t
use strict;
use warnings;
-use Test::More tests => 13;
+use Test::More tests => 21;
use Carp;
use lib qw( lib );
use_ok('config::init::defaults');
@@ -16,7 +16,7 @@
my $args = process_options(
{
- argv => [ q{--without-pcre} ],
+ argv => [ ],
mode => q{configure},
}
);
@@ -36,35 +36,108 @@
$step = $step_name->new();
ok( defined $step, "$step_name constructor returned defined value" );
isa_ok( $step, $step_name );
-ok( $step->description(), "$step_name has description" );
-ok( $step->runstep($conf), "runstep() returned true value");
-is( $step->result(), 'no', "Got expected result" );
-is( $conf->data->get( 'has_pcre' ), 0,
- "Got expected value for 'has_pre'");
+# Mock values for OS and C-compiler
+my ($osname, $cc, $initial_value);
+$osname = 'mswin32';
+$cc = 'gcc';
+$initial_value = $conf->data->get( 'libs' );
+ok($step->_add_to_libs( {
+ conf => $conf,
+ osname => $osname,
+ cc => $cc,
+ win32_nongcc => 'pcre.lib',
+ default => '-lpcre',
+} ),
+ "_add_to_libs() returned true value");
+like($conf->data->get( 'libs' ), qr/-lpcre/,
+ "'libs' modified as expected");
+# Restore value for next test.
+$conf->data->set( 'libs' => $initial_value );
+
+$osname = 'mswin32';
+$cc = 'cc';
+$initial_value = $conf->data->get( 'libs' );
+ok($step->_add_to_libs( {
+ conf => $conf,
+ osname => $osname,
+ cc => $cc,
+ win32_nongcc => 'pcre.lib',
+ default => '-lpcre',
+} ),
+ "_add_to_libs() returned true value");
+like($conf->data->get( 'libs' ), qr/pcre\.lib/,
+ "'libs' modified as expected");
+# Restore value for next test.
+$conf->data->set( 'libs' => $initial_value );
+
+$osname = 'foobar';
+$cc = 'gcc';
+$initial_value = $conf->data->get( 'libs' );
+ok($step->_add_to_libs( {
+ conf => $conf,
+ osname => $osname,
+ cc => $cc,
+ win32_nongcc => 'pcre.lib',
+ default => '-lpcre',
+} ),
+ "_add_to_libs() returned true value");
+like($conf->data->get( 'libs' ), qr/-lpcre/,
+ "'libs' modified as expected");
+# Restore value for next test.
+$conf->data->set( 'libs' => $initial_value );
+
+# Mock different outcomes of _evaluate_cc_run
+my ($test, $has_pcre);
+my $verbose = $conf->options->get('verbose');
+
+$test = q{pcre foobar};
+ok(! $step->_evaluate_cc_run($test, $verbose),
+ "Got expected setting for has_pcre");
+
+$test = q{pcre 4.1};
+ok($step->_evaluate_cc_run($test, $verbose),
+ "_evaluate_cc_run returned true value as expected");
+is($step->result(), q{yes, v4.1}, "Got expected PCRE version");
+
+# Mock different outcomes of _recheck_settings()
+my ($libs, $ccflags, $linkflags);
+
+$libs = q{-lalpha};
+$ccflags = q{-Ibeta};
+$linkflags = q{-Lgamma};
+$verbose = undef;
+$step->_recheck_settings($conf, $libs, $ccflags, $linkflags, $verbose);
+like($conf->data->get('libs'), qr/$libs/,
+ "Got expected value for 'libs'");
+like($conf->data->get('ccflags'), qr/$ccflags/,
+ "Got expected value for 'ccflags'");
+like($conf->data->get('linkflags'), qr/$linkflags/,
+ "Got expected value for 'linkflags'");
+
pass("Completed all tests in $0");
################### DOCUMENTATION ###################
=head1 NAME
- auto_pcre-01.t - test config::auto::pcre
+ auto_pcre-02.t - test config::auto::pcre
=head1 SYNOPSIS
- % prove t/steps/auto_pcre-01.t
+ % prove t/steps/auto_pcre-02.t
=head1 DESCRIPTION
The files in this directory test functionality used by F<Configure.pl>.
-The tests in this file test configuration step class auto::pcre in the case
-where C<--without-pcre> has been requested on the command line.
+The tests in this file test internal subroutines of configuration step class
+auto::pcre in the 'normal' case.
=head1 AUTHOR
-Alberto SimÃes.
+James E Keenan
=head1 SEE ALSO
Index: t/steps/auto_pcre-03.t
===================================================================
--- t/steps/auto_pcre-03.t (revision 0)
+++ t/steps/auto_pcre-03.t (revision 0)
@@ -0,0 +1,116 @@
+#! perl
+# Copyright (C) 2007-2008, The Perl Foundation.
+# $Id$
+# auto_pcre-03.t
+
+use strict;
+use warnings;
+use Test::More tests => 16;
+use Carp;
+use lib qw( lib );
+use_ok('config::init::defaults');
+use_ok('config::auto::pcre');
+use Parrot::Configure;
+use Parrot::Configure::Options qw( process_options );
+use Parrot::Configure::Test qw( test_step_thru_runstep);
+use IO::CaptureOutput qw| capture |;
+
+my $args = process_options(
+ {
+ argv => [ q{--verbose} ],
+ mode => q{configure},
+ }
+);
+
+my $conf = Parrot::Configure->new;
+test_step_thru_runstep( $conf, q{init::defaults}, $args );
+
+my $pkg = q{auto::pcre};
+
+$conf->add_steps($pkg);
+$conf->options->set( %{$args} );
+
+my ( $task, $step_name, $step);
+$task = $conf->steps->[-1];
+$step_name = $task->step;
+
+$step = $step_name->new();
+ok( defined $step, "$step_name constructor returned defined value" );
+isa_ok( $step, $step_name );
+
+# Mock different outcomes of _evaluate_cc_run
+my ($test, $has_pcre);
+my $verbose = $conf->options->get('verbose');
+
+$test = q{pcre 4.0};
+{
+ my ($stdout, $stderr);
+ capture(
+ sub {
+ $has_pcre = $step->_evaluate_cc_run($test, $verbose);
+ },
+ \$stdout,
+ );
+ ok($has_pcre, "_evaluate_cc_run returned true value as expected");
+ is($step->result(), q{yes, v4.0}, "Got expected PCRE version");
+ like($stdout, qr/\(yes, 4\.0\)/, "Got expected verbose output");
+}
+
+# Mock different outcomes of _recheck_settings()
+my ($libs, $ccflags, $linkflags);
+
+$libs = q{-ldelta};
+$ccflags = q{-Iepsilon};
+$linkflags = q{-Lzeta};
+{
+ my ($stdout, $stderr);
+ capture(
+ sub { $step->_recheck_settings(
+ $conf, $libs, $ccflags, $linkflags, $verbose); },
+ \$stdout,
+ );
+ like($conf->data->get('libs'), qr/$libs/,
+ "Got expected value for 'libs'");
+ like($conf->data->get('ccflags'), qr/$ccflags/,
+ "Got expected value for 'ccflags'");
+ like($conf->data->get('linkflags'), qr/$linkflags/,
+ "Got expected value for 'linkflags'");
+ like($stdout, qr/\(no\)/, "Got expected verbose output");
+}
+
+pass("Completed all tests in $0");
+
+################### DOCUMENTATION ###################
+
+=head1 NAME
+
+ auto_pcre-03.t - test config::auto::pcre
+
+=head1 SYNOPSIS
+
+ % prove t/steps/auto_pcre-03.t
+
+=head1 DESCRIPTION
+
+The files in this directory test functionality used by F<Configure.pl>.
+
+The tests in this file test internal subroutines of configuration step class
+auto::pcre in the case where C<--verbose> output has been requested on the
+command line.
+
+=head1 AUTHOR
+
+James E Keenan
+
+=head1 SEE ALSO
+
+config::auto::pcre, F<Configure.pl>.
+
+=cut
+
+# Local Variables:
+# mode: cperl
+# cperl-indent-level: 4
+# fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:
Property changes on: t/steps/auto_pcre-03.t
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Index: config/auto/pcre.pm
===================================================================
--- config/auto/pcre.pm (revision 27261)
+++ config/auto/pcre.pm (working copy)
@@ -56,14 +56,12 @@
conf => $conf,
osname => $osname,
cc => $cc,
- win32_gcc => '-lpcre',
win32_nongcc => 'pcre.lib',
default => '-lpcre',
} );
# On OS X check the presence of the pcre headers in the standard
# Fink/macports locations.
- # Mindlessly morphed from readline ... may need to be fixed
$self->_handle_darwin_for_fink ($conf, $osname, 'pcre.h');
$self->_handle_darwin_for_macports($conf, $osname, 'pcre.h');
@@ -74,10 +72,7 @@
my $test = $conf->cc_run();
$has_pcre = $self->_evaluate_cc_run($test, $verbose);
}
- if ($has_pcre) {
- _handle_pcre($conf, $verbose);
- }
- else {
+ if (! $has_pcre) {
# The Parrot::Configure settings might have changed while class ran
$self->_recheck_settings($conf, $libs, $ccflags, $linkflags, $verbose);
}
@@ -91,22 +86,14 @@
my ($test, $verbose) = @_;
my $has_pcre = 0;
if ( $test =~ /pcre (\d+\.\d+)/ ) {
+ my $pcre_version = $1;
$has_pcre = 1;
- print " (yes, $1) " if $verbose;
- $self->set_result("yes, v$1");
+ print " (yes, $pcre_version) " if $verbose;
+ $self->set_result("yes, v$pcre_version");
}
return $has_pcre;
}
-sub _handle_pcre {
- my ($conf, $verbose) = @_;
-# $conf->data->add( ' ', ccflags => "-DHAS_PCRE" );
-# $verbose and print "\n ccflags: ", $conf->data->get("ccflags"), "\n";
- return 1;
-}
-
-
-
1;
# Local Variables: