import Packages ( dumpPackages )
import DriverPhases ( Phase(..), isSourceFilename, anyHsc,
startPhase, isHaskellSrcFilename )
-import StaticFlags ( staticFlags, v_Ld_inputs, parseStaticFlags )
+import StaticFlags
import DynFlags ( defaultDynFlags )
import BasicTypes ( failed )
import ErrUtils ( putMsg )
-- 2. Parse the "mode" flags (--make, --interactive etc.)
(cli_mode, argv3) <- parseModeFlags argv2
+ -- If all we want to do is to show the version number then do it
+ -- now, before we start a GHC session etc.
+ -- If we do it later then bootstrapping gets confused as it tries
+ -- to find out what version of GHC it's using before package.conf
+ -- exists, so starting the session fails.
+ case cli_mode of
+ ShowVersion -> do showVersion
+ exitWith ExitSuccess
+ ShowNumVersion -> do putStrLn cProjectVersion
+ exitWith ExitSuccess
+ _ -> return ()
+
let mode = case cli_mode of
DoInteractive -> Interactive
DoEval _ -> Interactive
---------------- Do the business -----------
case cli_mode of
- ShowUsage -> showGhcUsage dflags cli_mode
- PrintLibdir -> putStrLn (topDir dflags)
- ShowVersion -> showVersion
- ShowNumVersion -> putStrLn cProjectVersion
- ShowInterface f -> doShowIface dflags f
- DoMake -> doMake session srcs
- DoMkDependHS -> doMkDependHS session (map fst srcs)
- StopBefore p -> oneShot dflags p srcs
- DoInteractive -> interactiveUI session srcs Nothing
- DoEval expr -> interactiveUI session srcs (Just expr)
+ ShowUsage -> showGhcUsage dflags cli_mode
+ PrintLibdir -> putStrLn (topDir dflags)
+ ShowVersion -> panic "ShowVersion should already have been handled"
+ ShowNumVersion -> panic "ShowNumVersion should already have been handled"
+ ShowInterface f -> doShowIface dflags f
+ DoMake -> doMake session srcs
+ DoMkDependHS -> doMkDependHS session (map fst srcs)
+ StopBefore p -> oneShot dflags p srcs
+ DoInteractive -> interactiveUI session srcs Nothing
+ DoEval expr -> interactiveUI session srcs (Just expr)
dumpFinalStats dflags
exitWith ExitSuccess
when (notNull unknown_opts) (unknownFlagsErr unknown_opts)
-- -prof and --interactive are not a good combination
- when (notNull (wayNames dflags) && isInterpretiveMode cli_mode) $
+ when (notNull (filter (/= WayThreaded) (wayNames dflags))
+ && isInterpretiveMode cli_mode) $
do throwDyn (UsageError
- "--interactive can't be used with -prof, -ticky, -unreg or -smp.")
+ "--interactive can't be used with -prof, -ticky, or -unreg.")
-- -ohi sanity check
if (isJust (outputHi dflags) &&
(isCompManagerMode cli_mode || srcs `lengthExceeds` 1))