{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE TypeFamilies #-}
module Distribution.Client.ProjectPlanning.Types (
SolverInstallPlan,
ElaboratedInstallPlan,
normaliseConfiguredPackage,
ElaboratedConfiguredPackage(..),
elabDistDirParams,
elabExeDependencyPaths,
elabLibDependencies,
elabOrderLibDependencies,
elabExeDependencies,
elabOrderExeDependencies,
elabSetupDependencies,
elabPkgConfigDependencies,
elabInplaceDependencyBuildCacheFiles,
elabRequiresRegistration,
dataDirsEnvironmentForPlan,
elabPlanPackageName,
elabConfiguredName,
elabComponentName,
ElaboratedPackageOrComponent(..),
ElaboratedComponent(..),
ElaboratedPackage(..),
pkgOrderDependencies,
ElaboratedPlanPackage,
ElaboratedSharedConfig(..),
ElaboratedReadyPackage,
BuildStyle(..),
CabalFileText,
ComponentTarget(..),
showComponentTarget,
showTestComponentTarget,
showBenchComponentTarget,
SubComponentTarget(..),
isSubLibComponentTarget,
isForeignLibComponentTarget,
isExeComponentTarget,
isTestComponentTarget,
isBenchComponentTarget,
componentOptionalStanza,
SetupScriptStyle(..),
) where
import Distribution.Client.Compat.Prelude
import Prelude ()
import Distribution.Client.TargetSelector
( SubComponentTarget(..) )
import Distribution.Client.PackageHash
import Distribution.Client.Types
import qualified Distribution.Client.InstallPlan as InstallPlan
import Distribution.Client.InstallPlan
( GenericInstallPlan, GenericPlanPackage(..) )
import Distribution.Client.SolverInstallPlan
( SolverInstallPlan )
import Distribution.Client.DistDirLayout
import Distribution.Backpack
import Distribution.Backpack.ModuleShape
import Distribution.Verbosity (normal)
import Distribution.Types.ComponentRequestedSpec
import Distribution.Types.PkgconfigVersion
import Distribution.Types.PackageDescription (PackageDescription(..))
import Distribution.Package
import Distribution.System
import qualified Distribution.PackageDescription as Cabal
import Distribution.InstalledPackageInfo (InstalledPackageInfo)
import Distribution.Simple.Compiler
import Distribution.Simple.Build.PathsModule (pkgPathEnvVar)
import qualified Distribution.Simple.BuildTarget as Cabal
import Distribution.Simple.Program
import Distribution.ModuleName (ModuleName)
import Distribution.Simple.LocalBuildInfo
( ComponentName(..), LibraryName(..) )
import qualified Distribution.Simple.InstallDirs as InstallDirs
import Distribution.Simple.InstallDirs (PathTemplate)
import Distribution.Simple.Setup
( HaddockTarget, TestShowDetails, DumpBuildInfo (..), ReplOptions )
import Distribution.Version
import qualified Distribution.Solver.Types.ComponentDeps as CD
import Distribution.Solver.Types.ComponentDeps (ComponentDeps)
import Distribution.Solver.Types.OptionalStanza
import Distribution.Compat.Graph (IsNode(..))
import Distribution.Simple.Utils (ordNub)
import qualified Data.Map as Map
import qualified Data.ByteString.Lazy as LBS
import qualified Data.Monoid as Mon
import System.FilePath ((</>))
type ElaboratedInstallPlan
= GenericInstallPlan InstalledPackageInfo
ElaboratedConfiguredPackage
type ElaboratedPlanPackage
= GenericPlanPackage InstalledPackageInfo
ElaboratedConfiguredPackage
elabPlanPackageName :: Verbosity -> ElaboratedPlanPackage -> String
elabPlanPackageName :: Verbosity -> ElaboratedPlanPackage -> FilePath
elabPlanPackageName Verbosity
verbosity (PreExisting InstalledPackageInfo
ipkg)
| Verbosity
verbosity forall a. Ord a => a -> a -> Bool
<= Verbosity
normal = forall a. Pretty a => a -> FilePath
prettyShow (forall pkg. Package pkg => pkg -> PackageName
packageName InstalledPackageInfo
ipkg)
| Bool
otherwise = forall a. Pretty a => a -> FilePath
prettyShow (forall pkg. HasUnitId pkg => pkg -> UnitId
installedUnitId InstalledPackageInfo
ipkg)
elabPlanPackageName Verbosity
verbosity (Configured ElaboratedConfiguredPackage
elab)
= Verbosity -> ElaboratedConfiguredPackage -> FilePath
elabConfiguredName Verbosity
verbosity ElaboratedConfiguredPackage
elab
elabPlanPackageName Verbosity
verbosity (Installed ElaboratedConfiguredPackage
elab)
= Verbosity -> ElaboratedConfiguredPackage -> FilePath
elabConfiguredName Verbosity
verbosity ElaboratedConfiguredPackage
elab
data ElaboratedSharedConfig
= ElaboratedSharedConfig {
ElaboratedSharedConfig -> Platform
pkgConfigPlatform :: Platform,
ElaboratedSharedConfig -> Compiler
pkgConfigCompiler :: Compiler,
ElaboratedSharedConfig -> ProgramDb
pkgConfigCompilerProgs :: ProgramDb,
ElaboratedSharedConfig -> ReplOptions
pkgConfigReplOptions :: ReplOptions
}
deriving (Int -> ElaboratedSharedConfig -> ShowS
[ElaboratedSharedConfig] -> ShowS
ElaboratedSharedConfig -> FilePath
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
showList :: [ElaboratedSharedConfig] -> ShowS
$cshowList :: [ElaboratedSharedConfig] -> ShowS
show :: ElaboratedSharedConfig -> FilePath
$cshow :: ElaboratedSharedConfig -> FilePath
showsPrec :: Int -> ElaboratedSharedConfig -> ShowS
$cshowsPrec :: Int -> ElaboratedSharedConfig -> ShowS
Show, forall x. Rep ElaboratedSharedConfig x -> ElaboratedSharedConfig
forall x. ElaboratedSharedConfig -> Rep ElaboratedSharedConfig x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ElaboratedSharedConfig x -> ElaboratedSharedConfig
$cfrom :: forall x. ElaboratedSharedConfig -> Rep ElaboratedSharedConfig x
Generic, Typeable)
instance Binary ElaboratedSharedConfig
instance Structured ElaboratedSharedConfig
data ElaboratedConfiguredPackage
= ElaboratedConfiguredPackage {
ElaboratedConfiguredPackage -> UnitId
elabUnitId :: UnitId,
ElaboratedConfiguredPackage -> ComponentId
elabComponentId :: ComponentId,
ElaboratedConfiguredPackage -> Map ModuleName Module
elabInstantiatedWith :: Map ModuleName Module,
ElaboratedConfiguredPackage -> Map ModuleName OpenModule
elabLinkedInstantiatedWith :: Map ModuleName OpenModule,
ElaboratedConfiguredPackage -> Bool
elabIsCanonical :: Bool,
ElaboratedConfiguredPackage -> PackageId
elabPkgSourceId :: PackageId,
ElaboratedConfiguredPackage -> ModuleShape
elabModuleShape :: ModuleShape,
ElaboratedConfiguredPackage -> FlagAssignment
elabFlagAssignment :: Cabal.FlagAssignment,
ElaboratedConfiguredPackage -> FlagAssignment
elabFlagDefaults :: Cabal.FlagAssignment,
ElaboratedConfiguredPackage -> PackageDescription
elabPkgDescription :: Cabal.PackageDescription,
ElaboratedConfiguredPackage -> PackageLocation (Maybe FilePath)
elabPkgSourceLocation :: PackageLocation (Maybe FilePath),
ElaboratedConfiguredPackage -> Maybe PackageSourceHash
elabPkgSourceHash :: Maybe PackageSourceHash,
ElaboratedConfiguredPackage -> Bool
elabLocalToProject :: Bool,
ElaboratedConfiguredPackage -> BuildStyle
elabBuildStyle :: BuildStyle,
ElaboratedConfiguredPackage -> ComponentRequestedSpec
elabEnabledSpec :: ComponentRequestedSpec,
ElaboratedConfiguredPackage -> OptionalStanzaSet
elabStanzasAvailable :: OptionalStanzaSet,
ElaboratedConfiguredPackage -> OptionalStanzaMap (Maybe Bool)
elabStanzasRequested :: OptionalStanzaMap (Maybe Bool),
ElaboratedConfiguredPackage -> [Maybe PackageDB]
elabPackageDbs :: [Maybe PackageDB],
ElaboratedConfiguredPackage -> PackageDBStack
elabSetupPackageDBStack :: PackageDBStack,
ElaboratedConfiguredPackage -> PackageDBStack
elabBuildPackageDBStack :: PackageDBStack,
ElaboratedConfiguredPackage -> PackageDBStack
elabRegisterPackageDBStack :: PackageDBStack,
ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceSetupPackageDBStack :: PackageDBStack,
ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceBuildPackageDBStack :: PackageDBStack,
ElaboratedConfiguredPackage -> PackageDBStack
elabInplaceRegisterPackageDBStack :: PackageDBStack,
ElaboratedConfiguredPackage -> Maybe CabalFileText
elabPkgDescriptionOverride :: Maybe CabalFileText,
ElaboratedConfiguredPackage -> Bool
elabVanillaLib :: Bool,
ElaboratedConfiguredPackage -> Bool
elabSharedLib :: Bool,
ElaboratedConfiguredPackage -> Bool
elabStaticLib :: Bool,
ElaboratedConfiguredPackage -> Bool
elabDynExe :: Bool,
ElaboratedConfiguredPackage -> Bool
elabFullyStaticExe :: Bool,
ElaboratedConfiguredPackage -> Bool
elabGHCiLib :: Bool,
ElaboratedConfiguredPackage -> Bool
elabProfLib :: Bool,
ElaboratedConfiguredPackage -> Bool
elabProfExe :: Bool,
ElaboratedConfiguredPackage -> ProfDetailLevel
elabProfLibDetail :: ProfDetailLevel,
ElaboratedConfiguredPackage -> ProfDetailLevel
elabProfExeDetail :: ProfDetailLevel,
ElaboratedConfiguredPackage -> Bool
elabCoverage :: Bool,
ElaboratedConfiguredPackage -> OptimisationLevel
elabOptimization :: OptimisationLevel,
ElaboratedConfiguredPackage -> Bool
elabSplitObjs :: Bool,
ElaboratedConfiguredPackage -> Bool
elabSplitSections :: Bool,
ElaboratedConfiguredPackage -> Bool
elabStripLibs :: Bool,
ElaboratedConfiguredPackage -> Bool
elabStripExes :: Bool,
ElaboratedConfiguredPackage -> DebugInfoLevel
elabDebugInfo :: DebugInfoLevel,
ElaboratedConfiguredPackage -> DumpBuildInfo
elabDumpBuildInfo :: DumpBuildInfo,
ElaboratedConfiguredPackage -> Map FilePath FilePath
elabProgramPaths :: Map String FilePath,
ElaboratedConfiguredPackage -> Map FilePath [FilePath]
elabProgramArgs :: Map String [String],
:: [FilePath],
ElaboratedConfiguredPackage -> [FilePath]
elabConfigureScriptArgs :: [String],
:: [FilePath],
:: [FilePath],
:: [FilePath],
:: [FilePath],
ElaboratedConfiguredPackage -> Maybe PathTemplate
elabProgPrefix :: Maybe PathTemplate,
ElaboratedConfiguredPackage -> Maybe PathTemplate
elabProgSuffix :: Maybe PathTemplate,
ElaboratedConfiguredPackage -> InstallDirs FilePath
elabInstallDirs :: InstallDirs.InstallDirs FilePath,
ElaboratedConfiguredPackage -> Bool
elabHaddockHoogle :: Bool,
ElaboratedConfiguredPackage -> Bool
elabHaddockHtml :: Bool,
ElaboratedConfiguredPackage -> Maybe FilePath
elabHaddockHtmlLocation :: Maybe String,
ElaboratedConfiguredPackage -> Bool
elabHaddockForeignLibs :: Bool,
ElaboratedConfiguredPackage -> HaddockTarget
elabHaddockForHackage :: HaddockTarget,
ElaboratedConfiguredPackage -> Bool
elabHaddockExecutables :: Bool,
ElaboratedConfiguredPackage -> Bool
elabHaddockTestSuites :: Bool,
ElaboratedConfiguredPackage -> Bool
elabHaddockBenchmarks :: Bool,
ElaboratedConfiguredPackage -> Bool
elabHaddockInternal :: Bool,
ElaboratedConfiguredPackage -> Maybe FilePath
elabHaddockCss :: Maybe FilePath,
ElaboratedConfiguredPackage -> Bool
elabHaddockLinkedSource :: Bool,
ElaboratedConfiguredPackage -> Bool
elabHaddockQuickJump :: Bool,
ElaboratedConfiguredPackage -> Maybe FilePath
elabHaddockHscolourCss :: Maybe FilePath,
ElaboratedConfiguredPackage -> Maybe PathTemplate
elabHaddockContents :: Maybe PathTemplate,
ElaboratedConfiguredPackage -> Maybe PathTemplate
elabHaddockIndex :: Maybe PathTemplate,
ElaboratedConfiguredPackage -> Maybe FilePath
elabHaddockBaseUrl :: Maybe String,
ElaboratedConfiguredPackage -> Maybe FilePath
elabHaddockLib :: Maybe String,
ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestMachineLog :: Maybe PathTemplate,
ElaboratedConfiguredPackage -> Maybe PathTemplate
elabTestHumanLog :: Maybe PathTemplate,
ElaboratedConfiguredPackage -> Maybe TestShowDetails
elabTestShowDetails :: Maybe TestShowDetails,
ElaboratedConfiguredPackage -> Bool
elabTestKeepTix :: Bool,
ElaboratedConfiguredPackage -> Maybe FilePath
elabTestWrapper :: Maybe FilePath,
ElaboratedConfiguredPackage -> Bool
elabTestFailWhenNoTestSuites :: Bool,
ElaboratedConfiguredPackage -> [PathTemplate]
elabTestTestOptions :: [PathTemplate],
ElaboratedConfiguredPackage -> [PathTemplate]
elabBenchmarkOptions :: [PathTemplate],
ElaboratedConfiguredPackage -> SetupScriptStyle
elabSetupScriptStyle :: SetupScriptStyle,
ElaboratedConfiguredPackage -> Version
elabSetupScriptCliVersion :: Version,
ElaboratedConfiguredPackage -> [ComponentTarget]
elabConfigureTargets :: [ComponentTarget],
ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets :: [ComponentTarget],
ElaboratedConfiguredPackage -> [ComponentTarget]
elabTestTargets :: [ComponentTarget],
ElaboratedConfiguredPackage -> [ComponentTarget]
elabBenchTargets :: [ComponentTarget],
ElaboratedConfiguredPackage -> Maybe ComponentTarget
elabReplTarget :: Maybe ComponentTarget,
ElaboratedConfiguredPackage -> [ComponentTarget]
elabHaddockTargets :: [ComponentTarget],
ElaboratedConfiguredPackage -> Bool
elabBuildHaddocks :: Bool,
ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp :: ElaboratedPackageOrComponent
}
deriving (ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage -> Bool
$c/= :: ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage -> Bool
== :: ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage -> Bool
$c== :: ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage -> Bool
Eq, Int -> ElaboratedConfiguredPackage -> ShowS
[ElaboratedConfiguredPackage] -> ShowS
ElaboratedConfiguredPackage -> FilePath
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
showList :: [ElaboratedConfiguredPackage] -> ShowS
$cshowList :: [ElaboratedConfiguredPackage] -> ShowS
show :: ElaboratedConfiguredPackage -> FilePath
$cshow :: ElaboratedConfiguredPackage -> FilePath
showsPrec :: Int -> ElaboratedConfiguredPackage -> ShowS
$cshowsPrec :: Int -> ElaboratedConfiguredPackage -> ShowS
Show, forall x.
Rep ElaboratedConfiguredPackage x -> ElaboratedConfiguredPackage
forall x.
ElaboratedConfiguredPackage -> Rep ElaboratedConfiguredPackage x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep ElaboratedConfiguredPackage x -> ElaboratedConfiguredPackage
$cfrom :: forall x.
ElaboratedConfiguredPackage -> Rep ElaboratedConfiguredPackage x
Generic, Typeable)
normaliseConfiguredPackage :: ElaboratedSharedConfig
-> ElaboratedConfiguredPackage
-> ElaboratedConfiguredPackage
normaliseConfiguredPackage :: ElaboratedSharedConfig
-> ElaboratedConfiguredPackage -> ElaboratedConfiguredPackage
normaliseConfiguredPackage ElaboratedSharedConfig{ProgramDb
pkgConfigCompilerProgs :: ProgramDb
pkgConfigCompilerProgs :: ElaboratedSharedConfig -> ProgramDb
pkgConfigCompilerProgs} ElaboratedConfiguredPackage
pkg =
ElaboratedConfiguredPackage
pkg { elabProgramArgs :: Map FilePath [FilePath]
elabProgramArgs = forall k a b. (k -> a -> Maybe b) -> Map k a -> Map k b
Map.mapMaybeWithKey FilePath -> [FilePath] -> Maybe [FilePath]
lookupFilter (ElaboratedConfiguredPackage -> Map FilePath [FilePath]
elabProgramArgs ElaboratedConfiguredPackage
pkg) }
where
knownProgramDb :: ProgramDb
knownProgramDb = [Program] -> ProgramDb -> ProgramDb
addKnownPrograms [Program]
builtinPrograms ProgramDb
pkgConfigCompilerProgs
pkgDesc :: PackageDescription
pkgDesc :: PackageDescription
pkgDesc = ElaboratedConfiguredPackage -> PackageDescription
elabPkgDescription ElaboratedConfiguredPackage
pkg
removeEmpty :: [String] -> Maybe [String]
removeEmpty :: [FilePath] -> Maybe [FilePath]
removeEmpty [] = forall a. Maybe a
Nothing
removeEmpty [FilePath]
xs = forall a. a -> Maybe a
Just [FilePath]
xs
lookupFilter :: String -> [String] -> Maybe [String]
lookupFilter :: FilePath -> [FilePath] -> Maybe [FilePath]
lookupFilter FilePath
n [FilePath]
args = [FilePath] -> Maybe [FilePath]
removeEmpty forall a b. (a -> b) -> a -> b
$ case FilePath -> ProgramDb -> Maybe Program
lookupKnownProgram FilePath
n ProgramDb
knownProgramDb of
Just Program
p -> Program
-> Maybe Version -> PackageDescription -> [FilePath] -> [FilePath]
programNormaliseArgs Program
p (Program -> Maybe Version
getVersion Program
p) PackageDescription
pkgDesc [FilePath]
args
Maybe Program
Nothing -> [FilePath]
args
getVersion :: Program -> Maybe Version
getVersion :: Program -> Maybe Version
getVersion Program
p = Program -> ProgramDb -> Maybe ConfiguredProgram
lookupProgram Program
p ProgramDb
knownProgramDb forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ConfiguredProgram -> Maybe Version
programVersion
elabRequiresRegistration :: ElaboratedConfiguredPackage -> Bool
elabRequiresRegistration :: ElaboratedConfiguredPackage -> Bool
elabRequiresRegistration ElaboratedConfiguredPackage
elab =
case ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp ElaboratedConfiguredPackage
elab of
ElabComponent ElaboratedComponent
comp ->
case ElaboratedComponent -> Maybe ComponentName
compComponentName ElaboratedComponent
comp of
Just ComponentName
cn -> ComponentName -> Bool
is_lib ComponentName
cn Bool -> Bool -> Bool
&& Bool
build_target
Maybe ComponentName
_ -> Bool
False
ElabPackage ElaboratedPackage
pkg ->
Bool
build_target Bool -> Bool -> Bool
|| (ElaboratedConfiguredPackage -> BuildStyle
elabBuildStyle ElaboratedConfiguredPackage
elab forall a. Eq a => a -> a -> Bool
== BuildStyle
BuildAndInstall Bool -> Bool -> Bool
&&
PackageDescription -> Bool
Cabal.hasPublicLib (ElaboratedConfiguredPackage -> PackageDescription
elabPkgDescription ElaboratedConfiguredPackage
elab))
Bool -> Bool -> Bool
|| forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (ElaboratedPackage -> ComponentTarget -> Bool
depends_on_lib ElaboratedPackage
pkg) (ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets ElaboratedConfiguredPackage
elab)
where
depends_on_lib :: ElaboratedPackage -> ComponentTarget -> Bool
depends_on_lib ElaboratedPackage
pkg (ComponentTarget ComponentName
cn SubComponentTarget
_) =
Bool -> Bool
not (forall (t :: * -> *) a. Foldable t => t a -> Bool
null (forall a. Monoid a => (Component -> Bool) -> ComponentDeps a -> a
CD.select (forall a. Eq a => a -> a -> Bool
== ComponentName -> Component
CD.componentNameToComponent ComponentName
cn)
(ElaboratedPackage -> ComponentDeps [()]
pkgDependsOnSelfLib ElaboratedPackage
pkg)))
build_target :: Bool
build_target =
if Bool -> Bool
not (forall (t :: * -> *) a. Foldable t => t a -> Bool
null (ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets ElaboratedConfiguredPackage
elab))
then forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any ComponentTarget -> Bool
is_lib_target (ElaboratedConfiguredPackage -> [ComponentTarget]
elabBuildTargets ElaboratedConfiguredPackage
elab)
else PackageDescription -> Bool
Cabal.hasLibs (ElaboratedConfiguredPackage -> PackageDescription
elabPkgDescription ElaboratedConfiguredPackage
elab)
is_lib_target :: ComponentTarget -> Bool
is_lib_target (ComponentTarget ComponentName
cn SubComponentTarget
WholeComponent) = ComponentName -> Bool
is_lib ComponentName
cn
is_lib_target ComponentTarget
_ = Bool
False
is_lib :: ComponentName -> Bool
is_lib (CLibName LibraryName
_) = Bool
True
is_lib ComponentName
_ = Bool
False
dataDirsEnvironmentForPlan :: DistDirLayout
-> ElaboratedInstallPlan
-> [(String, Maybe FilePath)]
dataDirsEnvironmentForPlan :: DistDirLayout
-> ElaboratedInstallPlan -> [(FilePath, Maybe FilePath)]
dataDirsEnvironmentForPlan DistDirLayout
distDirLayout = forall a. [Maybe a] -> [a]
catMaybes
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall ipkg a srcpkg.
(ipkg -> a) -> (srcpkg -> a) -> GenericPlanPackage ipkg srcpkg -> a
InstallPlan.foldPlanPackage
(forall a b. a -> b -> a
const forall a. Maybe a
Nothing)
(DistDirLayout
-> ElaboratedConfiguredPackage -> Maybe (FilePath, Maybe FilePath)
dataDirEnvVarForPackage DistDirLayout
distDirLayout))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall ipkg srcpkg.
GenericInstallPlan ipkg srcpkg -> [GenericPlanPackage ipkg srcpkg]
InstallPlan.toList
dataDirEnvVarForPackage :: DistDirLayout
-> ElaboratedConfiguredPackage
-> Maybe (String, Maybe FilePath)
dataDirEnvVarForPackage :: DistDirLayout
-> ElaboratedConfiguredPackage -> Maybe (FilePath, Maybe FilePath)
dataDirEnvVarForPackage DistDirLayout
distDirLayout ElaboratedConfiguredPackage
pkg =
case ElaboratedConfiguredPackage -> BuildStyle
elabBuildStyle ElaboratedConfiguredPackage
pkg
of BuildStyle
BuildAndInstall -> forall a. Maybe a
Nothing
BuildStyle
BuildInplaceOnly -> forall a. a -> Maybe a
Just
( PackageDescription -> ShowS
pkgPathEnvVar (ElaboratedConfiguredPackage -> PackageDescription
elabPkgDescription ElaboratedConfiguredPackage
pkg) FilePath
"datadir"
, forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ PackageLocation (Maybe FilePath) -> FilePath
srcPath (ElaboratedConfiguredPackage -> PackageLocation (Maybe FilePath)
elabPkgSourceLocation ElaboratedConfiguredPackage
pkg)
FilePath -> ShowS
</> PackageDescription -> FilePath
dataDir (ElaboratedConfiguredPackage -> PackageDescription
elabPkgDescription ElaboratedConfiguredPackage
pkg))
where
srcPath :: PackageLocation (Maybe FilePath) -> FilePath
srcPath (LocalUnpackedPackage FilePath
path) = FilePath
path
srcPath (LocalTarballPackage FilePath
_path) = FilePath
unpackedPath
srcPath (RemoteTarballPackage URI
_uri Maybe FilePath
_localTar) = FilePath
unpackedPath
srcPath (RepoTarballPackage Repo
_repo PackageId
_packageId Maybe FilePath
_localTar) = FilePath
unpackedPath
srcPath (RemoteSourceRepoPackage SourceRepoMaybe
_sourceRepo (Just FilePath
localCheckout)) = FilePath
localCheckout
srcPath (RemoteSourceRepoPackage SourceRepoMaybe
_sourceRepo Maybe FilePath
Nothing) = forall a. HasCallStack => FilePath -> a
error
FilePath
"calling dataDirEnvVarForPackage on a not-downloaded repo is an error"
unpackedPath :: FilePath
unpackedPath =
DistDirLayout -> PackageId -> FilePath
distUnpackedSrcDirectory DistDirLayout
distDirLayout forall a b. (a -> b) -> a -> b
$ ElaboratedConfiguredPackage -> PackageId
elabPkgSourceId ElaboratedConfiguredPackage
pkg
instance Package ElaboratedConfiguredPackage where
packageId :: ElaboratedConfiguredPackage -> PackageId
packageId = ElaboratedConfiguredPackage -> PackageId
elabPkgSourceId
instance HasConfiguredId ElaboratedConfiguredPackage where
configuredId :: ElaboratedConfiguredPackage -> ConfiguredId
configuredId ElaboratedConfiguredPackage
elab =
PackageId -> Maybe ComponentName -> ComponentId -> ConfiguredId
ConfiguredId (forall pkg. Package pkg => pkg -> PackageId
packageId ElaboratedConfiguredPackage
elab) (ElaboratedConfiguredPackage -> Maybe ComponentName
elabComponentName ElaboratedConfiguredPackage
elab) (ElaboratedConfiguredPackage -> ComponentId
elabComponentId ElaboratedConfiguredPackage
elab)
instance HasUnitId ElaboratedConfiguredPackage where
installedUnitId :: ElaboratedConfiguredPackage -> UnitId
installedUnitId = ElaboratedConfiguredPackage -> UnitId
elabUnitId
instance IsNode ElaboratedConfiguredPackage where
type Key ElaboratedConfiguredPackage = UnitId
nodeKey :: ElaboratedConfiguredPackage -> Key ElaboratedConfiguredPackage
nodeKey = ElaboratedConfiguredPackage -> UnitId
elabUnitId
nodeNeighbors :: ElaboratedConfiguredPackage -> [Key ElaboratedConfiguredPackage]
nodeNeighbors = ElaboratedConfiguredPackage -> [UnitId]
elabOrderDependencies
instance Binary ElaboratedConfiguredPackage
instance Structured ElaboratedConfiguredPackage
data ElaboratedPackageOrComponent
= ElabPackage ElaboratedPackage
| ElabComponent ElaboratedComponent
deriving (ElaboratedPackageOrComponent
-> ElaboratedPackageOrComponent -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ElaboratedPackageOrComponent
-> ElaboratedPackageOrComponent -> Bool
$c/= :: ElaboratedPackageOrComponent
-> ElaboratedPackageOrComponent -> Bool
== :: ElaboratedPackageOrComponent
-> ElaboratedPackageOrComponent -> Bool
$c== :: ElaboratedPackageOrComponent
-> ElaboratedPackageOrComponent -> Bool
Eq, Int -> ElaboratedPackageOrComponent -> ShowS
[ElaboratedPackageOrComponent] -> ShowS
ElaboratedPackageOrComponent -> FilePath
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
showList :: [ElaboratedPackageOrComponent] -> ShowS
$cshowList :: [ElaboratedPackageOrComponent] -> ShowS
show :: ElaboratedPackageOrComponent -> FilePath
$cshow :: ElaboratedPackageOrComponent -> FilePath
showsPrec :: Int -> ElaboratedPackageOrComponent -> ShowS
$cshowsPrec :: Int -> ElaboratedPackageOrComponent -> ShowS
Show, forall x.
Rep ElaboratedPackageOrComponent x -> ElaboratedPackageOrComponent
forall x.
ElaboratedPackageOrComponent -> Rep ElaboratedPackageOrComponent x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep ElaboratedPackageOrComponent x -> ElaboratedPackageOrComponent
$cfrom :: forall x.
ElaboratedPackageOrComponent -> Rep ElaboratedPackageOrComponent x
Generic)
instance Binary ElaboratedPackageOrComponent
instance Structured ElaboratedPackageOrComponent
elabComponentName :: ElaboratedConfiguredPackage -> Maybe ComponentName
elabComponentName :: ElaboratedConfiguredPackage -> Maybe ComponentName
elabComponentName ElaboratedConfiguredPackage
elab =
case ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp ElaboratedConfiguredPackage
elab of
ElabPackage ElaboratedPackage
_ -> forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ LibraryName -> ComponentName
CLibName LibraryName
LMainLibName
ElabComponent ElaboratedComponent
comp -> ElaboratedComponent -> Maybe ComponentName
compComponentName ElaboratedComponent
comp
elabConfiguredName :: Verbosity -> ElaboratedConfiguredPackage -> String
elabConfiguredName :: Verbosity -> ElaboratedConfiguredPackage -> FilePath
elabConfiguredName Verbosity
verbosity ElaboratedConfiguredPackage
elab
| Verbosity
verbosity forall a. Ord a => a -> a -> Bool
<= Verbosity
normal
= (case ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp ElaboratedConfiguredPackage
elab of
ElabPackage ElaboratedPackage
_ -> FilePath
""
ElabComponent ElaboratedComponent
comp ->
case ElaboratedComponent -> Maybe ComponentName
compComponentName ElaboratedComponent
comp of
Maybe ComponentName
Nothing -> FilePath
"setup from "
Just (CLibName LibraryName
LMainLibName) -> FilePath
""
Just ComponentName
cname -> forall a. Pretty a => a -> FilePath
prettyShow ComponentName
cname forall a. [a] -> [a] -> [a]
++ FilePath
" from ")
forall a. [a] -> [a] -> [a]
++ forall a. Pretty a => a -> FilePath
prettyShow (forall pkg. Package pkg => pkg -> PackageId
packageId ElaboratedConfiguredPackage
elab)
| Bool
otherwise
= forall a. Pretty a => a -> FilePath
prettyShow (ElaboratedConfiguredPackage -> UnitId
elabUnitId ElaboratedConfiguredPackage
elab)
elabDistDirParams :: ElaboratedSharedConfig -> ElaboratedConfiguredPackage -> DistDirParams
elabDistDirParams :: ElaboratedSharedConfig
-> ElaboratedConfiguredPackage -> DistDirParams
elabDistDirParams ElaboratedSharedConfig
shared ElaboratedConfiguredPackage
elab = DistDirParams {
distParamUnitId :: UnitId
distParamUnitId = forall pkg. HasUnitId pkg => pkg -> UnitId
installedUnitId ElaboratedConfiguredPackage
elab,
distParamComponentId :: ComponentId
distParamComponentId = ElaboratedConfiguredPackage -> ComponentId
elabComponentId ElaboratedConfiguredPackage
elab,
distParamPackageId :: PackageId
distParamPackageId = ElaboratedConfiguredPackage -> PackageId
elabPkgSourceId ElaboratedConfiguredPackage
elab,
distParamComponentName :: Maybe ComponentName
distParamComponentName = case ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp ElaboratedConfiguredPackage
elab of
ElabComponent ElaboratedComponent
comp -> ElaboratedComponent -> Maybe ComponentName
compComponentName ElaboratedComponent
comp
ElabPackage ElaboratedPackage
_ -> forall a. Maybe a
Nothing,
distParamCompilerId :: CompilerId
distParamCompilerId = Compiler -> CompilerId
compilerId (ElaboratedSharedConfig -> Compiler
pkgConfigCompiler ElaboratedSharedConfig
shared),
distParamPlatform :: Platform
distParamPlatform = ElaboratedSharedConfig -> Platform
pkgConfigPlatform ElaboratedSharedConfig
shared,
distParamOptimization :: OptimisationLevel
distParamOptimization = ElaboratedConfiguredPackage -> OptimisationLevel
elabOptimization ElaboratedConfiguredPackage
elab
}
elabOrderDependencies :: ElaboratedConfiguredPackage -> [UnitId]
elabOrderDependencies :: ElaboratedConfiguredPackage -> [UnitId]
elabOrderDependencies ElaboratedConfiguredPackage
elab =
case ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp ElaboratedConfiguredPackage
elab of
ElabPackage ElaboratedPackage
pkg -> forall a. Ord a => [a] -> [a]
ordNub (forall a. Monoid a => ComponentDeps a -> a
CD.flatDeps (ElaboratedPackage -> ComponentDeps [UnitId]
pkgOrderDependencies ElaboratedPackage
pkg))
ElabComponent ElaboratedComponent
comp -> ElaboratedComponent -> [UnitId]
compOrderDependencies ElaboratedComponent
comp
elabOrderLibDependencies :: ElaboratedConfiguredPackage -> [UnitId]
elabOrderLibDependencies :: ElaboratedConfiguredPackage -> [UnitId]
elabOrderLibDependencies ElaboratedConfiguredPackage
elab =
case ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp ElaboratedConfiguredPackage
elab of
ElabPackage ElaboratedPackage
pkg -> forall a b. (a -> b) -> [a] -> [b]
map (ComponentId -> UnitId
newSimpleUnitId forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConfiguredId -> ComponentId
confInstId) forall a b. (a -> b) -> a -> b
$
forall a. Ord a => [a] -> [a]
ordNub forall a b. (a -> b) -> a -> b
$ forall a. Monoid a => ComponentDeps a -> a
CD.flatDeps (ElaboratedPackage -> ComponentDeps [ConfiguredId]
pkgLibDependencies ElaboratedPackage
pkg)
ElabComponent ElaboratedComponent
comp -> ElaboratedComponent -> [UnitId]
compOrderLibDependencies ElaboratedComponent
comp
elabLibDependencies :: ElaboratedConfiguredPackage -> [ConfiguredId]
elabLibDependencies :: ElaboratedConfiguredPackage -> [ConfiguredId]
elabLibDependencies ElaboratedConfiguredPackage
elab =
case ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp ElaboratedConfiguredPackage
elab of
ElabPackage ElaboratedPackage
pkg -> forall a. Ord a => [a] -> [a]
ordNub (forall a. Monoid a => ComponentDeps a -> a
CD.nonSetupDeps (ElaboratedPackage -> ComponentDeps [ConfiguredId]
pkgLibDependencies ElaboratedPackage
pkg))
ElabComponent ElaboratedComponent
comp -> ElaboratedComponent -> [ConfiguredId]
compLibDependencies ElaboratedComponent
comp
elabOrderExeDependencies :: ElaboratedConfiguredPackage -> [UnitId]
elabOrderExeDependencies :: ElaboratedConfiguredPackage -> [UnitId]
elabOrderExeDependencies =
forall a b. (a -> b) -> [a] -> [b]
map ComponentId -> UnitId
newSimpleUnitId forall b c a. (b -> c) -> (a -> b) -> a -> c
. ElaboratedConfiguredPackage -> [ComponentId]
elabExeDependencies
elabExeDependencies :: ElaboratedConfiguredPackage -> [ComponentId]
elabExeDependencies :: ElaboratedConfiguredPackage -> [ComponentId]
elabExeDependencies ElaboratedConfiguredPackage
elab = forall a b. (a -> b) -> [a] -> [b]
map ConfiguredId -> ComponentId
confInstId forall a b. (a -> b) -> a -> b
$
case ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp ElaboratedConfiguredPackage
elab of
ElabPackage ElaboratedPackage
pkg -> forall a. Monoid a => ComponentDeps a -> a
CD.nonSetupDeps (ElaboratedPackage -> ComponentDeps [ConfiguredId]
pkgExeDependencies ElaboratedPackage
pkg)
ElabComponent ElaboratedComponent
comp -> ElaboratedComponent -> [ConfiguredId]
compExeDependencies ElaboratedComponent
comp
elabExeDependencyPaths :: ElaboratedConfiguredPackage -> [FilePath]
elabExeDependencyPaths :: ElaboratedConfiguredPackage -> [FilePath]
elabExeDependencyPaths ElaboratedConfiguredPackage
elab =
case ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp ElaboratedConfiguredPackage
elab of
ElabPackage ElaboratedPackage
pkg -> forall a b. (a -> b) -> [a] -> [b]
map forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Monoid a => ComponentDeps a -> a
CD.nonSetupDeps (ElaboratedPackage -> ComponentDeps [(ConfiguredId, FilePath)]
pkgExeDependencyPaths ElaboratedPackage
pkg)
ElabComponent ElaboratedComponent
comp -> forall a b. (a -> b) -> [a] -> [b]
map forall a b. (a, b) -> b
snd (ElaboratedComponent -> [(ConfiguredId, FilePath)]
compExeDependencyPaths ElaboratedComponent
comp)
elabSetupDependencies :: ElaboratedConfiguredPackage -> [ConfiguredId]
elabSetupDependencies :: ElaboratedConfiguredPackage -> [ConfiguredId]
elabSetupDependencies ElaboratedConfiguredPackage
elab =
case ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp ElaboratedConfiguredPackage
elab of
ElabPackage ElaboratedPackage
pkg -> forall a. Monoid a => ComponentDeps a -> a
CD.setupDeps (ElaboratedPackage -> ComponentDeps [ConfiguredId]
pkgLibDependencies ElaboratedPackage
pkg)
ElabComponent ElaboratedComponent
_ -> []
elabPkgConfigDependencies :: ElaboratedConfiguredPackage -> [(PkgconfigName, Maybe PkgconfigVersion)]
elabPkgConfigDependencies :: ElaboratedConfiguredPackage
-> [(PkgconfigName, Maybe PkgconfigVersion)]
elabPkgConfigDependencies ElaboratedConfiguredPackage { elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp = ElabPackage ElaboratedPackage
pkg }
= ElaboratedPackage -> [(PkgconfigName, Maybe PkgconfigVersion)]
pkgPkgConfigDependencies ElaboratedPackage
pkg
elabPkgConfigDependencies ElaboratedConfiguredPackage { elabPkgOrComp :: ElaboratedConfiguredPackage -> ElaboratedPackageOrComponent
elabPkgOrComp = ElabComponent ElaboratedComponent
comp }
= ElaboratedComponent -> [(PkgconfigName, Maybe PkgconfigVersion)]
compPkgConfigDependencies ElaboratedComponent
comp
elabInplaceDependencyBuildCacheFiles
:: DistDirLayout
-> ElaboratedSharedConfig
-> ElaboratedInstallPlan
-> ElaboratedConfiguredPackage
-> [FilePath]
elabInplaceDependencyBuildCacheFiles :: DistDirLayout
-> ElaboratedSharedConfig
-> ElaboratedInstallPlan
-> ElaboratedConfiguredPackage
-> [FilePath]
elabInplaceDependencyBuildCacheFiles DistDirLayout
layout ElaboratedSharedConfig
sconf ElaboratedInstallPlan
plan ElaboratedConfiguredPackage
root_elab =
ElaboratedPlanPackage -> [FilePath]
go forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< forall ipkg srcpkg.
GenericInstallPlan ipkg srcpkg
-> UnitId -> [GenericPlanPackage ipkg srcpkg]
InstallPlan.directDeps ElaboratedInstallPlan
plan (forall a. IsNode a => a -> Key a
nodeKey ElaboratedConfiguredPackage
root_elab)
where
go :: ElaboratedPlanPackage -> [FilePath]
go = forall ipkg a srcpkg.
(ipkg -> a) -> (srcpkg -> a) -> GenericPlanPackage ipkg srcpkg -> a
InstallPlan.foldPlanPackage (forall a b. a -> b -> a
const []) forall a b. (a -> b) -> a -> b
$ \ElaboratedConfiguredPackage
elab -> do
forall (f :: * -> *). Alternative f => Bool -> f ()
guard (ElaboratedConfiguredPackage -> BuildStyle
elabBuildStyle ElaboratedConfiguredPackage
elab forall a. Eq a => a -> a -> Bool
== BuildStyle
BuildInplaceOnly)
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ DistDirLayout -> DistDirParams -> ShowS
distPackageCacheFile DistDirLayout
layout (ElaboratedSharedConfig
-> ElaboratedConfiguredPackage -> DistDirParams
elabDistDirParams ElaboratedSharedConfig
sconf ElaboratedConfiguredPackage
elab) FilePath
"build"
data ElaboratedComponent
= ElaboratedComponent {
ElaboratedComponent -> Component
compSolverName :: CD.Component,
ElaboratedComponent -> Maybe ComponentName
compComponentName :: Maybe ComponentName,
ElaboratedComponent -> [ConfiguredId]
compLibDependencies :: [ConfiguredId],
ElaboratedComponent -> [OpenUnitId]
compLinkedLibDependencies :: [OpenUnitId],
ElaboratedComponent -> [ConfiguredId]
compExeDependencies :: [ConfiguredId],
ElaboratedComponent -> [(PkgconfigName, Maybe PkgconfigVersion)]
compPkgConfigDependencies :: [(PkgconfigName, Maybe PkgconfigVersion)],
ElaboratedComponent -> [(ConfiguredId, FilePath)]
compExeDependencyPaths :: [(ConfiguredId, FilePath)],
ElaboratedComponent -> [UnitId]
compOrderLibDependencies :: [UnitId]
}
deriving (ElaboratedComponent -> ElaboratedComponent -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ElaboratedComponent -> ElaboratedComponent -> Bool
$c/= :: ElaboratedComponent -> ElaboratedComponent -> Bool
== :: ElaboratedComponent -> ElaboratedComponent -> Bool
$c== :: ElaboratedComponent -> ElaboratedComponent -> Bool
Eq, Int -> ElaboratedComponent -> ShowS
[ElaboratedComponent] -> ShowS
ElaboratedComponent -> FilePath
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
showList :: [ElaboratedComponent] -> ShowS
$cshowList :: [ElaboratedComponent] -> ShowS
show :: ElaboratedComponent -> FilePath
$cshow :: ElaboratedComponent -> FilePath
showsPrec :: Int -> ElaboratedComponent -> ShowS
$cshowsPrec :: Int -> ElaboratedComponent -> ShowS
Show, forall x. Rep ElaboratedComponent x -> ElaboratedComponent
forall x. ElaboratedComponent -> Rep ElaboratedComponent x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ElaboratedComponent x -> ElaboratedComponent
$cfrom :: forall x. ElaboratedComponent -> Rep ElaboratedComponent x
Generic)
instance Binary ElaboratedComponent
instance Structured ElaboratedComponent
compOrderDependencies :: ElaboratedComponent -> [UnitId]
compOrderDependencies :: ElaboratedComponent -> [UnitId]
compOrderDependencies ElaboratedComponent
comp =
ElaboratedComponent -> [UnitId]
compOrderLibDependencies ElaboratedComponent
comp
forall a. [a] -> [a] -> [a]
++ ElaboratedComponent -> [UnitId]
compOrderExeDependencies ElaboratedComponent
comp
compOrderExeDependencies :: ElaboratedComponent -> [UnitId]
compOrderExeDependencies :: ElaboratedComponent -> [UnitId]
compOrderExeDependencies = forall a b. (a -> b) -> [a] -> [b]
map (ComponentId -> UnitId
newSimpleUnitId forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConfiguredId -> ComponentId
confInstId) forall b c a. (b -> c) -> (a -> b) -> a -> c
. ElaboratedComponent -> [ConfiguredId]
compExeDependencies
data ElaboratedPackage
= ElaboratedPackage {
ElaboratedPackage -> ComponentId
pkgInstalledId :: InstalledPackageId,
ElaboratedPackage -> ComponentDeps [ConfiguredId]
pkgLibDependencies :: ComponentDeps [ConfiguredId],
ElaboratedPackage -> ComponentDeps [()]
pkgDependsOnSelfLib :: ComponentDeps [()],
ElaboratedPackage -> ComponentDeps [ConfiguredId]
pkgExeDependencies :: ComponentDeps [ConfiguredId],
ElaboratedPackage -> ComponentDeps [(ConfiguredId, FilePath)]
pkgExeDependencyPaths :: ComponentDeps [(ConfiguredId, FilePath)],
ElaboratedPackage -> [(PkgconfigName, Maybe PkgconfigVersion)]
pkgPkgConfigDependencies :: [(PkgconfigName, Maybe PkgconfigVersion)],
ElaboratedPackage -> OptionalStanzaSet
pkgStanzasEnabled :: OptionalStanzaSet
}
deriving (ElaboratedPackage -> ElaboratedPackage -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ElaboratedPackage -> ElaboratedPackage -> Bool
$c/= :: ElaboratedPackage -> ElaboratedPackage -> Bool
== :: ElaboratedPackage -> ElaboratedPackage -> Bool
$c== :: ElaboratedPackage -> ElaboratedPackage -> Bool
Eq, Int -> ElaboratedPackage -> ShowS
[ElaboratedPackage] -> ShowS
ElaboratedPackage -> FilePath
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
showList :: [ElaboratedPackage] -> ShowS
$cshowList :: [ElaboratedPackage] -> ShowS
show :: ElaboratedPackage -> FilePath
$cshow :: ElaboratedPackage -> FilePath
showsPrec :: Int -> ElaboratedPackage -> ShowS
$cshowsPrec :: Int -> ElaboratedPackage -> ShowS
Show, forall x. Rep ElaboratedPackage x -> ElaboratedPackage
forall x. ElaboratedPackage -> Rep ElaboratedPackage x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ElaboratedPackage x -> ElaboratedPackage
$cfrom :: forall x. ElaboratedPackage -> Rep ElaboratedPackage x
Generic)
instance Binary ElaboratedPackage
instance Structured ElaboratedPackage
pkgOrderDependencies :: ElaboratedPackage -> ComponentDeps [UnitId]
pkgOrderDependencies :: ElaboratedPackage -> ComponentDeps [UnitId]
pkgOrderDependencies ElaboratedPackage
pkg =
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall a b. (a -> b) -> [a] -> [b]
map (ComponentId -> UnitId
newSimpleUnitId forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConfiguredId -> ComponentId
confInstId)) (ElaboratedPackage -> ComponentDeps [ConfiguredId]
pkgLibDependencies ElaboratedPackage
pkg) forall a. Monoid a => a -> a -> a
`Mon.mappend`
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall a b. (a -> b) -> [a] -> [b]
map (ComponentId -> UnitId
newSimpleUnitId forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConfiguredId -> ComponentId
confInstId)) (ElaboratedPackage -> ComponentDeps [ConfiguredId]
pkgExeDependencies ElaboratedPackage
pkg)
data BuildStyle =
BuildAndInstall
| BuildInplaceOnly
deriving (BuildStyle -> BuildStyle -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BuildStyle -> BuildStyle -> Bool
$c/= :: BuildStyle -> BuildStyle -> Bool
== :: BuildStyle -> BuildStyle -> Bool
$c== :: BuildStyle -> BuildStyle -> Bool
Eq, Int -> BuildStyle -> ShowS
[BuildStyle] -> ShowS
BuildStyle -> FilePath
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
showList :: [BuildStyle] -> ShowS
$cshowList :: [BuildStyle] -> ShowS
show :: BuildStyle -> FilePath
$cshow :: BuildStyle -> FilePath
showsPrec :: Int -> BuildStyle -> ShowS
$cshowsPrec :: Int -> BuildStyle -> ShowS
Show, forall x. Rep BuildStyle x -> BuildStyle
forall x. BuildStyle -> Rep BuildStyle x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep BuildStyle x -> BuildStyle
$cfrom :: forall x. BuildStyle -> Rep BuildStyle x
Generic)
instance Binary BuildStyle
instance Structured BuildStyle
instance Semigroup BuildStyle where
BuildStyle
BuildInplaceOnly <> :: BuildStyle -> BuildStyle -> BuildStyle
<> BuildStyle
_ = BuildStyle
BuildInplaceOnly
BuildStyle
_ <> BuildStyle
BuildInplaceOnly = BuildStyle
BuildInplaceOnly
BuildStyle
_ <> BuildStyle
_ = BuildStyle
BuildAndInstall
instance Monoid BuildStyle where
mempty :: BuildStyle
mempty = BuildStyle
BuildAndInstall
mappend :: BuildStyle -> BuildStyle -> BuildStyle
mappend = forall a. Semigroup a => a -> a -> a
(<>)
type CabalFileText = LBS.ByteString
type ElaboratedReadyPackage = GenericReadyPackage ElaboratedConfiguredPackage
data ComponentTarget = ComponentTarget ComponentName SubComponentTarget
deriving (ComponentTarget -> ComponentTarget -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ComponentTarget -> ComponentTarget -> Bool
$c/= :: ComponentTarget -> ComponentTarget -> Bool
== :: ComponentTarget -> ComponentTarget -> Bool
$c== :: ComponentTarget -> ComponentTarget -> Bool
Eq, Eq ComponentTarget
ComponentTarget -> ComponentTarget -> Bool
ComponentTarget -> ComponentTarget -> Ordering
ComponentTarget -> ComponentTarget -> ComponentTarget
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
min :: ComponentTarget -> ComponentTarget -> ComponentTarget
$cmin :: ComponentTarget -> ComponentTarget -> ComponentTarget
max :: ComponentTarget -> ComponentTarget -> ComponentTarget
$cmax :: ComponentTarget -> ComponentTarget -> ComponentTarget
>= :: ComponentTarget -> ComponentTarget -> Bool
$c>= :: ComponentTarget -> ComponentTarget -> Bool
> :: ComponentTarget -> ComponentTarget -> Bool
$c> :: ComponentTarget -> ComponentTarget -> Bool
<= :: ComponentTarget -> ComponentTarget -> Bool
$c<= :: ComponentTarget -> ComponentTarget -> Bool
< :: ComponentTarget -> ComponentTarget -> Bool
$c< :: ComponentTarget -> ComponentTarget -> Bool
compare :: ComponentTarget -> ComponentTarget -> Ordering
$ccompare :: ComponentTarget -> ComponentTarget -> Ordering
Ord, Int -> ComponentTarget -> ShowS
[ComponentTarget] -> ShowS
ComponentTarget -> FilePath
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
showList :: [ComponentTarget] -> ShowS
$cshowList :: [ComponentTarget] -> ShowS
show :: ComponentTarget -> FilePath
$cshow :: ComponentTarget -> FilePath
showsPrec :: Int -> ComponentTarget -> ShowS
$cshowsPrec :: Int -> ComponentTarget -> ShowS
Show, forall x. Rep ComponentTarget x -> ComponentTarget
forall x. ComponentTarget -> Rep ComponentTarget x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ComponentTarget x -> ComponentTarget
$cfrom :: forall x. ComponentTarget -> Rep ComponentTarget x
Generic)
instance Binary ComponentTarget
instance Structured ComponentTarget
showComponentTarget :: PackageId -> ComponentTarget -> String
showComponentTarget :: PackageId -> ComponentTarget -> FilePath
showComponentTarget PackageId
pkgid =
PackageId -> BuildTarget -> FilePath
Cabal.showBuildTarget PackageId
pkgid forall b c a. (b -> c) -> (a -> b) -> a -> c
. ComponentTarget -> BuildTarget
toBuildTarget
where
toBuildTarget :: ComponentTarget -> Cabal.BuildTarget
toBuildTarget :: ComponentTarget -> BuildTarget
toBuildTarget (ComponentTarget ComponentName
cname SubComponentTarget
subtarget) =
case SubComponentTarget
subtarget of
SubComponentTarget
WholeComponent -> ComponentName -> BuildTarget
Cabal.BuildTargetComponent ComponentName
cname
ModuleTarget ModuleName
mname -> ComponentName -> ModuleName -> BuildTarget
Cabal.BuildTargetModule ComponentName
cname ModuleName
mname
FileTarget FilePath
fname -> ComponentName -> FilePath -> BuildTarget
Cabal.BuildTargetFile ComponentName
cname FilePath
fname
showTestComponentTarget :: PackageId -> ComponentTarget -> Maybe String
showTestComponentTarget :: PackageId -> ComponentTarget -> Maybe FilePath
showTestComponentTarget PackageId
_ (ComponentTarget (CTestName UnqualComponentName
n) SubComponentTarget
_) = forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ forall a. Pretty a => a -> FilePath
prettyShow UnqualComponentName
n
showTestComponentTarget PackageId
_ ComponentTarget
_ = forall a. Maybe a
Nothing
isTestComponentTarget :: ComponentTarget -> Bool
isTestComponentTarget :: ComponentTarget -> Bool
isTestComponentTarget (ComponentTarget (CTestName UnqualComponentName
_) SubComponentTarget
_) = Bool
True
isTestComponentTarget ComponentTarget
_ = Bool
False
showBenchComponentTarget :: PackageId -> ComponentTarget -> Maybe String
showBenchComponentTarget :: PackageId -> ComponentTarget -> Maybe FilePath
showBenchComponentTarget PackageId
_ (ComponentTarget (CBenchName UnqualComponentName
n) SubComponentTarget
_) = forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ forall a. Pretty a => a -> FilePath
prettyShow UnqualComponentName
n
showBenchComponentTarget PackageId
_ ComponentTarget
_ = forall a. Maybe a
Nothing
isBenchComponentTarget :: ComponentTarget -> Bool
isBenchComponentTarget :: ComponentTarget -> Bool
isBenchComponentTarget (ComponentTarget (CBenchName UnqualComponentName
_) SubComponentTarget
_) = Bool
True
isBenchComponentTarget ComponentTarget
_ = Bool
False
isForeignLibComponentTarget :: ComponentTarget -> Bool
isForeignLibComponentTarget :: ComponentTarget -> Bool
isForeignLibComponentTarget (ComponentTarget (CFLibName UnqualComponentName
_) SubComponentTarget
_) = Bool
True
isForeignLibComponentTarget ComponentTarget
_ = Bool
False
isExeComponentTarget :: ComponentTarget -> Bool
isExeComponentTarget :: ComponentTarget -> Bool
isExeComponentTarget (ComponentTarget (CExeName UnqualComponentName
_) SubComponentTarget
_ ) = Bool
True
isExeComponentTarget ComponentTarget
_ = Bool
False
isSubLibComponentTarget :: ComponentTarget -> Bool
isSubLibComponentTarget :: ComponentTarget -> Bool
isSubLibComponentTarget (ComponentTarget (CLibName (LSubLibName UnqualComponentName
_)) SubComponentTarget
_) = Bool
True
isSubLibComponentTarget ComponentTarget
_ = Bool
False
componentOptionalStanza :: CD.Component -> Maybe OptionalStanza
componentOptionalStanza :: Component -> Maybe OptionalStanza
componentOptionalStanza (CD.ComponentTest UnqualComponentName
_) = forall a. a -> Maybe a
Just OptionalStanza
TestStanzas
componentOptionalStanza (CD.ComponentBench UnqualComponentName
_) = forall a. a -> Maybe a
Just OptionalStanza
BenchStanzas
componentOptionalStanza Component
_ = forall a. Maybe a
Nothing
data SetupScriptStyle = SetupCustomExplicitDeps
| SetupCustomImplicitDeps
| SetupNonCustomExternalLib
| SetupNonCustomInternalLib
deriving (SetupScriptStyle -> SetupScriptStyle -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SetupScriptStyle -> SetupScriptStyle -> Bool
$c/= :: SetupScriptStyle -> SetupScriptStyle -> Bool
== :: SetupScriptStyle -> SetupScriptStyle -> Bool
$c== :: SetupScriptStyle -> SetupScriptStyle -> Bool
Eq, Int -> SetupScriptStyle -> ShowS
[SetupScriptStyle] -> ShowS
SetupScriptStyle -> FilePath
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
showList :: [SetupScriptStyle] -> ShowS
$cshowList :: [SetupScriptStyle] -> ShowS
show :: SetupScriptStyle -> FilePath
$cshow :: SetupScriptStyle -> FilePath
showsPrec :: Int -> SetupScriptStyle -> ShowS
$cshowsPrec :: Int -> SetupScriptStyle -> ShowS
Show, forall x. Rep SetupScriptStyle x -> SetupScriptStyle
forall x. SetupScriptStyle -> Rep SetupScriptStyle x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SetupScriptStyle x -> SetupScriptStyle
$cfrom :: forall x. SetupScriptStyle -> Rep SetupScriptStyle x
Generic, Typeable)
instance Binary SetupScriptStyle
instance Structured SetupScriptStyle