[Qt] Detect and force clean build when feature defines are added
authorvestbo@webkit.org <vestbo@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 16 Dec 2011 12:41:10 +0000 (12:41 +0000)
committervestbo@webkit.org <vestbo@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 16 Dec 2011 12:41:10 +0000 (12:41 +0000)
Reviewed by Ossy.

https://bugs.webkit.org/show_bug.cgi?id=74689

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@103058 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Tools/ChangeLog
Tools/Scripts/webkitdirs.pm

index f471ccc..ad4683c 100644 (file)
@@ -1,3 +1,13 @@
+2011-12-16  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
+
+        [Qt] Detect and force clean build when feature defines are added
+
+        Reviewed by Ossy.
+
+        https://bugs.webkit.org/show_bug.cgi?id=74689
+
+        * Scripts/webkitdirs.pm:
+
 2011-12-16  Kentaro Hara  <haraken@chromium.org>
 
         [Refactoring] Remove all global variables from prepare-ChangeLog
index 16dfb8c..591cda0 100755 (executable)
@@ -1905,46 +1905,55 @@ sub buildQMakeProject($@)
 
     my $needsCleanBuild = 0;
 
-    # Ease transition to new build layout
+    my $pathToDefinesCache = File::Spec->catfile($dir, ".webkit.config");
     my $pathToOldDefinesFile = File::Spec->catfile($dir, "defaults.txt");
+
+    # Ease transition to new build layout
     if (-e $pathToOldDefinesFile) {
         print "Old build layout detected";
         $needsCleanBuild = 1;
-    }
-
-    my $pathToDefinesCache = File::Spec->catfile($dir, ".webkit.config");
-    if ($needsCleanBuild || (-e $pathToDefinesCache && open(DEFAULTS, $pathToDefinesCache))) {
-        if (!$needsCleanBuild) {
-            while (<DEFAULTS>) {
-                if ($_ =~ m/(\S+?)=(\S+?)/gi) {
-                    if (! exists $defines{$1}) {
-                        print "Feature $1 was removed";
-                        $needsCleanBuild = 1;
-                        last;
-                    }
-
-                    if ($defines{$1} != $2) {
-                        print "Feature $1 has changed ($2 -> $defines{$1})";
-                        $needsCleanBuild = 1;
-                        last;
-                    }
-                }
+    } elsif (-e $pathToDefinesCache && open(DEFAULTS, $pathToDefinesCache)) {
+        my %previousDefines;
+        while (<DEFAULTS>) {
+            if ($_ =~ m/(\S+?)=(\S+?)/gi) {
+                $previousDefines{$1} = $2;
             }
-            close (DEFAULTS);
         }
+        close (DEFAULTS);
+
+        my @uniqueDefineNames = keys %{ +{ map { $_, 1 } (keys %defines, keys %previousDefines) } };
+        foreach my $define (@uniqueDefineNames) {
+            if (! exists $previousDefines{$define}) {
+                print "Feature $define added";
+                $needsCleanBuild = 1;
+                last;
+            }
+
+            if (! exists $defines{$define}) {
+                print "Feature $define removed";
+                $needsCleanBuild = 1;
+                last;
+            }
 
-        if ($needsCleanBuild) {
-            print ", clean build needed!\n";
-            # FIXME: This STDIN/STDOUT check does not work on the bots. Disable until it does.
-            # if (! -t STDIN || ( &promptUser("Would you like to clean the build directory?", "yes") eq "yes")) {
-                chdir $originalCwd;
-                File::Path::rmtree($dir);
-                File::Path::mkpath($dir);
-                chdir $dir or die "Failed to cd into " . $dir . "\n";
-            #}
+            if ($defines{$define} != $previousDefines{$define}) {
+                print "Feature $define changed ($previousDefines{$define} -> $defines{$define})";
+                $needsCleanBuild = 1;
+                last;
+            }
         }
     }
 
+    if ($needsCleanBuild) {
+        print ", clean build needed!\n";
+        # FIXME: This STDIN/STDOUT check does not work on the bots. Disable until it does.
+        # if (! -t STDIN || ( &promptUser("Would you like to clean the build directory?", "yes") eq "yes")) {
+            chdir $originalCwd;
+            File::Path::rmtree($dir);
+            File::Path::mkpath($dir);
+            chdir $dir or die "Failed to cd into " . $dir . "\n";
+        #}
+    }
+
     open(DEFAULTS, ">$pathToDefinesCache");
     print DEFAULTS "# These defines were set when building WebKit last time\n";
     foreach my $key (sort keys %defines) {