SysTools: Only apply Windows-specific workaround on Windows
authorBen Gamari <ben@smart-cactus.org>
Tue, 1 Oct 2019 20:23:27 +0000 (16:23 -0400)
committerMarge Bot <ben+marge-bot@smart-cactus.org>
Mon, 4 Nov 2019 08:40:31 +0000 (03:40 -0500)
Issue #1110 was apparently due to a bug in Vista which prevented GCC
from finding its binaries unless we explicitly added it to PATH.
However, this workaround was incorrectly applied on non-Windows
platforms as well, resulting in ill-formed PATHs (#17266).

Fixes #17266.

compiler/main/SysTools/Process.hs

index 2e0e502..7ad2cf2 100644 (file)
@@ -83,16 +83,22 @@ getGccEnv opts =
   if null b_dirs
      then return Nothing
      else do env <- getEnvironment
-             return (Just (map mangle_path env))
+             return (Just (mangle_paths env))
  where
   (b_dirs, _) = partitionWith get_b_opt opts
 
   get_b_opt (Option ('-':'B':dir)) = Left dir
   get_b_opt other = Right other
 
+  -- Work around #1110 on Windows only (lest we stumble into #17266).
+#if defined(mingw32_HOST_OS)
+  mangle_paths = map mangle_path
   mangle_path (path,paths) | map toUpper path == "PATH"
         = (path, '\"' : head b_dirs ++ "\";" ++ paths)
   mangle_path other = other
+#else
+  mangle_paths = id
+#endif
 
 
 -----------------------------------------------------------------------------