X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=utils%2Frunghc%2Frunghc.hs;h=e2cea312317001411e1efe272ccb19b93cf1bb84;hb=1d47f08d196252b4ee5f4d5b5af2fb4945720762;hp=244c98f972c41dd78d8ff825bdce12a58d79412c;hpb=c38ec601e46f02a6cbd907eb5f796cb83fac3ed4;p=ghc-hetmet.git diff --git a/utils/runghc/runghc.hs b/utils/runghc/runghc.hs index 244c98f..e2cea31 100644 --- a/utils/runghc/runghc.hs +++ b/utils/runghc/runghc.hs @@ -27,14 +27,10 @@ import System.IO import Data.List import System.Exit import Data.Char - -#ifdef USING_COMPAT -import Compat.RawSystem ( rawSystem ) -import Compat.Directory ( findExecutable ) -#else +import System.Directory ( removeFile ) +import Control.Exception ( bracket ) +import System.Directory ( findExecutable, getTemporaryDirectory ) import System.Cmd ( rawSystem ) -import System.Directory ( findExecutable ) -#endif main :: IO () main = do @@ -59,7 +55,17 @@ doIt :: String -> [String] -> IO () doIt ghc args = do let (ghc_args, rest) = getGhcArgs args case rest of - [] -> dieProg usage + [] -> do + -- behave like typical perl, python, ruby interpreters: + -- read from stdin + tmpdir <- getTemporaryDirectory + bracket + (openTempFile tmpdir "runghcXXXX.hs") + (\(filename,_) -> removeFile filename) + $ \(filename,h) -> do + getContents >>= hPutStr h + hClose h + doIt ghc (ghc_args ++ [filename]) filename : prog_args -> do let c1 = ":set prog " ++ show filename c2 = ":main " ++ show prog_args @@ -90,6 +96,6 @@ dieProg msg = do hPutStrLn stderr (p ++ ": " ++ msg) exitWith (ExitFailure 1) -usage :: String -usage = "syntax: runghc [-f GHC-PATH | --] [GHC-ARGS] [--] FILE ARG..." +-- usage :: String +-- usage = "syntax: runghc [-f GHC-PATH | --] [GHC-ARGS] [--] FILE ARG..."