#! /usr/bin/perl -w use strict; $| = 1; # $Id: runsmoke.pl 809 2004-12-03 11:14:47Z abeltje $ use vars qw( $VERSION ); $VERSION = '0.002'; use Cwd; use File::Spec; use FindBin; use lib File::Spec->catdir( $FindBin::Bin, 'lib' ); use lib $FindBin::Bin; use Config; use Test::Smoke::Smoker; use Test::Smoke; use Test::Smoke::Util qw( calc_timeout do_pod2usage ); use Getopt::Long; my %opt = ( config => undef, ddir => undef, fdir => undef, run => undef, dry_run => undef, locale => undef, force_c_locale => undef, is56x => undef, defaultenv => undef, continue => undef, w32make => undef, w32cc => undef, v => undef, ); my $defaults = Test::Smoke::Smoker->config( 'all_defaults' ); =head1 NAME runsmoke.pl - Configure, build and test bleading edge perl =head1 SYNOPSIS $ ./runsmoke.pl [options] =head1 OPTIONS Most of the F switches are implemented for backward compatibility, but some had to go in faviour of the new regime of front-ends. =over 4 =item Configuration file --config|-c Use the settings from the configfile F can use the configuration file created by F. Other options can override the settings from the configuration file. If the config-filename is ommited B is assumed. =item Overridable options These options will also override the values in the configfile (if the C<--config> switch is used). --fdir|--forest|-f Set the basedir for forest --locale|-l Set the UTF-8 for special testrun --[no]force-c-locale Force (or not) $ENV{LC_ALL}="C" --[no]is56x This is (not) a perl 5.6.x smoke --[no]defaultenv This is (not) a non $ENV{PERLIO} smoke --ddir|-d Set the build directory --cfg --killtime|-k Set a killtime --verbose|-v <0..2> Verbose level =item Win32 options (overridable) --w32cc|--win32-cctype --w32make|--win32-maker =item General options --continue Try to continue an aborted smoke --[no]run --dry-run|-n dry run... --help|-h This message --man The full manpage =back =head1 DESCRIPTION F is the replacement script for F (which is now depricated and will not be maintained). =cut my $myusage = "Usage: $0 [options] "; GetOptions( \%opt, 'config|c:s', 'ddir|d=s', 'cfg=s', 'fdir|forest|f=s', 'locale|l=s', 'force_c_locale|force-c-locale!', 'defaultenv!', 'is56x!', 'killtime|k=s', 'w32make|win32-maker|m=s', 'w32cc|win32-cctype=s', 'dry_run|dry-run|n', 'run!', 'continue!', 'v|verbose=i', 'help|h', 'man', ) or do_pod2usage( verbose => 1, myusage => $myusage ); $opt{ man} and do_pod2usage( verbose => 2, exitval => 0, myusage => $myusage ); $opt{help} and do_pod2usage( verbose => 1, exitval => 0, myusage => $myusage ); if ( defined $opt{config} ) { $opt{config} eq "" and $opt{config} = 'smokecurrent_config'; read_config( $opt{config} ) or do { my $config_name = File::Spec->catfile( $FindBin::Bin, $opt{config} ); read_config( $config_name ); }; unless ( Test::Smoke->config_error ) { foreach my $option ( keys %opt ) { next if defined $opt{ $option }; if ( $option eq 'dry_run' ) { $opt{run} ||= ! $opt{dry_run}; } elsif ( exists $conf->{ $option } ) { $opt{ $option } ||= $conf->{ $option } } } } else { warn "WARNING: Could not process '$opt{config}': " . Test::Smoke->config_error . "\n"; } } $opt{cfg} = shift @ARGV if ! $opt{cfg} && @ARGV && -f $ARGV[0]; $opt{run} = 0 if $opt{dry_run}; foreach ( keys %$defaults ) { next if defined $opt{ $_ }; $opt{ $_ } = exists $conf->{ $_ } ? $conf->{ $_ } : $defaults->{ $_ }; } # transfer %opt to %$conf $conf->{ $_ } = $opt{ $_ } for keys %opt; @ARGV and push @{ $conf->{w32args} }, @ARGV; $conf->{ddir} and do { $conf->{v} and print "[$0] chdir($conf->{ddir})\n"; chdir $conf->{ddir} or die "Cannot chdir($conf->{ddir}): $!"; }; my $timeout = 0; if ( $Config{d_alarm} && $conf->{killtime} ) { $timeout = calc_timeout( $conf->{killtime} ); $conf->{v} and printf "Setup alarm: %s\n", scalar localtime( time() + $timeout ); } $timeout and local $SIG{ALRM} = sub { warn "This smoke is aborted ($conf->{killtime})\n"; exit; }; $Config{d_alarm} and alarm $timeout; run_smoke( $conf->{continue} ); =head1 SEE ALSO L, L =head1 COPYRIGHT (c) 2002-2003, All rights reserved. * Abe Timmerman This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See: =over 4 =item * L =item * L =back 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. =cut