webkitdirs.pm: Add setupMacWebKitEnvironment() to set __XPC_DYLD_FRAMEWORK_PATH consi...
authorddkilzer@apple.com <ddkilzer@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 19 May 2014 09:17:53 +0000 (09:17 +0000)
committerddkilzer@apple.com <ddkilzer@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 19 May 2014 09:17:53 +0000 (09:17 +0000)
<http://webkit.org/b/132954>

Reviewed by Darin Adler.

Extract code into setupMacWebKitEnvironment() for setting up
common environment variables so it may be shared.  Sets
__XPC_DYLD_FRAMEWORK_PATH consistently and adds support for
using guardmalloc to some scripts.

Also adds support for parsing shared (common) command-line
switches, initially just -g|--guard-malloc.

* Scripts/bisect-builds: Add -g|--guard-malloc support by using
sharedCommandLineOptions() and sharedCommandLineOptionsUsage().
(mountAndRunNightly): Call setupMacWebKitEnvironment().  Use a
local copy of %ENV when launching Safari so we don't have to
restore variables.

* Scripts/run-api-tests: Add -g|--guard-malloc support by using
sharedCommandLineOptions() and sharedCommandLineOptionsUsage().
Check result of GetOptions() to catch invalid command-line
switches.
(runTest): Use a local copy of %ENV when running tests so we
don't have to restore variables.
(prepareEnvironmentForRunningTestTool): Call
setupMacWebKitEnvironment().

* Scripts/run-pageloadtest: Add -g|--guard-malloc support by
using sharedCommandLineOptions() and
sharedCommandLineOptionsUsage().  Call
setupMacWebKitEnvironment().

* Scripts/webkitdirs.pm:
(sharedCommandLineOptions): Return array of common switches to
pass to Getopt::Long::GetOptions().
(sharedCommandLineOptionsUsage): Return formatted string of
common switches for printing usage help text.
(setUpGuardMallocIfNeeded): Support using '-g' for enabling
guardmalloc.
(printHelpAndExitForRunAndDebugWebKitAppIfNeeded): Ditto.
(setupMacWebKitEnvironment): Extracted from runMacWebKitApp()
and changed not to clobber DYLD_FRAMEWORK_PATH if already set.
(runMacWebKitApp): Call setupMacWebKitEnvironment().  Use a
local copy of %ENV when launching Safari so we don't have to
restore variables.
(execMacWebKitAppForDebugging): Call
setupMacWebKitEnvironment().

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

Tools/ChangeLog
Tools/Scripts/bisect-builds
Tools/Scripts/run-api-tests
Tools/Scripts/run-pageloadtest
Tools/Scripts/webkitdirs.pm

index ac485484a6f8b603c7fe71e7fde9e0bbf8666d02..7b636a8b78672320919e1d9c94dc876ce43d6421 100644 (file)
@@ -1,3 +1,54 @@
+2014-05-19  David Kilzer  <ddkilzer@apple.com>
+
+        webkitdirs.pm: Add setupMacWebKitEnvironment() to set __XPC_DYLD_FRAMEWORK_PATH consistently
+        <http://webkit.org/b/132954>
+
+        Reviewed by Darin Adler.
+
+        Extract code into setupMacWebKitEnvironment() for setting up
+        common environment variables so it may be shared.  Sets
+        __XPC_DYLD_FRAMEWORK_PATH consistently and adds support for
+        using guardmalloc to some scripts.
+
+        Also adds support for parsing shared (common) command-line
+        switches, initially just -g|--guard-malloc.
+
+        * Scripts/bisect-builds: Add -g|--guard-malloc support by using
+        sharedCommandLineOptions() and sharedCommandLineOptionsUsage().
+        (mountAndRunNightly): Call setupMacWebKitEnvironment().  Use a
+        local copy of %ENV when launching Safari so we don't have to
+        restore variables.
+
+        * Scripts/run-api-tests: Add -g|--guard-malloc support by using
+        sharedCommandLineOptions() and sharedCommandLineOptionsUsage().
+        Check result of GetOptions() to catch invalid command-line
+        switches.
+        (runTest): Use a local copy of %ENV when running tests so we
+        don't have to restore variables.
+        (prepareEnvironmentForRunningTestTool): Call
+        setupMacWebKitEnvironment().
+
+        * Scripts/run-pageloadtest: Add -g|--guard-malloc support by
+        using sharedCommandLineOptions() and
+        sharedCommandLineOptionsUsage().  Call
+        setupMacWebKitEnvironment().
+
+        * Scripts/webkitdirs.pm:
+        (sharedCommandLineOptions): Return array of common switches to
+        pass to Getopt::Long::GetOptions().
+        (sharedCommandLineOptionsUsage): Return formatted string of
+        common switches for printing usage help text.
+        (setUpGuardMallocIfNeeded): Support using '-g' for enabling
+        guardmalloc.
+        (printHelpAndExitForRunAndDebugWebKitAppIfNeeded): Ditto.
+        (setupMacWebKitEnvironment): Extracted from runMacWebKitApp()
+        and changed not to clobber DYLD_FRAMEWORK_PATH if already set.
+        (runMacWebKitApp): Call setupMacWebKitEnvironment().  Use a
+        local copy of %ENV when launching Safari so we don't have to
+        restore variables.
+        (execMacWebKitAppForDebugging): Call
+        setupMacWebKitEnvironment().
+
 2014-05-18  Rik Cabanier  <cabanier@adobe.com>
 
         support for navigator.hardwareConcurrency
