X-Git-Url: https://git.exim.org/buildfarm-client.git/blobdiff_plain/fa6f7a1774685967756ac8c98d668193e355c97d..5641ec156a90d5ca69907bafcd23c6cef2b03906:/run_build.pl diff --git a/run_build.pl b/run_build.pl index 18f4cbf..9e68d8d 100755 --- a/run_build.pl +++ b/run_build.pl @@ -313,7 +313,8 @@ foreach my $oldfile (glob("last*")) 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(); @@ -505,9 +506,11 @@ $steps_completed = ""; 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 = ""; @@ -553,11 +556,20 @@ elsif (!$from_source) 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 ($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; @@ -650,9 +662,9 @@ make(); 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'); @@ -755,9 +767,9 @@ sub check_optional_step &&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; @@ -816,6 +828,12 @@ sub display_features 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'; @@ -999,6 +1017,15 @@ sub make_test ./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 @@ -1133,11 +1160,15 @@ sub configure 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; - $EximBuild::conf{config_opts} = @config_opts; + # 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';