[project @ 2002-07-16 14:56:08 by simonmar]
[ghc-hetmet.git] / ghc / compiler / main / DriverMkDepend.hs
index 970178d..5d49e54 100644 (file)
@@ -1,5 +1,5 @@
 -----------------------------------------------------------------------------
--- $Id: DriverMkDepend.hs,v 1.14 2001/08/02 16:35:10 simonmar Exp $
+-- $Id: DriverMkDepend.hs,v 1.20 2002/03/21 09:00:54 simonpj Exp $
 --
 -- GHC Driver
 --
@@ -11,17 +11,15 @@ module DriverMkDepend where
 
 #include "HsVersions.h"
 
-import DriverState
-import DriverUtil
+import DriverState      
+import DriverUtil       ( add, softGetDirectoryContents )
 import DriverFlags
 import SysTools                ( newTempName )
 import qualified SysTools
-import Module
-import Config
-import Module          ( isHomeModule )
-import Finder          ( findModule )
+import Module          ( ModuleName, moduleNameUserString, isHomeModule )
+import Finder          ( findModuleDep )
 import HscTypes                ( ModuleLocation(..) )
-import Util
+import Util             ( global )
 import Panic
 
 import IOExts
@@ -29,8 +27,12 @@ import Exception
 
 import Directory
 import IO
-import Monad
-import Maybe
+import Monad            ( when )
+import Maybe            ( isJust )
+
+#if __GLASGOW_HASKELL__ <= 408
+import Util            ( catchJust, ioErrors )
+#endif
 
 -------------------------------------------------------------------------------
 -- mkdependHS
@@ -38,7 +40,7 @@ import Maybe
        -- flags
 GLOBAL_VAR(v_Dep_makefile,             "Makefile", String);
 GLOBAL_VAR(v_Dep_include_prelude,      False, Bool);
-GLOBAL_VAR(v_Dep_exclude_mods,          [], [String]);
+GLOBAL_VAR(v_Dep_exclude_mods,          ["GHC.Prim"], [String]);
 GLOBAL_VAR(v_Dep_suffixes,             [], [String]);
 GLOBAL_VAR(v_Dep_warnings,             True, Bool);
 
@@ -53,14 +55,14 @@ depEndMarker   = "# DO NOT DELETE: End of Haskell dependencies"
 
 -- for compatibility with the old mkDependHS, we accept options of the form
 -- -optdep-f -optdep.depend, etc.
-dep_opts = [
-   (  "s",                     SepArg (add v_Dep_suffixes) ),
-   (  "f",                     SepArg (writeIORef v_Dep_makefile) ),
-   (  "w",                     NoArg (writeIORef v_Dep_warnings False) ),
-   (  "-include-prelude",      NoArg (writeIORef v_Dep_include_prelude True) )
---   (  "-exclude-module=",       Prefix (add v_Dep_exclude_mods) )
---   (  "x",                      Prefix (add v_Dep_exclude_mods) )
- ]
+dep_opts = 
+   [ (  "s",                   SepArg (add v_Dep_suffixes) )
+   , (  "f",                   SepArg (writeIORef v_Dep_makefile) )
+   , (  "w",                   NoArg (writeIORef v_Dep_warnings False) )
+   , (  "-include-prelude",    NoArg (writeIORef v_Dep_include_prelude True) )
+   , (  "-exclude-module=",       Prefix (add v_Dep_exclude_mods) )
+   , (  "x",                      Prefix (add v_Dep_exclude_mods) )
+   ]
 
 beginMkDependHS :: IO ()
 beginMkDependHS = do
@@ -169,12 +171,13 @@ findDependency is_source src imp = do
    if imp_mod `elem` excl_mods 
       then return Nothing
       else do
-       r <- findModule imp
+       r <- findModuleDep imp is_source
        case r of 
           Just (mod,loc)
                | isHomeModule mod || include_prelude
                -> return (Just (ml_hi_file loc, not is_source))
-               | otherwise 
+               | otherwise
                -> return Nothing
           Nothing -> throwDyn (ProgramError 
-               (src ++ ": " ++ "can't locate import `" ++ imp_mod ++ "'"))
+               (src ++ ": " ++ "can't locate import `" ++ imp_mod ++ "'" ++
+                if is_source then " (SOURCE import)" else ""))