Distribution.InstalledPackageInfo

Cabal-2.1.0.0: A framework for packaging Haskell software

Copyright | (c) The University of Glasgow 2004
Maintainer | libraries@haskell.org
Portability | portable
Safe Haskell | None
Language | Haskell2010

Distribution.InstalledPackageInfo

Description

This is the information about an installed package that is communicated to the `ghc-pkg` program in order to register a package. `ghc-pkg` now consumes this package format (as of version 6.4). This is specific to GHC at the moment.

The `.cabal` file format is for describing a package that is not yet installed. It has a lot of flexibility, like conditionals and dependency ranges. As such, that format is not at all suitable for describing a package that has already been built and installed. By the time we get to that stage, we have resolved all conditionals and resolved dependency version constraints to exact versions of dependent packages. So, this module defines the `InstalledPackageInfo` data structure that contains all the info we keep about an installed package. There is a parser and pretty printer. The textual format is rather simpler than the `.cabal` format: there are no sections, for example.

Synopsis

- data InstalledPackageInfo = InstalledPackageInfo {
  - sourcePackageId :: PackageId
  - sourceLibName :: Maybe UnqualComponentName
  - installedComponentId_ :: ComponentId
  - installedUnitId :: UnitId
  - instantiatedWith :: [(ModuleName, OpenModule)]
  - compatPackageKey :: String
  - license :: Either License License
  - copyright :: String
  - maintainer :: String
  - author :: String
  - stability :: String
  - homepage :: String
  - pkgUrl :: String
  - synopsis :: String
  - description :: String
  - category :: String
  - abiHash :: AbiHash
  - indefinite :: Bool
  - exposed :: Bool
  - exposedModules :: [ExposedModule]
  - hiddenModules :: [ModuleName]
  - trusted :: Bool
  - importDirs :: [FilePath]
  - libraryDirs :: [FilePath]
  - libraryDynDirs :: [FilePath]
  - dataDir :: FilePath
  - hsLibraries :: [String]
  - extraLibraries :: [String]
  - extraGHCiLibraries :: [String]
  - includeDirs :: [FilePath]
  - includes :: [String]
  - depends :: [UnitId]
  - abiDepends :: [AbiDependency]
  - ccOptions :: [String]
  - ldOptions :: [String]
  - frameworkDirs :: [FilePath]
  - frameworks :: [String]
  - haddockInterfaces :: [FilePath]
  - haddockHTMLs :: [FilePath]
  - pkgRoot :: Maybe FilePath
  }
- installedPackageId :: InstalledPackageInfo -> UnitId
- installedComponentId :: InstalledPackageInfo -> ComponentId
- installedOpenUnitId :: InstalledPackageInfo -> OpenUnitId
- sourceComponentName :: InstalledPackageInfo -> ComponentName
- requiredSignatures :: InstalledPackageInfo -> Set ModuleName
- data ExposedModule = ExposedModule {
  - exposedName :: ModuleName
  - exposedReexport :: Maybe OpenModule
  }
- data AbiDependency = AbiDependency {
  - depUnitId :: UnitId
  - depAbiHash :: AbiHash
  }
- data ParseResult a
  - = ParseFailed PError
  - | ParseOk [PWarning] a
- data PError
  - = AmbiguousParse String LineNo
  - | NoParse String LineNo
  - | TabsError LineNo
  - | FromString String (Maybe LineNo)
- data PWarning
- emptyInstalledPackageInfo :: InstalledPackageInfo
- parseInstalledPackageInfo :: String -> ParseResult InstalledPackageInfo
- showInstalledPackageInfo :: InstalledPackageInfo -> String
- showFullInstalledPackageInfo :: InstalledPackageInfo -> String
- showInstalledPackageInfoField :: String -> Maybe (InstalledPackageInfo -> String)
- showSimpleInstalledPackageInfoField :: String -> Maybe (InstalledPackageInfo -> String)

# Documentation

data InstalledPackageInfo Source #

Constructors

