Commit 8fdd3c29 authored by krasimir's avatar krasimir
Browse files

[project @ 2004-11-14 09:59:48 by krasimir]

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 ...
parent ec2e8e57
......@@ -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)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment