[project @ 2001-01-21 16:37:06 by sewardj]
[ghc-hetmet.git] / ghc / compiler / main / Main.hs
index 9487658..51e5e47 100644 (file)
@@ -1,6 +1,6 @@
 {-# OPTIONS -fno-warn-incomplete-patterns #-}
 -----------------------------------------------------------------------------
--- $Id: Main.hs,v 1.45 2001/01/09 17:16:36 rrt Exp $
+-- $Id: Main.hs,v 1.49 2001/01/21 16:37:06 sewardj Exp $
 --
 -- GHC Driver program
 --
@@ -17,7 +17,6 @@ module Main (main) where
 
 
 #ifdef GHCI
-import Interpreter
 import InteractiveUI
 #endif
 
@@ -34,7 +33,7 @@ import DriverMkDepend
 import DriverUtil
 import Panic
 import DriverPhases    ( Phase(..), haskellish_file )
-import CmdLineOpts     ( HscLang(..), DynFlags(..), v_Static_hsc_opts )
+import CmdLineOpts
 import TmpFiles
 import Finder          ( initFinder )
 import CmStaticInfo
@@ -42,7 +41,6 @@ import Config
 import Util
 
 
-
 import Concurrent
 import Directory
 import IOExts
@@ -168,9 +166,13 @@ main =
        -- process all the other arguments, and get the source files
    non_static <- processArgs static_flags flags2 []
 
-       -- find the build tag, and re-process the build-specific options
-   more_opts <- findBuildTag
-   way_non_static <- processArgs static_flags more_opts []
+       -- Find the build tag, and re-process the build-specific options.
+       -- Also add in flags for unregisterised compilation, if 
+       -- GhcUnregisterised=YES.
+   way_opts <- findBuildTag
+   let unreg_opts | cGhcUnregisterised == "YES" = unregFlags
+                 | otherwise = []
+   way_non_static <- processArgs static_flags (unreg_opts ++ way_opts) []
 
        -- give the static flags to hsc
    static_opts <- buildStaticHscOpts
@@ -202,18 +204,17 @@ main =
                               | otherwise       -> defaultHscLang
 
    writeIORef v_DynFlags 
-       DynFlags{ coreToDo = core_todo,
-                 stgToDo  = stg_todo,
-                  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 = [] }
+       defaultDynFlags{ coreToDo = core_todo,
+                        stgToDo  = stg_todo,
+                        hscLang  = lang,
+                        -- leave out hscOutName for now
+                        hscOutName = panic "Main.main:hscOutName not set",
+
+                        verbosity = case mode of
+                                       DoInteractive -> 1
+                                       DoMake        -> 1
+                                       _other        -> 0,
+                       }
 
        -- the rest of the arguments are "dynamic"
    srcs <- processArgs dynamic_flags (way_non_static ++ 
@@ -225,12 +226,6 @@ main =
        -- complain about any unknown flags
    mapM unknownFlagErr [ f | f@('-':_) <- srcs ]
 
-       -- 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 >= 2) 
@@ -242,6 +237,9 @@ main =
    when (verb >= 2) 
        (hPutStrLn stderr ("Using package config file: " ++ conf_file))
 
+   when (verb >= 3) 
+       (hPutStrLn stderr ("Hsc static flags: " ++ unwords static_opts))
+
        -- initialise the finder
    pkg_avails <- getPackageInfo
    initFinder pkg_avails
@@ -263,7 +261,6 @@ main =
    if null srcs then throwDyn (UsageError "no input files") else do
 
    let compileFile src = do
-         writeIORef v_Driver_state saved_driver_state
          writeIORef v_DynFlags init_dyn_flags
 
          -- We compile in two stages, because the file may have an
@@ -314,7 +311,7 @@ beginMake mods
 
 beginInteractive :: [String] -> IO ()
 #ifndef GHCI
-beginInteractive = throwDyn (OtherError "not build for interactive use")
+beginInteractive = throwDyn (OtherError "not built for interactive use")
 #else
 beginInteractive mods
   = do state <- cmInit Interactive