InstalledPackageInfo |
Fields sourcePackageId :: PackageId sourceLibName :: Maybe UnqualComponentName installedComponentId_ :: ComponentId installedUnitId :: UnitId instantiatedWith :: [(ModuleName, OpenModule)] compatPackageKey :: String license :: Either License License copyright :: String maintainer :: String author :: String stability :: String homepage :: String pkgUrl :: String synopsis :: String description :: String category :: String abiHash :: AbiHash indefinite :: Bool exposed :: Bool exposedModules :: [ExposedModule] hiddenModules :: [ModuleName] trusted :: Bool importDirs :: [FilePath] libraryDirs :: [FilePath] libraryDynDirs :: [FilePath] overrides `libraryDirs` dataDir :: FilePath hsLibraries :: [String] extraLibraries :: [String] extraGHCiLibraries :: [String] includeDirs :: [FilePath] includes :: [String] depends :: [UnitId] abiDepends :: [AbiDependency] ccOptions :: [String] ldOptions :: [String] frameworkDirs :: [FilePath] frameworks :: [String] haddockInterfaces :: [FilePath] haddockHTMLs :: [FilePath] pkgRoot :: Maybe FilePath

Instances

Eq InstalledPackageInfo Source # |
Instance details Methods (==) :: InstalledPackageInfo -> InstalledPackageInfo -> Bool # (/=) :: InstalledPackageInfo -> InstalledPackageInfo -> Bool #
Read InstalledPackageInfo Source # |
Instance details Methods readsPrec :: Int -> ReadS InstalledPackageInfo Source # readList :: ReadS [InstalledPackageInfo] Source # readPrec :: ReadPrec InstalledPackageInfo Source # readListPrec :: ReadPrec [InstalledPackageInfo] Source #
Show InstalledPackageInfo Source # |
Instance details Methods showsPrec :: Int -> InstalledPackageInfo -> ShowS Source # show :: InstalledPackageInfo -> String Source # showList :: [InstalledPackageInfo] -> ShowS Source #
Generic InstalledPackageInfo Source # |
Instance details Associated Types type Rep InstalledPackageInfo :: * -> * Source # Methods from :: InstalledPackageInfo -> Rep InstalledPackageInfo x Source # to :: Rep InstalledPackageInfo x -> InstalledPackageInfo Source #
NFData InstalledPackageInfo Source # |
Instance details Methods rnf :: InstalledPackageInfo -> () Source #
Binary InstalledPackageInfo Source # |
Instance details Methods put :: InstalledPackageInfo -> Put Source # get :: Get InstalledPackageInfo Source # putList :: [InstalledPackageInfo] -> Put Source #
IsNode InstalledPackageInfo Source # |
Instance details Associated Types type Key InstalledPackageInfo :: * Source # Methods nodeKey :: InstalledPackageInfo -> Key InstalledPackageInfo Source # nodeNeighbors :: InstalledPackageInfo -> [Key InstalledPackageInfo] Source #
PackageInstalled InstalledPackageInfo Source # |
Instance details Methods installedDepends :: InstalledPackageInfo -> [UnitId] Source #
HasUnitId InstalledPackageInfo Source # |
Instance details Methods installedUnitId :: InstalledPackageInfo -> UnitId Source #
HasMungedPackageId InstalledPackageInfo Source # |
Instance details Methods mungedId :: InstalledPackageInfo -> MungedPackageId Source #
Package InstalledPackageInfo Source # |
Instance details Methods packageId :: InstalledPackageInfo -> PackageIdentifier Source #
Semigroup (PackageIndex InstalledPackageInfo) # |
Instance details Methods (<>) :: PackageIndex InstalledPackageInfo -> PackageIndex InstalledPackageInfo -> PackageIndex InstalledPackageInfo Source # sconcat :: NonEmpty (PackageIndex InstalledPackageInfo) -> PackageIndex InstalledPackageInfo Source # stimes :: Integral b => b -> PackageIndex InstalledPackageInfo -> PackageIndex InstalledPackageInfo Source #
Monoid (PackageIndex InstalledPackageInfo) # |
Instance details Methods mempty :: PackageIndex InstalledPackageInfo Source # mappend :: PackageIndex InstalledPackageInfo -> PackageIndex InstalledPackageInfo -> PackageIndex InstalledPackageInfo Source # mconcat :: [PackageIndex InstalledPackageInfo] -> PackageIndex InstalledPackageInfo Source #
type Rep InstalledPackageInfo Source # |
Instance details type Rep InstalledPackageInfo = D1 (MetaData "InstalledPackageInfo" "Distribution.Types.InstalledPackageInfo" "Cabal-2.1.0.0" False) (C1 (MetaCons "InstalledPackageInfo" PrefixI True) (((((S1 (MetaSel (Just "sourcePackageId") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 PackageId) :*: S1 (MetaSel (Just "sourceLibName") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Maybe UnqualComponentName))) :*: (S1 (MetaSel (Just "installedComponentId_") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 ComponentId) :*: (S1 (MetaSel (Just "installedUnitId") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 UnitId) :*: S1 (MetaSel (Just "instantiatedWith") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [(ModuleName, OpenModule)])))) :*: ((S1 (MetaSel (Just "compatPackageKey") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 String) :*: S1 (MetaSel (Just "license") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Either License License))) :*: (S1 (MetaSel (Just "copyright") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 String) :*: (S1 (MetaSel (Just "maintainer") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 String) :*: S1 (MetaSel (Just "author") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 String))))) :*: (((S1 (MetaSel (Just "stability") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 String) :*: S1 (MetaSel (Just "homepage") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 String)) :*: (S1 (MetaSel (Just "pkgUrl") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 String) :*: (S1 (MetaSel (Just "synopsis") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 String) :*: S1 (MetaSel (Just "description") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 String)))) :*: ((S1 (MetaSel (Just "category") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 String) :*: S1 (MetaSel (Just "abiHash") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 AbiHash)) :*: (S1 (MetaSel (Just "indefinite") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Bool) :*: (S1 (MetaSel (Just "exposed") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Bool) :*: S1 (MetaSel (Just "exposedModules") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [ExposedModule])))))) :*: ((((S1 (MetaSel (Just "hiddenModules") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [ModuleName]) :*: S1 (MetaSel (Just "trusted") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Bool)) :*: (S1 (MetaSel (Just "importDirs") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [FilePath]) :*: (S1 (MetaSel (Just "libraryDirs") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [FilePath]) :*: S1 (MetaSel (Just "libraryDynDirs") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [FilePath])))) :*: ((S1 (MetaSel (Just "dataDir") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 FilePath) :*: S1 (MetaSel (Just "hsLibraries") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [String])) :*: (S1 (MetaSel (Just "extraLibraries") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [String]) :*: (S1 (MetaSel (Just "extraGHCiLibraries") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [String]) :*: S1 (MetaSel (Just "includeDirs") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [FilePath]))))) :*: (((S1 (MetaSel (Just "includes") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [String]) :*: S1 (MetaSel (Just "depends") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [UnitId])) :*: (S1 (MetaSel (Just "abiDepends") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [AbiDependency]) :*: (S1 (MetaSel (Just "ccOptions") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [String]) :*: S1 (MetaSel (Just "ldOptions") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [String])))) :*: ((S1 (MetaSel (Just "frameworkDirs") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [FilePath]) :*: S1 (MetaSel (Just "frameworks") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [String])) :*: (S1 (MetaSel (Just "haddockInterfaces") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [FilePath]) :*: (S1 (MetaSel (Just "haddockHTMLs") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [FilePath]) :*: S1 (MetaSel (Just "pkgRoot") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Maybe FilePath)))))))))
type Key InstalledPackageInfo Source # |
Instance details type Key InstalledPackageInfo = UnitId

