[project @ 2000-10-27 15:11:37 by sewardj]
[ghc-hetmet.git] / ghc / compiler / main / Finder.lhs
index 13c665b..2037b87 100644 (file)
@@ -5,10 +5,8 @@
 
 \begin{code}
 module Finder (
-    newFinder,                 -- :: PackageConfigInfo -> IO (), 
-    findModule,                -- :: ModuleName -> IO (Maybe (Module, ModuleLocation))
-    ModuleLocation(..),
-    mkHomeModuleLocn,
+    initFinder,        -- :: PackageConfigInfo -> IO (), 
+    findModule         -- :: ModuleName -> IO (Maybe (Module, ModuleLocation))
   ) where
 
 #include "HsVersions.h"
@@ -26,6 +24,7 @@ import Directory
 import List
 import IO
 import Monad
+import Outputable      ( showSDoc, ppr )       -- debugging only
 \end{code}
 
 The Finder provides a thin filesystem abstraction to the rest of the
@@ -43,17 +42,26 @@ GLOBAL_VAR(v_PkgDirCache,    error "no pkg cache!",  FiniteMap String (PackageNa
 GLOBAL_VAR(v_HomeDirCache,   Nothing,  Maybe (FiniteMap String FilePath))
 
 
-newFinder :: PackageConfigInfo -> IO ()
-newFinder (PackageConfigInfo pkgs) = do
+initFinder :: PackageConfigInfo -> IO ()
+initFinder pkgs = do
   -- expunge our home cache
   writeIORef v_HomeDirCache Nothing
-
   -- lazilly fill in the package cache
   writeIORef v_PkgDirCache (unsafePerformIO (newPkgCache pkgs))
-
+  pkg_dbg_info <- readIORef v_PkgDirCache
+  putStrLn (unlines (map show (fmToList pkg_dbg_info)))
+
+findModule :: ModuleName -> IO (Maybe (Module, ModuleLocation))
+findModule name = do
+  hPutStr stderr ("findModule: " ++ moduleNameUserString name ++ " ... ")
+  maybe_m <- findModule_wrk name
+  case maybe_m of
+     Nothing -> hPutStrLn stderr "Not Found"
+     Just mm -> hPutStrLn stderr (showSDoc (ppr (snd mm)))
+  return maybe_m
   
-findModule :: [Package] -> ModuleName -> IO (Maybe (Module, ModuleLocation))
-findModule pkgs name = do
+findModule_wrk :: ModuleName -> IO (Maybe (Module, ModuleLocation))
+findModule_wrk name = do
   j <- maybeHomeModule name
   case j of
        Just home_module -> return (Just home_module)
@@ -150,9 +158,9 @@ maybePackageModule mod_name = do
        Just (pkg_name,path) -> 
            return (Just (mkModule mod_name pkg_name,
                          ModuleLocation{ 
-                               hs_file  = error "package module; no source",
+                               hs_file  = "error:_package_module;_no_source",
                                hi_file  = hi,
-                               obj_file = error "package module; no object"
+                               obj_file = "error:_package_module;_no_object"
                           }
                   ))