parseDynamicFlags,
getSessionDynFlags,
setSessionDynFlags,
+ parseStaticFlags,
-- * Targets
Target(..), TargetId(..), Phase,
import HscMain ( newHscEnv, hscFileCheck, HscChecked(..) )
import HscTypes
import DynFlags
+import StaticFlags
import SysTools ( initSysTools, cleanTempFiles, cleanTempFilesExcept,
cleanTempDirs )
import Module
modifyMVar_ interruptTargetThread (return . (main_thread :))
installSignalHandlers
+ initStaticOpts
dflags0 <- initSysTools mb_top_dir defaultDynFlags
dflags <- initDynFlags dflags0
env <- newHscEnv dflags
module StaticFlags (
parseStaticFlags,
staticFlags,
+ initStaticOpts,
-- Ways
WayName(..), v_Ways, v_Build_tag, v_RTS_Build_tag, isRTSWay,
parseStaticFlags :: [String] -> IO [String]
parseStaticFlags args = do
+ ready <- readIORef v_opt_C_ready
+ when ready $ throwDyn (ProgramError "Too late for parseStaticFlags: call it before newSession")
+
(leftover, errs) <- processArgs static_flags args
when (not (null errs)) $ throwDyn (UsageError (unlines errs))
when (not (null errs)) $ ghcError (UsageError (unlines errs))
return (cg_flags++more_leftover++leftover)
+initStaticOpts :: IO ()
+initStaticOpts = writeIORef v_opt_C_ready True
static_flags :: [(String, OptKind IO)]
-- All the static flags should appear in this list. It describes how each