{-# LANGUAGE CPP, RecordWildCards, NamedFieldPuns, RankNTypes #-}
{-# LANGUAGE ViewPatterns #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoMonoLocalBinds #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveFunctor #-}
module Distribution.Client.ProjectPlanning (
ElaboratedInstallPlan,
ElaboratedConfiguredPackage(..),
ElaboratedPlanPackage,
ElaboratedSharedConfig(..),
ElaboratedReadyPackage,
BuildStyle(..),
CabalFileText,
rebuildProjectConfig,
rebuildInstallPlan,
availableTargets,
AvailableTarget(..),
AvailableTargetStatus(..),
TargetRequested(..),
ComponentTarget(..),
SubComponentTarget(..),
showComponentTarget,
nubComponentTargets,
pruneInstallPlanToTargets,
TargetAction(..),
pruneInstallPlanToDependencies,
CannotPruneDependencies(..),
pkgHasEphemeralBuildTargets,
elabBuildTargetWholeComponents,
configureCompiler,
setupHsScriptOptions,
setupHsConfigureFlags,
setupHsConfigureArgs,
setupHsBuildFlags,
setupHsBuildArgs,
setupHsReplFlags,
setupHsReplArgs,
setupHsTestFlags,
setupHsTestArgs,
setupHsBenchFlags,
setupHsBenchArgs,
setupHsCopyFlags,
setupHsRegisterFlags,
setupHsHaddockFlags,
setupHsHaddockArgs,
packageHashInputs,
binDirectoryFor,
binDirectories,
storePackageInstallDirs,
storePackageInstallDirs'
) where
import Prelude ()
import Distribution.Client.Compat.Prelude
import Distribution.Client.HashValue
import Distribution.Client.HttpUtils
import Distribution.Client.ProjectPlanning.Types as Ty
import Distribution.Client.PackageHash
import Distribution.Client.RebuildMonad
import Distribution.Client.Store
import Distribution.Client.ProjectConfig
import Distribution.Client.ProjectConfig.Legacy
import Distribution.Client.ProjectPlanOutput
import Distribution.Client.Types
import qualified Distribution.Client.InstallPlan as InstallPlan
import qualified Distribution.Client.SolverInstallPlan as SolverInstallPlan
import Distribution.Client.Dependency
import Distribution.Client.Dependency.Types
import qualified Distribution.Client.IndexUtils as IndexUtils
import Distribution.Client.Utils (incVersion)
import Distribution.Client.Targets (userToPackageConstraint)
import Distribution.Client.DistDirLayout
import Distribution.Client.SetupWrapper
import Distribution.Client.JobControl
import Distribution.Client.FetchUtils
import Distribution.Client.Config
import qualified Hackage.Security.Client as Sec
import Distribution.Client.Setup hiding (packageName, cabalVersion)
import Distribution.Utils.NubList
import Distribution.Utils.LogProgress
import Distribution.Utils.MapAccum
import qualified Distribution.Client.BuildReports.Storage as BuildReports
( storeLocal, fromPlanningFailure )
import qualified Distribution.Solver.Types.ComponentDeps as CD
import Distribution.Solver.Types.ComponentDeps (ComponentDeps)
import Distribution.Solver.Types.ConstraintSource
import Distribution.Solver.Types.LabeledPackageConstraint
import Distribution.Solver.Types.OptionalStanza
import Distribution.Solver.Types.PkgConfigDb
import Distribution.Solver.Types.ResolverPackage
import Distribution.Solver.Types.SolverId
import Distribution.Solver.Types.SolverPackage
import Distribution.Solver.Types.InstSolverPackage
import Distribution.Solver.Types.SourcePackage
import Distribution.Solver.Types.Settings
import Distribution.CabalSpecVersion
import Distribution.ModuleName
import Distribution.Package
import Distribution.Types.AnnotatedId
import Distribution.Types.ComponentName
import Distribution.Types.DumpBuildInfo
( DumpBuildInfo (..) )
import Distribution.Types.LibraryName
import Distribution.Types.GivenComponent
(GivenComponent(..))
import Distribution.Types.PackageVersionConstraint
import Distribution.Types.PkgconfigDependency
import Distribution.Types.UnqualComponentName
import Distribution.System
import qualified Distribution.PackageDescription as Cabal
import qualified Distribution.PackageDescription as PD
import qualified Distribution.PackageDescription.Configuration as PD
import Distribution.Simple.PackageIndex (InstalledPackageIndex)
import Distribution.Simple.Compiler
import qualified Distribution.Simple.GHC as GHC
import qualified Distribution.Simple.GHCJS as GHCJS
import Distribution.Simple.Program
import Distribution.Simple.Program.Db
import Distribution.Simple.Program.Find
import qualified Distribution.Simple.Setup as Cabal
import Distribution.Simple.Setup
(Flag(..), toFlag, flagToMaybe, flagToList, fromFlagOrDefault)
import qualified Distribution.Simple.Configure as Cabal
import qualified Distribution.Simple.LocalBuildInfo as Cabal
import Distribution.Simple.LocalBuildInfo
( Component(..), pkgComponents, componentBuildInfo
, componentName )
import qualified Distribution.Simple.InstallDirs as InstallDirs
import qualified Distribution.InstalledPackageInfo as IPI
import Distribution.Backpack.ConfiguredComponent
import Distribution.Backpack.LinkedComponent
import Distribution.Backpack.ComponentsGraph
import Distribution.Backpack.ModuleShape
import Distribution.Backpack.FullUnitId
import Distribution.Backpack
import Distribution.Types.ComponentInclude
import Distribution.Simple.Utils
import Distribution.Version
import qualified Distribution.Compat.Graph as Graph
import Distribution.Compat.Graph(IsNode(..))
import Data.Foldable (fold)
import Text.PrettyPrint (text, hang, quotes, colon, vcat, ($$), fsep, punctuate, comma)
import qualified Text.PrettyPrint as Disp
import qualified Data.Map as Map
import qualified Data.Set as Set
import Control.Monad.State as State
import Control.Exception (assert)
import Data.List (groupBy, deleteBy)
import qualified Data.List.NonEmpty as NE
import System.FilePath
sanityCheckElaboratedConfiguredPackage
:: ElaboratedSharedConfig
-> ElaboratedConfiguredPackage
-> a
-> a
sanityCheckElaboratedConfiguredPackage :: forall a.
ElaboratedSharedConfig -> ElaboratedConfiguredPackage -> a -> a
sanityCheckElaboratedConfiguredPackage ElaboratedSharedConfig
sharedConfig
elab :: ElaboratedConfiguredPackage
elab@ElaboratedConfiguredPackage{Bool
[String]
[Maybe PackageDB]
PackageDBStack
[PathTemplate]
[ComponentTarget]
Maybe String
Maybe CabalFileText
Maybe PathTemplate
Maybe TestShowDetails
Maybe PackageSourceHash
Maybe ComponentTarget
Map String String
Map String [String]
Map ModuleName Module
Map ModuleName OpenModule
OptionalStanzaMap (Maybe Bool)
OptionalStanzaSet
PackageIdentifier
ComponentRequestedSpec
UnitId
Version
FlagAssignment
PackageDescription
InstalledPackageId
DebugInfoLevel
OptimisationLevel
ProfDetailLevel
HaddockTarget
ModuleShape
InstallDirs String
DumpBuildInfo
UnresolvedPkgLoc
SetupScriptStyle
BuildStyle
ElaboratedPackageOrComponent
elabUnitId :: UnitId
elabComponentId :: InstalledPackageId
elabInstantiatedWith :: Map ModuleName Module
elabLinkedInstantiatedWith :: Map ModuleName OpenModule
elabIsCanonical :: Bool
elabPkgSourceId :: PackageIdentifier
elabModuleShape :: ModuleShape
elabFlagAssignment :: FlagAssignment
elabFlagDefaults :: FlagAssignment
elabPkgDescription :: PackageDescription
elabPkgSourceLocation :: UnresolvedPkgLoc
elabPkgSourceHash :: Maybe PackageSourceHash
elabLocalToProject :: Bool
elabBuildStyle :: BuildStyle
elabEnabledSpec :: ComponentRequestedSpec
elabStanzasAvailable :: OptionalStanzaSet
elabStanzasRequested :: OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: [Maybe PackageDB]
elabSetupPackageDBStack :: PackageDBStack
elabBuildPackageDBStack :: PackageDBStack
elabRegisterPackageDBStack :: PackageDBStack
elabInplaceSetupPackageDBStack :: PackageDBStack
elabInplaceBuildPackageDBStack :: PackageDBStack
elabInplaceRegisterPackageDBStack :: PackageDBStack
elabPkgDescriptionOverride :: Maybe CabalFileText
elabVanillaLib :: Bool
elabSharedLib :: Bool
elabStaticLib :: Bool
elabDynExe :: Bool
elabFullyStaticExe :: Bool
elabGHCiLib :: Bool
elabProfLib :: Bool
elabProfExe :: Bool
elabProfLibDetail :: ProfDetailLevel
elabProfExeDetail :: ProfDetailLevel
elabCoverage :: Bool
elabOptimization :: OptimisationLevel
elabSplitObjs :: Bool
elabSplitSections :: Bool
elabStripLibs :: Bool
elabStripExes :: Bool
elabDebugInfo :: DebugInfoLevel
elabDumpBuildInfo :: DumpBuildInfo
elabProgramPaths :: Map String String
elabProgramArgs :: Map String [String]
elabProgramPathExtra :: [String]
elabConfigureScriptArgs :: [String]
elabExtraLibDirs :: [String]
elabExtraLibDirsStatic :: [String]
elabExtraFrameworkDirs :: [String]
elabExtraIncludeDirs :: [String]
elabProgPrefix :: Maybe PathTemplate
elabProgSuffix :: Maybe PathTemplate
elabInstallDirs :: InstallDirs String
elabHaddockHoogle :: Bool
elabHaddockHtml :: Bool
elabHaddockHtmlLocation :: Maybe String
elabHaddockForeignLibs :: Bool
elabHaddockForHackage :: HaddockTarget
elabHaddockExecutables :: Bool
elabHaddockTestSuites :: Bool
elabHaddockBenchmarks :: Bool
elabHaddockInternal :: Bool
elabHaddockCss :: Maybe String
elabHaddockLinkedSource :: Bool
elabHaddockQuickJump :: Bool
elabHaddockHscolourCss :: Maybe String
elabHaddockContents :: Maybe PathTemplate
elabTestMachineLog :: Maybe PathTemplate
elabTestHumanLog :: Maybe PathTemplate
elabTestShowDetails :: Maybe TestShowDetails
elabTestKeepTix :: Bool
elabTestWrapper :: Maybe String
elabTestFailWhenNoTestSuites :: Bool
elabTestTestOptions :: [PathTemplate]
elabBenchmarkOptions :: [PathTemplate]
elabSetupScriptStyle :: SetupScriptStyle
elabSetupScriptCliVersion :: Version
elabConfigureTargets :: [ComponentTarget]
elabBuildTargets :: [ComponentTarget]
elabTestTargets :: [ComponentTarget]
elabBenchTargets :: [ComponentTarget]
elabReplTarget :: Maybe ComponentTarget
elabHaddockTargets :: [ComponentTarget]
elabBuildHaddocks :: Bool
elabPkgOrComp :: ElaboratedPackageOrComponent
elabUnitId :: ElaboratedConfiguredPackage -> UnitId
elabComponentId :: ElaboratedConfiguredPackage -> InstalledPackageId
elabInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName Module
elabLinkedInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName OpenModule
elabIsCanonical :: ElaboratedConfiguredPackage -> Bool
elabPkgSourceId :: ElaboratedConfiguredPackage -> PackageIdentifier
elabModuleShape :: ElaboratedConfiguredPackage -> ModuleShape
elabFlagAssignment :: ElaboratedConfiguredPackage -> FlagAssignment
elabFlagDefaults :: ElaboratedConfiguredPackage -> FlagAssignment
elabPkgDescription :: ElaboratedConfiguredPackage -> PackageDescription
elabPkgSourceLocation :: ElaboratedConfiguredPackage -> UnresolvedPkgLoc
elabPkgSourceHash :: ElaboratedConfiguredPackage -> Maybe PackageSourceHash
elabLocalToProject :: ElaboratedConfiguredPackage -> Bool
elabBuildStyle :: ElaboratedConfiguredPackage -> BuildStyle
elabEnabledSpec :: ElaboratedConfiguredPackage -> ComponentRequestedSpec
elabStanzasAvailable :: ElaboratedConfiguredPackage -> OptionalStanzaSet
elabStanzasRequested :: ElaboratedConfiguredPackage -> OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: ElaboratedConfiguredPackage -> [Maybe PackageDB]
elabSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabPkgDescriptionOverride :: ElaboratedConfiguredPackage -> Maybe CabalFileText
elabVanillaLib :: ElaboratedConfiguredPackage -> Bool
elabSharedLib :: ElaboratedConfiguredPackage -> Bool
elabStaticLib :: ElaboratedConfiguredPackage -> Bool
elabDynExe :: ElaboratedConfiguredPackage -> Bool
elabFullyStaticExe :: ElaboratedConfiguredPackage -> Bool
elabGHCiLib :: ElaboratedConfiguredPackage -> Bool
elabProfLib :: ElaboratedConfiguredPackage -> Bool
elabProfExe :: ElaboratedConfiguredPackage -> Bool
elabProfLibDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabProfExeDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabCoverage :: ElaboratedConfiguredPackage -> Bool
elabOptimization :: ElaboratedConfiguredPackage -> OptimisationLevel
elabSplitObjs :: ElaboratedConfiguredPackage -> Bool
elabSplitSections :: ElaboratedConfiguredPackage -> Bool
elabStripLibs :: ElaboratedConfiguredPackage -> Bool
elabStripExes :: ElaboratedConfiguredPackage -> Bool
elabDebugInfo :: ElaboratedConfiguredPackage -> DebugInfoLevel
elabDumpBuildInfo :: ElaboratedConfiguredPackage -> DumpBuildInfo
elabProgramPaths :: ElaboratedConfiguredPackage -> Map String String
elabProgramArgs :: ElaboratedConfiguredPackage -> Map String [String]
elabProgramPathExtra :: ElaboratedConfiguredPackage -> [String]
elabConfigureScriptArgs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirsStatic :: ElaboratedConfiguredPackage -> [String]
elabExtraFrameworkDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraIncludeDirs :: ElaboratedConfiguredPackage -> [String]
elabProgPrefix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabProgSuffix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabInstallDirs :: ElaboratedConfiguredPackage -> InstallDirs String
elabHaddockHoogle :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtml :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtmlLocation :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockForeignLibs :: ElaboratedConfiguredPackage -> Bool
elabHaddockForHackage :: ElaboratedConfiguredPackage -> HaddockTarget
elabHaddockExecutables :: ElaboratedConfiguredPackage -> Bool
elabHaddockTestSuites :: ElaboratedConfiguredPackage -> Bool
elabHaddockBenchmarks :: ElaboratedConfiguredPackage -> Bool
elabHaddockInternal :: ElaboratedConfiguredPackage -> Bool
elabHaddockCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockLinkedSource :: ElaboratedConfiguredPackage -> Bool
elabHaddockQuickJump :: ElaboratedConfiguredPackage -> Bool
elabHaddockHscolourCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockContents :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestMachineLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestHumanLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestShowDetails :: ElaboratedConfiguredPackage -> Maybe TestShowDetails
elabTestKeepTix :: ElaboratedConfiguredPackage -> Bool
elabTestWrapper :: ElaboratedConfiguredPackage -> Maybe String
elabTestFailWhenNoTestSuites :: ElaboratedConfiguredPackage -> Bool
elabTestTestOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabBenchmarkOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabSetupScriptStyle :: ElaboratedConfiguredPackage -> SetupScriptStyle
elabSetupScriptCliVersion :: ElaboratedConfiguredPackage -> Version
elabConfigureTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabTestTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBenchTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabReplTarget :: ElaboratedConfiguredPackage -> Maybe ComponentTarget
elabHaddockTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildHaddocks :: ElaboratedConfiguredPackage -> Bool
elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
..} =
(case ElaboratedPackageOrComponent
elabPkgOrComp of
ElabPackage ElaboratedPackage
pkg -> ElaboratedConfiguredPackage -> ElaboratedPackage -> a -> a
forall a.
ElaboratedConfiguredPackage -> ElaboratedPackage -> a -> a
sanityCheckElaboratedPackage ElaboratedConfiguredPackage
elab ElaboratedPackage
pkg
ElabComponent ElaboratedComponent
comp -> ElaboratedConfiguredPackage -> ElaboratedComponent -> a -> a
forall a.
ElaboratedConfiguredPackage -> ElaboratedComponent -> a -> a
sanityCheckElaboratedComponent ElaboratedConfiguredPackage
elab ElaboratedComponent
comp)
(a -> a) -> (a -> a) -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> a -> a
forall a. HasCallStack => Bool -> a -> a
assert (BuildStyle
elabBuildStyle BuildStyle -> BuildStyle -> Bool
forall a. Eq a => a -> a -> Bool
== BuildStyle
BuildInplaceOnly Bool -> Bool -> Bool
||
InstalledPackageId
elabComponentId InstalledPackageId -> InstalledPackageId -> Bool
forall a. Eq a => a -> a -> Bool
== PackageHashInputs -> InstalledPackageId
hashedInstalledPackageId
(ElaboratedSharedConfig
-> ElaboratedConfiguredPackage -> PackageHashInputs
packageHashInputs ElaboratedSharedConfig
sharedConfig ElaboratedConfiguredPackage
elab))
(a -> a) -> (a -> a) -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> a -> a
forall a. HasCallStack => Bool -> a -> a
assert (OptionalStanzaSet -> Bool
optStanzaSetNull (OptionalStanzaSet -> Bool) -> OptionalStanzaSet -> Bool
forall a b. (a -> b) -> a -> b
$
(Maybe Bool -> Bool)
-> OptionalStanzaMap (Maybe Bool) -> OptionalStanzaSet
forall a. (a -> Bool) -> OptionalStanzaMap a -> OptionalStanzaSet
optStanzaKeysFilteredByValue (Bool -> (Bool -> Bool) -> Maybe Bool -> Bool
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Bool
False Bool -> Bool
not) OptionalStanzaMap (Maybe Bool)
elabStanzasRequested OptionalStanzaSet -> OptionalStanzaSet -> OptionalStanzaSet
`optStanzaSetIntersection` OptionalStanzaSet
elabStanzasAvailable)
(a -> a) -> (a -> a) -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> a -> a
forall a. HasCallStack => Bool -> a -> a
assert (BuildStyle
elabBuildStyle BuildStyle -> BuildStyle -> Bool
forall a. Eq a => a -> a -> Bool
== BuildStyle
BuildInplaceOnly Bool -> Bool -> Bool
||
OptionalStanzaSet -> Bool
optStanzaSetNull OptionalStanzaSet
elabStanzasAvailable)
sanityCheckElaboratedComponent
:: ElaboratedConfiguredPackage
-> ElaboratedComponent
-> a
-> a
sanityCheckElaboratedComponent :: forall a.
ElaboratedConfiguredPackage -> ElaboratedComponent -> a -> a
sanityCheckElaboratedComponent ElaboratedConfiguredPackage{Bool
[String]
[Maybe PackageDB]
PackageDBStack
[PathTemplate]
[ComponentTarget]
Maybe String
Maybe CabalFileText
Maybe PathTemplate
Maybe TestShowDetails
Maybe PackageSourceHash
Maybe ComponentTarget
Map String String
Map String [String]
Map ModuleName Module
Map ModuleName OpenModule
OptionalStanzaMap (Maybe Bool)
OptionalStanzaSet
PackageIdentifier
ComponentRequestedSpec
UnitId
Version
FlagAssignment
PackageDescription
InstalledPackageId
DebugInfoLevel
OptimisationLevel
ProfDetailLevel
HaddockTarget
ModuleShape
InstallDirs String
DumpBuildInfo
UnresolvedPkgLoc
SetupScriptStyle
BuildStyle
ElaboratedPackageOrComponent
elabUnitId :: ElaboratedConfiguredPackage -> UnitId
elabComponentId :: ElaboratedConfiguredPackage -> InstalledPackageId
elabInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName Module
elabLinkedInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName OpenModule
elabIsCanonical :: ElaboratedConfiguredPackage -> Bool
elabPkgSourceId :: ElaboratedConfiguredPackage -> PackageIdentifier
elabModuleShape :: ElaboratedConfiguredPackage -> ModuleShape
elabFlagAssignment :: ElaboratedConfiguredPackage -> FlagAssignment
elabFlagDefaults :: ElaboratedConfiguredPackage -> FlagAssignment
elabPkgDescription :: ElaboratedConfiguredPackage -> PackageDescription
elabPkgSourceLocation :: ElaboratedConfiguredPackage -> UnresolvedPkgLoc
elabPkgSourceHash :: ElaboratedConfiguredPackage -> Maybe PackageSourceHash
elabLocalToProject :: ElaboratedConfiguredPackage -> Bool
elabBuildStyle :: ElaboratedConfiguredPackage -> BuildStyle
elabEnabledSpec :: ElaboratedConfiguredPackage -> ComponentRequestedSpec
elabStanzasAvailable :: ElaboratedConfiguredPackage -> OptionalStanzaSet
elabStanzasRequested :: ElaboratedConfiguredPackage -> OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: ElaboratedConfiguredPackage -> [Maybe PackageDB]
elabSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabPkgDescriptionOverride :: ElaboratedConfiguredPackage -> Maybe CabalFileText
elabVanillaLib :: ElaboratedConfiguredPackage -> Bool
elabSharedLib :: ElaboratedConfiguredPackage -> Bool
elabStaticLib :: ElaboratedConfiguredPackage -> Bool
elabDynExe :: ElaboratedConfiguredPackage -> Bool
elabFullyStaticExe :: ElaboratedConfiguredPackage -> Bool
elabGHCiLib :: ElaboratedConfiguredPackage -> Bool
elabProfLib :: ElaboratedConfiguredPackage -> Bool
elabProfExe :: ElaboratedConfiguredPackage -> Bool
elabProfLibDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabProfExeDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabCoverage :: ElaboratedConfiguredPackage -> Bool
elabOptimization :: ElaboratedConfiguredPackage -> OptimisationLevel
elabSplitObjs :: ElaboratedConfiguredPackage -> Bool
elabSplitSections :: ElaboratedConfiguredPackage -> Bool
elabStripLibs :: ElaboratedConfiguredPackage -> Bool
elabStripExes :: ElaboratedConfiguredPackage -> Bool
elabDebugInfo :: ElaboratedConfiguredPackage -> DebugInfoLevel
elabDumpBuildInfo :: ElaboratedConfiguredPackage -> DumpBuildInfo
elabProgramPaths :: ElaboratedConfiguredPackage -> Map String String
elabProgramArgs :: ElaboratedConfiguredPackage -> Map String [String]
elabProgramPathExtra :: ElaboratedConfiguredPackage -> [String]
elabConfigureScriptArgs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirsStatic :: ElaboratedConfiguredPackage -> [String]
elabExtraFrameworkDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraIncludeDirs :: ElaboratedConfiguredPackage -> [String]
elabProgPrefix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabProgSuffix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabInstallDirs :: ElaboratedConfiguredPackage -> InstallDirs String
elabHaddockHoogle :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtml :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtmlLocation :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockForeignLibs :: ElaboratedConfiguredPackage -> Bool
elabHaddockForHackage :: ElaboratedConfiguredPackage -> HaddockTarget
elabHaddockExecutables :: ElaboratedConfiguredPackage -> Bool
elabHaddockTestSuites :: ElaboratedConfiguredPackage -> Bool
elabHaddockBenchmarks :: ElaboratedConfiguredPackage -> Bool
elabHaddockInternal :: ElaboratedConfiguredPackage -> Bool
elabHaddockCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockLinkedSource :: ElaboratedConfiguredPackage -> Bool
elabHaddockQuickJump :: ElaboratedConfiguredPackage -> Bool
elabHaddockHscolourCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockContents :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestMachineLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestHumanLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestShowDetails :: ElaboratedConfiguredPackage -> Maybe TestShowDetails
elabTestKeepTix :: ElaboratedConfiguredPackage -> Bool
elabTestWrapper :: ElaboratedConfiguredPackage -> Maybe String
elabTestFailWhenNoTestSuites :: ElaboratedConfiguredPackage -> Bool
elabTestTestOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabBenchmarkOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabSetupScriptStyle :: ElaboratedConfiguredPackage -> SetupScriptStyle
elabSetupScriptCliVersion :: ElaboratedConfiguredPackage -> Version
elabConfigureTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabTestTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBenchTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabReplTarget :: ElaboratedConfiguredPackage -> Maybe ComponentTarget
elabHaddockTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildHaddocks :: ElaboratedConfiguredPackage -> Bool
elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabUnitId :: UnitId
elabComponentId :: InstalledPackageId
elabInstantiatedWith :: Map ModuleName Module
elabLinkedInstantiatedWith :: Map ModuleName OpenModule
elabIsCanonical :: Bool
elabPkgSourceId :: PackageIdentifier
elabModuleShape :: ModuleShape
elabFlagAssignment :: FlagAssignment
elabFlagDefaults :: FlagAssignment
elabPkgDescription :: PackageDescription
elabPkgSourceLocation :: UnresolvedPkgLoc
elabPkgSourceHash :: Maybe PackageSourceHash
elabLocalToProject :: Bool
elabBuildStyle :: BuildStyle
elabEnabledSpec :: ComponentRequestedSpec
elabStanzasAvailable :: OptionalStanzaSet
elabStanzasRequested :: OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: [Maybe PackageDB]
elabSetupPackageDBStack :: PackageDBStack
elabBuildPackageDBStack :: PackageDBStack
elabRegisterPackageDBStack :: PackageDBStack
elabInplaceSetupPackageDBStack :: PackageDBStack
elabInplaceBuildPackageDBStack :: PackageDBStack
elabInplaceRegisterPackageDBStack :: PackageDBStack
elabPkgDescriptionOverride :: Maybe CabalFileText
elabVanillaLib :: Bool
elabSharedLib :: Bool
elabStaticLib :: Bool
elabDynExe :: Bool
elabFullyStaticExe :: Bool
elabGHCiLib :: Bool
elabProfLib :: Bool
elabProfExe :: Bool
elabProfLibDetail :: ProfDetailLevel
elabProfExeDetail :: ProfDetailLevel
elabCoverage :: Bool
elabOptimization :: OptimisationLevel
elabSplitObjs :: Bool
elabSplitSections :: Bool
elabStripLibs :: Bool
elabStripExes :: Bool
elabDebugInfo :: DebugInfoLevel
elabDumpBuildInfo :: DumpBuildInfo
elabProgramPaths :: Map String String
elabProgramArgs :: Map String [String]
elabProgramPathExtra :: [String]
elabConfigureScriptArgs :: [String]
elabExtraLibDirs :: [String]
elabExtraLibDirsStatic :: [String]
elabExtraFrameworkDirs :: [String]
elabExtraIncludeDirs :: [String]
elabProgPrefix :: Maybe PathTemplate
elabProgSuffix :: Maybe PathTemplate
elabInstallDirs :: InstallDirs String
elabHaddockHoogle :: Bool
elabHaddockHtml :: Bool
elabHaddockHtmlLocation :: Maybe String
elabHaddockForeignLibs :: Bool
elabHaddockForHackage :: HaddockTarget
elabHaddockExecutables :: Bool
elabHaddockTestSuites :: Bool
elabHaddockBenchmarks :: Bool
elabHaddockInternal :: Bool
elabHaddockCss :: Maybe String
elabHaddockLinkedSource :: Bool
elabHaddockQuickJump :: Bool
elabHaddockHscolourCss :: Maybe String
elabHaddockContents :: Maybe PathTemplate
elabTestMachineLog :: Maybe PathTemplate
elabTestHumanLog :: Maybe PathTemplate
elabTestShowDetails :: Maybe TestShowDetails
elabTestKeepTix :: Bool
elabTestWrapper :: Maybe String
elabTestFailWhenNoTestSuites :: Bool
elabTestTestOptions :: [PathTemplate]
elabBenchmarkOptions :: [PathTemplate]
elabSetupScriptStyle :: SetupScriptStyle
elabSetupScriptCliVersion :: Version
elabConfigureTargets :: [ComponentTarget]
elabBuildTargets :: [ComponentTarget]
elabTestTargets :: [ComponentTarget]
elabBenchTargets :: [ComponentTarget]
elabReplTarget :: Maybe ComponentTarget
elabHaddockTargets :: [ComponentTarget]
elabBuildHaddocks :: Bool
elabPkgOrComp :: ElaboratedPackageOrComponent
..}
ElaboratedComponent{[(PkgconfigName, Maybe PkgconfigVersion)]
[(ConfiguredId, String)]
[UnitId]
[OpenUnitId]
[ConfiguredId]
Maybe ComponentName
Component
compSolverName :: Component
compComponentName :: Maybe ComponentName
compLibDependencies :: [ConfiguredId]
compLinkedLibDependencies :: [OpenUnitId]
compExeDependencies :: [ConfiguredId]
compPkgConfigDependencies :: [(PkgconfigName, Maybe PkgconfigVersion)]
compExeDependencyPaths :: [(ConfiguredId, String)]
compOrderLibDependencies :: [UnitId]
compSolverName :: ElaboratedComponent -> Component
compComponentName :: ElaboratedComponent -> Maybe ComponentName
compLibDependencies :: ElaboratedComponent -> [ConfiguredId]
compLinkedLibDependencies :: ElaboratedComponent -> [OpenUnitId]
compExeDependencies :: ElaboratedComponent -> [ConfiguredId]
compPkgConfigDependencies :: ElaboratedComponent -> [(PkgconfigName, Maybe PkgconfigVersion)]
compExeDependencyPaths :: ElaboratedComponent -> [(ConfiguredId, String)]
compOrderLibDependencies :: ElaboratedComponent -> [UnitId]
..} =
Bool -> a -> a
forall a. HasCallStack => Bool -> a -> a
assert (BuildStyle
elabBuildStyle BuildStyle -> BuildStyle -> Bool
forall a. Eq a => a -> a -> Bool
== BuildStyle
BuildInplaceOnly Bool -> Bool -> Bool
||
case Maybe ComponentName
compComponentName of
Maybe ComponentName
Nothing -> Bool
True
Just (CLibName LibraryName
_) -> Bool
True
Just (CExeName UnqualComponentName
_) -> Bool
True
Just (CFLibName UnqualComponentName
_) -> Bool
True
Just (CBenchName UnqualComponentName
_) -> Bool
False
Just (CTestName UnqualComponentName
_) -> Bool
False)
sanityCheckElaboratedPackage
:: ElaboratedConfiguredPackage
-> ElaboratedPackage
-> a
-> a
sanityCheckElaboratedPackage :: forall a.
ElaboratedConfiguredPackage -> ElaboratedPackage -> a -> a
sanityCheckElaboratedPackage ElaboratedConfiguredPackage{Bool
[String]
[Maybe PackageDB]
PackageDBStack
[PathTemplate]
[ComponentTarget]
Maybe String
Maybe CabalFileText
Maybe PathTemplate
Maybe TestShowDetails
Maybe PackageSourceHash
Maybe ComponentTarget
Map String String
Map String [String]
Map ModuleName Module
Map ModuleName OpenModule
OptionalStanzaMap (Maybe Bool)
OptionalStanzaSet
PackageIdentifier
ComponentRequestedSpec
UnitId
Version
FlagAssignment
PackageDescription
InstalledPackageId
DebugInfoLevel
OptimisationLevel
ProfDetailLevel
HaddockTarget
ModuleShape
InstallDirs String
DumpBuildInfo
UnresolvedPkgLoc
SetupScriptStyle
BuildStyle
ElaboratedPackageOrComponent
elabUnitId :: ElaboratedConfiguredPackage -> UnitId
elabComponentId :: ElaboratedConfiguredPackage -> InstalledPackageId
elabInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName Module
elabLinkedInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName OpenModule
elabIsCanonical :: ElaboratedConfiguredPackage -> Bool
elabPkgSourceId :: ElaboratedConfiguredPackage -> PackageIdentifier
elabModuleShape :: ElaboratedConfiguredPackage -> ModuleShape
elabFlagAssignment :: ElaboratedConfiguredPackage -> FlagAssignment
elabFlagDefaults :: ElaboratedConfiguredPackage -> FlagAssignment
elabPkgDescription :: ElaboratedConfiguredPackage -> PackageDescription
elabPkgSourceLocation :: ElaboratedConfiguredPackage -> UnresolvedPkgLoc
elabPkgSourceHash :: ElaboratedConfiguredPackage -> Maybe PackageSourceHash
elabLocalToProject :: ElaboratedConfiguredPackage -> Bool
elabBuildStyle :: ElaboratedConfiguredPackage -> BuildStyle
elabEnabledSpec :: ElaboratedConfiguredPackage -> ComponentRequestedSpec
elabStanzasAvailable :: ElaboratedConfiguredPackage -> OptionalStanzaSet
elabStanzasRequested :: ElaboratedConfiguredPackage -> OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: ElaboratedConfiguredPackage -> [Maybe PackageDB]
elabSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabPkgDescriptionOverride :: ElaboratedConfiguredPackage -> Maybe CabalFileText
elabVanillaLib :: ElaboratedConfiguredPackage -> Bool
elabSharedLib :: ElaboratedConfiguredPackage -> Bool
elabStaticLib :: ElaboratedConfiguredPackage -> Bool
elabDynExe :: ElaboratedConfiguredPackage -> Bool
elabFullyStaticExe :: ElaboratedConfiguredPackage -> Bool
elabGHCiLib :: ElaboratedConfiguredPackage -> Bool
elabProfLib :: ElaboratedConfiguredPackage -> Bool
elabProfExe :: ElaboratedConfiguredPackage -> Bool
elabProfLibDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabProfExeDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabCoverage :: ElaboratedConfiguredPackage -> Bool
elabOptimization :: ElaboratedConfiguredPackage -> OptimisationLevel
elabSplitObjs :: ElaboratedConfiguredPackage -> Bool
elabSplitSections :: ElaboratedConfiguredPackage -> Bool
elabStripLibs :: ElaboratedConfiguredPackage -> Bool
elabStripExes :: ElaboratedConfiguredPackage -> Bool
elabDebugInfo :: ElaboratedConfiguredPackage -> DebugInfoLevel
elabDumpBuildInfo :: ElaboratedConfiguredPackage -> DumpBuildInfo
elabProgramPaths :: ElaboratedConfiguredPackage -> Map String String
elabProgramArgs :: ElaboratedConfiguredPackage -> Map String [String]
elabProgramPathExtra :: ElaboratedConfiguredPackage -> [String]
elabConfigureScriptArgs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirsStatic :: ElaboratedConfiguredPackage -> [String]
elabExtraFrameworkDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraIncludeDirs :: ElaboratedConfiguredPackage -> [String]
elabProgPrefix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabProgSuffix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabInstallDirs :: ElaboratedConfiguredPackage -> InstallDirs String
elabHaddockHoogle :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtml :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtmlLocation :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockForeignLibs :: ElaboratedConfiguredPackage -> Bool
elabHaddockForHackage :: ElaboratedConfiguredPackage -> HaddockTarget
elabHaddockExecutables :: ElaboratedConfiguredPackage -> Bool
elabHaddockTestSuites :: ElaboratedConfiguredPackage -> Bool
elabHaddockBenchmarks :: ElaboratedConfiguredPackage -> Bool
elabHaddockInternal :: ElaboratedConfiguredPackage -> Bool
elabHaddockCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockLinkedSource :: ElaboratedConfiguredPackage -> Bool
elabHaddockQuickJump :: ElaboratedConfiguredPackage -> Bool
elabHaddockHscolourCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockContents :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestMachineLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestHumanLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestShowDetails :: ElaboratedConfiguredPackage -> Maybe TestShowDetails
elabTestKeepTix :: ElaboratedConfiguredPackage -> Bool
elabTestWrapper :: ElaboratedConfiguredPackage -> Maybe String
elabTestFailWhenNoTestSuites :: ElaboratedConfiguredPackage -> Bool
elabTestTestOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabBenchmarkOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabSetupScriptStyle :: ElaboratedConfiguredPackage -> SetupScriptStyle
elabSetupScriptCliVersion :: ElaboratedConfiguredPackage -> Version
elabConfigureTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabTestTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBenchTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabReplTarget :: ElaboratedConfiguredPackage -> Maybe ComponentTarget
elabHaddockTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildHaddocks :: ElaboratedConfiguredPackage -> Bool
elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabUnitId :: UnitId
elabComponentId :: InstalledPackageId
elabInstantiatedWith :: Map ModuleName Module
elabLinkedInstantiatedWith :: Map ModuleName OpenModule
elabIsCanonical :: Bool
elabPkgSourceId :: PackageIdentifier
elabModuleShape :: ModuleShape
elabFlagAssignment :: FlagAssignment
elabFlagDefaults :: FlagAssignment
elabPkgDescription :: PackageDescription
elabPkgSourceLocation :: UnresolvedPkgLoc
elabPkgSourceHash :: Maybe PackageSourceHash
elabLocalToProject :: Bool
elabBuildStyle :: BuildStyle
elabEnabledSpec :: ComponentRequestedSpec
elabStanzasAvailable :: OptionalStanzaSet
elabStanzasRequested :: OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: [Maybe PackageDB]
elabSetupPackageDBStack :: PackageDBStack
elabBuildPackageDBStack :: PackageDBStack
elabRegisterPackageDBStack :: PackageDBStack
elabInplaceSetupPackageDBStack :: PackageDBStack
elabInplaceBuildPackageDBStack :: PackageDBStack
elabInplaceRegisterPackageDBStack :: PackageDBStack
elabPkgDescriptionOverride :: Maybe CabalFileText
elabVanillaLib :: Bool
elabSharedLib :: Bool
elabStaticLib :: Bool
elabDynExe :: Bool
elabFullyStaticExe :: Bool
elabGHCiLib :: Bool
elabProfLib :: Bool
elabProfExe :: Bool
elabProfLibDetail :: ProfDetailLevel
elabProfExeDetail :: ProfDetailLevel
elabCoverage :: Bool
elabOptimization :: OptimisationLevel
elabSplitObjs :: Bool
elabSplitSections :: Bool
elabStripLibs :: Bool
elabStripExes :: Bool
elabDebugInfo :: DebugInfoLevel
elabDumpBuildInfo :: DumpBuildInfo
elabProgramPaths :: Map String String
elabProgramArgs :: Map String [String]
elabProgramPathExtra :: [String]
elabConfigureScriptArgs :: [String]
elabExtraLibDirs :: [String]
elabExtraLibDirsStatic :: [String]
elabExtraFrameworkDirs :: [String]
elabExtraIncludeDirs :: [String]
elabProgPrefix :: Maybe PathTemplate
elabProgSuffix :: Maybe PathTemplate
elabInstallDirs :: InstallDirs String
elabHaddockHoogle :: Bool
elabHaddockHtml :: Bool
elabHaddockHtmlLocation :: Maybe String
elabHaddockForeignLibs :: Bool
elabHaddockForHackage :: HaddockTarget
elabHaddockExecutables :: Bool
elabHaddockTestSuites :: Bool
elabHaddockBenchmarks :: Bool
elabHaddockInternal :: Bool
elabHaddockCss :: Maybe String
elabHaddockLinkedSource :: Bool
elabHaddockQuickJump :: Bool
elabHaddockHscolourCss :: Maybe String
elabHaddockContents :: Maybe PathTemplate
elabTestMachineLog :: Maybe PathTemplate
elabTestHumanLog :: Maybe PathTemplate
elabTestShowDetails :: Maybe TestShowDetails
elabTestKeepTix :: Bool
elabTestWrapper :: Maybe String
elabTestFailWhenNoTestSuites :: Bool
elabTestTestOptions :: [PathTemplate]
elabBenchmarkOptions :: [PathTemplate]
elabSetupScriptStyle :: SetupScriptStyle
elabSetupScriptCliVersion :: Version
elabConfigureTargets :: [ComponentTarget]
elabBuildTargets :: [ComponentTarget]
elabTestTargets :: [ComponentTarget]
elabBenchTargets :: [ComponentTarget]
elabReplTarget :: Maybe ComponentTarget
elabHaddockTargets :: [ComponentTarget]
elabBuildHaddocks :: Bool
elabPkgOrComp :: ElaboratedPackageOrComponent
..}
ElaboratedPackage{[(PkgconfigName, Maybe PkgconfigVersion)]
ComponentDeps [()]
ComponentDeps [(ConfiguredId, String)]
ComponentDeps [ConfiguredId]
OptionalStanzaSet
InstalledPackageId
pkgInstalledId :: InstalledPackageId
pkgLibDependencies :: ComponentDeps [ConfiguredId]
pkgDependsOnSelfLib :: ComponentDeps [()]
pkgExeDependencies :: ComponentDeps [ConfiguredId]
pkgExeDependencyPaths :: ComponentDeps [(ConfiguredId, String)]
pkgPkgConfigDependencies :: [(PkgconfigName, Maybe PkgconfigVersion)]
pkgStanzasEnabled :: OptionalStanzaSet
pkgInstalledId :: ElaboratedPackage -> InstalledPackageId
pkgLibDependencies :: ElaboratedPackage -> ComponentDeps [ConfiguredId]
pkgDependsOnSelfLib :: ElaboratedPackage -> ComponentDeps [()]
pkgExeDependencies :: ElaboratedPackage -> ComponentDeps [ConfiguredId]
pkgExeDependencyPaths :: ElaboratedPackage -> ComponentDeps [(ConfiguredId, String)]
pkgPkgConfigDependencies :: ElaboratedPackage -> [(PkgconfigName, Maybe PkgconfigVersion)]
pkgStanzasEnabled :: ElaboratedPackage -> OptionalStanzaSet
..} =
Bool -> a -> a
forall a. HasCallStack => Bool -> a -> a
assert (OptionalStanzaSet
pkgStanzasEnabled OptionalStanzaSet -> OptionalStanzaSet -> Bool
`optStanzaSetIsSubset` OptionalStanzaSet
elabStanzasAvailable)
(a -> a) -> (a -> a) -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> a -> a
forall a. HasCallStack => Bool -> a -> a
assert ((Maybe Bool -> Bool)
-> OptionalStanzaMap (Maybe Bool) -> OptionalStanzaSet
forall a. (a -> Bool) -> OptionalStanzaMap a -> OptionalStanzaSet
optStanzaKeysFilteredByValue (Bool -> Maybe Bool -> Bool
forall a. a -> Maybe a -> a
fromMaybe Bool
False) OptionalStanzaMap (Maybe Bool)
elabStanzasRequested
OptionalStanzaSet -> OptionalStanzaSet -> Bool
`optStanzaSetIsSubset` OptionalStanzaSet
pkgStanzasEnabled)
rebuildProjectConfig :: Verbosity
-> HttpTransport
-> DistDirLayout
-> ProjectConfig
-> IO ( ProjectConfig
, [PackageSpecifier UnresolvedSourcePackage] )
rebuildProjectConfig :: Verbosity
-> HttpTransport
-> DistDirLayout
-> ProjectConfig
-> IO
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)])
rebuildProjectConfig Verbosity
verbosity
HttpTransport
httpTransport
distDirLayout :: DistDirLayout
distDirLayout@DistDirLayout {
String
distProjectRootDirectory :: String
distProjectRootDirectory :: DistDirLayout -> String
distProjectRootDirectory,
String
distDirectory :: String
distDirectory :: DistDirLayout -> String
distDirectory,
String -> String
distProjectCacheFile :: String -> String
distProjectCacheFile :: DistDirLayout -> String -> String
distProjectCacheFile,
String
distProjectCacheDirectory :: String
distProjectCacheDirectory :: DistDirLayout -> String
distProjectCacheDirectory,
String -> String
distProjectFile :: String -> String
distProjectFile :: DistDirLayout -> String -> String
distProjectFile
}
ProjectConfig
cliConfig = do
(String, String)
fileMonitorProjectConfigKey <- do
String
configPath <- Flag String -> IO String
getConfigFilePath Flag String
projectConfigConfigFile
(String, String) -> IO (String, String)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (String
configPath, String -> String
distProjectFile String
"")
(ProjectConfig
projectConfig, [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
localPackages) <-
String
-> Rebuild
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)])
-> IO
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)])
forall a. String -> Rebuild a -> IO a
runRebuild String
distProjectRootDirectory
(Rebuild
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)])
-> IO
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)]))
-> Rebuild
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)])
-> IO
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)])
forall a b. (a -> b) -> a -> b
$ Verbosity
-> FileMonitor
(String, String)
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)])
-> (String, String)
-> Rebuild
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)])
-> Rebuild
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)])
forall a b.
(Binary a, Structured a, Binary b, Structured b) =>
Verbosity -> FileMonitor a b -> a -> Rebuild b -> Rebuild b
rerunIfChanged Verbosity
verbosity
FileMonitor
(String, String)
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)])
fileMonitorProjectConfig
(String, String)
fileMonitorProjectConfigKey
(Rebuild
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)])
-> Rebuild
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)]))
-> Rebuild
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)])
-> Rebuild
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)])
forall a b. (a -> b) -> a -> b
$ do
IO () -> Rebuild ()
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> Rebuild ()) -> IO () -> Rebuild ()
forall a b. (a -> b) -> a -> b
$ Verbosity -> String -> IO ()
info Verbosity
verbosity String
"Project settings changed, reconfiguring..."
IO () -> Rebuild ()
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> Rebuild ()) -> IO () -> Rebuild ()
forall a b. (a -> b) -> a -> b
$ Verbosity -> Bool -> String -> IO ()
createDirectoryIfMissingVerbose Verbosity
verbosity Bool
True String
distProjectCacheDirectory
ProjectConfigSkeleton
projectConfigSkeleton <- Rebuild ProjectConfigSkeleton
phaseReadProjectConfig
(Compiler
compiler, Platform Arch
arch OS
os, ProgramDb
_) <- Verbosity
-> DistDirLayout
-> ProjectConfig
-> Rebuild (Compiler, Platform, ProgramDb)
configureCompiler Verbosity
verbosity DistDirLayout
distDirLayout (((ProjectConfig, [String]) -> ProjectConfig
forall a b. (a, b) -> a
fst ((ProjectConfig, [String]) -> ProjectConfig)
-> (ProjectConfig, [String]) -> ProjectConfig
forall a b. (a -> b) -> a -> b
$ ProjectConfigSkeleton -> (ProjectConfig, [String])
forall a c v.
(Semigroup a, Semigroup c) =>
CondTree v c a -> (a, c)
PD.ignoreConditions ProjectConfigSkeleton
projectConfigSkeleton) ProjectConfig -> ProjectConfig -> ProjectConfig
forall a. Semigroup a => a -> a -> a
<> ProjectConfig
cliConfig)
let projectConfig :: ProjectConfig
projectConfig = OS
-> Arch
-> CompilerInfo
-> FlagAssignment
-> ProjectConfigSkeleton
-> ProjectConfig
instantiateProjectConfigSkeleton OS
os Arch
arch (Compiler -> CompilerInfo
compilerInfo Compiler
compiler) FlagAssignment
forall a. Monoid a => a
mempty ProjectConfigSkeleton
projectConfigSkeleton
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
localPackages <- ProjectConfig
-> Rebuild [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
phaseReadLocalPackages (ProjectConfig
projectConfig ProjectConfig -> ProjectConfig -> ProjectConfig
forall a. Semigroup a => a -> a -> a
<> ProjectConfig
cliConfig)
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)])
-> Rebuild
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)])
forall a. a -> Rebuild a
forall (m :: * -> *) a. Monad m => a -> m a
return (ProjectConfig
projectConfig, [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
localPackages)
Verbosity -> String -> IO ()
info Verbosity
verbosity
(String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ [String] -> String
unlines
([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ (String
"this build was affected by the following (project) config files:" String -> [String] -> [String]
forall a. a -> [a] -> [a]
:)
([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ [ String
"- " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
path
| Explicit String
path <- Set ProjectConfigProvenance -> [ProjectConfigProvenance]
forall a. Set a -> [a]
Set.toList (Set ProjectConfigProvenance -> [ProjectConfigProvenance])
-> Set ProjectConfigProvenance -> [ProjectConfigProvenance]
forall a b. (a -> b) -> a -> b
$ ProjectConfig -> Set ProjectConfigProvenance
projectConfigProvenance ProjectConfig
projectConfig
]
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)])
-> IO
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)])
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (ProjectConfig
projectConfig ProjectConfig -> ProjectConfig -> ProjectConfig
forall a. Semigroup a => a -> a -> a
<> ProjectConfig
cliConfig, [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
localPackages)
where
ProjectConfigShared { Flag String
projectConfigConfigFile :: Flag String
projectConfigConfigFile :: ProjectConfigShared -> Flag String
projectConfigConfigFile } =
ProjectConfig -> ProjectConfigShared
projectConfigShared ProjectConfig
cliConfig
ProjectConfigShared { Flag Bool
projectConfigIgnoreProject :: Flag Bool
projectConfigIgnoreProject :: ProjectConfigShared -> Flag Bool
projectConfigIgnoreProject } =
ProjectConfig -> ProjectConfigShared
projectConfigShared ProjectConfig
cliConfig
fileMonitorProjectConfig ::
FileMonitor
(FilePath, FilePath)
(ProjectConfig, [PackageSpecifier UnresolvedSourcePackage])
fileMonitorProjectConfig :: FileMonitor
(String, String)
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)])
fileMonitorProjectConfig =
String
-> FileMonitor
(String, String)
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)])
forall a b. Eq a => String -> FileMonitor a b
newFileMonitor (String -> String
distProjectCacheFile String
"config")
phaseReadProjectConfig :: Rebuild ProjectConfigSkeleton
phaseReadProjectConfig :: Rebuild ProjectConfigSkeleton
phaseReadProjectConfig = do
Verbosity
-> HttpTransport
-> Flag Bool
-> Flag String
-> DistDirLayout
-> Rebuild ProjectConfigSkeleton
readProjectConfig Verbosity
verbosity HttpTransport
httpTransport Flag Bool
projectConfigIgnoreProject Flag String
projectConfigConfigFile DistDirLayout
distDirLayout
phaseReadLocalPackages :: ProjectConfig
-> Rebuild [PackageSpecifier UnresolvedSourcePackage]
phaseReadLocalPackages :: ProjectConfig
-> Rebuild [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
phaseReadLocalPackages projectConfig :: ProjectConfig
projectConfig@ProjectConfig {
ProjectConfigShared
projectConfigShared :: ProjectConfig -> ProjectConfigShared
projectConfigShared :: ProjectConfigShared
projectConfigShared,
ProjectConfigBuildOnly
projectConfigBuildOnly :: ProjectConfigBuildOnly
projectConfigBuildOnly :: ProjectConfig -> ProjectConfigBuildOnly
projectConfigBuildOnly
} = do
[ProjectPackageLocation]
pkgLocations <- DistDirLayout -> ProjectConfig -> Rebuild [ProjectPackageLocation]
findProjectPackages DistDirLayout
distDirLayout ProjectConfig
projectConfig
IO () -> Rebuild ()
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> Rebuild ()) -> IO () -> Rebuild ()
forall a b. (a -> b) -> a -> b
$ do
Verbosity -> Bool -> String -> IO ()
createDirectoryIfMissingVerbose Verbosity
verbosity Bool
True String
distDirectory
Verbosity -> Bool -> String -> IO ()
createDirectoryIfMissingVerbose Verbosity
verbosity Bool
True String
distProjectCacheDirectory
Verbosity
-> DistDirLayout
-> ProjectConfigShared
-> ProjectConfigBuildOnly
-> [ProjectPackageLocation]
-> Rebuild [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
fetchAndReadSourcePackages Verbosity
verbosity DistDirLayout
distDirLayout
ProjectConfigShared
projectConfigShared
ProjectConfigBuildOnly
projectConfigBuildOnly
[ProjectPackageLocation]
pkgLocations
configureCompiler :: Verbosity ->
DistDirLayout ->
ProjectConfig ->
Rebuild (Compiler, Platform, ProgramDb)
configureCompiler :: Verbosity
-> DistDirLayout
-> ProjectConfig
-> Rebuild (Compiler, Platform, ProgramDb)
configureCompiler Verbosity
verbosity
DistDirLayout {
String -> String
distProjectCacheFile :: DistDirLayout -> String -> String
distProjectCacheFile :: String -> String
distProjectCacheFile
}
ProjectConfig {
projectConfigShared :: ProjectConfig -> ProjectConfigShared
projectConfigShared = ProjectConfigShared {
Flag CompilerFlavor
projectConfigHcFlavor :: Flag CompilerFlavor
projectConfigHcFlavor :: ProjectConfigShared -> Flag CompilerFlavor
projectConfigHcFlavor,
Flag String
projectConfigHcPath :: Flag String
projectConfigHcPath :: ProjectConfigShared -> Flag String
projectConfigHcPath,
Flag String
projectConfigHcPkg :: Flag String
projectConfigHcPkg :: ProjectConfigShared -> Flag String
projectConfigHcPkg
},
projectConfigLocalPackages :: ProjectConfig -> PackageConfig
projectConfigLocalPackages = PackageConfig {
MapLast String String
packageConfigProgramPaths :: MapLast String String
packageConfigProgramPaths :: PackageConfig -> MapLast String String
packageConfigProgramPaths,
NubList String
packageConfigProgramPathExtra :: NubList String
packageConfigProgramPathExtra :: PackageConfig -> NubList String
packageConfigProgramPathExtra
}
} = do
let fileMonitorCompiler :: FileMonitor
(Maybe CompilerFlavor, Maybe String, Maybe String, [String],
MapLast String String, NubList String)
b
fileMonitorCompiler = String
-> FileMonitor
(Maybe CompilerFlavor, Maybe String, Maybe String, [String],
MapLast String String, NubList String)
b
forall a b. Eq a => String -> FileMonitor a b
newFileMonitor (String
-> FileMonitor
(Maybe CompilerFlavor, Maybe String, Maybe String, [String],
MapLast String String, NubList String)
b)
-> (String -> String)
-> String
-> FileMonitor
(Maybe CompilerFlavor, Maybe String, Maybe String, [String],
MapLast String String, NubList String)
b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String
distProjectCacheFile (String
-> FileMonitor
(Maybe CompilerFlavor, Maybe String, Maybe String, [String],
MapLast String String, NubList String)
b)
-> String
-> FileMonitor
(Maybe CompilerFlavor, Maybe String, Maybe String, [String],
MapLast String String, NubList String)
b
forall a b. (a -> b) -> a -> b
$ String
"compiler"
[String]
progsearchpath <- IO [String] -> Rebuild [String]
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO [String] -> Rebuild [String])
-> IO [String] -> Rebuild [String]
forall a b. (a -> b) -> a -> b
$ IO [String]
getSystemSearchPath
Verbosity
-> FileMonitor
(Maybe CompilerFlavor, Maybe String, Maybe String, [String],
MapLast String String, NubList String)
(Compiler, Platform, ProgramDb)
-> (Maybe CompilerFlavor, Maybe String, Maybe String, [String],
MapLast String String, NubList String)
-> Rebuild (Compiler, Platform, ProgramDb)
-> Rebuild (Compiler, Platform, ProgramDb)
forall a b.
(Binary a, Structured a, Binary b, Structured b) =>
Verbosity -> FileMonitor a b -> a -> Rebuild b -> Rebuild b
rerunIfChanged Verbosity
verbosity FileMonitor
(Maybe CompilerFlavor, Maybe String, Maybe String, [String],
MapLast String String, NubList String)
(Compiler, Platform, ProgramDb)
forall {b}.
FileMonitor
(Maybe CompilerFlavor, Maybe String, Maybe String, [String],
MapLast String String, NubList String)
b
fileMonitorCompiler
(Maybe CompilerFlavor
hcFlavor, Maybe String
hcPath, Maybe String
hcPkg, [String]
progsearchpath,
MapLast String String
packageConfigProgramPaths,
NubList String
packageConfigProgramPathExtra) (Rebuild (Compiler, Platform, ProgramDb)
-> Rebuild (Compiler, Platform, ProgramDb))
-> Rebuild (Compiler, Platform, ProgramDb)
-> Rebuild (Compiler, Platform, ProgramDb)
forall a b. (a -> b) -> a -> b
$ do
IO () -> Rebuild ()
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> Rebuild ()) -> IO () -> Rebuild ()
forall a b. (a -> b) -> a -> b
$ Verbosity -> String -> IO ()
info Verbosity
verbosity String
"Compiler settings changed, reconfiguring..."
result :: (Compiler, Platform, ProgramDb)
result@(Compiler
_, Platform
_, ProgramDb
progdb') <- IO (Compiler, Platform, ProgramDb)
-> Rebuild (Compiler, Platform, ProgramDb)
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Compiler, Platform, ProgramDb)
-> Rebuild (Compiler, Platform, ProgramDb))
-> IO (Compiler, Platform, ProgramDb)
-> Rebuild (Compiler, Platform, ProgramDb)
forall a b. (a -> b) -> a -> b
$
Maybe CompilerFlavor
-> Maybe String
-> Maybe String
-> ProgramDb
-> Verbosity
-> IO (Compiler, Platform, ProgramDb)
Cabal.configCompilerEx
Maybe CompilerFlavor
hcFlavor Maybe String
hcPath Maybe String
hcPkg
ProgramDb
progdb Verbosity
verbosity
[MonitorFilePath] -> Rebuild ()
monitorFiles (ProgramDb -> [MonitorFilePath]
programsMonitorFiles ProgramDb
progdb')
(Compiler, Platform, ProgramDb)
-> Rebuild (Compiler, Platform, ProgramDb)
forall a. a -> Rebuild a
forall (m :: * -> *) a. Monad m => a -> m a
return (Compiler, Platform, ProgramDb)
result
where
hcFlavor :: Maybe CompilerFlavor
hcFlavor = Flag CompilerFlavor -> Maybe CompilerFlavor
forall a. Flag a -> Maybe a
flagToMaybe Flag CompilerFlavor
projectConfigHcFlavor
hcPath :: Maybe String
hcPath = Flag String -> Maybe String
forall a. Flag a -> Maybe a
flagToMaybe Flag String
projectConfigHcPath
hcPkg :: Maybe String
hcPkg = Flag String -> Maybe String
forall a. Flag a -> Maybe a
flagToMaybe Flag String
projectConfigHcPkg
progdb :: ProgramDb
progdb =
[(String, String)] -> ProgramDb -> ProgramDb
userSpecifyPaths (Map String String -> [(String, String)]
forall k a. Map k a -> [(k, a)]
Map.toList (MapLast String String -> Map String String
forall k v. MapLast k v -> Map k v
getMapLast MapLast String String
packageConfigProgramPaths))
(ProgramDb -> ProgramDb)
-> (ProgramDb -> ProgramDb) -> ProgramDb -> ProgramDb
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ProgramSearchPath -> ProgramSearchPath) -> ProgramDb -> ProgramDb
modifyProgramSearchPath
(ProgramSearchPath -> ProgramSearchPath -> ProgramSearchPath
forall a. [a] -> [a] -> [a]
++ [ String -> ProgramSearchPathEntry
ProgramSearchPathDir String
dir
| String
dir <- NubList String -> [String]
forall a. NubList a -> [a]
fromNubList NubList String
packageConfigProgramPathExtra ])
(ProgramDb -> ProgramDb) -> ProgramDb -> ProgramDb
forall a b. (a -> b) -> a -> b
$ ProgramDb
defaultProgramDb
rebuildInstallPlan :: Verbosity
-> DistDirLayout -> CabalDirLayout
-> ProjectConfig
-> [PackageSpecifier UnresolvedSourcePackage]
-> IO ( ElaboratedInstallPlan
, ElaboratedInstallPlan
, ElaboratedSharedConfig
, IndexUtils.TotalIndexState
, IndexUtils.ActiveRepos
)
rebuildInstallPlan :: Verbosity
-> DistDirLayout
-> CabalDirLayout
-> ProjectConfig
-> [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
-> IO
(ElaboratedInstallPlan, ElaboratedInstallPlan,
ElaboratedSharedConfig, TotalIndexState, ActiveRepos)
rebuildInstallPlan Verbosity
verbosity
distDirLayout :: DistDirLayout
distDirLayout@DistDirLayout {
String
distProjectRootDirectory :: DistDirLayout -> String
distProjectRootDirectory :: String
distProjectRootDirectory,
String -> String
distProjectCacheFile :: DistDirLayout -> String -> String
distProjectCacheFile :: String -> String
distProjectCacheFile
}
CabalDirLayout {
StoreDirLayout
cabalStoreDirLayout :: StoreDirLayout
cabalStoreDirLayout :: CabalDirLayout -> StoreDirLayout
cabalStoreDirLayout
} = \ProjectConfig
projectConfig [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
localPackages ->
String
-> Rebuild
(ElaboratedInstallPlan, ElaboratedInstallPlan,
ElaboratedSharedConfig, TotalIndexState, ActiveRepos)
-> IO
(ElaboratedInstallPlan, ElaboratedInstallPlan,
ElaboratedSharedConfig, TotalIndexState, ActiveRepos)
forall a. String -> Rebuild a -> IO a
runRebuild String
distProjectRootDirectory (Rebuild
(ElaboratedInstallPlan, ElaboratedInstallPlan,
ElaboratedSharedConfig, TotalIndexState, ActiveRepos)
-> IO
(ElaboratedInstallPlan, ElaboratedInstallPlan,
ElaboratedSharedConfig, TotalIndexState, ActiveRepos))
-> Rebuild
(ElaboratedInstallPlan, ElaboratedInstallPlan,
ElaboratedSharedConfig, TotalIndexState, ActiveRepos)
-> IO
(ElaboratedInstallPlan, ElaboratedInstallPlan,
ElaboratedSharedConfig, TotalIndexState, ActiveRepos)
forall a b. (a -> b) -> a -> b
$ do
[String]
progsearchpath <- IO [String] -> Rebuild [String]
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO [String] -> Rebuild [String])
-> IO [String] -> Rebuild [String]
forall a b. (a -> b) -> a -> b
$ IO [String]
getSystemSearchPath
let projectConfigMonitored :: ProjectConfig
projectConfigMonitored = ProjectConfig
projectConfig { projectConfigBuildOnly :: ProjectConfigBuildOnly
projectConfigBuildOnly = ProjectConfigBuildOnly
forall a. Monoid a => a
mempty }
Verbosity
-> FileMonitor
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)], [String])
(ElaboratedInstallPlan, ElaboratedInstallPlan,
ElaboratedSharedConfig, TotalIndexState, ActiveRepos)
-> (ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)], [String])
-> Rebuild
(ElaboratedInstallPlan, ElaboratedInstallPlan,
ElaboratedSharedConfig, TotalIndexState, ActiveRepos)
-> Rebuild
(ElaboratedInstallPlan, ElaboratedInstallPlan,
ElaboratedSharedConfig, TotalIndexState, ActiveRepos)
forall a b.
(Binary a, Structured a, Binary b, Structured b) =>
Verbosity -> FileMonitor a b -> a -> Rebuild b -> Rebuild b
rerunIfChanged Verbosity
verbosity FileMonitor
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)], [String])
(ElaboratedInstallPlan, ElaboratedInstallPlan,
ElaboratedSharedConfig, TotalIndexState, ActiveRepos)
forall {b}.
FileMonitor
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)], [String])
b
fileMonitorImprovedPlan
(ProjectConfig
projectConfigMonitored, [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
localPackages, [String]
progsearchpath) (Rebuild
(ElaboratedInstallPlan, ElaboratedInstallPlan,
ElaboratedSharedConfig, TotalIndexState, ActiveRepos)
-> Rebuild
(ElaboratedInstallPlan, ElaboratedInstallPlan,
ElaboratedSharedConfig, TotalIndexState, ActiveRepos))
-> Rebuild
(ElaboratedInstallPlan, ElaboratedInstallPlan,
ElaboratedSharedConfig, TotalIndexState, ActiveRepos)
-> Rebuild
(ElaboratedInstallPlan, ElaboratedInstallPlan,
ElaboratedSharedConfig, TotalIndexState, ActiveRepos)
forall a b. (a -> b) -> a -> b
$ do
(ElaboratedInstallPlan
elaboratedPlan, ElaboratedSharedConfig
elaboratedShared, TotalIndexState
totalIndexState, ActiveRepos
activeRepos) <-
Verbosity
-> FileMonitor
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)], [String])
(ElaboratedInstallPlan, ElaboratedSharedConfig, TotalIndexState,
ActiveRepos)
-> (ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)], [String])
-> Rebuild
(ElaboratedInstallPlan, ElaboratedSharedConfig, TotalIndexState,
ActiveRepos)
-> Rebuild
(ElaboratedInstallPlan, ElaboratedSharedConfig, TotalIndexState,
ActiveRepos)
forall a b.
(Binary a, Structured a, Binary b, Structured b) =>
Verbosity -> FileMonitor a b -> a -> Rebuild b -> Rebuild b
rerunIfChanged Verbosity
verbosity FileMonitor
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)], [String])
(ElaboratedInstallPlan, ElaboratedSharedConfig, TotalIndexState,
ActiveRepos)
forall {b}.
FileMonitor
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)], [String])
b
fileMonitorElaboratedPlan
(ProjectConfig
projectConfigMonitored, [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
localPackages,
[String]
progsearchpath) (Rebuild
(ElaboratedInstallPlan, ElaboratedSharedConfig, TotalIndexState,
ActiveRepos)
-> Rebuild
(ElaboratedInstallPlan, ElaboratedSharedConfig, TotalIndexState,
ActiveRepos))
-> Rebuild
(ElaboratedInstallPlan, ElaboratedSharedConfig, TotalIndexState,
ActiveRepos)
-> Rebuild
(ElaboratedInstallPlan, ElaboratedSharedConfig, TotalIndexState,
ActiveRepos)
forall a b. (a -> b) -> a -> b
$ do
(Compiler, Platform, ProgramDb)
compilerEtc <- ProjectConfig -> Rebuild (Compiler, Platform, ProgramDb)
phaseConfigureCompiler ProjectConfig
projectConfig
()
_ <- ProjectConfig -> (Compiler, Platform, ProgramDb) -> Rebuild ()
phaseConfigurePrograms ProjectConfig
projectConfig (Compiler, Platform, ProgramDb)
compilerEtc
(SolverInstallPlan
solverPlan, PkgConfigDb
pkgConfigDB, TotalIndexState
totalIndexState, ActiveRepos
activeRepos)
<- ProjectConfig
-> (Compiler, Platform, ProgramDb)
-> [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
-> Rebuild
(SolverInstallPlan, PkgConfigDb, TotalIndexState, ActiveRepos)
phaseRunSolver ProjectConfig
projectConfig
(Compiler, Platform, ProgramDb)
compilerEtc
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
localPackages
(ElaboratedInstallPlan
elaboratedPlan,
ElaboratedSharedConfig
elaboratedShared) <- ProjectConfig
-> (Compiler, Platform, ProgramDb)
-> PkgConfigDb
-> SolverInstallPlan
-> [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
-> Rebuild (ElaboratedInstallPlan, ElaboratedSharedConfig)
forall loc.
ProjectConfig
-> (Compiler, Platform, ProgramDb)
-> PkgConfigDb
-> SolverInstallPlan
-> [PackageSpecifier (SourcePackage (PackageLocation loc))]
-> Rebuild (ElaboratedInstallPlan, ElaboratedSharedConfig)
phaseElaboratePlan ProjectConfig
projectConfig
(Compiler, Platform, ProgramDb)
compilerEtc PkgConfigDb
pkgConfigDB
SolverInstallPlan
solverPlan
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
localPackages
ElaboratedInstallPlan -> ElaboratedSharedConfig -> Rebuild ()
phaseMaintainPlanOutputs ElaboratedInstallPlan
elaboratedPlan ElaboratedSharedConfig
elaboratedShared
(ElaboratedInstallPlan, ElaboratedSharedConfig, TotalIndexState,
ActiveRepos)
-> Rebuild
(ElaboratedInstallPlan, ElaboratedSharedConfig, TotalIndexState,
ActiveRepos)
forall a. a -> Rebuild a
forall (m :: * -> *) a. Monad m => a -> m a
return (ElaboratedInstallPlan
elaboratedPlan, ElaboratedSharedConfig
elaboratedShared, TotalIndexState
totalIndexState, ActiveRepos
activeRepos)
ElaboratedInstallPlan
improvedPlan <- ElaboratedInstallPlan
-> ElaboratedSharedConfig -> Rebuild ElaboratedInstallPlan
phaseImprovePlan ElaboratedInstallPlan
elaboratedPlan ElaboratedSharedConfig
elaboratedShared
(ElaboratedInstallPlan, ElaboratedInstallPlan,
ElaboratedSharedConfig, TotalIndexState, ActiveRepos)
-> Rebuild
(ElaboratedInstallPlan, ElaboratedInstallPlan,
ElaboratedSharedConfig, TotalIndexState, ActiveRepos)
forall a. a -> Rebuild a
forall (m :: * -> *) a. Monad m => a -> m a
return (ElaboratedInstallPlan
improvedPlan, ElaboratedInstallPlan
elaboratedPlan, ElaboratedSharedConfig
elaboratedShared, TotalIndexState
totalIndexState, ActiveRepos
activeRepos)
where
fileMonitorSolverPlan :: FileMonitor
(SolverSettings,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)],
Map PackageName (Map OptionalStanza Bool), Compiler, Platform,
[ConfiguredProgram])
b
fileMonitorSolverPlan = String
-> FileMonitor
(SolverSettings,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)],
Map PackageName (Map OptionalStanza Bool), Compiler, Platform,
[ConfiguredProgram])
b
forall a b. Eq a => String -> FileMonitor a b
newFileMonitorInCacheDir String
"solver-plan"
fileMonitorSourceHashes :: FileMonitor [(PackageIdentifier, UnresolvedPkgLoc)] b
fileMonitorSourceHashes = String -> FileMonitor [(PackageIdentifier, UnresolvedPkgLoc)] b
forall a b. Eq a => String -> FileMonitor a b
newFileMonitorInCacheDir String
"source-hashes"
fileMonitorElaboratedPlan :: FileMonitor
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)], [String])
b
fileMonitorElaboratedPlan = String
-> FileMonitor
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)], [String])
b
forall a b. Eq a => String -> FileMonitor a b
newFileMonitorInCacheDir String
"elaborated-plan"
fileMonitorImprovedPlan :: FileMonitor
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)], [String])
b
fileMonitorImprovedPlan = String
-> FileMonitor
(ProjectConfig,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)], [String])
b
forall a b. Eq a => String -> FileMonitor a b
newFileMonitorInCacheDir String
"improved-plan"
newFileMonitorInCacheDir :: Eq a => FilePath -> FileMonitor a b
newFileMonitorInCacheDir :: forall a b. Eq a => String -> FileMonitor a b
newFileMonitorInCacheDir = String -> FileMonitor a b
forall a b. Eq a => String -> FileMonitor a b
newFileMonitor (String -> FileMonitor a b)
-> (String -> String) -> String -> FileMonitor a b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String
distProjectCacheFile
phaseConfigureCompiler :: ProjectConfig
-> Rebuild (Compiler, Platform, ProgramDb)
phaseConfigureCompiler :: ProjectConfig -> Rebuild (Compiler, Platform, ProgramDb)
phaseConfigureCompiler = Verbosity
-> DistDirLayout
-> ProjectConfig
-> Rebuild (Compiler, Platform, ProgramDb)
configureCompiler Verbosity
verbosity DistDirLayout
distDirLayout
phaseConfigurePrograms :: ProjectConfig
-> (Compiler, Platform, ProgramDb)
-> Rebuild ()
phaseConfigurePrograms :: ProjectConfig -> (Compiler, Platform, ProgramDb) -> Rebuild ()
phaseConfigurePrograms ProjectConfig
projectConfig (Compiler
_, Platform
_, ProgramDb
compilerprogdb) = do
IO () -> Rebuild ()
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> Rebuild ()) -> IO () -> Rebuild ()
forall a b. (a -> b) -> a -> b
$ [ConfiguredProgram] -> Map PackageName PackageConfig -> IO ()
checkBadPerPackageCompilerPaths
(ProgramDb -> [ConfiguredProgram]
configuredPrograms ProgramDb
compilerprogdb)
(MapMappend PackageName PackageConfig
-> Map PackageName PackageConfig
forall k v. MapMappend k v -> Map k v
getMapMappend (ProjectConfig -> MapMappend PackageName PackageConfig
projectConfigSpecificPackage ProjectConfig
projectConfig))
phaseRunSolver
:: ProjectConfig
-> (Compiler, Platform, ProgramDb)
-> [PackageSpecifier UnresolvedSourcePackage]
-> Rebuild (SolverInstallPlan, PkgConfigDb, IndexUtils.TotalIndexState, IndexUtils.ActiveRepos)
phaseRunSolver :: ProjectConfig
-> (Compiler, Platform, ProgramDb)
-> [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
-> Rebuild
(SolverInstallPlan, PkgConfigDb, TotalIndexState, ActiveRepos)
phaseRunSolver projectConfig :: ProjectConfig
projectConfig@ProjectConfig {
ProjectConfigShared
projectConfigShared :: ProjectConfig -> ProjectConfigShared
projectConfigShared :: ProjectConfigShared
projectConfigShared,
ProjectConfigBuildOnly
projectConfigBuildOnly :: ProjectConfig -> ProjectConfigBuildOnly
projectConfigBuildOnly :: ProjectConfigBuildOnly
projectConfigBuildOnly
}
(Compiler
compiler, Platform
platform, ProgramDb
progdb)
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
localPackages =
Verbosity
-> FileMonitor
(SolverSettings,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)],
Map PackageName (Map OptionalStanza Bool), Compiler, Platform,
[ConfiguredProgram])
(SolverInstallPlan, PkgConfigDb, TotalIndexState, ActiveRepos)
-> (SolverSettings,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)],
Map PackageName (Map OptionalStanza Bool), Compiler, Platform,
[ConfiguredProgram])
-> Rebuild
(SolverInstallPlan, PkgConfigDb, TotalIndexState, ActiveRepos)
-> Rebuild
(SolverInstallPlan, PkgConfigDb, TotalIndexState, ActiveRepos)
forall a b.
(Binary a, Structured a, Binary b, Structured b) =>
Verbosity -> FileMonitor a b -> a -> Rebuild b -> Rebuild b
rerunIfChanged Verbosity
verbosity FileMonitor
(SolverSettings,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)],
Map PackageName (Map OptionalStanza Bool), Compiler, Platform,
[ConfiguredProgram])
(SolverInstallPlan, PkgConfigDb, TotalIndexState, ActiveRepos)
forall {b}.
FileMonitor
(SolverSettings,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)],
Map PackageName (Map OptionalStanza Bool), Compiler, Platform,
[ConfiguredProgram])
b
fileMonitorSolverPlan
(SolverSettings
solverSettings,
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
localPackages, Map PackageName (Map OptionalStanza Bool)
localPackagesEnabledStanzas,
Compiler
compiler, Platform
platform, ProgramDb -> [ConfiguredProgram]
programDbSignature ProgramDb
progdb) (Rebuild
(SolverInstallPlan, PkgConfigDb, TotalIndexState, ActiveRepos)
-> Rebuild
(SolverInstallPlan, PkgConfigDb, TotalIndexState, ActiveRepos))
-> Rebuild
(SolverInstallPlan, PkgConfigDb, TotalIndexState, ActiveRepos)
-> Rebuild
(SolverInstallPlan, PkgConfigDb, TotalIndexState, ActiveRepos)
forall a b. (a -> b) -> a -> b
$ do
InstalledPackageIndex
installedPkgIndex <- Verbosity
-> Compiler
-> ProgramDb
-> Platform
-> PackageDBStack
-> Rebuild InstalledPackageIndex
getInstalledPackages Verbosity
verbosity
Compiler
compiler ProgramDb
progdb Platform
platform
PackageDBStack
corePackageDbs
(SourcePackageDb
sourcePkgDb, TotalIndexState
tis, ActiveRepos
ar) <- Verbosity
-> (forall a. (RepoContext -> IO a) -> IO a)
-> Maybe TotalIndexState
-> Maybe ActiveRepos
-> Rebuild (SourcePackageDb, TotalIndexState, ActiveRepos)
getSourcePackages Verbosity
verbosity (RepoContext -> IO a) -> IO a
forall a. (RepoContext -> IO a) -> IO a
withRepoCtx
(SolverSettings -> Maybe TotalIndexState
solverSettingIndexState SolverSettings
solverSettings)
(SolverSettings -> Maybe ActiveRepos
solverSettingActiveRepos SolverSettings
solverSettings)
PkgConfigDb
pkgConfigDB <- Verbosity -> ProgramDb -> Rebuild PkgConfigDb
getPkgConfigDb Verbosity
verbosity ProgramDb
progdb
IO (SolverInstallPlan, PkgConfigDb, TotalIndexState, ActiveRepos)
-> Rebuild
(SolverInstallPlan, PkgConfigDb, TotalIndexState, ActiveRepos)
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (SolverInstallPlan, PkgConfigDb, TotalIndexState, ActiveRepos)
-> Rebuild
(SolverInstallPlan, PkgConfigDb, TotalIndexState, ActiveRepos))
-> IO
(SolverInstallPlan, PkgConfigDb, TotalIndexState, ActiveRepos)
-> Rebuild
(SolverInstallPlan, PkgConfigDb, TotalIndexState, ActiveRepos)
forall a b. (a -> b) -> a -> b
$ do
Solver
solver <- Verbosity -> PreSolver -> CompilerInfo -> IO Solver
chooseSolver Verbosity
verbosity
(SolverSettings -> PreSolver
solverSettingSolver SolverSettings
solverSettings)
(Compiler -> CompilerInfo
compilerInfo Compiler
compiler)
Verbosity -> String -> IO ()
notice Verbosity
verbosity String
"Resolving dependencies..."
Either String SolverInstallPlan
planOrError <- (String
-> IO (Either String SolverInstallPlan)
-> IO (Either String SolverInstallPlan))
-> (String -> IO (Either String SolverInstallPlan))
-> (SolverInstallPlan -> IO (Either String SolverInstallPlan))
-> Progress String String SolverInstallPlan
-> IO (Either String SolverInstallPlan)
forall step a fail done.
(step -> a -> a)
-> (fail -> a) -> (done -> a) -> Progress step fail done -> a
foldProgress String
-> IO (Either String SolverInstallPlan)
-> IO (Either String SolverInstallPlan)
forall {b}. String -> IO b -> IO b
logMsg (Either String SolverInstallPlan
-> IO (Either String SolverInstallPlan)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Either String SolverInstallPlan
-> IO (Either String SolverInstallPlan))
-> (String -> Either String SolverInstallPlan)
-> String
-> IO (Either String SolverInstallPlan)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Either String SolverInstallPlan
forall a b. a -> Either a b
Left) (Either String SolverInstallPlan
-> IO (Either String SolverInstallPlan)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Either String SolverInstallPlan
-> IO (Either String SolverInstallPlan))
-> (SolverInstallPlan -> Either String SolverInstallPlan)
-> SolverInstallPlan
-> IO (Either String SolverInstallPlan)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SolverInstallPlan -> Either String SolverInstallPlan
forall a b. b -> Either a b
Right) (Progress String String SolverInstallPlan
-> IO (Either String SolverInstallPlan))
-> Progress String String SolverInstallPlan
-> IO (Either String SolverInstallPlan)
forall a b. (a -> b) -> a -> b
$
Verbosity
-> Compiler
-> Platform
-> Solver
-> SolverSettings
-> InstalledPackageIndex
-> SourcePackageDb
-> PkgConfigDb
-> [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
-> Map PackageName (Map OptionalStanza Bool)
-> Progress String String SolverInstallPlan
planPackages Verbosity
verbosity Compiler
compiler Platform
platform Solver
solver SolverSettings
solverSettings
InstalledPackageIndex
installedPkgIndex SourcePackageDb
sourcePkgDb PkgConfigDb
pkgConfigDB
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
localPackages Map PackageName (Map OptionalStanza Bool)
localPackagesEnabledStanzas
case Either String SolverInstallPlan
planOrError of
Left String
msg -> do ProjectConfig
-> Compiler
-> Platform
-> [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
-> IO ()
reportPlanningFailure ProjectConfig
projectConfig Compiler
compiler Platform
platform [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
localPackages
Verbosity
-> String
-> IO
(SolverInstallPlan, PkgConfigDb, TotalIndexState, ActiveRepos)
forall a. Verbosity -> String -> IO a
die' Verbosity
verbosity String
msg
Right SolverInstallPlan
plan -> (SolverInstallPlan, PkgConfigDb, TotalIndexState, ActiveRepos)
-> IO
(SolverInstallPlan, PkgConfigDb, TotalIndexState, ActiveRepos)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (SolverInstallPlan
plan, PkgConfigDb
pkgConfigDB, TotalIndexState
tis, ActiveRepos
ar)
where
corePackageDbs :: [PackageDB]
corePackageDbs :: PackageDBStack
corePackageDbs = PackageDBStack -> [Maybe PackageDB] -> PackageDBStack
applyPackageDbFlags [PackageDB
GlobalPackageDB]
(ProjectConfigShared -> [Maybe PackageDB]
projectConfigPackageDBs ProjectConfigShared
projectConfigShared)
withRepoCtx :: (RepoContext -> IO a) -> IO a
withRepoCtx = Verbosity
-> ProjectConfigShared
-> ProjectConfigBuildOnly
-> (RepoContext -> IO a)
-> IO a
forall a.
Verbosity
-> ProjectConfigShared
-> ProjectConfigBuildOnly
-> (RepoContext -> IO a)
-> IO a
projectConfigWithSolverRepoContext Verbosity
verbosity
ProjectConfigShared
projectConfigShared
ProjectConfigBuildOnly
projectConfigBuildOnly
solverSettings :: SolverSettings
solverSettings = ProjectConfig -> SolverSettings
resolveSolverSettings ProjectConfig
projectConfig
logMsg :: String -> IO b -> IO b
logMsg String
message IO b
rest = Verbosity -> String -> IO ()
debugNoWrap Verbosity
verbosity String
message IO () -> IO b -> IO b
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> IO b
rest
localPackagesEnabledStanzas :: Map PackageName (Map OptionalStanza Bool)
localPackagesEnabledStanzas =
[(PackageName, Map OptionalStanza Bool)]
-> Map PackageName (Map OptionalStanza Bool)
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList
[ (PackageName
pkgname, Map OptionalStanza Bool
stanzas)
| PackageSpecifier (SourcePackage UnresolvedPkgLoc)
pkg <- [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
localPackages
, let pkgname :: PackageName
pkgname = PackageSpecifier (SourcePackage UnresolvedPkgLoc) -> PackageName
forall pkg. Package pkg => PackageSpecifier pkg -> PackageName
pkgSpecifierTarget PackageSpecifier (SourcePackage UnresolvedPkgLoc)
pkg
testsEnabled :: Flag Bool
testsEnabled = (PackageConfig -> Flag Bool)
-> ProjectConfig -> PackageName -> Flag Bool
forall a.
(Semigroup a, Monoid a) =>
(PackageConfig -> a) -> ProjectConfig -> PackageName -> a
lookupLocalPackageConfig
PackageConfig -> Flag Bool
packageConfigTests
ProjectConfig
projectConfig PackageName
pkgname
benchmarksEnabled :: Flag Bool
benchmarksEnabled = (PackageConfig -> Flag Bool)
-> ProjectConfig -> PackageName -> Flag Bool
forall a.
(Semigroup a, Monoid a) =>
(PackageConfig -> a) -> ProjectConfig -> PackageName -> a
lookupLocalPackageConfig
PackageConfig -> Flag Bool
packageConfigBenchmarks
ProjectConfig
projectConfig PackageName
pkgname
isLocal :: Bool
isLocal = Maybe PackageIdentifier -> Bool
forall a. Maybe a -> Bool
isJust (PackageSpecifier (SourcePackage UnresolvedPkgLoc)
-> Maybe PackageIdentifier
forall loc.
PackageSpecifier (SourcePackage (PackageLocation loc))
-> Maybe PackageIdentifier
shouldBeLocal PackageSpecifier (SourcePackage UnresolvedPkgLoc)
pkg)
stanzas :: Map OptionalStanza Bool
stanzas
| Bool
isLocal = [(OptionalStanza, Bool)] -> Map OptionalStanza Bool
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList ([(OptionalStanza, Bool)] -> Map OptionalStanza Bool)
-> [(OptionalStanza, Bool)] -> Map OptionalStanza Bool
forall a b. (a -> b) -> a -> b
$
[ (OptionalStanza
TestStanzas, Bool
enabled)
| Bool
enabled <- Flag Bool -> [Bool]
forall a. Flag a -> [a]
flagToList Flag Bool
testsEnabled ] [(OptionalStanza, Bool)]
-> [(OptionalStanza, Bool)] -> [(OptionalStanza, Bool)]
forall a. [a] -> [a] -> [a]
++
[ (OptionalStanza
BenchStanzas , Bool
enabled)
| Bool
enabled <- Flag Bool -> [Bool]
forall a. Flag a -> [a]
flagToList Flag Bool
benchmarksEnabled ]
| Bool
otherwise = [(OptionalStanza, Bool)] -> Map OptionalStanza Bool
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList [(OptionalStanza
TestStanzas, Bool
False), (OptionalStanza
BenchStanzas, Bool
False) ]
]
phaseElaboratePlan :: ProjectConfig
-> (Compiler, Platform, ProgramDb)
-> PkgConfigDb
-> SolverInstallPlan
-> [PackageSpecifier (SourcePackage (PackageLocation loc))]
-> Rebuild ( ElaboratedInstallPlan
, ElaboratedSharedConfig )
phaseElaboratePlan :: forall loc.
ProjectConfig
-> (Compiler, Platform, ProgramDb)
-> PkgConfigDb
-> SolverInstallPlan
-> [PackageSpecifier (SourcePackage (PackageLocation loc))]
-> Rebuild (ElaboratedInstallPlan, ElaboratedSharedConfig)
phaseElaboratePlan ProjectConfig {
ProjectConfigShared
projectConfigShared :: ProjectConfig -> ProjectConfigShared
projectConfigShared :: ProjectConfigShared
projectConfigShared,
PackageConfig
projectConfigAllPackages :: PackageConfig
projectConfigAllPackages :: ProjectConfig -> PackageConfig
projectConfigAllPackages,
PackageConfig
projectConfigLocalPackages :: ProjectConfig -> PackageConfig
projectConfigLocalPackages :: PackageConfig
projectConfigLocalPackages,
MapMappend PackageName PackageConfig
projectConfigSpecificPackage :: ProjectConfig -> MapMappend PackageName PackageConfig
projectConfigSpecificPackage :: MapMappend PackageName PackageConfig
projectConfigSpecificPackage,
ProjectConfigBuildOnly
projectConfigBuildOnly :: ProjectConfig -> ProjectConfigBuildOnly
projectConfigBuildOnly :: ProjectConfigBuildOnly
projectConfigBuildOnly
}
(Compiler
compiler, Platform
platform, ProgramDb
progdb) PkgConfigDb
pkgConfigDB
SolverInstallPlan
solverPlan [PackageSpecifier (SourcePackage (PackageLocation loc))]
localPackages = do
IO () -> Rebuild ()
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> Rebuild ()) -> IO () -> Rebuild ()
forall a b. (a -> b) -> a -> b
$ Verbosity -> String -> IO ()
debug Verbosity
verbosity String
"Elaborating the install plan..."
Map PackageIdentifier PackageSourceHash
sourcePackageHashes <-
Verbosity
-> FileMonitor
[(PackageIdentifier, UnresolvedPkgLoc)]
(Map PackageIdentifier PackageSourceHash)
-> [(PackageIdentifier, UnresolvedPkgLoc)]
-> Rebuild (Map PackageIdentifier PackageSourceHash)
-> Rebuild (Map PackageIdentifier PackageSourceHash)
forall a b.
(Binary a, Structured a, Binary b, Structured b) =>
Verbosity -> FileMonitor a b -> a -> Rebuild b -> Rebuild b
rerunIfChanged Verbosity
verbosity FileMonitor
[(PackageIdentifier, UnresolvedPkgLoc)]
(Map PackageIdentifier PackageSourceHash)
forall {b}. FileMonitor [(PackageIdentifier, UnresolvedPkgLoc)] b
fileMonitorSourceHashes
(SolverInstallPlan -> [(PackageIdentifier, UnresolvedPkgLoc)]
packageLocationsSignature SolverInstallPlan
solverPlan) (Rebuild (Map PackageIdentifier PackageSourceHash)
-> Rebuild (Map PackageIdentifier PackageSourceHash))
-> Rebuild (Map PackageIdentifier PackageSourceHash)
-> Rebuild (Map PackageIdentifier PackageSourceHash)
forall a b. (a -> b) -> a -> b
$
Verbosity
-> (forall a. (RepoContext -> IO a) -> IO a)
-> SolverInstallPlan
-> Rebuild (Map PackageIdentifier PackageSourceHash)
getPackageSourceHashes Verbosity
verbosity (RepoContext -> IO a) -> IO a
forall a. (RepoContext -> IO a) -> IO a
withRepoCtx SolverInstallPlan
solverPlan
InstallDirTemplates
defaultInstallDirs <- IO InstallDirTemplates -> Rebuild InstallDirTemplates
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO InstallDirTemplates -> Rebuild InstallDirTemplates)
-> IO InstallDirTemplates -> Rebuild InstallDirTemplates
forall a b. (a -> b) -> a -> b
$ Compiler -> IO InstallDirTemplates
userInstallDirTemplates Compiler
compiler
(ElaboratedInstallPlan
elaboratedPlan, ElaboratedSharedConfig
elaboratedShared)
<- IO (ElaboratedInstallPlan, ElaboratedSharedConfig)
-> Rebuild (ElaboratedInstallPlan, ElaboratedSharedConfig)
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (ElaboratedInstallPlan, ElaboratedSharedConfig)
-> Rebuild (ElaboratedInstallPlan, ElaboratedSharedConfig))
-> (LogProgress (ElaboratedInstallPlan, ElaboratedSharedConfig)
-> IO (ElaboratedInstallPlan, ElaboratedSharedConfig))
-> LogProgress (ElaboratedInstallPlan, ElaboratedSharedConfig)
-> Rebuild (ElaboratedInstallPlan, ElaboratedSharedConfig)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Verbosity
-> LogProgress (ElaboratedInstallPlan, ElaboratedSharedConfig)
-> IO (ElaboratedInstallPlan, ElaboratedSharedConfig)
forall a. Verbosity -> LogProgress a -> IO a
runLogProgress Verbosity
verbosity (LogProgress (ElaboratedInstallPlan, ElaboratedSharedConfig)
-> Rebuild (ElaboratedInstallPlan, ElaboratedSharedConfig))
-> LogProgress (ElaboratedInstallPlan, ElaboratedSharedConfig)
-> Rebuild (ElaboratedInstallPlan, ElaboratedSharedConfig)
forall a b. (a -> b) -> a -> b
$
Verbosity
-> Platform
-> Compiler
-> ProgramDb
-> PkgConfigDb
-> DistDirLayout
-> StoreDirLayout
-> SolverInstallPlan
-> [PackageSpecifier (SourcePackage (PackageLocation loc))]
-> Map PackageIdentifier PackageSourceHash
-> InstallDirTemplates
-> ProjectConfigShared
-> PackageConfig
-> PackageConfig
-> Map PackageName PackageConfig
-> LogProgress (ElaboratedInstallPlan, ElaboratedSharedConfig)
forall loc.
Verbosity
-> Platform
-> Compiler
-> ProgramDb
-> PkgConfigDb
-> DistDirLayout
-> StoreDirLayout
-> SolverInstallPlan
-> [PackageSpecifier (SourcePackage (PackageLocation loc))]
-> Map PackageIdentifier PackageSourceHash
-> InstallDirTemplates
-> ProjectConfigShared
-> PackageConfig
-> PackageConfig
-> Map PackageName PackageConfig
-> LogProgress (ElaboratedInstallPlan, ElaboratedSharedConfig)
elaborateInstallPlan
Verbosity
verbosity
Platform
platform Compiler
compiler ProgramDb
progdb PkgConfigDb
pkgConfigDB
DistDirLayout
distDirLayout
StoreDirLayout
cabalStoreDirLayout
SolverInstallPlan
solverPlan
[PackageSpecifier (SourcePackage (PackageLocation loc))]
localPackages
Map PackageIdentifier PackageSourceHash
sourcePackageHashes
InstallDirTemplates
defaultInstallDirs
ProjectConfigShared
projectConfigShared
PackageConfig
projectConfigAllPackages
PackageConfig
projectConfigLocalPackages
(MapMappend PackageName PackageConfig
-> Map PackageName PackageConfig
forall k v. MapMappend k v -> Map k v
getMapMappend MapMappend PackageName PackageConfig
projectConfigSpecificPackage)
let instantiatedPlan :: ElaboratedInstallPlan
instantiatedPlan
= StoreDirLayout
-> InstallDirTemplates
-> ElaboratedSharedConfig
-> ElaboratedInstallPlan
-> ElaboratedInstallPlan
instantiateInstallPlan
StoreDirLayout
cabalStoreDirLayout
InstallDirTemplates
defaultInstallDirs
ElaboratedSharedConfig
elaboratedShared
ElaboratedInstallPlan
elaboratedPlan
IO () -> Rebuild ()
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> Rebuild ()) -> IO () -> Rebuild ()
forall a b. (a -> b) -> a -> b
$ Verbosity -> String -> IO ()
debugNoWrap Verbosity
verbosity (ElaboratedInstallPlan -> String
forall ipkg srcpkg.
(Package ipkg, Package srcpkg, IsUnit ipkg, IsUnit srcpkg) =>
GenericInstallPlan ipkg srcpkg -> String
InstallPlan.showInstallPlan ElaboratedInstallPlan
instantiatedPlan)
(ElaboratedInstallPlan, ElaboratedSharedConfig)
-> Rebuild (ElaboratedInstallPlan, ElaboratedSharedConfig)
forall a. a -> Rebuild a
forall (m :: * -> *) a. Monad m => a -> m a
return (ElaboratedInstallPlan
instantiatedPlan, ElaboratedSharedConfig
elaboratedShared)
where
withRepoCtx :: (RepoContext -> IO a) -> IO a
withRepoCtx = Verbosity
-> ProjectConfigShared
-> ProjectConfigBuildOnly
-> (RepoContext -> IO a)
-> IO a
forall a.
Verbosity
-> ProjectConfigShared
-> ProjectConfigBuildOnly
-> (RepoContext -> IO a)
-> IO a
projectConfigWithSolverRepoContext Verbosity
verbosity
ProjectConfigShared
projectConfigShared
ProjectConfigBuildOnly
projectConfigBuildOnly
phaseMaintainPlanOutputs :: ElaboratedInstallPlan
-> ElaboratedSharedConfig
-> Rebuild ()
phaseMaintainPlanOutputs :: ElaboratedInstallPlan -> ElaboratedSharedConfig -> Rebuild ()
phaseMaintainPlanOutputs ElaboratedInstallPlan
elaboratedPlan ElaboratedSharedConfig
elaboratedShared = IO () -> Rebuild ()
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> Rebuild ()) -> IO () -> Rebuild ()
forall a b. (a -> b) -> a -> b
$ do
Verbosity -> String -> IO ()
debug Verbosity
verbosity String
"Updating plan.json"
DistDirLayout
-> ElaboratedInstallPlan -> ElaboratedSharedConfig -> IO ()
writePlanExternalRepresentation
DistDirLayout
distDirLayout
ElaboratedInstallPlan
elaboratedPlan
ElaboratedSharedConfig
elaboratedShared
phaseImprovePlan :: ElaboratedInstallPlan
-> ElaboratedSharedConfig
-> Rebuild ElaboratedInstallPlan
phaseImprovePlan :: ElaboratedInstallPlan
-> ElaboratedSharedConfig -> Rebuild ElaboratedInstallPlan
phaseImprovePlan ElaboratedInstallPlan
elaboratedPlan ElaboratedSharedConfig
elaboratedShared = do
IO () -> Rebuild ()
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> Rebuild ()) -> IO () -> Rebuild ()
forall a b. (a -> b) -> a -> b
$ Verbosity -> String -> IO ()
debug Verbosity
verbosity String
"Improving the install plan..."
Set UnitId
storePkgIdSet <- StoreDirLayout -> CompilerId -> Rebuild (Set UnitId)
getStoreEntries StoreDirLayout
cabalStoreDirLayout CompilerId
compid
let improvedPlan :: ElaboratedInstallPlan
improvedPlan = Set UnitId -> ElaboratedInstallPlan -> ElaboratedInstallPlan
improveInstallPlanWithInstalledPackages
Set UnitId
storePkgIdSet
ElaboratedInstallPlan
elaboratedPlan
IO () -> Rebuild ()
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> Rebuild ()) -> IO () -> Rebuild ()
forall a b. (a -> b) -> a -> b
$ Verbosity -> String -> IO ()
debugNoWrap Verbosity
verbosity (ElaboratedInstallPlan -> String
forall ipkg srcpkg.
(Package ipkg, Package srcpkg, IsUnit ipkg, IsUnit srcpkg) =>
GenericInstallPlan ipkg srcpkg -> String
InstallPlan.showInstallPlan ElaboratedInstallPlan
improvedPlan)
ElaboratedInstallPlan -> Rebuild ElaboratedInstallPlan
forall a. a -> Rebuild a
forall (m :: * -> *) a. Monad m => a -> m a
return ElaboratedInstallPlan
improvedPlan
where
compid :: CompilerId
compid = Compiler -> CompilerId
compilerId (ElaboratedSharedConfig -> Compiler
pkgConfigCompiler ElaboratedSharedConfig
elaboratedShared)
reportPlanningFailure :: ProjectConfig -> Compiler -> Platform -> [PackageSpecifier UnresolvedSourcePackage] -> IO ()
reportPlanningFailure :: ProjectConfig
-> Compiler
-> Platform
-> [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
-> IO ()
reportPlanningFailure ProjectConfig
projectConfig Compiler
comp Platform
platform [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
pkgSpecifiers = Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when Bool
reportFailure (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
CompilerInfo
-> [PathTemplate]
-> [(BuildReport, Maybe Repo)]
-> Platform
-> IO ()
BuildReports.storeLocal (Compiler -> CompilerInfo
compilerInfo Compiler
comp)
(NubList PathTemplate -> [PathTemplate]
forall a. NubList a -> [a]
fromNubList (NubList PathTemplate -> [PathTemplate])
-> NubList PathTemplate -> [PathTemplate]
forall a b. (a -> b) -> a -> b
$ ProjectConfigBuildOnly -> NubList PathTemplate
projectConfigSummaryFile (ProjectConfigBuildOnly -> NubList PathTemplate)
-> (ProjectConfig -> ProjectConfigBuildOnly)
-> ProjectConfig
-> NubList PathTemplate
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ProjectConfig -> ProjectConfigBuildOnly
projectConfigBuildOnly (ProjectConfig -> NubList PathTemplate)
-> ProjectConfig -> NubList PathTemplate
forall a b. (a -> b) -> a -> b
$ ProjectConfig
projectConfig)
[(BuildReport, Maybe Repo)]
buildReports Platform
platform
where
reportFailure :: Bool
reportFailure = Flag Bool -> Bool
forall a. WithCallStack (Flag a -> a)
Cabal.fromFlag (Flag Bool -> Bool)
-> (ProjectConfig -> Flag Bool) -> ProjectConfig -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ProjectConfigBuildOnly -> Flag Bool
projectConfigReportPlanningFailure (ProjectConfigBuildOnly -> Flag Bool)
-> (ProjectConfig -> ProjectConfigBuildOnly)
-> ProjectConfig
-> Flag Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ProjectConfig -> ProjectConfigBuildOnly
projectConfigBuildOnly (ProjectConfig -> Bool) -> ProjectConfig -> Bool
forall a b. (a -> b) -> a -> b
$ ProjectConfig
projectConfig
pkgids :: [PackageIdentifier]
pkgids = (PackageSpecifier (SourcePackage UnresolvedPkgLoc)
-> Maybe PackageIdentifier)
-> [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
-> [PackageIdentifier]
forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe PackageSpecifier (SourcePackage UnresolvedPkgLoc)
-> Maybe PackageIdentifier
forall pkg.
Package pkg =>
PackageSpecifier pkg -> Maybe PackageIdentifier
theSpecifiedPackage [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
pkgSpecifiers
buildReports :: [(BuildReport, Maybe Repo)]
buildReports = Platform
-> CompilerId
-> [PackageIdentifier]
-> FlagAssignment
-> [(BuildReport, Maybe Repo)]
BuildReports.fromPlanningFailure Platform
platform
(Compiler -> CompilerId
compilerId Compiler
comp) [PackageIdentifier]
pkgids
(PackageConfig -> FlagAssignment
packageConfigFlagAssignment (PackageConfig -> FlagAssignment)
-> (ProjectConfig -> PackageConfig)
-> ProjectConfig
-> FlagAssignment
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ProjectConfig -> PackageConfig
projectConfigAllPackages (ProjectConfig -> FlagAssignment)
-> ProjectConfig -> FlagAssignment
forall a b. (a -> b) -> a -> b
$ ProjectConfig
projectConfig)
theSpecifiedPackage :: Package pkg => PackageSpecifier pkg -> Maybe PackageId
theSpecifiedPackage :: forall pkg.
Package pkg =>
PackageSpecifier pkg -> Maybe PackageIdentifier
theSpecifiedPackage PackageSpecifier pkg
pkgSpec =
case PackageSpecifier pkg
pkgSpec of
NamedPackage PackageName
name [PackagePropertyVersion VersionRange
version]
-> PackageName -> Version -> PackageIdentifier
PackageIdentifier PackageName
name (Version -> PackageIdentifier)
-> Maybe Version -> Maybe PackageIdentifier
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> VersionRange -> Maybe Version
trivialRange VersionRange
version
NamedPackage PackageName
_ [PackageProperty]
_ -> Maybe PackageIdentifier
forall a. Maybe a
Nothing
SpecificSourcePackage pkg
pkg -> PackageIdentifier -> Maybe PackageIdentifier
forall a. a -> Maybe a
Just (PackageIdentifier -> Maybe PackageIdentifier)
-> PackageIdentifier -> Maybe PackageIdentifier
forall a b. (a -> b) -> a -> b
$ pkg -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId pkg
pkg
trivialRange :: VersionRange -> Maybe Version
trivialRange :: VersionRange -> Maybe Version
trivialRange = Maybe Version
-> (Version -> Maybe Version)
-> (Version -> Maybe Version)
-> (Version -> Maybe Version)
-> (Maybe Version -> Maybe Version -> Maybe Version)
-> (Maybe Version -> Maybe Version -> Maybe Version)
-> VersionRange
-> Maybe Version
forall a.
a
-> (Version -> a)
-> (Version -> a)
-> (Version -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> VersionRange
-> a
foldVersionRange
Maybe Version
forall a. Maybe a
Nothing
Version -> Maybe Version
forall a. a -> Maybe a
Just
(\Version
_ -> Maybe Version
forall a. Maybe a
Nothing)
(\Version
_ -> Maybe Version
forall a. Maybe a
Nothing)
(\Maybe Version
_ Maybe Version
_ -> Maybe Version
forall a. Maybe a
Nothing)
(\Maybe Version
_ Maybe Version
_ -> Maybe Version
forall a. Maybe a
Nothing)
programsMonitorFiles :: ProgramDb -> [MonitorFilePath]
programsMonitorFiles :: ProgramDb -> [MonitorFilePath]
programsMonitorFiles ProgramDb
progdb =
[ MonitorFilePath
monitor
| ConfiguredProgram
prog <- ProgramDb -> [ConfiguredProgram]
configuredPrograms ProgramDb
progdb
, MonitorFilePath
monitor <- [String] -> String -> [MonitorFilePath]
monitorFileSearchPath (ConfiguredProgram -> [String]
programMonitorFiles ConfiguredProgram
prog)
(ConfiguredProgram -> String
programPath ConfiguredProgram
prog)
]
programDbSignature :: ProgramDb -> [ConfiguredProgram]
programDbSignature :: ProgramDb -> [ConfiguredProgram]
programDbSignature ProgramDb
progdb =
[ ConfiguredProgram
prog { programMonitorFiles :: [String]
programMonitorFiles = []
, programOverrideEnv :: [(String, Maybe String)]
programOverrideEnv = ((String, Maybe String) -> Bool)
-> [(String, Maybe String)] -> [(String, Maybe String)]
forall a. (a -> Bool) -> [a] -> [a]
filter ((String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/=String
"PATH") (String -> Bool)
-> ((String, Maybe String) -> String)
-> (String, Maybe String)
-> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String, Maybe String) -> String
forall a b. (a, b) -> a
fst)
(ConfiguredProgram -> [(String, Maybe String)]
programOverrideEnv ConfiguredProgram
prog) }
| ConfiguredProgram
prog <- ProgramDb -> [ConfiguredProgram]
configuredPrograms ProgramDb
progdb ]
getInstalledPackages :: Verbosity
-> Compiler -> ProgramDb -> Platform
-> PackageDBStack
-> Rebuild InstalledPackageIndex
getInstalledPackages :: Verbosity
-> Compiler
-> ProgramDb
-> Platform
-> PackageDBStack
-> Rebuild InstalledPackageIndex
getInstalledPackages Verbosity
verbosity Compiler
compiler ProgramDb
progdb Platform
platform PackageDBStack
packagedbs = do
[MonitorFilePath] -> Rebuild ()
monitorFiles ([MonitorFilePath] -> Rebuild ())
-> ([String] -> [MonitorFilePath]) -> [String] -> Rebuild ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> MonitorFilePath) -> [String] -> [MonitorFilePath]
forall a b. (a -> b) -> [a] -> [b]
map String -> MonitorFilePath
monitorFileOrDirectory
([String] -> Rebuild ()) -> Rebuild [String] -> Rebuild ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IO [String] -> Rebuild [String]
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (Verbosity
-> Compiler
-> PackageDBStack
-> ProgramDb
-> Platform
-> IO [String]
IndexUtils.getInstalledPackagesMonitorFiles
Verbosity
verbosity Compiler
compiler
PackageDBStack
packagedbs ProgramDb
progdb Platform
platform)
IO InstalledPackageIndex -> Rebuild InstalledPackageIndex
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO InstalledPackageIndex -> Rebuild InstalledPackageIndex)
-> IO InstalledPackageIndex -> Rebuild InstalledPackageIndex
forall a b. (a -> b) -> a -> b
$ Verbosity
-> Compiler
-> PackageDBStack
-> ProgramDb
-> IO InstalledPackageIndex
IndexUtils.getInstalledPackages
Verbosity
verbosity Compiler
compiler
PackageDBStack
packagedbs ProgramDb
progdb
getSourcePackages
:: Verbosity
-> (forall a. (RepoContext -> IO a) -> IO a)
-> Maybe IndexUtils.TotalIndexState
-> Maybe IndexUtils.ActiveRepos
-> Rebuild (SourcePackageDb, IndexUtils.TotalIndexState, IndexUtils.ActiveRepos)
getSourcePackages :: Verbosity
-> (forall a. (RepoContext -> IO a) -> IO a)
-> Maybe TotalIndexState
-> Maybe ActiveRepos
-> Rebuild (SourcePackageDb, TotalIndexState, ActiveRepos)
getSourcePackages Verbosity
verbosity forall a. (RepoContext -> IO a) -> IO a
withRepoCtx Maybe TotalIndexState
idxState Maybe ActiveRepos
activeRepos = do
((SourcePackageDb, TotalIndexState, ActiveRepos)
sourcePkgDbWithTIS, [Repo]
repos) <-
IO ((SourcePackageDb, TotalIndexState, ActiveRepos), [Repo])
-> Rebuild
((SourcePackageDb, TotalIndexState, ActiveRepos), [Repo])
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ((SourcePackageDb, TotalIndexState, ActiveRepos), [Repo])
-> Rebuild
((SourcePackageDb, TotalIndexState, ActiveRepos), [Repo]))
-> IO ((SourcePackageDb, TotalIndexState, ActiveRepos), [Repo])
-> Rebuild
((SourcePackageDb, TotalIndexState, ActiveRepos), [Repo])
forall a b. (a -> b) -> a -> b
$
(RepoContext
-> IO ((SourcePackageDb, TotalIndexState, ActiveRepos), [Repo]))
-> IO ((SourcePackageDb, TotalIndexState, ActiveRepos), [Repo])
forall a. (RepoContext -> IO a) -> IO a
withRepoCtx ((RepoContext
-> IO ((SourcePackageDb, TotalIndexState, ActiveRepos), [Repo]))
-> IO ((SourcePackageDb, TotalIndexState, ActiveRepos), [Repo]))
-> (RepoContext
-> IO ((SourcePackageDb, TotalIndexState, ActiveRepos), [Repo]))
-> IO ((SourcePackageDb, TotalIndexState, ActiveRepos), [Repo])
forall a b. (a -> b) -> a -> b
$ \RepoContext
repoctx -> do
(SourcePackageDb, TotalIndexState, ActiveRepos)
sourcePkgDbWithTIS <- Verbosity
-> RepoContext
-> Maybe TotalIndexState
-> Maybe ActiveRepos
-> IO (SourcePackageDb, TotalIndexState, ActiveRepos)
IndexUtils.getSourcePackagesAtIndexState Verbosity
verbosity RepoContext
repoctx Maybe TotalIndexState
idxState Maybe ActiveRepos
activeRepos
((SourcePackageDb, TotalIndexState, ActiveRepos), [Repo])
-> IO ((SourcePackageDb, TotalIndexState, ActiveRepos), [Repo])
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ((SourcePackageDb, TotalIndexState, ActiveRepos)
sourcePkgDbWithTIS, RepoContext -> [Repo]
repoContextRepos RepoContext
repoctx)
(String -> Rebuild ()) -> [String] -> Rebuild ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
(a -> f b) -> t a -> f ()
traverse_ String -> Rebuild ()
needIfExists
([String] -> Rebuild ())
-> ([Repo] -> [String]) -> [Repo] -> Rebuild ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Repo] -> [String]
IndexUtils.getSourcePackagesMonitorFiles
([Repo] -> Rebuild ()) -> [Repo] -> Rebuild ()
forall a b. (a -> b) -> a -> b
$ [Repo]
repos
(SourcePackageDb, TotalIndexState, ActiveRepos)
-> Rebuild (SourcePackageDb, TotalIndexState, ActiveRepos)
forall a. a -> Rebuild a
forall (m :: * -> *) a. Monad m => a -> m a
return (SourcePackageDb, TotalIndexState, ActiveRepos)
sourcePkgDbWithTIS
getPkgConfigDb :: Verbosity -> ProgramDb -> Rebuild PkgConfigDb
getPkgConfigDb :: Verbosity -> ProgramDb -> Rebuild PkgConfigDb
getPkgConfigDb Verbosity
verbosity ProgramDb
progdb = do
[String]
dirs <- IO [String] -> Rebuild [String]
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO [String] -> Rebuild [String])
-> IO [String] -> Rebuild [String]
forall a b. (a -> b) -> a -> b
$ Verbosity -> ProgramDb -> IO [String]
getPkgConfigDbDirs Verbosity
verbosity ProgramDb
progdb
(String -> Rebuild Bool) -> [String] -> Rebuild ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
(a -> f b) -> t a -> f ()
traverse_ String -> Rebuild Bool
monitorDirectoryStatus [String]
dirs
IO PkgConfigDb -> Rebuild PkgConfigDb
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO PkgConfigDb -> Rebuild PkgConfigDb)
-> IO PkgConfigDb -> Rebuild PkgConfigDb
forall a b. (a -> b) -> a -> b
$ Verbosity -> ProgramDb -> IO PkgConfigDb
readPkgConfigDb Verbosity
verbosity ProgramDb
progdb
packageLocationsSignature :: SolverInstallPlan
-> [(PackageId, PackageLocation (Maybe FilePath))]
packageLocationsSignature :: SolverInstallPlan -> [(PackageIdentifier, UnresolvedPkgLoc)]
packageLocationsSignature SolverInstallPlan
solverPlan =
[ (SourcePackage UnresolvedPkgLoc -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId SourcePackage UnresolvedPkgLoc
pkg, SourcePackage UnresolvedPkgLoc -> UnresolvedPkgLoc
forall loc. SourcePackage loc -> loc
srcpkgSource SourcePackage UnresolvedPkgLoc
pkg)
| SolverInstallPlan.Configured (SolverPackage { solverPkgSource :: forall loc. SolverPackage loc -> SourcePackage loc
solverPkgSource = SourcePackage UnresolvedPkgLoc
pkg})
<- SolverInstallPlan -> [ResolverPackage UnresolvedPkgLoc]
SolverInstallPlan.toList SolverInstallPlan
solverPlan
]
getPackageSourceHashes :: Verbosity
-> (forall a. (RepoContext -> IO a) -> IO a)
-> SolverInstallPlan
-> Rebuild (Map PackageId PackageSourceHash)
getPackageSourceHashes :: Verbosity
-> (forall a. (RepoContext -> IO a) -> IO a)
-> SolverInstallPlan
-> Rebuild (Map PackageIdentifier PackageSourceHash)
getPackageSourceHashes Verbosity
verbosity forall a. (RepoContext -> IO a) -> IO a
withRepoCtx SolverInstallPlan
solverPlan = do
let allPkgLocations :: [(PackageId, PackageLocation (Maybe FilePath))]
allPkgLocations :: [(PackageIdentifier, UnresolvedPkgLoc)]
allPkgLocations =
[ (SourcePackage UnresolvedPkgLoc -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId SourcePackage UnresolvedPkgLoc
pkg, SourcePackage UnresolvedPkgLoc -> UnresolvedPkgLoc
forall loc. SourcePackage loc -> loc
srcpkgSource SourcePackage UnresolvedPkgLoc
pkg)
| SolverInstallPlan.Configured (SolverPackage { solverPkgSource :: forall loc. SolverPackage loc -> SourcePackage loc
solverPkgSource = SourcePackage UnresolvedPkgLoc
pkg})
<- SolverInstallPlan -> [ResolverPackage UnresolvedPkgLoc]
SolverInstallPlan.toList SolverInstallPlan
solverPlan ]
localTarballPkgs :: [(PackageId, FilePath)]
localTarballPkgs :: [(PackageIdentifier, String)]
localTarballPkgs =
[ (PackageIdentifier
pkgid, String
tarball)
| (PackageIdentifier
pkgid, LocalTarballPackage String
tarball) <- [(PackageIdentifier, UnresolvedPkgLoc)]
allPkgLocations ]
remoteTarballPkgs :: [(PackageIdentifier, String)]
remoteTarballPkgs =
[ (PackageIdentifier
pkgid, String
tarball)
| (PackageIdentifier
pkgid, RemoteTarballPackage URI
_ (Just String
tarball)) <- [(PackageIdentifier, UnresolvedPkgLoc)]
allPkgLocations ]
sourceRepoTarballPkgs :: [(PackageIdentifier, String)]
sourceRepoTarballPkgs =
[ (PackageIdentifier
pkgid, String
tarball)
| (PackageIdentifier
pkgid, RemoteSourceRepoPackage SourceRepoMaybe
_ (Just String
tarball)) <- [(PackageIdentifier, UnresolvedPkgLoc)]
allPkgLocations ]
repoTarballPkgsWithMetadata :: [(PackageId, Repo)]
repoTarballPkgsWithoutMetadata :: [(PackageId, Repo)]
([(PackageIdentifier, Repo)]
repoTarballPkgsWithMetadata,
[(PackageIdentifier, Repo)]
repoTarballPkgsWithoutMetadata) =
[Either (PackageIdentifier, Repo) (PackageIdentifier, Repo)]
-> ([(PackageIdentifier, Repo)], [(PackageIdentifier, Repo)])
forall a b. [Either a b] -> ([a], [b])
partitionEithers
[ case Repo
repo of
RepoSecure{} -> (PackageIdentifier, Repo)
-> Either (PackageIdentifier, Repo) (PackageIdentifier, Repo)
forall a b. a -> Either a b
Left (PackageIdentifier
pkgid, Repo
repo)
Repo
_ -> (PackageIdentifier, Repo)
-> Either (PackageIdentifier, Repo) (PackageIdentifier, Repo)
forall a b. b -> Either a b
Right (PackageIdentifier
pkgid, Repo
repo)
| (PackageIdentifier
pkgid, RepoTarballPackage Repo
repo PackageIdentifier
_ Maybe String
_) <- [(PackageIdentifier, UnresolvedPkgLoc)]
allPkgLocations ]
([(PackageIdentifier, Repo)]
repoTarballPkgsToDownload,
[(PackageIdentifier, String)]
repoTarballPkgsDownloaded)
<- ([Either (PackageIdentifier, Repo) (PackageIdentifier, String)]
-> ([(PackageIdentifier, Repo)], [(PackageIdentifier, String)]))
-> Rebuild
[Either (PackageIdentifier, Repo) (PackageIdentifier, String)]
-> Rebuild
([(PackageIdentifier, Repo)], [(PackageIdentifier, String)])
forall a b. (a -> b) -> Rebuild a -> Rebuild b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [Either (PackageIdentifier, Repo) (PackageIdentifier, String)]
-> ([(PackageIdentifier, Repo)], [(PackageIdentifier, String)])
forall a b. [Either a b] -> ([a], [b])
partitionEithers (Rebuild
[Either (PackageIdentifier, Repo) (PackageIdentifier, String)]
-> Rebuild
([(PackageIdentifier, Repo)], [(PackageIdentifier, String)]))
-> Rebuild
[Either (PackageIdentifier, Repo) (PackageIdentifier, String)]
-> Rebuild
([(PackageIdentifier, Repo)], [(PackageIdentifier, String)])
forall a b. (a -> b) -> a -> b
$
IO [Either (PackageIdentifier, Repo) (PackageIdentifier, String)]
-> Rebuild
[Either (PackageIdentifier, Repo) (PackageIdentifier, String)]
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO [Either (PackageIdentifier, Repo) (PackageIdentifier, String)]
-> Rebuild
[Either (PackageIdentifier, Repo) (PackageIdentifier, String)])
-> IO
[Either (PackageIdentifier, Repo) (PackageIdentifier, String)]
-> Rebuild
[Either (PackageIdentifier, Repo) (PackageIdentifier, String)]
forall a b. (a -> b) -> a -> b
$ [IO (Either (PackageIdentifier, Repo) (PackageIdentifier, String))]
-> IO
[Either (PackageIdentifier, Repo) (PackageIdentifier, String)]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence
[ do Maybe String
mtarball <- Repo -> PackageIdentifier -> IO (Maybe String)
checkRepoTarballFetched Repo
repo PackageIdentifier
pkgid
case Maybe String
mtarball of
Maybe String
Nothing -> Either (PackageIdentifier, Repo) (PackageIdentifier, String)
-> IO
(Either (PackageIdentifier, Repo) (PackageIdentifier, String))
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ((PackageIdentifier, Repo)
-> Either (PackageIdentifier, Repo) (PackageIdentifier, String)
forall a b. a -> Either a b
Left (PackageIdentifier
pkgid, Repo
repo))
Just String
tarball -> Either (PackageIdentifier, Repo) (PackageIdentifier, String)
-> IO
(Either (PackageIdentifier, Repo) (PackageIdentifier, String))
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ((PackageIdentifier, String)
-> Either (PackageIdentifier, Repo) (PackageIdentifier, String)
forall a b. b -> Either a b
Right (PackageIdentifier
pkgid, String
tarball))
| (PackageIdentifier
pkgid, Repo
repo) <- [(PackageIdentifier, Repo)]
repoTarballPkgsWithoutMetadata ]
(Map PackageIdentifier PackageSourceHash
hashesFromRepoMetadata,
[(PackageIdentifier, String)]
repoTarballPkgsNewlyDownloaded) <-
if [(PackageIdentifier, Repo)] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [(PackageIdentifier, Repo)]
repoTarballPkgsToDownload Bool -> Bool -> Bool
&& [(PackageIdentifier, Repo)] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [(PackageIdentifier, Repo)]
repoTarballPkgsWithMetadata
then (Map PackageIdentifier PackageSourceHash,
[(PackageIdentifier, String)])
-> Rebuild
(Map PackageIdentifier PackageSourceHash,
[(PackageIdentifier, String)])
forall a. a -> Rebuild a
forall (m :: * -> *) a. Monad m => a -> m a
return (Map PackageIdentifier PackageSourceHash
forall k a. Map k a
Map.empty, [])
else IO
(Map PackageIdentifier PackageSourceHash,
[(PackageIdentifier, String)])
-> Rebuild
(Map PackageIdentifier PackageSourceHash,
[(PackageIdentifier, String)])
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Map PackageIdentifier PackageSourceHash,
[(PackageIdentifier, String)])
-> Rebuild
(Map PackageIdentifier PackageSourceHash,
[(PackageIdentifier, String)]))
-> IO
(Map PackageIdentifier PackageSourceHash,
[(PackageIdentifier, String)])
-> Rebuild
(Map PackageIdentifier PackageSourceHash,
[(PackageIdentifier, String)])
forall a b. (a -> b) -> a -> b
$ (RepoContext
-> IO
(Map PackageIdentifier PackageSourceHash,
[(PackageIdentifier, String)]))
-> IO
(Map PackageIdentifier PackageSourceHash,
[(PackageIdentifier, String)])
forall a. (RepoContext -> IO a) -> IO a
withRepoCtx ((RepoContext
-> IO
(Map PackageIdentifier PackageSourceHash,
[(PackageIdentifier, String)]))
-> IO
(Map PackageIdentifier PackageSourceHash,
[(PackageIdentifier, String)]))
-> (RepoContext
-> IO
(Map PackageIdentifier PackageSourceHash,
[(PackageIdentifier, String)]))
-> IO
(Map PackageIdentifier PackageSourceHash,
[(PackageIdentifier, String)])
forall a b. (a -> b) -> a -> b
$ \RepoContext
repoctx -> do
Map PackageIdentifier PackageSourceHash
hashesFromRepoMetadata <-
((Throws VerificationError, Throws SomeRemoteError,
Throws InvalidPackageException) =>
IO (Map PackageIdentifier PackageSourceHash))
-> IO (Map PackageIdentifier PackageSourceHash)
forall a.
((Throws VerificationError, Throws SomeRemoteError,
Throws InvalidPackageException) =>
IO a)
-> IO a
Sec.uncheckClientErrors (((Throws VerificationError, Throws SomeRemoteError,
Throws InvalidPackageException) =>
IO (Map PackageIdentifier PackageSourceHash))
-> IO (Map PackageIdentifier PackageSourceHash))
-> ((Throws VerificationError, Throws SomeRemoteError,
Throws InvalidPackageException) =>
IO (Map PackageIdentifier PackageSourceHash))
-> IO (Map PackageIdentifier PackageSourceHash)
forall a b. (a -> b) -> a -> b
$
([[(PackageIdentifier, PackageSourceHash)]]
-> Map PackageIdentifier PackageSourceHash)
-> IO [[(PackageIdentifier, PackageSourceHash)]]
-> IO (Map PackageIdentifier PackageSourceHash)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ([(PackageIdentifier, PackageSourceHash)]
-> Map PackageIdentifier PackageSourceHash
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList ([(PackageIdentifier, PackageSourceHash)]
-> Map PackageIdentifier PackageSourceHash)
-> ([[(PackageIdentifier, PackageSourceHash)]]
-> [(PackageIdentifier, PackageSourceHash)])
-> [[(PackageIdentifier, PackageSourceHash)]]
-> Map PackageIdentifier PackageSourceHash
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [[(PackageIdentifier, PackageSourceHash)]]
-> [(PackageIdentifier, PackageSourceHash)]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat) (IO [[(PackageIdentifier, PackageSourceHash)]]
-> IO (Map PackageIdentifier PackageSourceHash))
-> IO [[(PackageIdentifier, PackageSourceHash)]]
-> IO (Map PackageIdentifier PackageSourceHash)
forall a b. (a -> b) -> a -> b
$
[IO [(PackageIdentifier, PackageSourceHash)]]
-> IO [[(PackageIdentifier, PackageSourceHash)]]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence
[ RepoContext
-> forall a.
Repo -> (forall (down :: * -> *). Repository down -> IO a) -> IO a
repoContextWithSecureRepo RepoContext
repoctx Repo
repo ((forall {down :: * -> *}.
Repository down -> IO [(PackageIdentifier, PackageSourceHash)])
-> IO [(PackageIdentifier, PackageSourceHash)])
-> (forall {down :: * -> *}.
Repository down -> IO [(PackageIdentifier, PackageSourceHash)])
-> IO [(PackageIdentifier, PackageSourceHash)]
forall a b. (a -> b) -> a -> b
$ \Repository down
secureRepo ->
Repository down
-> (IndexCallbacks -> IO [(PackageIdentifier, PackageSourceHash)])
-> IO [(PackageIdentifier, PackageSourceHash)]
forall (down :: * -> *) a.
Repository down -> (IndexCallbacks -> IO a) -> IO a
Sec.withIndex Repository down
secureRepo ((IndexCallbacks -> IO [(PackageIdentifier, PackageSourceHash)])
-> IO [(PackageIdentifier, PackageSourceHash)])
-> (IndexCallbacks -> IO [(PackageIdentifier, PackageSourceHash)])
-> IO [(PackageIdentifier, PackageSourceHash)]
forall a b. (a -> b) -> a -> b
$ \IndexCallbacks
repoIndex ->
[IO (PackageIdentifier, PackageSourceHash)]
-> IO [(PackageIdentifier, PackageSourceHash)]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence
[ do Hash
hash <- Trusted Hash -> Hash
forall a. Trusted a -> a
Sec.trusted (Trusted Hash -> Hash) -> IO (Trusted Hash) -> IO Hash
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
IndexCallbacks
-> (Throws InvalidPackageException, Throws VerificationError) =>
PackageIdentifier -> IO (Trusted Hash)
Sec.indexLookupHash IndexCallbacks
repoIndex PackageIdentifier
pkgid
(PackageIdentifier, PackageSourceHash)
-> IO (PackageIdentifier, PackageSourceHash)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (PackageIdentifier
pkgid, Hash -> PackageSourceHash
hashFromTUF Hash
hash)
| PackageIdentifier
pkgid <- [PackageIdentifier]
pkgids ]
| (Repo
repo, [PackageIdentifier]
pkgids) <-
(NonEmpty (PackageIdentifier, Repo) -> (Repo, [PackageIdentifier]))
-> [NonEmpty (PackageIdentifier, Repo)]
-> [(Repo, [PackageIdentifier])]
forall a b. (a -> b) -> [a] -> [b]
map (\grp :: NonEmpty (PackageIdentifier, Repo)
grp@((PackageIdentifier
_,Repo
repo):|[(PackageIdentifier, Repo)]
_) -> (Repo
repo, ((PackageIdentifier, Repo) -> PackageIdentifier)
-> [(PackageIdentifier, Repo)] -> [PackageIdentifier]
forall a b. (a -> b) -> [a] -> [b]
map (PackageIdentifier, Repo) -> PackageIdentifier
forall a b. (a, b) -> a
fst (NonEmpty (PackageIdentifier, Repo) -> [(PackageIdentifier, Repo)]
forall a. NonEmpty a -> [a]
NE.toList NonEmpty (PackageIdentifier, Repo)
grp)))
([NonEmpty (PackageIdentifier, Repo)]
-> [(Repo, [PackageIdentifier])])
-> ([(PackageIdentifier, Repo)]
-> [NonEmpty (PackageIdentifier, Repo)])
-> [(PackageIdentifier, Repo)]
-> [(Repo, [PackageIdentifier])]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((PackageIdentifier, Repo) -> (PackageIdentifier, Repo) -> Bool)
-> [(PackageIdentifier, Repo)]
-> [NonEmpty (PackageIdentifier, Repo)]
forall (f :: * -> *) a.
Foldable f =>
(a -> a -> Bool) -> f a -> [NonEmpty a]
NE.groupBy (RepoName -> RepoName -> Bool
forall a. Eq a => a -> a -> Bool
(==) (RepoName -> RepoName -> Bool)
-> ((PackageIdentifier, Repo) -> RepoName)
-> (PackageIdentifier, Repo)
-> (PackageIdentifier, Repo)
-> Bool
forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
`on` (RemoteRepo -> RepoName
remoteRepoName (RemoteRepo -> RepoName)
-> ((PackageIdentifier, Repo) -> RemoteRepo)
-> (PackageIdentifier, Repo)
-> RepoName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Repo -> RemoteRepo
repoRemote (Repo -> RemoteRepo)
-> ((PackageIdentifier, Repo) -> Repo)
-> (PackageIdentifier, Repo)
-> RemoteRepo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PackageIdentifier, Repo) -> Repo
forall a b. (a, b) -> b
snd))
([(PackageIdentifier, Repo)]
-> [NonEmpty (PackageIdentifier, Repo)])
-> ([(PackageIdentifier, Repo)] -> [(PackageIdentifier, Repo)])
-> [(PackageIdentifier, Repo)]
-> [NonEmpty (PackageIdentifier, Repo)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((PackageIdentifier, Repo)
-> (PackageIdentifier, Repo) -> Ordering)
-> [(PackageIdentifier, Repo)] -> [(PackageIdentifier, Repo)]
forall a. (a -> a -> Ordering) -> [a] -> [a]
sortBy (RepoName -> RepoName -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (RepoName -> RepoName -> Ordering)
-> ((PackageIdentifier, Repo) -> RepoName)
-> (PackageIdentifier, Repo)
-> (PackageIdentifier, Repo)
-> Ordering
forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
`on` (RemoteRepo -> RepoName
remoteRepoName (RemoteRepo -> RepoName)
-> ((PackageIdentifier, Repo) -> RemoteRepo)
-> (PackageIdentifier, Repo)
-> RepoName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Repo -> RemoteRepo
repoRemote (Repo -> RemoteRepo)
-> ((PackageIdentifier, Repo) -> Repo)
-> (PackageIdentifier, Repo)
-> RemoteRepo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PackageIdentifier, Repo) -> Repo
forall a b. (a, b) -> b
snd))
([(PackageIdentifier, Repo)] -> [(Repo, [PackageIdentifier])])
-> [(PackageIdentifier, Repo)] -> [(Repo, [PackageIdentifier])]
forall a b. (a -> b) -> a -> b
$ [(PackageIdentifier, Repo)]
repoTarballPkgsWithMetadata
]
[(PackageIdentifier, String)]
repoTarballPkgsNewlyDownloaded <-
[IO (PackageIdentifier, String)]
-> IO [(PackageIdentifier, String)]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence
[ do String
tarball <- Verbosity -> RepoContext -> Repo -> PackageIdentifier -> IO String
fetchRepoTarball Verbosity
verbosity RepoContext
repoctx Repo
repo PackageIdentifier
pkgid
(PackageIdentifier, String) -> IO (PackageIdentifier, String)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (PackageIdentifier
pkgid, String
tarball)
| (PackageIdentifier
pkgid, Repo
repo) <- [(PackageIdentifier, Repo)]
repoTarballPkgsToDownload ]
(Map PackageIdentifier PackageSourceHash,
[(PackageIdentifier, String)])
-> IO
(Map PackageIdentifier PackageSourceHash,
[(PackageIdentifier, String)])
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Map PackageIdentifier PackageSourceHash
hashesFromRepoMetadata,
[(PackageIdentifier, String)]
repoTarballPkgsNewlyDownloaded)
let allTarballFilePkgs :: [(PackageId, FilePath)]
allTarballFilePkgs :: [(PackageIdentifier, String)]
allTarballFilePkgs = [(PackageIdentifier, String)]
localTarballPkgs
[(PackageIdentifier, String)]
-> [(PackageIdentifier, String)] -> [(PackageIdentifier, String)]
forall a. [a] -> [a] -> [a]
++ [(PackageIdentifier, String)]
remoteTarballPkgs
[(PackageIdentifier, String)]
-> [(PackageIdentifier, String)] -> [(PackageIdentifier, String)]
forall a. [a] -> [a] -> [a]
++ [(PackageIdentifier, String)]
sourceRepoTarballPkgs
[(PackageIdentifier, String)]
-> [(PackageIdentifier, String)] -> [(PackageIdentifier, String)]
forall a. [a] -> [a] -> [a]
++ [(PackageIdentifier, String)]
repoTarballPkgsDownloaded
[(PackageIdentifier, String)]
-> [(PackageIdentifier, String)] -> [(PackageIdentifier, String)]
forall a. [a] -> [a] -> [a]
++ [(PackageIdentifier, String)]
repoTarballPkgsNewlyDownloaded
Map PackageIdentifier PackageSourceHash
hashesFromTarballFiles <- IO (Map PackageIdentifier PackageSourceHash)
-> Rebuild (Map PackageIdentifier PackageSourceHash)
forall a. IO a -> Rebuild a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Map PackageIdentifier PackageSourceHash)
-> Rebuild (Map PackageIdentifier PackageSourceHash))
-> IO (Map PackageIdentifier PackageSourceHash)
-> Rebuild (Map PackageIdentifier PackageSourceHash)
forall a b. (a -> b) -> a -> b
$
([(PackageIdentifier, PackageSourceHash)]
-> Map PackageIdentifier PackageSourceHash)
-> IO [(PackageIdentifier, PackageSourceHash)]
-> IO (Map PackageIdentifier PackageSourceHash)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [(PackageIdentifier, PackageSourceHash)]
-> Map PackageIdentifier PackageSourceHash
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList (IO [(PackageIdentifier, PackageSourceHash)]
-> IO (Map PackageIdentifier PackageSourceHash))
-> IO [(PackageIdentifier, PackageSourceHash)]
-> IO (Map PackageIdentifier PackageSourceHash)
forall a b. (a -> b) -> a -> b
$
[IO (PackageIdentifier, PackageSourceHash)]
-> IO [(PackageIdentifier, PackageSourceHash)]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence
[ do PackageSourceHash
srchash <- String -> IO PackageSourceHash
readFileHashValue String
tarball
(PackageIdentifier, PackageSourceHash)
-> IO (PackageIdentifier, PackageSourceHash)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (PackageIdentifier
pkgid, PackageSourceHash
srchash)
| (PackageIdentifier
pkgid, String
tarball) <- [(PackageIdentifier, String)]
allTarballFilePkgs
]
[MonitorFilePath] -> Rebuild ()
monitorFiles [ String -> MonitorFilePath
monitorFile String
tarball
| (PackageIdentifier
_pkgid, String
tarball) <- [(PackageIdentifier, String)]
allTarballFilePkgs ]
Map PackageIdentifier PackageSourceHash
-> Rebuild (Map PackageIdentifier PackageSourceHash)
forall a. a -> Rebuild a
forall (m :: * -> *) a. Monad m => a -> m a
return (Map PackageIdentifier PackageSourceHash
-> Rebuild (Map PackageIdentifier PackageSourceHash))
-> Map PackageIdentifier PackageSourceHash
-> Rebuild (Map PackageIdentifier PackageSourceHash)
forall a b. (a -> b) -> a -> b
$! Map PackageIdentifier PackageSourceHash
hashesFromRepoMetadata
Map PackageIdentifier PackageSourceHash
-> Map PackageIdentifier PackageSourceHash
-> Map PackageIdentifier PackageSourceHash
forall a. Semigroup a => a -> a -> a
<> Map PackageIdentifier PackageSourceHash
hashesFromTarballFiles
applyPackageDbFlags :: PackageDBStack -> [Maybe PackageDB] -> PackageDBStack
applyPackageDbFlags :: PackageDBStack -> [Maybe PackageDB] -> PackageDBStack
applyPackageDbFlags PackageDBStack
dbs' [] = PackageDBStack
dbs'
applyPackageDbFlags PackageDBStack
_ (Maybe PackageDB
Nothing:[Maybe PackageDB]
dbs) = PackageDBStack -> [Maybe PackageDB] -> PackageDBStack
applyPackageDbFlags [] [Maybe PackageDB]
dbs
applyPackageDbFlags PackageDBStack
dbs' (Just PackageDB
db:[Maybe PackageDB]
dbs) = PackageDBStack -> [Maybe PackageDB] -> PackageDBStack
applyPackageDbFlags (PackageDBStack
dbs' PackageDBStack -> PackageDBStack -> PackageDBStack
forall a. [a] -> [a] -> [a]
++ [PackageDB
db]) [Maybe PackageDB]
dbs
planPackages :: Verbosity
-> Compiler
-> Platform
-> Solver -> SolverSettings
-> InstalledPackageIndex
-> SourcePackageDb
-> PkgConfigDb
-> [PackageSpecifier UnresolvedSourcePackage]
-> Map PackageName (Map OptionalStanza Bool)
-> Progress String String SolverInstallPlan
planPackages :: Verbosity
-> Compiler
-> Platform
-> Solver
-> SolverSettings
-> InstalledPackageIndex
-> SourcePackageDb
-> PkgConfigDb
-> [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
-> Map PackageName (Map OptionalStanza Bool)
-> Progress String String SolverInstallPlan
planPackages Verbosity
verbosity Compiler
comp Platform
platform Solver
solver SolverSettings{[(UserConstraint, ConstraintSource)]
[PackageVersionConstraint]
[LocalRepo]
[RemoteRepo]
Maybe Int
Maybe Version
Maybe TotalIndexState
Maybe ActiveRepos
Map PackageName FlagAssignment
OnlyConstrained
AllowBootLibInstalls
StrongFlags
IndependentGoals
MinimizeConflictSet
FineGrainedConflicts
CountConflicts
ReorderGoals
FlagAssignment
PreSolver
AllowOlder
AllowNewer
solverSettingIndexState :: SolverSettings -> Maybe TotalIndexState
solverSettingActiveRepos :: SolverSettings -> Maybe ActiveRepos
solverSettingSolver :: SolverSettings -> PreSolver
solverSettingRemoteRepos :: [RemoteRepo]
solverSettingLocalNoIndexRepos :: [LocalRepo]
solverSettingConstraints :: [(UserConstraint, ConstraintSource)]
solverSettingPreferences :: [PackageVersionConstraint]
solverSettingFlagAssignment :: FlagAssignment
solverSettingFlagAssignments :: Map PackageName FlagAssignment
solverSettingCabalVersion :: Maybe Version
solverSettingSolver :: PreSolver
solverSettingAllowOlder :: AllowOlder
solverSettingAllowNewer :: AllowNewer
solverSettingMaxBackjumps :: Maybe Int
solverSettingReorderGoals :: ReorderGoals
solverSettingCountConflicts :: CountConflicts
solverSettingFineGrainedConflicts :: FineGrainedConflicts
solverSettingMinimizeConflictSet :: MinimizeConflictSet
solverSettingStrongFlags :: StrongFlags
solverSettingAllowBootLibInstalls :: AllowBootLibInstalls
solverSettingOnlyConstrained :: OnlyConstrained
solverSettingIndexState :: Maybe TotalIndexState
solverSettingActiveRepos :: Maybe ActiveRepos
solverSettingIndependentGoals :: IndependentGoals
solverSettingRemoteRepos :: SolverSettings -> [RemoteRepo]
solverSettingLocalNoIndexRepos :: SolverSettings -> [LocalRepo]
solverSettingConstraints :: SolverSettings -> [(UserConstraint, ConstraintSource)]
solverSettingPreferences :: SolverSettings -> [PackageVersionConstraint]
solverSettingFlagAssignment :: SolverSettings -> FlagAssignment
solverSettingFlagAssignments :: SolverSettings -> Map PackageName FlagAssignment
solverSettingCabalVersion :: SolverSettings -> Maybe Version
solverSettingAllowOlder :: SolverSettings -> AllowOlder
solverSettingAllowNewer :: SolverSettings -> AllowNewer
solverSettingMaxBackjumps :: SolverSettings -> Maybe Int
solverSettingReorderGoals :: SolverSettings -> ReorderGoals
solverSettingCountConflicts :: SolverSettings -> CountConflicts
solverSettingFineGrainedConflicts :: SolverSettings -> FineGrainedConflicts
solverSettingMinimizeConflictSet :: SolverSettings -> MinimizeConflictSet
solverSettingStrongFlags :: SolverSettings -> StrongFlags
solverSettingAllowBootLibInstalls :: SolverSettings -> AllowBootLibInstalls
solverSettingOnlyConstrained :: SolverSettings -> OnlyConstrained
solverSettingIndependentGoals :: SolverSettings -> IndependentGoals
..}
InstalledPackageIndex
installedPkgIndex SourcePackageDb
sourcePkgDb PkgConfigDb
pkgConfigDB
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
localPackages Map PackageName (Map OptionalStanza Bool)
pkgStanzasEnable =
Platform
-> CompilerInfo
-> PkgConfigDb
-> Solver
-> DepResolverParams
-> Progress String String SolverInstallPlan
resolveDependencies
Platform
platform (Compiler -> CompilerInfo
compilerInfo Compiler
comp)
PkgConfigDb
pkgConfigDB Solver
solver
DepResolverParams
resolverParams
where
resolverParams :: DepResolverParams
resolverParams :: DepResolverParams
resolverParams =
Maybe Int -> DepResolverParams -> DepResolverParams
setMaxBackjumps Maybe Int
solverSettingMaxBackjumps
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. IndependentGoals -> DepResolverParams -> DepResolverParams
setIndependentGoals IndependentGoals
solverSettingIndependentGoals
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ReorderGoals -> DepResolverParams -> DepResolverParams
setReorderGoals ReorderGoals
solverSettingReorderGoals
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CountConflicts -> DepResolverParams -> DepResolverParams
setCountConflicts CountConflicts
solverSettingCountConflicts
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FineGrainedConflicts -> DepResolverParams -> DepResolverParams
setFineGrainedConflicts FineGrainedConflicts
solverSettingFineGrainedConflicts
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MinimizeConflictSet -> DepResolverParams -> DepResolverParams
setMinimizeConflictSet MinimizeConflictSet
solverSettingMinimizeConflictSet
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. StrongFlags -> DepResolverParams -> DepResolverParams
setStrongFlags StrongFlags
solverSettingStrongFlags
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AllowBootLibInstalls -> DepResolverParams -> DepResolverParams
setAllowBootLibInstalls AllowBootLibInstalls
solverSettingAllowBootLibInstalls
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. OnlyConstrained -> DepResolverParams -> DepResolverParams
setOnlyConstrained OnlyConstrained
solverSettingOnlyConstrained
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Verbosity -> DepResolverParams -> DepResolverParams
setSolverVerbosity Verbosity
verbosity
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PackagesPreferenceDefault -> DepResolverParams -> DepResolverParams
setPreferenceDefault PackagesPreferenceDefault
PreferLatestForSelected
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AllowOlder -> DepResolverParams -> DepResolverParams
removeLowerBounds AllowOlder
solverSettingAllowOlder
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AllowNewer -> DepResolverParams -> DepResolverParams
removeUpperBounds AllowNewer
solverSettingAllowNewer
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SourcePackage UnresolvedPkgLoc -> Maybe [Dependency])
-> DepResolverParams -> DepResolverParams
addDefaultSetupDependencies (Compiler -> Platform -> PackageDescription -> Maybe [Dependency]
defaultSetupDeps Compiler
comp Platform
platform
(PackageDescription -> Maybe [Dependency])
-> (SourcePackage UnresolvedPkgLoc -> PackageDescription)
-> SourcePackage UnresolvedPkgLoc
-> Maybe [Dependency]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GenericPackageDescription -> PackageDescription
PD.packageDescription
(GenericPackageDescription -> PackageDescription)
-> (SourcePackage UnresolvedPkgLoc -> GenericPackageDescription)
-> SourcePackage UnresolvedPkgLoc
-> PackageDescription
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SourcePackage UnresolvedPkgLoc -> GenericPackageDescription
forall loc. SourcePackage loc -> GenericPackageDescription
srcpkgDescription)
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Version -> DepResolverParams -> DepResolverParams
addSetupCabalMinVersionConstraint Version
setupMinCabalVersionConstraint
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Version -> DepResolverParams -> DepResolverParams
addSetupCabalMaxVersionConstraint Version
setupMaxCabalVersionConstraint
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [PackagePreference] -> DepResolverParams -> DepResolverParams
addPreferences
[ PackageName -> VersionRange -> PackagePreference
PackageVersionPreference PackageName
name VersionRange
ver
| PackageVersionConstraint PackageName
name VersionRange
ver <- [PackageVersionConstraint]
solverSettingPreferences ]
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [LabeledPackageConstraint]
-> DepResolverParams -> DepResolverParams
addConstraints
[ PackageConstraint -> ConstraintSource -> LabeledPackageConstraint
LabeledPackageConstraint (UserConstraint -> PackageConstraint
userToPackageConstraint UserConstraint
pc) ConstraintSource
src
| (UserConstraint
pc, ConstraintSource
src) <- [(UserConstraint, ConstraintSource)]
solverSettingConstraints ]
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [PackagePreference] -> DepResolverParams -> DepResolverParams
addPreferences
[ PackageName -> [OptionalStanza] -> PackagePreference
PackageStanzasPreference PackageName
pkgname [OptionalStanza]
stanzas
| PackageSpecifier (SourcePackage UnresolvedPkgLoc)
pkg <- [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
localPackages
, let pkgname :: PackageName
pkgname = PackageSpecifier (SourcePackage UnresolvedPkgLoc) -> PackageName
forall pkg. Package pkg => PackageSpecifier pkg -> PackageName
pkgSpecifierTarget PackageSpecifier (SourcePackage UnresolvedPkgLoc)
pkg
stanzaM :: Map OptionalStanza Bool
stanzaM = Map OptionalStanza Bool
-> PackageName
-> Map PackageName (Map OptionalStanza Bool)
-> Map OptionalStanza Bool
forall k a. Ord k => a -> k -> Map k a -> a
Map.findWithDefault Map OptionalStanza Bool
forall k a. Map k a
Map.empty PackageName
pkgname Map PackageName (Map OptionalStanza Bool)
pkgStanzasEnable
stanzas :: [OptionalStanza]
stanzas = [ OptionalStanza
stanza | OptionalStanza
stanza <- [OptionalStanza
forall a. Bounded a => a
minBound..OptionalStanza
forall a. Bounded a => a
maxBound]
, OptionalStanza -> Map OptionalStanza Bool -> Maybe Bool
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup OptionalStanza
stanza Map OptionalStanza Bool
stanzaM Maybe Bool -> Maybe Bool -> Bool
forall a. Eq a => a -> a -> Bool
/= Bool -> Maybe Bool
forall a. a -> Maybe a
Just Bool
False ]
, Bool -> Bool
not ([OptionalStanza] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [OptionalStanza]
stanzas)
]
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [LabeledPackageConstraint]
-> DepResolverParams -> DepResolverParams
addConstraints
[ PackageConstraint -> ConstraintSource -> LabeledPackageConstraint
LabeledPackageConstraint
(ConstraintScope -> PackageProperty -> PackageConstraint
PackageConstraint (PackageName -> ConstraintScope
scopeToplevel PackageName
pkgname)
([OptionalStanza] -> PackageProperty
PackagePropertyStanzas [OptionalStanza]
stanzas))
ConstraintSource
ConstraintSourceConfigFlagOrTarget
| PackageSpecifier (SourcePackage UnresolvedPkgLoc)
pkg <- [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
localPackages
, let pkgname :: PackageName
pkgname = PackageSpecifier (SourcePackage UnresolvedPkgLoc) -> PackageName
forall pkg. Package pkg => PackageSpecifier pkg -> PackageName
pkgSpecifierTarget PackageSpecifier (SourcePackage UnresolvedPkgLoc)
pkg
stanzaM :: Map OptionalStanza Bool
stanzaM = Map OptionalStanza Bool
-> PackageName
-> Map PackageName (Map OptionalStanza Bool)
-> Map OptionalStanza Bool
forall k a. Ord k => a -> k -> Map k a -> a
Map.findWithDefault Map OptionalStanza Bool
forall k a. Map k a
Map.empty PackageName
pkgname Map PackageName (Map OptionalStanza Bool)
pkgStanzasEnable
stanzas :: [OptionalStanza]
stanzas = [ OptionalStanza
stanza | OptionalStanza
stanza <- [OptionalStanza
forall a. Bounded a => a
minBound..OptionalStanza
forall a. Bounded a => a
maxBound]
, OptionalStanza -> Map OptionalStanza Bool -> Maybe Bool
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup OptionalStanza
stanza Map OptionalStanza Bool
stanzaM Maybe Bool -> Maybe Bool -> Bool
forall a. Eq a => a -> a -> Bool
== Bool -> Maybe Bool
forall a. a -> Maybe a
Just Bool
True ]
, Bool -> Bool
not ([OptionalStanza] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [OptionalStanza]
stanzas)
]
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [LabeledPackageConstraint]
-> DepResolverParams -> DepResolverParams
addConstraints
[ PackageConstraint -> ConstraintSource -> LabeledPackageConstraint
LabeledPackageConstraint
(ConstraintScope -> PackageProperty -> PackageConstraint
PackageConstraint (PackageName -> ConstraintScope
scopeToplevel PackageName
pkgname)
(FlagAssignment -> PackageProperty
PackagePropertyFlags FlagAssignment
flags))
ConstraintSource
ConstraintSourceConfigFlagOrTarget
| (PackageName
pkgname, FlagAssignment
flags) <- Map PackageName FlagAssignment -> [(PackageName, FlagAssignment)]
forall k a. Map k a -> [(k, a)]
Map.toList Map PackageName FlagAssignment
solverSettingFlagAssignments ]
(DepResolverParams -> DepResolverParams)
-> (DepResolverParams -> DepResolverParams)
-> DepResolverParams
-> DepResolverParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [LabeledPackageConstraint]
-> DepResolverParams -> DepResolverParams
addConstraints
[ PackageConstraint -> ConstraintSource -> LabeledPackageConstraint
LabeledPackageConstraint
(ConstraintScope -> PackageProperty -> PackageConstraint
PackageConstraint (PackageName -> ConstraintScope
scopeToplevel PackageName
pkgname)
(FlagAssignment -> PackageProperty
PackagePropertyFlags FlagAssignment
flags))
ConstraintSource
ConstraintSourceConfigFlagOrTarget
| let flags :: FlagAssignment
flags = FlagAssignment
solverSettingFlagAssignment
, Bool -> Bool
not (FlagAssignment -> Bool
PD.nullFlagAssignment FlagAssignment
flags)
, PackageSpecifier (SourcePackage UnresolvedPkgLoc)
pkg <- [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
localPackages
, let pkgname :: PackageName
pkgname = PackageSpecifier (SourcePackage UnresolvedPkgLoc) -> PackageName
forall pkg. Package pkg => PackageSpecifier pkg -> PackageName
pkgSpecifierTarget PackageSpecifier (SourcePackage UnresolvedPkgLoc)
pkg ]
(DepResolverParams -> DepResolverParams)
-> DepResolverParams -> DepResolverParams
forall a b. (a -> b) -> a -> b
$ DepResolverParams
stdResolverParams
stdResolverParams :: DepResolverParams
stdResolverParams :: DepResolverParams
stdResolverParams =
InstalledPackageIndex
-> SourcePackageDb
-> [PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
-> DepResolverParams
basicInstallPolicy
InstalledPackageIndex
installedPkgIndex SourcePackageDb
sourcePkgDb
[PackageSpecifier (SourcePackage UnresolvedPkgLoc)]
localPackages
setupMinCabalVersionConstraint :: Version
setupMinCabalVersionConstraint
| Bool
isGHC, Version
compVer Version -> Version -> Bool
forall a. Ord a => a -> a -> Bool
>= [Int] -> Version
mkVersion [Int
9,Int
4] = [Int] -> Version
mkVersion [Int
3,Int
8]
| Bool
isGHC, Version
compVer Version -> Version -> Bool
forall a. Ord a => a -> a -> Bool
>= [Int] -> Version
mkVersion [Int
9,Int
2] = [Int] -> Version
mkVersion [Int
3,Int
6]
| Bool
isGHC, Version
compVer Version -> Version -> Bool
forall a. Ord a => a -> a -> Bool
>= [Int] -> Version
mkVersion [Int
9,Int
0] = [Int] -> Version
mkVersion [Int
3,Int
4]
| Bool
isGHC, Version
compVer Version -> Version -> Bool
forall a. Ord a => a -> a -> Bool
>= [Int] -> Version
mkVersion [Int
8,Int
10] = [Int] -> Version
mkVersion [Int
3,Int
2]
| Bool
isGHC, Version
compVer Version -> Version -> Bool
forall a. Ord a => a -> a -> Bool
>= [Int] -> Version
mkVersion [Int
8,Int
8] = [Int] -> Version
mkVersion [Int
3,Int
0]
| Bool
isGHC, Version
compVer Version -> Version -> Bool
forall a. Ord a => a -> a -> Bool
>= [Int] -> Version
mkVersion [Int
8,Int
6] = [Int] -> Version
mkVersion [Int
2,Int
4]
| Bool
isGHC, Version
compVer Version -> Version -> Bool
forall a. Ord a => a -> a -> Bool
>= [Int] -> Version
mkVersion [Int
8,Int
4] = [Int] -> Version
mkVersion [Int
2,Int
2]
| Bool
isGHC, Version
compVer Version -> Version -> Bool
forall a. Ord a => a -> a -> Bool
>= [Int] -> Version
mkVersion [Int
8,Int
2] = [Int] -> Version
mkVersion [Int
2,Int
0]
| Bool
isGHC, Version
compVer Version -> Version -> Bool
forall a. Ord a => a -> a -> Bool
>= [Int] -> Version
mkVersion [Int
8,Int
0] = [Int] -> Version
mkVersion [Int
1,Int
24]
| Bool
isGHC, Version
compVer Version -> Version -> Bool
forall a. Ord a => a -> a -> Bool
>= [Int] -> Version
mkVersion [Int
7,Int
10] = [Int] -> Version
mkVersion [Int
1,Int
22]
| Bool
otherwise = [Int] -> Version
mkVersion [Int
1,Int
20]
where
isGHC :: Bool
isGHC = CompilerFlavor
compFlav CompilerFlavor -> [CompilerFlavor] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [CompilerFlavor
GHC,CompilerFlavor
GHCJS]
compFlav :: CompilerFlavor
compFlav = Compiler -> CompilerFlavor
compilerFlavor Compiler
comp
compVer :: Version
compVer = Compiler -> Version
compilerVersion Compiler
comp
setupMaxCabalVersionConstraint :: Version
setupMaxCabalVersionConstraint =
([Int] -> [Int]) -> Version -> Version
alterVersion (Int -> [Int] -> [Int]
forall a. Int -> [a] -> [a]
take Int
2) (Version -> Version) -> Version -> Version
forall a b. (a -> b) -> a -> b
$ Int -> Version -> Version
incVersion Int
1 (Version -> Version) -> Version -> Version
forall a b. (a -> b) -> a -> b
$ Int -> Version -> Version
incVersion Int
1 Version
cabalVersion
elaborateInstallPlan
:: Verbosity -> Platform -> Compiler -> ProgramDb -> PkgConfigDb
-> DistDirLayout
-> StoreDirLayout
-> SolverInstallPlan
-> [PackageSpecifier (SourcePackage (PackageLocation loc))]
-> Map PackageId PackageSourceHash
-> InstallDirs.InstallDirTemplates
-> ProjectConfigShared
-> PackageConfig
-> PackageConfig
-> Map PackageName PackageConfig
-> LogProgress (ElaboratedInstallPlan, ElaboratedSharedConfig)
elaborateInstallPlan :: forall loc.
Verbosity
-> Platform
-> Compiler
-> ProgramDb
-> PkgConfigDb
-> DistDirLayout
-> StoreDirLayout
-> SolverInstallPlan
-> [PackageSpecifier (SourcePackage (PackageLocation loc))]
-> Map PackageIdentifier PackageSourceHash
-> InstallDirTemplates
-> ProjectConfigShared
-> PackageConfig
-> PackageConfig
-> Map PackageName PackageConfig
-> LogProgress (ElaboratedInstallPlan, ElaboratedSharedConfig)
elaborateInstallPlan Verbosity
verbosity Platform
platform Compiler
compiler ProgramDb
compilerprogdb PkgConfigDb
pkgConfigDB
distDirLayout :: DistDirLayout
distDirLayout@DistDirLayout{String
String -> String
PackageIdentifier -> String
CompilerId -> PackageDB
DistDirParams -> String
DistDirParams -> String -> String
distProjectRootDirectory :: DistDirLayout -> String
distDirectory :: DistDirLayout -> String
distProjectCacheFile :: DistDirLayout -> String -> String
distProjectCacheDirectory :: DistDirLayout -> String
distProjectFile :: DistDirLayout -> String -> String
distProjectRootDirectory :: String
distProjectFile :: String -> String
distDirectory :: String
distBuildDirectory :: DistDirParams -> String
distBuildRootDirectory :: String
distDownloadSrcDirectory :: String
distUnpackedSrcDirectory :: PackageIdentifier -> String
distUnpackedSrcRootDirectory :: String
distProjectCacheFile :: String -> String
distProjectCacheDirectory :: String
distPackageCacheFile :: DistDirParams -> String -> String
distPackageCacheDirectory :: DistDirParams -> String
distSdistFile :: PackageIdentifier -> String
distSdistDirectory :: String
distTempDirectory :: String
distBinDirectory :: String
distPackageDB :: CompilerId -> PackageDB
distBuildDirectory :: DistDirLayout -> DistDirParams -> String
distBuildRootDirectory :: DistDirLayout -> String
distDownloadSrcDirectory :: DistDirLayout -> String
distUnpackedSrcDirectory :: DistDirLayout -> PackageIdentifier -> String
distUnpackedSrcRootDirectory :: DistDirLayout -> String
distPackageCacheFile :: DistDirLayout -> DistDirParams -> String -> String
distPackageCacheDirectory :: DistDirLayout -> DistDirParams -> String
distSdistFile :: DistDirLayout -> PackageIdentifier -> String
distSdistDirectory :: DistDirLayout -> String
distTempDirectory :: DistDirLayout -> String
distBinDirectory :: DistDirLayout -> String
distPackageDB :: DistDirLayout -> CompilerId -> PackageDB
..}
storeDirLayout :: StoreDirLayout
storeDirLayout@StoreDirLayout{CompilerId -> PackageDBStack
storePackageDBStack :: CompilerId -> PackageDBStack
storePackageDBStack :: StoreDirLayout -> CompilerId -> PackageDBStack
storePackageDBStack}
SolverInstallPlan
solverPlan [PackageSpecifier (SourcePackage (PackageLocation loc))]
localPackages
Map PackageIdentifier PackageSourceHash
sourcePackageHashes
InstallDirTemplates
defaultInstallDirs
ProjectConfigShared
sharedPackageConfig
PackageConfig
allPackagesConfig
PackageConfig
localPackagesConfig
Map PackageName PackageConfig
perPackageConfig = do
ElaboratedInstallPlan
x <- LogProgress ElaboratedInstallPlan
elaboratedInstallPlan
(ElaboratedInstallPlan, ElaboratedSharedConfig)
-> LogProgress (ElaboratedInstallPlan, ElaboratedSharedConfig)
forall a. a -> LogProgress a
forall (m :: * -> *) a. Monad m => a -> m a
return (ElaboratedInstallPlan
x, ElaboratedSharedConfig
elaboratedSharedConfig)
where
elaboratedSharedConfig :: ElaboratedSharedConfig
elaboratedSharedConfig =
ElaboratedSharedConfig {
pkgConfigPlatform :: Platform
pkgConfigPlatform = Platform
platform,
pkgConfigCompiler :: Compiler
pkgConfigCompiler = Compiler
compiler,
pkgConfigCompilerProgs :: ProgramDb
pkgConfigCompilerProgs = ProgramDb
compilerprogdb,
pkgConfigReplOptions :: ReplOptions
pkgConfigReplOptions = ReplOptions
forall a. Monoid a => a
mempty
}
preexistingInstantiatedPkgs :: Map UnitId FullUnitId
preexistingInstantiatedPkgs :: Map UnitId FullUnitId
preexistingInstantiatedPkgs =
[(UnitId, FullUnitId)] -> Map UnitId FullUnitId
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList ((ResolverPackage UnresolvedPkgLoc -> Maybe (UnitId, FullUnitId))
-> [ResolverPackage UnresolvedPkgLoc] -> [(UnitId, FullUnitId)]
forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe ResolverPackage UnresolvedPkgLoc -> Maybe (UnitId, FullUnitId)
forall {loc}. ResolverPackage loc -> Maybe (UnitId, FullUnitId)
f (SolverInstallPlan -> [ResolverPackage UnresolvedPkgLoc]
SolverInstallPlan.toList SolverInstallPlan
solverPlan))
where
f :: ResolverPackage loc -> Maybe (UnitId, FullUnitId)
f (SolverInstallPlan.PreExisting InstSolverPackage
inst)
| let ipkg :: InstalledPackageInfo
ipkg = InstSolverPackage -> InstalledPackageInfo
instSolverPkgIPI InstSolverPackage
inst
, Bool -> Bool
not (InstalledPackageInfo -> Bool
IPI.indefinite InstalledPackageInfo
ipkg)
= (UnitId, FullUnitId) -> Maybe (UnitId, FullUnitId)
forall a. a -> Maybe a
Just (InstalledPackageInfo -> UnitId
IPI.installedUnitId InstalledPackageInfo
ipkg,
(InstalledPackageId -> Map ModuleName OpenModule -> FullUnitId
FullUnitId (InstalledPackageInfo -> InstalledPackageId
IPI.installedComponentId InstalledPackageInfo
ipkg)
([(ModuleName, OpenModule)] -> Map ModuleName OpenModule
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList (InstalledPackageInfo -> [(ModuleName, OpenModule)]
IPI.instantiatedWith InstalledPackageInfo
ipkg))))
f ResolverPackage loc
_ = Maybe (UnitId, FullUnitId)
forall a. Maybe a
Nothing
elaboratedInstallPlan ::
LogProgress (InstallPlan.GenericInstallPlan IPI.InstalledPackageInfo ElaboratedConfiguredPackage)
elaboratedInstallPlan :: LogProgress ElaboratedInstallPlan
elaboratedInstallPlan =
(((SolverId -> [ElaboratedPlanPackage])
-> ResolverPackage UnresolvedPkgLoc
-> LogProgress [ElaboratedPlanPackage])
-> SolverInstallPlan -> LogProgress ElaboratedInstallPlan)
-> SolverInstallPlan
-> ((SolverId -> [ElaboratedPlanPackage])
-> ResolverPackage UnresolvedPkgLoc
-> LogProgress [ElaboratedPlanPackage])
-> LogProgress ElaboratedInstallPlan
forall a b c. (a -> b -> c) -> b -> a -> c
flip ((SolverId -> [ElaboratedPlanPackage])
-> ResolverPackage UnresolvedPkgLoc
-> LogProgress [ElaboratedPlanPackage])
-> SolverInstallPlan -> LogProgress ElaboratedInstallPlan
forall ipkg srcpkg.
(IsUnit ipkg, IsUnit srcpkg) =>
((SolverId -> [GenericPlanPackage ipkg srcpkg])
-> ResolverPackage UnresolvedPkgLoc
-> LogProgress [GenericPlanPackage ipkg srcpkg])
-> SolverInstallPlan
-> LogProgress (GenericInstallPlan ipkg srcpkg)
InstallPlan.fromSolverInstallPlanWithProgress SolverInstallPlan
solverPlan (((SolverId -> [ElaboratedPlanPackage])
-> ResolverPackage UnresolvedPkgLoc
-> LogProgress [ElaboratedPlanPackage])
-> LogProgress ElaboratedInstallPlan)
-> ((SolverId -> [ElaboratedPlanPackage])
-> ResolverPackage UnresolvedPkgLoc
-> LogProgress [ElaboratedPlanPackage])
-> LogProgress ElaboratedInstallPlan
forall a b. (a -> b) -> a -> b
$ \SolverId -> [ElaboratedPlanPackage]
mapDep ResolverPackage UnresolvedPkgLoc
planpkg ->
case ResolverPackage UnresolvedPkgLoc
planpkg of
SolverInstallPlan.PreExisting InstSolverPackage
pkg ->
[ElaboratedPlanPackage] -> LogProgress [ElaboratedPlanPackage]
forall a. a -> LogProgress a
forall (m :: * -> *) a. Monad m => a -> m a
return [InstalledPackageInfo -> ElaboratedPlanPackage
forall ipkg srcpkg. ipkg -> GenericPlanPackage ipkg srcpkg
InstallPlan.PreExisting (InstSolverPackage -> InstalledPackageInfo
instSolverPkgIPI InstSolverPackage
pkg)]
SolverInstallPlan.Configured SolverPackage UnresolvedPkgLoc
pkg ->
let inplace_doc :: Doc
inplace_doc | SolverPackage UnresolvedPkgLoc -> Bool
forall loc. SolverPackage loc -> Bool
shouldBuildInplaceOnly SolverPackage UnresolvedPkgLoc
pkg = String -> Doc
text String
"inplace"
| Bool
otherwise = Doc
Disp.empty
in Doc
-> LogProgress [ElaboratedPlanPackage]
-> LogProgress [ElaboratedPlanPackage]
forall a. Doc -> LogProgress a -> LogProgress a
addProgressCtx (String -> Doc
text String
"In the" Doc -> Doc -> Doc
<+> Doc
inplace_doc Doc -> Doc -> Doc
<+> String -> Doc
text String
"package" Doc -> Doc -> Doc
<+>
Doc -> Doc
quotes (PackageIdentifier -> Doc
forall a. Pretty a => a -> Doc
pretty (SolverPackage UnresolvedPkgLoc -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId SolverPackage UnresolvedPkgLoc
pkg))) (LogProgress [ElaboratedPlanPackage]
-> LogProgress [ElaboratedPlanPackage])
-> LogProgress [ElaboratedPlanPackage]
-> LogProgress [ElaboratedPlanPackage]
forall a b. (a -> b) -> a -> b
$
(ElaboratedConfiguredPackage -> ElaboratedPlanPackage)
-> [ElaboratedConfiguredPackage] -> [ElaboratedPlanPackage]
forall a b. (a -> b) -> [a] -> [b]
map ElaboratedConfiguredPackage -> ElaboratedPlanPackage
forall ipkg srcpkg. srcpkg -> GenericPlanPackage ipkg srcpkg
InstallPlan.Configured ([ElaboratedConfiguredPackage] -> [ElaboratedPlanPackage])
-> LogProgress [ElaboratedConfiguredPackage]
-> LogProgress [ElaboratedPlanPackage]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (SolverId -> [ElaboratedPlanPackage])
-> SolverPackage UnresolvedPkgLoc
-> LogProgress [ElaboratedConfiguredPackage]
elaborateSolverToComponents SolverId -> [ElaboratedPlanPackage]
mapDep SolverPackage UnresolvedPkgLoc
pkg
elaborateSolverToComponents
:: (SolverId -> [ElaboratedPlanPackage])
-> SolverPackage UnresolvedPkgLoc
-> LogProgress [ElaboratedConfiguredPackage]
elaborateSolverToComponents :: (SolverId -> [ElaboratedPlanPackage])
-> SolverPackage UnresolvedPkgLoc
-> LogProgress [ElaboratedConfiguredPackage]
elaborateSolverToComponents SolverId -> [ElaboratedPlanPackage]
mapDep spkg :: SolverPackage UnresolvedPkgLoc
spkg@(SolverPackage SourcePackage UnresolvedPkgLoc
_ FlagAssignment
_ OptionalStanzaSet
_ ComponentDeps [SolverId]
deps0 ComponentDeps [SolverId]
exe_deps0)
= case ComponentRequestedSpec
-> PackageDescription -> Either [ComponentName] ComponentsGraph
mkComponentsGraph (ElaboratedConfiguredPackage -> ComponentRequestedSpec
elabEnabledSpec ElaboratedConfiguredPackage
elab0) PackageDescription
pd of
Right ComponentsGraph
g -> do
let src_comps :: ComponentsWithDeps
src_comps = ComponentsGraph -> ComponentsWithDeps
componentsGraphToList ComponentsGraph
g
Doc -> LogProgress ()
infoProgress (Doc -> LogProgress ()) -> Doc -> LogProgress ()
forall a b. (a -> b) -> a -> b
$ Doc -> Int -> Doc -> Doc
hang (String -> Doc
text String
"Component graph for" Doc -> Doc -> Doc
<+> PackageIdentifier -> Doc
forall a. Pretty a => a -> Doc
pretty PackageIdentifier
pkgid Doc -> Doc -> Doc
<<>> Doc
colon)
Int
4 (ComponentsWithDeps -> Doc
dispComponentsWithDeps ComponentsWithDeps
src_comps)
((ConfiguredComponentMap, LinkedComponentMap,
Map InstalledPackageId String)
_, [ElaboratedConfiguredPackage]
comps) <- ((ConfiguredComponentMap, LinkedComponentMap,
Map InstalledPackageId String)
-> Component
-> LogProgress
((ConfiguredComponentMap, LinkedComponentMap,
Map InstalledPackageId String),
ElaboratedConfiguredPackage))
-> (ConfiguredComponentMap, LinkedComponentMap,
Map InstalledPackageId String)
-> [Component]
-> LogProgress
((ConfiguredComponentMap, LinkedComponentMap,
Map InstalledPackageId String),
[ElaboratedConfiguredPackage])
forall (m :: * -> *) (t :: * -> *) a b c.
(Monad m, Traversable t) =>
(a -> b -> m (a, c)) -> a -> t b -> m (a, t c)
mapAccumM (ConfiguredComponentMap, LinkedComponentMap,
Map InstalledPackageId String)
-> Component
-> LogProgress
((ConfiguredComponentMap, LinkedComponentMap,
Map InstalledPackageId String),
ElaboratedConfiguredPackage)
buildComponent
(ConfiguredComponentMap
forall k a. Map k a
Map.empty, LinkedComponentMap
forall k a. Map k a
Map.empty, Map InstalledPackageId String
forall k a. Map k a
Map.empty)
(((Component, [ComponentName]) -> Component)
-> ComponentsWithDeps -> [Component]
forall a b. (a -> b) -> [a] -> [b]
map (Component, [ComponentName]) -> Component
forall a b. (a, b) -> a
fst ComponentsWithDeps
src_comps)
let not_per_component_reasons :: [Doc]
not_per_component_reasons = ComponentsWithDeps -> [Doc]
forall {t :: * -> *} {a}. Foldable t => t a -> [Doc]
why_not_per_component ComponentsWithDeps
src_comps
if [Doc] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Doc]
not_per_component_reasons
then [ElaboratedConfiguredPackage]
-> LogProgress [ElaboratedConfiguredPackage]
forall a. a -> LogProgress a
forall (m :: * -> *) a. Monad m => a -> m a
return [ElaboratedConfiguredPackage]
comps
else do [ElaboratedConfiguredPackage] -> [Doc] -> LogProgress ()
forall {t :: * -> *}.
Foldable t =>
t ElaboratedConfiguredPackage -> [Doc] -> LogProgress ()
checkPerPackageOk [ElaboratedConfiguredPackage]
comps [Doc]
not_per_component_reasons
[ElaboratedConfiguredPackage]
-> LogProgress [ElaboratedConfiguredPackage]
forall a. a -> LogProgress a
forall (m :: * -> *) a. Monad m => a -> m a
return [SolverPackage UnresolvedPkgLoc
-> ComponentsGraph
-> [ElaboratedConfiguredPackage]
-> ElaboratedConfiguredPackage
elaborateSolverToPackage SolverPackage UnresolvedPkgLoc
spkg ComponentsGraph
g ([ElaboratedConfiguredPackage] -> ElaboratedConfiguredPackage)
-> [ElaboratedConfiguredPackage] -> ElaboratedConfiguredPackage
forall a b. (a -> b) -> a -> b
$
[ElaboratedConfiguredPackage]
comps [ElaboratedConfiguredPackage]
-> [ElaboratedConfiguredPackage] -> [ElaboratedConfiguredPackage]
forall a. [a] -> [a] -> [a]
++ Maybe ElaboratedConfiguredPackage -> [ElaboratedConfiguredPackage]
forall a. Maybe a -> [a]
maybeToList Maybe ElaboratedConfiguredPackage
setupComponent]
Left [ComponentName]
cns ->
Doc -> LogProgress [ElaboratedConfiguredPackage]
forall a. Doc -> LogProgress a
dieProgress (Doc -> LogProgress [ElaboratedConfiguredPackage])
-> Doc -> LogProgress [ElaboratedConfiguredPackage]
forall a b. (a -> b) -> a -> b
$
Doc -> Int -> Doc -> Doc
hang (String -> Doc
text String
"Dependency cycle between the following components:") Int
4
([Doc] -> Doc
vcat ((ComponentName -> Doc) -> [ComponentName] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (String -> Doc
text (String -> Doc)
-> (ComponentName -> String) -> ComponentName -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ComponentName -> String
componentNameStanza) [ComponentName]
cns))
where
why_not_per_component :: t a -> [Doc]
why_not_per_component t a
g
= [Doc]
cuz_buildtype [Doc] -> [Doc] -> [Doc]
forall a. [a] -> [a] -> [a]
++ [Doc]
cuz_spec [Doc] -> [Doc] -> [Doc]
forall a. [a] -> [a] -> [a]
++ [Doc]
cuz_length [Doc] -> [Doc] -> [Doc]
forall a. [a] -> [a] -> [a]
++ [Doc]
cuz_flag [Doc] -> [Doc] -> [Doc]
forall a. [a] -> [a] -> [a]
++ [Doc]
cuz_coverage
where
cuz :: String -> [Doc]
cuz String
reason = [String -> Doc
text String
reason]
cuz_buildtype :: [Doc]
cuz_buildtype =
case PackageDescription -> BuildType
PD.buildType (ElaboratedConfiguredPackage -> PackageDescription
elabPkgDescription ElaboratedConfiguredPackage
elab0) of
BuildType
PD.Configure -> String -> [Doc]
cuz String
"build-type is Configure"
BuildType
PD.Custom -> String -> [Doc]
cuz String
"build-type is Custom"
BuildType
_ -> []
cuz_spec :: [Doc]
cuz_spec
| PackageDescription -> CabalSpecVersion
PD.specVersion PackageDescription
pd CabalSpecVersion -> CabalSpecVersion -> Bool
forall a. Ord a => a -> a -> Bool
>= CabalSpecVersion
CabalSpecV1_8 = []
| Bool
otherwise = String -> [Doc]
cuz String
"cabal-version is less than 1.8"
cuz_length :: [Doc]
cuz_length
| t a -> Int
forall a. t a -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length t a
g Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
0 = []
| Bool
otherwise = String -> [Doc]
cuz String
"there are no buildable components"
cuz_flag :: [Doc]
cuz_flag
| Bool -> Flag Bool -> Bool
forall a. a -> Flag a -> a
fromFlagOrDefault Bool
True (ProjectConfigShared -> Flag Bool
projectConfigPerComponent ProjectConfigShared
sharedPackageConfig)
= []
| Bool
otherwise = String -> [Doc]
cuz String
"you passed --disable-per-component"
cuz_coverage :: [Doc]
cuz_coverage
| Bool -> Flag Bool -> Bool
forall a. a -> Flag a -> a
fromFlagOrDefault Bool
False (PackageConfig -> Flag Bool
packageConfigCoverage PackageConfig
localPackagesConfig)
= String -> [Doc]
cuz String
"program coverage is enabled"
| Bool
otherwise = []
checkPerPackageOk :: t ElaboratedConfiguredPackage -> [Doc] -> LogProgress ()
checkPerPackageOk t ElaboratedConfiguredPackage
comps [Doc]
reasons = do
let is_sublib :: ComponentName -> Bool
is_sublib (CLibName (LSubLibName UnqualComponentName
_)) = Bool
True
is_sublib ComponentName
_ = Bool
False
Bool -> LogProgress () -> LogProgress ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when ((ElaboratedConfiguredPackage -> Bool)
-> t ElaboratedConfiguredPackage -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any ((ComponentName -> Bool) -> ElaboratedConfiguredPackage -> Bool
matchElabPkg ComponentName -> Bool
is_sublib) t ElaboratedConfiguredPackage
comps) (LogProgress () -> LogProgress ())
-> LogProgress () -> LogProgress ()
forall a b. (a -> b) -> a -> b
$
Doc -> LogProgress ()
forall a. Doc -> LogProgress a
dieProgress (Doc -> LogProgress ()) -> Doc -> LogProgress ()
forall a b. (a -> b) -> a -> b
$
String -> Doc
text String
"Internal libraries only supported with per-component builds." Doc -> Doc -> Doc
$$
String -> Doc
text String
"Per-component builds were disabled because" Doc -> Doc -> Doc
<+>
[Doc] -> Doc
fsep (Doc -> [Doc] -> [Doc]
punctuate Doc
comma [Doc]
reasons)
elab0 :: ElaboratedConfiguredPackage
elab0 = SolverPackage UnresolvedPkgLoc -> ElaboratedConfiguredPackage
elaborateSolverToCommon SolverPackage UnresolvedPkgLoc
spkg
pkgid :: PackageIdentifier
pkgid = ElaboratedConfiguredPackage -> PackageIdentifier
elabPkgSourceId ElaboratedConfiguredPackage
elab0
pd :: PackageDescription
pd = ElaboratedConfiguredPackage -> PackageDescription
elabPkgDescription ElaboratedConfiguredPackage
elab0
setupComponent :: Maybe ElaboratedConfiguredPackage
setupComponent :: Maybe ElaboratedConfiguredPackage
setupComponent
| PackageDescription -> BuildType
PD.buildType (ElaboratedConfiguredPackage -> PackageDescription
elabPkgDescription ElaboratedConfiguredPackage
elab0) BuildType -> BuildType -> Bool
forall a. Eq a => a -> a -> Bool
== BuildType
PD.Custom
= ElaboratedConfiguredPackage -> Maybe ElaboratedConfiguredPackage
forall a. a -> Maybe a
Just ElaboratedConfiguredPackage
elab0 {
elabModuleShape :: ModuleShape
elabModuleShape = ModuleShape
emptyModuleShape,
elabUnitId :: UnitId
elabUnitId = String -> UnitId
forall {a}. String -> a
notImpl String
"elabUnitId",
elabComponentId :: InstalledPackageId
elabComponentId = String -> InstalledPackageId
forall {a}. String -> a
notImpl String
"elabComponentId",
elabLinkedInstantiatedWith :: Map ModuleName OpenModule
elabLinkedInstantiatedWith = Map ModuleName OpenModule
forall k a. Map k a
Map.empty,
elabInstallDirs :: InstallDirs String
elabInstallDirs = String -> InstallDirs String
forall {a}. String -> a
notImpl String
"elabInstallDirs",
elabPkgOrComp :: ElaboratedPackageOrComponent
elabPkgOrComp = ElaboratedComponent -> ElaboratedPackageOrComponent
ElabComponent (ElaboratedComponent {[(PkgconfigName, Maybe PkgconfigVersion)]
[(ConfiguredId, String)]
[UnitId]
[OpenUnitId]
[ConfiguredId]
Maybe ComponentName
Component
forall {a}. a
forall a. [a]
forall a. Maybe a
compSolverName :: Component
compComponentName :: Maybe ComponentName
compLibDependencies :: [ConfiguredId]
compLinkedLibDependencies :: [OpenUnitId]
compExeDependencies :: [ConfiguredId]
compPkgConfigDependencies :: [(PkgconfigName, Maybe PkgconfigVersion)]
compExeDependencyPaths :: [(ConfiguredId, String)]
compOrderLibDependencies :: [UnitId]
compSolverName :: Component
compComponentName :: forall a. Maybe a
compLibDependencies :: [ConfiguredId]
compLinkedLibDependencies :: forall {a}. a
compOrderLibDependencies :: forall {a}. a
compExeDependencies :: forall a. [a]
compExeDependencyPaths :: forall a. [a]
compPkgConfigDependencies :: forall a. [a]
..})
}
| Bool
otherwise
= Maybe ElaboratedConfiguredPackage
forall a. Maybe a
Nothing
where
compSolverName :: Component
compSolverName = Component
CD.ComponentSetup
compComponentName :: Maybe a
compComponentName = Maybe a
forall a. Maybe a
Nothing
dep_pkgs :: [ElaboratedPlanPackage]
dep_pkgs = (SolverId -> [ElaboratedPlanPackage])
-> SolverId -> [ElaboratedPlanPackage]
elaborateLibSolverId SolverId -> [ElaboratedPlanPackage]
mapDep (SolverId -> [ElaboratedPlanPackage])
-> [SolverId] -> [ElaboratedPlanPackage]
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< ComponentDeps [SolverId] -> [SolverId]
forall a. Monoid a => ComponentDeps a -> a
CD.setupDeps ComponentDeps [SolverId]
deps0
compLibDependencies :: [ConfiguredId]
compLibDependencies
= (ElaboratedPlanPackage -> ConfiguredId)
-> [ElaboratedPlanPackage] -> [ConfiguredId]
forall a b. (a -> b) -> [a] -> [b]
map ElaboratedPlanPackage -> ConfiguredId
forall a. HasConfiguredId a => a -> ConfiguredId
configuredId [ElaboratedPlanPackage]
dep_pkgs
compLinkedLibDependencies :: a
compLinkedLibDependencies = String -> a
forall {a}. String -> a
notImpl String
"compLinkedLibDependencies"
compOrderLibDependencies :: a
compOrderLibDependencies = String -> a
forall {a}. String -> a
notImpl String
"compOrderLibDependencies"
compExeDependencies :: [a]
compExeDependencies = []
compExeDependencyPaths :: [a]
compExeDependencyPaths = []
compPkgConfigDependencies :: [a]
compPkgConfigDependencies = []
notImpl :: String -> a
notImpl String
f =
String -> a
forall a. HasCallStack => String -> a
error (String -> a) -> String -> a
forall a b. (a -> b) -> a -> b
$ String
"Distribution.Client.ProjectPlanning.setupComponent: " String -> String -> String
forall a. [a] -> [a] -> [a]
++
String
f String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" not implemented yet"
buildComponent
:: (ConfiguredComponentMap,
LinkedComponentMap,
Map ComponentId FilePath)
-> Cabal.Component
-> LogProgress
((ConfiguredComponentMap,
LinkedComponentMap,
Map ComponentId FilePath),
ElaboratedConfiguredPackage)
buildComponent :: (ConfiguredComponentMap, LinkedComponentMap,
Map InstalledPackageId String)
-> Component
-> LogProgress
((ConfiguredComponentMap, LinkedComponentMap,
Map InstalledPackageId String),
ElaboratedConfiguredPackage)
buildComponent (ConfiguredComponentMap
cc_map, LinkedComponentMap
lc_map, Map InstalledPackageId String
exe_map) Component
comp =
Doc
-> LogProgress
((ConfiguredComponentMap, LinkedComponentMap,
Map InstalledPackageId String),
ElaboratedConfiguredPackage)
-> LogProgress
((ConfiguredComponentMap, LinkedComponentMap,
Map InstalledPackageId String),
ElaboratedConfiguredPackage)
forall a. Doc -> LogProgress a -> LogProgress a
addProgressCtx (String -> Doc
text String
"In the stanza" Doc -> Doc -> Doc
<+>
Doc -> Doc
quotes (String -> Doc
text (ComponentName -> String
componentNameStanza ComponentName
cname))) (LogProgress
((ConfiguredComponentMap, LinkedComponentMap,
Map InstalledPackageId String),
ElaboratedConfiguredPackage)
-> LogProgress
((ConfiguredComponentMap, LinkedComponentMap,
Map InstalledPackageId String),
ElaboratedConfiguredPackage))
-> LogProgress
((ConfiguredComponentMap, LinkedComponentMap,
Map InstalledPackageId String),
ElaboratedConfiguredPackage)
-> LogProgress
((ConfiguredComponentMap, LinkedComponentMap,
Map InstalledPackageId String),
ElaboratedConfiguredPackage)
forall a b. (a -> b) -> a -> b
$ do
ConfiguredComponent
cc0 <- PackageDescription
-> InstalledPackageId
-> ConfiguredComponentMap
-> ConfiguredComponentMap
-> Component
-> LogProgress ConfiguredComponent
toConfiguredComponent
PackageDescription
pd
(String -> InstalledPackageId
forall a. HasCallStack => String -> a
error String
"Distribution.Client.ProjectPlanning.cc_cid: filled in later")
((Map ComponentName (AnnotatedId InstalledPackageId)
-> Map ComponentName (AnnotatedId InstalledPackageId)
-> Map ComponentName (AnnotatedId InstalledPackageId))
-> ConfiguredComponentMap
-> ConfiguredComponentMap
-> ConfiguredComponentMap
forall k a. Ord k => (a -> a -> a) -> Map k a -> Map k a -> Map k a
Map.unionWith Map ComponentName (AnnotatedId InstalledPackageId)
-> Map ComponentName (AnnotatedId InstalledPackageId)
-> Map ComponentName (AnnotatedId InstalledPackageId)
forall k a. Ord k => Map k a -> Map k a -> Map k a
Map.union ConfiguredComponentMap
external_lib_cc_map ConfiguredComponentMap
cc_map)
((Map ComponentName (AnnotatedId InstalledPackageId)
-> Map ComponentName (AnnotatedId InstalledPackageId)
-> Map ComponentName (AnnotatedId InstalledPackageId))
-> ConfiguredComponentMap
-> ConfiguredComponentMap
-> ConfiguredComponentMap
forall k a. Ord k => (a -> a -> a) -> Map k a -> Map k a -> Map k a
Map.unionWith Map ComponentName (AnnotatedId InstalledPackageId)
-> Map ComponentName (AnnotatedId InstalledPackageId)
-> Map ComponentName (AnnotatedId InstalledPackageId)
forall k a. Ord k => Map k a -> Map k a -> Map k a
Map.union ConfiguredComponentMap
external_exe_cc_map ConfiguredComponentMap
cc_map)
Component
comp
let compLibDependencies :: [ConfiguredId]
compLibDependencies =
[ConfiguredId] -> [ConfiguredId]
forall a. Ord a => [a] -> [a]
ordNub ((ComponentInclude InstalledPackageId IncludeRenaming
-> ConfiguredId)
-> [ComponentInclude InstalledPackageId IncludeRenaming]
-> [ConfiguredId]
forall a b. (a -> b) -> [a] -> [b]
map (AnnotatedId InstalledPackageId -> ConfiguredId
annotatedIdToConfiguredId (AnnotatedId InstalledPackageId -> ConfiguredId)
-> (ComponentInclude InstalledPackageId IncludeRenaming
-> AnnotatedId InstalledPackageId)
-> ComponentInclude InstalledPackageId IncludeRenaming
-> ConfiguredId
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ComponentInclude InstalledPackageId IncludeRenaming
-> AnnotatedId InstalledPackageId
forall id rn. ComponentInclude id rn -> AnnotatedId id
ci_ann_id)
(ConfiguredComponent
-> [ComponentInclude InstalledPackageId IncludeRenaming]
cc_includes ConfiguredComponent
cc0))
compExeDependencies :: [ConfiguredId]
compExeDependencies =
(AnnotatedId InstalledPackageId -> ConfiguredId)
-> [AnnotatedId InstalledPackageId] -> [ConfiguredId]
forall a b. (a -> b) -> [a] -> [b]
map AnnotatedId InstalledPackageId -> ConfiguredId
annotatedIdToConfiguredId
(ConfiguredComponent -> [AnnotatedId InstalledPackageId]
cc_exe_deps ConfiguredComponent
cc0)
compExeDependencyPaths :: [(ConfiguredId, String)]
compExeDependencyPaths =
[ (AnnotatedId InstalledPackageId -> ConfiguredId
annotatedIdToConfiguredId AnnotatedId InstalledPackageId
aid', String
path)
| AnnotatedId InstalledPackageId
aid' <- ConfiguredComponent -> [AnnotatedId InstalledPackageId]
cc_exe_deps ConfiguredComponent
cc0
, Just [String]
paths <- [InstalledPackageId
-> Map InstalledPackageId [String] -> Maybe [String]
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup (AnnotatedId InstalledPackageId -> InstalledPackageId
forall id. AnnotatedId id -> id
ann_id AnnotatedId InstalledPackageId
aid') Map InstalledPackageId [String]
exe_map1]
, String
path <- [String]
paths ]
elab_comp :: ElaboratedComponent
elab_comp = ElaboratedComponent {[(PkgconfigName, Maybe PkgconfigVersion)]
[(ConfiguredId, String)]
[UnitId]
[OpenUnitId]
[ConfiguredId]
Maybe ComponentName
Component
forall {a}. a
compSolverName :: Component
compComponentName :: Maybe ComponentName
compLibDependencies :: [ConfiguredId]
compLinkedLibDependencies :: [OpenUnitId]
compExeDependencies :: [ConfiguredId]
compPkgConfigDependencies :: [(PkgconfigName, Maybe PkgconfigVersion)]
compExeDependencyPaths :: [(ConfiguredId, String)]
compOrderLibDependencies :: [UnitId]
compLibDependencies :: [ConfiguredId]
compExeDependencies :: [ConfiguredId]
compExeDependencyPaths :: [(ConfiguredId, String)]
compLinkedLibDependencies :: forall {a}. a
compOrderLibDependencies :: forall {a}. a
compComponentName :: Maybe ComponentName
compSolverName :: Component
compPkgConfigDependencies :: [(PkgconfigName, Maybe PkgconfigVersion)]
..}
let elab1 :: ElaboratedConfiguredPackage
elab1 = ElaboratedConfiguredPackage
elab0 {
elabPkgOrComp :: ElaboratedPackageOrComponent
elabPkgOrComp = ElaboratedComponent -> ElaboratedPackageOrComponent
ElabComponent (ElaboratedComponent -> ElaboratedPackageOrComponent)
-> ElaboratedComponent -> ElaboratedPackageOrComponent
forall a b. (a -> b) -> a -> b
$ ElaboratedComponent
elab_comp
}
cid :: InstalledPackageId
cid = case ElaboratedConfiguredPackage -> BuildStyle
elabBuildStyle ElaboratedConfiguredPackage
elab0 of
BuildStyle
BuildInplaceOnly ->
String -> InstalledPackageId
mkComponentId (String -> InstalledPackageId) -> String -> InstalledPackageId
forall a b. (a -> b) -> a -> b
$
PackageIdentifier -> String
forall a. Pretty a => a -> String
prettyShow PackageIdentifier
pkgid String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"-inplace" String -> String -> String
forall a. [a] -> [a] -> [a]
++
(case ComponentName -> Maybe UnqualComponentName
Cabal.componentNameString ComponentName
cname of
Maybe UnqualComponentName
Nothing -> String
""
Just UnqualComponentName
s -> String
"-" String -> String -> String
forall a. [a] -> [a] -> [a]
++ UnqualComponentName -> String
forall a. Pretty a => a -> String
prettyShow UnqualComponentName
s)
BuildStyle
BuildAndInstall ->
PackageHashInputs -> InstalledPackageId
hashedInstalledPackageId
(ElaboratedSharedConfig
-> ElaboratedConfiguredPackage -> PackageHashInputs
packageHashInputs
ElaboratedSharedConfig
elaboratedSharedConfig
ElaboratedConfiguredPackage
elab1)
cc :: ConfiguredComponent
cc = ConfiguredComponent
cc0 { cc_ann_id :: AnnotatedId InstalledPackageId
cc_ann_id = (InstalledPackageId -> InstalledPackageId)
-> AnnotatedId InstalledPackageId -> AnnotatedId InstalledPackageId
forall a b. (a -> b) -> AnnotatedId a -> AnnotatedId b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (InstalledPackageId -> InstalledPackageId -> InstalledPackageId
forall a b. a -> b -> a
const InstalledPackageId
cid) (ConfiguredComponent -> AnnotatedId InstalledPackageId
cc_ann_id ConfiguredComponent
cc0) }
Doc -> LogProgress ()
infoProgress (Doc -> LogProgress ()) -> Doc -> LogProgress ()
forall a b. (a -> b) -> a -> b
$ ConfiguredComponent -> Doc
dispConfiguredComponent ConfiguredComponent
cc
let lookup_uid :: DefUnitId -> FullUnitId
lookup_uid DefUnitId
def_uid =
case UnitId -> Map UnitId FullUnitId -> Maybe FullUnitId
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup (DefUnitId -> UnitId
unDefUnitId DefUnitId
def_uid) Map UnitId FullUnitId
preexistingInstantiatedPkgs of
Just FullUnitId
full -> FullUnitId
full
Maybe FullUnitId
Nothing -> String -> FullUnitId
forall a. HasCallStack => String -> a
error (String
"lookup_uid: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ DefUnitId -> String
forall a. Pretty a => a -> String
prettyShow DefUnitId
def_uid)
LinkedComponent
lc <- Verbosity
-> (DefUnitId -> FullUnitId)
-> PackageIdentifier
-> LinkedComponentMap
-> ConfiguredComponent
-> LogProgress LinkedComponent
toLinkedComponent Verbosity
verbosity DefUnitId -> FullUnitId
lookup_uid (ElaboratedConfiguredPackage -> PackageIdentifier
elabPkgSourceId ElaboratedConfiguredPackage
elab0)
(LinkedComponentMap -> LinkedComponentMap -> LinkedComponentMap
forall k a. Ord k => Map k a -> Map k a -> Map k a
Map.union LinkedComponentMap
external_lc_map LinkedComponentMap
lc_map) ConfiguredComponent
cc
Doc -> LogProgress ()
infoProgress (Doc -> LogProgress ()) -> Doc -> LogProgress ()
forall a b. (a -> b) -> a -> b
$ LinkedComponent -> Doc
dispLinkedComponent LinkedComponent
lc
let
elab2 :: ElaboratedConfiguredPackage
elab2 = ElaboratedConfiguredPackage
elab1 {
elabModuleShape :: ModuleShape
elabModuleShape = LinkedComponent -> ModuleShape
lc_shape LinkedComponent
lc,
elabUnitId :: UnitId
elabUnitId = OpenUnitId -> UnitId
abstractUnitId (LinkedComponent -> OpenUnitId
lc_uid LinkedComponent
lc),
elabComponentId :: InstalledPackageId
elabComponentId = LinkedComponent -> InstalledPackageId
lc_cid LinkedComponent
lc,
elabLinkedInstantiatedWith :: Map ModuleName OpenModule
elabLinkedInstantiatedWith = [(ModuleName, OpenModule)] -> Map ModuleName OpenModule
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList (LinkedComponent -> [(ModuleName, OpenModule)]
lc_insts LinkedComponent
lc),
elabPkgOrComp :: ElaboratedPackageOrComponent
elabPkgOrComp = ElaboratedComponent -> ElaboratedPackageOrComponent
ElabComponent (ElaboratedComponent -> ElaboratedPackageOrComponent)
-> ElaboratedComponent -> ElaboratedPackageOrComponent
forall a b. (a -> b) -> a -> b
$ ElaboratedComponent
elab_comp {
compLinkedLibDependencies :: [OpenUnitId]
compLinkedLibDependencies = [OpenUnitId] -> [OpenUnitId]
forall a. Ord a => [a] -> [a]
ordNub ((ComponentInclude OpenUnitId ModuleRenaming -> OpenUnitId)
-> [ComponentInclude OpenUnitId ModuleRenaming] -> [OpenUnitId]
forall a b. (a -> b) -> [a] -> [b]
map ComponentInclude OpenUnitId ModuleRenaming -> OpenUnitId
forall id rn. ComponentInclude id rn -> id
ci_id (LinkedComponent -> [ComponentInclude OpenUnitId ModuleRenaming]
lc_includes LinkedComponent
lc)),
compOrderLibDependencies :: [UnitId]
compOrderLibDependencies =
[UnitId] -> [UnitId]
forall a. Ord a => [a] -> [a]
ordNub ((ComponentInclude OpenUnitId ModuleRenaming -> UnitId)
-> [ComponentInclude OpenUnitId ModuleRenaming] -> [UnitId]
forall a b. (a -> b) -> [a] -> [b]
map (OpenUnitId -> UnitId
abstractUnitId (OpenUnitId -> UnitId)
-> (ComponentInclude OpenUnitId ModuleRenaming -> OpenUnitId)
-> ComponentInclude OpenUnitId ModuleRenaming
-> UnitId
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ComponentInclude OpenUnitId ModuleRenaming -> OpenUnitId
forall id rn. ComponentInclude id rn -> id
ci_id)
(LinkedComponent -> [ComponentInclude OpenUnitId ModuleRenaming]
lc_includes LinkedComponent
lc [ComponentInclude OpenUnitId ModuleRenaming]
-> [ComponentInclude OpenUnitId ModuleRenaming]
-> [ComponentInclude OpenUnitId ModuleRenaming]
forall a. [a] -> [a] -> [a]
++ LinkedComponent -> [ComponentInclude OpenUnitId ModuleRenaming]
lc_sig_includes LinkedComponent
lc))
}
}
elab :: ElaboratedConfiguredPackage
elab = ElaboratedConfiguredPackage
elab2 {
elabInstallDirs :: InstallDirs String
elabInstallDirs = StoreDirLayout
-> InstallDirTemplates
-> ElaboratedSharedConfig
-> ElaboratedConfiguredPackage
-> InstallDirs String
computeInstallDirs
StoreDirLayout
storeDirLayout
InstallDirTemplates
defaultInstallDirs
ElaboratedSharedConfig
elaboratedSharedConfig
ElaboratedConfiguredPackage
elab2
}
let cc_map' :: ConfiguredComponentMap
cc_map' = ConfiguredComponent
-> ConfiguredComponentMap -> ConfiguredComponentMap
extendConfiguredComponentMap ConfiguredComponent
cc ConfiguredComponentMap
cc_map
lc_map' :: LinkedComponentMap
lc_map' = LinkedComponent -> LinkedComponentMap -> LinkedComponentMap
extendLinkedComponentMap LinkedComponent
lc LinkedComponentMap
lc_map
exe_map' :: Map InstalledPackageId String
exe_map' = InstalledPackageId
-> String
-> Map InstalledPackageId String
-> Map InstalledPackageId String
forall k a. Ord k => k -> a -> Map k a -> Map k a
Map.insert InstalledPackageId
cid (ElaboratedConfiguredPackage -> String
inplace_bin_dir ElaboratedConfiguredPackage
elab) Map InstalledPackageId String
exe_map
((ConfiguredComponentMap, LinkedComponentMap,
Map InstalledPackageId String),
ElaboratedConfiguredPackage)
-> LogProgress
((ConfiguredComponentMap, LinkedComponentMap,
Map InstalledPackageId String),
ElaboratedConfiguredPackage)
forall a. a -> LogProgress a
forall (m :: * -> *) a. Monad m => a -> m a
return ((ConfiguredComponentMap
cc_map', LinkedComponentMap
lc_map', Map InstalledPackageId String
exe_map'), ElaboratedConfiguredPackage
elab)
where
compLinkedLibDependencies :: a
compLinkedLibDependencies = String -> a
forall a. HasCallStack => String -> a
error String
"buildComponent: compLinkedLibDependencies"
compOrderLibDependencies :: a
compOrderLibDependencies = String -> a
forall a. HasCallStack => String -> a
error String
"buildComponent: compOrderLibDependencies"
cname :: ComponentName
cname = Component -> ComponentName
Cabal.componentName Component
comp
compComponentName :: Maybe ComponentName
compComponentName = ComponentName -> Maybe ComponentName
forall a. a -> Maybe a
Just ComponentName
cname
compSolverName :: Component
compSolverName = ComponentName -> Component
CD.componentNameToComponent ComponentName
cname
external_lib_dep_sids :: [SolverId]
external_lib_dep_sids = (Component -> Bool) -> ComponentDeps [SolverId] -> [SolverId]
forall a. Monoid a => (Component -> Bool) -> ComponentDeps a -> a
CD.select (Component -> Component -> Bool
forall a. Eq a => a -> a -> Bool
== Component
compSolverName) ComponentDeps [SolverId]
deps0
external_exe_dep_sids :: [SolverId]
external_exe_dep_sids = (Component -> Bool) -> ComponentDeps [SolverId] -> [SolverId]
forall a. Monoid a => (Component -> Bool) -> ComponentDeps a -> a
CD.select (Component -> Component -> Bool
forall a. Eq a => a -> a -> Bool
== Component
compSolverName) ComponentDeps [SolverId]
exe_deps0
external_lib_dep_pkgs :: [ElaboratedPlanPackage]
external_lib_dep_pkgs = (SolverId -> [ElaboratedPlanPackage])
-> [SolverId] -> [ElaboratedPlanPackage]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap SolverId -> [ElaboratedPlanPackage]
mapDep [SolverId]
external_lib_dep_sids
external_exe_dep_pkgs :: [ElaboratedPlanPackage]
external_exe_dep_pkgs =
(SolverId -> [ElaboratedPlanPackage])
-> [SolverId] -> [ElaboratedPlanPackage]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap SolverId -> [ElaboratedPlanPackage]
mapDep ([SolverId] -> [ElaboratedPlanPackage])
-> [SolverId] -> [ElaboratedPlanPackage]
forall a b. (a -> b) -> a -> b
$
(SolverId -> PackageName) -> [SolverId] -> [SolverId]
forall b a. Ord b => (a -> b) -> [a] -> [a]
ordNubBy (PackageIdentifier -> PackageName
pkgName (PackageIdentifier -> PackageName)
-> (SolverId -> PackageIdentifier) -> SolverId -> PackageName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SolverId -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId) ([SolverId] -> [SolverId]) -> [SolverId] -> [SolverId]
forall a b. (a -> b) -> a -> b
$
[SolverId]
external_exe_dep_sids [SolverId] -> [SolverId] -> [SolverId]
forall a. [a] -> [a] -> [a]
++ [SolverId]
external_lib_dep_sids
external_exe_map :: Map InstalledPackageId [String]
external_exe_map = [(InstalledPackageId, [String])] -> Map InstalledPackageId [String]
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList ([(InstalledPackageId, [String])]
-> Map InstalledPackageId [String])
-> [(InstalledPackageId, [String])]
-> Map InstalledPackageId [String]
forall a b. (a -> b) -> a -> b
$
[ (ElaboratedPlanPackage -> InstalledPackageId
getComponentId ElaboratedPlanPackage
pkg, [String]
paths)
| ElaboratedPlanPackage
pkg <- [ElaboratedPlanPackage]
external_exe_dep_pkgs
, let paths :: [String]
paths = ElaboratedPlanPackage -> [String]
planPackageExePaths ElaboratedPlanPackage
pkg ]
exe_map1 :: Map InstalledPackageId [String]
exe_map1 = Map InstalledPackageId [String]
-> Map InstalledPackageId [String]
-> Map InstalledPackageId [String]
forall k a. Ord k => Map k a -> Map k a -> Map k a
Map.union Map InstalledPackageId [String]
external_exe_map (Map InstalledPackageId [String]
-> Map InstalledPackageId [String])
-> Map InstalledPackageId [String]
-> Map InstalledPackageId [String]
forall a b. (a -> b) -> a -> b
$ (String -> [String])
-> Map InstalledPackageId String -> Map InstalledPackageId [String]
forall a b.
(a -> b) -> Map InstalledPackageId a -> Map InstalledPackageId b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\String
x -> [String
x]) Map InstalledPackageId String
exe_map
external_lib_cc_map :: ConfiguredComponentMap
external_lib_cc_map = (Map ComponentName (AnnotatedId InstalledPackageId)
-> Map ComponentName (AnnotatedId InstalledPackageId)
-> Map ComponentName (AnnotatedId InstalledPackageId))
-> [(PackageName,
Map ComponentName (AnnotatedId InstalledPackageId))]
-> ConfiguredComponentMap
forall k a. Ord k => (a -> a -> a) -> [(k, a)] -> Map k a
Map.fromListWith Map ComponentName (AnnotatedId InstalledPackageId)
-> Map ComponentName (AnnotatedId InstalledPackageId)
-> Map ComponentName (AnnotatedId InstalledPackageId)
forall k a. Ord k => Map k a -> Map k a -> Map k a
Map.union
([(PackageName,
Map ComponentName (AnnotatedId InstalledPackageId))]
-> ConfiguredComponentMap)
-> [(PackageName,
Map ComponentName (AnnotatedId InstalledPackageId))]
-> ConfiguredComponentMap
forall a b. (a -> b) -> a -> b
$ (ElaboratedPlanPackage
-> (PackageName,
Map ComponentName (AnnotatedId InstalledPackageId)))
-> [ElaboratedPlanPackage]
-> [(PackageName,
Map ComponentName (AnnotatedId InstalledPackageId))]
forall a b. (a -> b) -> [a] -> [b]
map ElaboratedPlanPackage
-> (PackageName,
Map ComponentName (AnnotatedId InstalledPackageId))
mkCCMapping [ElaboratedPlanPackage]
external_lib_dep_pkgs
external_exe_cc_map :: ConfiguredComponentMap
external_exe_cc_map = (Map ComponentName (AnnotatedId InstalledPackageId)
-> Map ComponentName (AnnotatedId InstalledPackageId)
-> Map ComponentName (AnnotatedId InstalledPackageId))
-> [(PackageName,
Map ComponentName (AnnotatedId InstalledPackageId))]
-> ConfiguredComponentMap
forall k a. Ord k => (a -> a -> a) -> [(k, a)] -> Map k a
Map.fromListWith Map ComponentName (AnnotatedId InstalledPackageId)
-> Map ComponentName (AnnotatedId InstalledPackageId)
-> Map ComponentName (AnnotatedId InstalledPackageId)
forall k a. Ord k => Map k a -> Map k a -> Map k a
Map.union
([(PackageName,
Map ComponentName (AnnotatedId InstalledPackageId))]
-> ConfiguredComponentMap)
-> [(PackageName,
Map ComponentName (AnnotatedId InstalledPackageId))]
-> ConfiguredComponentMap
forall a b. (a -> b) -> a -> b
$ (ElaboratedPlanPackage
-> (PackageName,
Map ComponentName (AnnotatedId InstalledPackageId)))
-> [ElaboratedPlanPackage]
-> [(PackageName,
Map ComponentName (AnnotatedId InstalledPackageId))]
forall a b. (a -> b) -> [a] -> [b]
map ElaboratedPlanPackage
-> (PackageName,
Map ComponentName (AnnotatedId InstalledPackageId))
mkCCMapping [ElaboratedPlanPackage]
external_exe_dep_pkgs
external_lc_map :: LinkedComponentMap
external_lc_map =
[(InstalledPackageId, (OpenUnitId, ModuleShape))]
-> LinkedComponentMap
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList ([(InstalledPackageId, (OpenUnitId, ModuleShape))]
-> LinkedComponentMap)
-> [(InstalledPackageId, (OpenUnitId, ModuleShape))]
-> LinkedComponentMap
forall a b. (a -> b) -> a -> b
$ (ElaboratedPlanPackage
-> (InstalledPackageId, (OpenUnitId, ModuleShape)))
-> [ElaboratedPlanPackage]
-> [(InstalledPackageId, (OpenUnitId, ModuleShape))]
forall a b. (a -> b) -> [a] -> [b]
map ElaboratedPlanPackage
-> (InstalledPackageId, (OpenUnitId, ModuleShape))
mkShapeMapping ([ElaboratedPlanPackage]
-> [(InstalledPackageId, (OpenUnitId, ModuleShape))])
-> [ElaboratedPlanPackage]
-> [(InstalledPackageId, (OpenUnitId, ModuleShape))]
forall a b. (a -> b) -> a -> b
$
[ElaboratedPlanPackage]
external_lib_dep_pkgs [ElaboratedPlanPackage]
-> [ElaboratedPlanPackage] -> [ElaboratedPlanPackage]
forall a. [a] -> [a] -> [a]
++ (SolverId -> [ElaboratedPlanPackage])
-> [SolverId] -> [ElaboratedPlanPackage]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap SolverId -> [ElaboratedPlanPackage]
mapDep [SolverId]
external_exe_dep_sids
compPkgConfigDependencies :: [(PkgconfigName, Maybe PkgconfigVersion)]
compPkgConfigDependencies =
[ (PkgconfigName
pn, Maybe PkgconfigVersion
-> Maybe (Maybe PkgconfigVersion) -> Maybe PkgconfigVersion
forall a. a -> Maybe a -> a
fromMaybe (String -> Maybe PkgconfigVersion
forall a. HasCallStack => String -> a
error (String -> Maybe PkgconfigVersion)
-> String -> Maybe PkgconfigVersion
forall a b. (a -> b) -> a -> b
$ String
"compPkgConfigDependencies: impossible! "
String -> String -> String
forall a. [a] -> [a] -> [a]
++ PkgconfigName -> String
forall a. Pretty a => a -> String
prettyShow PkgconfigName
pn String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" from "
String -> String -> String
forall a. [a] -> [a] -> [a]
++ PackageIdentifier -> String
forall a. Pretty a => a -> String
prettyShow (ElaboratedConfiguredPackage -> PackageIdentifier
elabPkgSourceId ElaboratedConfiguredPackage
elab0))
(PkgConfigDb -> PkgconfigName -> Maybe (Maybe PkgconfigVersion)
pkgConfigDbPkgVersion PkgConfigDb
pkgConfigDB PkgconfigName
pn))
| PkgconfigDependency PkgconfigName
pn PkgconfigVersionRange
_ <- BuildInfo -> [PkgconfigDependency]
PD.pkgconfigDepends
(Component -> BuildInfo
Cabal.componentBuildInfo Component
comp) ]
inplace_bin_dir :: ElaboratedConfiguredPackage -> String
inplace_bin_dir ElaboratedConfiguredPackage
elab =
DistDirLayout
-> ElaboratedSharedConfig
-> ElaboratedConfiguredPackage
-> String
-> String
binDirectoryFor
DistDirLayout
distDirLayout
ElaboratedSharedConfig
elaboratedSharedConfig
ElaboratedConfiguredPackage
elab (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$
case ComponentName -> Maybe UnqualComponentName
Cabal.componentNameString ComponentName
cname of
Just UnqualComponentName
n -> UnqualComponentName -> String
forall a. Pretty a => a -> String
prettyShow UnqualComponentName
n
Maybe UnqualComponentName
Nothing -> String
""
elaborateLibSolverId :: (SolverId -> [ElaboratedPlanPackage])
-> SolverId -> [ElaboratedPlanPackage]
elaborateLibSolverId :: (SolverId -> [ElaboratedPlanPackage])
-> SolverId -> [ElaboratedPlanPackage]
elaborateLibSolverId SolverId -> [ElaboratedPlanPackage]
mapDep = (ElaboratedPlanPackage -> Bool)
-> [ElaboratedPlanPackage] -> [ElaboratedPlanPackage]
forall a. (a -> Bool) -> [a] -> [a]
filter ((ComponentName -> Bool) -> ElaboratedPlanPackage -> Bool
matchPlanPkg (ComponentName -> ComponentName -> Bool
forall a. Eq a => a -> a -> Bool
== (LibraryName -> ComponentName
CLibName LibraryName
LMainLibName))) ([ElaboratedPlanPackage] -> [ElaboratedPlanPackage])
-> (SolverId -> [ElaboratedPlanPackage])
-> SolverId
-> [ElaboratedPlanPackage]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SolverId -> [ElaboratedPlanPackage]
mapDep
planPackageExePaths :: ElaboratedPlanPackage -> [FilePath]
planPackageExePaths :: ElaboratedPlanPackage -> [String]
planPackageExePaths =
(InstalledPackageInfo -> [String])
-> (ElaboratedConfiguredPackage -> [String])
-> ElaboratedPlanPackage
-> [String]
forall ipkg a srcpkg.
(ipkg -> a) -> (srcpkg -> a) -> GenericPlanPackage ipkg srcpkg -> a
InstallPlan.foldPlanPackage ([String] -> InstalledPackageInfo -> [String]
forall a b. a -> b -> a
const []) ((ElaboratedConfiguredPackage -> [String])
-> ElaboratedPlanPackage -> [String])
-> (ElaboratedConfiguredPackage -> [String])
-> ElaboratedPlanPackage
-> [String]
forall a b. (a -> b) -> a -> b
$ \ElaboratedConfiguredPackage
elab ->
let
executables :: [FilePath]
executables :: [String]
executables =
case ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp ElaboratedConfiguredPackage
elab of
ElabPackage ElaboratedPackage
_ -> UnqualComponentName -> String
unUnqualComponentName (UnqualComponentName -> String)
-> (Executable -> UnqualComponentName) -> Executable -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Executable -> UnqualComponentName
PD.exeName
(Executable -> String) -> [Executable] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> PackageDescription -> [Executable]
PD.executables (ElaboratedConfiguredPackage -> PackageDescription
elabPkgDescription ElaboratedConfiguredPackage
elab)
ElabComponent ElaboratedComponent
comp ->
case (ComponentName -> Maybe UnqualComponentName)
-> Maybe ComponentName -> Maybe (Maybe UnqualComponentName)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ComponentName -> Maybe UnqualComponentName
Cabal.componentNameString
(ElaboratedComponent -> Maybe ComponentName
compComponentName ElaboratedComponent
comp) of
Just (Just UnqualComponentName
n) -> [UnqualComponentName -> String
forall a. Pretty a => a -> String
prettyShow UnqualComponentName
n]
Maybe (Maybe UnqualComponentName)
_ -> [String
""]
in
DistDirLayout
-> ElaboratedSharedConfig
-> ElaboratedConfiguredPackage
-> String
-> String
binDirectoryFor
DistDirLayout
distDirLayout
ElaboratedSharedConfig
elaboratedSharedConfig
ElaboratedConfiguredPackage
elab
(String -> String) -> [String] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [String]
executables
elaborateSolverToPackage :: SolverPackage UnresolvedPkgLoc
-> ComponentsGraph
-> [ElaboratedConfiguredPackage]
-> ElaboratedConfiguredPackage
elaborateSolverToPackage :: SolverPackage UnresolvedPkgLoc
-> ComponentsGraph
-> [ElaboratedConfiguredPackage]
-> ElaboratedConfiguredPackage
elaborateSolverToPackage
pkg :: SolverPackage UnresolvedPkgLoc
pkg@(SolverPackage (SourcePackage PackageIdentifier
pkgid GenericPackageDescription
_gpd UnresolvedPkgLoc
_srcloc Maybe CabalFileText
_descOverride)
FlagAssignment
_flags OptionalStanzaSet
_stanzas ComponentDeps [SolverId]
_deps0 ComponentDeps [SolverId]
_exe_deps0)
ComponentsGraph
compGraph [ElaboratedConfiguredPackage]
comps =
ElaboratedConfiguredPackage
elab
where
elab0 :: ElaboratedConfiguredPackage
elab0@ElaboratedConfiguredPackage{Bool
[String]
[Maybe PackageDB]
PackageDBStack
[PathTemplate]
[ComponentTarget]
Maybe String
Maybe CabalFileText
Maybe PathTemplate
Maybe TestShowDetails
Maybe PackageSourceHash
Maybe ComponentTarget
Map String String
Map String [String]
Map ModuleName Module
Map ModuleName OpenModule
OptionalStanzaMap (Maybe Bool)
OptionalStanzaSet
PackageIdentifier
ComponentRequestedSpec
UnitId
Version
FlagAssignment
PackageDescription
InstalledPackageId
DebugInfoLevel
OptimisationLevel
ProfDetailLevel
HaddockTarget
ModuleShape
InstallDirs String
DumpBuildInfo
UnresolvedPkgLoc
SetupScriptStyle
BuildStyle
ElaboratedPackageOrComponent
elabUnitId :: ElaboratedConfiguredPackage -> UnitId
elabComponentId :: ElaboratedConfiguredPackage -> InstalledPackageId
elabInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName Module
elabLinkedInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName OpenModule
elabIsCanonical :: ElaboratedConfiguredPackage -> Bool
elabPkgSourceId :: ElaboratedConfiguredPackage -> PackageIdentifier
elabModuleShape :: ElaboratedConfiguredPackage -> ModuleShape
elabFlagAssignment :: ElaboratedConfiguredPackage -> FlagAssignment
elabFlagDefaults :: ElaboratedConfiguredPackage -> FlagAssignment
elabPkgDescription :: ElaboratedConfiguredPackage -> PackageDescription
elabPkgSourceLocation :: ElaboratedConfiguredPackage -> UnresolvedPkgLoc
elabPkgSourceHash :: ElaboratedConfiguredPackage -> Maybe PackageSourceHash
elabLocalToProject :: ElaboratedConfiguredPackage -> Bool
elabBuildStyle :: ElaboratedConfiguredPackage -> BuildStyle
elabEnabledSpec :: ElaboratedConfiguredPackage -> ComponentRequestedSpec
elabStanzasAvailable :: ElaboratedConfiguredPackage -> OptionalStanzaSet
elabStanzasRequested :: ElaboratedConfiguredPackage -> OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: ElaboratedConfiguredPackage -> [Maybe PackageDB]
elabSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabPkgDescriptionOverride :: ElaboratedConfiguredPackage -> Maybe CabalFileText
elabVanillaLib :: ElaboratedConfiguredPackage -> Bool
elabSharedLib :: ElaboratedConfiguredPackage -> Bool
elabStaticLib :: ElaboratedConfiguredPackage -> Bool
elabDynExe :: ElaboratedConfiguredPackage -> Bool
elabFullyStaticExe :: ElaboratedConfiguredPackage -> Bool
elabGHCiLib :: ElaboratedConfiguredPackage -> Bool
elabProfLib :: ElaboratedConfiguredPackage -> Bool
elabProfExe :: ElaboratedConfiguredPackage -> Bool
elabProfLibDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabProfExeDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabCoverage :: ElaboratedConfiguredPackage -> Bool
elabOptimization :: ElaboratedConfiguredPackage -> OptimisationLevel
elabSplitObjs :: ElaboratedConfiguredPackage -> Bool
elabSplitSections :: ElaboratedConfiguredPackage -> Bool
elabStripLibs :: ElaboratedConfiguredPackage -> Bool
elabStripExes :: ElaboratedConfiguredPackage -> Bool
elabDebugInfo :: ElaboratedConfiguredPackage -> DebugInfoLevel
elabDumpBuildInfo :: ElaboratedConfiguredPackage -> DumpBuildInfo
elabProgramPaths :: ElaboratedConfiguredPackage -> Map String String
elabProgramArgs :: ElaboratedConfiguredPackage -> Map String [String]
elabProgramPathExtra :: ElaboratedConfiguredPackage -> [String]
elabConfigureScriptArgs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirsStatic :: ElaboratedConfiguredPackage -> [String]
elabExtraFrameworkDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraIncludeDirs :: ElaboratedConfiguredPackage -> [String]
elabProgPrefix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabProgSuffix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabInstallDirs :: ElaboratedConfiguredPackage -> InstallDirs String
elabHaddockHoogle :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtml :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtmlLocation :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockForeignLibs :: ElaboratedConfiguredPackage -> Bool
elabHaddockForHackage :: ElaboratedConfiguredPackage -> HaddockTarget
elabHaddockExecutables :: ElaboratedConfiguredPackage -> Bool
elabHaddockTestSuites :: ElaboratedConfiguredPackage -> Bool
elabHaddockBenchmarks :: ElaboratedConfiguredPackage -> Bool
elabHaddockInternal :: ElaboratedConfiguredPackage -> Bool
elabHaddockCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockLinkedSource :: ElaboratedConfiguredPackage -> Bool
elabHaddockQuickJump :: ElaboratedConfiguredPackage -> Bool
elabHaddockHscolourCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockContents :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestMachineLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestHumanLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestShowDetails :: ElaboratedConfiguredPackage -> Maybe TestShowDetails
elabTestKeepTix :: ElaboratedConfiguredPackage -> Bool
elabTestWrapper :: ElaboratedConfiguredPackage -> Maybe String
elabTestFailWhenNoTestSuites :: ElaboratedConfiguredPackage -> Bool
elabTestTestOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabBenchmarkOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabSetupScriptStyle :: ElaboratedConfiguredPackage -> SetupScriptStyle
elabSetupScriptCliVersion :: ElaboratedConfiguredPackage -> Version
elabConfigureTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabTestTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBenchTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabReplTarget :: ElaboratedConfiguredPackage -> Maybe ComponentTarget
elabHaddockTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildHaddocks :: ElaboratedConfiguredPackage -> Bool
elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabUnitId :: UnitId
elabComponentId :: InstalledPackageId
elabInstantiatedWith :: Map ModuleName Module
elabLinkedInstantiatedWith :: Map ModuleName OpenModule
elabIsCanonical :: Bool
elabPkgSourceId :: PackageIdentifier
elabModuleShape :: ModuleShape
elabFlagAssignment :: FlagAssignment
elabFlagDefaults :: FlagAssignment
elabPkgDescription :: PackageDescription
elabPkgSourceLocation :: UnresolvedPkgLoc
elabPkgSourceHash :: Maybe PackageSourceHash
elabLocalToProject :: Bool
elabBuildStyle :: BuildStyle
elabEnabledSpec :: ComponentRequestedSpec
elabStanzasAvailable :: OptionalStanzaSet
elabStanzasRequested :: OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: [Maybe PackageDB]
elabSetupPackageDBStack :: PackageDBStack
elabBuildPackageDBStack :: PackageDBStack
elabRegisterPackageDBStack :: PackageDBStack
elabInplaceSetupPackageDBStack :: PackageDBStack
elabInplaceBuildPackageDBStack :: PackageDBStack
elabInplaceRegisterPackageDBStack :: PackageDBStack
elabPkgDescriptionOverride :: Maybe CabalFileText
elabVanillaLib :: Bool
elabSharedLib :: Bool
elabStaticLib :: Bool
elabDynExe :: Bool
elabFullyStaticExe :: Bool
elabGHCiLib :: Bool
elabProfLib :: Bool
elabProfExe :: Bool
elabProfLibDetail :: ProfDetailLevel
elabProfExeDetail :: ProfDetailLevel
elabCoverage :: Bool
elabOptimization :: OptimisationLevel
elabSplitObjs :: Bool
elabSplitSections :: Bool
elabStripLibs :: Bool
elabStripExes :: Bool
elabDebugInfo :: DebugInfoLevel
elabDumpBuildInfo :: DumpBuildInfo
elabProgramPaths :: Map String String
elabProgramArgs :: Map String [String]
elabProgramPathExtra :: [String]
elabConfigureScriptArgs :: [String]
elabExtraLibDirs :: [String]
elabExtraLibDirsStatic :: [String]
elabExtraFrameworkDirs :: [String]
elabExtraIncludeDirs :: [String]
elabProgPrefix :: Maybe PathTemplate
elabProgSuffix :: Maybe PathTemplate
elabInstallDirs :: InstallDirs String
elabHaddockHoogle :: Bool
elabHaddockHtml :: Bool
elabHaddockHtmlLocation :: Maybe String
elabHaddockForeignLibs :: Bool
elabHaddockForHackage :: HaddockTarget
elabHaddockExecutables :: Bool
elabHaddockTestSuites :: Bool
elabHaddockBenchmarks :: Bool
elabHaddockInternal :: Bool
elabHaddockCss :: Maybe String
elabHaddockLinkedSource :: Bool
elabHaddockQuickJump :: Bool
elabHaddockHscolourCss :: Maybe String
elabHaddockContents :: Maybe PathTemplate
elabTestMachineLog :: Maybe PathTemplate
elabTestHumanLog :: Maybe PathTemplate
elabTestShowDetails :: Maybe TestShowDetails
elabTestKeepTix :: Bool
elabTestWrapper :: Maybe String
elabTestFailWhenNoTestSuites :: Bool
elabTestTestOptions :: [PathTemplate]
elabBenchmarkOptions :: [PathTemplate]
elabSetupScriptStyle :: SetupScriptStyle
elabSetupScriptCliVersion :: Version
elabConfigureTargets :: [ComponentTarget]
elabBuildTargets :: [ComponentTarget]
elabTestTargets :: [ComponentTarget]
elabBenchTargets :: [ComponentTarget]
elabReplTarget :: Maybe ComponentTarget
elabHaddockTargets :: [ComponentTarget]
elabBuildHaddocks :: Bool
elabPkgOrComp :: ElaboratedPackageOrComponent
..} = SolverPackage UnresolvedPkgLoc -> ElaboratedConfiguredPackage
elaborateSolverToCommon SolverPackage UnresolvedPkgLoc
pkg
elab1 :: ElaboratedConfiguredPackage
elab1 = ElaboratedConfiguredPackage
elab0 {
elabUnitId :: UnitId
elabUnitId = InstalledPackageId -> UnitId
newSimpleUnitId InstalledPackageId
pkgInstalledId,
elabComponentId :: InstalledPackageId
elabComponentId = InstalledPackageId
pkgInstalledId,
elabLinkedInstantiatedWith :: Map ModuleName OpenModule
elabLinkedInstantiatedWith = Map ModuleName OpenModule
forall k a. Map k a
Map.empty,
elabPkgOrComp :: ElaboratedPackageOrComponent
elabPkgOrComp = ElaboratedPackage -> ElaboratedPackageOrComponent
ElabPackage (ElaboratedPackage -> ElaboratedPackageOrComponent)
-> ElaboratedPackage -> ElaboratedPackageOrComponent
forall a b. (a -> b) -> a -> b
$ ElaboratedPackage {[(PkgconfigName, Maybe PkgconfigVersion)]
ComponentDeps [()]
ComponentDeps [(ConfiguredId, String)]
ComponentDeps [ConfiguredId]
OptionalStanzaSet
InstalledPackageId
pkgInstalledId :: InstalledPackageId
pkgLibDependencies :: ComponentDeps [ConfiguredId]
pkgDependsOnSelfLib :: ComponentDeps [()]
pkgExeDependencies :: ComponentDeps [ConfiguredId]
pkgExeDependencyPaths :: ComponentDeps [(ConfiguredId, String)]
pkgPkgConfigDependencies :: [(PkgconfigName, Maybe PkgconfigVersion)]
pkgStanzasEnabled :: OptionalStanzaSet
pkgInstalledId :: InstalledPackageId
pkgLibDependencies :: ComponentDeps [ConfiguredId]
pkgExeDependencies :: ComponentDeps [ConfiguredId]
pkgExeDependencyPaths :: ComponentDeps [(ConfiguredId, String)]
pkgPkgConfigDependencies :: [(PkgconfigName, Maybe PkgconfigVersion)]
pkgDependsOnSelfLib :: ComponentDeps [()]
pkgStanzasEnabled :: OptionalStanzaSet
..},
elabModuleShape :: ModuleShape
elabModuleShape = ModuleShape
modShape
}
elab :: ElaboratedConfiguredPackage
elab = ElaboratedConfiguredPackage
elab1 {
elabInstallDirs :: InstallDirs String
elabInstallDirs =
StoreDirLayout
-> InstallDirTemplates
-> ElaboratedSharedConfig
-> ElaboratedConfiguredPackage
-> InstallDirs String
computeInstallDirs StoreDirLayout
storeDirLayout
InstallDirTemplates
defaultInstallDirs
ElaboratedSharedConfig
elaboratedSharedConfig
ElaboratedConfiguredPackage
elab1
}
modShape :: ModuleShape
modShape = case (ElaboratedConfiguredPackage -> Bool)
-> [ElaboratedConfiguredPackage]
-> Maybe ElaboratedConfiguredPackage
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Maybe a
find ((ComponentName -> Bool) -> ElaboratedConfiguredPackage -> Bool
matchElabPkg (ComponentName -> ComponentName -> Bool
forall a. Eq a => a -> a -> Bool
== (LibraryName -> ComponentName
CLibName LibraryName
LMainLibName))) [ElaboratedConfiguredPackage]
comps of
Maybe ElaboratedConfiguredPackage
Nothing -> ModuleShape
emptyModuleShape
Just ElaboratedConfiguredPackage
e -> ElaboratedConfiguredPackage -> ModuleShape
Ty.elabModuleShape ElaboratedConfiguredPackage
e
pkgInstalledId :: InstalledPackageId
pkgInstalledId
| SolverPackage UnresolvedPkgLoc -> Bool
forall loc. SolverPackage loc -> Bool
shouldBuildInplaceOnly SolverPackage UnresolvedPkgLoc
pkg
= String -> InstalledPackageId
mkComponentId (PackageIdentifier -> String
forall a. Pretty a => a -> String
prettyShow PackageIdentifier
pkgid String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"-inplace")
| Bool
otherwise
= Bool -> InstalledPackageId -> InstalledPackageId
forall a. HasCallStack => Bool -> a -> a
assert (Maybe PackageSourceHash -> Bool
forall a. Maybe a -> Bool
isJust Maybe PackageSourceHash
elabPkgSourceHash) (InstalledPackageId -> InstalledPackageId)
-> InstalledPackageId -> InstalledPackageId
forall a b. (a -> b) -> a -> b
$
PackageHashInputs -> InstalledPackageId
hashedInstalledPackageId
(ElaboratedSharedConfig
-> ElaboratedConfiguredPackage -> PackageHashInputs
packageHashInputs
ElaboratedSharedConfig
elaboratedSharedConfig
ElaboratedConfiguredPackage
elab)
isExt :: ConfiguredId -> Bool
isExt ConfiguredId
confid = ConfiguredId -> PackageIdentifier
confSrcId ConfiguredId
confid PackageIdentifier -> PackageIdentifier -> Bool
forall a. Eq a => a -> a -> Bool
/= PackageIdentifier
pkgid
filterExt :: [ConfiguredId] -> [ConfiguredId]
filterExt = (ConfiguredId -> Bool) -> [ConfiguredId] -> [ConfiguredId]
forall a. (a -> Bool) -> [a] -> [a]
filter ConfiguredId -> Bool
isExt
filterExt' :: [(ConfiguredId, b)] -> [(ConfiguredId, b)]
filterExt' = ((ConfiguredId, b) -> Bool)
-> [(ConfiguredId, b)] -> [(ConfiguredId, b)]
forall a. (a -> Bool) -> [a] -> [a]
filter (ConfiguredId -> Bool
isExt (ConfiguredId -> Bool)
-> ((ConfiguredId, b) -> ConfiguredId) -> (ConfiguredId, b) -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ConfiguredId, b) -> ConfiguredId
forall a b. (a, b) -> a
fst)
pkgLibDependencies :: ComponentDeps [ConfiguredId]
pkgLibDependencies
= (ElaboratedComponent -> [ConfiguredId])
-> ComponentDeps [ConfiguredId]
forall {a}.
Monoid a =>
(ElaboratedComponent -> a) -> ComponentDeps a
buildComponentDeps ([ConfiguredId] -> [ConfiguredId]
filterExt ([ConfiguredId] -> [ConfiguredId])
-> (ElaboratedComponent -> [ConfiguredId])
-> ElaboratedComponent
-> [ConfiguredId]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ElaboratedComponent -> [ConfiguredId]
compLibDependencies)
pkgExeDependencies :: ComponentDeps [ConfiguredId]
pkgExeDependencies
= (ElaboratedComponent -> [ConfiguredId])
-> ComponentDeps [ConfiguredId]
forall {a}.
Monoid a =>
(ElaboratedComponent -> a) -> ComponentDeps a
buildComponentDeps ([ConfiguredId] -> [ConfiguredId]
filterExt ([ConfiguredId] -> [ConfiguredId])
-> (ElaboratedComponent -> [ConfiguredId])
-> ElaboratedComponent
-> [ConfiguredId]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ElaboratedComponent -> [ConfiguredId]
compExeDependencies)
pkgExeDependencyPaths :: ComponentDeps [(ConfiguredId, String)]
pkgExeDependencyPaths
= (ElaboratedComponent -> [(ConfiguredId, String)])
-> ComponentDeps [(ConfiguredId, String)]
forall {a}.
Monoid a =>
(ElaboratedComponent -> a) -> ComponentDeps a
buildComponentDeps ([(ConfiguredId, String)] -> [(ConfiguredId, String)]
forall {b}. [(ConfiguredId, b)] -> [(ConfiguredId, b)]
filterExt' ([(ConfiguredId, String)] -> [(ConfiguredId, String)])
-> (ElaboratedComponent -> [(ConfiguredId, String)])
-> ElaboratedComponent
-> [(ConfiguredId, String)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ElaboratedComponent -> [(ConfiguredId, String)]
compExeDependencyPaths)
pkgPkgConfigDependencies :: [(PkgconfigName, Maybe PkgconfigVersion)]
pkgPkgConfigDependencies
= ComponentDeps [(PkgconfigName, Maybe PkgconfigVersion)]
-> [(PkgconfigName, Maybe PkgconfigVersion)]
forall a. Monoid a => ComponentDeps a -> a
CD.flatDeps (ComponentDeps [(PkgconfigName, Maybe PkgconfigVersion)]
-> [(PkgconfigName, Maybe PkgconfigVersion)])
-> ComponentDeps [(PkgconfigName, Maybe PkgconfigVersion)]
-> [(PkgconfigName, Maybe PkgconfigVersion)]
forall a b. (a -> b) -> a -> b
$ (ElaboratedComponent -> [(PkgconfigName, Maybe PkgconfigVersion)])
-> ComponentDeps [(PkgconfigName, Maybe PkgconfigVersion)]
forall {a}.
Monoid a =>
(ElaboratedComponent -> a) -> ComponentDeps a
buildComponentDeps ElaboratedComponent -> [(PkgconfigName, Maybe PkgconfigVersion)]
compPkgConfigDependencies
pkgDependsOnSelfLib :: ComponentDeps [()]
pkgDependsOnSelfLib
= [ComponentDep [()]] -> ComponentDeps [()]
forall a. Monoid a => [ComponentDep a] -> ComponentDeps a
CD.fromList [ (ComponentName -> Component
CD.componentNameToComponent ComponentName
cn, [()])
| Graph.N Component
_ ComponentName
cn [ComponentName]
_ <- [Node ComponentName Component]
-> Maybe [Node ComponentName Component]
-> [Node ComponentName Component]
forall a. a -> Maybe a -> a
fromMaybe [] Maybe [Node ComponentName Component]
mb_closure ]
where
mb_closure :: Maybe [Node ComponentName Component]
mb_closure = ComponentsGraph
-> [Key (Node ComponentName Component)]
-> Maybe [Node ComponentName Component]
forall a. Graph a -> [Key a] -> Maybe [a]
Graph.revClosure ComponentsGraph
compGraph [ ComponentName
Key (Node ComponentName Component)
k | ComponentName
k <- ComponentsGraph -> [Key (Node ComponentName Component)]
forall a. Graph a -> [Key a]
Graph.keys ComponentsGraph
compGraph, ComponentName -> Bool
is_lib ComponentName
k ]
is_lib :: ComponentName -> Bool
is_lib (CLibName LibraryName
_) = Bool
True
is_lib ComponentName
_ = Bool
False
buildComponentDeps :: (ElaboratedComponent -> a) -> ComponentDeps a
buildComponentDeps ElaboratedComponent -> a
f
= [ComponentDep a] -> ComponentDeps a
forall a. Monoid a => [ComponentDep a] -> ComponentDeps a
CD.fromList [ (ElaboratedComponent -> Component
compSolverName ElaboratedComponent
comp, ElaboratedComponent -> a
f ElaboratedComponent
comp)
| ElaboratedConfiguredPackage{
elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp = ElabComponent ElaboratedComponent
comp
} <- [ElaboratedConfiguredPackage]
comps
]
pkgStanzasEnabled :: OptionalStanzaSet
pkgStanzasEnabled = (Maybe Bool -> Bool)
-> OptionalStanzaMap (Maybe Bool) -> OptionalStanzaSet
forall a. (a -> Bool) -> OptionalStanzaMap a -> OptionalStanzaSet
optStanzaKeysFilteredByValue (Bool -> Maybe Bool -> Bool
forall a. a -> Maybe a -> a
fromMaybe Bool
False) OptionalStanzaMap (Maybe Bool)
elabStanzasRequested
elaborateSolverToCommon :: SolverPackage UnresolvedPkgLoc
-> ElaboratedConfiguredPackage
elaborateSolverToCommon :: SolverPackage UnresolvedPkgLoc -> ElaboratedConfiguredPackage
elaborateSolverToCommon
pkg :: SolverPackage UnresolvedPkgLoc
pkg@(SolverPackage (SourcePackage PackageIdentifier
pkgid GenericPackageDescription
gdesc UnresolvedPkgLoc
srcloc Maybe CabalFileText
descOverride)
FlagAssignment
flags OptionalStanzaSet
stanzas ComponentDeps [SolverId]
deps0 ComponentDeps [SolverId]
_exe_deps0) =
ElaboratedConfiguredPackage
elaboratedPackage
where
elaboratedPackage :: ElaboratedConfiguredPackage
elaboratedPackage = ElaboratedConfiguredPackage {Bool
[String]
[Maybe PackageDB]
PackageDBStack
[PathTemplate]
[ComponentTarget]
Maybe String
Maybe CabalFileText
Maybe PathTemplate
Maybe TestShowDetails
Maybe PackageSourceHash
Maybe ComponentTarget
Map String String
Map String [String]
Map ModuleName Module
Map ModuleName OpenModule
OptionalStanzaMap (Maybe Bool)
OptionalStanzaSet
PackageIdentifier
ComponentRequestedSpec
UnitId
Version
FlagAssignment
PackageDescription
InstalledPackageId
DebugInfoLevel
OptimisationLevel
ProfDetailLevel
HaddockTarget
ModuleShape
InstallDirs String
DumpBuildInfo
UnresolvedPkgLoc
SetupScriptStyle
BuildStyle
ElaboratedPackageOrComponent
forall {a}. a
forall a. [a]
forall a. Maybe a
forall k a. Map k a
elabUnitId :: UnitId
elabComponentId :: InstalledPackageId
elabInstantiatedWith :: Map ModuleName Module
elabLinkedInstantiatedWith :: Map ModuleName OpenModule
elabIsCanonical :: Bool
elabPkgSourceId :: PackageIdentifier
elabModuleShape :: ModuleShape
elabFlagAssignment :: FlagAssignment
elabFlagDefaults :: FlagAssignment
elabPkgDescription :: PackageDescription
elabPkgSourceLocation :: UnresolvedPkgLoc
elabPkgSourceHash :: Maybe PackageSourceHash
elabLocalToProject :: Bool
elabBuildStyle :: BuildStyle
elabEnabledSpec :: ComponentRequestedSpec
elabStanzasAvailable :: OptionalStanzaSet
elabStanzasRequested :: OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: [Maybe PackageDB]
elabSetupPackageDBStack :: PackageDBStack
elabBuildPackageDBStack :: PackageDBStack
elabRegisterPackageDBStack :: PackageDBStack
elabInplaceSetupPackageDBStack :: PackageDBStack
elabInplaceBuildPackageDBStack :: PackageDBStack
elabInplaceRegisterPackageDBStack :: PackageDBStack
elabPkgDescriptionOverride :: Maybe CabalFileText
elabVanillaLib :: Bool
elabSharedLib :: Bool
elabStaticLib :: Bool
elabDynExe :: Bool
elabFullyStaticExe :: Bool
elabGHCiLib :: Bool
elabProfLib :: Bool
elabProfExe :: Bool
elabProfLibDetail :: ProfDetailLevel
elabProfExeDetail :: ProfDetailLevel
elabCoverage :: Bool
elabOptimization :: OptimisationLevel
elabSplitObjs :: Bool
elabSplitSections :: Bool
elabStripLibs :: Bool
elabStripExes :: Bool
elabDebugInfo :: DebugInfoLevel
elabDumpBuildInfo :: DumpBuildInfo
elabProgramPaths :: Map String String
elabProgramArgs :: Map String [String]
elabProgramPathExtra :: [String]
elabConfigureScriptArgs :: [String]
elabExtraLibDirs :: [String]
elabExtraLibDirsStatic :: [String]
elabExtraFrameworkDirs :: [String]
elabExtraIncludeDirs :: [String]
elabProgPrefix :: Maybe PathTemplate
elabProgSuffix :: Maybe PathTemplate
elabInstallDirs :: InstallDirs String
elabHaddockHoogle :: Bool
elabHaddockHtml :: Bool
elabHaddockHtmlLocation :: Maybe String
elabHaddockForeignLibs :: Bool
elabHaddockForHackage :: HaddockTarget
elabHaddockExecutables :: Bool
elabHaddockTestSuites :: Bool
elabHaddockBenchmarks :: Bool
elabHaddockInternal :: Bool
elabHaddockCss :: Maybe String
elabHaddockLinkedSource :: Bool
elabHaddockQuickJump :: Bool
elabHaddockHscolourCss :: Maybe String
elabHaddockContents :: Maybe PathTemplate
elabTestMachineLog :: Maybe PathTemplate
elabTestHumanLog :: Maybe PathTemplate
elabTestShowDetails :: Maybe TestShowDetails
elabTestKeepTix :: Bool
elabTestWrapper :: Maybe String
elabTestFailWhenNoTestSuites :: Bool
elabTestTestOptions :: [PathTemplate]
elabBenchmarkOptions :: [PathTemplate]
elabSetupScriptStyle :: SetupScriptStyle
elabSetupScriptCliVersion :: Version
elabConfigureTargets :: [ComponentTarget]
elabBuildTargets :: [ComponentTarget]
elabTestTargets :: [ComponentTarget]
elabBenchTargets :: [ComponentTarget]
elabReplTarget :: Maybe ComponentTarget
elabHaddockTargets :: [ComponentTarget]
elabBuildHaddocks :: Bool
elabPkgOrComp :: ElaboratedPackageOrComponent
elabUnitId :: forall {a}. a
elabComponentId :: forall {a}. a
elabInstantiatedWith :: forall k a. Map k a
elabLinkedInstantiatedWith :: forall {a}. a
elabPkgOrComp :: forall {a}. a
elabInstallDirs :: forall {a}. a
elabModuleShape :: forall {a}. a
elabIsCanonical :: Bool
elabPkgSourceId :: PackageIdentifier
elabPkgDescription :: PackageDescription
elabFlagAssignment :: FlagAssignment
elabFlagDefaults :: FlagAssignment
elabEnabledSpec :: ComponentRequestedSpec
elabStanzasAvailable :: OptionalStanzaSet
elabStanzasRequested :: OptionalStanzaMap (Maybe Bool)
elabConfigureTargets :: forall a. [a]
elabBuildTargets :: forall a. [a]
elabTestTargets :: forall a. [a]
elabBenchTargets :: forall a. [a]
elabReplTarget :: forall a. Maybe a
elabHaddockTargets :: forall a. [a]
elabBuildHaddocks :: Bool
elabPkgSourceLocation :: UnresolvedPkgLoc
elabPkgSourceHash :: Maybe PackageSourceHash
elabLocalToProject :: Bool
elabBuildStyle :: BuildStyle
elabPackageDbs :: [Maybe PackageDB]
elabBuildPackageDBStack :: PackageDBStack
elabRegisterPackageDBStack :: PackageDBStack
elabSetupScriptStyle :: SetupScriptStyle
elabSetupScriptCliVersion :: Version
elabSetupPackageDBStack :: PackageDBStack
elabInplaceBuildPackageDBStack :: PackageDBStack
elabInplaceRegisterPackageDBStack :: PackageDBStack
elabInplaceSetupPackageDBStack :: PackageDBStack
elabPkgDescriptionOverride :: Maybe CabalFileText
elabVanillaLib :: Bool
elabSharedLib :: Bool
elabStaticLib :: Bool
elabDynExe :: Bool
elabFullyStaticExe :: Bool
elabGHCiLib :: Bool
elabProfExe :: Bool
elabProfLib :: Bool
elabProfExeDetail :: ProfDetailLevel
elabProfLibDetail :: ProfDetailLevel
elabCoverage :: Bool
elabOptimization :: OptimisationLevel
elabSplitObjs :: Bool
elabSplitSections :: Bool
elabStripLibs :: Bool
elabStripExes :: Bool
elabDebugInfo :: DebugInfoLevel
elabDumpBuildInfo :: DumpBuildInfo
elabProgramPaths :: Map String String
elabProgramArgs :: Map String [String]
elabProgramPathExtra :: [String]
elabConfigureScriptArgs :: [String]
elabExtraLibDirs :: [String]
elabExtraLibDirsStatic :: [String]
elabExtraFrameworkDirs :: [String]
elabExtraIncludeDirs :: [String]
elabProgPrefix :: Maybe PathTemplate
elabProgSuffix :: Maybe PathTemplate
elabHaddockHoogle :: Bool
elabHaddockHtml :: Bool
elabHaddockHtmlLocation :: Maybe String
elabHaddockForeignLibs :: Bool
elabHaddockForHackage :: HaddockTarget
elabHaddockExecutables :: Bool
elabHaddockTestSuites :: Bool
elabHaddockBenchmarks :: Bool
elabHaddockInternal :: Bool
elabHaddockCss :: Maybe String
elabHaddockLinkedSource :: Bool
elabHaddockQuickJump :: Bool
elabHaddockHscolourCss :: Maybe String
elabHaddockContents :: Maybe PathTemplate
elabTestMachineLog :: Maybe PathTemplate
elabTestHumanLog :: Maybe PathTemplate
elabTestShowDetails :: Maybe TestShowDetails
elabTestKeepTix :: Bool
elabTestWrapper :: Maybe String
elabTestFailWhenNoTestSuites :: Bool
elabTestTestOptions :: [PathTemplate]
elabBenchmarkOptions :: [PathTemplate]
..}
elabUnitId :: a
elabUnitId = String -> a
forall a. HasCallStack => String -> a
error String
"elaborateSolverToCommon: elabUnitId"
elabComponentId :: a
elabComponentId = String -> a
forall a. HasCallStack => String -> a
error String
"elaborateSolverToCommon: elabComponentId"
elabInstantiatedWith :: Map k a
elabInstantiatedWith = Map k a
forall k a. Map k a
Map.empty
elabLinkedInstantiatedWith :: a
elabLinkedInstantiatedWith = String -> a
forall a. HasCallStack => String -> a
error String
"elaborateSolverToCommon: elabLinkedInstantiatedWith"
elabPkgOrComp :: a
elabPkgOrComp = String -> a
forall a. HasCallStack => String -> a
error String
"elaborateSolverToCommon: elabPkgOrComp"
elabInstallDirs :: a
elabInstallDirs = String -> a
forall a. HasCallStack => String -> a
error String
"elaborateSolverToCommon: elabInstallDirs"
elabModuleShape :: a
elabModuleShape = String -> a
forall a. HasCallStack => String -> a
error String
"elaborateSolverToCommon: elabModuleShape"
elabIsCanonical :: Bool
elabIsCanonical = Bool
True
elabPkgSourceId :: PackageIdentifier
elabPkgSourceId = PackageIdentifier
pkgid
elabPkgDescription :: PackageDescription
elabPkgDescription = case FlagAssignment
-> ComponentRequestedSpec
-> (Dependency -> Bool)
-> Platform
-> CompilerInfo
-> [PackageVersionConstraint]
-> GenericPackageDescription
-> Either [Dependency] (PackageDescription, FlagAssignment)
PD.finalizePD
FlagAssignment
flags ComponentRequestedSpec
elabEnabledSpec (Bool -> Dependency -> Bool
forall a b. a -> b -> a
const Bool
True)
Platform
platform (Compiler -> CompilerInfo
compilerInfo Compiler
compiler)
[] GenericPackageDescription
gdesc of
Right (PackageDescription
desc, FlagAssignment
_) -> PackageDescription
desc
Left [Dependency]
_ -> String -> PackageDescription
forall a. HasCallStack => String -> a
error String
"Failed to finalizePD in elaborateSolverToCommon"
elabFlagAssignment :: FlagAssignment
elabFlagAssignment = FlagAssignment
flags
elabFlagDefaults :: FlagAssignment
elabFlagDefaults = [(FlagName, Bool)] -> FlagAssignment
PD.mkFlagAssignment
[ (PackageFlag -> FlagName
Cabal.flagName PackageFlag
flag, PackageFlag -> Bool
Cabal.flagDefault PackageFlag
flag)
| PackageFlag
flag <- GenericPackageDescription -> [PackageFlag]
PD.genPackageFlags GenericPackageDescription
gdesc ]
elabEnabledSpec :: ComponentRequestedSpec
elabEnabledSpec = OptionalStanzaSet -> ComponentRequestedSpec
enableStanzas OptionalStanzaSet
stanzas
elabStanzasAvailable :: OptionalStanzaSet
elabStanzasAvailable = OptionalStanzaSet
stanzas
elabStanzasRequested :: OptionalStanzaMap (Maybe Bool)
elabStanzasRequested :: OptionalStanzaMap (Maybe Bool)
elabStanzasRequested = (OptionalStanza -> Maybe Bool) -> OptionalStanzaMap (Maybe Bool)
forall a. (OptionalStanza -> a) -> OptionalStanzaMap a
optStanzaTabulate ((OptionalStanza -> Maybe Bool) -> OptionalStanzaMap (Maybe Bool))
-> (OptionalStanza -> Maybe Bool) -> OptionalStanzaMap (Maybe Bool)
forall a b. (a -> b) -> a -> b
$ \OptionalStanza
o -> case OptionalStanza
o of
OptionalStanza
TestStanzas -> [Bool] -> Maybe Bool
forall a. [a] -> Maybe a
listToMaybe [ Bool
v | Bool
v <- Maybe Bool -> [Bool]
forall a. Maybe a -> [a]
maybeToList Maybe Bool
tests, TestSuite
_ <- PackageDescription -> [TestSuite]
PD.testSuites PackageDescription
elabPkgDescription ]
OptionalStanza
BenchStanzas -> [Bool] -> Maybe Bool
forall a. [a] -> Maybe a
listToMaybe [ Bool
v | Bool
v <- Maybe Bool -> [Bool]
forall a. Maybe a -> [a]
maybeToList Maybe Bool
benchmarks, Benchmark
_ <- PackageDescription -> [Benchmark]
PD.benchmarks PackageDescription
elabPkgDescription ]
where
tests, benchmarks :: Maybe Bool
tests :: Maybe Bool
tests = PackageIdentifier -> (PackageConfig -> Flag Bool) -> Maybe Bool
forall a. PackageIdentifier -> (PackageConfig -> Flag a) -> Maybe a
perPkgOptionMaybe PackageIdentifier
pkgid PackageConfig -> Flag Bool
packageConfigTests
benchmarks :: Maybe Bool
benchmarks = PackageIdentifier -> (PackageConfig -> Flag Bool) -> Maybe Bool
forall a. PackageIdentifier -> (PackageConfig -> Flag a) -> Maybe a
perPkgOptionMaybe PackageIdentifier
pkgid PackageConfig -> Flag Bool
packageConfigBenchmarks
elabConfigureTargets :: [a]
elabConfigureTargets = []
elabBuildTargets :: [a]
elabBuildTargets = []
elabTestTargets :: [a]
elabTestTargets = []
elabBenchTargets :: [a]
elabBenchTargets = []
elabReplTarget :: Maybe a
elabReplTarget = Maybe a
forall a. Maybe a
Nothing
elabHaddockTargets :: [a]
elabHaddockTargets = []
elabBuildHaddocks :: Bool
elabBuildHaddocks =
PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigDocumentation
elabPkgSourceLocation :: UnresolvedPkgLoc
elabPkgSourceLocation = UnresolvedPkgLoc
srcloc
elabPkgSourceHash :: Maybe PackageSourceHash
elabPkgSourceHash = PackageIdentifier
-> Map PackageIdentifier PackageSourceHash
-> Maybe PackageSourceHash
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup PackageIdentifier
pkgid Map PackageIdentifier PackageSourceHash
sourcePackageHashes
elabLocalToProject :: Bool
elabLocalToProject = SolverPackage UnresolvedPkgLoc -> Bool
forall pkg. Package pkg => pkg -> Bool
isLocalToProject SolverPackage UnresolvedPkgLoc
pkg
elabBuildStyle :: BuildStyle
elabBuildStyle = if SolverPackage UnresolvedPkgLoc -> Bool
forall loc. SolverPackage loc -> Bool
shouldBuildInplaceOnly SolverPackage UnresolvedPkgLoc
pkg
then BuildStyle
BuildInplaceOnly else BuildStyle
BuildAndInstall
elabPackageDbs :: [Maybe PackageDB]
elabPackageDbs = ProjectConfigShared -> [Maybe PackageDB]
projectConfigPackageDBs ProjectConfigShared
sharedPackageConfig
elabBuildPackageDBStack :: PackageDBStack
elabBuildPackageDBStack = PackageDBStack
buildAndRegisterDbs
elabRegisterPackageDBStack :: PackageDBStack
elabRegisterPackageDBStack = PackageDBStack
buildAndRegisterDbs
elabSetupScriptStyle :: SetupScriptStyle
elabSetupScriptStyle = PackageDescription -> SetupScriptStyle
packageSetupScriptStyle PackageDescription
elabPkgDescription
elabSetupScriptCliVersion :: Version
elabSetupScriptCliVersion =
SetupScriptStyle
-> PackageDescription
-> Graph NonSetupLibDepSolverPlanPackage
-> ComponentDeps [SolverId]
-> Version
packageSetupScriptSpecVersion
SetupScriptStyle
elabSetupScriptStyle PackageDescription
elabPkgDescription Graph NonSetupLibDepSolverPlanPackage
libDepGraph ComponentDeps [SolverId]
deps0
elabSetupPackageDBStack :: PackageDBStack
elabSetupPackageDBStack = PackageDBStack
buildAndRegisterDbs
elabInplaceBuildPackageDBStack :: PackageDBStack
elabInplaceBuildPackageDBStack = PackageDBStack
inplacePackageDbs
elabInplaceRegisterPackageDBStack :: PackageDBStack
elabInplaceRegisterPackageDBStack = PackageDBStack
inplacePackageDbs
elabInplaceSetupPackageDBStack :: PackageDBStack
elabInplaceSetupPackageDBStack = PackageDBStack
inplacePackageDbs
buildAndRegisterDbs :: PackageDBStack
buildAndRegisterDbs
| SolverPackage UnresolvedPkgLoc -> Bool
forall loc. SolverPackage loc -> Bool
shouldBuildInplaceOnly SolverPackage UnresolvedPkgLoc
pkg = PackageDBStack
inplacePackageDbs
| Bool
otherwise = PackageDBStack
corePackageDbs
elabPkgDescriptionOverride :: Maybe CabalFileText
elabPkgDescriptionOverride = Maybe CabalFileText
descOverride
elabVanillaLib :: Bool
elabVanillaLib = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
True PackageConfig -> Flag Bool
packageConfigVanillaLib
elabSharedLib :: Bool
elabSharedLib = PackageIdentifier
pkgid PackageIdentifier -> Set PackageIdentifier -> Bool
forall a. Ord a => a -> Set a -> Bool
`Set.member` Set PackageIdentifier
pkgsUseSharedLibrary
elabStaticLib :: Bool
elabStaticLib = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigStaticLib
elabDynExe :: Bool
elabDynExe = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigDynExe
elabFullyStaticExe :: Bool
elabFullyStaticExe = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigFullyStaticExe
elabGHCiLib :: Bool
elabGHCiLib = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigGHCiLib
elabProfExe :: Bool
elabProfExe = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigProf
elabProfLib :: Bool
elabProfLib = PackageIdentifier
pkgid PackageIdentifier -> Set PackageIdentifier -> Bool
forall a. Ord a => a -> Set a -> Bool
`Set.member` Set PackageIdentifier
pkgsUseProfilingLibrary
(ProfDetailLevel
elabProfExeDetail,
ProfDetailLevel
elabProfLibDetail) = PackageIdentifier
-> ProfDetailLevel
-> (PackageConfig -> Flag ProfDetailLevel)
-> (PackageConfig -> Flag ProfDetailLevel)
-> (ProfDetailLevel, ProfDetailLevel)
forall {p} {b}.
Package p =>
p
-> b
-> (PackageConfig -> Flag b)
-> (PackageConfig -> Flag b)
-> (b, b)
perPkgOptionLibExeFlag PackageIdentifier
pkgid ProfDetailLevel
ProfDetailDefault
PackageConfig -> Flag ProfDetailLevel
packageConfigProfDetail
PackageConfig -> Flag ProfDetailLevel
packageConfigProfLibDetail
elabCoverage :: Bool
elabCoverage = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigCoverage
elabOptimization :: OptimisationLevel
elabOptimization = PackageIdentifier
-> OptimisationLevel
-> (PackageConfig -> Flag OptimisationLevel)
-> OptimisationLevel
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid OptimisationLevel
NormalOptimisation PackageConfig -> Flag OptimisationLevel
packageConfigOptimization
elabSplitObjs :: Bool
elabSplitObjs = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigSplitObjs
elabSplitSections :: Bool
elabSplitSections = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigSplitSections
elabStripLibs :: Bool
elabStripLibs = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigStripLibs
elabStripExes :: Bool
elabStripExes = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigStripExes
elabDebugInfo :: DebugInfoLevel
elabDebugInfo = PackageIdentifier
-> DebugInfoLevel
-> (PackageConfig -> Flag DebugInfoLevel)
-> DebugInfoLevel
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid DebugInfoLevel
NoDebugInfo PackageConfig -> Flag DebugInfoLevel
packageConfigDebugInfo
elabDumpBuildInfo :: DumpBuildInfo
elabDumpBuildInfo = PackageIdentifier
-> DumpBuildInfo
-> (PackageConfig -> Flag DumpBuildInfo)
-> DumpBuildInfo
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid DumpBuildInfo
NoDumpBuildInfo PackageConfig -> Flag DumpBuildInfo
packageConfigDumpBuildInfo
elabProgramPaths :: Map String String
elabProgramPaths = [(String, String)] -> Map String String
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList
[ (ConfiguredProgram -> String
programId ConfiguredProgram
prog, ConfiguredProgram -> String
programPath ConfiguredProgram
prog)
| ConfiguredProgram
prog <- ProgramDb -> [ConfiguredProgram]
configuredPrograms ProgramDb
compilerprogdb ]
Map String String -> Map String String -> Map String String
forall a. Semigroup a => a -> a -> a
<> PackageIdentifier
-> (PackageConfig -> MapLast String String) -> Map String String
forall {pkg} {k} {v}.
(Package pkg, Ord k) =>
pkg -> (PackageConfig -> MapLast k v) -> Map k v
perPkgOptionMapLast PackageIdentifier
pkgid PackageConfig -> MapLast String String
packageConfigProgramPaths
elabProgramArgs :: Map String [String]
elabProgramArgs = [(String, [String])] -> Map String [String]
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList
[ (ConfiguredProgram -> String
programId ConfiguredProgram
prog, [String]
args)
| ConfiguredProgram
prog <- ProgramDb -> [ConfiguredProgram]
configuredPrograms ProgramDb
compilerprogdb
, let args :: [String]
args = ConfiguredProgram -> [String]
programOverrideArgs ConfiguredProgram
prog
, Bool -> Bool
not ([String] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [String]
args)
]
Map String [String] -> Map String [String] -> Map String [String]
forall a. Semigroup a => a -> a -> a
<> PackageIdentifier
-> (PackageConfig -> MapMappend String [String])
-> Map String [String]
forall {pkg} {v} {k}.
(Package pkg, Semigroup v, Ord k) =>
pkg -> (PackageConfig -> MapMappend k v) -> Map k v
perPkgOptionMapMappend PackageIdentifier
pkgid PackageConfig -> MapMappend String [String]
packageConfigProgramArgs
elabProgramPathExtra :: [String]
elabProgramPathExtra = PackageIdentifier -> (PackageConfig -> NubList String) -> [String]
forall {pkg} {a}.
(Package pkg, Ord a) =>
pkg -> (PackageConfig -> NubList a) -> [a]
perPkgOptionNubList PackageIdentifier
pkgid PackageConfig -> NubList String
packageConfigProgramPathExtra
elabConfigureScriptArgs :: [String]
elabConfigureScriptArgs = PackageIdentifier -> (PackageConfig -> [String]) -> [String]
forall a. PackageIdentifier -> (PackageConfig -> [a]) -> [a]
perPkgOptionList PackageIdentifier
pkgid PackageConfig -> [String]
packageConfigConfigureArgs
elabExtraLibDirs :: [String]
elabExtraLibDirs = PackageIdentifier -> (PackageConfig -> [String]) -> [String]
forall a. PackageIdentifier -> (PackageConfig -> [a]) -> [a]
perPkgOptionList PackageIdentifier
pkgid PackageConfig -> [String]
packageConfigExtraLibDirs
elabExtraLibDirsStatic :: [String]
elabExtraLibDirsStatic = PackageIdentifier -> (PackageConfig -> [String]) -> [String]
forall a. PackageIdentifier -> (PackageConfig -> [a]) -> [a]
perPkgOptionList PackageIdentifier
pkgid PackageConfig -> [String]
packageConfigExtraLibDirsStatic
elabExtraFrameworkDirs :: [String]
elabExtraFrameworkDirs = PackageIdentifier -> (PackageConfig -> [String]) -> [String]
forall a. PackageIdentifier -> (PackageConfig -> [a]) -> [a]
perPkgOptionList PackageIdentifier
pkgid PackageConfig -> [String]
packageConfigExtraFrameworkDirs
elabExtraIncludeDirs :: [String]
elabExtraIncludeDirs = PackageIdentifier -> (PackageConfig -> [String]) -> [String]
forall a. PackageIdentifier -> (PackageConfig -> [a]) -> [a]
perPkgOptionList PackageIdentifier
pkgid PackageConfig -> [String]
packageConfigExtraIncludeDirs
elabProgPrefix :: Maybe PathTemplate
elabProgPrefix = PackageIdentifier
-> (PackageConfig -> Flag PathTemplate) -> Maybe PathTemplate
forall a. PackageIdentifier -> (PackageConfig -> Flag a) -> Maybe a
perPkgOptionMaybe PackageIdentifier
pkgid PackageConfig -> Flag PathTemplate
packageConfigProgPrefix
elabProgSuffix :: Maybe PathTemplate
elabProgSuffix = PackageIdentifier
-> (PackageConfig -> Flag PathTemplate) -> Maybe PathTemplate
forall a. PackageIdentifier -> (PackageConfig -> Flag a) -> Maybe a
perPkgOptionMaybe PackageIdentifier
pkgid PackageConfig -> Flag PathTemplate
packageConfigProgSuffix
elabHaddockHoogle :: Bool
elabHaddockHoogle = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigHaddockHoogle
elabHaddockHtml :: Bool
elabHaddockHtml = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigHaddockHtml
elabHaddockHtmlLocation :: Maybe String
elabHaddockHtmlLocation = PackageIdentifier -> (PackageConfig -> Flag String) -> Maybe String
forall a. PackageIdentifier -> (PackageConfig -> Flag a) -> Maybe a
perPkgOptionMaybe PackageIdentifier
pkgid PackageConfig -> Flag String
packageConfigHaddockHtmlLocation
elabHaddockForeignLibs :: Bool
elabHaddockForeignLibs = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigHaddockForeignLibs
elabHaddockForHackage :: HaddockTarget
elabHaddockForHackage = PackageIdentifier
-> HaddockTarget
-> (PackageConfig -> Flag HaddockTarget)
-> HaddockTarget
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid HaddockTarget
Cabal.ForDevelopment PackageConfig -> Flag HaddockTarget
packageConfigHaddockForHackage
elabHaddockExecutables :: Bool
elabHaddockExecutables = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigHaddockExecutables
elabHaddockTestSuites :: Bool
elabHaddockTestSuites = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigHaddockTestSuites
elabHaddockBenchmarks :: Bool
elabHaddockBenchmarks = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigHaddockBenchmarks
elabHaddockInternal :: Bool
elabHaddockInternal = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigHaddockInternal
elabHaddockCss :: Maybe String
elabHaddockCss = PackageIdentifier -> (PackageConfig -> Flag String) -> Maybe String
forall a. PackageIdentifier -> (PackageConfig -> Flag a) -> Maybe a
perPkgOptionMaybe PackageIdentifier
pkgid PackageConfig -> Flag String
packageConfigHaddockCss
elabHaddockLinkedSource :: Bool
elabHaddockLinkedSource = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigHaddockLinkedSource
elabHaddockQuickJump :: Bool
elabHaddockQuickJump = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigHaddockQuickJump
elabHaddockHscolourCss :: Maybe String
elabHaddockHscolourCss = PackageIdentifier -> (PackageConfig -> Flag String) -> Maybe String
forall a. PackageIdentifier -> (PackageConfig -> Flag a) -> Maybe a
perPkgOptionMaybe PackageIdentifier
pkgid PackageConfig -> Flag String
packageConfigHaddockHscolourCss
elabHaddockContents :: Maybe PathTemplate
elabHaddockContents = PackageIdentifier
-> (PackageConfig -> Flag PathTemplate) -> Maybe PathTemplate
forall a. PackageIdentifier -> (PackageConfig -> Flag a) -> Maybe a
perPkgOptionMaybe PackageIdentifier
pkgid PackageConfig -> Flag PathTemplate
packageConfigHaddockContents
elabTestMachineLog :: Maybe PathTemplate
elabTestMachineLog = PackageIdentifier
-> (PackageConfig -> Flag PathTemplate) -> Maybe PathTemplate
forall a. PackageIdentifier -> (PackageConfig -> Flag a) -> Maybe a
perPkgOptionMaybe PackageIdentifier
pkgid PackageConfig -> Flag PathTemplate
packageConfigTestMachineLog
elabTestHumanLog :: Maybe PathTemplate
elabTestHumanLog = PackageIdentifier
-> (PackageConfig -> Flag PathTemplate) -> Maybe PathTemplate
forall a. PackageIdentifier -> (PackageConfig -> Flag a) -> Maybe a
perPkgOptionMaybe PackageIdentifier
pkgid PackageConfig -> Flag PathTemplate
packageConfigTestHumanLog
elabTestShowDetails :: Maybe TestShowDetails
elabTestShowDetails = PackageIdentifier
-> (PackageConfig -> Flag TestShowDetails) -> Maybe TestShowDetails
forall a. PackageIdentifier -> (PackageConfig -> Flag a) -> Maybe a
perPkgOptionMaybe PackageIdentifier
pkgid PackageConfig -> Flag TestShowDetails
packageConfigTestShowDetails
elabTestKeepTix :: Bool
elabTestKeepTix = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigTestKeepTix
elabTestWrapper :: Maybe String
elabTestWrapper = PackageIdentifier -> (PackageConfig -> Flag String) -> Maybe String
forall a. PackageIdentifier -> (PackageConfig -> Flag a) -> Maybe a
perPkgOptionMaybe PackageIdentifier
pkgid PackageConfig -> Flag String
packageConfigTestWrapper
elabTestFailWhenNoTestSuites :: Bool
elabTestFailWhenNoTestSuites = PackageIdentifier -> Bool -> (PackageConfig -> Flag Bool) -> Bool
forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid Bool
False PackageConfig -> Flag Bool
packageConfigTestFailWhenNoTestSuites
elabTestTestOptions :: [PathTemplate]
elabTestTestOptions = PackageIdentifier
-> (PackageConfig -> [PathTemplate]) -> [PathTemplate]
forall a. PackageIdentifier -> (PackageConfig -> [a]) -> [a]
perPkgOptionList PackageIdentifier
pkgid PackageConfig -> [PathTemplate]
packageConfigTestTestOptions
elabBenchmarkOptions :: [PathTemplate]
elabBenchmarkOptions = PackageIdentifier
-> (PackageConfig -> [PathTemplate]) -> [PathTemplate]
forall a. PackageIdentifier -> (PackageConfig -> [a]) -> [a]
perPkgOptionList PackageIdentifier
pkgid PackageConfig -> [PathTemplate]
packageConfigBenchmarkOptions
perPkgOptionFlag :: PackageId -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionMaybe :: PackageId -> (PackageConfig -> Flag a) -> Maybe a
perPkgOptionList :: PackageId -> (PackageConfig -> [a]) -> [a]
perPkgOptionFlag :: forall a. PackageIdentifier -> a -> (PackageConfig -> Flag a) -> a
perPkgOptionFlag PackageIdentifier
pkgid a
def PackageConfig -> Flag a
f = a -> Flag a -> a
forall a. a -> Flag a -> a
fromFlagOrDefault a
def (PackageIdentifier -> (PackageConfig -> Flag a) -> Flag a
forall pkg m.
(Package pkg, Monoid m) =>
pkg -> (PackageConfig -> m) -> m
lookupPerPkgOption PackageIdentifier
pkgid PackageConfig -> Flag a
f)
perPkgOptionMaybe :: forall a. PackageIdentifier -> (PackageConfig -> Flag a) -> Maybe a
perPkgOptionMaybe PackageIdentifier
pkgid PackageConfig -> Flag a
f = Flag a -> Maybe a
forall a. Flag a -> Maybe a
flagToMaybe (PackageIdentifier -> (PackageConfig -> Flag a) -> Flag a
forall pkg m.
(Package pkg, Monoid m) =>
pkg -> (PackageConfig -> m) -> m
lookupPerPkgOption PackageIdentifier
pkgid PackageConfig -> Flag a
f)
perPkgOptionList :: forall a. PackageIdentifier -> (PackageConfig -> [a]) -> [a]
perPkgOptionList PackageIdentifier
pkgid PackageConfig -> [a]
f = PackageIdentifier -> (PackageConfig -> [a]) -> [a]
forall pkg m.
(Package pkg, Monoid m) =>
pkg -> (PackageConfig -> m) -> m
lookupPerPkgOption PackageIdentifier
pkgid PackageConfig -> [a]
f
perPkgOptionNubList :: pkg -> (PackageConfig -> NubList a) -> [a]
perPkgOptionNubList pkg
pkgid PackageConfig -> NubList a
f = NubList a -> [a]
forall a. NubList a -> [a]
fromNubList (pkg -> (PackageConfig -> NubList a) -> NubList a
forall pkg m.
(Package pkg, Monoid m) =>
pkg -> (PackageConfig -> m) -> m
lookupPerPkgOption pkg
pkgid PackageConfig -> NubList a
f)
perPkgOptionMapLast :: pkg -> (PackageConfig -> MapLast k v) -> Map k v
perPkgOptionMapLast pkg
pkgid PackageConfig -> MapLast k v
f = MapLast k v -> Map k v
forall k v. MapLast k v -> Map k v
getMapLast (pkg -> (PackageConfig -> MapLast k v) -> MapLast k v
forall pkg m.
(Package pkg, Monoid m) =>
pkg -> (PackageConfig -> m) -> m
lookupPerPkgOption pkg
pkgid PackageConfig -> MapLast k v
f)
perPkgOptionMapMappend :: pkg -> (PackageConfig -> MapMappend k v) -> Map k v
perPkgOptionMapMappend pkg
pkgid PackageConfig -> MapMappend k v
f = MapMappend k v -> Map k v
forall k v. MapMappend k v -> Map k v
getMapMappend (pkg -> (PackageConfig -> MapMappend k v) -> MapMappend k v
forall pkg m.
(Package pkg, Monoid m) =>
pkg -> (PackageConfig -> m) -> m
lookupPerPkgOption pkg
pkgid PackageConfig -> MapMappend k v
f)
perPkgOptionLibExeFlag :: p
-> b
-> (PackageConfig -> Flag b)
-> (PackageConfig -> Flag b)
-> (b, b)
perPkgOptionLibExeFlag p
pkgid b
def PackageConfig -> Flag b
fboth PackageConfig -> Flag b
flib = (b
exe, b
lib)
where
exe :: b
exe = b -> Flag b -> b
forall a. a -> Flag a -> a
fromFlagOrDefault b
def Flag b
bothflag
lib :: b
lib = b -> Flag b -> b
forall a. a -> Flag a -> a
fromFlagOrDefault b
def (Flag b
bothflag Flag b -> Flag b -> Flag b
forall a. Semigroup a => a -> a -> a
<> Flag b
libflag)
bothflag :: Flag b
bothflag = p -> (PackageConfig -> Flag b) -> Flag b
forall pkg m.
(Package pkg, Monoid m) =>
pkg -> (PackageConfig -> m) -> m
lookupPerPkgOption p
pkgid PackageConfig -> Flag b
fboth
libflag :: Flag b
libflag = p -> (PackageConfig -> Flag b) -> Flag b
forall pkg m.
(Package pkg, Monoid m) =>
pkg -> (PackageConfig -> m) -> m
lookupPerPkgOption p
pkgid PackageConfig -> Flag b
flib
lookupPerPkgOption :: (Package pkg, Monoid m)
=> pkg -> (PackageConfig -> m) -> m
lookupPerPkgOption :: forall pkg m.
(Package pkg, Monoid m) =>
pkg -> (PackageConfig -> m) -> m
lookupPerPkgOption pkg
pkg PackageConfig -> m
f =
m
global m -> m -> m
forall a. Monoid a => a -> a -> a
`mappend` m
local m -> m -> m
forall a. Monoid a => a -> a -> a
`mappend` m
perpkg
where
global :: m
global = PackageConfig -> m
f PackageConfig
allPackagesConfig
local :: m
local | pkg -> Bool
forall pkg. Package pkg => pkg -> Bool
isLocalToProject pkg
pkg
= PackageConfig -> m
f PackageConfig
localPackagesConfig
| Bool
otherwise
= m
forall a. Monoid a => a
mempty
perpkg :: m
perpkg = m -> (PackageConfig -> m) -> Maybe PackageConfig -> m
forall b a. b -> (a -> b) -> Maybe a -> b
maybe m
forall a. Monoid a => a
mempty PackageConfig -> m
f (PackageName -> Map PackageName PackageConfig -> Maybe PackageConfig
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup (pkg -> PackageName
forall pkg. Package pkg => pkg -> PackageName
packageName pkg
pkg) Map PackageName PackageConfig
perPackageConfig)
inplacePackageDbs :: PackageDBStack
inplacePackageDbs = PackageDBStack
corePackageDbs
PackageDBStack -> PackageDBStack -> PackageDBStack
forall a. [a] -> [a] -> [a]
++ [ CompilerId -> PackageDB
distPackageDB (Compiler -> CompilerId
compilerId Compiler
compiler) ]
corePackageDbs :: PackageDBStack
corePackageDbs = PackageDBStack -> [Maybe PackageDB] -> PackageDBStack
applyPackageDbFlags (CompilerId -> PackageDBStack
storePackageDBStack (Compiler -> CompilerId
compilerId Compiler
compiler))
(ProjectConfigShared -> [Maybe PackageDB]
projectConfigPackageDBs ProjectConfigShared
sharedPackageConfig)
shouldBuildInplaceOnly :: SolverPackage loc -> Bool
shouldBuildInplaceOnly :: forall loc. SolverPackage loc -> Bool
shouldBuildInplaceOnly SolverPackage loc
pkg = PackageIdentifier -> Set PackageIdentifier -> Bool
forall a. Ord a => a -> Set a -> Bool
Set.member (SolverPackage loc -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId SolverPackage loc
pkg)
Set PackageIdentifier
pkgsToBuildInplaceOnly
pkgsToBuildInplaceOnly :: Set PackageId
pkgsToBuildInplaceOnly :: Set PackageIdentifier
pkgsToBuildInplaceOnly =
[PackageIdentifier] -> Set PackageIdentifier
forall a. Ord a => [a] -> Set a
Set.fromList
([PackageIdentifier] -> Set PackageIdentifier)
-> [PackageIdentifier] -> Set PackageIdentifier
forall a b. (a -> b) -> a -> b
$ (ResolverPackage UnresolvedPkgLoc -> PackageIdentifier)
-> [ResolverPackage UnresolvedPkgLoc] -> [PackageIdentifier]
forall a b. (a -> b) -> [a] -> [b]
map ResolverPackage UnresolvedPkgLoc -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId
([ResolverPackage UnresolvedPkgLoc] -> [PackageIdentifier])
-> [ResolverPackage UnresolvedPkgLoc] -> [PackageIdentifier]
forall a b. (a -> b) -> a -> b
$ SolverInstallPlan
-> [SolverId] -> [ResolverPackage UnresolvedPkgLoc]
SolverInstallPlan.reverseDependencyClosure
SolverInstallPlan
solverPlan
((PackageIdentifier -> SolverId)
-> [PackageIdentifier] -> [SolverId]
forall a b. (a -> b) -> [a] -> [b]
map PackageIdentifier -> SolverId
PlannedId (Set PackageIdentifier -> [PackageIdentifier]
forall a. Set a -> [a]
Set.toList Set PackageIdentifier
pkgsLocalToProject))
isLocalToProject :: Package pkg => pkg -> Bool
isLocalToProject :: forall pkg. Package pkg => pkg -> Bool
isLocalToProject pkg
pkg = PackageIdentifier -> Set PackageIdentifier -> Bool
forall a. Ord a => a -> Set a -> Bool
Set.member (pkg -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId pkg
pkg)
Set PackageIdentifier
pkgsLocalToProject
pkgsLocalToProject :: Set PackageId
pkgsLocalToProject :: Set PackageIdentifier
pkgsLocalToProject =
[PackageIdentifier] -> Set PackageIdentifier
forall a. Ord a => [a] -> Set a
Set.fromList ([Maybe PackageIdentifier] -> [PackageIdentifier]
forall a. [Maybe a] -> [a]
catMaybes ((PackageSpecifier (SourcePackage (PackageLocation loc))
-> Maybe PackageIdentifier)
-> [PackageSpecifier (SourcePackage (PackageLocation loc))]
-> [Maybe PackageIdentifier]
forall a b. (a -> b) -> [a] -> [b]
map PackageSpecifier (SourcePackage (PackageLocation loc))
-> Maybe PackageIdentifier
forall loc.
PackageSpecifier (SourcePackage (PackageLocation loc))
-> Maybe PackageIdentifier
shouldBeLocal [PackageSpecifier (SourcePackage (PackageLocation loc))]
localPackages))
pkgsUseSharedLibrary :: Set PackageId
pkgsUseSharedLibrary :: Set PackageIdentifier
pkgsUseSharedLibrary =
(ResolverPackage UnresolvedPkgLoc -> Bool) -> Set PackageIdentifier
packagesWithLibDepsDownwardClosedProperty ResolverPackage UnresolvedPkgLoc -> Bool
forall pkg. Package pkg => pkg -> Bool
needsSharedLib
where
needsSharedLib :: p -> Bool
needsSharedLib p
pkg =
Bool -> Maybe Bool -> Bool
forall a. a -> Maybe a -> a
fromMaybe Bool
compilerShouldUseSharedLibByDefault
((Bool -> Bool -> Bool) -> Maybe Bool -> Maybe Bool -> Maybe Bool
forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 Bool -> Bool -> Bool
(||) Maybe Bool
pkgSharedLib Maybe Bool
pkgDynExe)
where
pkgid :: PackageIdentifier
pkgid = p -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId p
pkg
pkgSharedLib :: Maybe Bool
pkgSharedLib = PackageIdentifier -> (PackageConfig -> Flag Bool) -> Maybe Bool
forall a. PackageIdentifier -> (PackageConfig -> Flag a) -> Maybe a
perPkgOptionMaybe PackageIdentifier
pkgid PackageConfig -> Flag Bool
packageConfigSharedLib
pkgDynExe :: Maybe Bool
pkgDynExe = PackageIdentifier -> (PackageConfig -> Flag Bool) -> Maybe Bool
forall a. PackageIdentifier -> (PackageConfig -> Flag a) -> Maybe a
perPkgOptionMaybe PackageIdentifier
pkgid PackageConfig -> Flag Bool
packageConfigDynExe
compilerShouldUseSharedLibByDefault :: Bool
compilerShouldUseSharedLibByDefault =
case Compiler -> CompilerFlavor
compilerFlavor Compiler
compiler of
CompilerFlavor
GHC -> Compiler -> Bool
GHC.isDynamic Compiler
compiler
CompilerFlavor
GHCJS -> Compiler -> Bool
GHCJS.isDynamic Compiler
compiler
CompilerFlavor
_ -> Bool
False
pkgsUseProfilingLibrary :: Set PackageId
pkgsUseProfilingLibrary :: Set PackageIdentifier
pkgsUseProfilingLibrary =
(ResolverPackage UnresolvedPkgLoc -> Bool) -> Set PackageIdentifier
packagesWithLibDepsDownwardClosedProperty ResolverPackage UnresolvedPkgLoc -> Bool
forall pkg. Package pkg => pkg -> Bool
needsProfilingLib
where
needsProfilingLib :: p -> Bool
needsProfilingLib p
pkg =
Bool -> Flag Bool -> Bool
forall a. a -> Flag a -> a
fromFlagOrDefault Bool
False (Flag Bool
profBothFlag Flag Bool -> Flag Bool -> Flag Bool
forall a. Semigroup a => a -> a -> a
<> Flag Bool
profLibFlag)
where
pkgid :: PackageIdentifier
pkgid = p -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId p
pkg
profBothFlag :: Flag Bool
profBothFlag = PackageIdentifier -> (PackageConfig -> Flag Bool) -> Flag Bool
forall pkg m.
(Package pkg, Monoid m) =>
pkg -> (PackageConfig -> m) -> m
lookupPerPkgOption PackageIdentifier
pkgid PackageConfig -> Flag Bool
packageConfigProf
profLibFlag :: Flag Bool
profLibFlag = PackageIdentifier -> (PackageConfig -> Flag Bool) -> Flag Bool
forall pkg m.
(Package pkg, Monoid m) =>
pkg -> (PackageConfig -> m) -> m
lookupPerPkgOption PackageIdentifier
pkgid PackageConfig -> Flag Bool
packageConfigProfLib
libDepGraph :: Graph NonSetupLibDepSolverPlanPackage
libDepGraph = [NonSetupLibDepSolverPlanPackage]
-> Graph NonSetupLibDepSolverPlanPackage
forall a. (IsNode a, Show (Key a)) => [a] -> Graph a
Graph.fromDistinctList ([NonSetupLibDepSolverPlanPackage]
-> Graph NonSetupLibDepSolverPlanPackage)
-> [NonSetupLibDepSolverPlanPackage]
-> Graph NonSetupLibDepSolverPlanPackage
forall a b. (a -> b) -> a -> b
$
(ResolverPackage UnresolvedPkgLoc
-> NonSetupLibDepSolverPlanPackage)
-> [ResolverPackage UnresolvedPkgLoc]
-> [NonSetupLibDepSolverPlanPackage]
forall a b. (a -> b) -> [a] -> [b]
map ResolverPackage UnresolvedPkgLoc -> NonSetupLibDepSolverPlanPackage
NonSetupLibDepSolverPlanPackage
(SolverInstallPlan -> [ResolverPackage UnresolvedPkgLoc]
SolverInstallPlan.toList SolverInstallPlan
solverPlan)
packagesWithLibDepsDownwardClosedProperty :: (ResolverPackage UnresolvedPkgLoc -> Bool) -> Set PackageIdentifier
packagesWithLibDepsDownwardClosedProperty ResolverPackage UnresolvedPkgLoc -> Bool
property =
[PackageIdentifier] -> Set PackageIdentifier
forall a. Ord a => [a] -> Set a
Set.fromList
([PackageIdentifier] -> Set PackageIdentifier)
-> (Maybe [NonSetupLibDepSolverPlanPackage] -> [PackageIdentifier])
-> Maybe [NonSetupLibDepSolverPlanPackage]
-> Set PackageIdentifier
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (NonSetupLibDepSolverPlanPackage -> PackageIdentifier)
-> [NonSetupLibDepSolverPlanPackage] -> [PackageIdentifier]
forall a b. (a -> b) -> [a] -> [b]
map NonSetupLibDepSolverPlanPackage -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId
([NonSetupLibDepSolverPlanPackage] -> [PackageIdentifier])
-> (Maybe [NonSetupLibDepSolverPlanPackage]
-> [NonSetupLibDepSolverPlanPackage])
-> Maybe [NonSetupLibDepSolverPlanPackage]
-> [PackageIdentifier]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [NonSetupLibDepSolverPlanPackage]
-> Maybe [NonSetupLibDepSolverPlanPackage]
-> [NonSetupLibDepSolverPlanPackage]
forall a. a -> Maybe a -> a
fromMaybe []
(Maybe [NonSetupLibDepSolverPlanPackage] -> Set PackageIdentifier)
-> Maybe [NonSetupLibDepSolverPlanPackage] -> Set PackageIdentifier
forall a b. (a -> b) -> a -> b
$ Graph NonSetupLibDepSolverPlanPackage
-> [Key NonSetupLibDepSolverPlanPackage]
-> Maybe [NonSetupLibDepSolverPlanPackage]
forall a. Graph a -> [Key a] -> Maybe [a]
Graph.closure
Graph NonSetupLibDepSolverPlanPackage
libDepGraph
[ ResolverPackage UnresolvedPkgLoc
-> Key (ResolverPackage UnresolvedPkgLoc)
forall a. IsNode a => a -> Key a
Graph.nodeKey ResolverPackage UnresolvedPkgLoc
pkg
| ResolverPackage UnresolvedPkgLoc
pkg <- SolverInstallPlan -> [ResolverPackage UnresolvedPkgLoc]
SolverInstallPlan.toList SolverInstallPlan
solverPlan
, ResolverPackage UnresolvedPkgLoc -> Bool
property ResolverPackage UnresolvedPkgLoc
pkg ]
shouldBeLocal :: PackageSpecifier (SourcePackage (PackageLocation loc)) -> Maybe PackageId
shouldBeLocal :: forall loc.
PackageSpecifier (SourcePackage (PackageLocation loc))
-> Maybe PackageIdentifier
shouldBeLocal NamedPackage{} = Maybe PackageIdentifier
forall a. Maybe a
Nothing
shouldBeLocal (SpecificSourcePackage SourcePackage (PackageLocation loc)
pkg) = case SourcePackage (PackageLocation loc) -> PackageLocation loc
forall loc. SourcePackage loc -> loc
srcpkgSource SourcePackage (PackageLocation loc)
pkg of
LocalUnpackedPackage String
_ -> PackageIdentifier -> Maybe PackageIdentifier
forall a. a -> Maybe a
Just (SourcePackage (PackageLocation loc) -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId SourcePackage (PackageLocation loc)
pkg)
PackageLocation loc
_ -> Maybe PackageIdentifier
forall a. Maybe a
Nothing
matchPlanPkg :: (ComponentName -> Bool) -> ElaboratedPlanPackage -> Bool
matchPlanPkg :: (ComponentName -> Bool) -> ElaboratedPlanPackage -> Bool
matchPlanPkg ComponentName -> Bool
p = (InstalledPackageInfo -> Bool)
-> (ElaboratedConfiguredPackage -> Bool)
-> ElaboratedPlanPackage
-> Bool
forall ipkg a srcpkg.
(ipkg -> a) -> (srcpkg -> a) -> GenericPlanPackage ipkg srcpkg -> a
InstallPlan.foldPlanPackage (ComponentName -> Bool
p (ComponentName -> Bool)
-> (InstalledPackageInfo -> ComponentName)
-> InstalledPackageInfo
-> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. InstalledPackageInfo -> ComponentName
ipiComponentName) ((ComponentName -> Bool) -> ElaboratedConfiguredPackage -> Bool
matchElabPkg ComponentName -> Bool
p)
ipiComponentName :: IPI.InstalledPackageInfo -> ComponentName
ipiComponentName :: InstalledPackageInfo -> ComponentName
ipiComponentName = LibraryName -> ComponentName
CLibName (LibraryName -> ComponentName)
-> (InstalledPackageInfo -> LibraryName)
-> InstalledPackageInfo
-> ComponentName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. InstalledPackageInfo -> LibraryName
IPI.sourceLibName
matchElabPkg :: (ComponentName -> Bool) -> ElaboratedConfiguredPackage -> Bool
matchElabPkg :: (ComponentName -> Bool) -> ElaboratedConfiguredPackage -> Bool
matchElabPkg ComponentName -> Bool
p ElaboratedConfiguredPackage
elab =
case ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp ElaboratedConfiguredPackage
elab of
ElabComponent ElaboratedComponent
comp -> Bool -> (ComponentName -> Bool) -> Maybe ComponentName -> Bool
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Bool
False ComponentName -> Bool
p (ElaboratedComponent -> Maybe ComponentName
compComponentName ElaboratedComponent
comp)
ElabPackage ElaboratedPackage
_ ->
(Component -> Bool) -> [Component] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (ComponentName -> Bool
p (ComponentName -> Bool)
-> (Component -> ComponentName) -> Component -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Component -> ComponentName
componentName)
(PackageDescription -> [Component]
Cabal.pkgBuildableComponents (ElaboratedConfiguredPackage -> PackageDescription
elabPkgDescription ElaboratedConfiguredPackage
elab))
mkCCMapping :: ElaboratedPlanPackage
-> (PackageName, Map ComponentName (AnnotatedId ComponentId))
mkCCMapping :: ElaboratedPlanPackage
-> (PackageName,
Map ComponentName (AnnotatedId InstalledPackageId))
mkCCMapping =
(InstalledPackageInfo
-> (PackageName,
Map ComponentName (AnnotatedId InstalledPackageId)))
-> (ElaboratedConfiguredPackage
-> (PackageName,
Map ComponentName (AnnotatedId InstalledPackageId)))
-> ElaboratedPlanPackage
-> (PackageName,
Map ComponentName (AnnotatedId InstalledPackageId))
forall ipkg a srcpkg.
(ipkg -> a) -> (srcpkg -> a) -> GenericPlanPackage ipkg srcpkg -> a
InstallPlan.foldPlanPackage
(\InstalledPackageInfo
ipkg -> (InstalledPackageInfo -> PackageName
forall pkg. Package pkg => pkg -> PackageName
packageName InstalledPackageInfo
ipkg,
ComponentName
-> AnnotatedId InstalledPackageId
-> Map ComponentName (AnnotatedId InstalledPackageId)
forall k a. k -> a -> Map k a
Map.singleton (InstalledPackageInfo -> ComponentName
ipiComponentName InstalledPackageInfo
ipkg)
(AnnotatedId {
ann_id :: InstalledPackageId
ann_id = InstalledPackageInfo -> InstalledPackageId
IPI.installedComponentId InstalledPackageInfo
ipkg,
ann_pid :: PackageIdentifier
ann_pid = InstalledPackageInfo -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId InstalledPackageInfo
ipkg,
ann_cname :: ComponentName
ann_cname = InstalledPackageInfo -> ComponentName
IPI.sourceComponentName InstalledPackageInfo
ipkg
})))
((ElaboratedConfiguredPackage
-> (PackageName,
Map ComponentName (AnnotatedId InstalledPackageId)))
-> ElaboratedPlanPackage
-> (PackageName,
Map ComponentName (AnnotatedId InstalledPackageId)))
-> (ElaboratedConfiguredPackage
-> (PackageName,
Map ComponentName (AnnotatedId InstalledPackageId)))
-> ElaboratedPlanPackage
-> (PackageName,
Map ComponentName (AnnotatedId InstalledPackageId))
forall a b. (a -> b) -> a -> b
$ \ElaboratedConfiguredPackage
elab ->
let mk_aid :: ComponentName -> AnnotatedId InstalledPackageId
mk_aid ComponentName
cn = AnnotatedId {
ann_id :: InstalledPackageId
ann_id = ElaboratedConfiguredPackage -> InstalledPackageId
elabComponentId ElaboratedConfiguredPackage
elab,
ann_pid :: PackageIdentifier
ann_pid = ElaboratedConfiguredPackage -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId ElaboratedConfiguredPackage
elab,
ann_cname :: ComponentName
ann_cname = ComponentName
cn
}
in (ElaboratedConfiguredPackage -> PackageName
forall pkg. Package pkg => pkg -> PackageName
packageName ElaboratedConfiguredPackage
elab,
case ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp ElaboratedConfiguredPackage
elab of
ElabComponent ElaboratedComponent
comp ->
case ElaboratedComponent -> Maybe ComponentName
compComponentName ElaboratedComponent
comp of
Maybe ComponentName
Nothing -> Map ComponentName (AnnotatedId InstalledPackageId)
forall k a. Map k a
Map.empty
Just ComponentName
n -> ComponentName
-> AnnotatedId InstalledPackageId
-> Map ComponentName (AnnotatedId InstalledPackageId)
forall k a. k -> a -> Map k a
Map.singleton ComponentName
n (ComponentName -> AnnotatedId InstalledPackageId
mk_aid ComponentName
n)
ElabPackage ElaboratedPackage
_ ->
[(ComponentName, AnnotatedId InstalledPackageId)]
-> Map ComponentName (AnnotatedId InstalledPackageId)
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList ([(ComponentName, AnnotatedId InstalledPackageId)]
-> Map ComponentName (AnnotatedId InstalledPackageId))
-> [(ComponentName, AnnotatedId InstalledPackageId)]
-> Map ComponentName (AnnotatedId InstalledPackageId)
forall a b. (a -> b) -> a -> b
$
(Component -> (ComponentName, AnnotatedId InstalledPackageId))
-> [Component] -> [(ComponentName, AnnotatedId InstalledPackageId)]
forall a b. (a -> b) -> [a] -> [b]
map (\Component
comp -> let cn :: ComponentName
cn = Component -> ComponentName
Cabal.componentName Component
comp in (ComponentName
cn, ComponentName -> AnnotatedId InstalledPackageId
mk_aid ComponentName
cn))
(PackageDescription -> [Component]
Cabal.pkgBuildableComponents (ElaboratedConfiguredPackage -> PackageDescription
elabPkgDescription ElaboratedConfiguredPackage
elab)))
mkShapeMapping :: ElaboratedPlanPackage
-> (ComponentId, (OpenUnitId, ModuleShape))
mkShapeMapping :: ElaboratedPlanPackage
-> (InstalledPackageId, (OpenUnitId, ModuleShape))
mkShapeMapping ElaboratedPlanPackage
dpkg =
(ElaboratedPlanPackage -> InstalledPackageId
getComponentId ElaboratedPlanPackage
dpkg, (OpenUnitId
indef_uid, ModuleShape
shape))
where
(InstalledPackageId
dcid, ModuleShape
shape) =
(InstalledPackageInfo -> (InstalledPackageId, ModuleShape))
-> (ElaboratedConfiguredPackage
-> (InstalledPackageId, ModuleShape))
-> ElaboratedPlanPackage
-> (InstalledPackageId, ModuleShape)
forall ipkg a srcpkg.
(ipkg -> a) -> (srcpkg -> a) -> GenericPlanPackage ipkg srcpkg -> a
InstallPlan.foldPlanPackage
((InstalledPackageId
-> ModuleShape -> (InstalledPackageId, ModuleShape))
-> (InstalledPackageInfo -> InstalledPackageId)
-> (InstalledPackageInfo -> ModuleShape)
-> InstalledPackageInfo
-> (InstalledPackageId, ModuleShape)
forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 (,) InstalledPackageInfo -> InstalledPackageId
IPI.installedComponentId InstalledPackageInfo -> ModuleShape
shapeInstalledPackage)
((InstalledPackageId
-> ModuleShape -> (InstalledPackageId, ModuleShape))
-> (ElaboratedConfiguredPackage -> InstalledPackageId)
-> (ElaboratedConfiguredPackage -> ModuleShape)
-> ElaboratedConfiguredPackage
-> (InstalledPackageId, ModuleShape)
forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 (,) ElaboratedConfiguredPackage -> InstalledPackageId
elabComponentId ElaboratedConfiguredPackage -> ModuleShape
elabModuleShape)
ElaboratedPlanPackage
dpkg
indef_uid :: OpenUnitId
indef_uid =
InstalledPackageId -> Map ModuleName OpenModule -> OpenUnitId
IndefFullUnitId InstalledPackageId
dcid
([(ModuleName, OpenModule)] -> Map ModuleName OpenModule
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList [ (ModuleName
req, ModuleName -> OpenModule
OpenModuleVar ModuleName
req)
| ModuleName
req <- Set ModuleName -> [ModuleName]
forall a. Set a -> [a]
Set.toList (ModuleShape -> Set ModuleName
modShapeRequires ModuleShape
shape)])
binDirectories
:: DistDirLayout
-> ElaboratedSharedConfig
-> ElaboratedConfiguredPackage
-> [FilePath]
binDirectories :: DistDirLayout
-> ElaboratedSharedConfig
-> ElaboratedConfiguredPackage
-> [String]
binDirectories DistDirLayout
layout ElaboratedSharedConfig
config ElaboratedConfiguredPackage
package = case ElaboratedConfiguredPackage -> BuildStyle
elabBuildStyle ElaboratedConfiguredPackage
package of
BuildStyle
_ | Bool
noExecutables -> []
BuildStyle
BuildAndInstall -> [ElaboratedConfiguredPackage -> String
installedBinDirectory ElaboratedConfiguredPackage
package]
BuildStyle
BuildInplaceOnly -> (String -> String) -> [String] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (String
rootString -> String -> String
</>) ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ case ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp ElaboratedConfiguredPackage
package of
ElabComponent ElaboratedComponent
comp -> case ElaboratedComponent -> Component
compSolverName ElaboratedComponent
comp of
CD.ComponentExe UnqualComponentName
n -> [UnqualComponentName -> String
forall a. Pretty a => a -> String
prettyShow UnqualComponentName
n]
Component
_ -> []
ElabPackage ElaboratedPackage
_ -> (Executable -> String) -> [Executable] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (UnqualComponentName -> String
forall a. Pretty a => a -> String
prettyShow (UnqualComponentName -> String)
-> (Executable -> UnqualComponentName) -> Executable -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Executable -> UnqualComponentName
PD.exeName)
([Executable] -> [String])
-> (ElaboratedConfiguredPackage -> [Executable])
-> ElaboratedConfiguredPackage
-> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PackageDescription -> [Executable]
PD.executables
(PackageDescription -> [Executable])
-> (ElaboratedConfiguredPackage -> PackageDescription)
-> ElaboratedConfiguredPackage
-> [Executable]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ElaboratedConfiguredPackage -> PackageDescription
elabPkgDescription
(ElaboratedConfiguredPackage -> [String])
-> ElaboratedConfiguredPackage -> [String]
forall a b. (a -> b) -> a -> b
$ ElaboratedConfiguredPackage
package
where
noExecutables :: Bool
noExecutables = [Executable] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null ([Executable] -> Bool)
-> (ElaboratedConfiguredPackage -> [Executable])
-> ElaboratedConfiguredPackage
-> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PackageDescription -> [Executable]
PD.executables (PackageDescription -> [Executable])
-> (ElaboratedConfiguredPackage -> PackageDescription)
-> ElaboratedConfiguredPackage
-> [Executable]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ElaboratedConfiguredPackage -> PackageDescription
elabPkgDescription (ElaboratedConfiguredPackage -> Bool)
-> ElaboratedConfiguredPackage -> Bool
forall a b. (a -> b) -> a -> b
$ ElaboratedConfiguredPackage
package
root :: String
root = DistDirLayout -> DistDirParams -> String
distBuildDirectory DistDirLayout
layout (ElaboratedSharedConfig
-> ElaboratedConfiguredPackage -> DistDirParams
elabDistDirParams ElaboratedSharedConfig
config ElaboratedConfiguredPackage
package)
String -> String -> String
</> String
"build"
newtype NonSetupLibDepSolverPlanPackage
= NonSetupLibDepSolverPlanPackage
{ NonSetupLibDepSolverPlanPackage -> ResolverPackage UnresolvedPkgLoc
unNonSetupLibDepSolverPlanPackage :: SolverInstallPlan.SolverPlanPackage }
instance Package NonSetupLibDepSolverPlanPackage where
packageId :: NonSetupLibDepSolverPlanPackage -> PackageIdentifier
packageId = ResolverPackage UnresolvedPkgLoc -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId (ResolverPackage UnresolvedPkgLoc -> PackageIdentifier)
-> (NonSetupLibDepSolverPlanPackage
-> ResolverPackage UnresolvedPkgLoc)
-> NonSetupLibDepSolverPlanPackage
-> PackageIdentifier
forall b c a. (b -> c) -> (a -> b) -> a -> c
. NonSetupLibDepSolverPlanPackage -> ResolverPackage UnresolvedPkgLoc
unNonSetupLibDepSolverPlanPackage
instance IsNode NonSetupLibDepSolverPlanPackage where
type Key NonSetupLibDepSolverPlanPackage = SolverId
nodeKey :: NonSetupLibDepSolverPlanPackage
-> Key NonSetupLibDepSolverPlanPackage
nodeKey = ResolverPackage UnresolvedPkgLoc -> SolverId
ResolverPackage UnresolvedPkgLoc
-> Key (ResolverPackage UnresolvedPkgLoc)
forall a. IsNode a => a -> Key a
nodeKey (ResolverPackage UnresolvedPkgLoc -> SolverId)
-> (NonSetupLibDepSolverPlanPackage
-> ResolverPackage UnresolvedPkgLoc)
-> NonSetupLibDepSolverPlanPackage
-> SolverId
forall b c a. (b -> c) -> (a -> b) -> a -> c
. NonSetupLibDepSolverPlanPackage -> ResolverPackage UnresolvedPkgLoc
unNonSetupLibDepSolverPlanPackage
nodeNeighbors :: NonSetupLibDepSolverPlanPackage
-> [Key NonSetupLibDepSolverPlanPackage]
nodeNeighbors (NonSetupLibDepSolverPlanPackage ResolverPackage UnresolvedPkgLoc
spkg)
= [Key NonSetupLibDepSolverPlanPackage]
-> [Key NonSetupLibDepSolverPlanPackage]
forall a. Ord a => [a] -> [a]
ordNub ([Key NonSetupLibDepSolverPlanPackage]
-> [Key NonSetupLibDepSolverPlanPackage])
-> [Key NonSetupLibDepSolverPlanPackage]
-> [Key NonSetupLibDepSolverPlanPackage]
forall a b. (a -> b) -> a -> b
$ ComponentDeps [SolverId] -> [SolverId]
forall a. Monoid a => ComponentDeps a -> a
CD.nonSetupDeps (ResolverPackage UnresolvedPkgLoc -> ComponentDeps [SolverId]
forall loc. ResolverPackage loc -> ComponentDeps [SolverId]
resolverPackageLibDeps ResolverPackage UnresolvedPkgLoc
spkg)
type InstS = Map UnitId ElaboratedPlanPackage
type InstM a = State InstS a
getComponentId :: ElaboratedPlanPackage
-> ComponentId
getComponentId :: ElaboratedPlanPackage -> InstalledPackageId
getComponentId (InstallPlan.PreExisting InstalledPackageInfo
dipkg) = InstalledPackageInfo -> InstalledPackageId
IPI.installedComponentId InstalledPackageInfo
dipkg
getComponentId (InstallPlan.Configured ElaboratedConfiguredPackage
elab) = ElaboratedConfiguredPackage -> InstalledPackageId
elabComponentId ElaboratedConfiguredPackage
elab
getComponentId (InstallPlan.Installed ElaboratedConfiguredPackage
elab) = ElaboratedConfiguredPackage -> InstalledPackageId
elabComponentId ElaboratedConfiguredPackage
elab
extractElabBuildStyle :: InstallPlan.GenericPlanPackage ipkg ElaboratedConfiguredPackage
-> BuildStyle
(InstallPlan.Configured ElaboratedConfiguredPackage
elab) = ElaboratedConfiguredPackage -> BuildStyle
elabBuildStyle ElaboratedConfiguredPackage
elab
extractElabBuildStyle GenericPlanPackage ipkg ElaboratedConfiguredPackage
_ = BuildStyle
BuildAndInstall
instantiateInstallPlan :: StoreDirLayout -> InstallDirs.InstallDirTemplates -> ElaboratedSharedConfig -> ElaboratedInstallPlan -> ElaboratedInstallPlan
instantiateInstallPlan :: StoreDirLayout
-> InstallDirTemplates
-> ElaboratedSharedConfig
-> ElaboratedInstallPlan
-> ElaboratedInstallPlan
instantiateInstallPlan StoreDirLayout
storeDirLayout InstallDirTemplates
defaultInstallDirs ElaboratedSharedConfig
elaboratedShared ElaboratedInstallPlan
plan =
IndependentGoals
-> Graph ElaboratedPlanPackage -> ElaboratedInstallPlan
forall ipkg srcpkg.
(IsUnit ipkg, IsUnit srcpkg) =>
IndependentGoals
-> Graph (GenericPlanPackage ipkg srcpkg)
-> GenericInstallPlan ipkg srcpkg
InstallPlan.new (Bool -> IndependentGoals
IndependentGoals Bool
False)
([ElaboratedPlanPackage] -> Graph ElaboratedPlanPackage
forall a. (IsNode a, Show (Key a)) => [a] -> Graph a
Graph.fromDistinctList (InstS -> [ElaboratedPlanPackage]
forall k a. Map k a -> [a]
Map.elems InstS
ready_map))
where
pkgs :: [ElaboratedPlanPackage]
pkgs = ElaboratedInstallPlan -> [ElaboratedPlanPackage]
forall ipkg srcpkg.
GenericInstallPlan ipkg srcpkg -> [GenericPlanPackage ipkg srcpkg]
InstallPlan.toList ElaboratedInstallPlan
plan
cmap :: Map InstalledPackageId ElaboratedPlanPackage
cmap = [(InstalledPackageId, ElaboratedPlanPackage)]
-> Map InstalledPackageId ElaboratedPlanPackage
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList [ (ElaboratedPlanPackage -> InstalledPackageId
getComponentId ElaboratedPlanPackage
pkg, ElaboratedPlanPackage
pkg) | ElaboratedPlanPackage
pkg <- [ElaboratedPlanPackage]
pkgs ]
instantiateUnitId :: ComponentId -> Map ModuleName (Module, BuildStyle)
-> InstM (DefUnitId, BuildStyle)
instantiateUnitId :: InstalledPackageId
-> Map ModuleName (Module, BuildStyle)
-> InstM (DefUnitId, BuildStyle)
instantiateUnitId InstalledPackageId
cid Map ModuleName (Module, BuildStyle)
insts = (InstS -> ((DefUnitId, BuildStyle), InstS))
-> InstM (DefUnitId, BuildStyle)
forall a. (InstS -> (a, InstS)) -> StateT InstS Identity a
forall s (m :: * -> *) a. MonadState s m => (s -> (a, s)) -> m a
state ((InstS -> ((DefUnitId, BuildStyle), InstS))
-> InstM (DefUnitId, BuildStyle))
-> (InstS -> ((DefUnitId, BuildStyle), InstS))
-> InstM (DefUnitId, BuildStyle)
forall a b. (a -> b) -> a -> b
$ \InstS
s ->
case UnitId -> InstS -> Maybe ElaboratedPlanPackage
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup UnitId
uid InstS
s of
Maybe ElaboratedPlanPackage
Nothing ->
let (ElaboratedPlanPackage
r, InstS
s') = State InstS ElaboratedPlanPackage
-> InstS -> (ElaboratedPlanPackage, InstS)
forall s a. State s a -> s -> (a, s)
runState (UnitId
-> InstalledPackageId
-> Map ModuleName (Module, BuildStyle)
-> State InstS ElaboratedPlanPackage
instantiateComponent UnitId
uid InstalledPackageId
cid Map ModuleName (Module, BuildStyle)
insts)
(UnitId -> ElaboratedPlanPackage -> InstS -> InstS
forall k a. Ord k => k -> a -> Map k a -> Map k a
Map.insert UnitId
uid ElaboratedPlanPackage
r InstS
s)
in ((DefUnitId
def_uid, ElaboratedPlanPackage -> BuildStyle
forall ipkg.
GenericPlanPackage ipkg ElaboratedConfiguredPackage -> BuildStyle
extractElabBuildStyle ElaboratedPlanPackage
r), UnitId -> ElaboratedPlanPackage -> InstS -> InstS
forall k a. Ord k => k -> a -> Map k a -> Map k a
Map.insert UnitId
uid ElaboratedPlanPackage
r InstS
s')
Just ElaboratedPlanPackage
r -> ((DefUnitId
def_uid, ElaboratedPlanPackage -> BuildStyle
forall ipkg.
GenericPlanPackage ipkg ElaboratedConfiguredPackage -> BuildStyle
extractElabBuildStyle ElaboratedPlanPackage
r), InstS
s)
where
def_uid :: DefUnitId
def_uid = InstalledPackageId -> Map ModuleName Module -> DefUnitId
mkDefUnitId InstalledPackageId
cid (((Module, BuildStyle) -> Module)
-> Map ModuleName (Module, BuildStyle) -> Map ModuleName Module
forall a b. (a -> b) -> Map ModuleName a -> Map ModuleName b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Module, BuildStyle) -> Module
forall a b. (a, b) -> a
fst Map ModuleName (Module, BuildStyle)
insts)
uid :: UnitId
uid = DefUnitId -> UnitId
unDefUnitId DefUnitId
def_uid
instantiateComponent
:: UnitId -> ComponentId -> Map ModuleName (Module, BuildStyle)
-> InstM ElaboratedPlanPackage
instantiateComponent :: UnitId
-> InstalledPackageId
-> Map ModuleName (Module, BuildStyle)
-> State InstS ElaboratedPlanPackage
instantiateComponent UnitId
uid InstalledPackageId
cid Map ModuleName (Module, BuildStyle)
insts
| Just ElaboratedPlanPackage
planpkg <- InstalledPackageId
-> Map InstalledPackageId ElaboratedPlanPackage
-> Maybe ElaboratedPlanPackage
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup InstalledPackageId
cid Map InstalledPackageId ElaboratedPlanPackage
cmap
= case ElaboratedPlanPackage
planpkg of
InstallPlan.Configured (elab0 :: ElaboratedConfiguredPackage
elab0@ElaboratedConfiguredPackage
{ elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp = ElabComponent ElaboratedComponent
comp }) -> do
[DefUnitId]
deps <-
(OpenUnitId -> StateT InstS Identity DefUnitId)
-> [OpenUnitId] -> StateT InstS Identity [DefUnitId]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> [a] -> f [b]
traverse (((DefUnitId, BuildStyle) -> DefUnitId)
-> InstM (DefUnitId, BuildStyle) -> StateT InstS Identity DefUnitId
forall a b.
(a -> b) -> StateT InstS Identity a -> StateT InstS Identity b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (DefUnitId, BuildStyle) -> DefUnitId
forall a b. (a, b) -> a
fst (InstM (DefUnitId, BuildStyle) -> StateT InstS Identity DefUnitId)
-> (OpenUnitId -> InstM (DefUnitId, BuildStyle))
-> OpenUnitId
-> StateT InstS Identity DefUnitId
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Map ModuleName (Module, BuildStyle)
-> OpenUnitId -> InstM (DefUnitId, BuildStyle)
substUnitId Map ModuleName (Module, BuildStyle)
insts) (ElaboratedComponent -> [OpenUnitId]
compLinkedLibDependencies ElaboratedComponent
comp)
let build_style :: BuildStyle
build_style = Map ModuleName BuildStyle -> BuildStyle
forall m. Monoid m => Map ModuleName m -> m
forall (t :: * -> *) m. (Foldable t, Monoid m) => t m -> m
fold (((Module, BuildStyle) -> BuildStyle)
-> Map ModuleName (Module, BuildStyle) -> Map ModuleName BuildStyle
forall a b. (a -> b) -> Map ModuleName a -> Map ModuleName b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Module, BuildStyle) -> BuildStyle
forall a b. (a, b) -> b
snd Map ModuleName (Module, BuildStyle)
insts)
let getDep :: Module -> [DefUnitId]
getDep (Module DefUnitId
dep_uid ModuleName
_) = [DefUnitId
dep_uid]
elab1 :: ElaboratedConfiguredPackage
elab1 = BuildStyle
-> ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage
fixupBuildStyle BuildStyle
build_style (ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage)
-> ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage
forall a b. (a -> b) -> a -> b
$ ElaboratedConfiguredPackage
elab0 {
elabUnitId :: UnitId
elabUnitId = UnitId
uid,
elabComponentId :: InstalledPackageId
elabComponentId = InstalledPackageId
cid,
elabInstantiatedWith :: Map ModuleName Module
elabInstantiatedWith = ((Module, BuildStyle) -> Module)
-> Map ModuleName (Module, BuildStyle) -> Map ModuleName Module
forall a b. (a -> b) -> Map ModuleName a -> Map ModuleName b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Module, BuildStyle) -> Module
forall a b. (a, b) -> a
fst Map ModuleName (Module, BuildStyle)
insts,
elabIsCanonical :: Bool
elabIsCanonical = Map ModuleName Module -> Bool
forall k a. Map k a -> Bool
Map.null (((Module, BuildStyle) -> Module)
-> Map ModuleName (Module, BuildStyle) -> Map ModuleName Module
forall a b. (a -> b) -> Map ModuleName a -> Map ModuleName b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Module, BuildStyle) -> Module
forall a b. (a, b) -> a
fst Map ModuleName (Module, BuildStyle)
insts),
elabPkgOrComp :: ElaboratedPackageOrComponent
elabPkgOrComp = ElaboratedComponent -> ElaboratedPackageOrComponent
ElabComponent ElaboratedComponent
comp {
compOrderLibDependencies :: [UnitId]
compOrderLibDependencies =
(if Map ModuleName (Module, BuildStyle) -> Bool
forall k a. Map k a -> Bool
Map.null Map ModuleName (Module, BuildStyle)
insts then [] else [InstalledPackageId -> UnitId
newSimpleUnitId InstalledPackageId
cid]) [UnitId] -> [UnitId] -> [UnitId]
forall a. [a] -> [a] -> [a]
++
[UnitId] -> [UnitId]
forall a. Ord a => [a] -> [a]
ordNub ((DefUnitId -> UnitId) -> [DefUnitId] -> [UnitId]
forall a b. (a -> b) -> [a] -> [b]
map DefUnitId -> UnitId
unDefUnitId
([DefUnitId]
deps [DefUnitId] -> [DefUnitId] -> [DefUnitId]
forall a. [a] -> [a] -> [a]
++ ((Module, BuildStyle) -> [DefUnitId])
-> [(Module, BuildStyle)] -> [DefUnitId]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap (Module -> [DefUnitId]
getDep (Module -> [DefUnitId])
-> ((Module, BuildStyle) -> Module)
-> (Module, BuildStyle)
-> [DefUnitId]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Module, BuildStyle) -> Module
forall a b. (a, b) -> a
fst) (Map ModuleName (Module, BuildStyle) -> [(Module, BuildStyle)]
forall k a. Map k a -> [a]
Map.elems Map ModuleName (Module, BuildStyle)
insts)))
}
}
elab :: ElaboratedConfiguredPackage
elab = ElaboratedConfiguredPackage
elab1 {
elabInstallDirs :: InstallDirs String
elabInstallDirs = StoreDirLayout
-> InstallDirTemplates
-> ElaboratedSharedConfig
-> ElaboratedConfiguredPackage
-> InstallDirs String
computeInstallDirs StoreDirLayout
storeDirLayout
InstallDirTemplates
defaultInstallDirs
ElaboratedSharedConfig
elaboratedShared
ElaboratedConfiguredPackage
elab1
}
ElaboratedPlanPackage -> State InstS ElaboratedPlanPackage
forall a. a -> StateT InstS Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (ElaboratedPlanPackage -> State InstS ElaboratedPlanPackage)
-> ElaboratedPlanPackage -> State InstS ElaboratedPlanPackage
forall a b. (a -> b) -> a -> b
$ ElaboratedConfiguredPackage -> ElaboratedPlanPackage
forall ipkg srcpkg. srcpkg -> GenericPlanPackage ipkg srcpkg
InstallPlan.Configured ElaboratedConfiguredPackage
elab
ElaboratedPlanPackage
_ -> ElaboratedPlanPackage -> State InstS ElaboratedPlanPackage
forall a. a -> StateT InstS Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return ElaboratedPlanPackage
planpkg
| Bool
otherwise = String -> State InstS ElaboratedPlanPackage
forall a. HasCallStack => String -> a
error (String
"instantiateComponent: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ InstalledPackageId -> String
forall a. Pretty a => a -> String
prettyShow InstalledPackageId
cid)
substUnitId :: Map ModuleName (Module, BuildStyle) -> OpenUnitId -> InstM (DefUnitId, BuildStyle)
substUnitId :: Map ModuleName (Module, BuildStyle)
-> OpenUnitId -> InstM (DefUnitId, BuildStyle)
substUnitId Map ModuleName (Module, BuildStyle)
_ (DefiniteUnitId DefUnitId
uid) =
(DefUnitId, BuildStyle) -> InstM (DefUnitId, BuildStyle)
forall a. a -> StateT InstS Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (DefUnitId
uid, BuildStyle
BuildAndInstall)
substUnitId Map ModuleName (Module, BuildStyle)
subst (IndefFullUnitId InstalledPackageId
cid Map ModuleName OpenModule
insts) = do
Map ModuleName (Module, BuildStyle)
insts' <- Map ModuleName (Module, BuildStyle)
-> Map ModuleName OpenModule
-> InstM (Map ModuleName (Module, BuildStyle))
substSubst Map ModuleName (Module, BuildStyle)
subst Map ModuleName OpenModule
insts
InstalledPackageId
-> Map ModuleName (Module, BuildStyle)
-> InstM (DefUnitId, BuildStyle)
instantiateUnitId InstalledPackageId
cid Map ModuleName (Module, BuildStyle)
insts'
substSubst :: Map ModuleName (Module, BuildStyle)
-> Map ModuleName OpenModule
-> InstM (Map ModuleName (Module, BuildStyle))
substSubst :: Map ModuleName (Module, BuildStyle)
-> Map ModuleName OpenModule
-> InstM (Map ModuleName (Module, BuildStyle))
substSubst Map ModuleName (Module, BuildStyle)
subst Map ModuleName OpenModule
insts = (OpenModule -> StateT InstS Identity (Module, BuildStyle))
-> Map ModuleName OpenModule
-> InstM (Map ModuleName (Module, BuildStyle))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Map ModuleName a -> f (Map ModuleName b)
traverse (Map ModuleName (Module, BuildStyle)
-> OpenModule -> StateT InstS Identity (Module, BuildStyle)
substModule Map ModuleName (Module, BuildStyle)
subst) Map ModuleName OpenModule
insts
substModule :: Map ModuleName (Module, BuildStyle) -> OpenModule -> InstM (Module, BuildStyle)
substModule :: Map ModuleName (Module, BuildStyle)
-> OpenModule -> StateT InstS Identity (Module, BuildStyle)
substModule Map ModuleName (Module, BuildStyle)
subst (OpenModuleVar ModuleName
mod_name)
| Just (Module, BuildStyle)
m <- ModuleName
-> Map ModuleName (Module, BuildStyle)
-> Maybe (Module, BuildStyle)
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup ModuleName
mod_name Map ModuleName (Module, BuildStyle)
subst = (Module, BuildStyle) -> StateT InstS Identity (Module, BuildStyle)
forall a. a -> StateT InstS Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (Module, BuildStyle)
m
| Bool
otherwise = String -> StateT InstS Identity (Module, BuildStyle)
forall a. HasCallStack => String -> a
error String
"substModule: non-closing substitution"
substModule Map ModuleName (Module, BuildStyle)
subst (OpenModule OpenUnitId
uid ModuleName
mod_name) = do
(DefUnitId
uid', BuildStyle
build_style) <- Map ModuleName (Module, BuildStyle)
-> OpenUnitId -> InstM (DefUnitId, BuildStyle)
substUnitId Map ModuleName (Module, BuildStyle)
subst OpenUnitId
uid
(Module, BuildStyle) -> StateT InstS Identity (Module, BuildStyle)
forall a. a -> StateT InstS Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (DefUnitId -> ModuleName -> Module
Module DefUnitId
uid' ModuleName
mod_name, BuildStyle
build_style)
indefiniteUnitId :: ComponentId -> InstM UnitId
indefiniteUnitId :: InstalledPackageId -> InstM UnitId
indefiniteUnitId InstalledPackageId
cid = do
let uid :: UnitId
uid = InstalledPackageId -> UnitId
newSimpleUnitId InstalledPackageId
cid
ElaboratedPlanPackage
r <- UnitId -> InstalledPackageId -> State InstS ElaboratedPlanPackage
indefiniteComponent UnitId
uid InstalledPackageId
cid
(InstS -> (UnitId, InstS)) -> InstM UnitId
forall a. (InstS -> (a, InstS)) -> StateT InstS Identity a
forall s (m :: * -> *) a. MonadState s m => (s -> (a, s)) -> m a
state ((InstS -> (UnitId, InstS)) -> InstM UnitId)
-> (InstS -> (UnitId, InstS)) -> InstM UnitId
forall a b. (a -> b) -> a -> b
$ \InstS
s -> (UnitId
uid, UnitId -> ElaboratedPlanPackage -> InstS -> InstS
forall k a. Ord k => k -> a -> Map k a -> Map k a
Map.insert UnitId
uid ElaboratedPlanPackage
r InstS
s)
indefiniteComponent :: UnitId -> ComponentId -> InstM ElaboratedPlanPackage
indefiniteComponent :: UnitId -> InstalledPackageId -> State InstS ElaboratedPlanPackage
indefiniteComponent UnitId
_uid InstalledPackageId
cid
| Just (InstallPlan.Configured ElaboratedConfiguredPackage
epkg) <- InstalledPackageId
-> Map InstalledPackageId ElaboratedPlanPackage
-> Maybe ElaboratedPlanPackage
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup InstalledPackageId
cid Map InstalledPackageId ElaboratedPlanPackage
cmap
, ElabComponent ElaboratedComponent
elab_comp <- ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp ElaboratedConfiguredPackage
epkg
= do
[OpenUnitId]
new_deps <- [OpenUnitId]
-> (OpenUnitId -> StateT InstS Identity OpenUnitId)
-> StateT InstS Identity [OpenUnitId]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
t a -> (a -> f b) -> f (t b)
for (ElaboratedComponent -> [OpenUnitId]
compLinkedLibDependencies ElaboratedComponent
elab_comp) ((OpenUnitId -> StateT InstS Identity OpenUnitId)
-> StateT InstS Identity [OpenUnitId])
-> (OpenUnitId -> StateT InstS Identity OpenUnitId)
-> StateT InstS Identity [OpenUnitId]
forall a b. (a -> b) -> a -> b
$ \OpenUnitId
uid ->
if Set ModuleName -> Bool
forall a. Set a -> Bool
Set.null (OpenUnitId -> Set ModuleName
openUnitIdFreeHoles OpenUnitId
uid)
then ((DefUnitId, BuildStyle) -> OpenUnitId)
-> InstM (DefUnitId, BuildStyle)
-> StateT InstS Identity OpenUnitId
forall a b.
(a -> b) -> StateT InstS Identity a -> StateT InstS Identity b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (DefUnitId -> OpenUnitId
DefiniteUnitId (DefUnitId -> OpenUnitId)
-> ((DefUnitId, BuildStyle) -> DefUnitId)
-> (DefUnitId, BuildStyle)
-> OpenUnitId
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (DefUnitId, BuildStyle) -> DefUnitId
forall a b. (a, b) -> a
fst) (Map ModuleName (Module, BuildStyle)
-> OpenUnitId -> InstM (DefUnitId, BuildStyle)
substUnitId Map ModuleName (Module, BuildStyle)
forall k a. Map k a
Map.empty OpenUnitId
uid)
else OpenUnitId -> StateT InstS Identity OpenUnitId
forall a. a -> StateT InstS Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return OpenUnitId
uid
ElaboratedPlanPackage -> State InstS ElaboratedPlanPackage
forall a. a -> StateT InstS Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (ElaboratedPlanPackage -> State InstS ElaboratedPlanPackage)
-> (ElaboratedConfiguredPackage -> ElaboratedPlanPackage)
-> ElaboratedConfiguredPackage
-> State InstS ElaboratedPlanPackage
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ElaboratedConfiguredPackage -> ElaboratedPlanPackage
forall ipkg srcpkg. srcpkg -> GenericPlanPackage ipkg srcpkg
InstallPlan.Configured (ElaboratedConfiguredPackage -> State InstS ElaboratedPlanPackage)
-> ElaboratedConfiguredPackage -> State InstS ElaboratedPlanPackage
forall a b. (a -> b) -> a -> b
$ ElaboratedConfiguredPackage
epkg {
elabPkgOrComp :: ElaboratedPackageOrComponent
elabPkgOrComp = ElaboratedComponent -> ElaboratedPackageOrComponent
ElabComponent ElaboratedComponent
elab_comp {
compLinkedLibDependencies :: [OpenUnitId]
compLinkedLibDependencies = [OpenUnitId]
new_deps,
compOrderLibDependencies :: [UnitId]
compOrderLibDependencies =
[UnitId] -> [UnitId]
forall a. Ord a => [a] -> [a]
ordNub ([UnitId] -> [UnitId]) -> [UnitId] -> [UnitId]
forall a b. (a -> b) -> a -> b
$ ElaboratedComponent -> [UnitId]
compOrderLibDependencies ElaboratedComponent
elab_comp [UnitId] -> [UnitId] -> [UnitId]
forall a. [a] -> [a] -> [a]
++
[DefUnitId -> UnitId
unDefUnitId DefUnitId
d | DefiniteUnitId DefUnitId
d <- [OpenUnitId]
new_deps]
}
}
| Just ElaboratedPlanPackage
planpkg <- InstalledPackageId
-> Map InstalledPackageId ElaboratedPlanPackage
-> Maybe ElaboratedPlanPackage
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup InstalledPackageId
cid Map InstalledPackageId ElaboratedPlanPackage
cmap
= ElaboratedPlanPackage -> State InstS ElaboratedPlanPackage
forall a. a -> StateT InstS Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return ElaboratedPlanPackage
planpkg
| Bool
otherwise = String -> State InstS ElaboratedPlanPackage
forall a. HasCallStack => String -> a
error (String
"indefiniteComponent: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ InstalledPackageId -> String
forall a. Pretty a => a -> String
prettyShow InstalledPackageId
cid)
fixupBuildStyle :: BuildStyle
-> ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage
fixupBuildStyle BuildStyle
BuildAndInstall ElaboratedConfiguredPackage
elab = ElaboratedConfiguredPackage
elab
fixupBuildStyle BuildStyle
_ (elab :: ElaboratedConfiguredPackage
elab@ElaboratedConfiguredPackage { elabBuildStyle :: ElaboratedConfiguredPackage -> BuildStyle
elabBuildStyle = BuildStyle
BuildInplaceOnly }) = ElaboratedConfiguredPackage
elab
fixupBuildStyle BuildStyle
BuildInplaceOnly ElaboratedConfiguredPackage
elab = ElaboratedConfiguredPackage
elab {
elabBuildStyle :: BuildStyle
elabBuildStyle = BuildStyle
BuildInplaceOnly,
elabBuildPackageDBStack :: PackageDBStack
elabBuildPackageDBStack = ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceBuildPackageDBStack ElaboratedConfiguredPackage
elab,
elabRegisterPackageDBStack :: PackageDBStack
elabRegisterPackageDBStack = ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceRegisterPackageDBStack ElaboratedConfiguredPackage
elab,
elabSetupPackageDBStack :: PackageDBStack
elabSetupPackageDBStack = ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceSetupPackageDBStack ElaboratedConfiguredPackage
elab
}
ready_map :: InstS
ready_map = State InstS () -> InstS -> InstS
forall s a. State s a -> s -> s
execState State InstS ()
work InstS
forall k a. Map k a
Map.empty
work :: State InstS ()
work = [ElaboratedPlanPackage]
-> (ElaboratedPlanPackage -> State InstS ()) -> State InstS ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ [ElaboratedPlanPackage]
pkgs ((ElaboratedPlanPackage -> State InstS ()) -> State InstS ())
-> (ElaboratedPlanPackage -> State InstS ()) -> State InstS ()
forall a b. (a -> b) -> a -> b
$ \ElaboratedPlanPackage
pkg ->
case ElaboratedPlanPackage
pkg of
InstallPlan.Configured ElaboratedConfiguredPackage
elab
| Bool -> Bool
not (Map ModuleName OpenModule -> Bool
forall k a. Map k a -> Bool
Map.null (ElaboratedConfiguredPackage -> Map ModuleName OpenModule
elabLinkedInstantiatedWith ElaboratedConfiguredPackage
elab))
-> InstalledPackageId -> InstM UnitId
indefiniteUnitId (ElaboratedConfiguredPackage -> InstalledPackageId
elabComponentId ElaboratedConfiguredPackage
elab)
InstM UnitId -> State InstS () -> State InstS ()
forall a b.
StateT InstS Identity a
-> StateT InstS Identity b -> StateT InstS Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> () -> State InstS ()
forall a. a -> StateT InstS Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
ElaboratedPlanPackage
_ -> InstalledPackageId
-> Map ModuleName (Module, BuildStyle)
-> InstM (DefUnitId, BuildStyle)
instantiateUnitId (ElaboratedPlanPackage -> InstalledPackageId
getComponentId ElaboratedPlanPackage
pkg) Map ModuleName (Module, BuildStyle)
forall k a. Map k a
Map.empty
InstM (DefUnitId, BuildStyle) -> State InstS () -> State InstS ()
forall a b.
StateT InstS Identity a
-> StateT InstS Identity b -> StateT InstS Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> () -> State InstS ()
forall a. a -> StateT InstS Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
data AvailableTarget k = AvailableTarget {
forall k. AvailableTarget k -> PackageIdentifier
availableTargetPackageId :: PackageId,
forall k. AvailableTarget k -> ComponentName
availableTargetComponentName :: ComponentName,
forall k. AvailableTarget k -> AvailableTargetStatus k
availableTargetStatus :: AvailableTargetStatus k,
forall k. AvailableTarget k -> Bool
availableTargetLocalToProject :: Bool
}
deriving (AvailableTarget k -> AvailableTarget k -> Bool
(AvailableTarget k -> AvailableTarget k -> Bool)
-> (AvailableTarget k -> AvailableTarget k -> Bool)
-> Eq (AvailableTarget k)
forall k. Eq k => AvailableTarget k -> AvailableTarget k -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall k. Eq k => AvailableTarget k -> AvailableTarget k -> Bool
== :: AvailableTarget k -> AvailableTarget k -> Bool
$c/= :: forall k. Eq k => AvailableTarget k -> AvailableTarget k -> Bool
/= :: AvailableTarget k -> AvailableTarget k -> Bool
Eq, Int -> AvailableTarget k -> String -> String
[AvailableTarget k] -> String -> String
AvailableTarget k -> String
(Int -> AvailableTarget k -> String -> String)
-> (AvailableTarget k -> String)
-> ([AvailableTarget k] -> String -> String)
-> Show (AvailableTarget k)
forall k. Show k => Int -> AvailableTarget k -> String -> String
forall k. Show k => [AvailableTarget k] -> String -> String
forall k. Show k => AvailableTarget k -> String
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
$cshowsPrec :: forall k. Show k => Int -> AvailableTarget k -> String -> String
showsPrec :: Int -> AvailableTarget k -> String -> String
$cshow :: forall k. Show k => AvailableTarget k -> String
show :: AvailableTarget k -> String
$cshowList :: forall k. Show k => [AvailableTarget k] -> String -> String
showList :: [AvailableTarget k] -> String -> String
Show, (forall a b. (a -> b) -> AvailableTarget a -> AvailableTarget b)
-> (forall a b. a -> AvailableTarget b -> AvailableTarget a)
-> Functor AvailableTarget
forall a b. a -> AvailableTarget b -> AvailableTarget a
forall a b. (a -> b) -> AvailableTarget a -> AvailableTarget b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> AvailableTarget a -> AvailableTarget b
fmap :: forall a b. (a -> b) -> AvailableTarget a -> AvailableTarget b
$c<$ :: forall a b. a -> AvailableTarget b -> AvailableTarget a
<$ :: forall a b. a -> AvailableTarget b -> AvailableTarget a
Functor)
data AvailableTargetStatus k =
TargetDisabledByUser
| TargetDisabledBySolver
| TargetNotBuildable
| TargetNotLocal
| TargetBuildable k TargetRequested
deriving (AvailableTargetStatus k -> AvailableTargetStatus k -> Bool
(AvailableTargetStatus k -> AvailableTargetStatus k -> Bool)
-> (AvailableTargetStatus k -> AvailableTargetStatus k -> Bool)
-> Eq (AvailableTargetStatus k)
forall k.
Eq k =>
AvailableTargetStatus k -> AvailableTargetStatus k -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall k.
Eq k =>
AvailableTargetStatus k -> AvailableTargetStatus k -> Bool
== :: AvailableTargetStatus k -> AvailableTargetStatus k -> Bool
$c/= :: forall k.
Eq k =>
AvailableTargetStatus k -> AvailableTargetStatus k -> Bool
/= :: AvailableTargetStatus k -> AvailableTargetStatus k -> Bool
Eq, Eq (AvailableTargetStatus k)
Eq (AvailableTargetStatus k)
-> (AvailableTargetStatus k -> AvailableTargetStatus k -> Ordering)
-> (AvailableTargetStatus k -> AvailableTargetStatus k -> Bool)
-> (AvailableTargetStatus k -> AvailableTargetStatus k -> Bool)
-> (AvailableTargetStatus k -> AvailableTargetStatus k -> Bool)
-> (AvailableTargetStatus k -> AvailableTargetStatus k -> Bool)
-> (AvailableTargetStatus k
-> AvailableTargetStatus k -> AvailableTargetStatus k)
-> (AvailableTargetStatus k
-> AvailableTargetStatus k -> AvailableTargetStatus k)
-> Ord (AvailableTargetStatus k)
AvailableTargetStatus k -> AvailableTargetStatus k -> Bool
AvailableTargetStatus k -> AvailableTargetStatus k -> Ordering
AvailableTargetStatus k
-> AvailableTargetStatus k -> AvailableTargetStatus k
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall {k}. Ord k => Eq (AvailableTargetStatus k)
forall k.
Ord k =>
AvailableTargetStatus k -> AvailableTargetStatus k -> Bool
forall k.
Ord k =>
AvailableTargetStatus k -> AvailableTargetStatus k -> Ordering
forall k.
Ord k =>
AvailableTargetStatus k
-> AvailableTargetStatus k -> AvailableTargetStatus k
$ccompare :: forall k.
Ord k =>
AvailableTargetStatus k -> AvailableTargetStatus k -> Ordering
compare :: AvailableTargetStatus k -> AvailableTargetStatus k -> Ordering
$c< :: forall k.
Ord k =>
AvailableTargetStatus k -> AvailableTargetStatus k -> Bool
< :: AvailableTargetStatus k -> AvailableTargetStatus k -> Bool
$c<= :: forall k.
Ord k =>
AvailableTargetStatus k -> AvailableTargetStatus k -> Bool
<= :: AvailableTargetStatus k -> AvailableTargetStatus k -> Bool
$c> :: forall k.
Ord k =>
AvailableTargetStatus k -> AvailableTargetStatus k -> Bool
> :: AvailableTargetStatus k -> AvailableTargetStatus k -> Bool
$c>= :: forall k.
Ord k =>
AvailableTargetStatus k -> AvailableTargetStatus k -> Bool
>= :: AvailableTargetStatus k -> AvailableTargetStatus k -> Bool
$cmax :: forall k.
Ord k =>
AvailableTargetStatus k
-> AvailableTargetStatus k -> AvailableTargetStatus k
max :: AvailableTargetStatus k
-> AvailableTargetStatus k -> AvailableTargetStatus k
$cmin :: forall k.
Ord k =>
AvailableTargetStatus k
-> AvailableTargetStatus k -> AvailableTargetStatus k
min :: AvailableTargetStatus k
-> AvailableTargetStatus k -> AvailableTargetStatus k
Ord, Int -> AvailableTargetStatus k -> String -> String
[AvailableTargetStatus k] -> String -> String
AvailableTargetStatus k -> String
(Int -> AvailableTargetStatus k -> String -> String)
-> (AvailableTargetStatus k -> String)
-> ([AvailableTargetStatus k] -> String -> String)
-> Show (AvailableTargetStatus k)
forall k.
Show k =>
Int -> AvailableTargetStatus k -> String -> String
forall k. Show k => [AvailableTargetStatus k] -> String -> String
forall k. Show k => AvailableTargetStatus k -> String
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
$cshowsPrec :: forall k.
Show k =>
Int -> AvailableTargetStatus k -> String -> String
showsPrec :: Int -> AvailableTargetStatus k -> String -> String
$cshow :: forall k. Show k => AvailableTargetStatus k -> String
show :: AvailableTargetStatus k -> String
$cshowList :: forall k. Show k => [AvailableTargetStatus k] -> String -> String
showList :: [AvailableTargetStatus k] -> String -> String
Show, (forall a b.
(a -> b) -> AvailableTargetStatus a -> AvailableTargetStatus b)
-> (forall a b.
a -> AvailableTargetStatus b -> AvailableTargetStatus a)
-> Functor AvailableTargetStatus
forall a b. a -> AvailableTargetStatus b -> AvailableTargetStatus a
forall a b.
(a -> b) -> AvailableTargetStatus a -> AvailableTargetStatus b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b.
(a -> b) -> AvailableTargetStatus a -> AvailableTargetStatus b
fmap :: forall a b.
(a -> b) -> AvailableTargetStatus a -> AvailableTargetStatus b
$c<$ :: forall a b. a -> AvailableTargetStatus b -> AvailableTargetStatus a
<$ :: forall a b. a -> AvailableTargetStatus b -> AvailableTargetStatus a
Functor)
data TargetRequested =
TargetRequestedByDefault
| TargetNotRequestedByDefault
deriving (TargetRequested -> TargetRequested -> Bool
(TargetRequested -> TargetRequested -> Bool)
-> (TargetRequested -> TargetRequested -> Bool)
-> Eq TargetRequested
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TargetRequested -> TargetRequested -> Bool
== :: TargetRequested -> TargetRequested -> Bool
$c/= :: TargetRequested -> TargetRequested -> Bool
/= :: TargetRequested -> TargetRequested -> Bool
Eq, Eq TargetRequested
Eq TargetRequested
-> (TargetRequested -> TargetRequested -> Ordering)
-> (TargetRequested -> TargetRequested -> Bool)
-> (TargetRequested -> TargetRequested -> Bool)
-> (TargetRequested -> TargetRequested -> Bool)
-> (TargetRequested -> TargetRequested -> Bool)
-> (TargetRequested -> TargetRequested -> TargetRequested)
-> (TargetRequested -> TargetRequested -> TargetRequested)
-> Ord TargetRequested
TargetRequested -> TargetRequested -> Bool
TargetRequested -> TargetRequested -> Ordering
TargetRequested -> TargetRequested -> TargetRequested
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: TargetRequested -> TargetRequested -> Ordering
compare :: TargetRequested -> TargetRequested -> Ordering
$c< :: TargetRequested -> TargetRequested -> Bool
< :: TargetRequested -> TargetRequested -> Bool
$c<= :: TargetRequested -> TargetRequested -> Bool
<= :: TargetRequested -> TargetRequested -> Bool
$c> :: TargetRequested -> TargetRequested -> Bool
> :: TargetRequested -> TargetRequested -> Bool
$c>= :: TargetRequested -> TargetRequested -> Bool
>= :: TargetRequested -> TargetRequested -> Bool
$cmax :: TargetRequested -> TargetRequested -> TargetRequested
max :: TargetRequested -> TargetRequested -> TargetRequested
$cmin :: TargetRequested -> TargetRequested -> TargetRequested
min :: TargetRequested -> TargetRequested -> TargetRequested
Ord, Int -> TargetRequested -> String -> String
[TargetRequested] -> String -> String
TargetRequested -> String
(Int -> TargetRequested -> String -> String)
-> (TargetRequested -> String)
-> ([TargetRequested] -> String -> String)
-> Show TargetRequested
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
$cshowsPrec :: Int -> TargetRequested -> String -> String
showsPrec :: Int -> TargetRequested -> String -> String
$cshow :: TargetRequested -> String
show :: TargetRequested -> String
$cshowList :: [TargetRequested] -> String -> String
showList :: [TargetRequested] -> String -> String
Show)
availableTargets :: ElaboratedInstallPlan
-> Map (PackageId, ComponentName)
[AvailableTarget (UnitId, ComponentName)]
availableTargets :: ElaboratedInstallPlan
-> Map
(PackageIdentifier, ComponentName)
[AvailableTarget (UnitId, ComponentName)]
availableTargets ElaboratedInstallPlan
installPlan =
let rs :: [(PackageIdentifier, ComponentName, Bool,
AvailableTarget (UnitId, ComponentName))]
rs = [ (PackageIdentifier
pkgid, ComponentName
cname, Bool
fake, AvailableTarget (UnitId, ComponentName)
target)
| ElaboratedPlanPackage
pkg <- ElaboratedInstallPlan -> [ElaboratedPlanPackage]
forall ipkg srcpkg.
GenericInstallPlan ipkg srcpkg -> [GenericPlanPackage ipkg srcpkg]
InstallPlan.toList ElaboratedInstallPlan
installPlan
, (PackageIdentifier
pkgid, ComponentName
cname, Bool
fake, AvailableTarget (UnitId, ComponentName)
target) <- case ElaboratedPlanPackage
pkg of
InstallPlan.PreExisting InstalledPackageInfo
ipkg -> InstalledPackageInfo
-> [(PackageIdentifier, ComponentName, Bool,
AvailableTarget (UnitId, ComponentName))]
availableInstalledTargets InstalledPackageInfo
ipkg
InstallPlan.Installed ElaboratedConfiguredPackage
elab -> ElaboratedConfiguredPackage
-> [(PackageIdentifier, ComponentName, Bool,
AvailableTarget (UnitId, ComponentName))]
availableSourceTargets ElaboratedConfiguredPackage
elab
InstallPlan.Configured ElaboratedConfiguredPackage
elab -> ElaboratedConfiguredPackage
-> [(PackageIdentifier, ComponentName, Bool,
AvailableTarget (UnitId, ComponentName))]
availableSourceTargets ElaboratedConfiguredPackage
elab
]
in Map
(PackageIdentifier, ComponentName)
[AvailableTarget (UnitId, ComponentName)]
-> Map
(PackageIdentifier, ComponentName)
[AvailableTarget (UnitId, ComponentName)]
-> Map
(PackageIdentifier, ComponentName)
[AvailableTarget (UnitId, ComponentName)]
forall k a. Ord k => Map k a -> Map k a -> Map k a
Map.union
(([AvailableTarget (UnitId, ComponentName)]
-> [AvailableTarget (UnitId, ComponentName)]
-> [AvailableTarget (UnitId, ComponentName)])
-> [((PackageIdentifier, ComponentName),
[AvailableTarget (UnitId, ComponentName)])]
-> Map
(PackageIdentifier, ComponentName)
[AvailableTarget (UnitId, ComponentName)]
forall k a. Ord k => (a -> a -> a) -> [(k, a)] -> Map k a
Map.fromListWith [AvailableTarget (UnitId, ComponentName)]
-> [AvailableTarget (UnitId, ComponentName)]
-> [AvailableTarget (UnitId, ComponentName)]
forall a. [a] -> [a] -> [a]
(++)
[ ((PackageIdentifier
pkgid, ComponentName
cname), [AvailableTarget (UnitId, ComponentName)
target])
| (PackageIdentifier
pkgid, ComponentName
cname, Bool
fake, AvailableTarget (UnitId, ComponentName)
target) <- [(PackageIdentifier, ComponentName, Bool,
AvailableTarget (UnitId, ComponentName))]
rs, Bool -> Bool
not Bool
fake])
([((PackageIdentifier, ComponentName),
[AvailableTarget (UnitId, ComponentName)])]
-> Map
(PackageIdentifier, ComponentName)
[AvailableTarget (UnitId, ComponentName)]
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList
[ ((PackageIdentifier
pkgid, ComponentName
cname), [AvailableTarget (UnitId, ComponentName)
target])
| (PackageIdentifier
pkgid, ComponentName
cname, Bool
fake, AvailableTarget (UnitId, ComponentName)
target) <- [(PackageIdentifier, ComponentName, Bool,
AvailableTarget (UnitId, ComponentName))]
rs, Bool
fake])
availableInstalledTargets :: IPI.InstalledPackageInfo
-> [(PackageId, ComponentName, Bool,
AvailableTarget (UnitId, ComponentName))]
availableInstalledTargets :: InstalledPackageInfo
-> [(PackageIdentifier, ComponentName, Bool,
AvailableTarget (UnitId, ComponentName))]
availableInstalledTargets InstalledPackageInfo
ipkg =
let unitid :: UnitId
unitid = InstalledPackageInfo -> UnitId
forall pkg. HasUnitId pkg => pkg -> UnitId
installedUnitId InstalledPackageInfo
ipkg
cname :: ComponentName
cname = LibraryName -> ComponentName
CLibName LibraryName
LMainLibName
status :: AvailableTargetStatus (UnitId, ComponentName)
status = (UnitId, ComponentName)
-> TargetRequested -> AvailableTargetStatus (UnitId, ComponentName)
forall k. k -> TargetRequested -> AvailableTargetStatus k
TargetBuildable (UnitId
unitid, ComponentName
cname) TargetRequested
TargetRequestedByDefault
target :: AvailableTarget (UnitId, ComponentName)
target = PackageIdentifier
-> ComponentName
-> AvailableTargetStatus (UnitId, ComponentName)
-> Bool
-> AvailableTarget (UnitId, ComponentName)
forall k.
PackageIdentifier
-> ComponentName
-> AvailableTargetStatus k
-> Bool
-> AvailableTarget k
AvailableTarget (InstalledPackageInfo -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId InstalledPackageInfo
ipkg) ComponentName
cname AvailableTargetStatus (UnitId, ComponentName)
status Bool
False
fake :: Bool
fake = Bool
False
in [(InstalledPackageInfo -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId InstalledPackageInfo
ipkg, ComponentName
cname, Bool
fake, AvailableTarget (UnitId, ComponentName)
target)]
availableSourceTargets :: ElaboratedConfiguredPackage
-> [(PackageId, ComponentName, Bool,
AvailableTarget (UnitId, ComponentName))]
availableSourceTargets :: ElaboratedConfiguredPackage
-> [(PackageIdentifier, ComponentName, Bool,
AvailableTarget (UnitId, ComponentName))]
availableSourceTargets ElaboratedConfiguredPackage
elab =
[ (ElaboratedConfiguredPackage -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId ElaboratedConfiguredPackage
elab, ComponentName
cname, Bool
fake, AvailableTarget (UnitId, ComponentName)
target)
| Component
component <- PackageDescription -> [Component]
pkgComponents (ElaboratedConfiguredPackage -> PackageDescription
elabPkgDescription ElaboratedConfiguredPackage
elab)
, let cname :: ComponentName
cname = Component -> ComponentName
componentName Component
component
status :: AvailableTargetStatus (UnitId, ComponentName)
status = Component -> AvailableTargetStatus (UnitId, ComponentName)
componentAvailableTargetStatus Component
component
target :: AvailableTarget (UnitId, ComponentName)
target = AvailableTarget {
availableTargetPackageId :: PackageIdentifier
availableTargetPackageId = ElaboratedConfiguredPackage -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId ElaboratedConfiguredPackage
elab,
availableTargetComponentName :: ComponentName
availableTargetComponentName = ComponentName
cname,
availableTargetStatus :: AvailableTargetStatus (UnitId, ComponentName)
availableTargetStatus = AvailableTargetStatus (UnitId, ComponentName)
status,
availableTargetLocalToProject :: Bool
availableTargetLocalToProject = ElaboratedConfiguredPackage -> Bool
elabLocalToProject ElaboratedConfiguredPackage
elab
}
fake :: Bool
fake = ComponentName -> Bool
isFakeTarget ComponentName
cname
, ElaboratedConfiguredPackage -> Bool
elabIsCanonical ElaboratedConfiguredPackage
elab
, case AvailableTargetStatus (UnitId, ComponentName)
status of
TargetBuildable{} | Bool
fake -> Bool
False
AvailableTargetStatus (UnitId, ComponentName)
_ -> Bool
True
]
where
isFakeTarget :: ComponentName -> Bool
isFakeTarget ComponentName
cname =
case ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp ElaboratedConfiguredPackage
elab of
ElabPackage ElaboratedPackage
_ -> Bool
False
ElabComponent ElaboratedComponent
elabComponent -> ElaboratedComponent -> Maybe ComponentName
compComponentName ElaboratedComponent
elabComponent
Maybe ComponentName -> Maybe ComponentName -> Bool
forall a. Eq a => a -> a -> Bool
/= ComponentName -> Maybe ComponentName
forall a. a -> Maybe a
Just ComponentName
cname
componentAvailableTargetStatus
:: Component -> AvailableTargetStatus (UnitId, ComponentName)
componentAvailableTargetStatus :: Component -> AvailableTargetStatus (UnitId, ComponentName)
componentAvailableTargetStatus Component
component =
case Component -> Maybe OptionalStanza
componentOptionalStanza (Component -> Maybe OptionalStanza)
-> Component -> Maybe OptionalStanza
forall a b. (a -> b) -> a -> b
$ ComponentName -> Component
CD.componentNameToComponent ComponentName
cname of
Maybe OptionalStanza
Nothing
| Bool -> Bool
not Bool
buildable -> AvailableTargetStatus (UnitId, ComponentName)
forall k. AvailableTargetStatus k
TargetNotBuildable
| Bool
otherwise -> (UnitId, ComponentName)
-> TargetRequested -> AvailableTargetStatus (UnitId, ComponentName)
forall k. k -> TargetRequested -> AvailableTargetStatus k
TargetBuildable (ElaboratedConfiguredPackage -> UnitId
elabUnitId ElaboratedConfiguredPackage
elab, ComponentName
cname)
TargetRequested
TargetRequestedByDefault
Just OptionalStanza
stanza ->
case (OptionalStanza -> OptionalStanzaMap (Maybe Bool) -> Maybe Bool
forall a. OptionalStanza -> OptionalStanzaMap a -> a
optStanzaLookup OptionalStanza
stanza (ElaboratedConfiguredPackage -> OptionalStanzaMap (Maybe Bool)
elabStanzasRequested ElaboratedConfiguredPackage
elab),
OptionalStanza -> OptionalStanzaSet -> Bool
optStanzaSetMember OptionalStanza
stanza (ElaboratedConfiguredPackage -> OptionalStanzaSet
elabStanzasAvailable ElaboratedConfiguredPackage
elab)) of
(Maybe Bool, Bool)
_ | Bool -> Bool
not Bool
withinPlan -> AvailableTargetStatus (UnitId, ComponentName)
forall k. AvailableTargetStatus k
TargetNotLocal
(Just Bool
False, Bool
_) -> AvailableTargetStatus (UnitId, ComponentName)
forall k. AvailableTargetStatus k
TargetDisabledByUser
(Maybe Bool
Nothing, Bool
False) -> AvailableTargetStatus (UnitId, ComponentName)
forall k. AvailableTargetStatus k
TargetDisabledBySolver
(Maybe Bool, Bool)
_ | Bool -> Bool
not Bool
buildable -> AvailableTargetStatus (UnitId, ComponentName)
forall k. AvailableTargetStatus k
TargetNotBuildable
(Just Bool
True, Bool
True) -> (UnitId, ComponentName)
-> TargetRequested -> AvailableTargetStatus (UnitId, ComponentName)
forall k. k -> TargetRequested -> AvailableTargetStatus k
TargetBuildable (ElaboratedConfiguredPackage -> UnitId
elabUnitId ElaboratedConfiguredPackage
elab, ComponentName
cname)
TargetRequested
TargetRequestedByDefault
(Maybe Bool
Nothing, Bool
True) -> (UnitId, ComponentName)
-> TargetRequested -> AvailableTargetStatus (UnitId, ComponentName)
forall k. k -> TargetRequested -> AvailableTargetStatus k
TargetBuildable (ElaboratedConfiguredPackage -> UnitId
elabUnitId ElaboratedConfiguredPackage
elab, ComponentName
cname)
TargetRequested
TargetNotRequestedByDefault
(Just Bool
True, Bool
False) ->
String -> AvailableTargetStatus (UnitId, ComponentName)
forall a. HasCallStack => String -> a
error (String -> AvailableTargetStatus (UnitId, ComponentName))
-> String -> AvailableTargetStatus (UnitId, ComponentName)
forall a b. (a -> b) -> a -> b
$ String
"componentAvailableTargetStatus: impossible; cname=" String -> String -> String
forall a. [a] -> [a] -> [a]
++ ComponentName -> String
forall a. Pretty a => a -> String
prettyShow ComponentName
cname
where
cname :: ComponentName
cname = Component -> ComponentName
componentName Component
component
buildable :: Bool
buildable = BuildInfo -> Bool
PD.buildable (Component -> BuildInfo
componentBuildInfo Component
component)
withinPlan :: Bool
withinPlan = ElaboratedConfiguredPackage -> Bool
elabLocalToProject ElaboratedConfiguredPackage
elab
Bool -> Bool -> Bool
|| case ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp ElaboratedConfiguredPackage
elab of
ElabComponent ElaboratedComponent
elabComponent ->
ElaboratedComponent -> Maybe ComponentName
compComponentName ElaboratedComponent
elabComponent Maybe ComponentName -> Maybe ComponentName -> Bool
forall a. Eq a => a -> a -> Bool
== ComponentName -> Maybe ComponentName
forall a. a -> Maybe a
Just ComponentName
cname
ElabPackage ElaboratedPackage
_ ->
case Component -> ComponentName
componentName Component
component of
CLibName (LibraryName
LMainLibName) -> Bool
True
CExeName UnqualComponentName
_ -> Bool
True
ComponentName
_ -> Bool
False
nubComponentTargets :: [(ComponentTarget, a)] -> [(ComponentTarget, NonEmpty a)]
nubComponentTargets :: forall a. [(ComponentTarget, a)] -> [(ComponentTarget, NonEmpty a)]
nubComponentTargets =
([(ComponentName, (ComponentTarget, a))]
-> [(ComponentTarget, NonEmpty a)])
-> [[(ComponentName, (ComponentTarget, a))]]
-> [(ComponentTarget, NonEmpty a)]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap ([(ComponentTarget, a)] -> [(ComponentTarget, NonEmpty a)]
forall a. [(ComponentTarget, a)] -> [(ComponentTarget, NonEmpty a)]
wholeComponentOverrides ([(ComponentTarget, a)] -> [(ComponentTarget, NonEmpty a)])
-> ([(ComponentName, (ComponentTarget, a))]
-> [(ComponentTarget, a)])
-> [(ComponentName, (ComponentTarget, a))]
-> [(ComponentTarget, NonEmpty a)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((ComponentName, (ComponentTarget, a)) -> (ComponentTarget, a))
-> [(ComponentName, (ComponentTarget, a))]
-> [(ComponentTarget, a)]
forall a b. (a -> b) -> [a] -> [b]
map (ComponentName, (ComponentTarget, a)) -> (ComponentTarget, a)
forall a b. (a, b) -> b
snd)
([[(ComponentName, (ComponentTarget, a))]]
-> [(ComponentTarget, NonEmpty a)])
-> ([(ComponentTarget, a)]
-> [[(ComponentName, (ComponentTarget, a))]])
-> [(ComponentTarget, a)]
-> [(ComponentTarget, NonEmpty a)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((ComponentName, (ComponentTarget, a))
-> (ComponentName, (ComponentTarget, a)) -> Bool)
-> [(ComponentName, (ComponentTarget, a))]
-> [[(ComponentName, (ComponentTarget, a))]]
forall a. (a -> a -> Bool) -> [a] -> [[a]]
groupBy (ComponentName -> ComponentName -> Bool
forall a. Eq a => a -> a -> Bool
(==) (ComponentName -> ComponentName -> Bool)
-> ((ComponentName, (ComponentTarget, a)) -> ComponentName)
-> (ComponentName, (ComponentTarget, a))
-> (ComponentName, (ComponentTarget, a))
-> Bool
forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
`on` (ComponentName, (ComponentTarget, a)) -> ComponentName
forall a b. (a, b) -> a
fst)
([(ComponentName, (ComponentTarget, a))]
-> [[(ComponentName, (ComponentTarget, a))]])
-> ([(ComponentTarget, a)]
-> [(ComponentName, (ComponentTarget, a))])
-> [(ComponentTarget, a)]
-> [[(ComponentName, (ComponentTarget, a))]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((ComponentName, (ComponentTarget, a))
-> (ComponentName, (ComponentTarget, a)) -> Ordering)
-> [(ComponentName, (ComponentTarget, a))]
-> [(ComponentName, (ComponentTarget, a))]
forall a. (a -> a -> Ordering) -> [a] -> [a]
sortBy (ComponentName -> ComponentName -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (ComponentName -> ComponentName -> Ordering)
-> ((ComponentName, (ComponentTarget, a)) -> ComponentName)
-> (ComponentName, (ComponentTarget, a))
-> (ComponentName, (ComponentTarget, a))
-> Ordering
forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
`on` (ComponentName, (ComponentTarget, a)) -> ComponentName
forall a b. (a, b) -> a
fst)
([(ComponentName, (ComponentTarget, a))]
-> [(ComponentName, (ComponentTarget, a))])
-> ([(ComponentTarget, a)]
-> [(ComponentName, (ComponentTarget, a))])
-> [(ComponentTarget, a)]
-> [(ComponentName, (ComponentTarget, a))]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((ComponentTarget, a) -> (ComponentName, (ComponentTarget, a)))
-> [(ComponentTarget, a)]
-> [(ComponentName, (ComponentTarget, a))]
forall a b. (a -> b) -> [a] -> [b]
map (\t :: (ComponentTarget, a)
t@((ComponentTarget ComponentName
cname SubComponentTarget
_, a
_)) -> (ComponentName
cname, (ComponentTarget, a)
t))
([(ComponentTarget, a)] -> [(ComponentName, (ComponentTarget, a))])
-> ([(ComponentTarget, a)] -> [(ComponentTarget, a)])
-> [(ComponentTarget, a)]
-> [(ComponentName, (ComponentTarget, a))]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((ComponentTarget, a) -> (ComponentTarget, a))
-> [(ComponentTarget, a)] -> [(ComponentTarget, a)]
forall a b. (a -> b) -> [a] -> [b]
map (ComponentTarget, a) -> (ComponentTarget, a)
forall a. (ComponentTarget, a) -> (ComponentTarget, a)
compatSubComponentTargets
where
wholeComponentOverrides :: [(ComponentTarget, a )]
-> [(ComponentTarget, NonEmpty a)]
wholeComponentOverrides :: forall a. [(ComponentTarget, a)] -> [(ComponentTarget, NonEmpty a)]
wholeComponentOverrides [(ComponentTarget, a)]
ts =
case [ (ComponentTarget, a)
ta | ta :: (ComponentTarget, a)
ta@(ComponentTarget ComponentName
_ SubComponentTarget
WholeComponent, a
_) <- [(ComponentTarget, a)]
ts ] of
((ComponentTarget
t, a
x):[(ComponentTarget, a)]
_) ->
let
ts' :: [(ComponentTarget, a)]
ts' = ((ComponentTarget, a) -> (ComponentTarget, a) -> Bool)
-> (ComponentTarget, a)
-> [(ComponentTarget, a)]
-> [(ComponentTarget, a)]
forall a. (a -> a -> Bool) -> a -> [a] -> [a]
deleteBy (\(ComponentTarget
t1, a
_) (ComponentTarget
t2, a
_) -> ComponentTarget
t1 ComponentTarget -> ComponentTarget -> Bool
forall a. Eq a => a -> a -> Bool
== ComponentTarget
t2) (ComponentTarget
t, a
x) [(ComponentTarget, a)]
ts
in
[ (ComponentTarget
t, a
x a -> [a] -> NonEmpty a
forall a. a -> [a] -> NonEmpty a
:| ((ComponentTarget, a) -> a) -> [(ComponentTarget, a)] -> [a]
forall a b. (a -> b) -> [a] -> [b]
map (ComponentTarget, a) -> a
forall a b. (a, b) -> b
snd [(ComponentTarget, a)]
ts') ]
[] -> [ (ComponentTarget
t, a
x a -> [a] -> NonEmpty a
forall a. a -> [a] -> NonEmpty a
:| []) | (ComponentTarget
t,a
x) <- [(ComponentTarget, a)]
ts ]
compatSubComponentTargets :: (ComponentTarget, a) -> (ComponentTarget, a)
compatSubComponentTargets :: forall a. (ComponentTarget, a) -> (ComponentTarget, a)
compatSubComponentTargets target :: (ComponentTarget, a)
target@(ComponentTarget ComponentName
cname SubComponentTarget
_subtarget, a
x)
| Bool -> Bool
not Bool
setupHsSupportsSubComponentTargets
= (ComponentName -> SubComponentTarget -> ComponentTarget
ComponentTarget ComponentName
cname SubComponentTarget
WholeComponent, a
x)
| Bool
otherwise = (ComponentTarget, a)
target
setupHsSupportsSubComponentTargets :: Bool
setupHsSupportsSubComponentTargets = Bool
False
pkgHasEphemeralBuildTargets :: ElaboratedConfiguredPackage -> Bool
pkgHasEphemeralBuildTargets :: ElaboratedConfiguredPackage -> Bool
pkgHasEphemeralBuildTargets ElaboratedConfiguredPackage
elab =
Maybe ComponentTarget -> Bool
forall a. Maybe a -> Bool
isJust (ElaboratedConfiguredPackage -> Maybe ComponentTarget
elabReplTarget ElaboratedConfiguredPackage
elab)
Bool -> Bool -> Bool
|| (Bool -> Bool
not (Bool -> Bool)
-> ([ComponentTarget] -> Bool) -> [ComponentTarget] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ComponentTarget] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null) (ElaboratedConfiguredPackage -> [ComponentTarget]
elabTestTargets ElaboratedConfiguredPackage
elab)
Bool -> Bool -> Bool
|| (Bool -> Bool
not (Bool -> Bool)
-> ([ComponentTarget] -> Bool) -> [ComponentTarget] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ComponentTarget] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null) (ElaboratedConfiguredPackage -> [ComponentTarget]
elabBenchTargets ElaboratedConfiguredPackage
elab)
Bool -> Bool -> Bool
|| (Bool -> Bool
not (Bool -> Bool)
-> ([ComponentTarget] -> Bool) -> [ComponentTarget] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ComponentTarget] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null) (ElaboratedConfiguredPackage -> [ComponentTarget]
elabHaddockTargets ElaboratedConfiguredPackage
elab)
Bool -> Bool -> Bool
|| (Bool -> Bool
not (Bool -> Bool) -> ([()] -> Bool) -> [()] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [()] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null) [ () | ComponentTarget ComponentName
_ SubComponentTarget
subtarget <- ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets ElaboratedConfiguredPackage
elab
, SubComponentTarget
subtarget SubComponentTarget -> SubComponentTarget -> Bool
forall a. Eq a => a -> a -> Bool
/= SubComponentTarget
WholeComponent ]
elabBuildTargetWholeComponents :: ElaboratedConfiguredPackage
-> Set ComponentName
elabBuildTargetWholeComponents :: ElaboratedConfiguredPackage -> Set ComponentName
elabBuildTargetWholeComponents ElaboratedConfiguredPackage
elab =
[ComponentName] -> Set ComponentName
forall a. Ord a => [a] -> Set a
Set.fromList
[ ComponentName
cname | ComponentTarget ComponentName
cname SubComponentTarget
WholeComponent <- ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets ElaboratedConfiguredPackage
elab ]
data TargetAction = TargetActionConfigure
| TargetActionBuild
| TargetActionRepl
| TargetActionTest
| TargetActionBench
| TargetActionHaddock
pruneInstallPlanToTargets :: TargetAction
-> Map UnitId [ComponentTarget]
-> ElaboratedInstallPlan -> ElaboratedInstallPlan
pruneInstallPlanToTargets :: TargetAction
-> Map UnitId [ComponentTarget]
-> ElaboratedInstallPlan
-> ElaboratedInstallPlan
pruneInstallPlanToTargets TargetAction
targetActionType Map UnitId [ComponentTarget]
perPkgTargetsMap ElaboratedInstallPlan
elaboratedPlan =
IndependentGoals
-> Graph ElaboratedPlanPackage -> ElaboratedInstallPlan
forall ipkg srcpkg.
(IsUnit ipkg, IsUnit srcpkg) =>
IndependentGoals
-> Graph (GenericPlanPackage ipkg srcpkg)
-> GenericInstallPlan ipkg srcpkg
InstallPlan.new (ElaboratedInstallPlan -> IndependentGoals
forall ipkg srcpkg.
GenericInstallPlan ipkg srcpkg -> IndependentGoals
InstallPlan.planIndepGoals ElaboratedInstallPlan
elaboratedPlan)
(Graph ElaboratedPlanPackage -> ElaboratedInstallPlan)
-> (ElaboratedInstallPlan -> Graph ElaboratedPlanPackage)
-> ElaboratedInstallPlan
-> ElaboratedInstallPlan
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ElaboratedPlanPackage] -> Graph ElaboratedPlanPackage
forall a. (IsNode a, Show (Key a)) => [a] -> Graph a
Graph.fromDistinctList
([ElaboratedPlanPackage] -> Graph ElaboratedPlanPackage)
-> (ElaboratedInstallPlan -> [ElaboratedPlanPackage])
-> ElaboratedInstallPlan
-> Graph ElaboratedPlanPackage
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ElaboratedPlanPackage] -> [ElaboratedPlanPackage]
pruneInstallPlanPass2
([ElaboratedPlanPackage] -> [ElaboratedPlanPackage])
-> (ElaboratedInstallPlan -> [ElaboratedPlanPackage])
-> ElaboratedInstallPlan
-> [ElaboratedPlanPackage]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ElaboratedPlanPackage] -> [ElaboratedPlanPackage]
pruneInstallPlanPass1
([ElaboratedPlanPackage] -> [ElaboratedPlanPackage])
-> (ElaboratedInstallPlan -> [ElaboratedPlanPackage])
-> ElaboratedInstallPlan
-> [ElaboratedPlanPackage]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TargetAction
-> Map UnitId [ComponentTarget]
-> [ElaboratedPlanPackage]
-> [ElaboratedPlanPackage]
setRootTargets TargetAction
targetActionType Map UnitId [ComponentTarget]
perPkgTargetsMap
([ElaboratedPlanPackage] -> [ElaboratedPlanPackage])
-> (ElaboratedInstallPlan -> [ElaboratedPlanPackage])
-> ElaboratedInstallPlan
-> [ElaboratedPlanPackage]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ElaboratedInstallPlan -> [ElaboratedPlanPackage]
forall ipkg srcpkg.
GenericInstallPlan ipkg srcpkg -> [GenericPlanPackage ipkg srcpkg]
InstallPlan.toList
(ElaboratedInstallPlan -> ElaboratedInstallPlan)
-> ElaboratedInstallPlan -> ElaboratedInstallPlan
forall a b. (a -> b) -> a -> b
$ ElaboratedInstallPlan
elaboratedPlan
data PrunedPackage = PrunedPackage ElaboratedConfiguredPackage [UnitId]
instance Package PrunedPackage where
packageId :: PrunedPackage -> PackageIdentifier
packageId (PrunedPackage ElaboratedConfiguredPackage
elab [UnitId]
_) = ElaboratedConfiguredPackage -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId ElaboratedConfiguredPackage
elab
instance HasUnitId PrunedPackage where
installedUnitId :: PrunedPackage -> UnitId
installedUnitId = PrunedPackage -> UnitId
PrunedPackage -> Key PrunedPackage
forall a. IsNode a => a -> Key a
nodeKey
instance IsNode PrunedPackage where
type Key PrunedPackage = UnitId
nodeKey :: PrunedPackage -> Key PrunedPackage
nodeKey (PrunedPackage ElaboratedConfiguredPackage
elab [UnitId]
_) = ElaboratedConfiguredPackage -> Key ElaboratedConfiguredPackage
forall a. IsNode a => a -> Key a
nodeKey ElaboratedConfiguredPackage
elab
nodeNeighbors :: PrunedPackage -> [Key PrunedPackage]
nodeNeighbors (PrunedPackage ElaboratedConfiguredPackage
_ [UnitId]
deps) = [UnitId]
[Key PrunedPackage]
deps
fromPrunedPackage :: PrunedPackage -> ElaboratedConfiguredPackage
fromPrunedPackage :: PrunedPackage -> ElaboratedConfiguredPackage
fromPrunedPackage (PrunedPackage ElaboratedConfiguredPackage
elab [UnitId]
_) = ElaboratedConfiguredPackage
elab
setRootTargets :: TargetAction
-> Map UnitId [ComponentTarget]
-> [ElaboratedPlanPackage]
-> [ElaboratedPlanPackage]
setRootTargets :: TargetAction
-> Map UnitId [ComponentTarget]
-> [ElaboratedPlanPackage]
-> [ElaboratedPlanPackage]
setRootTargets TargetAction
targetAction Map UnitId [ComponentTarget]
perPkgTargetsMap =
Bool
-> ([ElaboratedPlanPackage] -> [ElaboratedPlanPackage])
-> [ElaboratedPlanPackage]
-> [ElaboratedPlanPackage]
forall a. HasCallStack => Bool -> a -> a
assert (Bool -> Bool
not (Map UnitId [ComponentTarget] -> Bool
forall k a. Map k a -> Bool
Map.null Map UnitId [ComponentTarget]
perPkgTargetsMap)) (([ElaboratedPlanPackage] -> [ElaboratedPlanPackage])
-> [ElaboratedPlanPackage] -> [ElaboratedPlanPackage])
-> ([ElaboratedPlanPackage] -> [ElaboratedPlanPackage])
-> [ElaboratedPlanPackage]
-> [ElaboratedPlanPackage]
forall a b. (a -> b) -> a -> b
$
Bool
-> ([ElaboratedPlanPackage] -> [ElaboratedPlanPackage])
-> [ElaboratedPlanPackage]
-> [ElaboratedPlanPackage]
forall a. HasCallStack => Bool -> a -> a
assert (([ComponentTarget] -> Bool) -> [[ComponentTarget]] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (Bool -> Bool
not (Bool -> Bool)
-> ([ComponentTarget] -> Bool) -> [ComponentTarget] -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ComponentTarget] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null) (Map UnitId [ComponentTarget] -> [[ComponentTarget]]
forall k a. Map k a -> [a]
Map.elems Map UnitId [ComponentTarget]
perPkgTargetsMap)) (([ElaboratedPlanPackage] -> [ElaboratedPlanPackage])
-> [ElaboratedPlanPackage] -> [ElaboratedPlanPackage])
-> ([ElaboratedPlanPackage] -> [ElaboratedPlanPackage])
-> [ElaboratedPlanPackage]
-> [ElaboratedPlanPackage]
forall a b. (a -> b) -> a -> b
$
(ElaboratedPlanPackage -> ElaboratedPlanPackage)
-> [ElaboratedPlanPackage] -> [ElaboratedPlanPackage]
forall a b. (a -> b) -> [a] -> [b]
map ((ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage)
-> ElaboratedPlanPackage -> ElaboratedPlanPackage
forall srcpkg srcpkg' ipkg.
(srcpkg -> srcpkg')
-> GenericPlanPackage ipkg srcpkg
-> GenericPlanPackage ipkg srcpkg'
mapConfiguredPackage ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage
setElabBuildTargets)
where
setElabBuildTargets :: ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage
setElabBuildTargets ElaboratedConfiguredPackage
elab =
case (UnitId -> Map UnitId [ComponentTarget] -> Maybe [ComponentTarget]
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup (ElaboratedConfiguredPackage -> UnitId
forall pkg. HasUnitId pkg => pkg -> UnitId
installedUnitId ElaboratedConfiguredPackage
elab) Map UnitId [ComponentTarget]
perPkgTargetsMap,
TargetAction
targetAction) of
(Maybe [ComponentTarget]
Nothing, TargetAction
_) -> ElaboratedConfiguredPackage
elab
(Just [ComponentTarget]
tgts, TargetAction
TargetActionConfigure) -> ElaboratedConfiguredPackage
elab { elabConfigureTargets :: [ComponentTarget]
elabConfigureTargets = [ComponentTarget]
tgts }
(Just [ComponentTarget]
tgts, TargetAction
TargetActionBuild) -> ElaboratedConfiguredPackage
elab { elabBuildTargets :: [ComponentTarget]
elabBuildTargets = [ComponentTarget]
tgts }
(Just [ComponentTarget]
tgts, TargetAction
TargetActionTest) -> ElaboratedConfiguredPackage
elab { elabTestTargets :: [ComponentTarget]
elabTestTargets = [ComponentTarget]
tgts }
(Just [ComponentTarget]
tgts, TargetAction
TargetActionBench) -> ElaboratedConfiguredPackage
elab { elabBenchTargets :: [ComponentTarget]
elabBenchTargets = [ComponentTarget]
tgts }
(Just [ComponentTarget
tgt], TargetAction
TargetActionRepl) -> ElaboratedConfiguredPackage
elab { elabReplTarget :: Maybe ComponentTarget
elabReplTarget = ComponentTarget -> Maybe ComponentTarget
forall a. a -> Maybe a
Just ComponentTarget
tgt
, elabBuildHaddocks :: Bool
elabBuildHaddocks = Bool
False }
(Just [ComponentTarget]
tgts, TargetAction
TargetActionHaddock) ->
(ComponentTarget
-> ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage)
-> ElaboratedConfiguredPackage
-> [ComponentTarget]
-> ElaboratedConfiguredPackage
forall a b. (a -> b -> b) -> b -> [a] -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr ComponentTarget
-> ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage
setElabHaddockTargets (ElaboratedConfiguredPackage
elab { elabHaddockTargets :: [ComponentTarget]
elabHaddockTargets = [ComponentTarget]
tgts
, elabBuildHaddocks :: Bool
elabBuildHaddocks = Bool
True }) [ComponentTarget]
tgts
(Just [ComponentTarget]
_, TargetAction
TargetActionRepl) ->
String -> ElaboratedConfiguredPackage
forall a. HasCallStack => String -> a
error String
"pruneInstallPlanToTargets: multiple repl targets"
setElabHaddockTargets :: ComponentTarget
-> ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage
setElabHaddockTargets ComponentTarget
tgt ElaboratedConfiguredPackage
elab
| ComponentTarget -> Bool
isTestComponentTarget ComponentTarget
tgt = ElaboratedConfiguredPackage
elab { elabHaddockTestSuites :: Bool
elabHaddockTestSuites = Bool
True }
| ComponentTarget -> Bool
isBenchComponentTarget ComponentTarget
tgt = ElaboratedConfiguredPackage
elab { elabHaddockBenchmarks :: Bool
elabHaddockBenchmarks = Bool
True }
| ComponentTarget -> Bool
isForeignLibComponentTarget ComponentTarget
tgt = ElaboratedConfiguredPackage
elab { elabHaddockForeignLibs :: Bool
elabHaddockForeignLibs = Bool
True }
| ComponentTarget -> Bool
isExeComponentTarget ComponentTarget
tgt = ElaboratedConfiguredPackage
elab { elabHaddockExecutables :: Bool
elabHaddockExecutables = Bool
True }
| ComponentTarget -> Bool
isSubLibComponentTarget ComponentTarget
tgt = ElaboratedConfiguredPackage
elab { elabHaddockInternal :: Bool
elabHaddockInternal = Bool
True }
| Bool
otherwise = ElaboratedConfiguredPackage
elab
pruneInstallPlanPass1 :: [ElaboratedPlanPackage]
-> [ElaboratedPlanPackage]
pruneInstallPlanPass1 :: [ElaboratedPlanPackage] -> [ElaboratedPlanPackage]
pruneInstallPlanPass1 [ElaboratedPlanPackage]
pkgs =
(GenericPlanPackage InstalledPackageInfo PrunedPackage
-> ElaboratedPlanPackage)
-> [GenericPlanPackage InstalledPackageInfo PrunedPackage]
-> [ElaboratedPlanPackage]
forall a b. (a -> b) -> [a] -> [b]
map ((PrunedPackage -> ElaboratedConfiguredPackage)
-> GenericPlanPackage InstalledPackageInfo PrunedPackage
-> ElaboratedPlanPackage
forall srcpkg srcpkg' ipkg.
(srcpkg -> srcpkg')
-> GenericPlanPackage ipkg srcpkg
-> GenericPlanPackage ipkg srcpkg'
mapConfiguredPackage PrunedPackage -> ElaboratedConfiguredPackage
fromPrunedPackage)
([GenericPlanPackage InstalledPackageInfo PrunedPackage]
-> Maybe [GenericPlanPackage InstalledPackageInfo PrunedPackage]
-> [GenericPlanPackage InstalledPackageInfo PrunedPackage]
forall a. a -> Maybe a -> a
fromMaybe [] (Maybe [GenericPlanPackage InstalledPackageInfo PrunedPackage]
-> [GenericPlanPackage InstalledPackageInfo PrunedPackage])
-> Maybe [GenericPlanPackage InstalledPackageInfo PrunedPackage]
-> [GenericPlanPackage InstalledPackageInfo PrunedPackage]
forall a b. (a -> b) -> a -> b
$ Graph (GenericPlanPackage InstalledPackageInfo PrunedPackage)
-> [Key (GenericPlanPackage InstalledPackageInfo PrunedPackage)]
-> Maybe [GenericPlanPackage InstalledPackageInfo PrunedPackage]
forall a. Graph a -> [Key a] -> Maybe [a]
Graph.closure Graph (GenericPlanPackage InstalledPackageInfo PrunedPackage)
graph [UnitId]
[Key (GenericPlanPackage InstalledPackageInfo PrunedPackage)]
roots)
where
pkgs' :: [GenericPlanPackage InstalledPackageInfo PrunedPackage]
pkgs' = (ElaboratedPlanPackage
-> GenericPlanPackage InstalledPackageInfo PrunedPackage)
-> [ElaboratedPlanPackage]
-> [GenericPlanPackage InstalledPackageInfo PrunedPackage]
forall a b. (a -> b) -> [a] -> [b]
map ((ElaboratedConfiguredPackage -> PrunedPackage)
-> ElaboratedPlanPackage
-> GenericPlanPackage InstalledPackageInfo PrunedPackage
forall srcpkg srcpkg' ipkg.
(srcpkg -> srcpkg')
-> GenericPlanPackage ipkg srcpkg
-> GenericPlanPackage ipkg srcpkg'
mapConfiguredPackage ElaboratedConfiguredPackage -> PrunedPackage
prune) [ElaboratedPlanPackage]
pkgs
graph :: Graph (GenericPlanPackage InstalledPackageInfo PrunedPackage)
graph = [GenericPlanPackage InstalledPackageInfo PrunedPackage]
-> Graph (GenericPlanPackage InstalledPackageInfo PrunedPackage)
forall a. (IsNode a, Show (Key a)) => [a] -> Graph a
Graph.fromDistinctList [GenericPlanPackage InstalledPackageInfo PrunedPackage]
pkgs'
roots :: [UnitId]
roots = (GenericPlanPackage InstalledPackageInfo PrunedPackage
-> Maybe UnitId)
-> [GenericPlanPackage InstalledPackageInfo PrunedPackage]
-> [UnitId]
forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe GenericPlanPackage InstalledPackageInfo PrunedPackage
-> Maybe UnitId
forall {ipkg}.
GenericPlanPackage ipkg PrunedPackage -> Maybe UnitId
find_root [GenericPlanPackage InstalledPackageInfo PrunedPackage]
pkgs'
prune :: ElaboratedConfiguredPackage -> PrunedPackage
prune ElaboratedConfiguredPackage
elab = ElaboratedConfiguredPackage -> [UnitId] -> PrunedPackage
PrunedPackage ElaboratedConfiguredPackage
elab' (ElaboratedConfiguredPackage -> [UnitId]
pruneOptionalDependencies ElaboratedConfiguredPackage
elab')
where elab' :: ElaboratedConfiguredPackage
elab' =
ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage
setDocumentation
(ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage)
-> ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage
forall a b. (a -> b) -> a -> b
$ ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage
addOptionalStanzas ElaboratedConfiguredPackage
elab
is_root :: PrunedPackage -> Maybe UnitId
is_root :: PrunedPackage -> Maybe UnitId
is_root (PrunedPackage ElaboratedConfiguredPackage
elab [UnitId]
_) =
if Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ [Bool] -> Bool
forall (t :: * -> *). Foldable t => t Bool -> Bool
and [ [ComponentTarget] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (ElaboratedConfiguredPackage -> [ComponentTarget]
elabConfigureTargets ElaboratedConfiguredPackage
elab)
, [ComponentTarget] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets ElaboratedConfiguredPackage
elab)
, [ComponentTarget] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (ElaboratedConfiguredPackage -> [ComponentTarget]
elabTestTargets ElaboratedConfiguredPackage
elab)
, [ComponentTarget] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (ElaboratedConfiguredPackage -> [ComponentTarget]
elabBenchTargets ElaboratedConfiguredPackage
elab)
, Maybe ComponentTarget -> Bool
forall a. Maybe a -> Bool
isNothing (ElaboratedConfiguredPackage -> Maybe ComponentTarget
elabReplTarget ElaboratedConfiguredPackage
elab)
, [ComponentTarget] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (ElaboratedConfiguredPackage -> [ComponentTarget]
elabHaddockTargets ElaboratedConfiguredPackage
elab)
]
then UnitId -> Maybe UnitId
forall a. a -> Maybe a
Just (ElaboratedConfiguredPackage -> UnitId
forall pkg. HasUnitId pkg => pkg -> UnitId
installedUnitId ElaboratedConfiguredPackage
elab)
else Maybe UnitId
forall a. Maybe a
Nothing
find_root :: GenericPlanPackage ipkg PrunedPackage -> Maybe UnitId
find_root (InstallPlan.Configured PrunedPackage
pkg) = PrunedPackage -> Maybe UnitId
is_root PrunedPackage
pkg
find_root (InstallPlan.Installed PrunedPackage
pkg) = PrunedPackage -> Maybe UnitId
is_root PrunedPackage
pkg
find_root GenericPlanPackage ipkg PrunedPackage
_ = Maybe UnitId
forall a. Maybe a
Nothing
addOptionalStanzas :: ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage
addOptionalStanzas :: ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage
addOptionalStanzas elab :: ElaboratedConfiguredPackage
elab@ElaboratedConfiguredPackage{ elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp = ElabPackage ElaboratedPackage
pkg } =
ElaboratedConfiguredPackage
elab {
elabPkgOrComp :: ElaboratedPackageOrComponent
elabPkgOrComp = ElaboratedPackage -> ElaboratedPackageOrComponent
ElabPackage (ElaboratedPackage
pkg { pkgStanzasEnabled :: OptionalStanzaSet
pkgStanzasEnabled = OptionalStanzaSet
stanzas })
}
where
stanzas :: OptionalStanzaSet
stanzas :: OptionalStanzaSet
stanzas = ElaboratedPackage -> OptionalStanzaSet
pkgStanzasEnabled ElaboratedPackage
pkg
OptionalStanzaSet -> OptionalStanzaSet -> OptionalStanzaSet
forall a. Semigroup a => a -> a -> a
<> ElaboratedConfiguredPackage -> OptionalStanzaSet
optionalStanzasRequiredByTargets ElaboratedConfiguredPackage
elab
OptionalStanzaSet -> OptionalStanzaSet -> OptionalStanzaSet
forall a. Semigroup a => a -> a -> a
<> Set UnitId
-> ElaboratedConfiguredPackage
-> ElaboratedPackage
-> OptionalStanzaSet
optionalStanzasWithDepsAvailable Set UnitId
availablePkgs ElaboratedConfiguredPackage
elab ElaboratedPackage
pkg
addOptionalStanzas ElaboratedConfiguredPackage
elab = ElaboratedConfiguredPackage
elab
setDocumentation :: ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage
setDocumentation :: ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage
setDocumentation elab :: ElaboratedConfiguredPackage
elab@ElaboratedConfiguredPackage { elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp = ElabComponent ElaboratedComponent
comp } =
ElaboratedConfiguredPackage
elab {
elabBuildHaddocks :: Bool
elabBuildHaddocks =
ElaboratedConfiguredPackage -> Bool
elabBuildHaddocks ElaboratedConfiguredPackage
elab Bool -> Bool -> Bool
&& Component -> ElaboratedConfiguredPackage -> Bool
documentationEnabled (ElaboratedComponent -> Component
compSolverName ElaboratedComponent
comp) ElaboratedConfiguredPackage
elab
}
where
documentationEnabled :: Component -> ElaboratedConfiguredPackage -> Bool
documentationEnabled Component
c =
case Component
c of
Component
CD.ComponentLib -> Bool -> ElaboratedConfiguredPackage -> Bool
forall a b. a -> b -> a
const Bool
True
CD.ComponentSubLib UnqualComponentName
_ -> ElaboratedConfiguredPackage -> Bool
elabHaddockInternal
CD.ComponentFLib UnqualComponentName
_ -> ElaboratedConfiguredPackage -> Bool
elabHaddockForeignLibs
CD.ComponentExe UnqualComponentName
_ -> ElaboratedConfiguredPackage -> Bool
elabHaddockExecutables
CD.ComponentTest UnqualComponentName
_ -> ElaboratedConfiguredPackage -> Bool
elabHaddockTestSuites
CD.ComponentBench UnqualComponentName
_ -> ElaboratedConfiguredPackage -> Bool
elabHaddockBenchmarks
Component
CD.ComponentSetup -> Bool -> ElaboratedConfiguredPackage -> Bool
forall a b. a -> b -> a
const Bool
False
setDocumentation ElaboratedConfiguredPackage
elab = ElaboratedConfiguredPackage
elab
pruneOptionalDependencies :: ElaboratedConfiguredPackage -> [UnitId]
pruneOptionalDependencies :: ElaboratedConfiguredPackage -> [UnitId]
pruneOptionalDependencies elab :: ElaboratedConfiguredPackage
elab@ElaboratedConfiguredPackage{ elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp = ElabComponent ElaboratedComponent
_ }
= ElaboratedConfiguredPackage -> [UnitId]
forall a. IsUnit a => a -> [UnitId]
InstallPlan.depends ElaboratedConfiguredPackage
elab
pruneOptionalDependencies ElaboratedConfiguredPackage{ elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp = ElabPackage ElaboratedPackage
pkg }
= (ComponentDeps [UnitId] -> [UnitId]
forall a. Monoid a => ComponentDeps a -> a
CD.flatDeps (ComponentDeps [UnitId] -> [UnitId])
-> (ComponentDeps [UnitId] -> ComponentDeps [UnitId])
-> ComponentDeps [UnitId]
-> [UnitId]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Component -> [UnitId] -> Bool)
-> ComponentDeps [UnitId] -> ComponentDeps [UnitId]
forall a.
(Component -> a -> Bool) -> ComponentDeps a -> ComponentDeps a
CD.filterDeps Component -> [UnitId] -> Bool
forall {p}. Component -> p -> Bool
keepNeeded) (ElaboratedPackage -> ComponentDeps [UnitId]
pkgOrderDependencies ElaboratedPackage
pkg)
where
keepNeeded :: Component -> p -> Bool
keepNeeded (CD.ComponentTest UnqualComponentName
_) p
_ = OptionalStanza
TestStanzas OptionalStanza -> OptionalStanzaSet -> Bool
`optStanzaSetMember` OptionalStanzaSet
stanzas
keepNeeded (CD.ComponentBench UnqualComponentName
_) p
_ = OptionalStanza
BenchStanzas OptionalStanza -> OptionalStanzaSet -> Bool
`optStanzaSetMember` OptionalStanzaSet
stanzas
keepNeeded Component
_ p
_ = Bool
True
stanzas :: OptionalStanzaSet
stanzas = ElaboratedPackage -> OptionalStanzaSet
pkgStanzasEnabled ElaboratedPackage
pkg
optionalStanzasRequiredByTargets :: ElaboratedConfiguredPackage
-> OptionalStanzaSet
optionalStanzasRequiredByTargets :: ElaboratedConfiguredPackage -> OptionalStanzaSet
optionalStanzasRequiredByTargets ElaboratedConfiguredPackage
pkg =
[OptionalStanza] -> OptionalStanzaSet
optStanzaSetFromList
[ OptionalStanza
stanza
| ComponentTarget ComponentName
cname SubComponentTarget
_ <- ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets ElaboratedConfiguredPackage
pkg
[ComponentTarget] -> [ComponentTarget] -> [ComponentTarget]
forall a. [a] -> [a] -> [a]
++ ElaboratedConfiguredPackage -> [ComponentTarget]
elabTestTargets ElaboratedConfiguredPackage
pkg
[ComponentTarget] -> [ComponentTarget] -> [ComponentTarget]
forall a. [a] -> [a] -> [a]
++ ElaboratedConfiguredPackage -> [ComponentTarget]
elabBenchTargets ElaboratedConfiguredPackage
pkg
[ComponentTarget] -> [ComponentTarget] -> [ComponentTarget]
forall a. [a] -> [a] -> [a]
++ Maybe ComponentTarget -> [ComponentTarget]
forall a. Maybe a -> [a]
maybeToList (ElaboratedConfiguredPackage -> Maybe ComponentTarget
elabReplTarget ElaboratedConfiguredPackage
pkg)
[ComponentTarget] -> [ComponentTarget] -> [ComponentTarget]
forall a. [a] -> [a] -> [a]
++ ElaboratedConfiguredPackage -> [ComponentTarget]
elabHaddockTargets ElaboratedConfiguredPackage
pkg
, OptionalStanza
stanza <- Maybe OptionalStanza -> [OptionalStanza]
forall a. Maybe a -> [a]
maybeToList (Maybe OptionalStanza -> [OptionalStanza])
-> Maybe OptionalStanza -> [OptionalStanza]
forall a b. (a -> b) -> a -> b
$
Component -> Maybe OptionalStanza
componentOptionalStanza (Component -> Maybe OptionalStanza)
-> Component -> Maybe OptionalStanza
forall a b. (a -> b) -> a -> b
$
ComponentName -> Component
CD.componentNameToComponent ComponentName
cname
]
availablePkgs :: Set UnitId
availablePkgs =
[UnitId] -> Set UnitId
forall a. Ord a => [a] -> Set a
Set.fromList
[ InstalledPackageInfo -> UnitId
forall pkg. HasUnitId pkg => pkg -> UnitId
installedUnitId InstalledPackageInfo
pkg
| InstallPlan.PreExisting InstalledPackageInfo
pkg <- [ElaboratedPlanPackage]
pkgs ]
optionalStanzasWithDepsAvailable :: Set UnitId
-> ElaboratedConfiguredPackage
-> ElaboratedPackage
-> OptionalStanzaSet
optionalStanzasWithDepsAvailable :: Set UnitId
-> ElaboratedConfiguredPackage
-> ElaboratedPackage
-> OptionalStanzaSet
optionalStanzasWithDepsAvailable Set UnitId
availablePkgs ElaboratedConfiguredPackage
elab ElaboratedPackage
pkg =
[OptionalStanza] -> OptionalStanzaSet
optStanzaSetFromList
[ OptionalStanza
stanza
| OptionalStanza
stanza <- OptionalStanzaSet -> [OptionalStanza]
optStanzaSetToList (ElaboratedConfiguredPackage -> OptionalStanzaSet
elabStanzasAvailable ElaboratedConfiguredPackage
elab)
, let deps :: [UnitId]
deps :: [UnitId]
deps = (Component -> Bool) -> ComponentDeps [UnitId] -> [UnitId]
forall a. Monoid a => (Component -> Bool) -> ComponentDeps a -> a
CD.select (OptionalStanza -> Component -> Bool
optionalStanzaDeps OptionalStanza
stanza)
(ElaboratedPackage -> ComponentDeps [UnitId]
pkgOrderDependencies ElaboratedPackage
pkg)
, (UnitId -> Bool) -> [UnitId] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (UnitId -> Set UnitId -> Bool
forall a. Ord a => a -> Set a -> Bool
`Set.member` Set UnitId
availablePkgs) [UnitId]
deps
]
where
optionalStanzaDeps :: OptionalStanza -> Component -> Bool
optionalStanzaDeps OptionalStanza
TestStanzas (CD.ComponentTest UnqualComponentName
_) = Bool
True
optionalStanzaDeps OptionalStanza
BenchStanzas (CD.ComponentBench UnqualComponentName
_) = Bool
True
optionalStanzaDeps OptionalStanza
_ Component
_ = Bool
False
pruneInstallPlanPass2 :: [ElaboratedPlanPackage]
-> [ElaboratedPlanPackage]
pruneInstallPlanPass2 :: [ElaboratedPlanPackage] -> [ElaboratedPlanPackage]
pruneInstallPlanPass2 [ElaboratedPlanPackage]
pkgs =
(ElaboratedPlanPackage -> ElaboratedPlanPackage)
-> [ElaboratedPlanPackage] -> [ElaboratedPlanPackage]
forall a b. (a -> b) -> [a] -> [b]
map ((ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage)
-> ElaboratedPlanPackage -> ElaboratedPlanPackage
forall srcpkg srcpkg' ipkg.
(srcpkg -> srcpkg')
-> GenericPlanPackage ipkg srcpkg
-> GenericPlanPackage ipkg srcpkg'
mapConfiguredPackage ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage
setStanzasDepsAndTargets) [ElaboratedPlanPackage]
pkgs
where
setStanzasDepsAndTargets :: ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage
setStanzasDepsAndTargets ElaboratedConfiguredPackage
elab =
ElaboratedConfiguredPackage
elab {
elabBuildTargets :: [ComponentTarget]
elabBuildTargets = [ComponentTarget] -> [ComponentTarget]
forall a. Ord a => [a] -> [a]
ordNub
([ComponentTarget] -> [ComponentTarget])
-> [ComponentTarget] -> [ComponentTarget]
forall a b. (a -> b) -> a -> b
$ ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets ElaboratedConfiguredPackage
elab
[ComponentTarget] -> [ComponentTarget] -> [ComponentTarget]
forall a. [a] -> [a] -> [a]
++ [ComponentTarget]
libTargetsRequiredForRevDeps
[ComponentTarget] -> [ComponentTarget] -> [ComponentTarget]
forall a. [a] -> [a] -> [a]
++ [ComponentTarget]
exeTargetsRequiredForRevDeps,
elabPkgOrComp :: ElaboratedPackageOrComponent
elabPkgOrComp =
case ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp ElaboratedConfiguredPackage
elab of
ElabPackage ElaboratedPackage
pkg ->
let stanzas :: OptionalStanzaSet
stanzas = ElaboratedPackage -> OptionalStanzaSet
pkgStanzasEnabled ElaboratedPackage
pkg
OptionalStanzaSet -> OptionalStanzaSet -> OptionalStanzaSet
forall a. Semigroup a => a -> a -> a
<> Set UnitId
-> ElaboratedConfiguredPackage
-> ElaboratedPackage
-> OptionalStanzaSet
optionalStanzasWithDepsAvailable Set UnitId
availablePkgs ElaboratedConfiguredPackage
elab ElaboratedPackage
pkg
keepNeeded :: Component -> p -> Bool
keepNeeded (CD.ComponentTest UnqualComponentName
_) p
_ = OptionalStanza
TestStanzas OptionalStanza -> OptionalStanzaSet -> Bool
`optStanzaSetMember` OptionalStanzaSet
stanzas
keepNeeded (CD.ComponentBench UnqualComponentName
_) p
_ = OptionalStanza
BenchStanzas OptionalStanza -> OptionalStanzaSet -> Bool
`optStanzaSetMember` OptionalStanzaSet
stanzas
keepNeeded Component
_ p
_ = Bool
True
in ElaboratedPackage -> ElaboratedPackageOrComponent
ElabPackage (ElaboratedPackage -> ElaboratedPackageOrComponent)
-> ElaboratedPackage -> ElaboratedPackageOrComponent
forall a b. (a -> b) -> a -> b
$ ElaboratedPackage
pkg {
pkgStanzasEnabled :: OptionalStanzaSet
pkgStanzasEnabled = OptionalStanzaSet
stanzas,
pkgLibDependencies :: ComponentDeps [ConfiguredId]
pkgLibDependencies = (Component -> [ConfiguredId] -> Bool)
-> ComponentDeps [ConfiguredId] -> ComponentDeps [ConfiguredId]
forall a.
(Component -> a -> Bool) -> ComponentDeps a -> ComponentDeps a
CD.filterDeps Component -> [ConfiguredId] -> Bool
forall {p}. Component -> p -> Bool
keepNeeded (ElaboratedPackage -> ComponentDeps [ConfiguredId]
pkgLibDependencies ElaboratedPackage
pkg),
pkgExeDependencies :: ComponentDeps [ConfiguredId]
pkgExeDependencies = (Component -> [ConfiguredId] -> Bool)
-> ComponentDeps [ConfiguredId] -> ComponentDeps [ConfiguredId]
forall a.
(Component -> a -> Bool) -> ComponentDeps a -> ComponentDeps a
CD.filterDeps Component -> [ConfiguredId] -> Bool
forall {p}. Component -> p -> Bool
keepNeeded (ElaboratedPackage -> ComponentDeps [ConfiguredId]
pkgExeDependencies ElaboratedPackage
pkg),
pkgExeDependencyPaths :: ComponentDeps [(ConfiguredId, String)]
pkgExeDependencyPaths = (Component -> [(ConfiguredId, String)] -> Bool)
-> ComponentDeps [(ConfiguredId, String)]
-> ComponentDeps [(ConfiguredId, String)]
forall a.
(Component -> a -> Bool) -> ComponentDeps a -> ComponentDeps a
CD.filterDeps Component -> [(ConfiguredId, String)] -> Bool
forall {p}. Component -> p -> Bool
keepNeeded (ElaboratedPackage -> ComponentDeps [(ConfiguredId, String)]
pkgExeDependencyPaths ElaboratedPackage
pkg)
}
r :: ElaboratedPackageOrComponent
r@(ElabComponent ElaboratedComponent
_) -> ElaboratedPackageOrComponent
r
}
where
libTargetsRequiredForRevDeps :: [ComponentTarget]
libTargetsRequiredForRevDeps =
[ ComponentName -> SubComponentTarget -> ComponentTarget
ComponentTarget (LibraryName -> ComponentName
CLibName LibraryName
Cabal.defaultLibName) SubComponentTarget
WholeComponent
| ElaboratedConfiguredPackage -> UnitId
forall pkg. HasUnitId pkg => pkg -> UnitId
installedUnitId ElaboratedConfiguredPackage
elab UnitId -> Set UnitId -> Bool
forall a. Ord a => a -> Set a -> Bool
`Set.member` Set UnitId
hasReverseLibDeps
]
exeTargetsRequiredForRevDeps :: [ComponentTarget]
exeTargetsRequiredForRevDeps =
[ ComponentName -> SubComponentTarget -> ComponentTarget
ComponentTarget (UnqualComponentName -> ComponentName
Cabal.CExeName
(UnqualComponentName -> ComponentName)
-> UnqualComponentName -> ComponentName
forall a b. (a -> b) -> a -> b
$ PackageName -> UnqualComponentName
packageNameToUnqualComponentName
(PackageName -> UnqualComponentName)
-> PackageName -> UnqualComponentName
forall a b. (a -> b) -> a -> b
$ PackageIdentifier -> PackageName
forall pkg. Package pkg => pkg -> PackageName
packageName (PackageIdentifier -> PackageName)
-> PackageIdentifier -> PackageName
forall a b. (a -> b) -> a -> b
$ ElaboratedConfiguredPackage -> PackageIdentifier
elabPkgSourceId ElaboratedConfiguredPackage
elab)
SubComponentTarget
WholeComponent
| ElaboratedConfiguredPackage -> UnitId
forall pkg. HasUnitId pkg => pkg -> UnitId
installedUnitId ElaboratedConfiguredPackage
elab UnitId -> Set UnitId -> Bool
forall a. Ord a => a -> Set a -> Bool
`Set.member` Set UnitId
hasReverseExeDeps
]
availablePkgs :: Set UnitId
availablePkgs :: Set UnitId
availablePkgs = [UnitId] -> Set UnitId
forall a. Ord a => [a] -> Set a
Set.fromList ((ElaboratedPlanPackage -> UnitId)
-> [ElaboratedPlanPackage] -> [UnitId]
forall a b. (a -> b) -> [a] -> [b]
map ElaboratedPlanPackage -> UnitId
forall pkg. HasUnitId pkg => pkg -> UnitId
installedUnitId [ElaboratedPlanPackage]
pkgs)
hasReverseLibDeps :: Set UnitId
hasReverseLibDeps :: Set UnitId
hasReverseLibDeps =
[UnitId] -> Set UnitId
forall a. Ord a => [a] -> Set a
Set.fromList [ UnitId
depid
| InstallPlan.Configured ElaboratedConfiguredPackage
pkg <- [ElaboratedPlanPackage]
pkgs
, UnitId
depid <- ElaboratedConfiguredPackage -> [UnitId]
elabOrderLibDependencies ElaboratedConfiguredPackage
pkg ]
hasReverseExeDeps :: Set UnitId
hasReverseExeDeps :: Set UnitId
hasReverseExeDeps =
[UnitId] -> Set UnitId
forall a. Ord a => [a] -> Set a
Set.fromList [ UnitId
depid
| InstallPlan.Configured ElaboratedConfiguredPackage
pkg <- [ElaboratedPlanPackage]
pkgs
, UnitId
depid <- ElaboratedConfiguredPackage -> [UnitId]
elabOrderExeDependencies ElaboratedConfiguredPackage
pkg ]
mapConfiguredPackage :: (srcpkg -> srcpkg')
-> InstallPlan.GenericPlanPackage ipkg srcpkg
-> InstallPlan.GenericPlanPackage ipkg srcpkg'
mapConfiguredPackage :: forall srcpkg srcpkg' ipkg.
(srcpkg -> srcpkg')
-> GenericPlanPackage ipkg srcpkg
-> GenericPlanPackage ipkg srcpkg'
mapConfiguredPackage srcpkg -> srcpkg'
f (InstallPlan.Configured srcpkg
pkg) =
srcpkg' -> GenericPlanPackage ipkg srcpkg'
forall ipkg srcpkg. srcpkg -> GenericPlanPackage ipkg srcpkg
InstallPlan.Configured (srcpkg -> srcpkg'
f srcpkg
pkg)
mapConfiguredPackage srcpkg -> srcpkg'
f (InstallPlan.Installed srcpkg
pkg) =
srcpkg' -> GenericPlanPackage ipkg srcpkg'
forall ipkg srcpkg. srcpkg -> GenericPlanPackage ipkg srcpkg
InstallPlan.Installed (srcpkg -> srcpkg'
f srcpkg
pkg)
mapConfiguredPackage srcpkg -> srcpkg'
_ (InstallPlan.PreExisting ipkg
pkg) =
ipkg -> GenericPlanPackage ipkg srcpkg'
forall ipkg srcpkg. ipkg -> GenericPlanPackage ipkg srcpkg
InstallPlan.PreExisting ipkg
pkg
pruneInstallPlanToDependencies :: Set UnitId
-> ElaboratedInstallPlan
-> Either CannotPruneDependencies
ElaboratedInstallPlan
pruneInstallPlanToDependencies :: Set UnitId
-> ElaboratedInstallPlan
-> Either CannotPruneDependencies ElaboratedInstallPlan
pruneInstallPlanToDependencies Set UnitId
pkgTargets ElaboratedInstallPlan
installPlan =
Bool
-> Either CannotPruneDependencies ElaboratedInstallPlan
-> Either CannotPruneDependencies ElaboratedInstallPlan
forall a. HasCallStack => Bool -> a -> a
assert ((UnitId -> Bool) -> [UnitId] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (Maybe ElaboratedPlanPackage -> Bool
forall a. Maybe a -> Bool
isJust (Maybe ElaboratedPlanPackage -> Bool)
-> (UnitId -> Maybe ElaboratedPlanPackage) -> UnitId -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ElaboratedInstallPlan -> UnitId -> Maybe ElaboratedPlanPackage
forall ipkg srcpkg.
(IsUnit ipkg, IsUnit srcpkg) =>
GenericInstallPlan ipkg srcpkg
-> UnitId -> Maybe (GenericPlanPackage ipkg srcpkg)
InstallPlan.lookup ElaboratedInstallPlan
installPlan)
(Set UnitId -> [UnitId]
forall a. Set a -> [a]
Set.toList Set UnitId
pkgTargets)) (Either CannotPruneDependencies ElaboratedInstallPlan
-> Either CannotPruneDependencies ElaboratedInstallPlan)
-> Either CannotPruneDependencies ElaboratedInstallPlan
-> Either CannotPruneDependencies ElaboratedInstallPlan
forall a b. (a -> b) -> a -> b
$
(Graph ElaboratedPlanPackage -> ElaboratedInstallPlan)
-> Either CannotPruneDependencies (Graph ElaboratedPlanPackage)
-> Either CannotPruneDependencies ElaboratedInstallPlan
forall a b.
(a -> b)
-> Either CannotPruneDependencies a
-> Either CannotPruneDependencies b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (IndependentGoals
-> Graph ElaboratedPlanPackage -> ElaboratedInstallPlan
forall ipkg srcpkg.
(IsUnit ipkg, IsUnit srcpkg) =>
IndependentGoals
-> Graph (GenericPlanPackage ipkg srcpkg)
-> GenericInstallPlan ipkg srcpkg
InstallPlan.new (ElaboratedInstallPlan -> IndependentGoals
forall ipkg srcpkg.
GenericInstallPlan ipkg srcpkg -> IndependentGoals
InstallPlan.planIndepGoals ElaboratedInstallPlan
installPlan))
(Either CannotPruneDependencies (Graph ElaboratedPlanPackage)
-> Either CannotPruneDependencies ElaboratedInstallPlan)
-> (ElaboratedInstallPlan
-> Either CannotPruneDependencies (Graph ElaboratedPlanPackage))
-> ElaboratedInstallPlan
-> Either CannotPruneDependencies ElaboratedInstallPlan
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Graph ElaboratedPlanPackage
-> Either CannotPruneDependencies (Graph ElaboratedPlanPackage)
checkBrokenDeps
(Graph ElaboratedPlanPackage
-> Either CannotPruneDependencies (Graph ElaboratedPlanPackage))
-> (ElaboratedInstallPlan -> Graph ElaboratedPlanPackage)
-> ElaboratedInstallPlan
-> Either CannotPruneDependencies (Graph ElaboratedPlanPackage)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ElaboratedPlanPackage] -> Graph ElaboratedPlanPackage
forall a. (IsNode a, Show (Key a)) => [a] -> Graph a
Graph.fromDistinctList
([ElaboratedPlanPackage] -> Graph ElaboratedPlanPackage)
-> (ElaboratedInstallPlan -> [ElaboratedPlanPackage])
-> ElaboratedInstallPlan
-> Graph ElaboratedPlanPackage
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ElaboratedPlanPackage -> Bool)
-> [ElaboratedPlanPackage] -> [ElaboratedPlanPackage]
forall a. (a -> Bool) -> [a] -> [a]
filter (\ElaboratedPlanPackage
pkg -> ElaboratedPlanPackage -> UnitId
forall pkg. HasUnitId pkg => pkg -> UnitId
installedUnitId ElaboratedPlanPackage
pkg UnitId -> Set UnitId -> Bool
forall a. Ord a => a -> Set a -> Bool
`Set.notMember` Set UnitId
pkgTargets)
([ElaboratedPlanPackage] -> [ElaboratedPlanPackage])
-> (ElaboratedInstallPlan -> [ElaboratedPlanPackage])
-> ElaboratedInstallPlan
-> [ElaboratedPlanPackage]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ElaboratedInstallPlan -> [ElaboratedPlanPackage]
forall ipkg srcpkg.
GenericInstallPlan ipkg srcpkg -> [GenericPlanPackage ipkg srcpkg]
InstallPlan.toList
(ElaboratedInstallPlan
-> Either CannotPruneDependencies ElaboratedInstallPlan)
-> ElaboratedInstallPlan
-> Either CannotPruneDependencies ElaboratedInstallPlan
forall a b. (a -> b) -> a -> b
$ ElaboratedInstallPlan
installPlan
where
checkBrokenDeps :: Graph.Graph ElaboratedPlanPackage
-> Either CannotPruneDependencies
(Graph.Graph ElaboratedPlanPackage)
checkBrokenDeps :: Graph ElaboratedPlanPackage
-> Either CannotPruneDependencies (Graph ElaboratedPlanPackage)
checkBrokenDeps Graph ElaboratedPlanPackage
graph =
case Graph ElaboratedPlanPackage
-> [(ElaboratedPlanPackage, [Key ElaboratedPlanPackage])]
forall a. Graph a -> [(a, [Key a])]
Graph.broken Graph ElaboratedPlanPackage
graph of
[] -> Graph ElaboratedPlanPackage
-> Either CannotPruneDependencies (Graph ElaboratedPlanPackage)
forall a b. b -> Either a b
Right Graph ElaboratedPlanPackage
graph
[(ElaboratedPlanPackage, [Key ElaboratedPlanPackage])]
brokenPackages ->
CannotPruneDependencies
-> Either CannotPruneDependencies (Graph ElaboratedPlanPackage)
forall a b. a -> Either a b
Left (CannotPruneDependencies
-> Either CannotPruneDependencies (Graph ElaboratedPlanPackage))
-> CannotPruneDependencies
-> Either CannotPruneDependencies (Graph ElaboratedPlanPackage)
forall a b. (a -> b) -> a -> b
$ [(ElaboratedPlanPackage, [ElaboratedPlanPackage])]
-> CannotPruneDependencies
CannotPruneDependencies
[ (ElaboratedPlanPackage
pkg, [ElaboratedPlanPackage]
missingDeps)
| (ElaboratedPlanPackage
pkg, [UnitId]
missingDepIds) <- [(ElaboratedPlanPackage, [UnitId])]
[(ElaboratedPlanPackage, [Key ElaboratedPlanPackage])]
brokenPackages
, let missingDeps :: [ElaboratedPlanPackage]
missingDeps = (UnitId -> Maybe ElaboratedPlanPackage)
-> [UnitId] -> [ElaboratedPlanPackage]
forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe UnitId -> Maybe ElaboratedPlanPackage
lookupDep [UnitId]
missingDepIds
]
where
lookupDep :: UnitId -> Maybe ElaboratedPlanPackage
lookupDep = ElaboratedInstallPlan -> UnitId -> Maybe ElaboratedPlanPackage
forall ipkg srcpkg.
(IsUnit ipkg, IsUnit srcpkg) =>
GenericInstallPlan ipkg srcpkg
-> UnitId -> Maybe (GenericPlanPackage ipkg srcpkg)
InstallPlan.lookup ElaboratedInstallPlan
installPlan
newtype CannotPruneDependencies =
CannotPruneDependencies [(ElaboratedPlanPackage,
[ElaboratedPlanPackage])]
deriving (Int -> CannotPruneDependencies -> String -> String
[CannotPruneDependencies] -> String -> String
CannotPruneDependencies -> String
(Int -> CannotPruneDependencies -> String -> String)
-> (CannotPruneDependencies -> String)
-> ([CannotPruneDependencies] -> String -> String)
-> Show CannotPruneDependencies
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
$cshowsPrec :: Int -> CannotPruneDependencies -> String -> String
showsPrec :: Int -> CannotPruneDependencies -> String -> String
$cshow :: CannotPruneDependencies -> String
show :: CannotPruneDependencies -> String
$cshowList :: [CannotPruneDependencies] -> String -> String
showList :: [CannotPruneDependencies] -> String -> String
Show)
packageSetupScriptStyle :: PD.PackageDescription -> SetupScriptStyle
packageSetupScriptStyle :: PackageDescription -> SetupScriptStyle
packageSetupScriptStyle PackageDescription
pkg
| BuildType
buildType BuildType -> BuildType -> Bool
forall a. Eq a => a -> a -> Bool
== BuildType
PD.Custom
, Just SetupBuildInfo
setupbi <- PackageDescription -> Maybe SetupBuildInfo
PD.setupBuildInfo PackageDescription
pkg
, Bool -> Bool
not (SetupBuildInfo -> Bool
PD.defaultSetupDepends SetupBuildInfo
setupbi)
= SetupScriptStyle
SetupCustomExplicitDeps
| BuildType
buildType BuildType -> BuildType -> Bool
forall a. Eq a => a -> a -> Bool
== BuildType
PD.Custom
, Just SetupBuildInfo
setupbi <- PackageDescription -> Maybe SetupBuildInfo
PD.setupBuildInfo PackageDescription
pkg
, SetupBuildInfo -> Bool
PD.defaultSetupDepends SetupBuildInfo
setupbi
= SetupScriptStyle
SetupCustomImplicitDeps
| BuildType
buildType BuildType -> BuildType -> Bool
forall a. Eq a => a -> a -> Bool
== BuildType
PD.Custom
, Maybe SetupBuildInfo
Nothing <- PackageDescription -> Maybe SetupBuildInfo
PD.setupBuildInfo PackageDescription
pkg
= SetupScriptStyle
SetupCustomImplicitDeps
| PackageDescription -> CabalSpecVersion
PD.specVersion PackageDescription
pkg CabalSpecVersion -> CabalSpecVersion -> Bool
forall a. Ord a => a -> a -> Bool
> CabalSpecVersion
cabalSpecLatest
= SetupScriptStyle
SetupNonCustomExternalLib
| Bool
otherwise
= SetupScriptStyle
SetupNonCustomInternalLib
where
buildType :: BuildType
buildType = PackageDescription -> BuildType
PD.buildType PackageDescription
pkg
defaultSetupDeps :: Compiler -> Platform
-> PD.PackageDescription
-> Maybe [Dependency]
defaultSetupDeps :: Compiler -> Platform -> PackageDescription -> Maybe [Dependency]
defaultSetupDeps Compiler
compiler Platform
platform PackageDescription
pkg =
case PackageDescription -> SetupScriptStyle
packageSetupScriptStyle PackageDescription
pkg of
SetupScriptStyle
SetupCustomImplicitDeps ->
[Dependency] -> Maybe [Dependency]
forall a. a -> Maybe a
Just ([Dependency] -> Maybe [Dependency])
-> [Dependency] -> Maybe [Dependency]
forall a b. (a -> b) -> a -> b
$
[ PackageName
-> VersionRange -> NonEmptySet LibraryName -> Dependency
Dependency PackageName
depPkgname VersionRange
anyVersion NonEmptySet LibraryName
mainLibSet
| PackageName
depPkgname <- Compiler -> Platform -> [PackageName]
legacyCustomSetupPkgs Compiler
compiler Platform
platform ] [Dependency] -> [Dependency] -> [Dependency]
forall a. [a] -> [a] -> [a]
++
[ PackageName
-> VersionRange -> NonEmptySet LibraryName -> Dependency
Dependency PackageName
cabalPkgname VersionRange
cabalConstraint NonEmptySet LibraryName
mainLibSet
| PackageDescription -> PackageName
forall pkg. Package pkg => pkg -> PackageName
packageName PackageDescription
pkg PackageName -> PackageName -> Bool
forall a. Eq a => a -> a -> Bool
/= PackageName
cabalPkgname ]
where
cabalConstraint :: VersionRange
cabalConstraint = Version -> VersionRange
orLaterVersion (CabalSpecVersion -> Version
csvToVersion (PackageDescription -> CabalSpecVersion
PD.specVersion PackageDescription
pkg))
VersionRange -> VersionRange -> VersionRange
`intersectVersionRanges`
Version -> VersionRange
earlierVersion Version
cabalCompatMaxVer
cabalCompatMaxVer :: Version
cabalCompatMaxVer = [Int] -> Version
mkVersion [Int
1,Int
25]
SetupScriptStyle
SetupNonCustomExternalLib ->
[Dependency] -> Maybe [Dependency]
forall a. a -> Maybe a
Just [ PackageName
-> VersionRange -> NonEmptySet LibraryName -> Dependency
Dependency PackageName
cabalPkgname VersionRange
cabalConstraint NonEmptySet LibraryName
mainLibSet
, PackageName
-> VersionRange -> NonEmptySet LibraryName -> Dependency
Dependency PackageName
basePkgname VersionRange
anyVersion NonEmptySet LibraryName
mainLibSet]
where
cabalConstraint :: VersionRange
cabalConstraint = Version -> VersionRange
orLaterVersion (CabalSpecVersion -> Version
csvToVersion (PackageDescription -> CabalSpecVersion
PD.specVersion PackageDescription
pkg))
SetupScriptStyle
SetupNonCustomInternalLib -> [Dependency] -> Maybe [Dependency]
forall a. a -> Maybe a
Just []
SetupScriptStyle
SetupCustomExplicitDeps ->
String -> Maybe [Dependency]
forall a. HasCallStack => String -> a
error (String -> Maybe [Dependency]) -> String -> Maybe [Dependency]
forall a b. (a -> b) -> a -> b
$ String
"defaultSetupDeps: called for a package with explicit "
String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"setup deps: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ PackageIdentifier -> String
forall a. Pretty a => a -> String
prettyShow (PackageDescription -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId PackageDescription
pkg)
where
csvToVersion :: CabalSpecVersion -> Version
csvToVersion :: CabalSpecVersion -> Version
csvToVersion = [Int] -> Version
mkVersion ([Int] -> Version)
-> (CabalSpecVersion -> [Int]) -> CabalSpecVersion -> Version
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CabalSpecVersion -> [Int]
cabalSpecMinimumLibraryVersion
packageSetupScriptSpecVersion :: SetupScriptStyle
-> PD.PackageDescription
-> Graph.Graph NonSetupLibDepSolverPlanPackage
-> ComponentDeps [SolverId]
-> Version
packageSetupScriptSpecVersion :: SetupScriptStyle
-> PackageDescription
-> Graph NonSetupLibDepSolverPlanPackage
-> ComponentDeps [SolverId]
-> Version
packageSetupScriptSpecVersion SetupScriptStyle
SetupNonCustomInternalLib PackageDescription
_ Graph NonSetupLibDepSolverPlanPackage
_ ComponentDeps [SolverId]
_ =
Version
cabalVersion
packageSetupScriptSpecVersion SetupScriptStyle
SetupCustomImplicitDeps PackageDescription
pkg Graph NonSetupLibDepSolverPlanPackage
_ ComponentDeps [SolverId]
_
| PackageDescription -> PackageName
forall pkg. Package pkg => pkg -> PackageName
packageName PackageDescription
pkg PackageName -> PackageName -> Bool
forall a. Eq a => a -> a -> Bool
== PackageName
cabalPkgname
= PackageDescription -> Version
forall pkg. Package pkg => pkg -> Version
packageVersion PackageDescription
pkg
packageSetupScriptSpecVersion SetupScriptStyle
_ PackageDescription
pkg Graph NonSetupLibDepSolverPlanPackage
libDepGraph ComponentDeps [SolverId]
deps =
case (PackageIdentifier -> Bool)
-> [PackageIdentifier] -> Maybe PackageIdentifier
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Maybe a
find ((PackageName
cabalPkgname PackageName -> PackageName -> Bool
forall a. Eq a => a -> a -> Bool
==) (PackageName -> Bool)
-> (PackageIdentifier -> PackageName) -> PackageIdentifier -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PackageIdentifier -> PackageName
forall pkg. Package pkg => pkg -> PackageName
packageName) [PackageIdentifier]
setupLibDeps of
Just PackageIdentifier
dep -> PackageIdentifier -> Version
forall pkg. Package pkg => pkg -> Version
packageVersion PackageIdentifier
dep
Maybe PackageIdentifier
Nothing -> [Int] -> Version
mkVersion (CabalSpecVersion -> [Int]
cabalSpecMinimumLibraryVersion (PackageDescription -> CabalSpecVersion
PD.specVersion PackageDescription
pkg))
where
setupLibDeps :: [PackageIdentifier]
setupLibDeps = (NonSetupLibDepSolverPlanPackage -> PackageIdentifier)
-> [NonSetupLibDepSolverPlanPackage] -> [PackageIdentifier]
forall a b. (a -> b) -> [a] -> [b]
map NonSetupLibDepSolverPlanPackage -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId ([NonSetupLibDepSolverPlanPackage] -> [PackageIdentifier])
-> [NonSetupLibDepSolverPlanPackage] -> [PackageIdentifier]
forall a b. (a -> b) -> a -> b
$ [NonSetupLibDepSolverPlanPackage]
-> Maybe [NonSetupLibDepSolverPlanPackage]
-> [NonSetupLibDepSolverPlanPackage]
forall a. a -> Maybe a -> a
fromMaybe [] (Maybe [NonSetupLibDepSolverPlanPackage]
-> [NonSetupLibDepSolverPlanPackage])
-> Maybe [NonSetupLibDepSolverPlanPackage]
-> [NonSetupLibDepSolverPlanPackage]
forall a b. (a -> b) -> a -> b
$
Graph NonSetupLibDepSolverPlanPackage
-> [Key NonSetupLibDepSolverPlanPackage]
-> Maybe [NonSetupLibDepSolverPlanPackage]
forall a. Graph a -> [Key a] -> Maybe [a]
Graph.closure Graph NonSetupLibDepSolverPlanPackage
libDepGraph (ComponentDeps [SolverId] -> [SolverId]
forall a. Monoid a => ComponentDeps a -> a
CD.setupDeps ComponentDeps [SolverId]
deps)
cabalPkgname, basePkgname :: PackageName
cabalPkgname :: PackageName
cabalPkgname = String -> PackageName
mkPackageName String
"Cabal"
basePkgname :: PackageName
basePkgname = String -> PackageName
mkPackageName String
"base"
legacyCustomSetupPkgs :: Compiler -> Platform -> [PackageName]
legacyCustomSetupPkgs :: Compiler -> Platform -> [PackageName]
legacyCustomSetupPkgs Compiler
compiler (Platform Arch
_ OS
os) =
(String -> PackageName) -> [String] -> [PackageName]
forall a b. (a -> b) -> [a] -> [b]
map String -> PackageName
mkPackageName ([String] -> [PackageName]) -> [String] -> [PackageName]
forall a b. (a -> b) -> a -> b
$
[ String
"array", String
"base", String
"binary", String
"bytestring", String
"containers"
, String
"deepseq", String
"directory", String
"filepath", String
"pretty"
, String
"process", String
"time", String
"transformers" ]
[String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [ String
"Win32" | OS
os OS -> OS -> Bool
forall a. Eq a => a -> a -> Bool
== OS
Windows ]
[String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [ String
"unix" | OS
os OS -> OS -> Bool
forall a. Eq a => a -> a -> Bool
/= OS
Windows ]
[String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [ String
"ghc-prim" | Bool
isGHC ]
[String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [ String
"template-haskell" | Bool
isGHC ]
[String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [ String
"old-time" | Bool
notGHC710 ]
where
isGHC :: Bool
isGHC = CompilerFlavor -> Compiler -> Bool
compilerCompatFlavor CompilerFlavor
GHC Compiler
compiler
notGHC710 :: Bool
notGHC710 = case CompilerFlavor -> Compiler -> Maybe Version
compilerCompatVersion CompilerFlavor
GHC Compiler
compiler of
Maybe Version
Nothing -> Bool
False
Just Version
v -> Version
v Version -> Version -> Bool
forall a. Ord a => a -> a -> Bool
<= [Int] -> Version
mkVersion [Int
7,Int
9]
setupHsScriptOptions :: ElaboratedReadyPackage
-> ElaboratedInstallPlan
-> ElaboratedSharedConfig
-> DistDirLayout
-> FilePath
-> FilePath
-> Bool
-> Lock
-> SetupScriptOptions
setupHsScriptOptions :: ElaboratedReadyPackage
-> ElaboratedInstallPlan
-> ElaboratedSharedConfig
-> DistDirLayout
-> String
-> String
-> Bool
-> Lock
-> SetupScriptOptions
setupHsScriptOptions (ReadyPackage elab :: ElaboratedConfiguredPackage
elab@ElaboratedConfiguredPackage{Bool
[String]
[Maybe PackageDB]
PackageDBStack
[PathTemplate]
[ComponentTarget]
Maybe String
Maybe CabalFileText
Maybe PathTemplate
Maybe TestShowDetails
Maybe PackageSourceHash
Maybe ComponentTarget
Map String String
Map String [String]
Map ModuleName Module
Map ModuleName OpenModule
OptionalStanzaMap (Maybe Bool)
OptionalStanzaSet
PackageIdentifier
ComponentRequestedSpec
UnitId
Version
FlagAssignment
PackageDescription
InstalledPackageId
DebugInfoLevel
OptimisationLevel
ProfDetailLevel
HaddockTarget
ModuleShape
InstallDirs String
DumpBuildInfo
UnresolvedPkgLoc
SetupScriptStyle
BuildStyle
ElaboratedPackageOrComponent
elabUnitId :: ElaboratedConfiguredPackage -> UnitId
elabComponentId :: ElaboratedConfiguredPackage -> InstalledPackageId
elabInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName Module
elabLinkedInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName OpenModule
elabIsCanonical :: ElaboratedConfiguredPackage -> Bool
elabPkgSourceId :: ElaboratedConfiguredPackage -> PackageIdentifier
elabModuleShape :: ElaboratedConfiguredPackage -> ModuleShape
elabFlagAssignment :: ElaboratedConfiguredPackage -> FlagAssignment
elabFlagDefaults :: ElaboratedConfiguredPackage -> FlagAssignment
elabPkgDescription :: ElaboratedConfiguredPackage -> PackageDescription
elabPkgSourceLocation :: ElaboratedConfiguredPackage -> UnresolvedPkgLoc
elabPkgSourceHash :: ElaboratedConfiguredPackage -> Maybe PackageSourceHash
elabLocalToProject :: ElaboratedConfiguredPackage -> Bool
elabBuildStyle :: ElaboratedConfiguredPackage -> BuildStyle
elabEnabledSpec :: ElaboratedConfiguredPackage -> ComponentRequestedSpec
elabStanzasAvailable :: ElaboratedConfiguredPackage -> OptionalStanzaSet
elabStanzasRequested :: ElaboratedConfiguredPackage -> OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: ElaboratedConfiguredPackage -> [Maybe PackageDB]
elabSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabPkgDescriptionOverride :: ElaboratedConfiguredPackage -> Maybe CabalFileText
elabVanillaLib :: ElaboratedConfiguredPackage -> Bool
elabSharedLib :: ElaboratedConfiguredPackage -> Bool
elabStaticLib :: ElaboratedConfiguredPackage -> Bool
elabDynExe :: ElaboratedConfiguredPackage -> Bool
elabFullyStaticExe :: ElaboratedConfiguredPackage -> Bool
elabGHCiLib :: ElaboratedConfiguredPackage -> Bool
elabProfLib :: ElaboratedConfiguredPackage -> Bool
elabProfExe :: ElaboratedConfiguredPackage -> Bool
elabProfLibDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabProfExeDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabCoverage :: ElaboratedConfiguredPackage -> Bool
elabOptimization :: ElaboratedConfiguredPackage -> OptimisationLevel
elabSplitObjs :: ElaboratedConfiguredPackage -> Bool
elabSplitSections :: ElaboratedConfiguredPackage -> Bool
elabStripLibs :: ElaboratedConfiguredPackage -> Bool
elabStripExes :: ElaboratedConfiguredPackage -> Bool
elabDebugInfo :: ElaboratedConfiguredPackage -> DebugInfoLevel
elabDumpBuildInfo :: ElaboratedConfiguredPackage -> DumpBuildInfo
elabProgramPaths :: ElaboratedConfiguredPackage -> Map String String
elabProgramArgs :: ElaboratedConfiguredPackage -> Map String [String]
elabProgramPathExtra :: ElaboratedConfiguredPackage -> [String]
elabConfigureScriptArgs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirsStatic :: ElaboratedConfiguredPackage -> [String]
elabExtraFrameworkDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraIncludeDirs :: ElaboratedConfiguredPackage -> [String]
elabProgPrefix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabProgSuffix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabInstallDirs :: ElaboratedConfiguredPackage -> InstallDirs String
elabHaddockHoogle :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtml :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtmlLocation :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockForeignLibs :: ElaboratedConfiguredPackage -> Bool
elabHaddockForHackage :: ElaboratedConfiguredPackage -> HaddockTarget
elabHaddockExecutables :: ElaboratedConfiguredPackage -> Bool
elabHaddockTestSuites :: ElaboratedConfiguredPackage -> Bool
elabHaddockBenchmarks :: ElaboratedConfiguredPackage -> Bool
elabHaddockInternal :: ElaboratedConfiguredPackage -> Bool
elabHaddockCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockLinkedSource :: ElaboratedConfiguredPackage -> Bool
elabHaddockQuickJump :: ElaboratedConfiguredPackage -> Bool
elabHaddockHscolourCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockContents :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestMachineLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestHumanLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestShowDetails :: ElaboratedConfiguredPackage -> Maybe TestShowDetails
elabTestKeepTix :: ElaboratedConfiguredPackage -> Bool
elabTestWrapper :: ElaboratedConfiguredPackage -> Maybe String
elabTestFailWhenNoTestSuites :: ElaboratedConfiguredPackage -> Bool
elabTestTestOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabBenchmarkOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabSetupScriptStyle :: ElaboratedConfiguredPackage -> SetupScriptStyle
elabSetupScriptCliVersion :: ElaboratedConfiguredPackage -> Version
elabConfigureTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabTestTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBenchTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabReplTarget :: ElaboratedConfiguredPackage -> Maybe ComponentTarget
elabHaddockTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildHaddocks :: ElaboratedConfiguredPackage -> Bool
elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabUnitId :: UnitId
elabComponentId :: InstalledPackageId
elabInstantiatedWith :: Map ModuleName Module
elabLinkedInstantiatedWith :: Map ModuleName OpenModule
elabIsCanonical :: Bool
elabPkgSourceId :: PackageIdentifier
elabModuleShape :: ModuleShape
elabFlagAssignment :: FlagAssignment
elabFlagDefaults :: FlagAssignment
elabPkgDescription :: PackageDescription
elabPkgSourceLocation :: UnresolvedPkgLoc
elabPkgSourceHash :: Maybe PackageSourceHash
elabLocalToProject :: Bool
elabBuildStyle :: BuildStyle
elabEnabledSpec :: ComponentRequestedSpec
elabStanzasAvailable :: OptionalStanzaSet
elabStanzasRequested :: OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: [Maybe PackageDB]
elabSetupPackageDBStack :: PackageDBStack
elabBuildPackageDBStack :: PackageDBStack
elabRegisterPackageDBStack :: PackageDBStack
elabInplaceSetupPackageDBStack :: PackageDBStack
elabInplaceBuildPackageDBStack :: PackageDBStack
elabInplaceRegisterPackageDBStack :: PackageDBStack
elabPkgDescriptionOverride :: Maybe CabalFileText
elabVanillaLib :: Bool
elabSharedLib :: Bool
elabStaticLib :: Bool
elabDynExe :: Bool
elabFullyStaticExe :: Bool
elabGHCiLib :: Bool
elabProfLib :: Bool
elabProfExe :: Bool
elabProfLibDetail :: ProfDetailLevel
elabProfExeDetail :: ProfDetailLevel
elabCoverage :: Bool
elabOptimization :: OptimisationLevel
elabSplitObjs :: Bool
elabSplitSections :: Bool
elabStripLibs :: Bool
elabStripExes :: Bool
elabDebugInfo :: DebugInfoLevel
elabDumpBuildInfo :: DumpBuildInfo
elabProgramPaths :: Map String String
elabProgramArgs :: Map String [String]
elabProgramPathExtra :: [String]
elabConfigureScriptArgs :: [String]
elabExtraLibDirs :: [String]
elabExtraLibDirsStatic :: [String]
elabExtraFrameworkDirs :: [String]
elabExtraIncludeDirs :: [String]
elabProgPrefix :: Maybe PathTemplate
elabProgSuffix :: Maybe PathTemplate
elabInstallDirs :: InstallDirs String
elabHaddockHoogle :: Bool
elabHaddockHtml :: Bool
elabHaddockHtmlLocation :: Maybe String
elabHaddockForeignLibs :: Bool
elabHaddockForHackage :: HaddockTarget
elabHaddockExecutables :: Bool
elabHaddockTestSuites :: Bool
elabHaddockBenchmarks :: Bool
elabHaddockInternal :: Bool
elabHaddockCss :: Maybe String
elabHaddockLinkedSource :: Bool
elabHaddockQuickJump :: Bool
elabHaddockHscolourCss :: Maybe String
elabHaddockContents :: Maybe PathTemplate
elabTestMachineLog :: Maybe PathTemplate
elabTestHumanLog :: Maybe PathTemplate
elabTestShowDetails :: Maybe TestShowDetails
elabTestKeepTix :: Bool
elabTestWrapper :: Maybe String
elabTestFailWhenNoTestSuites :: Bool
elabTestTestOptions :: [PathTemplate]
elabBenchmarkOptions :: [PathTemplate]
elabSetupScriptStyle :: SetupScriptStyle
elabSetupScriptCliVersion :: Version
elabConfigureTargets :: [ComponentTarget]
elabBuildTargets :: [ComponentTarget]
elabTestTargets :: [ComponentTarget]
elabBenchTargets :: [ComponentTarget]
elabReplTarget :: Maybe ComponentTarget
elabHaddockTargets :: [ComponentTarget]
elabBuildHaddocks :: Bool
elabPkgOrComp :: ElaboratedPackageOrComponent
..})
ElaboratedInstallPlan
plan ElaboratedSharedConfig{Platform
Compiler
ProgramDb
ReplOptions
pkgConfigCompiler :: ElaboratedSharedConfig -> Compiler
pkgConfigPlatform :: ElaboratedSharedConfig -> Platform
pkgConfigCompilerProgs :: ElaboratedSharedConfig -> ProgramDb
pkgConfigReplOptions :: ElaboratedSharedConfig -> ReplOptions
pkgConfigPlatform :: Platform
pkgConfigCompiler :: Compiler
pkgConfigCompilerProgs :: ProgramDb
pkgConfigReplOptions :: ReplOptions
..} DistDirLayout
distdir String
srcdir String
builddir
Bool
isParallelBuild Lock
cacheLock =
SetupScriptOptions {
useCabalVersion :: VersionRange
useCabalVersion = Version -> VersionRange
thisVersion Version
elabSetupScriptCliVersion,
useCabalSpecVersion :: Maybe Version
useCabalSpecVersion = Version -> Maybe Version
forall a. a -> Maybe a
Just Version
elabSetupScriptCliVersion,
useCompiler :: Maybe Compiler
useCompiler = Compiler -> Maybe Compiler
forall a. a -> Maybe a
Just Compiler
pkgConfigCompiler,
usePlatform :: Maybe Platform
usePlatform = Platform -> Maybe Platform
forall a. a -> Maybe a
Just Platform
pkgConfigPlatform,
usePackageDB :: PackageDBStack
usePackageDB = PackageDBStack
elabSetupPackageDBStack,
usePackageIndex :: Maybe InstalledPackageIndex
usePackageIndex = Maybe InstalledPackageIndex
forall a. Maybe a
Nothing,
useDependencies :: [(InstalledPackageId, PackageIdentifier)]
useDependencies = [ (InstalledPackageId
uid, PackageIdentifier
srcid)
| ConfiguredId PackageIdentifier
srcid (Just (CLibName LibraryName
LMainLibName)) InstalledPackageId
uid
<- ElaboratedConfiguredPackage -> [ConfiguredId]
elabSetupDependencies ElaboratedConfiguredPackage
elab ],
useDependenciesExclusive :: Bool
useDependenciesExclusive = Bool
True,
useVersionMacros :: Bool
useVersionMacros = SetupScriptStyle
elabSetupScriptStyle SetupScriptStyle -> SetupScriptStyle -> Bool
forall a. Eq a => a -> a -> Bool
== SetupScriptStyle
SetupCustomExplicitDeps,
useProgramDb :: ProgramDb
useProgramDb = ProgramDb
pkgConfigCompilerProgs,
useDistPref :: String
useDistPref = String
builddir,
useLoggingHandle :: Maybe Handle
useLoggingHandle = Maybe Handle
forall a. Maybe a
Nothing,
useWorkingDir :: Maybe String
useWorkingDir = String -> Maybe String
forall a. a -> Maybe a
Just String
srcdir,
useExtraPathEnv :: [String]
useExtraPathEnv = ElaboratedConfiguredPackage -> [String]
elabExeDependencyPaths ElaboratedConfiguredPackage
elab,
useExtraEnvOverrides :: [(String, Maybe String)]
useExtraEnvOverrides = DistDirLayout -> ElaboratedInstallPlan -> [(String, Maybe String)]
dataDirsEnvironmentForPlan DistDirLayout
distdir ElaboratedInstallPlan
plan,
useWin32CleanHack :: Bool
useWin32CleanHack = Bool
False,
forceExternalSetupMethod :: Bool
forceExternalSetupMethod = Bool
isParallelBuild,
setupCacheLock :: Maybe Lock
setupCacheLock = Lock -> Maybe Lock
forall a. a -> Maybe a
Just Lock
cacheLock,
isInteractive :: Bool
isInteractive = Bool
False
}
userInstallDirTemplates :: Compiler
-> IO InstallDirs.InstallDirTemplates
userInstallDirTemplates :: Compiler -> IO InstallDirTemplates
userInstallDirTemplates Compiler
compiler = do
CompilerFlavor -> Bool -> Bool -> IO InstallDirTemplates
InstallDirs.defaultInstallDirs
(Compiler -> CompilerFlavor
compilerFlavor Compiler
compiler)
Bool
True
Bool
False
storePackageInstallDirs :: StoreDirLayout
-> CompilerId
-> InstalledPackageId
-> InstallDirs.InstallDirs FilePath
storePackageInstallDirs :: StoreDirLayout
-> CompilerId -> InstalledPackageId -> InstallDirs String
storePackageInstallDirs StoreDirLayout
storeDirLayout CompilerId
compid InstalledPackageId
ipkgid =
StoreDirLayout -> CompilerId -> UnitId -> InstallDirs String
storePackageInstallDirs' StoreDirLayout
storeDirLayout CompilerId
compid (UnitId -> InstallDirs String) -> UnitId -> InstallDirs String
forall a b. (a -> b) -> a -> b
$ InstalledPackageId -> UnitId
newSimpleUnitId InstalledPackageId
ipkgid
storePackageInstallDirs' :: StoreDirLayout
-> CompilerId
-> UnitId
-> InstallDirs.InstallDirs FilePath
storePackageInstallDirs' :: StoreDirLayout -> CompilerId -> UnitId -> InstallDirs String
storePackageInstallDirs' StoreDirLayout{ CompilerId -> UnitId -> String
storePackageDirectory :: CompilerId -> UnitId -> String
storePackageDirectory :: StoreDirLayout -> CompilerId -> UnitId -> String
storePackageDirectory
, CompilerId -> String
storeDirectory :: CompilerId -> String
storeDirectory :: StoreDirLayout -> CompilerId -> String
storeDirectory }
CompilerId
compid UnitId
unitid =
InstallDirs.InstallDirs {String
prefix :: String
bindir :: String
libdir :: String
libsubdir :: String
dynlibdir :: String
flibdir :: String
libexecdir :: String
libexecsubdir :: String
includedir :: String
datadir :: String
datasubdir :: String
docdir :: String
mandir :: String
htmldir :: String
haddockdir :: String
sysconfdir :: String
bindir :: String
datadir :: String
datasubdir :: String
docdir :: String
dynlibdir :: String
flibdir :: String
haddockdir :: String
htmldir :: String
includedir :: String
libdir :: String
libexecdir :: String
libexecsubdir :: String
libsubdir :: String
mandir :: String
prefix :: String
sysconfdir :: String
..}
where
store :: String
store = CompilerId -> String
storeDirectory CompilerId
compid
prefix :: String
prefix = CompilerId -> UnitId -> String
storePackageDirectory CompilerId
compid UnitId
unitid
bindir :: String
bindir = String
prefix String -> String -> String
</> String
"bin"
libdir :: String
libdir = String
prefix String -> String -> String
</> String
"lib"
libsubdir :: String
libsubdir = String
""
dynlibdir :: String
dynlibdir | OS
buildOS OS -> OS -> Bool
forall a. Eq a => a -> a -> Bool
== OS
OSX = String
store String -> String -> String
</> String
"lib"
| Bool
otherwise = String
libdir
flibdir :: String
flibdir = String
libdir
libexecdir :: String
libexecdir = String
prefix String -> String -> String
</> String
"libexec"
libexecsubdir :: String
libexecsubdir= String
""
includedir :: String
includedir = String
libdir String -> String -> String
</> String
"include"
datadir :: String
datadir = String
prefix String -> String -> String
</> String
"share"
datasubdir :: String
datasubdir = String
""
docdir :: String
docdir = String
datadir String -> String -> String
</> String
"doc"
mandir :: String
mandir = String
datadir String -> String -> String
</> String
"man"
htmldir :: String
htmldir = String
docdir String -> String -> String
</> String
"html"
haddockdir :: String
haddockdir = String
htmldir
sysconfdir :: String
sysconfdir = String
prefix String -> String -> String
</> String
"etc"
computeInstallDirs :: StoreDirLayout
-> InstallDirs.InstallDirTemplates
-> ElaboratedSharedConfig
-> ElaboratedConfiguredPackage
-> InstallDirs.InstallDirs FilePath
computeInstallDirs :: StoreDirLayout
-> InstallDirTemplates
-> ElaboratedSharedConfig
-> ElaboratedConfiguredPackage
-> InstallDirs String
computeInstallDirs StoreDirLayout
storeDirLayout InstallDirTemplates
defaultInstallDirs ElaboratedSharedConfig
elaboratedShared ElaboratedConfiguredPackage
elab
| ElaboratedConfiguredPackage -> BuildStyle
elabBuildStyle ElaboratedConfiguredPackage
elab BuildStyle -> BuildStyle -> Bool
forall a. Eq a => a -> a -> Bool
== BuildStyle
BuildInplaceOnly
= (PackageIdentifier
-> UnitId
-> CompilerInfo
-> CopyDest
-> Platform
-> InstallDirTemplates
-> InstallDirs String
InstallDirs.absoluteInstallDirs
(ElaboratedConfiguredPackage -> PackageIdentifier
elabPkgSourceId ElaboratedConfiguredPackage
elab)
(ElaboratedConfiguredPackage -> UnitId
elabUnitId ElaboratedConfiguredPackage
elab)
(Compiler -> CompilerInfo
compilerInfo (ElaboratedSharedConfig -> Compiler
pkgConfigCompiler ElaboratedSharedConfig
elaboratedShared))
CopyDest
InstallDirs.NoCopyDest
(ElaboratedSharedConfig -> Platform
pkgConfigPlatform ElaboratedSharedConfig
elaboratedShared)
InstallDirTemplates
defaultInstallDirs) {
libsubdir :: String
InstallDirs.libsubdir = String
"",
libexecsubdir :: String
InstallDirs.libexecsubdir = String
"",
datasubdir :: String
InstallDirs.datasubdir = String
""
}
| Bool
otherwise
= StoreDirLayout -> CompilerId -> UnitId -> InstallDirs String
storePackageInstallDirs'
StoreDirLayout
storeDirLayout
(Compiler -> CompilerId
compilerId (ElaboratedSharedConfig -> Compiler
pkgConfigCompiler ElaboratedSharedConfig
elaboratedShared))
(ElaboratedConfiguredPackage -> UnitId
elabUnitId ElaboratedConfiguredPackage
elab)
setupHsConfigureFlags :: ElaboratedReadyPackage
-> ElaboratedSharedConfig
-> Verbosity
-> FilePath
-> Cabal.ConfigFlags
setupHsConfigureFlags :: ElaboratedReadyPackage
-> ElaboratedSharedConfig -> Verbosity -> String -> ConfigFlags
setupHsConfigureFlags (ReadyPackage elab :: ElaboratedConfiguredPackage
elab@ElaboratedConfiguredPackage{Bool
[String]
[Maybe PackageDB]
PackageDBStack
[PathTemplate]
[ComponentTarget]
Maybe String
Maybe CabalFileText
Maybe PathTemplate
Maybe TestShowDetails
Maybe PackageSourceHash
Maybe ComponentTarget
Map String String
Map String [String]
Map ModuleName Module
Map ModuleName OpenModule
OptionalStanzaMap (Maybe Bool)
OptionalStanzaSet
PackageIdentifier
ComponentRequestedSpec
UnitId
Version
FlagAssignment
PackageDescription
InstalledPackageId
DebugInfoLevel
OptimisationLevel
ProfDetailLevel
HaddockTarget
ModuleShape
InstallDirs String
DumpBuildInfo
UnresolvedPkgLoc
SetupScriptStyle
BuildStyle
ElaboratedPackageOrComponent
elabUnitId :: ElaboratedConfiguredPackage -> UnitId
elabComponentId :: ElaboratedConfiguredPackage -> InstalledPackageId
elabInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName Module
elabLinkedInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName OpenModule
elabIsCanonical :: ElaboratedConfiguredPackage -> Bool
elabPkgSourceId :: ElaboratedConfiguredPackage -> PackageIdentifier
elabModuleShape :: ElaboratedConfiguredPackage -> ModuleShape
elabFlagAssignment :: ElaboratedConfiguredPackage -> FlagAssignment
elabFlagDefaults :: ElaboratedConfiguredPackage -> FlagAssignment
elabPkgDescription :: ElaboratedConfiguredPackage -> PackageDescription
elabPkgSourceLocation :: ElaboratedConfiguredPackage -> UnresolvedPkgLoc
elabPkgSourceHash :: ElaboratedConfiguredPackage -> Maybe PackageSourceHash
elabLocalToProject :: ElaboratedConfiguredPackage -> Bool
elabBuildStyle :: ElaboratedConfiguredPackage -> BuildStyle
elabEnabledSpec :: ElaboratedConfiguredPackage -> ComponentRequestedSpec
elabStanzasAvailable :: ElaboratedConfiguredPackage -> OptionalStanzaSet
elabStanzasRequested :: ElaboratedConfiguredPackage -> OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: ElaboratedConfiguredPackage -> [Maybe PackageDB]
elabSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabPkgDescriptionOverride :: ElaboratedConfiguredPackage -> Maybe CabalFileText
elabVanillaLib :: ElaboratedConfiguredPackage -> Bool
elabSharedLib :: ElaboratedConfiguredPackage -> Bool
elabStaticLib :: ElaboratedConfiguredPackage -> Bool
elabDynExe :: ElaboratedConfiguredPackage -> Bool
elabFullyStaticExe :: ElaboratedConfiguredPackage -> Bool
elabGHCiLib :: ElaboratedConfiguredPackage -> Bool
elabProfLib :: ElaboratedConfiguredPackage -> Bool
elabProfExe :: ElaboratedConfiguredPackage -> Bool
elabProfLibDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabProfExeDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabCoverage :: ElaboratedConfiguredPackage -> Bool
elabOptimization :: ElaboratedConfiguredPackage -> OptimisationLevel
elabSplitObjs :: ElaboratedConfiguredPackage -> Bool
elabSplitSections :: ElaboratedConfiguredPackage -> Bool
elabStripLibs :: ElaboratedConfiguredPackage -> Bool
elabStripExes :: ElaboratedConfiguredPackage -> Bool
elabDebugInfo :: ElaboratedConfiguredPackage -> DebugInfoLevel
elabDumpBuildInfo :: ElaboratedConfiguredPackage -> DumpBuildInfo
elabProgramPaths :: ElaboratedConfiguredPackage -> Map String String
elabProgramArgs :: ElaboratedConfiguredPackage -> Map String [String]
elabProgramPathExtra :: ElaboratedConfiguredPackage -> [String]
elabConfigureScriptArgs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirsStatic :: ElaboratedConfiguredPackage -> [String]
elabExtraFrameworkDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraIncludeDirs :: ElaboratedConfiguredPackage -> [String]
elabProgPrefix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabProgSuffix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabInstallDirs :: ElaboratedConfiguredPackage -> InstallDirs String
elabHaddockHoogle :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtml :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtmlLocation :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockForeignLibs :: ElaboratedConfiguredPackage -> Bool
elabHaddockForHackage :: ElaboratedConfiguredPackage -> HaddockTarget
elabHaddockExecutables :: ElaboratedConfiguredPackage -> Bool
elabHaddockTestSuites :: ElaboratedConfiguredPackage -> Bool
elabHaddockBenchmarks :: ElaboratedConfiguredPackage -> Bool
elabHaddockInternal :: ElaboratedConfiguredPackage -> Bool
elabHaddockCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockLinkedSource :: ElaboratedConfiguredPackage -> Bool
elabHaddockQuickJump :: ElaboratedConfiguredPackage -> Bool
elabHaddockHscolourCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockContents :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestMachineLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestHumanLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestShowDetails :: ElaboratedConfiguredPackage -> Maybe TestShowDetails
elabTestKeepTix :: ElaboratedConfiguredPackage -> Bool
elabTestWrapper :: ElaboratedConfiguredPackage -> Maybe String
elabTestFailWhenNoTestSuites :: ElaboratedConfiguredPackage -> Bool
elabTestTestOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabBenchmarkOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabSetupScriptStyle :: ElaboratedConfiguredPackage -> SetupScriptStyle
elabSetupScriptCliVersion :: ElaboratedConfiguredPackage -> Version
elabConfigureTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabTestTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBenchTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabReplTarget :: ElaboratedConfiguredPackage -> Maybe ComponentTarget
elabHaddockTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildHaddocks :: ElaboratedConfiguredPackage -> Bool
elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabUnitId :: UnitId
elabComponentId :: InstalledPackageId
elabInstantiatedWith :: Map ModuleName Module
elabLinkedInstantiatedWith :: Map ModuleName OpenModule
elabIsCanonical :: Bool
elabPkgSourceId :: PackageIdentifier
elabModuleShape :: ModuleShape
elabFlagAssignment :: FlagAssignment
elabFlagDefaults :: FlagAssignment
elabPkgDescription :: PackageDescription
elabPkgSourceLocation :: UnresolvedPkgLoc
elabPkgSourceHash :: Maybe PackageSourceHash
elabLocalToProject :: Bool
elabBuildStyle :: BuildStyle
elabEnabledSpec :: ComponentRequestedSpec
elabStanzasAvailable :: OptionalStanzaSet
elabStanzasRequested :: OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: [Maybe PackageDB]
elabSetupPackageDBStack :: PackageDBStack
elabBuildPackageDBStack :: PackageDBStack
elabRegisterPackageDBStack :: PackageDBStack
elabInplaceSetupPackageDBStack :: PackageDBStack
elabInplaceBuildPackageDBStack :: PackageDBStack
elabInplaceRegisterPackageDBStack :: PackageDBStack
elabPkgDescriptionOverride :: Maybe CabalFileText
elabVanillaLib :: Bool
elabSharedLib :: Bool
elabStaticLib :: Bool
elabDynExe :: Bool
elabFullyStaticExe :: Bool
elabGHCiLib :: Bool
elabProfLib :: Bool
elabProfExe :: Bool
elabProfLibDetail :: ProfDetailLevel
elabProfExeDetail :: ProfDetailLevel
elabCoverage :: Bool
elabOptimization :: OptimisationLevel
elabSplitObjs :: Bool
elabSplitSections :: Bool
elabStripLibs :: Bool
elabStripExes :: Bool
elabDebugInfo :: DebugInfoLevel
elabDumpBuildInfo :: DumpBuildInfo
elabProgramPaths :: Map String String
elabProgramArgs :: Map String [String]
elabProgramPathExtra :: [String]
elabConfigureScriptArgs :: [String]
elabExtraLibDirs :: [String]
elabExtraLibDirsStatic :: [String]
elabExtraFrameworkDirs :: [String]
elabExtraIncludeDirs :: [String]
elabProgPrefix :: Maybe PathTemplate
elabProgSuffix :: Maybe PathTemplate
elabInstallDirs :: InstallDirs String
elabHaddockHoogle :: Bool
elabHaddockHtml :: Bool
elabHaddockHtmlLocation :: Maybe String
elabHaddockForeignLibs :: Bool
elabHaddockForHackage :: HaddockTarget
elabHaddockExecutables :: Bool
elabHaddockTestSuites :: Bool
elabHaddockBenchmarks :: Bool
elabHaddockInternal :: Bool
elabHaddockCss :: Maybe String
elabHaddockLinkedSource :: Bool
elabHaddockQuickJump :: Bool
elabHaddockHscolourCss :: Maybe String
elabHaddockContents :: Maybe PathTemplate
elabTestMachineLog :: Maybe PathTemplate
elabTestHumanLog :: Maybe PathTemplate
elabTestShowDetails :: Maybe TestShowDetails
elabTestKeepTix :: Bool
elabTestWrapper :: Maybe String
elabTestFailWhenNoTestSuites :: Bool
elabTestTestOptions :: [PathTemplate]
elabBenchmarkOptions :: [PathTemplate]
elabSetupScriptStyle :: SetupScriptStyle
elabSetupScriptCliVersion :: Version
elabConfigureTargets :: [ComponentTarget]
elabBuildTargets :: [ComponentTarget]
elabTestTargets :: [ComponentTarget]
elabBenchTargets :: [ComponentTarget]
elabReplTarget :: Maybe ComponentTarget
elabHaddockTargets :: [ComponentTarget]
elabBuildHaddocks :: Bool
elabPkgOrComp :: ElaboratedPackageOrComponent
..})
sharedConfig :: ElaboratedSharedConfig
sharedConfig@ElaboratedSharedConfig{Platform
Compiler
ProgramDb
ReplOptions
pkgConfigCompiler :: ElaboratedSharedConfig -> Compiler
pkgConfigPlatform :: ElaboratedSharedConfig -> Platform
pkgConfigCompilerProgs :: ElaboratedSharedConfig -> ProgramDb
pkgConfigReplOptions :: ElaboratedSharedConfig -> ReplOptions
pkgConfigPlatform :: Platform
pkgConfigCompiler :: Compiler
pkgConfigCompilerProgs :: ProgramDb
pkgConfigReplOptions :: ReplOptions
..}
Verbosity
verbosity String
builddir =
ElaboratedSharedConfig
-> ElaboratedConfiguredPackage -> ConfigFlags -> ConfigFlags
forall a.
ElaboratedSharedConfig -> ElaboratedConfiguredPackage -> a -> a
sanityCheckElaboratedConfiguredPackage ElaboratedSharedConfig
sharedConfig ElaboratedConfiguredPackage
elab
(Cabal.ConfigFlags {[String]
[Maybe PackageDB]
[(String, String)]
[(String, [String])]
[(ModuleName, Module)]
[PackageVersionConstraint]
[GivenComponent]
Option' (Last' ProgramDb)
FlagAssignment
Flag Bool
Flag String
Flag Verbosity
Flag CompilerFlavor
Flag InstalledPackageId
Flag DebugInfoLevel
Flag OptimisationLevel
Flag ProfDetailLevel
Flag PathTemplate
Flag DumpBuildInfo
InstallDirs (Flag PathTemplate)
NubList String
configArgs :: [String]
configDistPref :: Flag String
configCabalFilePath :: Flag String
configVerbosity :: Flag Verbosity
configInstantiateWith :: [(ModuleName, Module)]
configDeterministic :: Flag Bool
configIPID :: Flag String
configCID :: Flag InstalledPackageId
configProgramPaths :: [(String, String)]
configProgramArgs :: [(String, [String])]
configProgramPathExtra :: NubList String
configHcFlavor :: Flag CompilerFlavor
configHcPath :: Flag String
configHcPkg :: Flag String
configVanillaLib :: Flag Bool
configSharedLib :: Flag Bool
configStaticLib :: Flag Bool
configDynExe :: Flag Bool
configFullyStaticExe :: Flag Bool
configGHCiLib :: Flag Bool
configProfExe :: Flag Bool
configProfLib :: Flag Bool
configProf :: Flag Bool
configProfDetail :: Flag ProfDetailLevel
configProfLibDetail :: Flag ProfDetailLevel
configCoverage :: Flag Bool
configLibCoverage :: Flag Bool
configOptimization :: Flag OptimisationLevel
configSplitSections :: Flag Bool
configSplitObjs :: Flag Bool
configStripExes :: Flag Bool
configStripLibs :: Flag Bool
configDebugInfo :: Flag DebugInfoLevel
configDumpBuildInfo :: Flag DumpBuildInfo
configConfigurationsFlags :: FlagAssignment
configConfigureArgs :: [String]
configExtraLibDirs :: [String]
configExtraLibDirsStatic :: [String]
configExtraFrameworkDirs :: [String]
configExtraIncludeDirs :: [String]
configProgPrefix :: Flag PathTemplate
configProgSuffix :: Flag PathTemplate
configInstallDirs :: InstallDirs (Flag PathTemplate)
configDependencies :: [GivenComponent]
configConstraints :: [PackageVersionConstraint]
configPackageDBs :: [Maybe PackageDB]
configTests :: Flag Bool
configBenchmarks :: Flag Bool
configExactConfiguration :: Flag Bool
configFlagError :: Flag String
configRelocatable :: Flag Bool
configScratchDir :: Flag String
configUserInstall :: Flag Bool
configPrograms_ :: Option' (Last' ProgramDb)
configUseResponseFiles :: Flag Bool
configAllowDependingOnPrivateLibs :: Flag Bool
configAllowDependingOnPrivateLibs :: Flag Bool
configArgs :: [String]
configBenchmarks :: Flag Bool
configCID :: Flag InstalledPackageId
configCabalFilePath :: Flag String
configConfigurationsFlags :: FlagAssignment
configConfigureArgs :: [String]
configConstraints :: [PackageVersionConstraint]
configCoverage :: Flag Bool
configDebugInfo :: Flag DebugInfoLevel
configDependencies :: [GivenComponent]
configDeterministic :: Flag Bool
configDistPref :: Flag String
configDumpBuildInfo :: Flag DumpBuildInfo
configDynExe :: Flag Bool
configExactConfiguration :: Flag Bool
configExtraFrameworkDirs :: [String]
configExtraIncludeDirs :: [String]
configExtraLibDirs :: [String]
configExtraLibDirsStatic :: [String]
configFlagError :: Flag String
configFullyStaticExe :: Flag Bool
configGHCiLib :: Flag Bool
configHcFlavor :: Flag CompilerFlavor
configHcPath :: Flag String
configHcPkg :: Flag String
configIPID :: Flag String
configInstallDirs :: InstallDirs (Flag PathTemplate)
configInstantiateWith :: [(ModuleName, Module)]
configLibCoverage :: Flag Bool
configOptimization :: Flag OptimisationLevel
configPackageDBs :: [Maybe PackageDB]
configProf :: Flag Bool
configProfDetail :: Flag ProfDetailLevel
configProfExe :: Flag Bool
configProfLib :: Flag Bool
configProfLibDetail :: Flag ProfDetailLevel
configProgPrefix :: Flag PathTemplate
configProgSuffix :: Flag PathTemplate
configProgramArgs :: [(String, [String])]
configProgramPathExtra :: NubList String
configProgramPaths :: [(String, String)]
configPrograms_ :: Option' (Last' ProgramDb)
configRelocatable :: Flag Bool
configScratchDir :: Flag String
configSharedLib :: Flag Bool
configSplitObjs :: Flag Bool
configSplitSections :: Flag Bool
configStaticLib :: Flag Bool
configStripExes :: Flag Bool
configStripLibs :: Flag Bool
configTests :: Flag Bool
configUseResponseFiles :: Flag Bool
configUserInstall :: Flag Bool
configVanillaLib :: Flag Bool
configVerbosity :: Flag Verbosity
..})
where
configArgs :: [String]
configArgs = [String]
forall a. Monoid a => a
mempty
configDistPref :: Flag String
configDistPref = String -> Flag String
forall a. a -> Flag a
toFlag String
builddir
configCabalFilePath :: Flag String
configCabalFilePath = Flag String
forall a. Monoid a => a
mempty
configVerbosity :: Flag Verbosity
configVerbosity = Verbosity -> Flag Verbosity
forall a. a -> Flag a
toFlag Verbosity
verbosity
configInstantiateWith :: [(ModuleName, Module)]
configInstantiateWith = Map ModuleName Module -> [(ModuleName, Module)]
forall k a. Map k a -> [(k, a)]
Map.toList Map ModuleName Module
elabInstantiatedWith
configDeterministic :: Flag Bool
configDeterministic = Flag Bool
forall a. Monoid a => a
mempty
configIPID :: Flag String
configIPID = case ElaboratedPackageOrComponent
elabPkgOrComp of
ElabPackage ElaboratedPackage
pkg -> String -> Flag String
forall a. a -> Flag a
toFlag (InstalledPackageId -> String
forall a. Pretty a => a -> String
prettyShow (ElaboratedPackage -> InstalledPackageId
pkgInstalledId ElaboratedPackage
pkg))
ElabComponent ElaboratedComponent
_ -> Flag String
forall a. Monoid a => a
mempty
configCID :: Flag InstalledPackageId
configCID = case ElaboratedPackageOrComponent
elabPkgOrComp of
ElabPackage ElaboratedPackage
_ -> Flag InstalledPackageId
forall a. Monoid a => a
mempty
ElabComponent ElaboratedComponent
_ -> InstalledPackageId -> Flag InstalledPackageId
forall a. a -> Flag a
toFlag InstalledPackageId
elabComponentId
configProgramPaths :: [(String, String)]
configProgramPaths = Map String String -> [(String, String)]
forall k a. Map k a -> [(k, a)]
Map.toList Map String String
elabProgramPaths
configProgramArgs :: [(String, [String])]
configProgramArgs
| Bool
True
= Map String [String] -> [(String, [String])]
forall k a. Map k a -> [(k, a)]
Map.toList (Map String [String] -> [(String, [String])])
-> Map String [String] -> [(String, [String])]
forall a b. (a -> b) -> a -> b
$
([String] -> [String] -> [String])
-> String -> [String] -> Map String [String] -> Map String [String]
forall k a. Ord k => (a -> a -> a) -> k -> a -> Map k a -> Map k a
Map.insertWith [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
(++) String
"ghc" [String
"-hide-all-packages"]
Map String [String]
elabProgramArgs
configProgramPathExtra :: NubList String
configProgramPathExtra = [String] -> NubList String
forall a. Ord a => [a] -> NubList a
toNubList [String]
elabProgramPathExtra
configHcFlavor :: Flag CompilerFlavor
configHcFlavor = CompilerFlavor -> Flag CompilerFlavor
forall a. a -> Flag a
toFlag (Compiler -> CompilerFlavor
compilerFlavor Compiler
pkgConfigCompiler)
configHcPath :: Flag String
configHcPath = Flag String
forall a. Monoid a => a
mempty
configHcPkg :: Flag String
configHcPkg = Flag String
forall a. Monoid a => a
mempty
configVanillaLib :: Flag Bool
configVanillaLib = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabVanillaLib
configSharedLib :: Flag Bool
configSharedLib = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabSharedLib
configStaticLib :: Flag Bool
configStaticLib = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabStaticLib
configDynExe :: Flag Bool
configDynExe = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabDynExe
configFullyStaticExe :: Flag Bool
configFullyStaticExe = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabFullyStaticExe
configGHCiLib :: Flag Bool
configGHCiLib = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabGHCiLib
configProfExe :: Flag Bool
configProfExe = Flag Bool
forall a. Monoid a => a
mempty
configProfLib :: Flag Bool
configProfLib = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabProfLib
configProf :: Flag Bool
configProf = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabProfExe
configProfDetail :: Flag ProfDetailLevel
configProfDetail = ProfDetailLevel -> Flag ProfDetailLevel
forall a. a -> Flag a
toFlag ProfDetailLevel
elabProfExeDetail
configProfLibDetail :: Flag ProfDetailLevel
configProfLibDetail = ProfDetailLevel -> Flag ProfDetailLevel
forall a. a -> Flag a
toFlag ProfDetailLevel
elabProfLibDetail
configCoverage :: Flag Bool
configCoverage = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabCoverage
configLibCoverage :: Flag Bool
configLibCoverage = Flag Bool
forall a. Monoid a => a
mempty
configOptimization :: Flag OptimisationLevel
configOptimization = OptimisationLevel -> Flag OptimisationLevel
forall a. a -> Flag a
toFlag OptimisationLevel
elabOptimization
configSplitSections :: Flag Bool
configSplitSections = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabSplitSections
configSplitObjs :: Flag Bool
configSplitObjs = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabSplitObjs
configStripExes :: Flag Bool
configStripExes = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabStripExes
configStripLibs :: Flag Bool
configStripLibs = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabStripLibs
configDebugInfo :: Flag DebugInfoLevel
configDebugInfo = DebugInfoLevel -> Flag DebugInfoLevel
forall a. a -> Flag a
toFlag DebugInfoLevel
elabDebugInfo
configDumpBuildInfo :: Flag DumpBuildInfo
configDumpBuildInfo = DumpBuildInfo -> Flag DumpBuildInfo
forall a. a -> Flag a
toFlag DumpBuildInfo
elabDumpBuildInfo
configConfigurationsFlags :: FlagAssignment
configConfigurationsFlags = FlagAssignment
elabFlagAssignment
configConfigureArgs :: [String]
configConfigureArgs = [String]
elabConfigureScriptArgs
configExtraLibDirs :: [String]
configExtraLibDirs = [String]
elabExtraLibDirs
configExtraLibDirsStatic :: [String]
configExtraLibDirsStatic = [String]
elabExtraLibDirsStatic
configExtraFrameworkDirs :: [String]
configExtraFrameworkDirs = [String]
elabExtraFrameworkDirs
configExtraIncludeDirs :: [String]
configExtraIncludeDirs = [String]
elabExtraIncludeDirs
configProgPrefix :: Flag PathTemplate
configProgPrefix = Flag PathTemplate
-> (PathTemplate -> Flag PathTemplate)
-> Maybe PathTemplate
-> Flag PathTemplate
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Flag PathTemplate
forall a. Monoid a => a
mempty PathTemplate -> Flag PathTemplate
forall a. a -> Flag a
toFlag Maybe PathTemplate
elabProgPrefix
configProgSuffix :: Flag PathTemplate
configProgSuffix = Flag PathTemplate
-> (PathTemplate -> Flag PathTemplate)
-> Maybe PathTemplate
-> Flag PathTemplate
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Flag PathTemplate
forall a. Monoid a => a
mempty PathTemplate -> Flag PathTemplate
forall a. a -> Flag a
toFlag Maybe PathTemplate
elabProgSuffix
configInstallDirs :: InstallDirs (Flag PathTemplate)
configInstallDirs = (String -> Flag PathTemplate)
-> InstallDirs String -> InstallDirs (Flag PathTemplate)
forall a b. (a -> b) -> InstallDirs a -> InstallDirs b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (PathTemplate -> Flag PathTemplate
forall a. a -> Flag a
toFlag (PathTemplate -> Flag PathTemplate)
-> (String -> PathTemplate) -> String -> Flag PathTemplate
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PathTemplate
InstallDirs.toPathTemplate)
InstallDirs String
elabInstallDirs
configDependencies :: [GivenComponent]
configDependencies = [ PackageName -> LibraryName -> InstalledPackageId -> GivenComponent
GivenComponent
(PackageIdentifier -> PackageName
forall pkg. Package pkg => pkg -> PackageName
packageName PackageIdentifier
srcid)
LibraryName
ln
InstalledPackageId
cid
| ConfiguredId PackageIdentifier
srcid Maybe ComponentName
mb_cn InstalledPackageId
cid <- ElaboratedConfiguredPackage -> [ConfiguredId]
elabLibDependencies ElaboratedConfiguredPackage
elab
, let ln :: LibraryName
ln = case Maybe ComponentName
mb_cn
of Just (CLibName LibraryName
lname) -> LibraryName
lname
Just ComponentName
_ -> String -> LibraryName
forall a. HasCallStack => String -> a
error String
"non-library dependency"
Maybe ComponentName
Nothing -> LibraryName
LMainLibName
]
configConstraints :: [PackageVersionConstraint]
configConstraints =
case ElaboratedPackageOrComponent
elabPkgOrComp of
ElabPackage ElaboratedPackage
_ ->
[ PackageIdentifier -> PackageVersionConstraint
thisPackageVersionConstraint PackageIdentifier
srcid
| ConfiguredId PackageIdentifier
srcid Maybe ComponentName
_ InstalledPackageId
_uid <- ElaboratedConfiguredPackage -> [ConfiguredId]
elabLibDependencies ElaboratedConfiguredPackage
elab ]
ElabComponent ElaboratedComponent
_ -> []
configPackageDBs :: [Maybe PackageDB]
configPackageDBs = Maybe PackageDB
forall a. Maybe a
Nothing Maybe PackageDB -> [Maybe PackageDB] -> [Maybe PackageDB]
forall a. a -> [a] -> [a]
: (PackageDB -> Maybe PackageDB)
-> PackageDBStack -> [Maybe PackageDB]
forall a b. (a -> b) -> [a] -> [b]
map PackageDB -> Maybe PackageDB
forall a. a -> Maybe a
Just PackageDBStack
elabBuildPackageDBStack
configTests :: Flag Bool
configTests = case ElaboratedPackageOrComponent
elabPkgOrComp of
ElabPackage ElaboratedPackage
pkg -> Bool -> Flag Bool
forall a. a -> Flag a
toFlag (OptionalStanza
TestStanzas OptionalStanza -> OptionalStanzaSet -> Bool
`optStanzaSetMember` ElaboratedPackage -> OptionalStanzaSet
pkgStanzasEnabled ElaboratedPackage
pkg)
ElabComponent ElaboratedComponent
_ -> Flag Bool
forall a. Monoid a => a
mempty
configBenchmarks :: Flag Bool
configBenchmarks = case ElaboratedPackageOrComponent
elabPkgOrComp of
ElabPackage ElaboratedPackage
pkg -> Bool -> Flag Bool
forall a. a -> Flag a
toFlag (OptionalStanza
BenchStanzas OptionalStanza -> OptionalStanzaSet -> Bool
`optStanzaSetMember` ElaboratedPackage -> OptionalStanzaSet
pkgStanzasEnabled ElaboratedPackage
pkg)
ElabComponent ElaboratedComponent
_ -> Flag Bool
forall a. Monoid a => a
mempty
configExactConfiguration :: Flag Bool
configExactConfiguration = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
True
configFlagError :: Flag String
configFlagError = Flag String
forall a. Monoid a => a
mempty
configRelocatable :: Flag Bool
configRelocatable = Flag Bool
forall a. Monoid a => a
mempty
configScratchDir :: Flag String
configScratchDir = Flag String
forall a. Monoid a => a
mempty
configUserInstall :: Flag Bool
configUserInstall = Flag Bool
forall a. Monoid a => a
mempty
configPrograms_ :: Option' (Last' ProgramDb)
configPrograms_ = Option' (Last' ProgramDb)
forall a. Monoid a => a
mempty
configUseResponseFiles :: Flag Bool
configUseResponseFiles = Flag Bool
forall a. Monoid a => a
mempty
configAllowDependingOnPrivateLibs :: Flag Bool
configAllowDependingOnPrivateLibs = Bool -> Flag Bool
forall a. a -> Flag a
Flag (Bool -> Flag Bool) -> Bool -> Flag Bool
forall a b. (a -> b) -> a -> b
$ Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Compiler -> Bool
libraryVisibilitySupported Compiler
pkgConfigCompiler
setupHsConfigureArgs :: ElaboratedConfiguredPackage
-> [String]
setupHsConfigureArgs :: ElaboratedConfiguredPackage -> [String]
setupHsConfigureArgs (ElaboratedConfiguredPackage { elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp = ElabPackage ElaboratedPackage
_ }) = []
setupHsConfigureArgs elab :: ElaboratedConfiguredPackage
elab@(ElaboratedConfiguredPackage { elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp = ElabComponent ElaboratedComponent
comp }) =
[PackageIdentifier -> ComponentTarget -> String
showComponentTarget (ElaboratedConfiguredPackage -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId ElaboratedConfiguredPackage
elab) (ComponentName -> SubComponentTarget -> ComponentTarget
ComponentTarget ComponentName
cname SubComponentTarget
WholeComponent)]
where
cname :: ComponentName
cname = ComponentName -> Maybe ComponentName -> ComponentName
forall a. a -> Maybe a -> a
fromMaybe (String -> ComponentName
forall a. HasCallStack => String -> a
error String
"setupHsConfigureArgs: trying to configure setup")
(ElaboratedComponent -> Maybe ComponentName
compComponentName ElaboratedComponent
comp)
setupHsBuildFlags :: ElaboratedConfiguredPackage
-> ElaboratedSharedConfig
-> Verbosity
-> FilePath
-> Cabal.BuildFlags
setupHsBuildFlags :: ElaboratedConfiguredPackage
-> ElaboratedSharedConfig -> Verbosity -> String -> BuildFlags
setupHsBuildFlags ElaboratedConfiguredPackage
_ ElaboratedSharedConfig
_ Verbosity
verbosity String
builddir =
Cabal.BuildFlags {
buildProgramPaths :: [(String, String)]
buildProgramPaths = [(String, String)]
forall a. Monoid a => a
mempty,
buildProgramArgs :: [(String, [String])]
buildProgramArgs = [(String, [String])]
forall a. Monoid a => a
mempty,
buildVerbosity :: Flag Verbosity
buildVerbosity = Verbosity -> Flag Verbosity
forall a. a -> Flag a
toFlag Verbosity
verbosity,
buildDistPref :: Flag String
buildDistPref = String -> Flag String
forall a. a -> Flag a
toFlag String
builddir,
buildNumJobs :: Flag (Maybe Int)
buildNumJobs = Flag (Maybe Int)
forall a. Monoid a => a
mempty,
buildArgs :: [String]
buildArgs = [String]
forall a. Monoid a => a
mempty,
buildCabalFilePath :: Flag String
buildCabalFilePath= Flag String
forall a. Monoid a => a
mempty
}
setupHsBuildArgs :: ElaboratedConfiguredPackage -> [String]
setupHsBuildArgs :: ElaboratedConfiguredPackage -> [String]
setupHsBuildArgs elab :: ElaboratedConfiguredPackage
elab@(ElaboratedConfiguredPackage { elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp = ElabPackage ElaboratedPackage
_ })
| ElaboratedConfiguredPackage -> Version
elabSetupScriptCliVersion ElaboratedConfiguredPackage
elab Version -> Version -> Bool
forall a. Ord a => a -> a -> Bool
>= [Int] -> Version
mkVersion [Int
1,Int
17]
= (ComponentTarget -> String) -> [ComponentTarget] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (PackageIdentifier -> ComponentTarget -> String
showComponentTarget (ElaboratedConfiguredPackage -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId ElaboratedConfiguredPackage
elab)) (ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets ElaboratedConfiguredPackage
elab)
| Bool
otherwise
= []
setupHsBuildArgs (ElaboratedConfiguredPackage { elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp = ElabComponent ElaboratedComponent
_ })
= []
setupHsTestFlags :: ElaboratedConfiguredPackage
-> ElaboratedSharedConfig
-> Verbosity
-> FilePath
-> Cabal.TestFlags
setupHsTestFlags :: ElaboratedConfiguredPackage
-> ElaboratedSharedConfig -> Verbosity -> String -> TestFlags
setupHsTestFlags (ElaboratedConfiguredPackage{Bool
[String]
[Maybe PackageDB]
PackageDBStack
[PathTemplate]
[ComponentTarget]
Maybe String
Maybe CabalFileText
Maybe PathTemplate
Maybe TestShowDetails
Maybe PackageSourceHash
Maybe ComponentTarget
Map String String
Map String [String]
Map ModuleName Module
Map ModuleName OpenModule
OptionalStanzaMap (Maybe Bool)
OptionalStanzaSet
PackageIdentifier
ComponentRequestedSpec
UnitId
Version
FlagAssignment
PackageDescription
InstalledPackageId
DebugInfoLevel
OptimisationLevel
ProfDetailLevel
HaddockTarget
ModuleShape
InstallDirs String
DumpBuildInfo
UnresolvedPkgLoc
SetupScriptStyle
BuildStyle
ElaboratedPackageOrComponent
elabUnitId :: ElaboratedConfiguredPackage -> UnitId
elabComponentId :: ElaboratedConfiguredPackage -> InstalledPackageId
elabInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName Module
elabLinkedInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName OpenModule
elabIsCanonical :: ElaboratedConfiguredPackage -> Bool
elabPkgSourceId :: ElaboratedConfiguredPackage -> PackageIdentifier
elabModuleShape :: ElaboratedConfiguredPackage -> ModuleShape
elabFlagAssignment :: ElaboratedConfiguredPackage -> FlagAssignment
elabFlagDefaults :: ElaboratedConfiguredPackage -> FlagAssignment
elabPkgDescription :: ElaboratedConfiguredPackage -> PackageDescription
elabPkgSourceLocation :: ElaboratedConfiguredPackage -> UnresolvedPkgLoc
elabPkgSourceHash :: ElaboratedConfiguredPackage -> Maybe PackageSourceHash
elabLocalToProject :: ElaboratedConfiguredPackage -> Bool
elabBuildStyle :: ElaboratedConfiguredPackage -> BuildStyle
elabEnabledSpec :: ElaboratedConfiguredPackage -> ComponentRequestedSpec
elabStanzasAvailable :: ElaboratedConfiguredPackage -> OptionalStanzaSet
elabStanzasRequested :: ElaboratedConfiguredPackage -> OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: ElaboratedConfiguredPackage -> [Maybe PackageDB]
elabSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabPkgDescriptionOverride :: ElaboratedConfiguredPackage -> Maybe CabalFileText
elabVanillaLib :: ElaboratedConfiguredPackage -> Bool
elabSharedLib :: ElaboratedConfiguredPackage -> Bool
elabStaticLib :: ElaboratedConfiguredPackage -> Bool
elabDynExe :: ElaboratedConfiguredPackage -> Bool
elabFullyStaticExe :: ElaboratedConfiguredPackage -> Bool
elabGHCiLib :: ElaboratedConfiguredPackage -> Bool
elabProfLib :: ElaboratedConfiguredPackage -> Bool
elabProfExe :: ElaboratedConfiguredPackage -> Bool
elabProfLibDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabProfExeDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabCoverage :: ElaboratedConfiguredPackage -> Bool
elabOptimization :: ElaboratedConfiguredPackage -> OptimisationLevel
elabSplitObjs :: ElaboratedConfiguredPackage -> Bool
elabSplitSections :: ElaboratedConfiguredPackage -> Bool
elabStripLibs :: ElaboratedConfiguredPackage -> Bool
elabStripExes :: ElaboratedConfiguredPackage -> Bool
elabDebugInfo :: ElaboratedConfiguredPackage -> DebugInfoLevel
elabDumpBuildInfo :: ElaboratedConfiguredPackage -> DumpBuildInfo
elabProgramPaths :: ElaboratedConfiguredPackage -> Map String String
elabProgramArgs :: ElaboratedConfiguredPackage -> Map String [String]
elabProgramPathExtra :: ElaboratedConfiguredPackage -> [String]
elabConfigureScriptArgs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirsStatic :: ElaboratedConfiguredPackage -> [String]
elabExtraFrameworkDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraIncludeDirs :: ElaboratedConfiguredPackage -> [String]
elabProgPrefix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabProgSuffix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabInstallDirs :: ElaboratedConfiguredPackage -> InstallDirs String
elabHaddockHoogle :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtml :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtmlLocation :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockForeignLibs :: ElaboratedConfiguredPackage -> Bool
elabHaddockForHackage :: ElaboratedConfiguredPackage -> HaddockTarget
elabHaddockExecutables :: ElaboratedConfiguredPackage -> Bool
elabHaddockTestSuites :: ElaboratedConfiguredPackage -> Bool
elabHaddockBenchmarks :: ElaboratedConfiguredPackage -> Bool
elabHaddockInternal :: ElaboratedConfiguredPackage -> Bool
elabHaddockCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockLinkedSource :: ElaboratedConfiguredPackage -> Bool
elabHaddockQuickJump :: ElaboratedConfiguredPackage -> Bool
elabHaddockHscolourCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockContents :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestMachineLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestHumanLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestShowDetails :: ElaboratedConfiguredPackage -> Maybe TestShowDetails
elabTestKeepTix :: ElaboratedConfiguredPackage -> Bool
elabTestWrapper :: ElaboratedConfiguredPackage -> Maybe String
elabTestFailWhenNoTestSuites :: ElaboratedConfiguredPackage -> Bool
elabTestTestOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabBenchmarkOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabSetupScriptStyle :: ElaboratedConfiguredPackage -> SetupScriptStyle
elabSetupScriptCliVersion :: ElaboratedConfiguredPackage -> Version
elabConfigureTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabTestTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBenchTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabReplTarget :: ElaboratedConfiguredPackage -> Maybe ComponentTarget
elabHaddockTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildHaddocks :: ElaboratedConfiguredPackage -> Bool
elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabUnitId :: UnitId
elabComponentId :: InstalledPackageId
elabInstantiatedWith :: Map ModuleName Module
elabLinkedInstantiatedWith :: Map ModuleName OpenModule
elabIsCanonical :: Bool
elabPkgSourceId :: PackageIdentifier
elabModuleShape :: ModuleShape
elabFlagAssignment :: FlagAssignment
elabFlagDefaults :: FlagAssignment
elabPkgDescription :: PackageDescription
elabPkgSourceLocation :: UnresolvedPkgLoc
elabPkgSourceHash :: Maybe PackageSourceHash
elabLocalToProject :: Bool
elabBuildStyle :: BuildStyle
elabEnabledSpec :: ComponentRequestedSpec
elabStanzasAvailable :: OptionalStanzaSet
elabStanzasRequested :: OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: [Maybe PackageDB]
elabSetupPackageDBStack :: PackageDBStack
elabBuildPackageDBStack :: PackageDBStack
elabRegisterPackageDBStack :: PackageDBStack
elabInplaceSetupPackageDBStack :: PackageDBStack
elabInplaceBuildPackageDBStack :: PackageDBStack
elabInplaceRegisterPackageDBStack :: PackageDBStack
elabPkgDescriptionOverride :: Maybe CabalFileText
elabVanillaLib :: Bool
elabSharedLib :: Bool
elabStaticLib :: Bool
elabDynExe :: Bool
elabFullyStaticExe :: Bool
elabGHCiLib :: Bool
elabProfLib :: Bool
elabProfExe :: Bool
elabProfLibDetail :: ProfDetailLevel
elabProfExeDetail :: ProfDetailLevel
elabCoverage :: Bool
elabOptimization :: OptimisationLevel
elabSplitObjs :: Bool
elabSplitSections :: Bool
elabStripLibs :: Bool
elabStripExes :: Bool
elabDebugInfo :: DebugInfoLevel
elabDumpBuildInfo :: DumpBuildInfo
elabProgramPaths :: Map String String
elabProgramArgs :: Map String [String]
elabProgramPathExtra :: [String]
elabConfigureScriptArgs :: [String]
elabExtraLibDirs :: [String]
elabExtraLibDirsStatic :: [String]
elabExtraFrameworkDirs :: [String]
elabExtraIncludeDirs :: [String]
elabProgPrefix :: Maybe PathTemplate
elabProgSuffix :: Maybe PathTemplate
elabInstallDirs :: InstallDirs String
elabHaddockHoogle :: Bool
elabHaddockHtml :: Bool
elabHaddockHtmlLocation :: Maybe String
elabHaddockForeignLibs :: Bool
elabHaddockForHackage :: HaddockTarget
elabHaddockExecutables :: Bool
elabHaddockTestSuites :: Bool
elabHaddockBenchmarks :: Bool
elabHaddockInternal :: Bool
elabHaddockCss :: Maybe String
elabHaddockLinkedSource :: Bool
elabHaddockQuickJump :: Bool
elabHaddockHscolourCss :: Maybe String
elabHaddockContents :: Maybe PathTemplate
elabTestMachineLog :: Maybe PathTemplate
elabTestHumanLog :: Maybe PathTemplate
elabTestShowDetails :: Maybe TestShowDetails
elabTestKeepTix :: Bool
elabTestWrapper :: Maybe String
elabTestFailWhenNoTestSuites :: Bool
elabTestTestOptions :: [PathTemplate]
elabBenchmarkOptions :: [PathTemplate]
elabSetupScriptStyle :: SetupScriptStyle
elabSetupScriptCliVersion :: Version
elabConfigureTargets :: [ComponentTarget]
elabBuildTargets :: [ComponentTarget]
elabTestTargets :: [ComponentTarget]
elabBenchTargets :: [ComponentTarget]
elabReplTarget :: Maybe ComponentTarget
elabHaddockTargets :: [ComponentTarget]
elabBuildHaddocks :: Bool
elabPkgOrComp :: ElaboratedPackageOrComponent
..}) ElaboratedSharedConfig
_ Verbosity
verbosity String
builddir = Cabal.TestFlags
{ testDistPref :: Flag String
testDistPref = String -> Flag String
forall a. a -> Flag a
toFlag String
builddir
, testVerbosity :: Flag Verbosity
testVerbosity = Verbosity -> Flag Verbosity
forall a. a -> Flag a
toFlag Verbosity
verbosity
, testMachineLog :: Flag PathTemplate
testMachineLog = Flag PathTemplate
-> (PathTemplate -> Flag PathTemplate)
-> Maybe PathTemplate
-> Flag PathTemplate
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Flag PathTemplate
forall a. Monoid a => a
mempty PathTemplate -> Flag PathTemplate
forall a. a -> Flag a
toFlag Maybe PathTemplate
elabTestMachineLog
, testHumanLog :: Flag PathTemplate
testHumanLog = Flag PathTemplate
-> (PathTemplate -> Flag PathTemplate)
-> Maybe PathTemplate
-> Flag PathTemplate
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Flag PathTemplate
forall a. Monoid a => a
mempty PathTemplate -> Flag PathTemplate
forall a. a -> Flag a
toFlag Maybe PathTemplate
elabTestHumanLog
, testShowDetails :: Flag TestShowDetails
testShowDetails = Flag TestShowDetails
-> (TestShowDetails -> Flag TestShowDetails)
-> Maybe TestShowDetails
-> Flag TestShowDetails
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (TestShowDetails -> Flag TestShowDetails
forall a. a -> Flag a
Flag TestShowDetails
Cabal.Always) TestShowDetails -> Flag TestShowDetails
forall a. a -> Flag a
toFlag Maybe TestShowDetails
elabTestShowDetails
, testKeepTix :: Flag Bool
testKeepTix = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabTestKeepTix
, testWrapper :: Flag String
testWrapper = Flag String
-> (String -> Flag String) -> Maybe String -> Flag String
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Flag String
forall a. Monoid a => a
mempty String -> Flag String
forall a. a -> Flag a
toFlag Maybe String
elabTestWrapper
, testFailWhenNoTestSuites :: Flag Bool
testFailWhenNoTestSuites = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabTestFailWhenNoTestSuites
, testOptions :: [PathTemplate]
testOptions = [PathTemplate]
elabTestTestOptions
}
setupHsTestArgs :: ElaboratedConfiguredPackage -> [String]
setupHsTestArgs :: ElaboratedConfiguredPackage -> [String]
setupHsTestArgs ElaboratedConfiguredPackage
elab =
(ComponentTarget -> Maybe String) -> [ComponentTarget] -> [String]
forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe (PackageIdentifier -> ComponentTarget -> Maybe String
showTestComponentTarget (ElaboratedConfiguredPackage -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId ElaboratedConfiguredPackage
elab)) (ElaboratedConfiguredPackage -> [ComponentTarget]
elabTestTargets ElaboratedConfiguredPackage
elab)
setupHsBenchFlags :: ElaboratedConfiguredPackage
-> ElaboratedSharedConfig
-> Verbosity
-> FilePath
-> Cabal.BenchmarkFlags
setupHsBenchFlags :: ElaboratedConfiguredPackage
-> ElaboratedSharedConfig -> Verbosity -> String -> BenchmarkFlags
setupHsBenchFlags (ElaboratedConfiguredPackage{Bool
[String]
[Maybe PackageDB]
PackageDBStack
[PathTemplate]
[ComponentTarget]
Maybe String
Maybe CabalFileText
Maybe PathTemplate
Maybe TestShowDetails
Maybe PackageSourceHash
Maybe ComponentTarget
Map String String
Map String [String]
Map ModuleName Module
Map ModuleName OpenModule
OptionalStanzaMap (Maybe Bool)
OptionalStanzaSet
PackageIdentifier
ComponentRequestedSpec
UnitId
Version
FlagAssignment
PackageDescription
InstalledPackageId
DebugInfoLevel
OptimisationLevel
ProfDetailLevel
HaddockTarget
ModuleShape
InstallDirs String
DumpBuildInfo
UnresolvedPkgLoc
SetupScriptStyle
BuildStyle
ElaboratedPackageOrComponent
elabUnitId :: ElaboratedConfiguredPackage -> UnitId
elabComponentId :: ElaboratedConfiguredPackage -> InstalledPackageId
elabInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName Module
elabLinkedInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName OpenModule
elabIsCanonical :: ElaboratedConfiguredPackage -> Bool
elabPkgSourceId :: ElaboratedConfiguredPackage -> PackageIdentifier
elabModuleShape :: ElaboratedConfiguredPackage -> ModuleShape
elabFlagAssignment :: ElaboratedConfiguredPackage -> FlagAssignment
elabFlagDefaults :: ElaboratedConfiguredPackage -> FlagAssignment
elabPkgDescription :: ElaboratedConfiguredPackage -> PackageDescription
elabPkgSourceLocation :: ElaboratedConfiguredPackage -> UnresolvedPkgLoc
elabPkgSourceHash :: ElaboratedConfiguredPackage -> Maybe PackageSourceHash
elabLocalToProject :: ElaboratedConfiguredPackage -> Bool
elabBuildStyle :: ElaboratedConfiguredPackage -> BuildStyle
elabEnabledSpec :: ElaboratedConfiguredPackage -> ComponentRequestedSpec
elabStanzasAvailable :: ElaboratedConfiguredPackage -> OptionalStanzaSet
elabStanzasRequested :: ElaboratedConfiguredPackage -> OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: ElaboratedConfiguredPackage -> [Maybe PackageDB]
elabSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabPkgDescriptionOverride :: ElaboratedConfiguredPackage -> Maybe CabalFileText
elabVanillaLib :: ElaboratedConfiguredPackage -> Bool
elabSharedLib :: ElaboratedConfiguredPackage -> Bool
elabStaticLib :: ElaboratedConfiguredPackage -> Bool
elabDynExe :: ElaboratedConfiguredPackage -> Bool
elabFullyStaticExe :: ElaboratedConfiguredPackage -> Bool
elabGHCiLib :: ElaboratedConfiguredPackage -> Bool
elabProfLib :: ElaboratedConfiguredPackage -> Bool
elabProfExe :: ElaboratedConfiguredPackage -> Bool
elabProfLibDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabProfExeDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabCoverage :: ElaboratedConfiguredPackage -> Bool
elabOptimization :: ElaboratedConfiguredPackage -> OptimisationLevel
elabSplitObjs :: ElaboratedConfiguredPackage -> Bool
elabSplitSections :: ElaboratedConfiguredPackage -> Bool
elabStripLibs :: ElaboratedConfiguredPackage -> Bool
elabStripExes :: ElaboratedConfiguredPackage -> Bool
elabDebugInfo :: ElaboratedConfiguredPackage -> DebugInfoLevel
elabDumpBuildInfo :: ElaboratedConfiguredPackage -> DumpBuildInfo
elabProgramPaths :: ElaboratedConfiguredPackage -> Map String String
elabProgramArgs :: ElaboratedConfiguredPackage -> Map String [String]
elabProgramPathExtra :: ElaboratedConfiguredPackage -> [String]
elabConfigureScriptArgs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirsStatic :: ElaboratedConfiguredPackage -> [String]
elabExtraFrameworkDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraIncludeDirs :: ElaboratedConfiguredPackage -> [String]
elabProgPrefix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabProgSuffix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabInstallDirs :: ElaboratedConfiguredPackage -> InstallDirs String
elabHaddockHoogle :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtml :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtmlLocation :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockForeignLibs :: ElaboratedConfiguredPackage -> Bool
elabHaddockForHackage :: ElaboratedConfiguredPackage -> HaddockTarget
elabHaddockExecutables :: ElaboratedConfiguredPackage -> Bool
elabHaddockTestSuites :: ElaboratedConfiguredPackage -> Bool
elabHaddockBenchmarks :: ElaboratedConfiguredPackage -> Bool
elabHaddockInternal :: ElaboratedConfiguredPackage -> Bool
elabHaddockCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockLinkedSource :: ElaboratedConfiguredPackage -> Bool
elabHaddockQuickJump :: ElaboratedConfiguredPackage -> Bool
elabHaddockHscolourCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockContents :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestMachineLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestHumanLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestShowDetails :: ElaboratedConfiguredPackage -> Maybe TestShowDetails
elabTestKeepTix :: ElaboratedConfiguredPackage -> Bool
elabTestWrapper :: ElaboratedConfiguredPackage -> Maybe String
elabTestFailWhenNoTestSuites :: ElaboratedConfiguredPackage -> Bool
elabTestTestOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabBenchmarkOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabSetupScriptStyle :: ElaboratedConfiguredPackage -> SetupScriptStyle
elabSetupScriptCliVersion :: ElaboratedConfiguredPackage -> Version
elabConfigureTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabTestTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBenchTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabReplTarget :: ElaboratedConfiguredPackage -> Maybe ComponentTarget
elabHaddockTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildHaddocks :: ElaboratedConfiguredPackage -> Bool
elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabUnitId :: UnitId
elabComponentId :: InstalledPackageId
elabInstantiatedWith :: Map ModuleName Module
elabLinkedInstantiatedWith :: Map ModuleName OpenModule
elabIsCanonical :: Bool
elabPkgSourceId :: PackageIdentifier
elabModuleShape :: ModuleShape
elabFlagAssignment :: FlagAssignment
elabFlagDefaults :: FlagAssignment
elabPkgDescription :: PackageDescription
elabPkgSourceLocation :: UnresolvedPkgLoc
elabPkgSourceHash :: Maybe PackageSourceHash
elabLocalToProject :: Bool
elabBuildStyle :: BuildStyle
elabEnabledSpec :: ComponentRequestedSpec
elabStanzasAvailable :: OptionalStanzaSet
elabStanzasRequested :: OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: [Maybe PackageDB]
elabSetupPackageDBStack :: PackageDBStack
elabBuildPackageDBStack :: PackageDBStack
elabRegisterPackageDBStack :: PackageDBStack
elabInplaceSetupPackageDBStack :: PackageDBStack
elabInplaceBuildPackageDBStack :: PackageDBStack
elabInplaceRegisterPackageDBStack :: PackageDBStack
elabPkgDescriptionOverride :: Maybe CabalFileText
elabVanillaLib :: Bool
elabSharedLib :: Bool
elabStaticLib :: Bool
elabDynExe :: Bool
elabFullyStaticExe :: Bool
elabGHCiLib :: Bool
elabProfLib :: Bool
elabProfExe :: Bool
elabProfLibDetail :: ProfDetailLevel
elabProfExeDetail :: ProfDetailLevel
elabCoverage :: Bool
elabOptimization :: OptimisationLevel
elabSplitObjs :: Bool
elabSplitSections :: Bool
elabStripLibs :: Bool
elabStripExes :: Bool
elabDebugInfo :: DebugInfoLevel
elabDumpBuildInfo :: DumpBuildInfo
elabProgramPaths :: Map String String
elabProgramArgs :: Map String [String]
elabProgramPathExtra :: [String]
elabConfigureScriptArgs :: [String]
elabExtraLibDirs :: [String]
elabExtraLibDirsStatic :: [String]
elabExtraFrameworkDirs :: [String]
elabExtraIncludeDirs :: [String]
elabProgPrefix :: Maybe PathTemplate
elabProgSuffix :: Maybe PathTemplate
elabInstallDirs :: InstallDirs String
elabHaddockHoogle :: Bool
elabHaddockHtml :: Bool
elabHaddockHtmlLocation :: Maybe String
elabHaddockForeignLibs :: Bool
elabHaddockForHackage :: HaddockTarget
elabHaddockExecutables :: Bool
elabHaddockTestSuites :: Bool
elabHaddockBenchmarks :: Bool
elabHaddockInternal :: Bool
elabHaddockCss :: Maybe String
elabHaddockLinkedSource :: Bool
elabHaddockQuickJump :: Bool
elabHaddockHscolourCss :: Maybe String
elabHaddockContents :: Maybe PathTemplate
elabTestMachineLog :: Maybe PathTemplate
elabTestHumanLog :: Maybe PathTemplate
elabTestShowDetails :: Maybe TestShowDetails
elabTestKeepTix :: Bool
elabTestWrapper :: Maybe String
elabTestFailWhenNoTestSuites :: Bool
elabTestTestOptions :: [PathTemplate]
elabBenchmarkOptions :: [PathTemplate]
elabSetupScriptStyle :: SetupScriptStyle
elabSetupScriptCliVersion :: Version
elabConfigureTargets :: [ComponentTarget]
elabBuildTargets :: [ComponentTarget]
elabTestTargets :: [ComponentTarget]
elabBenchTargets :: [ComponentTarget]
elabReplTarget :: Maybe ComponentTarget
elabHaddockTargets :: [ComponentTarget]
elabBuildHaddocks :: Bool
elabPkgOrComp :: ElaboratedPackageOrComponent
..}) ElaboratedSharedConfig
_ Verbosity
verbosity String
builddir = Cabal.BenchmarkFlags
{ benchmarkDistPref :: Flag String
benchmarkDistPref = String -> Flag String
forall a. a -> Flag a
toFlag String
builddir
, benchmarkVerbosity :: Flag Verbosity
benchmarkVerbosity = Verbosity -> Flag Verbosity
forall a. a -> Flag a
toFlag Verbosity
verbosity
, benchmarkOptions :: [PathTemplate]
benchmarkOptions = [PathTemplate]
elabBenchmarkOptions
}
setupHsBenchArgs :: ElaboratedConfiguredPackage -> [String]
setupHsBenchArgs :: ElaboratedConfiguredPackage -> [String]
setupHsBenchArgs ElaboratedConfiguredPackage
elab =
(ComponentTarget -> Maybe String) -> [ComponentTarget] -> [String]
forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe (PackageIdentifier -> ComponentTarget -> Maybe String
showBenchComponentTarget (ElaboratedConfiguredPackage -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId ElaboratedConfiguredPackage
elab)) (ElaboratedConfiguredPackage -> [ComponentTarget]
elabBenchTargets ElaboratedConfiguredPackage
elab)
setupHsReplFlags :: ElaboratedConfiguredPackage
-> ElaboratedSharedConfig
-> Verbosity
-> FilePath
-> Cabal.ReplFlags
setupHsReplFlags :: ElaboratedConfiguredPackage
-> ElaboratedSharedConfig -> Verbosity -> String -> ReplFlags
setupHsReplFlags ElaboratedConfiguredPackage
_ ElaboratedSharedConfig
sharedConfig Verbosity
verbosity String
builddir =
Cabal.ReplFlags {
replProgramPaths :: [(String, String)]
replProgramPaths = [(String, String)]
forall a. Monoid a => a
mempty,
replProgramArgs :: [(String, [String])]
replProgramArgs = [(String, [String])]
forall a. Monoid a => a
mempty,
replVerbosity :: Flag Verbosity
replVerbosity = Verbosity -> Flag Verbosity
forall a. a -> Flag a
toFlag Verbosity
verbosity,
replDistPref :: Flag String
replDistPref = String -> Flag String
forall a. a -> Flag a
toFlag String
builddir,
replReload :: Flag Bool
replReload = Flag Bool
forall a. Monoid a => a
mempty,
replReplOptions :: ReplOptions
replReplOptions = ElaboratedSharedConfig -> ReplOptions
pkgConfigReplOptions ElaboratedSharedConfig
sharedConfig
}
setupHsReplArgs :: ElaboratedConfiguredPackage -> [String]
setupHsReplArgs :: ElaboratedConfiguredPackage -> [String]
setupHsReplArgs ElaboratedConfiguredPackage
elab =
[String]
-> (ComponentTarget -> [String])
-> Maybe ComponentTarget
-> [String]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] (\ComponentTarget
t -> [PackageIdentifier -> ComponentTarget -> String
showComponentTarget (ElaboratedConfiguredPackage -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId ElaboratedConfiguredPackage
elab) ComponentTarget
t]) (ElaboratedConfiguredPackage -> Maybe ComponentTarget
elabReplTarget ElaboratedConfiguredPackage
elab)
setupHsCopyFlags :: ElaboratedConfiguredPackage
-> ElaboratedSharedConfig
-> Verbosity
-> FilePath
-> FilePath
-> Cabal.CopyFlags
setupHsCopyFlags :: ElaboratedConfiguredPackage
-> ElaboratedSharedConfig
-> Verbosity
-> String
-> String
-> CopyFlags
setupHsCopyFlags ElaboratedConfiguredPackage
_ ElaboratedSharedConfig
_ Verbosity
verbosity String
builddir String
destdir =
Cabal.CopyFlags {
copyArgs :: [String]
copyArgs = [],
copyDest :: Flag CopyDest
copyDest = CopyDest -> Flag CopyDest
forall a. a -> Flag a
toFlag (String -> CopyDest
InstallDirs.CopyTo String
destdir),
copyDistPref :: Flag String
copyDistPref = String -> Flag String
forall a. a -> Flag a
toFlag String
builddir,
copyVerbosity :: Flag Verbosity
copyVerbosity = Verbosity -> Flag Verbosity
forall a. a -> Flag a
toFlag Verbosity
verbosity,
copyCabalFilePath :: Flag String
copyCabalFilePath = Flag String
forall a. Monoid a => a
mempty
}
setupHsRegisterFlags :: ElaboratedConfiguredPackage
-> ElaboratedSharedConfig
-> Verbosity
-> FilePath
-> FilePath
-> Cabal.RegisterFlags
setupHsRegisterFlags :: ElaboratedConfiguredPackage
-> ElaboratedSharedConfig
-> Verbosity
-> String
-> String
-> RegisterFlags
setupHsRegisterFlags ElaboratedConfiguredPackage{Bool
[String]
[Maybe PackageDB]
PackageDBStack
[PathTemplate]
[ComponentTarget]
Maybe String
Maybe CabalFileText
Maybe PathTemplate
Maybe TestShowDetails
Maybe PackageSourceHash
Maybe ComponentTarget
Map String String
Map String [String]
Map ModuleName Module
Map ModuleName OpenModule
OptionalStanzaMap (Maybe Bool)
OptionalStanzaSet
PackageIdentifier
ComponentRequestedSpec
UnitId
Version
FlagAssignment
PackageDescription
InstalledPackageId
DebugInfoLevel
OptimisationLevel
ProfDetailLevel
HaddockTarget
ModuleShape
InstallDirs String
DumpBuildInfo
UnresolvedPkgLoc
SetupScriptStyle
BuildStyle
ElaboratedPackageOrComponent
elabUnitId :: ElaboratedConfiguredPackage -> UnitId
elabComponentId :: ElaboratedConfiguredPackage -> InstalledPackageId
elabInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName Module
elabLinkedInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName OpenModule
elabIsCanonical :: ElaboratedConfiguredPackage -> Bool
elabPkgSourceId :: ElaboratedConfiguredPackage -> PackageIdentifier
elabModuleShape :: ElaboratedConfiguredPackage -> ModuleShape
elabFlagAssignment :: ElaboratedConfiguredPackage -> FlagAssignment
elabFlagDefaults :: ElaboratedConfiguredPackage -> FlagAssignment
elabPkgDescription :: ElaboratedConfiguredPackage -> PackageDescription
elabPkgSourceLocation :: ElaboratedConfiguredPackage -> UnresolvedPkgLoc
elabPkgSourceHash :: ElaboratedConfiguredPackage -> Maybe PackageSourceHash
elabLocalToProject :: ElaboratedConfiguredPackage -> Bool
elabBuildStyle :: ElaboratedConfiguredPackage -> BuildStyle
elabEnabledSpec :: ElaboratedConfiguredPackage -> ComponentRequestedSpec
elabStanzasAvailable :: ElaboratedConfiguredPackage -> OptionalStanzaSet
elabStanzasRequested :: ElaboratedConfiguredPackage -> OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: ElaboratedConfiguredPackage -> [Maybe PackageDB]
elabSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabPkgDescriptionOverride :: ElaboratedConfiguredPackage -> Maybe CabalFileText
elabVanillaLib :: ElaboratedConfiguredPackage -> Bool
elabSharedLib :: ElaboratedConfiguredPackage -> Bool
elabStaticLib :: ElaboratedConfiguredPackage -> Bool
elabDynExe :: ElaboratedConfiguredPackage -> Bool
elabFullyStaticExe :: ElaboratedConfiguredPackage -> Bool
elabGHCiLib :: ElaboratedConfiguredPackage -> Bool
elabProfLib :: ElaboratedConfiguredPackage -> Bool
elabProfExe :: ElaboratedConfiguredPackage -> Bool
elabProfLibDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabProfExeDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabCoverage :: ElaboratedConfiguredPackage -> Bool
elabOptimization :: ElaboratedConfiguredPackage -> OptimisationLevel
elabSplitObjs :: ElaboratedConfiguredPackage -> Bool
elabSplitSections :: ElaboratedConfiguredPackage -> Bool
elabStripLibs :: ElaboratedConfiguredPackage -> Bool
elabStripExes :: ElaboratedConfiguredPackage -> Bool
elabDebugInfo :: ElaboratedConfiguredPackage -> DebugInfoLevel
elabDumpBuildInfo :: ElaboratedConfiguredPackage -> DumpBuildInfo
elabProgramPaths :: ElaboratedConfiguredPackage -> Map String String
elabProgramArgs :: ElaboratedConfiguredPackage -> Map String [String]
elabProgramPathExtra :: ElaboratedConfiguredPackage -> [String]
elabConfigureScriptArgs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirsStatic :: ElaboratedConfiguredPackage -> [String]
elabExtraFrameworkDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraIncludeDirs :: ElaboratedConfiguredPackage -> [String]
elabProgPrefix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabProgSuffix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabInstallDirs :: ElaboratedConfiguredPackage -> InstallDirs String
elabHaddockHoogle :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtml :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtmlLocation :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockForeignLibs :: ElaboratedConfiguredPackage -> Bool
elabHaddockForHackage :: ElaboratedConfiguredPackage -> HaddockTarget
elabHaddockExecutables :: ElaboratedConfiguredPackage -> Bool
elabHaddockTestSuites :: ElaboratedConfiguredPackage -> Bool
elabHaddockBenchmarks :: ElaboratedConfiguredPackage -> Bool
elabHaddockInternal :: ElaboratedConfiguredPackage -> Bool
elabHaddockCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockLinkedSource :: ElaboratedConfiguredPackage -> Bool
elabHaddockQuickJump :: ElaboratedConfiguredPackage -> Bool
elabHaddockHscolourCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockContents :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestMachineLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestHumanLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestShowDetails :: ElaboratedConfiguredPackage -> Maybe TestShowDetails
elabTestKeepTix :: ElaboratedConfiguredPackage -> Bool
elabTestWrapper :: ElaboratedConfiguredPackage -> Maybe String
elabTestFailWhenNoTestSuites :: ElaboratedConfiguredPackage -> Bool
elabTestTestOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabBenchmarkOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabSetupScriptStyle :: ElaboratedConfiguredPackage -> SetupScriptStyle
elabSetupScriptCliVersion :: ElaboratedConfiguredPackage -> Version
elabConfigureTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabTestTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBenchTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabReplTarget :: ElaboratedConfiguredPackage -> Maybe ComponentTarget
elabHaddockTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildHaddocks :: ElaboratedConfiguredPackage -> Bool
elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabUnitId :: UnitId
elabComponentId :: InstalledPackageId
elabInstantiatedWith :: Map ModuleName Module
elabLinkedInstantiatedWith :: Map ModuleName OpenModule
elabIsCanonical :: Bool
elabPkgSourceId :: PackageIdentifier
elabModuleShape :: ModuleShape
elabFlagAssignment :: FlagAssignment
elabFlagDefaults :: FlagAssignment
elabPkgDescription :: PackageDescription
elabPkgSourceLocation :: UnresolvedPkgLoc
elabPkgSourceHash :: Maybe PackageSourceHash
elabLocalToProject :: Bool
elabBuildStyle :: BuildStyle
elabEnabledSpec :: ComponentRequestedSpec
elabStanzasAvailable :: OptionalStanzaSet
elabStanzasRequested :: OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: [Maybe PackageDB]
elabSetupPackageDBStack :: PackageDBStack
elabBuildPackageDBStack :: PackageDBStack
elabRegisterPackageDBStack :: PackageDBStack
elabInplaceSetupPackageDBStack :: PackageDBStack
elabInplaceBuildPackageDBStack :: PackageDBStack
elabInplaceRegisterPackageDBStack :: PackageDBStack
elabPkgDescriptionOverride :: Maybe CabalFileText
elabVanillaLib :: Bool
elabSharedLib :: Bool
elabStaticLib :: Bool
elabDynExe :: Bool
elabFullyStaticExe :: Bool
elabGHCiLib :: Bool
elabProfLib :: Bool
elabProfExe :: Bool
elabProfLibDetail :: ProfDetailLevel
elabProfExeDetail :: ProfDetailLevel
elabCoverage :: Bool
elabOptimization :: OptimisationLevel
elabSplitObjs :: Bool
elabSplitSections :: Bool
elabStripLibs :: Bool
elabStripExes :: Bool
elabDebugInfo :: DebugInfoLevel
elabDumpBuildInfo :: DumpBuildInfo
elabProgramPaths :: Map String String
elabProgramArgs :: Map String [String]
elabProgramPathExtra :: [String]
elabConfigureScriptArgs :: [String]
elabExtraLibDirs :: [String]
elabExtraLibDirsStatic :: [String]
elabExtraFrameworkDirs :: [String]
elabExtraIncludeDirs :: [String]
elabProgPrefix :: Maybe PathTemplate
elabProgSuffix :: Maybe PathTemplate
elabInstallDirs :: InstallDirs String
elabHaddockHoogle :: Bool
elabHaddockHtml :: Bool
elabHaddockHtmlLocation :: Maybe String
elabHaddockForeignLibs :: Bool
elabHaddockForHackage :: HaddockTarget
elabHaddockExecutables :: Bool
elabHaddockTestSuites :: Bool
elabHaddockBenchmarks :: Bool
elabHaddockInternal :: Bool
elabHaddockCss :: Maybe String
elabHaddockLinkedSource :: Bool
elabHaddockQuickJump :: Bool
elabHaddockHscolourCss :: Maybe String
elabHaddockContents :: Maybe PathTemplate
elabTestMachineLog :: Maybe PathTemplate
elabTestHumanLog :: Maybe PathTemplate
elabTestShowDetails :: Maybe TestShowDetails
elabTestKeepTix :: Bool
elabTestWrapper :: Maybe String
elabTestFailWhenNoTestSuites :: Bool
elabTestTestOptions :: [PathTemplate]
elabBenchmarkOptions :: [PathTemplate]
elabSetupScriptStyle :: SetupScriptStyle
elabSetupScriptCliVersion :: Version
elabConfigureTargets :: [ComponentTarget]
elabBuildTargets :: [ComponentTarget]
elabTestTargets :: [ComponentTarget]
elabBenchTargets :: [ComponentTarget]
elabReplTarget :: Maybe ComponentTarget
elabHaddockTargets :: [ComponentTarget]
elabBuildHaddocks :: Bool
elabPkgOrComp :: ElaboratedPackageOrComponent
..} ElaboratedSharedConfig
_
Verbosity
verbosity String
builddir String
pkgConfFile =
Cabal.RegisterFlags {
regPackageDB :: Flag PackageDB
regPackageDB = Flag PackageDB
forall a. Monoid a => a
mempty,
regGenScript :: Flag Bool
regGenScript = Flag Bool
forall a. Monoid a => a
mempty,
regGenPkgConf :: Flag (Maybe String)
regGenPkgConf = Maybe String -> Flag (Maybe String)
forall a. a -> Flag a
toFlag (String -> Maybe String
forall a. a -> Maybe a
Just String
pkgConfFile),
regInPlace :: Flag Bool
regInPlace = case BuildStyle
elabBuildStyle of
BuildStyle
BuildInplaceOnly -> Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
True
BuildStyle
_ -> Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
False,
regPrintId :: Flag Bool
regPrintId = Flag Bool
forall a. Monoid a => a
mempty,
regDistPref :: Flag String
regDistPref = String -> Flag String
forall a. a -> Flag a
toFlag String
builddir,
regArgs :: [String]
regArgs = [],
regVerbosity :: Flag Verbosity
regVerbosity = Verbosity -> Flag Verbosity
forall a. a -> Flag a
toFlag Verbosity
verbosity,
regCabalFilePath :: Flag String
regCabalFilePath = Flag String
forall a. Monoid a => a
mempty
}
setupHsHaddockFlags :: ElaboratedConfiguredPackage
-> ElaboratedSharedConfig
-> Verbosity
-> FilePath
-> Cabal.HaddockFlags
setupHsHaddockFlags :: ElaboratedConfiguredPackage
-> ElaboratedSharedConfig -> Verbosity -> String -> HaddockFlags
setupHsHaddockFlags (ElaboratedConfiguredPackage{Bool
[String]
[Maybe PackageDB]
PackageDBStack
[PathTemplate]
[ComponentTarget]
Maybe String
Maybe CabalFileText
Maybe PathTemplate
Maybe TestShowDetails
Maybe PackageSourceHash
Maybe ComponentTarget
Map String String
Map String [String]
Map ModuleName Module
Map ModuleName OpenModule
OptionalStanzaMap (Maybe Bool)
OptionalStanzaSet
PackageIdentifier
ComponentRequestedSpec
UnitId
Version
FlagAssignment
PackageDescription
InstalledPackageId
DebugInfoLevel
OptimisationLevel
ProfDetailLevel
HaddockTarget
ModuleShape
InstallDirs String
DumpBuildInfo
UnresolvedPkgLoc
SetupScriptStyle
BuildStyle
ElaboratedPackageOrComponent
elabUnitId :: ElaboratedConfiguredPackage -> UnitId
elabComponentId :: ElaboratedConfiguredPackage -> InstalledPackageId
elabInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName Module
elabLinkedInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName OpenModule
elabIsCanonical :: ElaboratedConfiguredPackage -> Bool
elabPkgSourceId :: ElaboratedConfiguredPackage -> PackageIdentifier
elabModuleShape :: ElaboratedConfiguredPackage -> ModuleShape
elabFlagAssignment :: ElaboratedConfiguredPackage -> FlagAssignment
elabFlagDefaults :: ElaboratedConfiguredPackage -> FlagAssignment
elabPkgDescription :: ElaboratedConfiguredPackage -> PackageDescription
elabPkgSourceLocation :: ElaboratedConfiguredPackage -> UnresolvedPkgLoc
elabPkgSourceHash :: ElaboratedConfiguredPackage -> Maybe PackageSourceHash
elabLocalToProject :: ElaboratedConfiguredPackage -> Bool
elabBuildStyle :: ElaboratedConfiguredPackage -> BuildStyle
elabEnabledSpec :: ElaboratedConfiguredPackage -> ComponentRequestedSpec
elabStanzasAvailable :: ElaboratedConfiguredPackage -> OptionalStanzaSet
elabStanzasRequested :: ElaboratedConfiguredPackage -> OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: ElaboratedConfiguredPackage -> [Maybe PackageDB]
elabSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabPkgDescriptionOverride :: ElaboratedConfiguredPackage -> Maybe CabalFileText
elabVanillaLib :: ElaboratedConfiguredPackage -> Bool
elabSharedLib :: ElaboratedConfiguredPackage -> Bool
elabStaticLib :: ElaboratedConfiguredPackage -> Bool
elabDynExe :: ElaboratedConfiguredPackage -> Bool
elabFullyStaticExe :: ElaboratedConfiguredPackage -> Bool
elabGHCiLib :: ElaboratedConfiguredPackage -> Bool
elabProfLib :: ElaboratedConfiguredPackage -> Bool
elabProfExe :: ElaboratedConfiguredPackage -> Bool
elabProfLibDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabProfExeDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabCoverage :: ElaboratedConfiguredPackage -> Bool
elabOptimization :: ElaboratedConfiguredPackage -> OptimisationLevel
elabSplitObjs :: ElaboratedConfiguredPackage -> Bool
elabSplitSections :: ElaboratedConfiguredPackage -> Bool
elabStripLibs :: ElaboratedConfiguredPackage -> Bool
elabStripExes :: ElaboratedConfiguredPackage -> Bool
elabDebugInfo :: ElaboratedConfiguredPackage -> DebugInfoLevel
elabDumpBuildInfo :: ElaboratedConfiguredPackage -> DumpBuildInfo
elabProgramPaths :: ElaboratedConfiguredPackage -> Map String String
elabProgramArgs :: ElaboratedConfiguredPackage -> Map String [String]
elabProgramPathExtra :: ElaboratedConfiguredPackage -> [String]
elabConfigureScriptArgs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirsStatic :: ElaboratedConfiguredPackage -> [String]
elabExtraFrameworkDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraIncludeDirs :: ElaboratedConfiguredPackage -> [String]
elabProgPrefix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabProgSuffix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabInstallDirs :: ElaboratedConfiguredPackage -> InstallDirs String
elabHaddockHoogle :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtml :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtmlLocation :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockForeignLibs :: ElaboratedConfiguredPackage -> Bool
elabHaddockForHackage :: ElaboratedConfiguredPackage -> HaddockTarget
elabHaddockExecutables :: ElaboratedConfiguredPackage -> Bool
elabHaddockTestSuites :: ElaboratedConfiguredPackage -> Bool
elabHaddockBenchmarks :: ElaboratedConfiguredPackage -> Bool
elabHaddockInternal :: ElaboratedConfiguredPackage -> Bool
elabHaddockCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockLinkedSource :: ElaboratedConfiguredPackage -> Bool
elabHaddockQuickJump :: ElaboratedConfiguredPackage -> Bool
elabHaddockHscolourCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockContents :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestMachineLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestHumanLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestShowDetails :: ElaboratedConfiguredPackage -> Maybe TestShowDetails
elabTestKeepTix :: ElaboratedConfiguredPackage -> Bool
elabTestWrapper :: ElaboratedConfiguredPackage -> Maybe String
elabTestFailWhenNoTestSuites :: ElaboratedConfiguredPackage -> Bool
elabTestTestOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabBenchmarkOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabSetupScriptStyle :: ElaboratedConfiguredPackage -> SetupScriptStyle
elabSetupScriptCliVersion :: ElaboratedConfiguredPackage -> Version
elabConfigureTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabTestTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBenchTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabReplTarget :: ElaboratedConfiguredPackage -> Maybe ComponentTarget
elabHaddockTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildHaddocks :: ElaboratedConfiguredPackage -> Bool
elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabUnitId :: UnitId
elabComponentId :: InstalledPackageId
elabInstantiatedWith :: Map ModuleName Module
elabLinkedInstantiatedWith :: Map ModuleName OpenModule
elabIsCanonical :: Bool
elabPkgSourceId :: PackageIdentifier
elabModuleShape :: ModuleShape
elabFlagAssignment :: FlagAssignment
elabFlagDefaults :: FlagAssignment
elabPkgDescription :: PackageDescription
elabPkgSourceLocation :: UnresolvedPkgLoc
elabPkgSourceHash :: Maybe PackageSourceHash
elabLocalToProject :: Bool
elabBuildStyle :: BuildStyle
elabEnabledSpec :: ComponentRequestedSpec
elabStanzasAvailable :: OptionalStanzaSet
elabStanzasRequested :: OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: [Maybe PackageDB]
elabSetupPackageDBStack :: PackageDBStack
elabBuildPackageDBStack :: PackageDBStack
elabRegisterPackageDBStack :: PackageDBStack
elabInplaceSetupPackageDBStack :: PackageDBStack
elabInplaceBuildPackageDBStack :: PackageDBStack
elabInplaceRegisterPackageDBStack :: PackageDBStack
elabPkgDescriptionOverride :: Maybe CabalFileText
elabVanillaLib :: Bool
elabSharedLib :: Bool
elabStaticLib :: Bool
elabDynExe :: Bool
elabFullyStaticExe :: Bool
elabGHCiLib :: Bool
elabProfLib :: Bool
elabProfExe :: Bool
elabProfLibDetail :: ProfDetailLevel
elabProfExeDetail :: ProfDetailLevel
elabCoverage :: Bool
elabOptimization :: OptimisationLevel
elabSplitObjs :: Bool
elabSplitSections :: Bool
elabStripLibs :: Bool
elabStripExes :: Bool
elabDebugInfo :: DebugInfoLevel
elabDumpBuildInfo :: DumpBuildInfo
elabProgramPaths :: Map String String
elabProgramArgs :: Map String [String]
elabProgramPathExtra :: [String]
elabConfigureScriptArgs :: [String]
elabExtraLibDirs :: [String]
elabExtraLibDirsStatic :: [String]
elabExtraFrameworkDirs :: [String]
elabExtraIncludeDirs :: [String]
elabProgPrefix :: Maybe PathTemplate
elabProgSuffix :: Maybe PathTemplate
elabInstallDirs :: InstallDirs String
elabHaddockHoogle :: Bool
elabHaddockHtml :: Bool
elabHaddockHtmlLocation :: Maybe String
elabHaddockForeignLibs :: Bool
elabHaddockForHackage :: HaddockTarget
elabHaddockExecutables :: Bool
elabHaddockTestSuites :: Bool
elabHaddockBenchmarks :: Bool
elabHaddockInternal :: Bool
elabHaddockCss :: Maybe String
elabHaddockLinkedSource :: Bool
elabHaddockQuickJump :: Bool
elabHaddockHscolourCss :: Maybe String
elabHaddockContents :: Maybe PathTemplate
elabTestMachineLog :: Maybe PathTemplate
elabTestHumanLog :: Maybe PathTemplate
elabTestShowDetails :: Maybe TestShowDetails
elabTestKeepTix :: Bool
elabTestWrapper :: Maybe String
elabTestFailWhenNoTestSuites :: Bool
elabTestTestOptions :: [PathTemplate]
elabBenchmarkOptions :: [PathTemplate]
elabSetupScriptStyle :: SetupScriptStyle
elabSetupScriptCliVersion :: Version
elabConfigureTargets :: [ComponentTarget]
elabBuildTargets :: [ComponentTarget]
elabTestTargets :: [ComponentTarget]
elabBenchTargets :: [ComponentTarget]
elabReplTarget :: Maybe ComponentTarget
elabHaddockTargets :: [ComponentTarget]
elabBuildHaddocks :: Bool
elabPkgOrComp :: ElaboratedPackageOrComponent
..}) ElaboratedSharedConfig
_ Verbosity
verbosity String
builddir =
Cabal.HaddockFlags {
haddockProgramPaths :: [(String, String)]
haddockProgramPaths = [(String, String)]
forall a. Monoid a => a
mempty,
haddockProgramArgs :: [(String, [String])]
haddockProgramArgs = [(String, [String])]
forall a. Monoid a => a
mempty,
haddockHoogle :: Flag Bool
haddockHoogle = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabHaddockHoogle,
haddockHtml :: Flag Bool
haddockHtml = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabHaddockHtml,
haddockHtmlLocation :: Flag String
haddockHtmlLocation = Flag String
-> (String -> Flag String) -> Maybe String -> Flag String
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Flag String
forall a. Monoid a => a
mempty String -> Flag String
forall a. a -> Flag a
toFlag Maybe String
elabHaddockHtmlLocation,
haddockForHackage :: Flag HaddockTarget
haddockForHackage = HaddockTarget -> Flag HaddockTarget
forall a. a -> Flag a
toFlag HaddockTarget
elabHaddockForHackage,
haddockForeignLibs :: Flag Bool
haddockForeignLibs = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabHaddockForeignLibs,
haddockExecutables :: Flag Bool
haddockExecutables = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabHaddockExecutables,
haddockTestSuites :: Flag Bool
haddockTestSuites = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabHaddockTestSuites,
haddockBenchmarks :: Flag Bool
haddockBenchmarks = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabHaddockBenchmarks,
haddockInternal :: Flag Bool
haddockInternal = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabHaddockInternal,
haddockCss :: Flag String
haddockCss = Flag String
-> (String -> Flag String) -> Maybe String -> Flag String
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Flag String
forall a. Monoid a => a
mempty String -> Flag String
forall a. a -> Flag a
toFlag Maybe String
elabHaddockCss,
haddockLinkedSource :: Flag Bool
haddockLinkedSource = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabHaddockLinkedSource,
haddockQuickJump :: Flag Bool
haddockQuickJump = Bool -> Flag Bool
forall a. a -> Flag a
toFlag Bool
elabHaddockQuickJump,
haddockHscolourCss :: Flag String
haddockHscolourCss = Flag String
-> (String -> Flag String) -> Maybe String -> Flag String
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Flag String
forall a. Monoid a => a
mempty String -> Flag String
forall a. a -> Flag a
toFlag Maybe String
elabHaddockHscolourCss,
haddockContents :: Flag PathTemplate
haddockContents = Flag PathTemplate
-> (PathTemplate -> Flag PathTemplate)
-> Maybe PathTemplate
-> Flag PathTemplate
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Flag PathTemplate
forall a. Monoid a => a
mempty PathTemplate -> Flag PathTemplate
forall a. a -> Flag a
toFlag Maybe PathTemplate
elabHaddockContents,
haddockDistPref :: Flag String
haddockDistPref = String -> Flag String
forall a. a -> Flag a
toFlag String
builddir,
haddockKeepTempFiles :: Flag Bool
haddockKeepTempFiles = Flag Bool
forall a. Monoid a => a
mempty,
haddockVerbosity :: Flag Verbosity
haddockVerbosity = Verbosity -> Flag Verbosity
forall a. a -> Flag a
toFlag Verbosity
verbosity,
haddockCabalFilePath :: Flag String
haddockCabalFilePath = Flag String
forall a. Monoid a => a
mempty,
haddockArgs :: [String]
haddockArgs = [String]
forall a. Monoid a => a
mempty
}
setupHsHaddockArgs :: ElaboratedConfiguredPackage -> [String]
setupHsHaddockArgs :: ElaboratedConfiguredPackage -> [String]
setupHsHaddockArgs ElaboratedConfiguredPackage
elab =
(ComponentTarget -> String) -> [ComponentTarget] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (PackageIdentifier -> ComponentTarget -> String
showComponentTarget (ElaboratedConfiguredPackage -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId ElaboratedConfiguredPackage
elab)) (ElaboratedConfiguredPackage -> [ComponentTarget]
elabHaddockTargets ElaboratedConfiguredPackage
elab)
packageHashInputs :: ElaboratedSharedConfig
-> ElaboratedConfiguredPackage
-> PackageHashInputs
packageHashInputs :: ElaboratedSharedConfig
-> ElaboratedConfiguredPackage -> PackageHashInputs
packageHashInputs
ElaboratedSharedConfig
pkgshared
elab :: ElaboratedConfiguredPackage
elab@(ElaboratedConfiguredPackage {
elabPkgSourceHash :: ElaboratedConfiguredPackage -> Maybe PackageSourceHash
elabPkgSourceHash = Just PackageSourceHash
srchash
}) =
PackageHashInputs {
pkgHashPkgId :: PackageIdentifier
pkgHashPkgId = ElaboratedConfiguredPackage -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId ElaboratedConfiguredPackage
elab,
pkgHashComponent :: Maybe Component
pkgHashComponent =
case ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp ElaboratedConfiguredPackage
elab of
ElabPackage ElaboratedPackage
_ -> Maybe Component
forall a. Maybe a
Nothing
ElabComponent ElaboratedComponent
comp -> Component -> Maybe Component
forall a. a -> Maybe a
Just (ElaboratedComponent -> Component
compSolverName ElaboratedComponent
comp),
pkgHashSourceHash :: PackageSourceHash
pkgHashSourceHash = PackageSourceHash
srchash,
pkgHashPkgConfigDeps :: Set (PkgconfigName, Maybe PkgconfigVersion)
pkgHashPkgConfigDeps = [(PkgconfigName, Maybe PkgconfigVersion)]
-> Set (PkgconfigName, Maybe PkgconfigVersion)
forall a. Ord a => [a] -> Set a
Set.fromList (ElaboratedConfiguredPackage
-> [(PkgconfigName, Maybe PkgconfigVersion)]
elabPkgConfigDependencies ElaboratedConfiguredPackage
elab),
pkgHashDirectDeps :: Set InstalledPackageId
pkgHashDirectDeps =
case ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp ElaboratedConfiguredPackage
elab of
ElabPackage (ElaboratedPackage{[(PkgconfigName, Maybe PkgconfigVersion)]
ComponentDeps [()]
ComponentDeps [(ConfiguredId, String)]
ComponentDeps [ConfiguredId]
OptionalStanzaSet
InstalledPackageId
pkgInstalledId :: ElaboratedPackage -> InstalledPackageId
pkgLibDependencies :: ElaboratedPackage -> ComponentDeps [ConfiguredId]
pkgDependsOnSelfLib :: ElaboratedPackage -> ComponentDeps [()]
pkgExeDependencies :: ElaboratedPackage -> ComponentDeps [ConfiguredId]
pkgExeDependencyPaths :: ElaboratedPackage -> ComponentDeps [(ConfiguredId, String)]
pkgPkgConfigDependencies :: ElaboratedPackage -> [(PkgconfigName, Maybe PkgconfigVersion)]
pkgStanzasEnabled :: ElaboratedPackage -> OptionalStanzaSet
pkgInstalledId :: InstalledPackageId
pkgLibDependencies :: ComponentDeps [ConfiguredId]
pkgDependsOnSelfLib :: ComponentDeps [()]
pkgExeDependencies :: ComponentDeps [ConfiguredId]
pkgExeDependencyPaths :: ComponentDeps [(ConfiguredId, String)]
pkgPkgConfigDependencies :: [(PkgconfigName, Maybe PkgconfigVersion)]
pkgStanzasEnabled :: OptionalStanzaSet
..}) ->
[InstalledPackageId] -> Set InstalledPackageId
forall a. Ord a => [a] -> Set a
Set.fromList ([InstalledPackageId] -> Set InstalledPackageId)
-> [InstalledPackageId] -> Set InstalledPackageId
forall a b. (a -> b) -> a -> b
$
[ ConfiguredId -> InstalledPackageId
confInstId ConfiguredId
dep
| ConfiguredId
dep <- (Component -> Bool)
-> ComponentDeps [ConfiguredId] -> [ConfiguredId]
forall a. Monoid a => (Component -> Bool) -> ComponentDeps a -> a
CD.select Component -> Bool
relevantDeps ComponentDeps [ConfiguredId]
pkgLibDependencies ] [InstalledPackageId]
-> [InstalledPackageId] -> [InstalledPackageId]
forall a. [a] -> [a] -> [a]
++
[ ConfiguredId -> InstalledPackageId
confInstId ConfiguredId
dep
| ConfiguredId
dep <- (Component -> Bool)
-> ComponentDeps [ConfiguredId] -> [ConfiguredId]
forall a. Monoid a => (Component -> Bool) -> ComponentDeps a -> a
CD.select Component -> Bool
relevantDeps ComponentDeps [ConfiguredId]
pkgExeDependencies ]
ElabComponent ElaboratedComponent
comp ->
[InstalledPackageId] -> Set InstalledPackageId
forall a. Ord a => [a] -> Set a
Set.fromList ((ConfiguredId -> InstalledPackageId)
-> [ConfiguredId] -> [InstalledPackageId]
forall a b. (a -> b) -> [a] -> [b]
map ConfiguredId -> InstalledPackageId
confInstId (ElaboratedComponent -> [ConfiguredId]
compLibDependencies ElaboratedComponent
comp
[ConfiguredId] -> [ConfiguredId] -> [ConfiguredId]
forall a. [a] -> [a] -> [a]
++ ElaboratedComponent -> [ConfiguredId]
compExeDependencies ElaboratedComponent
comp)),
pkgHashOtherConfig :: PackageHashConfigInputs
pkgHashOtherConfig = ElaboratedSharedConfig
-> ElaboratedConfiguredPackage -> PackageHashConfigInputs
packageHashConfigInputs ElaboratedSharedConfig
pkgshared ElaboratedConfiguredPackage
elab
}
where
relevantDeps :: Component -> Bool
relevantDeps Component
CD.ComponentLib = Bool
True
relevantDeps (CD.ComponentSubLib UnqualComponentName
_) = Bool
True
relevantDeps (CD.ComponentFLib UnqualComponentName
_) = Bool
True
relevantDeps (CD.ComponentExe UnqualComponentName
_) = Bool
True
relevantDeps Component
CD.ComponentSetup = Bool
True
relevantDeps (CD.ComponentTest UnqualComponentName
_) = Bool
False
relevantDeps (CD.ComponentBench UnqualComponentName
_) = Bool
False
packageHashInputs ElaboratedSharedConfig
_ ElaboratedConfiguredPackage
pkg =
String -> PackageHashInputs
forall a. HasCallStack => String -> a
error (String -> PackageHashInputs) -> String -> PackageHashInputs
forall a b. (a -> b) -> a -> b
$ String
"packageHashInputs: only for packages with source hashes. "
String -> String -> String
forall a. [a] -> [a] -> [a]
++ PackageIdentifier -> String
forall a. Pretty a => a -> String
prettyShow (ElaboratedConfiguredPackage -> PackageIdentifier
forall pkg. Package pkg => pkg -> PackageIdentifier
packageId ElaboratedConfiguredPackage
pkg)
packageHashConfigInputs :: ElaboratedSharedConfig
-> ElaboratedConfiguredPackage
-> PackageHashConfigInputs
packageHashConfigInputs :: ElaboratedSharedConfig
-> ElaboratedConfiguredPackage -> PackageHashConfigInputs
packageHashConfigInputs shared :: ElaboratedSharedConfig
shared@ElaboratedSharedConfig{Platform
Compiler
ProgramDb
ReplOptions
pkgConfigCompiler :: ElaboratedSharedConfig -> Compiler
pkgConfigPlatform :: ElaboratedSharedConfig -> Platform
pkgConfigCompilerProgs :: ElaboratedSharedConfig -> ProgramDb
pkgConfigReplOptions :: ElaboratedSharedConfig -> ReplOptions
pkgConfigPlatform :: Platform
pkgConfigCompiler :: Compiler
pkgConfigCompilerProgs :: ProgramDb
pkgConfigReplOptions :: ReplOptions
..} ElaboratedConfiguredPackage
pkg =
PackageHashConfigInputs {
pkgHashCompilerId :: CompilerId
pkgHashCompilerId = Compiler -> CompilerId
compilerId Compiler
pkgConfigCompiler,
pkgHashPlatform :: Platform
pkgHashPlatform = Platform
pkgConfigPlatform,
pkgHashFlagAssignment :: FlagAssignment
pkgHashFlagAssignment = FlagAssignment
elabFlagAssignment,
pkgHashConfigureScriptArgs :: [String]
pkgHashConfigureScriptArgs = [String]
elabConfigureScriptArgs,
pkgHashVanillaLib :: Bool
pkgHashVanillaLib = Bool
elabVanillaLib,
pkgHashSharedLib :: Bool
pkgHashSharedLib = Bool
elabSharedLib,
pkgHashDynExe :: Bool
pkgHashDynExe = Bool
elabDynExe,
pkgHashFullyStaticExe :: Bool
pkgHashFullyStaticExe = Bool
elabFullyStaticExe,
pkgHashGHCiLib :: Bool
pkgHashGHCiLib = Bool
elabGHCiLib,
pkgHashProfLib :: Bool
pkgHashProfLib = Bool
elabProfLib,
pkgHashProfExe :: Bool
pkgHashProfExe = Bool
elabProfExe,
pkgHashProfLibDetail :: ProfDetailLevel
pkgHashProfLibDetail = ProfDetailLevel
elabProfLibDetail,
pkgHashProfExeDetail :: ProfDetailLevel
pkgHashProfExeDetail = ProfDetailLevel
elabProfExeDetail,
pkgHashCoverage :: Bool
pkgHashCoverage = Bool
elabCoverage,
pkgHashOptimization :: OptimisationLevel
pkgHashOptimization = OptimisationLevel
elabOptimization,
pkgHashSplitSections :: Bool
pkgHashSplitSections = Bool
elabSplitSections,
pkgHashSplitObjs :: Bool
pkgHashSplitObjs = Bool
elabSplitObjs,
pkgHashStripLibs :: Bool
pkgHashStripLibs = Bool
elabStripLibs,
pkgHashStripExes :: Bool
pkgHashStripExes = Bool
elabStripExes,
pkgHashDebugInfo :: DebugInfoLevel
pkgHashDebugInfo = DebugInfoLevel
elabDebugInfo,
pkgHashProgramArgs :: Map String [String]
pkgHashProgramArgs = Map String [String]
elabProgramArgs,
pkgHashExtraLibDirs :: [String]
pkgHashExtraLibDirs = [String]
elabExtraLibDirs,
pkgHashExtraFrameworkDirs :: [String]
pkgHashExtraFrameworkDirs = [String]
elabExtraFrameworkDirs,
pkgHashExtraIncludeDirs :: [String]
pkgHashExtraIncludeDirs = [String]
elabExtraIncludeDirs,
pkgHashProgPrefix :: Maybe PathTemplate
pkgHashProgPrefix = Maybe PathTemplate
elabProgPrefix,
pkgHashProgSuffix :: Maybe PathTemplate
pkgHashProgSuffix = Maybe PathTemplate
elabProgSuffix,
pkgHashPackageDbs :: [Maybe PackageDB]
pkgHashPackageDbs = [Maybe PackageDB]
elabPackageDbs,
pkgHashDocumentation :: Bool
pkgHashDocumentation = Bool
elabBuildHaddocks,
pkgHashHaddockHoogle :: Bool
pkgHashHaddockHoogle = Bool
elabHaddockHoogle,
pkgHashHaddockHtml :: Bool
pkgHashHaddockHtml = Bool
elabHaddockHtml,
pkgHashHaddockHtmlLocation :: Maybe String
pkgHashHaddockHtmlLocation = Maybe String
elabHaddockHtmlLocation,
pkgHashHaddockForeignLibs :: Bool
pkgHashHaddockForeignLibs = Bool
elabHaddockForeignLibs,
pkgHashHaddockExecutables :: Bool
pkgHashHaddockExecutables = Bool
elabHaddockExecutables,
pkgHashHaddockTestSuites :: Bool
pkgHashHaddockTestSuites = Bool
elabHaddockTestSuites,
pkgHashHaddockBenchmarks :: Bool
pkgHashHaddockBenchmarks = Bool
elabHaddockBenchmarks,
pkgHashHaddockInternal :: Bool
pkgHashHaddockInternal = Bool
elabHaddockInternal,
pkgHashHaddockCss :: Maybe String
pkgHashHaddockCss = Maybe String
elabHaddockCss,
pkgHashHaddockLinkedSource :: Bool
pkgHashHaddockLinkedSource = Bool
elabHaddockLinkedSource,
pkgHashHaddockQuickJump :: Bool
pkgHashHaddockQuickJump = Bool
elabHaddockQuickJump,
pkgHashHaddockContents :: Maybe PathTemplate
pkgHashHaddockContents = Maybe PathTemplate
elabHaddockContents
}
where
ElaboratedConfiguredPackage{Bool
[String]
[Maybe PackageDB]
PackageDBStack
[PathTemplate]
[ComponentTarget]
Maybe String
Maybe CabalFileText
Maybe PathTemplate
Maybe TestShowDetails
Maybe PackageSourceHash
Maybe ComponentTarget
Map String String
Map String [String]
Map ModuleName Module
Map ModuleName OpenModule
OptionalStanzaMap (Maybe Bool)
OptionalStanzaSet
PackageIdentifier
ComponentRequestedSpec
UnitId
Version
FlagAssignment
PackageDescription
InstalledPackageId
DebugInfoLevel
OptimisationLevel
ProfDetailLevel
HaddockTarget
ModuleShape
InstallDirs String
DumpBuildInfo
UnresolvedPkgLoc
SetupScriptStyle
BuildStyle
ElaboratedPackageOrComponent
elabUnitId :: ElaboratedConfiguredPackage -> UnitId
elabComponentId :: ElaboratedConfiguredPackage -> InstalledPackageId
elabInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName Module
elabLinkedInstantiatedWith :: ElaboratedConfiguredPackage -> Map ModuleName OpenModule
elabIsCanonical :: ElaboratedConfiguredPackage -> Bool
elabPkgSourceId :: ElaboratedConfiguredPackage -> PackageIdentifier
elabModuleShape :: ElaboratedConfiguredPackage -> ModuleShape
elabFlagAssignment :: ElaboratedConfiguredPackage -> FlagAssignment
elabFlagDefaults :: ElaboratedConfiguredPackage -> FlagAssignment
elabPkgDescription :: ElaboratedConfiguredPackage -> PackageDescription
elabPkgSourceLocation :: ElaboratedConfiguredPackage -> UnresolvedPkgLoc
elabPkgSourceHash :: ElaboratedConfiguredPackage -> Maybe PackageSourceHash
elabLocalToProject :: ElaboratedConfiguredPackage -> Bool
elabBuildStyle :: ElaboratedConfiguredPackage -> BuildStyle
elabEnabledSpec :: ElaboratedConfiguredPackage -> ComponentRequestedSpec
elabStanzasAvailable :: ElaboratedConfiguredPackage -> OptionalStanzaSet
elabStanzasRequested :: ElaboratedConfiguredPackage -> OptionalStanzaMap (Maybe Bool)
elabPackageDbs :: ElaboratedConfiguredPackage -> [Maybe PackageDB]
elabSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceSetupPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceBuildPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceRegisterPackageDBStack :: ElaboratedConfiguredPackage -> PackageDBStack
elabPkgDescriptionOverride :: ElaboratedConfiguredPackage -> Maybe CabalFileText
elabVanillaLib :: ElaboratedConfiguredPackage -> Bool
elabSharedLib :: ElaboratedConfiguredPackage -> Bool
elabStaticLib :: ElaboratedConfiguredPackage -> Bool
elabDynExe :: ElaboratedConfiguredPackage -> Bool
elabFullyStaticExe :: ElaboratedConfiguredPackage -> Bool
elabGHCiLib :: ElaboratedConfiguredPackage -> Bool
elabProfLib :: ElaboratedConfiguredPackage -> Bool
elabProfExe :: ElaboratedConfiguredPackage -> Bool
elabProfLibDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabProfExeDetail :: ElaboratedConfiguredPackage -> ProfDetailLevel
elabCoverage :: ElaboratedConfiguredPackage -> Bool
elabOptimization :: ElaboratedConfiguredPackage -> OptimisationLevel
elabSplitObjs :: ElaboratedConfiguredPackage -> Bool
elabSplitSections :: ElaboratedConfiguredPackage -> Bool
elabStripLibs :: ElaboratedConfiguredPackage -> Bool
elabStripExes :: ElaboratedConfiguredPackage -> Bool
elabDebugInfo :: ElaboratedConfiguredPackage -> DebugInfoLevel
elabDumpBuildInfo :: ElaboratedConfiguredPackage -> DumpBuildInfo
elabProgramPaths :: ElaboratedConfiguredPackage -> Map String String
elabProgramArgs :: ElaboratedConfiguredPackage -> Map String [String]
elabProgramPathExtra :: ElaboratedConfiguredPackage -> [String]
elabConfigureScriptArgs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraLibDirsStatic :: ElaboratedConfiguredPackage -> [String]
elabExtraFrameworkDirs :: ElaboratedConfiguredPackage -> [String]
elabExtraIncludeDirs :: ElaboratedConfiguredPackage -> [String]
elabProgPrefix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabProgSuffix :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabInstallDirs :: ElaboratedConfiguredPackage -> InstallDirs String
elabHaddockHoogle :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtml :: ElaboratedConfiguredPackage -> Bool
elabHaddockHtmlLocation :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockForeignLibs :: ElaboratedConfiguredPackage -> Bool
elabHaddockForHackage :: ElaboratedConfiguredPackage -> HaddockTarget
elabHaddockExecutables :: ElaboratedConfiguredPackage -> Bool
elabHaddockTestSuites :: ElaboratedConfiguredPackage -> Bool
elabHaddockBenchmarks :: ElaboratedConfiguredPackage -> Bool
elabHaddockInternal :: ElaboratedConfiguredPackage -> Bool
elabHaddockCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockLinkedSource :: ElaboratedConfiguredPackage -> Bool
elabHaddockQuickJump :: ElaboratedConfiguredPackage -> Bool
elabHaddockHscolourCss :: ElaboratedConfiguredPackage -> Maybe String
elabHaddockContents :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestMachineLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestHumanLog :: ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestShowDetails :: ElaboratedConfiguredPackage -> Maybe TestShowDetails
elabTestKeepTix :: ElaboratedConfiguredPackage -> Bool
elabTestWrapper :: ElaboratedConfiguredPackage -> Maybe String
elabTestFailWhenNoTestSuites :: ElaboratedConfiguredPackage -> Bool
elabTestTestOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabBenchmarkOptions :: ElaboratedConfiguredPackage -> [PathTemplate]
elabSetupScriptStyle :: ElaboratedConfiguredPackage -> SetupScriptStyle
elabSetupScriptCliVersion :: ElaboratedConfiguredPackage -> Version
elabConfigureTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabTestTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBenchTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabReplTarget :: ElaboratedConfiguredPackage -> Maybe ComponentTarget
elabHaddockTargets :: ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildHaddocks :: ElaboratedConfiguredPackage -> Bool
elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabFlagAssignment :: FlagAssignment
elabConfigureScriptArgs :: [String]
elabVanillaLib :: Bool
elabSharedLib :: Bool
elabDynExe :: Bool
elabFullyStaticExe :: Bool
elabGHCiLib :: Bool
elabProfLib :: Bool
elabProfExe :: Bool
elabProfLibDetail :: ProfDetailLevel
elabProfExeDetail :: ProfDetailLevel
elabCoverage :: Bool
elabOptimization :: OptimisationLevel
elabSplitSections :: Bool
elabSplitObjs :: Bool
elabStripLibs :: Bool
elabStripExes :: Bool
elabDebugInfo :: DebugInfoLevel
elabProgramArgs :: Map String [String]
elabExtraLibDirs :: [String]
elabExtraFrameworkDirs :: [String]
elabExtraIncludeDirs :: [String]
elabProgPrefix :: Maybe PathTemplate
elabProgSuffix :: Maybe PathTemplate
elabPackageDbs :: [Maybe PackageDB]
elabBuildHaddocks :: Bool
elabHaddockHoogle :: Bool
elabHaddockHtml :: Bool
elabHaddockHtmlLocation :: Maybe String
elabHaddockForeignLibs :: Bool
elabHaddockExecutables :: Bool
elabHaddockTestSuites :: Bool
elabHaddockBenchmarks :: Bool
elabHaddockInternal :: Bool
elabHaddockCss :: Maybe String
elabHaddockLinkedSource :: Bool
elabHaddockQuickJump :: Bool
elabHaddockContents :: Maybe PathTemplate
elabUnitId :: UnitId
elabComponentId :: InstalledPackageId
elabInstantiatedWith :: Map ModuleName Module
elabLinkedInstantiatedWith :: Map ModuleName OpenModule
elabIsCanonical :: Bool
elabPkgSourceId :: PackageIdentifier
elabModuleShape :: ModuleShape
elabFlagDefaults :: FlagAssignment
elabPkgDescription :: PackageDescription
elabPkgSourceLocation :: UnresolvedPkgLoc
elabPkgSourceHash :: Maybe PackageSourceHash
elabLocalToProject :: Bool
elabBuildStyle :: BuildStyle
elabEnabledSpec :: ComponentRequestedSpec
elabStanzasAvailable :: OptionalStanzaSet
elabStanzasRequested :: OptionalStanzaMap (Maybe Bool)
elabSetupPackageDBStack :: PackageDBStack
elabBuildPackageDBStack :: PackageDBStack
elabRegisterPackageDBStack :: PackageDBStack
elabInplaceSetupPackageDBStack :: PackageDBStack
elabInplaceBuildPackageDBStack :: PackageDBStack
elabInplaceRegisterPackageDBStack :: PackageDBStack
elabPkgDescriptionOverride :: Maybe CabalFileText
elabStaticLib :: Bool
elabDumpBuildInfo :: DumpBuildInfo
elabProgramPaths :: Map String String
elabProgramPathExtra :: [String]
elabExtraLibDirsStatic :: [String]
elabInstallDirs :: InstallDirs String
elabHaddockForHackage :: HaddockTarget
elabHaddockHscolourCss :: Maybe String
elabTestMachineLog :: Maybe PathTemplate
elabTestHumanLog :: Maybe PathTemplate
elabTestShowDetails :: Maybe TestShowDetails
elabTestKeepTix :: Bool
elabTestWrapper :: Maybe String
elabTestFailWhenNoTestSuites :: Bool
elabTestTestOptions :: [PathTemplate]
elabBenchmarkOptions :: [PathTemplate]
elabSetupScriptStyle :: SetupScriptStyle
elabSetupScriptCliVersion :: Version
elabConfigureTargets :: [ComponentTarget]
elabBuildTargets :: [ComponentTarget]
elabTestTargets :: [ComponentTarget]
elabBenchTargets :: [ComponentTarget]
elabReplTarget :: Maybe ComponentTarget
elabHaddockTargets :: [ComponentTarget]
elabPkgOrComp :: ElaboratedPackageOrComponent
..} = ElaboratedSharedConfig
-> ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage
normaliseConfiguredPackage ElaboratedSharedConfig
shared ElaboratedConfiguredPackage
pkg
improveInstallPlanWithInstalledPackages :: Set UnitId
-> ElaboratedInstallPlan
-> ElaboratedInstallPlan
improveInstallPlanWithInstalledPackages :: Set UnitId -> ElaboratedInstallPlan -> ElaboratedInstallPlan
improveInstallPlanWithInstalledPackages Set UnitId
installedPkgIdSet =
(ElaboratedConfiguredPackage -> Bool)
-> ElaboratedInstallPlan -> ElaboratedInstallPlan
forall ipkg srcpkg.
(IsUnit ipkg, IsUnit srcpkg) =>
(srcpkg -> Bool)
-> GenericInstallPlan ipkg srcpkg -> GenericInstallPlan ipkg srcpkg
InstallPlan.installed ElaboratedConfiguredPackage -> Bool
forall {pkg}. HasUnitId pkg => pkg -> Bool
canPackageBeImproved
where
canPackageBeImproved :: pkg -> Bool
canPackageBeImproved pkg
pkg =
pkg -> UnitId
forall pkg. HasUnitId pkg => pkg -> UnitId
installedUnitId pkg
pkg UnitId -> Set UnitId -> Bool
forall a. Ord a => a -> Set a -> Bool
`Set.member` Set UnitId
installedPkgIdSet
binDirectoryFor
:: DistDirLayout
-> ElaboratedSharedConfig
-> ElaboratedConfiguredPackage
-> FilePath
-> FilePath
binDirectoryFor :: DistDirLayout
-> ElaboratedSharedConfig
-> ElaboratedConfiguredPackage
-> String
-> String
binDirectoryFor DistDirLayout
layout ElaboratedSharedConfig
config ElaboratedConfiguredPackage
package String
exe = case ElaboratedConfiguredPackage -> BuildStyle
elabBuildStyle ElaboratedConfiguredPackage
package of
BuildStyle
BuildAndInstall -> ElaboratedConfiguredPackage -> String
installedBinDirectory ElaboratedConfiguredPackage
package
BuildStyle
BuildInplaceOnly -> DistDirLayout
-> ElaboratedSharedConfig -> ElaboratedConfiguredPackage -> String
inplaceBinRoot DistDirLayout
layout ElaboratedSharedConfig
config ElaboratedConfiguredPackage
package String -> String -> String
</> String
exe
installedBinDirectory :: ElaboratedConfiguredPackage -> FilePath
installedBinDirectory :: ElaboratedConfiguredPackage -> String
installedBinDirectory = InstallDirs String -> String
forall dir. InstallDirs dir -> dir
InstallDirs.bindir (InstallDirs String -> String)
-> (ElaboratedConfiguredPackage -> InstallDirs String)
-> ElaboratedConfiguredPackage
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ElaboratedConfiguredPackage -> InstallDirs String
elabInstallDirs
inplaceBinRoot
:: DistDirLayout
-> ElaboratedSharedConfig
-> ElaboratedConfiguredPackage
-> FilePath
inplaceBinRoot :: DistDirLayout
-> ElaboratedSharedConfig -> ElaboratedConfiguredPackage -> String
inplaceBinRoot DistDirLayout
layout ElaboratedSharedConfig
config ElaboratedConfiguredPackage
package
= DistDirLayout -> DistDirParams -> String
distBuildDirectory DistDirLayout
layout (ElaboratedSharedConfig
-> ElaboratedConfiguredPackage -> DistDirParams
elabDistDirParams ElaboratedSharedConfig
config ElaboratedConfiguredPackage
package)
String -> String -> String
</> String
"build"