++ed by:

1 PAUSE user
2 non-PAUSE users.

Author image Abe Timmerman


Test::Smoke::Smoker - OO interface to do one smoke cycle.


    use Test::Smoke;
    use Test::Smoke::Smoker;

    open LOGFILE, "> mktest.out" or die "Cannot create 'mktest.out': $!";
    my $buildcfg = Test::SmokeBuildCFG->new( $conf->{cfg} );
    my $policy = Test::Smoke::Policy->new( '../', $conf->{v} );
    my $smoker = Test::Smoke::Smoker->new( \*LOGFILE, $conf );

    foreach my $config ( $buildcfg->configurations ) {
        $smoker->smoke( $config, $policy );



Test::Smoke::Smoker->new( \*GLOB, %args )

new() takes a mandatory (opened) filehandle and some other options:

    ddir            build directory
    fdir            The forest source
    v               verbose level: 0..2
    defaultenv      'make test' without $ENV{PERLIO}
    is56x           skip the PerlIO stuff?
    locale          do another testrun with $ENV{LC_ALL}
    force_c_locale  set $ENV{LC_ALL} = 'C' for all smoke runs

    is_win32        is this MSWin32?
    w32cc           the CCTYPE for MSWin32 (MSVCxx BORLAND GCC)
    w32make         the maker to use for CCTYPE
Test::Smoke::Smoker->config( $key[, $value] )

config() is an interface to the package lexical %CONFIG, which holds all the default values for the new() arguments.

With the special key all_defaults this returns a reference to a hash holding all the default values.

$smoker->tty( $message )

Prints a message to the default filehandle.

$smoker->log( $message )

Prints a message to the logfile, filehandle.

$smoker->ttylog( $message )

Prints a message to both the default and the logfile filehandles.

$smoker->smoke( $config[, $policy] )

smoke() takes a Test::Smoke::BuildCFG::Config object and runs all the basic steps as (private) object methods.

$smoker->make_distclean( )

make_distclean() runs make -i distclean 2>/dev/null

$smoker->extra_manicheck( )

extra_manicheck() will only work for $self->{v} > 1 and does an extra integrity check comparing MANIFEST and the source-tree. Output is send to the tty.

$smoker->handle_policy( $policy, @substs );

handle_policy() will try to apply the substition rules and then write the file Policy.sh.

$smoker->Configure( $config )

Configure() sorts out the MSWin32 mess and calls ./Configure

returns true if a makefile was created

$smoker->make_( )

make_() will run make.

returns true if a perl executable is found

make_test_prep( )

Run make test-perp and check if t/perl exists.

$smoker->make_test( )
$self->extend_with_harness( @nok )

The VMS test-output is different from other platforms, but Test::Harness knows how to deal with it. On VMS we only run mmk test_harness and take the summary.

This might be useful for all platforms...

$self->make_minitest( $cfgargs )

make was unable to build a perl executable, but managed to build miniperl, so we do make minitest.

$self->_parse_harness_output( $\%notok, $all_ok, @lines )

Fator out the parsing of the Test::Harness output, as it seems subject to change.

$self->_trasnaform_testnames( @notok )

_transform_testnames() takes a list of testnames, as found by TEST (testname without .t suffix followed by dots and a reason) and returns a hash with the filenames relative to the t/ directory as keys and the reason as value.

$self->_run( $command[, $sub[, @args]] )

_run() returns qx( $command ) unless $sub is specified. If $sub is defined (and a coderef) $sub->( $command, @args ) will be called.

$self->_make( $command )

_make() calls run( "make $command" ), and does some extra stuff to help MSWin32 (the right maker, the directory).


This code sets up a rooted logical TSP5SRC and changes the {ddir} to that root.




(c) 2002-2003, All rights reserved.

  * Abe Timmerman <abeltje@cpan.org>

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.


  • http://www.perl.com/perl/misc/Artistic.html

  • http://www.gnu.org/copyleft/gpl.html

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.