Make it easy to run Safari in the debugger on Windows
[WebKit-https.git] / WebKitTools / FindSafari / FindSafari.cpp
index 8580602ca4e57264ff92023cd9fecedf6d77cf8e..46e10a9fd841d0694f0035dc2b4aed39bd2021cb 100644 (file)
@@ -57,9 +57,7 @@ static TCHAR* getStringValue(HKEY key, LPCTSTR valueName)
 
 static LPOLESTR getWebViewCLSID()
 {
-    // FIXME <rdar://5505062>: Once WebKit switches to truly version-independent
-    // ProgIDs, this should just become "WebKit.WebView".
-    LPCTSTR webViewProgID = TEXT("WebKit.WebView.3");
+    LPCTSTR webViewProgID = TEXT("WebKit.WebView");
 
     CLSID clsid = CLSID_NULL;
     HRESULT hr = CLSIDFromProgID(webViewProgID, &clsid);
@@ -130,7 +128,59 @@ int _tmain(int argc, TCHAR* argv[])
         return 1;
     }
 
-    _tprintf(TEXT("%s"), path);
+    bool printLauncher = false;
+    bool debugger = false;
+
+    for (int i = 1; i < argc; ++i) {
+        if (!_tcscmp(argv[i], TEXT("/printSafariLauncher"))) {
+            printLauncher = true;
+            continue;
+        }
+        if (!_tcscmp(argv[i], TEXT("/debugger"))) {
+            debugger = true;
+            continue;
+        }
+    }
+
+    if (!printLauncher) {
+        _tprintf(TEXT("%s\n"), path);
+        free(path);
+        return 0;
+    }
+
+    LPCTSTR lines[] = {
+        TEXT("@echo off"),
+        TEXT("mkdir 2>NUL \"%%TMP%%\\WebKitNightly\\Safari.resources\""),
+        TEXT("xcopy /y /i /d \"%sSafari.exe\" \"%%TMP%%\\WebKitNightly\""),
+        TEXT("xcopy /y /i /d /e \"%sSafari.resources\" \"%%TMP%%\\WebKitNightly\\Safari.resources\""),
+        TEXT("set PATH=\"%%CD%%;%s;%%PATH%%\""),
+    };
+
+    LPCTSTR command = TEXT("\"%TMP%\\WebKitNightly\\Safari.exe\" /customWebKit");
+
+    LPCTSTR launchLines[] = {
+        TEXT("%s"),
+    };
+
+    LPCTSTR debuggerLines[] = {
+        TEXT("if exist \"%%DevEnvDir%%\\VCExpress.exe\" ("),
+        TEXT("\"%%DevEnvDir%%\\VCExpress.exe\" /debugExe %s"),
+        TEXT(") else ("),
+        TEXT("\"%%DevEnvDir%%\\devenv.exe\" /debugExe %s"),
+        TEXT(")"),
+    };
+
+    for (int i = 0; i < ARRAYSIZE(lines); ++i) {
+        _tprintf(lines[i], path);
+        _tprintf(TEXT("\n"));
+    }
+
+    LPCTSTR* endLines = debugger ? debuggerLines : launchLines;
+    for (unsigned i = 0; i < (debugger ? ARRAYSIZE(debuggerLines) : ARRAYSIZE(launchLines)); ++i) {
+        _tprintf(endLines[i], command);
+        _tprintf(TEXT("\n"));
+    }
+
     free(path);
     return 0;
 }