Ticket #1027: foo.hs

File foo.hs, 1.2 KB (added by igloo, 7 years ago)
Line 
1
2{-
3rm *.o *.hi
4ghc -package ghc foo.hs -o foo -Wall
5./foo
6./foo
7-}
8
9module Main (main) where
10
11import DynFlags (defaultDynFlags)
12import GHC
13import StaticFlags (parseStaticFlags)
14import DriverPhases (Phase)
15
16-- You need to change this to the -B directory in the ghc wrapper
17pathToGHC :: FilePath
18pathToGHC = "/usr/lib/ghc-6.6"
19
20main :: IO ()
21main = defaultErrorHandler defaultDynFlags $ do
22    dynArgs <- parseStaticFlags ["-Wall"]
23    s       <- newSession BatchCompile  (Just pathToGHC)
24    initialFlags <- getSessionDynFlags s
25    let initialFlags' = initialFlags { verbosity = 1 }
26    (dynamicFlags, []) <- parseDynamicFlags initialFlags' dynArgs
27    setSessionDynFlags s dynamicFlags
28
29    prepareMake s [("A.hs", Nothing)]
30    doMake s
31    doMake s
32    doMake s
33    doMake s
34
35prepareMake :: Session -> [(FilePath, Maybe Phase)] -> IO ()
36prepareMake sess srcs = do   
37    targets <- mapM (uncurry GHC.guessTarget) srcs
38    GHC.setTargets sess targets
39
40doMake :: Session -> IO ()
41doMake s = do 
42    dflags <- getSessionDynFlags s
43    res <- GHC.defaultCleanupHandler dflags $ load s LoadAllTargets
44    case res of 
45        Succeeded -> putStrLn "\nSucceeded!\n"
46        _ -> putStrLn "\nFailed!\n"
47