Reviewed by Maciej.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 12 Jun 2005 22:48:34 +0000 (22:48 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 12 Jun 2005 22:48:34 +0000 (22:48 +0000)
        Includes changes by Stuart Morgan as well as my own.

        * Scripts/build-dumprendertree: Call the new setConfiguration function, and use XcodeOptions instead of
        symrootXcodeOptions to set the -buildstyle option.
        * Scripts/build-webkit: Ditto. Also remove the old way of supporting Xcode 2.1 and the old --debug option.
        The new --development option does the same thing.
        * Scripts/run-safari: Ditto.
        * Scripts/run-webkit-tests: Ditto.
        * Scripts/update-webkit: Ditto.
        * Scripts/set-webkit-configuration: Added. Sets the default configuration to Development or Deployment.

        * Scripts/webkitdirs.pm: use FindBin to find the WebKit directory; works no matter what the current
        directory is when invoking a script. Add code to determine the Xcode version so we can do the right
        thing for 2.0 and 2.1. Change the productDir function to return the appropriate per-configuration
        product directory. Read the default configuration from a file, overridable by a passed-in command-line
        option.

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

WebKitTools/ChangeLog
WebKitTools/Scripts/build-dumprendertree
WebKitTools/Scripts/build-webkit
WebKitTools/Scripts/run-safari
WebKitTools/Scripts/run-webkit-tests
WebKitTools/Scripts/set-webkit-configuration [new file with mode: 0755]
WebKitTools/Scripts/update-webkit
WebKitTools/Scripts/webkitdirs.pm

index 2d15c796971bb3ae95cc5bdf15d843a61279e91b..f89cc0a22938dbb982062d207f60d46d345467fc 100644 (file)
@@ -1,3 +1,23 @@
+2005-06-12  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+        Includes changes by Stuart Morgan as well as my own.
+
+        * Scripts/build-dumprendertree: Call the new setConfiguration function, and use XcodeOptions instead of
+        symrootXcodeOptions to set the -buildstyle option.
+        * Scripts/build-webkit: Ditto. Also remove the old way of supporting Xcode 2.1 and the old --debug option.
+        The new --development option does the same thing.
+        * Scripts/run-safari: Ditto.
+        * Scripts/run-webkit-tests: Ditto.
+        * Scripts/update-webkit: Ditto.
+        * Scripts/set-webkit-configuration: Added. Sets the default configuration to Development or Deployment.
+
+        * Scripts/webkitdirs.pm: use FindBin to find the WebKit directory; works no matter what the current
+        directory is when invoking a script. Add code to determine the Xcode version so we can do the right
+        thing for 2.0 and 2.1. Change the productDir function to return the appropriate per-configuration
+        product directory. Read the default configuration from a file, overridable by a passed-in command-line
+        option.
+
 2005-06-11  Darin Adler  <darin@apple.com>
 
         * Scripts/cvs-create-patch: Improve handling of directories with mixed CVS roots by going into each directory
index b4d23ab19d5fd2cb198b0e4b919d202aadf773f8..de2fb1ef8f9a0e0fc11c0291542973c23512f02c 100755 (executable)
@@ -35,9 +35,9 @@ use FindBin;
 use lib $FindBin::Bin;
 use webkitdirs;
 
+setConfiguration();
 chdirWebKit();
-my $productDir = productDir();
 
 # Build
 chdir "WebKitTools/DumpRenderTree" or die;
-exit system "xcodebuild", symrootXcodeOptions(), "-buildstyle", "Deployment";
+exit system "xcodebuild", XcodeOptions();
index bed89087166a8bae9717ced1911e5c385b2aeddc..d6711a64e8ccec5a84c689a4bee2c781c8d5b282 100755 (executable)
 # Simplified build script for Web Kit Open Source Project.
 
 use strict;
-use Getopt::Long;
 use FindBin;
 use lib $FindBin::Bin;
 use webkitdirs;
 
-my $debug = 0;
-GetOptions("debug!" => \$debug);
-
-my $style = $debug ? "Development" : "Deployment";
+setConfiguration();
 
 chdirWebKit();
 my $productDir = productDir();
@@ -53,33 +49,28 @@ for my $dir (@projects, @otherDirs) {
 
 # Copy library and header from WebKitLibraries to a findable place in the product directory.
 my $srcLib = "WebKitLibraries/libWebKitSystemInterface.a";
-my $lib = "${productDir}/libWebKitSystemInterface.a";
+my $lib = "$productDir/libWebKitSystemInterface.a";
 if (!-e $lib || -M $lib > -M $srcLib) {
     print "Updating $lib\n";
     system "ditto", $srcLib, $lib;
     system "ranlib", $lib;
 }
 my $srcHeader = "WebKitLibraries/WebKitSystemInterface.h";
-my $header = "${productDir}/usr/local/include/WebKitSystemInterface.h";
+my $header = "$productDir/usr/local/include/WebKitSystemInterface.h";
 if (!-e $header || -M $header > -M $srcHeader) {
     print "Updating $header\n";
-    system "mkdir", "-p", "${productDir}/usr/local/include";
+    system "mkdir", "-p", "$productDir/usr/local/include";
     system "ditto", $srcHeader, $header;
 }
 
-# Make symlinks so Xcode 2.1 can find the WebKitLibraries files.
-`mkdir -p "${productDir}/${style}"`;
-`ln -fs "../usr" "${productDir}/${style}"`;
-`ln -fs "../libWebKitSystemInterface.a" "${productDir}/${style}"`;
-
 # Build, and abort if the build fails.
 for my $dir (@projects) {
     chdir $dir or die;
     my $result;
     if ($dir eq "JavaScriptCore") {
-        $result = system "xcodebuild", symrootXcodeOptions(), "-target", "All", "-buildstyle", $style;
+        $result = system "xcodebuild", XcodeOptions(), "-target", "All";
     } else {
-        $result = system "xcodebuild", symrootXcodeOptions(), "-buildstyle", $style;
+        $result = system "xcodebuild", XcodeOptions();
     }
     exit $result if $result;
     chdir ".." or die;
index d95d60c4fe8da39866d9fc4678b6d89822516356..a4ff275aeaeac83e90db1b092a674344081348ff 100755 (executable)
 # Simplified "run" script for Web Kit Open Source Project.
 
 use strict;
-use Getopt::Long;
 use FindBin;
 use lib $FindBin::Bin;
 use webkitdirs;
 
-my $debug = 0;
-GetOptions("debug!" => \$debug);
-
+setConfiguration();
 my $productDir = productDir();
 
 # Check to see that Safari is in the usual place.
 my $safariPath = "/Applications/Safari.app/Contents/MacOS/Safari";
-if (! -x $safariPath) {
-    die "Can't find executable at $safariPath.\n";
-}
+die "Can't find executable at $safariPath.\n" unless -x $safariPath;
 
-# Search for build products; first test Xcode 2.0 location, then Xcode 2.1 locations.
-# For Xcode 2.1, prefer Deployment if both directories are present.
-my @testDirs;
-if ($debug) {
-    @testDirs = ("$productDir", "$productDir/Deployment", "$productDir/Development");
-} else {
-    @testDirs = ("$productDir", "$productDir/Development", "$productDir/Deployment");
-}
-my $found = 0;
-for my $testDir (@testDirs) {
-    next if !-x "$testDir/JavaScriptCore.framework/Versions/A/JavaScriptCore";
-    next if !-x "$testDir/WebCore.framework/Versions/A/WebCore";
-    next if !-x "$testDir/WebKit.framework/Versions/A/WebKit";
-    $productDir = $testDir;
-    $found = 1;
-    last;
-}
-if (!$found) {
-    die "Could not locate frameworks.\n";
-}
+# Check to see that all the frameworks are built.
+checkFrameworks();
 
 # Set up DYLD_FRAMEWORK_PATH to point to the product directory.
 print "Start Safari with DYLD_FRAMEWORK_PATH set to point to built WebKit in $productDir.\n";
index 58d5b7f70adad49c006b3e17320081fd53e9b45d..826c1e8fa8847273e59cadbc73dffa007bba450c 100755 (executable)
@@ -50,13 +50,14 @@ use webkitdirs;
 chdirWebKit();
 my $productDir = productDir();
 
-my $result = system "WebKitTools/Scripts/build-dumprendertree";
+my $result = system "WebKitTools/Scripts/build-dumprendertree", @ARGV;
 exit $result if $result;
 
 my $tool = "$productDir/DumpRenderTree";
-
 die "can't find executable DumpRenderTree tool (looked in $productDir)\n" if !-x $tool;
 
+checkFrameworks();
+
 my $workingDir = `pwd`;
 chomp $workingDir;
 my $WebCoreDirectory = "$workingDir/WebCore";
@@ -69,24 +70,26 @@ $ENV{"DYLD_FRAMEWORK_PATH"} = $productDir;
 my @tests;
 
 my $findArguments = "\\( -name resources \\! -prune \\) -or -name '*.html' -or -name '*.xml' -or -name '*.xhtml'";
-if (@ARGV) {
-    for my $test (@ARGV) {
-        $test =~ s/^$testDirectory\///;
-        if ($test =~ /^\//) {
-            print "can't run test outside $testDirectory\n";
-        } elsif (-f "$testDirectory/$test") {
-            if ($test !~ /\.(html|xml|xhtml)$/) {
-                print "test $test does not have an .html extension\n";
-            } else {
-                push @tests, $test;
-            }
-        } elsif (-d "$testDirectory/$test") {
-            push @tests, map { chomp; s-^$testDirectory/--; $_; } `find -Ls $testDirectory/$test $findArguments`;
+my $foundTestName = 0;
+for my $test (@ARGV) {
+    next if $test =~ /^-/;
+    $foundTestName = 1;
+    $test =~ s/^$testDirectory\///;
+    if ($test =~ /^\//) {
+        print "can't run test outside $testDirectory\n";
+    } elsif (-f "$testDirectory/$test") {
+        if ($test !~ /\.(html|xml|xhtml)$/) {
+            print "test $test does not have an .html extension\n";
         } else {
-            print "test $test not found\n";
+            push @tests, $test;
         }
+    } elsif (-d "$testDirectory/$test") {
+        push @tests, map { chomp; s-^$testDirectory/--; $_; } `find -Ls $testDirectory/$test $findArguments`;
+    } else {
+        print "test $test not found\n";
     }
-} else {
+}
+if (!$foundTestName) {
     @tests = map { chomp; s-^$testDirectory/--; $_; } `find -Ls $testDirectory $findArguments`;
 }
 
diff --git a/WebKitTools/Scripts/set-webkit-configuration b/WebKitTools/Scripts/set-webkit-configuration
new file mode 100755 (executable)
index 0000000..dfae0fa
--- /dev/null
@@ -0,0 +1,41 @@
+#!/usr/bin/perl -w
+
+# Copyright (C) 2005 Apple Computer, Inc.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer. 
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution. 
+# 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+#     its contributors may be used to endorse or promote products derived
+#     from this software without specific prior written permission. 
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+use strict;
+use FindBin;
+use lib $FindBin::Bin;
+use webkitdirs;
+
+my $configuration = passedConfiguration();
+die "Please specify either --development or --deployment.\n" if !$configuration;
+
+my $baseProductDir = baseProductDir();
+system "mkdir", "-p", "$baseProductDir";
+open CONFIGURATION, ">", "$baseProductDir/Configuration" or die;
+print CONFIGURATION $configuration;
+close CONFIGURATION;
index 245a624e64f33d78f9dc4cdd1d72462630f9bd86..5876807112c9b74d18339bd44b374528713e4454 100755 (executable)
 # Update script for Web Kit Open Source Project.
 
 use strict;
-use FindBin;
-use lib $FindBin::Bin;
-use webkitdirs;
 
-# Read the CVS root out of one project that's guaranteed to already be checked out.
+# Read the CVS root out of one project that's guaranteed to already be checked out (this one).
 open ROOT, "WebKitTools/CVS/Root" or die;
 my $root = <ROOT>;
 chomp $root;
index 825c9d86906b393026297cb40236192f57022626..3892938ac04dc4dcb83c5dadaa6edb59dfedbb40 100644 (file)
 
 use strict;
 use warnings;
+use FindBin;
 
 BEGIN {
    use Exporter   ();
    our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
    $VERSION     = 1.00;
    @ISA         = qw(Exporter);
-   @EXPORT      = qw(&chdirWebKit &productDir &symrootXcodeOptions);
+   @EXPORT      = qw(&chdirWebKit &baseProductDir &productDir &XcodeOptions &passedConfiguration &setConfiguration &checkFrameworks);
    %EXPORT_TAGS = ( );
    @EXPORT_OK   = ();
 }
 
 our @EXPORT_OK;
 
-my $productDir;
-my @options;
+my $baseProductDir;
+my @baseProductDirOption;
+my $configuration;
+my $configurationProductDir;
+my $didChdirWebKit;
+my $XcodeVersion;
 
 # Check that we're in the right directory.
 sub chdirWebKit
 {
-    if (! -d "WebKitTools") {
-        if (-d "../WebKitTools") {
-            chdir ".." or die;
-        }
-        if (-d "../../WebKitTools") {
-            chdir "../.." or die;
-        }
-        if (! -d "WebKitTools") {
-            die "No WebKitTools directory found. Please run this script from the directory containing WebKitTools.\n";
-        }
-    }
+    return if $didChdirWebKit;
+    $didChdirWebKit = 1;
+    chdir "$FindBin::Bin/../.." or die;
+}
+
+sub determineXCodeVersion
+{
+    return if defined $XcodeVersion;
+    # Could use "xcodebuild -version" instead.
+    open VERSION, "defaults read /Developer/Applications/Xcode.app/Contents/Info CFBundleShortVersionString 2> /dev/null |" or die;
+    $XcodeVersion = <VERSION>;
+    close VERSION;
+    chomp $XcodeVersion;
 }
 
-# Check that an Xcode product directory is set, setting the SYMROOT environment variable
-# as a side effect in case it's not so that we will effectively have a temporary Xcode
-# product directory for xcodebuild commands called from the script.
-sub findProductDir
+sub determineBaseProductDir
 {
-    return if defined $productDir;
+    return if defined $baseProductDir;
     open PRODUCT, "defaults read com.apple.Xcode PBXProductDirectory 2> /dev/null |" or die;
-    $productDir = <PRODUCT>;
+    $baseProductDir = <PRODUCT>;
     close PRODUCT;
-    if ($productDir) {
-        chomp $productDir;
-        @options = ();
+    if ($baseProductDir) {
+        chomp $baseProductDir;
+        @baseProductDirOption = ();
+    } else {
+        chdirWebKit();
+        $baseProductDir = `pwd` . "/WebKitBuild";
+        @baseProductDirOption = ("SYMROOT=$baseProductDir");
+    }
+    $baseProductDir =~ s|^~/|$ENV{HOME}/|;
+}
+
+sub determineConfiguration
+{
+    return if defined $configuration;
+    determineBaseProductDir();
+    open CONFIGURATION, "$baseProductDir/Configuration" or die;
+    $configuration = <CONFIGURATION>;
+    close CONFIGURATION;
+    if ($configuration) {
+        chomp $configuration;
+    } else {
+        $configuration = "Deployment";
+    }
+}
+
+sub determineConfigurationProductDir
+{
+    determineConfiguration();
+    determineXCodeVersion();
+    if ($XcodeVersion eq "2.0") {
+        $configurationProductDir = $baseProductDir;
     } else {
-        $productDir = "$ENV{HOME}/WebKitBuild";
-        @options = ("SYMROOT=$productDir");
+        $configurationProductDir = "$baseProductDir/$configuration";
     }
-    $productDir =~ s|^~/|$ENV{HOME}/|;
 }
 
-# Get product directory.
+sub baseProductDir
+{
+    determineBaseProductDir();
+    return $baseProductDir;
+}
+
 sub productDir
 {
-    findProductDir();
-    return $productDir;
+    determineConfigurationProductDir();
+    return $configurationProductDir;
+}
+
+sub XcodeOptions
+{
+    determineBaseProductDir();
+    determineConfiguration();
+    return (@baseProductDirOption, "-buildstyle", $configuration);
+}
+
+sub passedConfiguration
+{
+    for my $opt (@ARGV) {
+        return "Development" if $opt =~ /^--devel/i;
+        return "Deployment" if $opt =~ /^--deploy/i;
+    }
+    return undef;
 }
 
-# Get SYMROOT options for Xcode.
-sub symrootXcodeOptions
+sub setConfiguration
 {
-    findProductDir();
-    return @options;
+    my $passed = passedConfiguration();
+    $configuration = $passed if $passed;
+}
+
+# Check to see that all the frameworks are built.
+sub checkFrameworks
+{
+    determineConfigurationProductDir();
+    for my $framework ("JavaScriptCore", "WebCore", "WebKit") {
+        my $path = "$configurationProductDir/$framework.framework/Versions/A/$framework";
+        die "Can't find built framework at \"$path\".\n" unless -x $path;
+    }
 }
 
 1;