{-# OPTIONS -W -fno-warn-incomplete-patterns #-}
-----------------------------------------------------------------------------
--- $Id: Main.hs,v 1.26 2000/11/19 19:40:08 simonmar Exp $
+-- $Id: Main.hs,v 1.32 2000/11/22 17:51:16 simonmar Exp $
--
-- GHC Driver program
--
-- make sure we clean up after ourselves
later (do forget_it <- readIORef v_Keep_tmp_files
unless forget_it $ do
- verb <- readIORef v_Verbose
- cleanTempFiles verb
+ verb <- dynFlag verbosity
+ cleanTempFiles (verb >= 2)
) $ do
-- exceptions will be blocked while we clean the temporary files,
-- so there shouldn't be any difficulty if we receive further
hscLang = lang,
-- leave out hscOutName for now
hscOutName = panic "Main.main:hscOutName not set",
+
+ verbosity = case mode of
+ DoInteractive -> 1
+ DoMake -> 1
+ _other -> 0,
+
flags = [] }
-- the rest of the arguments are "dynamic"
-- complain about any unknown flags
mapM unknownFlagErr [ f | f@('-':_) <- srcs ]
- -- get the -v flag
- verb <- readIORef v_Verbose
+ -- save the flag state, because this could be modified by OPTIONS
+ -- pragmas during the compilation, and we'll need to restore it
+ -- before starting the next compilation.
+ saved_driver_state <- readIORef v_Driver_state
+ writeIORef v_InitDriverState saved_driver_state
+
+ verb <- dynFlag verbosity
- when verb (do hPutStr stderr "Glasgow Haskell Compiler, Version "
- hPutStr stderr cProjectVersion
- hPutStr stderr ", for Haskell 98, compiled by GHC version "
- hPutStrLn stderr cBooterVersion)
+ when (verb >= 2)
+ (do hPutStr stderr "Glasgow Haskell Compiler, Version "
+ hPutStr stderr cProjectVersion
+ hPutStr stderr ", for Haskell 98, compiled by GHC version "
+ hPutStrLn stderr cBooterVersion)
- when verb (hPutStrLn stderr ("Using package config file: " ++ conf_file))
+ when (verb >= 2)
+ (hPutStrLn stderr ("Using package config file: " ++ conf_file))
-- initialise the finder
- initFinder pkg_details
+ pkg_avails <- getPackageInfo
+ initFinder pkg_avails
-- mkdependHS is special
when (mode == DoMkDependHS) beginMkDependHS
-- make/interactive require invoking the compilation manager
- if (mode == DoMake) then beginMake pkg_details srcs else do
- if (mode == DoInteractive) then beginInteractive pkg_details srcs else do
+ if (mode == DoMake) then beginMake srcs else do
+ if (mode == DoInteractive) then beginInteractive srcs else do
-- for each source file, find which phases to run
let lang = hscLang init_dyn_flags
if null srcs then throwDyn (UsageError "no input files") else do
- -- save the flag state, because this could be modified by OPTIONS
- -- pragmas during the compilation, and we'll need to restore it
- -- before starting the next compilation.
- saved_driver_state <- readIORef v_Driver_state
- writeIORef v_InitDriverState saved_driver_state
-
let compileFile (src, phases) = do
writeIORef v_Driver_state saved_driver_state
writeIORef v_DynFlags init_dyn_flags
some -> writeIORef v_TopDir (drop 2 (last some)))
return others
-beginMake :: PackageConfigInfo -> [String] -> IO ()
-beginMake pkg_details mods
+beginMake :: [String] -> IO ()
+beginMake mods
= do case mods of
[] -> throwDyn (UsageError "no input files")
- [mod] -> do state <- cmInit pkg_details Batch
- cmLoadModule state (mkModuleName mod)
+ [mod] -> do state <- cmInit Batch
+ cmLoadModule state mod
return ()
_ -> throwDyn (UsageError "only one module allowed with --make")
+
+beginInteractive :: [String] -> IO ()
#ifndef GHCI
beginInteractive = throwDyn (OtherError "not build for interactive use")
#else
-beginInteractive pkg_details mods
- = do state <- cmInit pkg_details Interactive
- case mods of
- [] -> return ()
- [mod] -> do cmLoadModule state (mkModuleName mod); return ()
- _ -> throwDyn (UsageError
- "only one module allowed with --interactive")
- interactiveUI state
+beginInteractive mods
+ = do state <- cmInit Interactive
+ (state', ok, ms)
+ <- case mods of
+ [] -> return (state, True, [])
+ [mod] -> cmLoadModule state mod
+ _ -> throwDyn (UsageError
+ "only one module allowed with --interactive")
+ interactiveUI state' ms
#endif