-- $ ghc -package ghc -package ghc-paths GhcTestcase.hs
{-# LANGUAGE ScopedTypeVariables #-}
module Main where

import GHC
import GHC.Paths (libdir)
import DynFlags

import System.Environment

main :: IO ()
main = do
  args <- getArgs
  defaultErrorHandler defaultFatalMessager defaultFlushOut $
    runGhc (Just libdir) $
      doStuff "Main.hs" "Main" args

doStuff :: String -> String -> [String] -> Ghc ()
doStuff targetFile targetModule args = do
    dflags0 <- getSessionDynFlags
    let dflags1 = dflags0 {
        ghcMode   = CompManager
      , ghcLink   = LinkInMemory
      , hscTarget = HscInterpreted
      , optLevel  = 0
      }
    (dflags2, _, _) <- parseDynamicFlags dflags1 (map noLoc args)
    _ <- setSessionDynFlags dflags2

    target <- guessTarget targetFile Nothing
    setTargets [target { targetAllowObjCode = True }]

    _ <- load LoadAllTargets

    setContext [IIModule $ mkModuleName targetModule]

    return ()