[PATCH 1/2] testbot/build: Always rebuild all the impacted test executables.

Francois Gouget fgouget at codeweavers.com
Tue Jun 12 04:52:13 CDT 2018


This means Build.pl no longer needs the PatchType and BaseName
parameters. But still keep support for them for compatibility with
WineRunBuild.pl.

Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---

Later on this will make it possible to reduce the number of build tasks 
(and associated reverts), and to have only one job per patch.

 testbot/bin/build/Build.pl | 104 +++++++++++++++++--------------------
 1 file changed, 48 insertions(+), 56 deletions(-)

diff --git a/testbot/bin/build/Build.pl b/testbot/bin/build/Build.pl
index 77bc9ca9d..a7ecb1f1c 100755
--- a/testbot/bin/build/Build.pl
+++ b/testbot/bin/build/Build.pl
@@ -6,6 +6,7 @@
 # resulting 32 and 64 bit binaries.
 #
 # Copyright 2009 Ge van Geldorp
+# Copyright 2012-2014, 2017-2018 Francois Gouget
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -83,7 +84,7 @@ sub ApplyPatch($)
   if ($? != 0)
   {
     LogMsg "Patch failed to apply\n";
-    return 0;
+    return undef;
   }
 
   my $Impacts = GetPatchImpact($PatchFile, "nounits");
@@ -96,7 +97,7 @@ sub ApplyPatch($)
     if ($? != 0)
     {
       LogMsg "make_makefiles failed\n";
-      return 0;
+      return undef;
     }
   }
 
@@ -109,11 +110,11 @@ sub ApplyPatch($)
     if ($? != 0)
     {
        LogMsg "Autoconf failed\n";
-       return 0;
+       return undef;
     }
   }
 
-  return 1;
+  return $Impacts;
 }
 
 my $ncpus;
@@ -136,57 +137,71 @@ sub BuildNative()
   system("( cd $DataDir/build-native && set -x && " .
          "  time make -j$ncpus __tooldeps__ " .
          ") >>$LogDir/Build.log 2>&1");
-
   if ($? != 0)
   {
-    LogMsg "Build native failed\n";
+    LogMsg "Rebuild of native tools failed\n";
     return !1;
   }
 
   return 1;
 }
 
-sub BuildTestExecutable($$$)
+sub BuildTestExecutables($$)
 {
-  my ($BaseName, $PatchType, $Bits) = @_;
+  my ($Impacts, $Bits) = @_;
 
-  my $TestsDir = "$PatchType/$BaseName/tests";
-  my $TestExecutable = "$TestsDir/$BaseName";
-  if ($PatchType eq "programs")
+  my (@BuildDirs, @TestExes);
+  foreach my $TestInfo (values %{$Impacts->{Tests}})
   {
-    $TestExecutable .= ".exe";
+    push @BuildDirs, $TestInfo->{Path};
+    my $TestExe = "$TestInfo->{Path}/$TestInfo->{ExeBase}.exe";
+    push @TestExes, $TestExe;
+    unlink("$DataDir/build-mingw$Bits/$TestExe"); # Ignore errors
   }
-  $TestExecutable .= "_test.exe";
-  unlink("$DataDir/build-mingw${Bits}/$TestExecutable");
 
-  InfoMsg "\nBuilding the $Bits-bit test executable\n";
+  InfoMsg "\nBuilding the $Bits-bit test executable(s)\n";
   system("( cd $DataDir/build-mingw$Bits && set -x && " .
-         "  time make -j$ncpus $TestsDir " .
+         "  time make -j$ncpus ". join(" ", sort @BuildDirs) .
          ") >>$LogDir/Build.log 2>&1");
   if ($? != 0)
   {
     LogMsg "Rebuild of $Bits-bit crossbuild failed\n";
     return !1;
   }
-  if (! -f "$DataDir/build-mingw${Bits}/$TestExecutable")
+
+  my $Success = 1;
+  foreach my $TestExe (@TestExes)
   {
-    LogMsg "Make didn't produce a $TestExecutable file\n";
-    return !1;
+    if (!-f "$DataDir/build-mingw$Bits/$TestExe")
+    {
+      LogMsg "Make didn't produce a $TestExe file\n";
+      $Success = undef;
+    }
   }
 
-  return 1;
+  return $Success;
 }
 
 $ENV{PATH} = "/usr/lib/ccache:/usr/bin:/bin";
 delete $ENV{ENV};
 
-# Start with clean logfile
+# Start with a clean logfile
 unlink("$LogDir/Build.log");
 
-my ($PatchFile, $PatchType, $BaseName, $BitIndicators) = @ARGV;
-if (! $PatchFile || ! $PatchType || ! $BaseName || !$BitIndicators)
+my ($PatchFile, $BitIndicators);
+if (@ARGV == 2)
 {
-  FatalError "Usage: Build.pl <patchfile> <patchtype> <basename> <bits>\n";
+  ($PatchFile, $BitIndicators) = @ARGV;
+}
+else
+{
+  # FIXME Remove support for the legacy parameters
+  my ($_PatchType, $_BaseName);
+  ($PatchFile, $_PatchType, $_BaseName, $BitIndicators) = @ARGV;
+}
+if (! $PatchFile || !$BitIndicators)
+{
+  FatalError "Usage: Build.pl <patchfile> <bits>\n";
 }
 
 # Untaint parameters
@@ -203,36 +218,16 @@ else
   FatalError "Invalid patch file $PatchFile\n";
 }
 
-if ($PatchType =~ m/^patch(dlls|programs)$/)
-{
-  $PatchType = $1;
-}
-else
-{
-  FatalError "Invalid patch type $PatchType\n";
-}
-
-if ($BaseName =~ m/^([\w_.\-]+)$/)
-{
-  $BaseName = $1;
-}
-else
-{
-  FatalError "Invalid DLL base name $BaseName\n";
-}
-
-my $Run32 = !1;
-my $Run64 = !1;
+my ($Run32, $Run64);
 if ($BitIndicators =~ m/^([\d,]+)$/)
 {
-  my @Bits = split /,/, $1;
-  foreach my $BitsValue (@Bits)
+  foreach my $BitsValue (split /,/, $1)
   {
-    if ($BitsValue == 32)
+    if ($BitsValue eq "32")
     {
       $Run32 = 1;
     }
-    elsif ($BitsValue == 64)
+    elsif ($BitsValue eq "64")
     {
       $Run64 = 1;
     }
@@ -241,7 +236,7 @@ if ($BitIndicators =~ m/^([\d,]+)$/)
       FatalError "Invalid number of bits $BitsValue\n";
     }
   }
-  if (! $Run32 && ! $Run64)
+  if (!$Run32 && !$Run64)
   {
     FatalError "Specify at least one of 32 or 64 bits\n";
   }
@@ -251,10 +246,8 @@ else
   FatalError "Invalid number of bits $BitIndicators\n";
 }
 
-if (!ApplyPatch($PatchFile))
-{
-  exit(1);
-}
+my $Impacts = ApplyPatch($PatchFile);
+exit(1) if (!$Impacts);
 
 CountCPUs();
 
@@ -262,12 +255,11 @@ if (!BuildNative())
 {
   exit(1);
 }
-
-if ($Run32 && ! BuildTestExecutable($BaseName, $PatchType, 32))
+if ($Run32 && !BuildTestExecutables($Impacts, 32))
 {
   exit(1);
 }
-if ($Run64 && ! BuildTestExecutable($BaseName, $PatchType, 64))
+if ($Run64 && !BuildTestExecutables($Impacts, 64))
 {
   exit(1);
 }
-- 
2.17.1




More information about the wine-devel mailing list