installedPackageId :: InstalledPackageInfo -> UnitId Source #

Deprecated: Use installedUnitId instead

Backwards compatibility with Cabal pre-1.24.

This type synonym is slightly awful because in cabal-install we define an `InstalledPackageId` but it's a ComponentId, not a UnitId!

installedComponentId :: InstalledPackageInfo -> ComponentId Source #

installedOpenUnitId :: InstalledPackageInfo -> OpenUnitId Source #

Get the indefinite unit identity representing this package. This IS NOT guaranteed to give you a substitution; for instantiated packages you will get `DefiniteUnitId (installedUnitId ipi)`. For indefinite libraries, however, you will correctly get an `OpenUnitId` with the appropriate `OpenModuleSubst`.

sourceComponentName :: InstalledPackageInfo -> ComponentName Source #

requiredSignatures :: InstalledPackageInfo -> Set ModuleName Source #

Returns the set of module names which need to be filled for an indefinite package, or the empty set if the package is definite.

data ExposedModule Source #

Constructors

ExposedModule |
Fields exposedName :: ModuleName exposedReexport :: Maybe OpenModule

Instances

Eq ExposedModule Source # |
Instance details Methods (==) :: ExposedModule -> ExposedModule -> Bool # (/=) :: ExposedModule -> ExposedModule -> Bool #
Read ExposedModule Source # |
Instance details Methods readsPrec :: Int -> ReadS ExposedModule Source # readList :: ReadS [ExposedModule] Source # readPrec :: ReadPrec ExposedModule Source # readListPrec :: ReadPrec [ExposedModule] Source #
Show ExposedModule Source # |
Instance details Methods showsPrec :: Int -> ExposedModule -> ShowS Source # show :: ExposedModule -> String Source # showList :: [ExposedModule] -> ShowS Source #
Generic ExposedModule Source # |
Instance details Associated Types type Rep ExposedModule :: * -> * Source # Methods from :: ExposedModule -> Rep ExposedModule x Source # to :: Rep ExposedModule x -> ExposedModule Source #
NFData ExposedModule Source # |
Instance details Methods rnf :: ExposedModule -> () Source #
Binary ExposedModule Source # |
Instance details Methods put :: ExposedModule -> Put Source # get :: Get ExposedModule Source # putList :: [ExposedModule] -> Put Source #
Parsec ExposedModule Source # |
Instance details Methods parsec :: CabalParsing m => m ExposedModule Source #
Pretty ExposedModule Source # |
Instance details Methods pretty :: ExposedModule -> Doc Source #
Text ExposedModule Source # |
Instance details Methods disp :: ExposedModule -> Doc Source # parse :: ReadP r ExposedModule Source #
type Rep ExposedModule Source # |
Instance details type Rep ExposedModule = D1 (MetaData "ExposedModule" "Distribution.Types.ExposedModule" "Cabal-2.1.0.0" False) (C1 (MetaCons "ExposedModule" PrefixI True) (S1 (MetaSel (Just "exposedName") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 ModuleName) :*: S1 (MetaSel (Just "exposedReexport") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Maybe OpenModule))))

