Adjust how to clear a shell script env variable
[buildfarm-client.git] / run_build.pl
index fae95ba1cc965bfcae206bcfefae83f890e494dd..9e68d8d05a9cae8591af780380d07aa3d30e955c 100755 (executable)
@@ -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