{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeFamilies #-}
module Distribution.Client.Types.ConfiguredPackage (
ConfiguredPackage (..),
) where
import Distribution.Client.Compat.Prelude
import Prelude ()
import Distribution.Compat.Graph (IsNode (..))
import Distribution.Package (newSimpleUnitId, HasMungedPackageId (..), HasUnitId (..), Package (..), PackageInstalled (..), UnitId)
import Distribution.Types.Flag (FlagAssignment)
import Distribution.Types.ComponentName
import Distribution.Types.LibraryName (LibraryName (..))
import Distribution.Types.MungedPackageId (computeCompatPackageId)
import Distribution.Simple.Utils (ordNub)
import Distribution.Client.Types.ConfiguredId
import Distribution.Solver.Types.OptionalStanza (OptionalStanzaSet)
import Distribution.Solver.Types.PackageFixedDeps
import Distribution.Solver.Types.SourcePackage (SourcePackage)
import qualified Distribution.Solver.Types.ComponentDeps as CD
data ConfiguredPackage loc = ConfiguredPackage
{ ConfiguredPackage loc -> InstalledPackageId
confPkgId :: InstalledPackageId
, ConfiguredPackage loc -> SourcePackage loc
confPkgSource :: SourcePackage loc
, ConfiguredPackage loc -> FlagAssignment
confPkgFlags :: FlagAssignment
, ConfiguredPackage loc -> OptionalStanzaSet
confPkgStanzas :: OptionalStanzaSet
, ConfiguredPackage loc -> ComponentDeps [ConfiguredId]
confPkgDeps :: CD.ComponentDeps [ConfiguredId]
}
deriving (ConfiguredPackage loc -> ConfiguredPackage loc -> Bool
(ConfiguredPackage loc -> ConfiguredPackage loc -> Bool)
-> (ConfiguredPackage loc -> ConfiguredPackage loc -> Bool)
-> Eq (ConfiguredPackage loc)
forall loc.
Eq loc =>
ConfiguredPackage loc -> ConfiguredPackage loc -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ConfiguredPackage loc -> ConfiguredPackage loc -> Bool
$c/= :: forall loc.
Eq loc =>
ConfiguredPackage loc -> ConfiguredPackage loc -> Bool
== :: ConfiguredPackage loc -> ConfiguredPackage loc -> Bool
$c== :: forall loc.
Eq loc =>
ConfiguredPackage loc -> ConfiguredPackage loc -> Bool
Eq, Int -> ConfiguredPackage loc -> ShowS
[ConfiguredPackage loc] -> ShowS
ConfiguredPackage loc -> String
(Int -> ConfiguredPackage loc -> ShowS)
-> (ConfiguredPackage loc -> String)
-> ([ConfiguredPackage loc] -> ShowS)
-> Show (ConfiguredPackage loc)
forall loc. Show loc => Int -> ConfiguredPackage loc -> ShowS
forall loc. Show loc => [ConfiguredPackage loc] -> ShowS
forall loc. Show loc => ConfiguredPackage loc -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ConfiguredPackage loc] -> ShowS
$cshowList :: forall loc. Show loc => [ConfiguredPackage loc] -> ShowS
show :: ConfiguredPackage loc -> String
$cshow :: forall loc. Show loc => ConfiguredPackage loc -> String
showsPrec :: Int -> ConfiguredPackage loc -> ShowS
$cshowsPrec :: forall loc. Show loc => Int -> ConfiguredPackage loc -> ShowS
Show, (forall x. ConfiguredPackage loc -> Rep (ConfiguredPackage loc) x)
-> (forall x.
Rep (ConfiguredPackage loc) x -> ConfiguredPackage loc)
-> Generic (ConfiguredPackage loc)
forall x. Rep (ConfiguredPackage loc) x -> ConfiguredPackage loc
forall x. ConfiguredPackage loc -> Rep (ConfiguredPackage loc) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall loc x.
Rep (ConfiguredPackage loc) x -> ConfiguredPackage loc
forall loc x.
ConfiguredPackage loc -> Rep (ConfiguredPackage loc) x
$cto :: forall loc x.
Rep (ConfiguredPackage loc) x -> ConfiguredPackage loc
$cfrom :: forall loc x.
ConfiguredPackage loc -> Rep (ConfiguredPackage loc) x
Generic)
instance HasConfiguredId (ConfiguredPackage loc) where
configuredId :: ConfiguredPackage loc -> ConfiguredId
configuredId ConfiguredPackage loc
pkg = PackageId
-> Maybe ComponentName -> InstalledPackageId -> ConfiguredId
ConfiguredId (ConfiguredPackage loc -> PackageId
forall pkg. Package pkg => pkg -> PackageId
packageId ConfiguredPackage loc
pkg) (ComponentName -> Maybe ComponentName
forall a. a -> Maybe a
Just (LibraryName -> ComponentName
CLibName LibraryName
LMainLibName)) (ConfiguredPackage loc -> InstalledPackageId
forall loc. ConfiguredPackage loc -> InstalledPackageId
confPkgId ConfiguredPackage loc
pkg)
instance PackageFixedDeps (ConfiguredPackage loc) where
depends :: ConfiguredPackage loc -> ComponentDeps [UnitId]
depends = ([ConfiguredId] -> [UnitId])
-> ComponentDeps [ConfiguredId] -> ComponentDeps [UnitId]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((ConfiguredId -> UnitId) -> [ConfiguredId] -> [UnitId]
forall a b. (a -> b) -> [a] -> [b]
map (InstalledPackageId -> UnitId
newSimpleUnitId (InstalledPackageId -> UnitId)
-> (ConfiguredId -> InstalledPackageId) -> ConfiguredId -> UnitId
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConfiguredId -> InstalledPackageId
confInstId)) (ComponentDeps [ConfiguredId] -> ComponentDeps [UnitId])
-> (ConfiguredPackage loc -> ComponentDeps [ConfiguredId])
-> ConfiguredPackage loc
-> ComponentDeps [UnitId]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConfiguredPackage loc -> ComponentDeps [ConfiguredId]
forall loc. ConfiguredPackage loc -> ComponentDeps [ConfiguredId]
confPkgDeps
instance IsNode (ConfiguredPackage loc) where
type Key (ConfiguredPackage loc) = UnitId
nodeKey :: ConfiguredPackage loc -> Key (ConfiguredPackage loc)
nodeKey = InstalledPackageId -> UnitId
newSimpleUnitId (InstalledPackageId -> UnitId)
-> (ConfiguredPackage loc -> InstalledPackageId)
-> ConfiguredPackage loc
-> UnitId
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConfiguredPackage loc -> InstalledPackageId
forall loc. ConfiguredPackage loc -> InstalledPackageId
confPkgId
nodeNeighbors :: ConfiguredPackage loc -> [Key (ConfiguredPackage loc)]
nodeNeighbors = [UnitId] -> [UnitId]
forall a. Ord a => [a] -> [a]
ordNub ([UnitId] -> [UnitId])
-> (ConfiguredPackage loc -> [UnitId])
-> ConfiguredPackage loc
-> [UnitId]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ComponentDeps [UnitId] -> [UnitId]
forall a. Monoid a => ComponentDeps a -> a
CD.flatDeps (ComponentDeps [UnitId] -> [UnitId])
-> (ConfiguredPackage loc -> ComponentDeps [UnitId])
-> ConfiguredPackage loc
-> [UnitId]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConfiguredPackage loc -> ComponentDeps [UnitId]
forall pkg. PackageFixedDeps pkg => pkg -> ComponentDeps [UnitId]
depends
instance (Binary loc) => Binary (ConfiguredPackage loc)
instance Package (ConfiguredPackage loc) where
packageId :: ConfiguredPackage loc -> PackageId
packageId ConfiguredPackage loc
cpkg = SourcePackage loc -> PackageId
forall pkg. Package pkg => pkg -> PackageId
packageId (ConfiguredPackage loc -> SourcePackage loc
forall loc. ConfiguredPackage loc -> SourcePackage loc
confPkgSource ConfiguredPackage loc
cpkg)
instance HasMungedPackageId (ConfiguredPackage loc) where
mungedId :: ConfiguredPackage loc -> MungedPackageId
mungedId ConfiguredPackage loc
cpkg = PackageId -> LibraryName -> MungedPackageId
computeCompatPackageId (ConfiguredPackage loc -> PackageId
forall pkg. Package pkg => pkg -> PackageId
packageId ConfiguredPackage loc
cpkg) LibraryName
LMainLibName
instance HasUnitId (ConfiguredPackage loc) where
installedUnitId :: ConfiguredPackage loc -> UnitId
installedUnitId = InstalledPackageId -> UnitId
newSimpleUnitId (InstalledPackageId -> UnitId)
-> (ConfiguredPackage loc -> InstalledPackageId)
-> ConfiguredPackage loc
-> UnitId
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConfiguredPackage loc -> InstalledPackageId
forall loc. ConfiguredPackage loc -> InstalledPackageId
confPkgId
instance PackageInstalled (ConfiguredPackage loc) where
installedDepends :: ConfiguredPackage loc -> [UnitId]
installedDepends = ComponentDeps [UnitId] -> [UnitId]
forall a. Monoid a => ComponentDeps a -> a
CD.flatDeps (ComponentDeps [UnitId] -> [UnitId])
-> (ConfiguredPackage loc -> ComponentDeps [UnitId])
-> ConfiguredPackage loc
-> [UnitId]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConfiguredPackage loc -> ComponentDeps [UnitId]
forall pkg. PackageFixedDeps pkg => pkg -> ComponentDeps [UnitId]
depends