2007-03-13 Mark Rowe <mrowe@apple.com>
authorbdash <bdash@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 13 Mar 2007 09:21:41 +0000 (09:21 +0000)
committerbdash <bdash@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 13 Mar 2007 09:21:41 +0000 (09:21 +0000)
        Reviewed by Maciej.

        Have the nightly launcher prefer Safari found in /Applications or ~/Applications
        if present, otherwise fall back on using LaunchServices to locate it elsewhere
        on the system.  The motivation for this is to make the behaviour of the nightly
        builds more predictable on machines with multiple copies of Safari present.

        * WebKitLauncher/main.m:
        (locateSafariBundle):
        (main):

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

WebKitTools/ChangeLog
WebKitTools/WebKitLauncher/main.m

index 688bb15ade4784aa652de7a2adacbed1034e5481..80548fcc7699f27bd8180779e4379931bb2611b7 100644 (file)
@@ -1,3 +1,16 @@
+2007-03-13  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Maciej.
+
+        Have the nightly launcher prefer Safari found in /Applications or ~/Applications
+        if present, otherwise fall back on using LaunchServices to locate it elsewhere
+        on the system.  The motivation for this is to make the behaviour of the nightly
+        builds more predictable on machines with multiple copies of Safari present.
+
+        * WebKitLauncher/main.m:
+        (locateSafariBundle):
+        (main):
+
 2007-03-12  Darin Adler  <darin@apple.com>
 
         Reviewed by Tim Hatcher.
index 74598282a579a5e268dbbd58578ff2ff366dcd33..6d269284b2b55c9b661cb3ae94937367cc9c9a26 100644 (file)
@@ -108,18 +108,36 @@ static void myExecve(NSString *executable, NSArray *args, NSDictionary *environm
     execve([executable fileSystemRepresentation], argv, env);
 }
 
-int main(int argc, char *argv[])
+NSBundle *locateSafariBundle()
 {
-    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-    checkMacOSXVersion();
+    NSArray *applicationDirectories = NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSAllDomainsMask, YES);
+    NSEnumerator *e = [applicationDirectories objectEnumerator];
+    NSString *applicationDirectory;
+    while (applicationDirectory = [e nextObject]) {
+        NSString *possibleSafariPath = [applicationDirectory stringByAppendingPathComponent:@"Safari.app"];
+        NSBundle *possibleSafariBundle = [NSBundle bundleWithPath:possibleSafariPath];
+        if ([[possibleSafariBundle bundleIdentifier] isEqualToString:@"com.apple.Safari"])
+            return possibleSafariBundle;
+    }
 
     CFURLRef safariURL = nil;
     OSStatus err = LSFindApplicationForInfo(kLSUnknownCreator, CFSTR("com.apple.Safari"), nil, nil, &safariURL);
     if (err != noErr)
         displayErrorAndQuit(@"Unable to locate Safari", @"Nightly builds of WebKit require Safari to run.  Please check that it is available and then try again.");
 
+    NSBundle *safariBundle = [NSBundle bundleWithPath:[(NSURL *)safariURL path]];
+    CFRelease(safariURL);
+    return safariBundle;
+}
+
+int main(int argc, char *argv[])
+{
+    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+    checkMacOSXVersion();
+
+    NSBundle *safariBundle = locateSafariBundle();
+    NSString *executablePath = [safariBundle executablePath];
     NSString *frameworkPath = [[NSBundle mainBundle] resourcePath];
-    NSString *executablePath = [[NSBundle bundleWithPath:[(NSURL *)safariURL path]] executablePath];
     NSString *pathToEnablerLib = [[NSBundle mainBundle] pathForResource:@"WebKitNightlyEnabler" ofType:@"dylib"];
     
     NSMutableArray *arguments = [NSMutableArray arrayWithObjects:executablePath, @"-WebKitDeveloperExtras", @"YES", @"-WebKitScriptDebuggerEnabled", @"YES", nil];
@@ -133,7 +151,7 @@ int main(int argc, char *argv[])
     myExecve(executablePath, arguments, environment);
 
     char *error = strerror(errno);
-    NSString *errorMessage = [NSString stringWithFormat:@"Launching Safari at %@ failed with the error '%s' (%d)", [(NSURL *)safariURL path], error, errno];
+    NSString *errorMessage = [NSString stringWithFormat:@"Launching Safari at %@ failed with the error '%s' (%d)", [safariBundle bundlePath], error, errno];
     displayErrorAndQuit(@"Unable to launch Safari", errorMessage);
 
     [pool release];