Fall back on ghc-stage2 when using Windows' GHCi driver
authorRyanGlScott <ryan.gl.scott@gmail.com>
Wed, 6 Jan 2016 22:10:54 +0000 (23:10 +0100)
committerBen Gamari <ben@smart-cactus.org>
Wed, 6 Jan 2016 22:11:35 +0000 (23:11 +0100)
Reviewers: austin, hvr, bgamari, thomie

Reviewed By: thomie

Differential Revision: https://phabricator.haskell.org/D1721

driver/ghci/ghci.c

index 414521f..f358d96 100644 (file)
@@ -3,6 +3,12 @@
 #include "getLocation.h"
 #include <stdio.h>
 #include <stdlib.h>
+#include <windows.h>
+
+BOOL fileExists(const char *path) {
+    const DWORD r = GetFileAttributesA(path);
+    return r != INVALID_FILE_ATTRIBUTES && !(r & FILE_ATTRIBUTE_DIRECTORY);
+}
 
 int main(int argc, char** argv) {
     char *binDir;
@@ -19,6 +25,13 @@ int main(int argc, char** argv) {
     exePath = mkString("%s/ghc.exe", binDir);
     preArgv[0] = "--interactive";
 
+    /* If ghc.exe can't be found, we assume that we're building ghc from
+     * source, in which case we fall back on ghc-stage2.
+     */
+    if (!fileExists(exePath)) {
+        exePath = mkString("%s/ghc-stage2.exe", binDir);
+    }
+
     run(exePath, 1, preArgv, argc - 1, argv + 1);
 }