Keep track of family instance modules
[ghc-hetmet.git] / compiler / main / DriverPipeline.hs
index d66f147..9e33f51 100644 (file)
@@ -50,17 +50,18 @@ import ParserCoreUtils      ( getCoreModuleName )
 import SrcLoc          ( unLoc )
 import SrcLoc          ( Located(..) )
 
-import EXCEPTION
-import DATA_IOREF      ( readIORef, writeIORef, IORef )
-import GLAEXTS         ( Int(..) )
-
-import Directory
-import System
-import IO
-import Monad
+import Control.Exception as Exception
+import Data.IORef      ( readIORef, writeIORef, IORef )
+import GHC.Exts                ( Int(..) )
+import System.Directory
+import System.IO
+import SYSTEM_IO_ERROR as IO
+import Control.Monad
 import Data.List       ( isSuffixOf )
-import Maybe
-
+import Data.Maybe
+import System.Exit
+import System.Cmd
+import System.Environment
 
 -- ---------------------------------------------------------------------------
 -- Pre-process
@@ -144,8 +145,8 @@ compile hsc_env mod_summary maybe_old_linkable old_iface mod_index nmods = do
                                extCoreName = basename ++ ".hcr" }
 
    -- -no-recomp should also work with --make
-   let do_recomp = dopt Opt_RecompChecking dflags
-       source_unchanged = isJust maybe_old_linkable && do_recomp
+   let force_recomp = dopt Opt_ForceRecomp dflags
+       source_unchanged = isJust maybe_old_linkable && not force_recomp
        hsc_env' = hsc_env { hsc_dflags = dflags' }
        object_filename = ml_obj_file location
 
@@ -302,7 +303,7 @@ link BatchCompile dflags batch_attempt_linking hpt
                | Right t <- e_exe_time = 
                        any (t <) (map linkableTime linkables)
 
-       if dopt Opt_RecompChecking dflags && not linking_needed
+       if not (dopt Opt_ForceRecomp dflags) && not linking_needed
           then do debugTraceMsg dflags 2 (text exe_file <+> ptext SLIT("is up to date, linking not required."))
                   return Succeeded
           else do
@@ -688,9 +689,9 @@ runPhase (Hsc src_flavour) stop dflags0 basename suff input_fn get_output_fn _ma
   -- date wrt M.hs (or M.o doesn't exist) so we must recompile regardless.
        src_timestamp <- getModificationTime (basename `joinFileExt` suff)
 
-       let do_recomp = dopt Opt_RecompChecking dflags
+       let force_recomp = dopt Opt_ForceRecomp dflags
        source_unchanged <- 
-          if not do_recomp || not (isStopLn stop)
+          if force_recomp || not (isStopLn stop)
                -- Set source_unchanged to False unconditionally if
                --      (a) recompilation checker is off, or
                --      (b) we aren't going all the way to .o file (e.g. ghc -S)
@@ -789,7 +790,7 @@ runPhase Cmm stop dflags basename suff input_fn get_output_fn maybe_loc
 -- way too many hacks, and I can't say I've ever used it anyway.
 
 runPhase cc_phase stop dflags basename suff input_fn get_output_fn maybe_loc
-   | cc_phase `eqPhase` Cc || cc_phase `eqPhase` HCc
+   | cc_phase `eqPhase` Cc || cc_phase `eqPhase` Ccpp || cc_phase `eqPhase` HCc
    = do        let cc_opts = getOpts dflags opt_c
            hcc = cc_phase `eqPhase` HCc
 
@@ -851,7 +852,8 @@ runPhase cc_phase stop dflags basename suff input_fn get_output_fn maybe_loc
                -- compiling .hc files, by adding the -x c option.
                -- Also useful for plain .c files, just in case GHC saw a 
                -- -x c option.
-                       [ SysTools.Option "-x", SysTools.Option "c"] ++
+                       [ SysTools.Option "-x", if cc_phase `eqPhase` Ccpp
+                                                then SysTools.Option "c++" else SysTools.Option "c"] ++
                        [ SysTools.FileOption "" input_fn
                        , SysTools.Option "-o"
                        , SysTools.FileOption "" output_fn
@@ -1132,7 +1134,7 @@ checkProcessArgsResult flags filename
 
 getHCFilePackages :: FilePath -> IO [PackageId]
 getHCFilePackages filename =
-  EXCEPTION.bracket (openFile filename ReadMode) hClose $ \h -> do
+  Exception.bracket (openFile filename ReadMode) hClose $ \h -> do
     l <- hGetLine h
     case l of
       '/':'*':' ':'G':'H':'C':'_':'P':'A':'C':'K':'A':'G':'E':'S':rest ->