index c77638c7aebf6a526c56a33edc99418b8434d236..1130b0012154b9c7bd4c190a6d681c19cdbb623d 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -w
 
-# Copyright (C) 2007, 2008, 2009, 2011, 2012, 2013 Apple Inc.  All rights reserved.
+# Copyright (C) 2007-2009, 2011-2014 Apple Inc.  All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
@@ -84,6 +84,7 @@ my $testURL;
 @ARGV = map { /^(-r)(.+)$/ ? ($1, $2) : $_ } @ARGV;
 
 my $result = GetOptions(
+    sharedCommandLineOptions(),
     "b|branch=s"             => \$branch,
     "d|download-directory=s" => \$nightlyDownloadDirectory,
     "h|help"                 => \$showHelp,
@@ -114,6 +115,7 @@ if (!$result || $showHelp || scalar(@ARGV) > 0) {
   [--safari-path path]           path to Safari application bundle (default: /Applications/Safari.app)
   [-s|--sanity-check]            verify both starting and ending revisions before bisecting
 END
+    print STDERR sharedCommandLineOptionsUsage(brackets => 1, indent => 2, switchWidth => 30);
     exit 1;
 }
 
@@ -405,7 +407,13 @@ sub mountAndRunNightly($$$$)
     }
 
     $tempFile ||= "";
-    `DYLD_FRAMEWORK_PATH=$frameworkPath WEBKIT_UNSET_DYLD_FRAMEWORK_PATH=YES $safari $tempFile`;
+
+    {
+        local %ENV = %ENV;
+        setupMacWebKitEnvironment($frameworkPath);
+
+        `$safari $tempFile`;
+    }
 
     `hdiutil detach '$mountPath' 2> $devNull`;
 }
index 91ba51e97e7e3952d70892fb6fa4094fc182a8dc..e10e682e01210ab072b372e7878f5a31c046f713 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -w
 
-# Copyright (C) 2010, 2011, 2012 Apple Inc. All rights reserved.
+# Copyright (C) 2010-2012, 2014 Apple Inc. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
@@ -65,7 +65,7 @@ Usage: $programName [options] [suite or test prefixes]
   -d|--dump-tests       Dump the names of testcases without running them
   --[no-]build          Build (or do not build) unit tests prior to running (default: $buildDefault)
   --root=               Path to the pre-built root containing TestWebKitAPI
-
+@{[ sharedCommandLineOptionsUsage(indent => 2, switchWidth => 21) ]}
 Examples
 
 The following command will run a single test:
@@ -76,7 +76,8 @@ The following command will run all tests in suites that begin with 'WebKit2':
 
 EOF
 
