From: krasimir Date: Sun, 14 Nov 2004 09:59:48 +0000 (+0000) Subject: [project @ 2004-11-14 09:59:48 by krasimir] X-Git-Tag: Initial_conversion_from_CVS_complete~1424 X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=8fdd3c291dc2305411002d0b89603160bbcd2850 [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 ... --- diff --git a/ghc/utils/runghc/runghc.hs b/ghc/utils/runghc/runghc.hs index a37fd83..55e622a 100644 --- a/ghc/utils/runghc/runghc.hs +++ b/ghc/utils/runghc/runghc.hs @@ -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)