\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"
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
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)
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"
}
))