[project @ 2004-11-14 09:59:48 by krasimir]
authorkrasimir <unknown>
Sun, 14 Nov 2004 09:59:48 +0000 (09:59 +0000)
committerkrasimir <unknown>
Sun, 14 Nov 2004 09:59:48 +0000 (09:59 +0000)
Use findExecutable from Compat.Directory instead of its own findBinary.
Now the tool works under Windows as well as under Linux.
With cygwin we can use #!runghc ...

ghc/utils/runghc/runghc.hs

index a37fd83..55e622a 100644 (file)
@@ -25,11 +25,11 @@ module Main where
 import System.Environment
 import System.IO
 import Data.List
-import System.Directory
 import System.Exit
 import Data.Char
 
 import Compat.RawSystem        ( rawSystem )
+import Compat.Directory        ( findExecutable )
 
 main = do 
   args <- getArgs
@@ -37,9 +37,10 @@ main = do
     ('-':'f' : ghc) : filename : args -> do
        doIt (dropWhile isSpace ghc) filename args
     filename : args -> do
-       path <- getEnv "PATH" `catch` \e -> return "."
-       ghc <- findBinary "ghc"
-       doIt ghc filename args
+       mb_ghc <- findExecutable "ghc"
+       case mb_ghc of
+         Nothing  -> dieProg ("cannot find ghc")
+         Just ghc -> doIt ghc filename args
     _other -> do
        dieProg "syntax: runghc [-f GHCPATH] FILE ARG..."
 
@@ -49,35 +50,8 @@ doIt ghc filename args = do
                        ++ "] Main.main", filename]
   exitWith res
 
-findBinary :: String -> IO FilePath
-findBinary binary = do
-  path <- getEnv "PATH"
-  search (parsePath path)
-  where
-    search :: [FilePath] -> IO FilePath
-    search [] = dieProg ("cannot find " ++ binary)
-    search (d:ds) = do
-       let path = d ++ '/':binary
-       b <- doesFileExist path
-       if b  then return path else search ds
-
-parsePath :: String -> [FilePath]
-parsePath path = split pathSep path
-  where
-#ifdef mingw32_TARGET_OS
-       pathSep = ';'
-#else
-       pathSep = ':'
-#endif
-
-split :: Char -> String -> [String]
-split c s = case rest of
-               []     -> [chunk] 
-               _:rest -> chunk : split c rest
-  where (chunk, rest) = break (==c) s
-
-die :: String -> IO a
-die msg = do hPutStr stderr msg; exitWith (ExitFailure 1)
-
 dieProg :: String -> IO a
-dieProg msg = do p <- getProgName; die (p ++ ": " ++ msg)
+dieProg msg = do
+  p <- getProgName
+  hPutStr stderr (p ++ ": " ++ msg)
+  exitWith (ExitFailure 1)