Cabal
CopyrightIsaac Jones 2003-2004
LicenseBSD3
Maintainercabal-devel@haskell.org
Portabilityportable
Safe HaskellSafe-Inferred
LanguageHaskell2010

Distribution.Simple.LocalBuildInfo

Description

Once a package has been configured we have resolved conditionals and dependencies, configured the compiler and other needed external programs. The LocalBuildInfo is used to hold all this information. It holds the install dirs, the compiler, the exact package dependencies, the configured programs, the package database to use and a bunch of miscellaneous configure flags. It gets saved and reloaded from a file (dist/setup-config). It gets passed in to very many subsequent build actions.

Synopsis

Documentation

data LocalBuildInfo Source #

Data cached after configuration step. See also ConfigFlags.

Constructors

NewLocalBuildInfo 

Fields

Bundled Patterns

pattern LocalBuildInfo :: ConfigFlags -> FlagAssignment -> ComponentRequestedSpec -> [String] -> InstallDirTemplates -> Compiler -> Platform -> Maybe (SymbolicPath Pkg File) -> Graph ComponentLocalBuildInfo -> Map ComponentName [ComponentLocalBuildInfo] -> Map (PackageName, ComponentName) PromisedComponent -> InstalledPackageIndex -> PackageDescription -> ProgramDb -> PackageDBStack -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> ProfDetailLevel -> ProfDetailLevel -> OptimisationLevel -> DebugInfoLevel -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> [UnitId] -> Bool -> LocalBuildInfo

This pattern synonym is for backwards compatibility, to adapt to LocalBuildInfo being split into LocalBuildDescr and LocalBuildConfig.

Instances

Instances details
Structured LocalBuildInfo Source # 
Instance details

Defined in Distribution.Types.LocalBuildInfo

Methods

structure :: Proxy LocalBuildInfo -> Structure

structureHash' :: Tagged LocalBuildInfo MD5

Generic LocalBuildInfo Source # 
Instance details

Defined in Distribution.Types.LocalBuildInfo

Associated Types

type Rep LocalBuildInfo :: Type -> Type #

Read LocalBuildInfo Source # 
Instance details

Defined in Distribution.Types.LocalBuildInfo

Show LocalBuildInfo Source # 
Instance details

Defined in Distribution.Types.LocalBuildInfo

Binary LocalBuildInfo Source # 
Instance details

Defined in Distribution.Types.LocalBuildInfo

type Rep LocalBuildInfo Source # 
Instance details

Defined in Distribution.Types.LocalBuildInfo

type Rep LocalBuildInfo = D1 ('MetaData "LocalBuildInfo" "Distribution.Types.LocalBuildInfo" "Cabal-3.14.0.0-inplace" 'False) (C1 ('MetaCons "NewLocalBuildInfo" 'PrefixI 'True) (S1 ('MetaSel ('Just "localBuildDescr") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 LocalBuildDescr) :*: S1 ('MetaSel ('Just "localBuildConfig") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 LocalBuildConfig)))

localComponentId :: LocalBuildInfo -> ComponentId Source #

Extract the ComponentId from the public library component of a LocalBuildInfo if it exists, or make a fake component ID based on the package ID.

localUnitId :: LocalBuildInfo -> UnitId Source #

Extract the UnitId from the library component of a LocalBuildInfo if it exists, or make a fake unit ID based on the package ID.

localCompatPackageKey :: LocalBuildInfo -> String Source #

Extract the compatibility package key from the public library component of a LocalBuildInfo if it exists, or make a fake package key based on the package ID.

Convenience accessors

buildDir :: LocalBuildInfo -> SymbolicPath Pkg (Dir Build) Source #

packageRoot :: CommonSetupFlags -> FilePath Source #

The (relative or absolute) path to the package root, based on

  • the working directory flag
  • the .cabal path

interpretSymbolicPathLBI :: LocalBuildInfo -> SymbolicPathX allowAbsolute Pkg to -> FilePath Source #

Interpret a symbolic path with respect to the working directory stored in LocalBuildInfo.

Use this before directly interacting with the file system.

NB: when invoking external programs (such as GHC), it is preferable to set the working directory of the process rather than calling this function, as this function will turn relative paths into absolute paths if the working directory is an absolute path. This can degrade error messages, or worse, break the behaviour entirely (because the program might expect certain paths to be relative).

See Note [Symbolic paths] in Distribution.Utils.Path

mbWorkDirLBI :: LocalBuildInfo -> Maybe (SymbolicPath CWD (Dir Pkg)) Source #

Retrieve an optional working directory from LocalBuildInfo.

absoluteWorkingDirLBI :: LocalBuildInfo -> IO (AbsolutePath (Dir Pkg)) Source #

Absolute path to the current working directory.

buildWays :: LocalBuildInfo -> (Bool -> [BuildWay], Bool -> BuildWay, BuildWay) Source #

Returns a list of ways, in the order which they should be built, and the way we build executable and foreign library components.

Ideally all this info should be fixed at configure time and not dependent on additional info but LocalBuildInfo is per package (not per component) so it's currently not possible to configure components to be built in certain ways.

Buildable package components

data Component #

Constructors

CLib Library 
CFLib ForeignLib 
CExe Executable 
CTest TestSuite 
CBench Benchmark 

Instances

Instances details
HasBuildInfo Component 
Instance details

Defined in Distribution.Types.Component

Methods

buildInfo :: Lens' Component BuildInfo

buildable :: Lens' Component Bool

buildTools :: Lens' Component [LegacyExeDependency]

buildToolDepends :: Lens' Component [ExeDependency]

cppOptions :: Lens' Component [String]

asmOptions :: Lens' Component [String]

cmmOptions :: Lens' Component [String]

ccOptions :: Lens' Component [String]

cxxOptions :: Lens' Component [String]

ldOptions :: Lens' Component [String]

hsc2hsOptions :: Lens' Component [String]

pkgconfigDepends :: Lens' Component [PkgconfigDependency]

frameworks :: Lens' Component [RelativePath Framework 'File]

extraFrameworkDirs :: Lens' Component [SymbolicPath Pkg ('Dir Framework)]

asmSources :: Lens' Component [SymbolicPath Pkg 'File]