data AbiDependency Source #

An ABI dependency is a dependency on a library which also records the ABI hash (`abiHash`) of the library it depends on.

The primary utility of this is to enable an extra sanity when GHC loads libraries: it can check if the dependency has a matching ABI and if not, refuse to load this library. This information is critical if we are shadowing libraries; differences in the ABI hash let us know what packages get shadowed by the new version of a package.

Constructors

AbiDependency |
Fields depUnitId :: UnitId depAbiHash :: AbiHash

Instances

Eq AbiDependency Source # |
Instance details Methods (==) :: AbiDependency -> AbiDependency -> Bool # (/=) :: AbiDependency -> AbiDependency -> Bool #
Read AbiDependency Source # |
Instance details Methods readsPrec :: Int -> ReadS AbiDependency Source # readList :: ReadS [AbiDependency] Source # readPrec :: ReadPrec AbiDependency Source # readListPrec :: ReadPrec [AbiDependency] Source #
Show AbiDependency Source # |
Instance details Methods showsPrec :: Int -> AbiDependency -> ShowS Source # show :: AbiDependency -> String Source # showList :: [AbiDependency] -> ShowS Source #
Generic AbiDependency Source # |
Instance details Associated Types type Rep AbiDependency :: * -> * Source # Methods from :: AbiDependency -> Rep AbiDependency x Source # to :: Rep AbiDependency x -> AbiDependency Source #
NFData AbiDependency Source # |
Instance details Methods rnf :: AbiDependency -> () Source #
Binary AbiDependency Source # |
Instance details Methods put :: AbiDependency -> Put Source # get :: Get AbiDependency Source # putList :: [AbiDependency] -> Put Source #
Parsec AbiDependency Source # |
Instance details Methods parsec :: CabalParsing m => m AbiDependency Source #
Pretty AbiDependency Source # |
Instance details Methods pretty :: AbiDependency -> Doc Source #
Text AbiDependency Source # |
Instance details Methods disp :: AbiDependency -> Doc Source # parse :: ReadP r AbiDependency Source #
type Rep AbiDependency Source # |
Instance details type Rep AbiDependency = D1 (MetaData "AbiDependency" "Distribution.Types.AbiDependency" "Cabal-2.1.0.0" False) (C1 (MetaCons "AbiDependency" PrefixI True) (S1 (MetaSel (Just "depUnitId") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 UnitId) :*: S1 (MetaSel (Just "depAbiHash") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 AbiHash)))

