Make build-webkit aware of additional Xcode build location defaults.
authormitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 24 Dec 2011 19:30:08 +0000 (19:30 +0000)
committermitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 24 Dec 2011 19:30:08 +0000 (19:30 +0000)
Reviewed by Anders Carlsson.

* Scripts/webkitdirs.pm:
(determineXcodeVersion): Added. This was previously in determineBaseProductDir().
(readXcodeUserDefault): Added. Factored out from determineBaseProductDir().
(determineBaseProductDir): Changed to check for a custom build location
style specified as an absolute location.

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

Tools/ChangeLog
Tools/Scripts/webkitdirs.pm

index 8d14bb9345ea1a77aa7edcddf7a9dd382102906c..072dbcd19949d60d9f5cde87daf687997e132a52 100644 (file)
@@ -1,3 +1,15 @@
+2011-12-24  Dan Bernstein  <mitz@apple.com>
+
+        Make build-webkit aware of additional Xcode build location defaults.
+
+        Reviewed by Anders Carlsson.
+
+        * Scripts/webkitdirs.pm:
+        (determineXcodeVersion): Added. This was previously in determineBaseProductDir().
+        (readXcodeUserDefault): Added. Factored out from determineBaseProductDir().
+        (determineBaseProductDir): Changed to check for a custom build location
+        style specified as an absolute location.
+
 2011-12-24  Ryosuke Niwa  <rniwa@webkit.org>
 
         Unreviewed, rolling out r103619.
index c3775f6fe322f520b4131578349a4ec9b625a9b7..5dfa20b130df8333bb489f7b26e82cdbf94793d2 100755 (executable)
@@ -98,6 +98,7 @@ my $isChromiumMacMake;
 my $forceChromiumUpdate;
 my $isInspectorFrontend;
 my $isWK2;
+my $xcodeVersion;
 
 # Variables for Win32 support
 my $vcBuildPath;
@@ -146,6 +147,30 @@ sub setSourceDir($)
     ($sourceDir) = @_;
 }
 
+sub determineXcodeVersion
+{
+    return if defined $xcodeVersion;
+    my $xcodebuildVersionOutput = `xcodebuild -version`;
+    $xcodeVersion = ($xcodebuildVersionOutput =~ /Xcode ([0-9](\.[0-9]+)*)/) ? $1 : "3.0";
+}
+
+sub readXcodeUserDefault($)
+{
+    my ($unprefixedKey) = @_;
+
+    determineXcodeVersion();
+
+    my $xcodeDefaultsDomain = (eval "v$xcodeVersion" lt v4) ? "com.apple.Xcode" : "com.apple.dt.Xcode";
+    my $xcodeDefaultsPrefix = (eval "v$xcodeVersion" lt v4) ? "PBX" : "IDE";
+    my $devnull = File::Spec->devnull();
+
+    my $value = `defaults read $xcodeDefaultsDomain ${xcodeDefaultsPrefix}${unprefixedKey} 2> ${devnull}`;
+    return if $?;
+
+    chomp $value;
+    return $value;
+}
+
 sub determineBaseProductDir
 {
     return if defined $baseProductDir;
@@ -164,16 +189,21 @@ sub determineBaseProductDir
             unlink($personalPlistFile) || die "Could not delete $personalPlistFile: $!";
         }
 
-        my $xcodebuildVersionOutput = `xcodebuild -version`;
-        my $xcodeVersion = ($xcodebuildVersionOutput =~ /Xcode ([0-9](\.[0-9]+)*)/) ? $1 : "3.0";
-        my $xcodeDefaultsDomain = (eval "v$xcodeVersion" lt v4) ? "com.apple.Xcode" : "com.apple.dt.Xcode";
-        my $xcodeDefaultsPrefix = (eval "v$xcodeVersion" lt v4) ? "PBX" : "IDE";
+        determineXcodeVersion();
 
-        open PRODUCT, "defaults read $xcodeDefaultsDomain ${xcodeDefaultsPrefix}ApplicationwideBuildSettings 2> " . File::Spec->devnull() . " |" or die;
-        $baseProductDir = join '', <PRODUCT>;
-        close PRODUCT;
+        if (eval "v$xcodeVersion" ge v4) {
+            my $buildLocationStyle = join '', readXcodeUserDefault("BuildLocationStyle");
+            if ($buildLocationStyle eq "Custom") {
+                my $buildLocationType = join '', readXcodeUserDefault("CustomBuildLocationType");
+                $baseProductDir = readXcodeUserDefault("CustomBuildProductsPath") if $buildLocationType eq "Absolute";
+            }
+        }
+
+        if (!defined($baseProductDir)) {
+            $baseProductDir = join '', readXcodeUserDefault("ApplicationwideBuildSettings");
+            $baseProductDir = $1 if $baseProductDir =~ /SYMROOT\s*=\s*\"(.*?)\";/s;
+        }
 
-        $baseProductDir = $1 if $baseProductDir =~ /SYMROOT\s*=\s*\"(.*?)\";/s;
         undef $baseProductDir unless $baseProductDir =~ /^\//;
     } elsif (isChromium()) {
         if (isLinux() || isChromiumAndroid() || isChromiumMacMake()) {