cmmSources :: Lens' Component [SymbolicPath Pkg 'File]

cSources :: Lens' Component [SymbolicPath Pkg 'File]

cxxSources :: Lens' Component [SymbolicPath Pkg 'File]

jsSources :: Lens' Component [SymbolicPath Pkg 'File]

hsSourceDirs :: Lens' Component [SymbolicPath Pkg ('Dir Source)]

otherModules :: Lens' Component [ModuleName]

virtualModules :: Lens' Component [ModuleName]

autogenModules :: Lens' Component [ModuleName]

defaultLanguage :: Lens' Component (Maybe Language)

otherLanguages :: Lens' Component [Language]

defaultExtensions :: Lens' Component [Extension]

otherExtensions :: Lens' Component [Extension]

oldExtensions :: Lens' Component [Extension]

extraLibs :: Lens' Component [String]

extraLibsStatic :: Lens' Component [String]

extraGHCiLibs :: Lens' Component [String]

extraBundledLibs :: Lens' Component [String]

extraLibFlavours :: Lens' Component [String]

extraDynLibFlavours :: Lens' Component [String]

extraLibDirs :: Lens' Component [SymbolicPath Pkg ('Dir Lib)]

extraLibDirsStatic :: Lens' Component [SymbolicPath Pkg ('Dir Lib)]

includeDirs :: Lens' Component [SymbolicPath Pkg ('Dir Include)]

includes :: Lens' Component [SymbolicPath Include 'File]

autogenIncludes :: Lens' Component [RelativePath Include 'File]

installIncludes :: Lens' Component [RelativePath Include 'File]

options :: Lens' Component (PerCompilerFlavor [String])

profOptions :: Lens' Component (PerCompilerFlavor [String])

sharedOptions :: Lens' Component (PerCompilerFlavor [String])

profSharedOptions :: Lens' Component (PerCompilerFlavor [String])

staticOptions :: Lens' Component (PerCompilerFlavor [String])

customFieldsBI :: Lens' Component [(String, String)]

targetBuildDepends :: Lens' Component [Dependency]

mixins :: Lens' Component [Mixin]

Structured Component 
Instance details

Defined in Distribution.Types.Component

Methods

structure :: Proxy Component -> Structure

structureHash' :: Tagged Component MD5

Semigroup Component 
Instance details

Defined in Distribution.Types.Component

Generic Component 
Instance details

Defined in Distribution.Types.Component

Associated Types

type Rep Component :: Type -> Type #

Read Component 
Instance details

Defined in Distribution.Types.Component

Show Component 
Instance details

Defined in Distribution.Types.Component

Binary Component 
Instance details

Defined in Distribution.Types.Component

Eq Component 
Instance details

Defined in Distribution.Types.Component

type Rep Component 
Instance details

Defined in Distribution.Types.Component

data ComponentName #

Constructors

CLibName LibraryName 
CNotLibName NotLibComponentName 

Bundled Patterns

pattern CBenchName :: UnqualComponentName -> ComponentName 
pattern CExeName :: UnqualComponentName -> ComponentName 
pattern CFLibName :: UnqualComponentName -> ComponentName 
pattern CTestName :: UnqualComponentName -> ComponentName 

Instances

Instances details
Parsec ComponentName 
Instance details

Defined in Distribution.Types.ComponentName

Methods

parsec :: CabalParsing m => m ComponentName

Pretty ComponentName 
Instance details

Defined in Distribution.Types.ComponentName

Methods

pretty :: ComponentName -> Doc

prettyVersioned :: CabalSpecVersion -> ComponentName -> Doc

Structured ComponentName 
Instance details

Defined in Distribution.Types.ComponentName

Methods

structure :: Proxy ComponentName -> Structure

structureHash' :: Tagged ComponentName MD5

Generic ComponentName 
Instance details

Defined in Distribution.Types.ComponentName

Associated Types

type Rep ComponentName :: Type -> Type #

Read ComponentName 
Instance details

Defined in Distribution.Types.ComponentName

Show ComponentName 
Instance details

Defined in Distribution.Types.ComponentName

