1 {-# LANGUAGE RecordWildCards, TypeSynonymInstances, StandaloneDeriving, GeneralizedNewtypeDeriving #-}
2 -----------------------------------------------------------------------------
4 -- Module : Distribution.InstalledPackageInfo.Binary
5 -- Copyright : (c) The University of Glasgow 2009
7 -- Maintainer : cvs-ghc@haskell.org
8 -- Portability : portable
11 module Distribution.InstalledPackageInfo.Binary (
16 import Distribution.Version
17 import Distribution.Package
18 import Distribution.License
19 import Distribution.InstalledPackageInfo as IPI
20 import Data.Binary as Bin
22 readBinPackageDB :: Binary m => FilePath -> IO [InstalledPackageInfo_ m]
23 readBinPackageDB file = Bin.decodeFile file
25 writeBinPackageDB :: Binary m => FilePath -> [InstalledPackageInfo_ m] -> IO ()
26 writeBinPackageDB file ipis = Bin.encodeFile file ipis
28 instance Binary m => Binary (InstalledPackageInfo_ m) where
29 put = putInstalledPackageInfo
30 get = getInstalledPackageInfo
32 putInstalledPackageInfo :: Binary m => InstalledPackageInfo_ m -> Put
33 putInstalledPackageInfo ipi = do
34 put (sourcePackageId ipi)
35 put (installedPackageId ipi)
46 put (exposedModules ipi)
47 put (hiddenModules ipi)
51 put (extraLibraries ipi)
52 put (extraGHCiLibraries ipi)
59 put (frameworkDirs ipi)
61 put (haddockInterfaces ipi)
62 put (haddockHTMLs ipi)
64 getInstalledPackageInfo :: Binary m => Get (InstalledPackageInfo_ m)
65 getInstalledPackageInfo = do
66 sourcePackageId <- get
67 installedPackageId <- get
84 extraGHCiLibraries <- get
93 haddockInterfaces <- get
95 return InstalledPackageInfo{..}
97 instance Binary PackageIdentifier where
98 put pid = do put (pkgName pid); put (pkgVersion pid)
102 return PackageIdentifier{..}
104 instance Binary License where
105 put (GPL v) = do putWord8 0; put v
106 put (LGPL v) = do putWord8 1; put v
107 put BSD3 = do putWord8 2
108 put BSD4 = do putWord8 3
109 put MIT = do putWord8 4
110 put PublicDomain = do putWord8 5
111 put AllRightsReserved = do putWord8 6
112 put OtherLicense = do putWord8 7
113 put (UnknownLicense str) = do putWord8 8; put str
118 0 -> do v <- get; return (GPL v)
119 1 -> do v <- get; return (LGPL v)
123 5 -> return PublicDomain
124 6 -> return AllRightsReserved
125 7 -> return OtherLicense
126 8 -> do str <- get; return (UnknownLicense str)
128 instance Binary Version where
129 put v = do put (versionBranch v); put (versionTags v)
130 get = do versionBranch <- get; versionTags <- get; return Version{..}
132 deriving instance Binary PackageName
133 deriving instance Binary InstalledPackageId