[expand --list-libraries output with lots of new info
John Meacham <john@repetae.net>**20090908001803
 Ignore-this: d2eb4972842f4d2537723145b8f4aa46
] hunk ./Makefile.am 42
-	src/Support/IniParse.hs src/E/Lint.hs src/Util/Progress.hs src/Grin/StorageAnalysis.hs
+	src/Support/IniParse.hs src/E/Lint.hs src/Util/Progress.hs src/Grin/StorageAnalysis.hs src/Util/YAML.hs
hunk ./src/Ho/Binary.hs 1
+{-# OPTIONS_GHC -XRecordWildCards #-}
hunk ./src/Ho/Binary.hs 93
-    -> FilePath
hunk ./src/Ho/Binary.hs 94
-recordHlFile (Library hoh libr ldef lcor) fp = do
+recordHlFile Library { .. } = do
hunk ./src/Ho/Binary.hs 97
-            (cff_jhdr, compress $ encode hoh { hohVersion = current_version }),
-            (cff_libr, compress $ encode libr),
-            (cff_ldef, compress $ encode ldef),
-            (cff_lcor, compress $ encode lcor)]
-    let tfp = fp ++ ".tmp"
+            (cff_jhdr, compress $ encode libHoHeader { hohVersion = current_version }),
+            (cff_libr, compress $ encode libHoLib),
+            (cff_ldef, compress $ encode libTcMap),
+            (cff_lcor, compress $ encode libBuildMap)]
+    let tfp = libFileName ++ ".tmp"
hunk ./src/Ho/Binary.hs 103
-    rename tfp fp
+    rename tfp libFileName
hunk ./src/Ho/Binary.hs 108
-    return (Library hoh (fc cff_libr) (fc cff_ldef) (fc cff_lcor))
+    return Library { libHoHeader = hoh, libHoLib =  fc cff_libr, libTcMap = fc cff_ldef, libBuildMap = fc cff_lcor, libFileName = fn }
hunk ./src/Ho/Build.hs 288
-        fs' m (Library _ libr _ _) = fromMaybe (error $ "can't find deps for: " ++ show m) (Map.lookup m (hoModuleDeps libr))
+        fs' m libr = fromMaybe (error $ "can't find deps for: " ++ show m) (Map.lookup m (hoModuleDeps $ libHoLib libr))
hunk ./src/Ho/Build.hs 326
-        g [((mg,Right lib@(Library _ libr mhot mhob)),ds)] = do
-                let Just hob = Map.lookup mg mhob
-                    Just hot = Map.lookup mg mhot
+        g [((mg,Right lib@(Library { .. })),ds)] = do
+                let Just hob = Map.lookup mg libBuildMap
+                    Just hot = Map.lookup mg libTcMap
hunk ./src/Ho/Build.hs 420
-    let combModMap es = Map.unions [ Map.map ((,) l) mm | l@(Library _ HoLib { hoModuleMap = mm } _ _) <- es]
+    let combModMap es = Map.unions [ Map.map ((,) l) (hoModuleMap $ libHoLib l) | l <- es]
hunk ./src/Ho/Build.hs 440
-    forM_ (Map.elems $ loadedLibraries done) $ \ lib@(Library hoh  _ _ _) -> do
-        let libsBad = filter (\ (p,h) -> fmap (libHash) (Map.lookup p (loadedLibraries done)) /= Just h) (hohLibDeps hoh)
+    forM_ (Map.elems $ loadedLibraries done) $ \ lib -> do
+        let libsBad = filter (\ (p,h) -> fmap (libHash) (Map.lookup p (loadedLibraries done)) /= Just h) (hohLibDeps $ libHoHeader lib)
hunk ./src/Ho/Build.hs 586
-                    (CompLibrary ho (Library hoh _ _ _)) -> do
+                    (CompLibrary ho Library { libHoHeader = hoh }) -> do
hunk ./src/Ho/Build.hs 769
-        recordHlFile (Library hoh libr ldef lcor) outName
+        recordHlFile Library { libHoHeader = hoh, libHoLib =  libr, libTcMap = ldef, libBuildMap = lcor, libFileName = outName }
hunk ./src/Ho/Build.hs 820
-        Library hoh libr mhob mhot <- readHlFile fn
-        doHoh hoh
-        showList "MetaInfo" (sort [text (unpackPS k) <> char ':' <+> show v | (k,v) <- hoMetaInfo libr])
-        showList "ModuleMap" (map pprint . sortUnder fst $ Map.toList $ hoModuleMap libr)
-        showList "ModuleDeps" (map pprint . sortUnder fst $ Map.toList $ hoModuleDeps libr)
-        showList "ModuleReexports" (map pprint . sortUnder fst $ Map.toList $ hoReexports libr)
+        Library { .. } <- readHlFile fn
+        doHoh libHoHeader
+        showList "MetaInfo" (sort [text (unpackPS k) <> char ':' <+> show v | (k,v) <- hoMetaInfo libHoLib])
+        showList "ModuleMap" (map pprint . sortUnder fst $ Map.toList $ hoModuleMap libHoLib)
+        showList "ModuleDeps" (map pprint . sortUnder fst $ Map.toList $ hoModuleDeps libHoLib)
+        showList "ModuleReexports" (map pprint . sortUnder fst $ Map.toList $ hoReexports libHoLib)
hunk ./src/Ho/Library.hs 3
-    findLibrary,
hunk ./src/Ho/Library.hs 18
+import Data.Monoid
hunk ./src/Ho/Library.hs 26
-import Data.Monoid
+import FrontEnd.HsSyn(Module)
hunk ./src/Ho/Library.hs 32
+import Util.YAML
hunk ./src/Ho/Library.hs 37
-libModMap (Library _ libr _ _) = hoModuleMap libr
-libHash (Library hoh _ _ _) = hohHash hoh
+libModMap = hoModuleMap . libHoLib
+libHash  = hohHash . libHoHeader
hunk ./src/Ho/Library.hs 40
-libProvides mg (Library _ lib _ _) = [ m | (m,mg') <- Map.toList (hoModuleMap lib), mg == mg']
-libName (Library HoHeader { hohName = ~(Right (name,vers)) } _ _ _) = unpackPS name ++ "-" ++ showVersion vers
-libBaseName (Library HoHeader { hohName = ~(Right (name,vers)) } _ _ _) = name
-libModules (Library _ lib _ _) = ([ m | (m,_) <- Map.toList (hoModuleMap lib)],Map.toList (hoReexports lib))
-libHoLib (Library _ lib _ _) = lib
+libProvides mg lib = [ m | (m,mg') <- Map.toList (libModMap lib), mg == mg']
+libName lib = let HoHeader { hohName = ~(Right (name,vers)) } = libHoHeader lib in unpackPS name ++ "-" ++ showVersion vers
+libVersion lib = let HoHeader { hohName = ~(Right (name,vers)) } = libHoHeader lib in vers
+libBaseName lib = let HoHeader { hohName = ~(Right (name,vers)) } = libHoHeader lib in name
+libModules l = let lib = libHoLib l in ([ m | (m,_) <- Map.toList (hoModuleMap lib)],Map.toList (hoReexports lib))
hunk ./src/Ho/Library.hs 46
-libVersionCompare ~(Library HoHeader { hohName = Right (_,v1) } _ _ _ ) ~(Library HoHeader { hohName =  Right (_,v2) } _ _ _) = compare v1 v2
+libVersionCompare l1 l2 = compare (libVersion l1) (libVersion l2)
hunk ./src/Ho/Library.hs 48
-type LibraryName = String
hunk ./src/Ho/Library.hs 90
-type LibraryMap = Map.Map LibraryName FilePath
hunk ./src/Ho/Library.hs 91
-findLibrary ::  LibraryName -> IO (LibraryName,FilePath)
-findLibrary pn = do
-    lm <- getLibraryMap (optHlPath options)
-    case Map.lookup pn lm of
-        Just x  -> return (pn,x)
-        Nothing -> case range (pn++"-") (pn++"-"++repeat maxBound) lm of
-                 [] -> fail ("LibraryMap: Library "++pn++" not found!")
-                 xs -> return $ last xs
hunk ./src/Ho/Library.hs 93
+
+instance ToNode Module where
+    toNode m = toNode $ show m
+instance ToNode HoHash where
+    toNode m = toNode $ show m
+instance ToNode PackedString where
+    toNode m = toNode $ unpackPS m
+
hunk ./src/Ho/Library.hs 103
-    putStrLn "SearchPath:"
-    mapM_ (putStrLn . (" - " ++)) (optHlPath options)
-    putStrLn "Libraries:"
hunk ./src/Ho/Library.hs 104
-    let nameComp a b = compare (libName a) (libName b)
-    forM_ (sortBy nameComp $ Map.elems byhashes) $ \ lib -> do
-        putStrLn " -"
-        let f n v = putStrLn ("  " ++ n ++ ": " ++ v)
-        f "Name" (libName lib)
-        f "Hash" (show $ libHash lib)
+    let libs = Map.toList byhashes
+        nameComp a b = compare (libName a) (libName b)
+    if not verbose then putStr $ showYAML (map (libName . snd) libs) else do
+    let f (h,l) = (show h,[
+            ("Name",toNode (libName l)),
+            ("BaseName",toNode (libBaseName l)),
+            ("Version",toNode (showVersion $ libVersion l)),
+            ("FilePath",toNode (libFileName l)),
+            ("LibDeps",toNode [ h | (_,h) <- hohLibDeps (libHoHeader l)]),
+            ("Exported-Modules",toNode $ mod ++ fsts rmod)
+            ]) where
+          (mod,rmod) = libModules l
+
+
+
+
+
+    putStr $ showYAML (map f libs)
+--    putStrLn "SearchPath:"
+--    mapM_ (putStrLn . (" - " ++)) (optHlPath options)
+--    putStrLn "Libraries:"
+--    let nameComp a b = compare (libName a) (libName b)
+--        putStrLn " -"
+--        let f n v = putStrLn ("  " ++ n ++ ": " ++ v)
+--        f "Name" (libName lib)
+--        f "Hash" (show $ libHash lib)
hunk ./src/Ho/Library.hs 139
-----
-
-getLibraryMap :: [FilePath] -> IO LibraryMap
-getLibraryMap fps = fmap Map.unions $ mapM getPM fps where
-    getPM fp = flip catch (\_ -> return Map.empty) $ do
-        raw <- getDirectoryContents fp
-        return $ Map.fromList $ flip concatMap raw $ \e ->
-            case reverse e of
-              ('l':'h':'.':r) -> [(reverse r,fp++"/"++e)]
-              _               -> []
hunk ./src/Ho/Library.hs 200
-              where newdeps = [ (False,fromMaybe (error $ printf "Dependency '%s' with hash '%s' needed by '%s' was not found" (unpackPS p) (show h) (libName l)) (Map.lookup h byhashes)) | let Library HoHeader { hohLibDeps = ldeps } _ _ _ = l , (p,h) <- ldeps ]
+              where newdeps = [ (False,fromMaybe (error $ printf "Dependency '%s' with hash '%s' needed by '%s' was not found" (unpackPS p) (show h) (libName l)) (Map.lookup h byhashes)) | let HoHeader { hohLibDeps = ldeps } = libHoHeader l , (p,h) <- ldeps ]
hunk ./src/Ho/Type.hs 111
-data Library = Library HoHeader HoLib (Map.Map ModuleGroup HoTcInfo) (Map.Map ModuleGroup HoBuild)
+data Library = Library {
+    libHoHeader :: HoHeader,
+    libHoLib :: HoLib,
+    libTcMap :: (Map.Map ModuleGroup HoTcInfo),
+    libBuildMap :: (Map.Map ModuleGroup HoBuild),
+    libFileName :: FilePath
+    }
hunk ./src/Ho/Type.hs 120
-    showsPrec n (Library hoh _ _ _) = showsPrec n (hohHash hoh)
+    showsPrec n lib = showsPrec n (hohHash $ libHoHeader lib)