Binary ComponentName 
Instance details

Defined in Distribution.Types.ComponentName

Eq ComponentName 
Instance details

Defined in Distribution.Types.ComponentName

Ord ComponentName 
Instance details

Defined in Distribution.Types.ComponentName

type Rep ComponentName 
Instance details

Defined in Distribution.Types.ComponentName

type Rep ComponentName = D1 ('MetaData "ComponentName" "Distribution.Types.ComponentName" "Cabal-syntax-3.14.0.0-inplace" 'False) (C1 ('MetaCons "CLibName" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 LibraryName)) :+: C1 ('MetaCons "CNotLibName" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 NotLibComponentName)))

data LibraryName #

Constructors

LMainLibName 
LSubLibName UnqualComponentName 

Instances

Instances details
Structured LibraryName 
Instance details

Defined in Distribution.Types.LibraryName

Methods

structure :: Proxy LibraryName -> Structure

structureHash' :: Tagged LibraryName MD5

Data LibraryName 
Instance details

Defined in Distribution.Types.LibraryName

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> LibraryName -> c LibraryName #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c LibraryName #

toConstr :: LibraryName -> Constr #

dataTypeOf :: LibraryName -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c LibraryName) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c LibraryName) #

gmapT :: (forall b. Data b => b -> b) -> LibraryName -> LibraryName #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> LibraryName -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> LibraryName -> r #

gmapQ :: (forall d. Data d => d -> u) -> LibraryName -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> LibraryName -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> LibraryName -> m LibraryName #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> LibraryName -> m LibraryName #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> LibraryName -> m LibraryName #

Generic LibraryName 
Instance details

Defined in Distribution.Types.LibraryName

Associated Types

type Rep LibraryName :: Type -> Type #

Read LibraryName 
Instance details

Defined in Distribution.Types.LibraryName

Show LibraryName 
Instance details

Defined in Distribution.Types.LibraryName

Binary LibraryName 
Instance details

Defined in Distribution.Types.LibraryName

NFData LibraryName 
Instance details

Defined in Distribution.Types.LibraryName

Methods

rnf :: LibraryName -> () #

Eq LibraryName 
Instance details

Defined in Distribution.Types.LibraryName

Ord LibraryName 
Instance details

Defined in Distribution.Types.LibraryName

type Rep LibraryName 
Instance details

Defined in Distribution.Types.LibraryName

