$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.
$force_every = $force_every->{$branch} || $force_every->{default};
}
-my $config_opts = $EximBuild::conf{config_opts};
my $scm = new EximBuild::SCM \%EximBuild::conf;
my $buildport;
my $branch_root = getcwd();
-# make sure we are using GNU make
+# Normally we would require GNU Make, but allow farm
+# configuration to override this
die "$make is not GNU Make - please fix config file"
unless check_make();
my @changed_files;
my @changed_since_success;
+my $last_config;
my $last_status;
my $last_run_snap;
my $last_success_snap;
+my $current_config;
my $current_snap;
my @filtered_files;
my $savescmlog = "";
unlink "last.success";
# get the timestamp data
+ $last_config = find_last('config') || 0;
$last_status = find_last('status') || 0;
$last_run_snap = find_last('run.snap');
$last_success_snap = find_last('success.snap');
$forcerun = 1 unless (defined($last_run_snap));
+ # If config file changed, force a rebuild
+ ($current_config) = (stat $orig_dir.'/'.$buildconf)[9];
+ if (defined $current_config && $current_config > $last_config)
+ {
+ $last_status = 0;
+ set_last('config',$current_config) unless $nostatus;
+ }
+
# updated by find_changed to last mtime of any file in the repo
$current_snap=0;
display_features();
-make_test() if (check_optional_step('make_test'));
+make_test() if (check_optional_step('test'));
-make_doc() if (check_optional_step('build_docs'));
+make_doc() if (check_optional_step('make-doc'));
##check_port_is_ok($buildport,'Post');
--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.
&&grep {$_ eq $wday} @{$oconf->{dow}});
my $last_step = $last_status = find_last("$step") || 0;
-
- return undef unless ($forcerun ||
- time >$last_step + (3600 * $oconf->{min_hours_since}));
+ ## If made it *to* these optional steps, we just run them and reset last time
+ #return undef unless ($forcerun ||
+ # time >$last_step + (3600 * $oconf->{min_hours_since}));
set_last("$step") unless $nostatus;
return 1;
sub check_make
{
+ # Allow farm member to configure non-GNU make
+ my $non_gnu_make = $EximBuild::conf{non_gnu_make};
+ if (!defined $non_gnu_make ||
+ (defined $non_gnu_make && $non_gnu_make == 1)) {
+ return 'OK';
+ }
my @out = `$make -v 2>&1`;
return undef unless ($? == 0 && grep {/GNU Make/} @out);
return 'OK';
./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)
@tmp = `echo "Build Farm user info:"; id $me
cd $exim && perl -pi -e 's/^# CONFIGURE_OWNER=\$/CONFIGURE_OWNER=$me/' $local_conf`;
push @confout, @tmp;
- @tmp = `cd $exim && perl -pi -e 's/^# TRUSTED_CONFIG_LIST=/TRUSTED_CONFIG_LIST=/' $local_conf`;
+ my $testdir = `cd $exim && /bin/pwd`; chomp $testdir; $testdir .= "/test";
+ my $trcf = "$testdir/trusted-configs";
+ my $tecf = "$testdir/test-config";
+ @tmp = `cd $exim && perl -pi -e "s%^# TRUSTED_CONFIG_LIST=.*%TRUSTED_CONFIG_LIST=$trcf%" $local_conf`;
push @confout, @tmp;
@tmp = `cd $exim && perl -pi -e 's/^# WHITELIST_D_MACROS=.*/WHITELIST_D_MACROS=DIR:EXIM_PATH:AA:ACL:ACLRCPT:ACL_MAIL:ACL_PREDATA:ACL_RCPT:AFFIX:ALLOW:ARG1:ARG2:AUTHF:AUTHS:AUTH_ID_DOMAIN:BAD:BANNER:BB:BR:BRB:CERT:COM:COMMAND_USER:CONNECTCOND:CONTROL:CREQCIP:CREQMAC:CRL:CSS:D6:DATA:DCF:DDF:DEFAULTDWC:DELAY:DETAILS:DRATELIMIT:DYNAMIC_OPTION:ELI:ERROR_DETAILS:ERT:FAKE:FALLBACK:FILTER:FILTER_PREPEND_HOME:FORBID:FORBID_SMTP_CODE:FUSER:HAI:HAP:HARDLIMIT:HEADER_LINE_MAXSIZE:HEADER_MAXSIZE:HELO_MSG:HL:HOSTS:HOSTS_AVOID_TLS:HOSTS_MAX_TRY:HVH:IFACE:IGNORE_QUOTA:INC:INSERT:IP1:IP2:LAST:LDAPSERVERS:LENCHECK:LIMIT:LIST:LOG_SELECTOR:LS:MAXNM:MESSAGE_LOGS:MSIZE:NOTDAEMON:ONCE:ONLY:OPT:OPTION:ORDER:PAH:PEX:PORT:PTBC:QDG:QOLL:QUOTA:QUOTA_FILECOUNT:QWM:RCPT_MSG:REMEMBER:REQUIRE:RETRY:RETRY1:RETRY2:RETURN:RETURN_ERROR_DETAILS:REWRITE:ROUTE_DATA:RRATELIMIT:RT:S:SELECTOR:SELF:SERVER:SERVERS:SREQCIP:SREQMAC:SRV:STD:STRICT:SUB:SUBMISSION_OPTIONS:TIMEOUTDEFER:TIMES:TRUSTED:TRYCLEAR:UL:USE_SENDER:UTF8:VALUE:WMF:X:Y/' $local_conf`;
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
echo 'EXIM_RELEASE_VERSION="$exim_ver"' > src/src/version.sh
echo 'EXIM_VARIANT_VERSION=""' >> src/src/version.sh
echo 'EXIM_COMPILE_NUMBER="0"' >> src/src/version.sh`;
+
+ # Create a trusted-configs list file
+ @tmp = `cd $exim && echo "$tecf" > "$trcf"`;
+ push @confout, @tmp;
}
print "======== configure output ===========\n",@confout