data ParseResult a Source #

Constructors

ParseFailed PError |
ParseOk [PWarning] a |

Instances

Monad ParseResult Source # |
Instance details Methods (>>=) :: ParseResult a -> (a -> ParseResult b) -> ParseResult b Source # (>>) :: ParseResult a -> ParseResult b -> ParseResult b Source # return :: a -> ParseResult a Source # fail :: String -> ParseResult a Source #
Functor ParseResult Source # |
Instance details Methods fmap :: (a -> b) -> ParseResult a -> ParseResult b Source # (<$) :: a -> ParseResult b -> ParseResult a Source #
MonadFail ParseResult Source # |
Instance details Methods fail :: String -> ParseResult a Source #
Applicative ParseResult Source # |
Instance details Methods pure :: a -> ParseResult a Source # (<*>) :: ParseResult (a -> b) -> ParseResult a -> ParseResult b Source # liftA2 :: (a -> b -> c) -> ParseResult a -> ParseResult b -> ParseResult c Source # (*>) :: ParseResult a -> ParseResult b -> ParseResult b Source # (<*) :: ParseResult a -> ParseResult b -> ParseResult a Source #
Show a => Show (ParseResult a) Source # |
Instance details Methods showsPrec :: Int -> ParseResult a -> ShowS Source # show :: ParseResult a -> String Source # showList :: [ParseResult a] -> ShowS Source #

data PError Source #

Constructors

AmbiguousParse String LineNo |
NoParse String LineNo |
TabsError LineNo |
FromString String (Maybe LineNo) |

Instances

Eq PError Source # |
Instance details Methods (==) :: PError -> PError -> Bool # (/=) :: PError -> PError -> Bool #
Show PError Source # |
Instance details Methods showsPrec :: Int -> PError -> ShowS Source # show :: PError -> String Source # showList :: [PError] -> ShowS Source #

data PWarning Source #

Instances

Eq PWarning Source # |
Instance details Methods (==) :: PWarning -> PWarning -> Bool # (/=) :: PWarning -> PWarning -> Bool #
Show PWarning Source # |
Instance details Methods showsPrec :: Int -> PWarning -> ShowS Source # show :: PWarning -> String Source # showList :: [PWarning] -> ShowS Source #

emptyInstalledPackageInfo :: InstalledPackageInfo Source #

parseInstalledPackageInfo :: String -> ParseResult InstalledPackageInfo Source #

showInstalledPackageInfo :: InstalledPackageInfo -> String Source #

Pretty print `InstalledPackageInfo`.

`pkgRoot` isn't printed, as ghc-pkg prints it manually (as GHC-8.4).

showFullInstalledPackageInfo :: InstalledPackageInfo -> String Source #

The variant of `showInstalledPackageInfo` which outputs `pkgroot` field too.

showInstalledPackageInfoField :: String -> Maybe (InstalledPackageInfo -> String) Source #

    >>> let ipi = emptyInstalledPackageInfo { maintainer = "Tester" }
    >>> fmap ($ ipi) $ showInstalledPackageInfoField "maintainer"
    Just "maintainer: Tester"

showSimpleInstalledPackageInfoField :: String -> Maybe (InstalledPackageInfo -> String) Source #