type Rep LibraryName = D1 ('MetaData "LibraryName" "Distribution.Types.LibraryName" "Cabal-syntax-3.14.0.0-inplace" 'False) (C1 ('MetaCons "LMainLibName" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "LSubLibName" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 UnqualComponentName)))

componentNameString :: ComponentName -> Maybe UnqualComponentName #

data ComponentLocalBuildInfo Source #

The first five fields are common across all algebraic variants.

Constructors

LibComponentLocalBuildInfo 

Fields

  • componentLocalName :: ComponentName

    It would be very convenient to store the literal Library here, but if we do that, it will get serialized (via the Binary) instance twice. So instead we just provide the ComponentName, which can be used to find the Component in the PackageDescription. NB: eventually, this will NOT uniquely identify the ComponentLocalBuildInfo.

  • componentComponentId :: ComponentId

    The computed ComponentId of this component.

  • componentUnitId :: UnitId

    The computed UnitId which uniquely identifies this component. Might be hashed.

  • componentIsIndefinite_ :: Bool

    Is this an indefinite component (i.e. has unfilled holes)?

  • componentInstantiatedWith :: [(ModuleName, OpenModule)]

    How the component was instantiated

  • componentPackageDeps :: [(UnitId, MungedPackageId)]

    Resolved internal and external package dependencies for this component. The BuildInfo specifies a set of build dependencies that must be satisfied in terms of version ranges. This field fixes those dependencies to the specific versions available on this machine for this compiler.

  • componentIncludes :: [(OpenUnitId, ModuleRenaming)]

    The set of packages that are brought into scope during compilation, including a ModuleRenaming which may used to hide or rename modules. This is what gets translated into -package-id arguments. This is a modernized version of componentPackageDeps, which is kept around for BC purposes.

  • componentExeDeps :: [UnitId]
     
  • componentInternalDeps :: [UnitId]

    The internal dependencies which induce a graph on the ComponentLocalBuildInfo of this package. This does NOT coincide with componentPackageDeps because it ALSO records 'build-tool' dependencies on executables. Maybe one day cabal-install will also handle these correctly too!

  • componentCompatPackageKey :: String

    Compatibility "package key" that we pass to older versions of GHC.

  • componentCompatPackageName :: MungedPackageName

    Compatibility "package name" that we register this component as.

  • componentExposedModules :: [ExposedModule]

    A list of exposed modules (either defined in this component, or reexported from another component.)

  • componentIsPublic :: Bool

    Convenience field, specifying whether or not this is the "public library" that has the same name as the package.

FLibComponentLocalBuildInfo 

Fields

  • componentLocalName :: ComponentName

    It would be very convenient to store the literal Library here, but if we do that, it will get serialized (via the Binary) instance twice. So instead we just provide the ComponentName, which can be used to find the Component in the PackageDescription. NB: eventually, this will NOT uniquely identify the ComponentLocalBuildInfo.

  • componentComponentId :: ComponentId

    The computed ComponentId of this component.

  • componentUnitId :: UnitId

    The computed UnitId which uniquely identifies this component. Might be hashed.

  • componentPackageDeps :: [(UnitId, MungedPackageId)]

    Resolved internal and external package dependencies for this component. The BuildInfo specifies a set of build dependencies that must be satisfied in terms of version ranges. This field fixes those dependencies to the specific versions available on this machine for this compiler.

  • componentIncludes :: [(OpenUnitId, ModuleRenaming)]

    The set of packages that are brought into scope during compilation, including a ModuleRenaming which may used to hide or rename modules. This is what gets translated into -package-id arguments. This is a modernized version of componentPackageDeps, which is kept around for BC purposes.

  • componentExeDeps :: [UnitId]
     
  • componentInternalDeps :: [UnitId]

    The internal dependencies which induce a graph on the ComponentLocalBuildInfo of this package. This does NOT coincide with componentPackageDeps because it ALSO records 'build-tool' dependencies on executables. Maybe one day cabal-install will also handle these correctly too!

ExeComponentLocalBuildInfo 

Fields

  • componentLocalName :: ComponentName

    It would be very convenient to store the literal Library here, but if we do that, it will get serialized (via the Binary) instance twice. So instead we just provide the ComponentName, which can be used to find the Component in the PackageDescription. NB: eventually, this will NOT uniquely identify the ComponentLocalBuildInfo.

  • componentComponentId :: ComponentId

    The computed ComponentId of this component.

  • componentUnitId :: UnitId

    The computed UnitId which uniquely identifies this component. Might be hashed.

  • componentPackageDeps :: [(UnitId, MungedPackageId)]

    Resolved internal and external package dependencies for this component. The BuildInfo specifies a set of build dependencies that must be satisfied in terms of version ranges. This field fixes those dependencies to the specific versions available on this machine for this compiler.

  • componentIncludes :: [(OpenUnitId, ModuleRenaming)]

    The set of packages that are brought into scope during compilation, including a ModuleRenaming which may used to hide or rename modules. This is what gets translated into -package-id arguments. This is a modernized version of componentPackageDeps, which is kept around for BC purposes.

  • componentExeDeps :: [UnitId]
     
  • componentInternalDeps :: [UnitId]

    The internal dependencies which induce a graph on the ComponentLocalBuildInfo of this package. This does NOT coincide with componentPackageDeps because it ALSO records 'build-tool' dependencies on executables. Maybe one day cabal-install will also handle these correctly too!

TestComponentLocalBuildInfo 

Fields

  • componentLocalName :: ComponentName

    It would be very convenient to store the literal Library here, but if we do that, it will get serialized (via the Binary) instance twice. So instead we just provide the ComponentName, which can be used to find the Component in the PackageDescription. NB: eventually, this will NOT uniquely identify the ComponentLocalBuildInfo.

  • componentComponentId :: ComponentId

    The computed ComponentId of this component.

  • componentUnitId :: UnitId

    The computed UnitId which uniquely identifies this component. Might be hashed.

  • componentPackageDeps :: [(UnitId, MungedPackageId)]

    Resolved internal and external package dependencies for this component. The BuildInfo specifies a set of build dependencies that must be satisfied in terms of version ranges. This field fixes those dependencies to the specific versions available on this machine for this compiler.

  • componentIncludes :: [(OpenUnitId, ModuleRenaming)]

    The set of packages that are brought into scope during compilation, including a ModuleRenaming which may used to hide or rename modules. This is what gets translated into -package-id arguments. This is a modernized version of componentPackageDeps, which is kept around for BC purposes.

  • componentExeDeps :: [UnitId]
     
  • componentInternalDeps :: [UnitId]

    The internal dependencies which induce a graph on the ComponentLocalBuildInfo of this package. This does NOT coincide with componentPackageDeps because it ALSO records 'build-tool' dependencies on executables. Maybe one day cabal-install will also handle these correctly too!

BenchComponentLocalBuildInfo 

Fields

  • componentLocalName :: ComponentName

    It would be very convenient to store the literal Library here, but if we do that, it will get serialized (via the Binary) instance twice. So instead we just provide the ComponentName, which can be used to find the Component in the PackageDescription. NB: eventually, this will NOT uniquely identify the ComponentLocalBuildInfo.

  • componentComponentId :: ComponentId

    The computed ComponentId of this component.

  • componentUnitId :: UnitId

    The computed UnitId which uniquely identifies this component. Might be hashed.

  • componentPackageDeps :: [(UnitId, MungedPackageId)]

    Resolved internal and external package dependencies for this component. The BuildInfo specifies a set of build dependencies that must be satisfied in terms of version ranges. This field fixes those dependencies to the specific versions available on this machine for this compiler.

  • componentIncludes :: [(OpenUnitId, ModuleRenaming)]

    The set of packages that are brought into scope during compilation, including a ModuleRenaming which may used to hide or rename modules. This is what gets translated into -package-id arguments. This is a modernized version of componentPackageDeps, which is kept around for BC purposes.

  • componentExeDeps :: [UnitId]
     
  • componentInternalDeps :: [UnitId]

    The internal dependencies which induce a graph on the ComponentLocalBuildInfo of this package. This does NOT coincide with componentPackageDeps because it ALSO records 'build-tool' dependencies on executables. Maybe one day cabal-install will also handle these correctly too!

Instances

Instances details
IsNode ComponentLocalBuildInfo Source # 
Instance details

Defined in Distribution.Types.ComponentLocalBuildInfo

Associated Types

type Key ComponentLocalBuildInfo

Structured ComponentLocalBuildInfo Source # 
Instance details

Defined in Distribution.Types.ComponentLocalBuildInfo

Generic ComponentLocalBuildInfo Source # 
Instance details

Defined in Distribution.Types.ComponentLocalBuildInfo

Associated Types

type Rep ComponentLocalBuildInfo :: Type -> Type #

Read ComponentLocalBuildInfo Source # 
Instance details

Defined in Distribution.Types.ComponentLocalBuildInfo

Show ComponentLocalBuildInfo Source # 
Instance details

Defined in Distribution.Types.ComponentLocalBuildInfo

Binary ComponentLocalBuildInfo Source # 
Instance details

Defined in Distribution.Types.ComponentLocalBuildInfo

type Key ComponentLocalBuildInfo Source # 
Instance details

Defined in Distribution.Types.ComponentLocalBuildInfo

type Key ComponentLocalBuildInfo = UnitId
type Rep ComponentLocalBuildInfo Source # 
Instance details

Defined in Distribution.Types.ComponentLocalBuildInfo

type Rep ComponentLocalBuildInfo = D1 ('MetaData "ComponentLocalBuildInfo" "Distribution.Types.ComponentLocalBuildInfo" "Cabal-3.14.0.0-inplace" 'False) ((C1 ('MetaCons "LibComponentLocalBuildInfo" 'PrefixI 'True) (((S1 ('MetaSel ('Just "componentLocalName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ComponentName) :*: (S1 ('MetaSel ('Just "componentComponentId") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ComponentId) :*: S1 ('MetaSel ('Just "componentUnitId") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 UnitId))) :*: (S1 ('MetaSel ('Just "componentIsIndefinite_") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool) :*: (S1 ('MetaSel ('Just "componentInstantiatedWith") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(ModuleName, OpenModule)]) :*: S1 ('MetaSel ('Just "componentPackageDeps") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(UnitId, MungedPackageId)])))) :*: ((S1 ('MetaSel ('Just "componentIncludes") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(OpenUnitId, ModuleRenaming)]) :*: (S1 ('MetaSel ('Just "componentExeDeps") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [UnitId]) :*: S1 ('MetaSel ('Just "componentInternalDeps") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [UnitId]))) :*: ((S1 ('MetaSel ('Just "componentCompatPackageKey") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String) :*: S1 ('MetaSel ('Just "componentCompatPackageName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 MungedPackageName)) :*: (S1 ('MetaSel ('Just "componentExposedModules") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [ExposedModule]) :*: S1 ('MetaSel ('Just "componentIsPublic") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool))))) :+: C1 ('MetaCons "FLibComponentLocalBuildInfo" 'PrefixI 'True) ((S1 ('MetaSel ('Just "componentLocalName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ComponentName) :*: (S1 ('MetaSel ('Just "componentComponentId") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ComponentId) :*: S1 ('MetaSel ('Just "componentUnitId") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 UnitId))) :*: ((S1 ('MetaSel ('Just "componentPackageDeps") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(UnitId, MungedPackageId)]) :*: S1 ('MetaSel ('Just "componentIncludes") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(OpenUnitId, ModuleRenaming)])) :*: (S1 ('MetaSel ('Just "componentExeDeps") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [UnitId]) :*: S1 ('MetaSel ('Just "componentInternalDeps") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [UnitId]))))) :+: (C1 ('MetaCons "ExeComponentLocalBuildInfo" 'PrefixI 'True) ((S1 ('MetaSel ('Just "componentLocalName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ComponentName) :*: (S1 ('MetaSel ('Just "componentComponentId") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ComponentId) :*: S1 ('MetaSel ('Just "componentUnitId") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 UnitId))) :*: ((S1 ('MetaSel ('Just "componentPackageDeps") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(UnitId, MungedPackageId)]) :*: S1 ('MetaSel ('Just "componentIncludes") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(OpenUnitId, ModuleRenaming)])) :*: (S1 ('MetaSel ('Just "componentExeDeps") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [UnitId]) :*: S1 ('MetaSel ('Just "componentInternalDeps") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [UnitId])))) :+: (C1 ('MetaCons "TestComponentLocalBuildInfo" 'PrefixI 'True) ((S1 ('MetaSel ('Just "componentLocalName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ComponentName) :*: (S1 ('MetaSel ('Just "componentComponentId") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ComponentId) :*: S1 ('MetaSel ('Just "componentUnitId") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 UnitId))) :*: ((S1 ('MetaSel ('Just "componentPackageDeps") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(UnitId, MungedPackageId)]) :*: S1 ('MetaSel ('Just "componentIncludes") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(OpenUnitId, ModuleRenaming)])) :*: (S1 ('MetaSel ('Just "componentExeDeps") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [UnitId]) :*: S1 ('MetaSel ('Just "componentInternalDeps") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [UnitId])))) :+: C1 ('MetaCons "BenchComponentLocalBuildInfo" 'PrefixI 'True) ((S1 ('MetaSel ('Just "componentLocalName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ComponentName) :*: (S1 ('MetaSel ('Just "componentComponentId") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ComponentId) :*: S1 ('MetaSel ('Just "componentUnitId") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 UnitId))) :*: ((S1 ('MetaSel ('Just "componentPackageDeps") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(UnitId, MungedPackageId)]) :*: S1 ('MetaSel ('Just "componentIncludes") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(OpenUnitId, ModuleRenaming)])) :*: (S1 ('MetaSel ('Just "componentExeDeps") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [UnitId]) :*: S1 ('MetaSel ('Just "componentInternalDeps") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [UnitId])))))))

componentBuildDir :: LocalBuildInfo -> ComponentLocalBuildInfo -> SymbolicPath Pkg (Dir Build) Source #

foldComponent :: (Library -> a) -> (ForeignLib -> a) -> (Executable -> a) -> (TestSuite -> a) -> (Benchmark -> a) -> Component -> a #

pkgComponents :: PackageDescription -> [Component] #

pkgBuildableComponents :: PackageDescription -> [Component] #

lookupComponent :: PackageDescription -> ComponentName -> Maybe Component #

getComponent :: PackageDescription -> ComponentName -> Component #

depLibraryPaths Source #

Arguments

:: Bool

Building for inplace?

-> Bool

Generate prefix-relative library paths

-> LocalBuildInfo 
-> ComponentLocalBuildInfo

Component that is being built

-> IO [FilePath] 

Determine the directories containing the dynamic libraries of the transitive dependencies of the component we are building.

When wanted, and possible, returns paths relative to the installDirs prefix

allLibModules :: Library -> ComponentLocalBuildInfo -> [ModuleName] Source #

Get all module names that needed to be built by GHC; i.e., all of these ModuleNames have interface files associated with them that need to be installed.

withAllComponentsInBuildOrder :: PackageDescription -> LocalBuildInfo -> (Component -> ComponentLocalBuildInfo -> IO ()) -> IO () Source #

Perform the action on each buildable Library or Executable (Component) in the PackageDescription, subject to the build order specified by the compBuildOrder field of the given LocalBuildInfo

withLibLBI :: PackageDescription -> LocalBuildInfo -> (Library -> ComponentLocalBuildInfo -> IO ()) -> IO () Source #

Perform the action on each enabled library in the package description with the ComponentLocalBuildInfo.

withExeLBI :: PackageDescription -> LocalBuildInfo -> (Executable -> ComponentLocalBuildInfo -> IO ()) -> IO () Source #

Perform the action on each enabled Executable in the package description. Extended version of withExe that also gives corresponding build info.

withBenchLBI :: PackageDescription -> LocalBuildInfo -> (Benchmark -> ComponentLocalBuildInfo -> IO ()) -> IO () Source #

Perform the action on each enabled Benchmark in the package description.

withTestLBI :: PackageDescription -> LocalBuildInfo -> (TestSuite -> ComponentLocalBuildInfo -> IO ()) -> IO () Source #

enabledTestLBIs :: PackageDescription -> LocalBuildInfo -> [(TestSuite, ComponentLocalBuildInfo)] Source #

enabledBenchLBIs :: PackageDescription -> LocalBuildInfo -> [(Benchmark, ComponentLocalBuildInfo)] Source #

Installation directories

data InstallDirs dir Source #

The directories where we will install files for packages.

We have several different directories for different types of files since many systems have conventions whereby different types of files in a package are installed in different directories. This is particularly the case on Unix style systems.

Constructors

InstallDirs 

Fields

Instances

Instances details
Functor InstallDirs Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

Methods

fmap :: (a -> b) -> InstallDirs a -> InstallDirs b #

(<$) :: a -> InstallDirs b -> InstallDirs a #

Structured dir => Structured (InstallDirs dir) Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

Methods

structure :: Proxy (InstallDirs dir) -> Structure

structureHash' :: Tagged (InstallDirs dir) MD5

(Semigroup dir, Monoid dir) => Monoid (InstallDirs dir) Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

Methods

mempty :: InstallDirs dir #

mappend :: InstallDirs dir -> InstallDirs dir -> InstallDirs dir #

mconcat :: [InstallDirs dir] -> InstallDirs dir #

Semigroup dir => Semigroup (InstallDirs dir) Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

Methods

(<>) :: InstallDirs dir -> InstallDirs dir -> InstallDirs dir #

sconcat :: NonEmpty (InstallDirs dir) -> InstallDirs dir #

stimes :: Integral b => b -> InstallDirs dir -> InstallDirs dir #

Generic (InstallDirs dir) Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

Associated Types

type Rep (InstallDirs dir) :: Type -> Type #

Methods

from :: InstallDirs dir -> Rep (InstallDirs dir) x #

to :: Rep (InstallDirs dir) x -> InstallDirs dir #

Read dir => Read (InstallDirs dir) Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

Show dir => Show (InstallDirs dir) Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

Methods

showsPrec :: Int -> InstallDirs dir -> ShowS #

show :: InstallDirs dir -> String #

showList :: [InstallDirs dir] -> ShowS #

Binary dir => Binary (InstallDirs dir) Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

Methods

put :: InstallDirs dir -> Put #

get :: Get (InstallDirs dir) #

putList :: [InstallDirs dir] -> Put #

Eq dir => Eq (InstallDirs dir) Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

Methods

(==) :: InstallDirs dir -> InstallDirs dir -> Bool #

(/=) :: InstallDirs dir -> InstallDirs dir -> Bool #

type Rep (InstallDirs dir) Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

type Rep (InstallDirs dir) = D1 ('MetaData "InstallDirs" "Distribution.Simple.InstallDirs" "Cabal-3.14.0.0-inplace" 'False) (C1 ('MetaCons "InstallDirs" 'PrefixI 'True) ((((S1 ('MetaSel ('Just "prefix") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 dir) :*: S1 ('MetaSel ('Just "bindir") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 dir)) :*: (S1 ('MetaSel ('Just "libdir") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 dir) :*: S1 ('MetaSel ('Just "libsubdir") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 dir))) :*: ((S1 ('MetaSel ('Just "dynlibdir") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 dir) :*: S1 ('MetaSel ('Just "flibdir") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 dir)) :*: (S1 ('MetaSel ('Just "libexecdir") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 dir) :*: S1 ('MetaSel ('Just "libexecsubdir") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 dir)))) :*: (((S1 ('MetaSel ('Just "includedir") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 dir) :*: S1 ('MetaSel ('Just "datadir") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 dir)) :*: (S1 ('MetaSel ('Just "datasubdir") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 dir) :*: S1 ('MetaSel ('Just "docdir") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 dir))) :*: ((S1 ('MetaSel ('Just "mandir") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 dir) :*: S1 ('MetaSel ('Just "htmldir") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 dir)) :*: (S1 ('MetaSel ('Just "haddockdir") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 dir) :*: S1 ('MetaSel ('Just "sysconfdir") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 dir))))))

type InstallDirTemplates = InstallDirs PathTemplate Source #

The installation directories in terms of PathTemplates that contain variables.

The defaults for most of the directories are relative to each other, in particular they are all relative to a single prefix. This makes it convenient for the user to override the default installation directory by only having to specify --prefix=... rather than overriding each individually. This is done by allowing $-style variables in the dirs. These are expanded by textual substitution (see substPathTemplate).

A few of these installation directories are split into two components, the dir and subdir. The full installation path is formed by combining the two together with /. The reason for this is compatibility with other Unix build systems which also support --libdir and --datadir. We would like users to be able to configure --libdir=/usr/lib64 for example but because by default we want to support installing multiple versions of packages and building the same package for multiple compilers we append the libsubdir to get: /usr/lib64/$libname/$compiler.

An additional complication is the need to support relocatable packages on systems which support such things, like Windows.

data CopyDest Source #

The location prefix for the copy command.

Constructors

NoCopyDest 
CopyTo FilePath 
CopyToDb FilePath

when using the ${pkgroot} as prefix. The CopyToDb will adjust the paths to be relative to the provided package database when copying / installing.

Instances

Instances details
Structured CopyDest Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

Methods

structure :: Proxy CopyDest -> Structure

structureHash' :: Tagged CopyDest MD5

Generic CopyDest Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

Associated Types

type Rep CopyDest :: Type -> Type #

Methods

from :: CopyDest -> Rep CopyDest x #

to :: Rep CopyDest x -> CopyDest #

Show CopyDest Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

Binary CopyDest Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

Methods

put :: CopyDest -> Put #

get :: Get CopyDest #

putList :: [CopyDest] -> Put #

Eq CopyDest Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

type Rep CopyDest Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

type Rep CopyDest = D1 ('MetaData "CopyDest" "Distribution.Simple.InstallDirs" "Cabal-3.14.0.0-inplace" 'False) (C1 ('MetaCons "NoCopyDest" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "CopyTo" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 FilePath)) :+: C1 ('MetaCons "CopyToDb" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 FilePath))))

data PathTemplate Source #

An abstract path, possibly containing variables that need to be substituted for to get a real FilePath.

Instances

Instances details
Structured PathTemplate Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

Methods

structure :: Proxy PathTemplate -> Structure

structureHash' :: Tagged PathTemplate MD5

Generic PathTemplate Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

Associated Types

type Rep PathTemplate :: Type -> Type #

Read PathTemplate Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

Show PathTemplate Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

Binary PathTemplate Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

Eq PathTemplate Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

Ord PathTemplate Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

type Rep PathTemplate Source # 
Instance details

Defined in Distribution.Simple.InstallDirs

type Rep PathTemplate = D1 ('MetaData "PathTemplate" "Distribution.Simple.InstallDirs" "Cabal-3.14.0.0-inplace" 'True) (C1 ('MetaCons "PathTemplate" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [PathComponent])))

data PathTemplateVariable Source #

Constructors

PrefixVar

The $prefix path variable

BindirVar

The $bindir path variable

LibdirVar

The $libdir path variable

LibsubdirVar

The $libsubdir path variable

DynlibdirVar

The $dynlibdir path variable

DatadirVar

The $datadir path variable

DatasubdirVar

The $datasubdir path variable

DocdirVar

The $docdir path variable

HtmldirVar

The $htmldir path variable

PkgNameVar

The $pkg package name path variable

PkgVerVar

The $version package version path variable

PkgIdVar

The $pkgid package Id path variable, eg foo-1.0

LibNameVar

The $libname path variable

CompilerVar

The compiler name and version, eg ghc-6.6.1

OSVar

The operating system name, eg windows or linux

ArchVar

The CPU architecture name, eg i386 or x86_64

AbiVar

The compiler's ABI identifier,

AbiTagVar

The optional ABI tag for the compiler

ExecutableNameVar

The executable name; used in shell wrappers

TestSuiteNameVar

The name of the test suite being run

TestSuiteResultVar

The result of the test suite being run, eg pass, fail, or error.

BenchmarkNameVar

The name of the benchmark being run

Instances

Instances details
Structured PathTemplateVariable Source # 
Instance details

Defined in Distribution.Simple.InstallDirs.Internal

Generic PathTemplateVariable Source # 
Instance details

Defined in Distribution.Simple.InstallDirs.Internal

Associated Types

type Rep PathTemplateVariable :: Type -> Type #

Read PathTemplateVariable Source # 
Instance details

Defined in Distribution.Simple.InstallDirs.Internal

Show PathTemplateVariable Source # 
Instance details

Defined in Distribution.Simple.InstallDirs.Internal

Binary PathTemplateVariable Source # 
Instance details

Defined in Distribution.Simple.InstallDirs.Internal

Eq PathTemplateVariable Source # 
Instance details

Defined in Distribution.Simple.InstallDirs.Internal

Ord PathTemplateVariable Source # 
Instance details

Defined in Distribution.Simple.InstallDirs.Internal

type Rep PathTemplateVariable Source # 
Instance details

Defined in Distribution.Simple.InstallDirs.Internal

type Rep PathTemplateVariable = D1 ('MetaData "PathTemplateVariable" "Distribution.Simple.InstallDirs.Internal" "Cabal-3.14.0.0-inplace" 'False) ((((C1 ('MetaCons "PrefixVar" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "BindirVar" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "LibdirVar" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "LibsubdirVar" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "DynlibdirVar" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "DatadirVar" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "DatasubdirVar" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "DocdirVar" 'PrefixI 'False) (U1 :: Type -> Type))) :+: (C1 ('MetaCons "HtmldirVar" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "PkgNameVar" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "PkgVerVar" 'PrefixI 'False) (U1 :: Type -> Type))))) :+: (((C1 ('MetaCons "PkgIdVar" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "LibNameVar" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "CompilerVar" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "OSVar" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ArchVar" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "AbiVar" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "AbiTagVar" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ExecutableNameVar" 'PrefixI 'False) (U1 :: Type -> Type))) :+: (C1 ('MetaCons "TestSuiteNameVar" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "TestSuiteResultVar" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "BenchmarkNameVar" 'PrefixI 'False) (U1 :: Type -> Type))))))

substituteInstallDirTemplates :: PathTemplateEnv -> InstallDirTemplates -> InstallDirTemplates Source #

Substitute the install dir templates into each other.

To prevent cyclic substitutions, only some variables are allowed in particular dir templates. If out of scope vars are present, they are not substituted for. Checking for any remaining unsubstituted vars can be done as a subsequent operation.

The reason it is done this way is so that in prefixRelativeInstallDirs we can replace prefix with the PrefixVar and get resulting PathTemplates that still have the PrefixVar in them. Doing this makes it each to check which paths are relative to the $prefix.

toPathTemplate :: FilePath -> PathTemplate Source #

Convert a FilePath to a PathTemplate including any template vars.

fromPathTemplate :: PathTemplate -> FilePath Source #

Convert back to a path, any remaining vars are included

initialPathTemplateEnv :: PackageIdentifier -> UnitId -> CompilerInfo -> Platform -> PathTemplateEnv Source #

The initial environment has all the static stuff but no paths

packageTemplateEnv :: PackageIdentifier -> UnitId -> PathTemplateEnv Source #

abiTemplateEnv :: CompilerInfo -> Platform -> PathTemplateEnv Source #

absoluteInstallDirs :: PackageDescription -> LocalBuildInfo -> CopyDest -> InstallDirs FilePath Source #

Backwards compatibility function which computes the InstallDirs assuming that $libname points to the public library (or some fake package identifier if there is no public library.) IF AT ALL POSSIBLE, please use absoluteComponentInstallDirs instead.

prefixRelativeInstallDirs :: PackageId -> LocalBuildInfo -> InstallDirs (Maybe FilePath) Source #

Backwards compatibility function which computes the InstallDirs assuming that $libname points to the public library (or some fake package identifier if there is no public library.) IF AT ALL POSSIBLE, please use prefixRelativeComponentInstallDirs instead.