-GetOptions(
+my $getOptionsResult = GetOptions(
+    sharedCommandLineOptions(),
     'help' => \$showHelp,
     'verbose|v' => \$verbose,
     'dump|d' => \$dumpTests,
@@ -84,7 +85,7 @@ GetOptions(
     'root=s' => \$root
 );
 
-if ($showHelp) {
+if (!$getOptionsResult || $showHelp) {
    print STDERR $usage;
    exit 1;
 }
@@ -174,6 +175,7 @@ sub runTest($$$)
 
     die "run-api-tests is not supported on this platform.\n" unless isSupportedPlatform();
 
+    local %ENV = %ENV;
     prepareEnvironmentForRunningTestTool();
 
     local *DEVNULL;
@@ -335,8 +337,7 @@ sub prepareEnvironmentForRunningTestTool()
 {
     return unless isAppleMacWebKit();
 
-    $ENV{DYLD_FRAMEWORK_PATH} = productDir();
-    $ENV{WEBKIT_UNSET_DYLD_FRAMEWORK_PATH} = "YES";
+    setupMacWebKitEnvironment(productDir());
 }
 
 sub testToolPath()
index b2f07a27ff1d34d993b6b1f9dd3b7025a54eeee8..631c22b97ce56c53216222543459757d4ffab0d1 100755 (executable)
@@ -1,6 +1,7 @@
 #!/usr/bin/perl
 
 # Copyright (C) 2006 Eric Seidel (eric@webkit.org)
+# Copyright (C) 2014 Apple Inc. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
@@ -47,9 +48,13 @@ my $showHelp = 0;
 
 my $usage =
     "Usage: " . basename($0) . "[options] testName\n" .
-    "  --help                  Show this help message\n";
+    "  --help                  Show this help message\n" .
+    sharedCommandLineOptionsUsage(indent => 2, switchWidth => 23);
 
-my $getOptionsResult = GetOptions('help' => \$showHelp);
+my $getOptionsResult = GetOptions(
+    sharedCommandLineOptions(),
+   'help' => \$showHelp
+);
 
 if (!$getOptionsResult || $showHelp) {
     print STDERR $usage;
@@ -81,8 +86,7 @@ my $productDir = productDir();
 
 # Set up DYLD_FRAMEWORK_PATH to point to the product directory.
 print "Starting Safari with DYLD_FRAMEWORK_PATH set to point to built WebKit in $productDir.\n";
-$ENV{DYLD_FRAMEWORK_PATH} = $productDir;
-$ENV{WEBKIT_UNSET_DYLD_FRAMEWORK_PATH} = "YES";
+setupMacWebKitEnvironment($productDir);
 
 my @testCommands = ('activate');
 # Autovicki would clear history, we skip that here as this is likely an active user account
index d7097aadc7184a8eac232fbf9a9e64d52cdca293..f78b9bd116fd72e4da93e53ce0e81f5bd0981c4a 100755 (executable)
@@ -1,4 +1,4 @@
-# Copyright (C) 2005, 2006, 2007, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved.
+# Copyright (C) 2005-2007, 2010-2014 Apple Inc. All rights reserved.
 # Copyright (C) 2009 Google Inc. All rights reserved.
 # Copyright (C) 2011 Research In Motion Limited. All rights reserved.
 # Copyright (C) 2013 Nokia Corporation and/or its subsidiary(-ies).
@@ -39,6 +39,7 @@ use File::Basename;
 use File::Path qw(mkpath rmtree);
 use File::Spec;
 use File::stat;
+use List::Util;
 use POSIX;
 use VCSUtils;
 
@@ -65,6 +66,9 @@ BEGIN {
        &runMacWebKitApp
        &safariPath
        &setConfiguration
+       &setupMacWebKitEnvironment
+       &sharedCommandLineOptions
+       &sharedCommandLineOptionsUsage
        USE_OPEN_COMMAND
    );
    %EXPORT_TAGS = ( );
@@ -1287,6 +1291,34 @@ sub appendToEnvironmentVariableList
     }
 }
 
+sub sharedCommandLineOptions()
+{
+    return (
+        "g|guard-malloc" => \$shouldUseGuardMalloc,
+    );
+}
+
+sub sharedCommandLineOptionsUsage(+@)
+{
+    my %opts = @_;
+
+    my %switches = (
+        '-g|--guard-malloc' => 'Use guardmalloc when running executable',
+    );
+
+    my $indent = " " x ($opts{indent} || 2);
+    my $switchWidth = List::Util::max(int($opts{switchWidth}), List::Util::max(map { length($_) } keys %switches) + ($opts{brackets} ? 2 : 0));
+
+    my $result = "Common switches:\n";
+
+    for my $switch (keys %switches) {
+        my $switchName = $opts{brackets} ? "[" . $switch . "]" : $switch;
+        $result .= sprintf("%s%-" . $switchWidth . "s %s\n", $indent, $switchName, $switches{$switch});
+    }
+
+    return $result;
+}
+
 sub setUpGuardMallocIfNeeded
 {
     if (!isDarwin()) {
@@ -1294,7 +1326,7 @@ sub setUpGuardMallocIfNeeded
     }
 
     if (!defined($shouldUseGuardMalloc)) {
-        $shouldUseGuardMalloc = checkForArgumentAndRemoveFromARGV("--guard-malloc");
+        $shouldUseGuardMalloc = checkForArgumentAndRemoveFromARGV("-g") || checkForArgumentAndRemoveFromARGV("--guard-malloc");
     }
 
     if ($shouldUseGuardMalloc) {
@@ -1989,7 +2021,7 @@ sub printHelpAndExitForRunAndDebugWebKitAppIfNeeded
 Usage: @{[basename($0)]} [options] [args ...]
   --help                            Show this help message
   --no-saved-state                  Launch the application without state restoration (OS X 10.7 and later)
-  --guard-malloc                    Enable Guard Malloc (OS X only)
+  -g|--guard-malloc                 Enable Guard Malloc (OS X only)
   --use-web-process-xpc-service     Launch the Web Process as an XPC Service (OS X only)
 EOF
 
@@ -2018,16 +2050,27 @@ sub argumentsForRunAndDebugMacWebKitApp()
     return @args;
 }
 
+sub setupMacWebKitEnvironment($)
+{
+    my ($dyldFrameworkPath) = @_;
+
+    $dyldFrameworkPath = File::Spec->rel2abs($dyldFrameworkPath);
+
+    $ENV{DYLD_FRAMEWORK_PATH} = $ENV{DYLD_FRAMEWORK_PATH} ? join(":", $dyldFrameworkPath, $ENV{DYLD_FRAMEWORK_PATH}) : $dyldFrameworkPath;
+    $ENV{__XPC_DYLD_FRAMEWORK_PATH} = $dyldFrameworkPath;
+    $ENV{WEBKIT_UNSET_DYLD_FRAMEWORK_PATH} = "YES";
+
+    setUpGuardMallocIfNeeded();
+}
+
 sub runMacWebKitApp($;$)
 {
     my ($appPath, $useOpenCommand) = @_;
     my $productDir = productDir();
     print "Starting @{[basename($appPath)]} with DYLD_FRAMEWORK_PATH set to point to built WebKit in $productDir.\n";
-    $ENV{DYLD_FRAMEWORK_PATH} = $productDir;
-    $ENV{__XPC_DYLD_FRAMEWORK_PATH} = File::Spec->rel2abs($productDir);
-    $ENV{WEBKIT_UNSET_DYLD_FRAMEWORK_PATH} = "YES";
 
-    setUpGuardMallocIfNeeded();
+    local %ENV = %ENV;
+    setupMacWebKitEnvironment($productDir);
 
     if (defined($useOpenCommand) && $useOpenCommand == USE_OPEN_COMMAND) {
         return system("open", "-W", "-a", $appPath, "--args", argumentsForRunAndDebugMacWebKitApp());
@@ -2059,11 +2102,7 @@ sub execMacWebKitAppForDebugging($)
     die "Can't find the $debugger executable.\n" unless -x $debuggerPath;
 
     my $productDir = productDir();
-    $ENV{DYLD_FRAMEWORK_PATH} = $productDir;
-    $ENV{__XPC_DYLD_FRAMEWORK_PATH} = File::Spec->rel2abs($productDir);
-    $ENV{WEBKIT_UNSET_DYLD_FRAMEWORK_PATH} = "YES";
-
-    setUpGuardMallocIfNeeded();
+    setupMacWebKitEnvironment($productDir);
 
     my @architectureFlags = ($architectureSwitch, architecture());
     if (!shouldTargetWebProcess()) {