$only_steps ||= "";
if ($only_steps =~ /\S/)
{
- %only_steps = map {$_ => 1} split(/\s+/,$only_steps);
+ %only_steps = map {$_ => 1} split(/(\s+|[:,])/,$only_steps);
}
# Currently only specifying a branch is actually used.
print scalar(localtime()),": buildfarm run for $animal:$branch starting\n"
if $verbose;
+# Allow commandline overrides of conf variables
+foreach my $arg ( @{$EximBuild::Options::overrides} )
+{
+ if (my ($key,$val) = split '=', $arg)
+ {
+ $EximBuild::conf{$key} = $val;
+ printf "Commandline override: '$key' = '%s'\n", $EximBuild::conf{$key}
+ if $verbose;
+ }
+}
+
if (ref($force_every) eq 'HASH')
{
$force_every = $force_every->{$branch} || $force_every->{default};
}
-my $config_opts = $EximBuild::conf{config_opts};
my $scm = new EximBuild::SCM \%EximBuild::conf;
my $buildport;
--test = short for --nosend --nostatus --verbose --force
--skip-steps=list = skip certain steps
--only-steps=list = only do certain steps, not allowed with skip-steps
+ lists can be comma, colon, or space separated
Default branch is HEAD. Usually only the --config option should be necessary.
sub display_features
{
+ return unless step_wanted('features');
my @out = `cd $exim
src/build-*/exim -C test/confs/0000 -bV `;
my $status = $? >>8;
./runtest \$WORKDIR/$exim/src/build-*/exim -CONTINUE $tests_range )2>&1`;
$status = $? >>8;
push @makeout, @tmp;
+ # Prepend the failed summary log outputs for ease of reading
+ my $fail_summary = "$exim/test/failed-summary.log";
+ if (-f $fail_summary)
+ {
+ @tmp = `cat $fail_summary`;
+ push @tmp, "\n";
+ unshift @makeout, @tmp;
+ unshift @makeout, "Summary of failed tests:\n";
+ }
}
writelog('test',\@makeout);
print "======== make test logs ===========\n",@makeout
sub configure
{
-
- my @quoted_opts;
- foreach my $c_opt (@$config_opts)
- {
- if ($c_opt =~ /['"]/)
- {
- push(@quoted_opts,$c_opt);
- }
- else
- {
- push(@quoted_opts,"'$c_opt'");
- }
- }
+ return unless step_wanted('configure');
+ print time_str(),"creating configuration ...\n" if $verbose;
my $env = $EximBuild::conf{makefile_set};
my $add = $EximBuild::conf{makefile_add};
- my $features = $EximBuild::conf{config_features};
+ my $features = $EximBuild::conf{makefile_regex};
my $envstr = "";
while (my ($key,$val) = each %$env)
push @confout, @tmp;
@tmp = `cd $exim && perl -pi -e 's/^EXIM_MONITOR=(.*)/# EXIM_MONITOR=\$1/' $local_conf`;
push @confout, @tmp;
- for my $feature ( @$features )
+ for my $regex ( @$features )
{
@tmp = `cd $exim
- perl -pi -e '$feature' $local_conf 2>&1
- echo "Changed feature: $feature" `;
+ perl -pi -e '$regex' $local_conf 2>&1
+ echo "Used regex: $regex" `;
push @confout, @tmp;
}
# Add the final build file to the display output
echo "Contents of Local/Makefile:"
egrep '^[^#]' $local_conf `;
push @confout, @tmp;
+ # Build the config_opts array to send to the server
+ chomp @tmp;
+ my @config_opts = grep s/(?:LOOKUP_|EXPERIMENTAL_|USE_)(\S+)=.*/$1/,
+ @tmp;
+ push @config_opts, grep s/^(?:EXIM_)(PERL|PYTHON)=.*/$1/,
+ @tmp;
+ # OpenSSL doesn't have a specific USE flag
+ push @config_opts, grep s/^(TLS_LIBS.*-l(ssl|crypto)).*/OPENSSL/,
+ @tmp;
+ $EximBuild::conf{config_opts} = \@config_opts;
+
# Does not matter what the Exim version is, as long as it is valid.
my $exim_ver = $EximBuild::conf{exim_test_version} || '4.82';
`cd $exim
orig_env => $orig_env,
};
delete $conf->{secret};
+ $Data::Dumper::Sortkeys = 1;
return Data::Dumper->Dump([$conf],['Script_Config']);
}