Cabal-3.12.1.0: A framework for packaging Haskell software

Copyright | Isaac Jones 2003-2004
License | BSD3
Maintainer | cabal-devel@haskell.org
Portability | portable
Safe Haskell | None
Language | Haskell2010

Distribution.Simple.LocalBuildInfo

Contents

- Convenience accessors
- Buildable package components
- Installation directories

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

- data LocalBuildInfo where
  - NewLocalBuildInfo {
    - localBuildDescr :: LocalBuildDescr
    - localBuildConfig :: LocalBuildConfig
    }
  - pattern LocalBuildInfo :: ConfigFlags -> FlagAssignment -> ComponentRequestedSpec -> [String] -> InstallDirTemplates -> Compiler -> Platform -> Maybe FilePath -> Graph ComponentLocalBuildInfo -> Map ComponentName [ComponentLocalBuildInfo] -> Map (PackageName, ComponentName) ComponentId -> InstalledPackageIndex -> PackageDescription -> ProgramDb -> PackageDBStack -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> ProfDetailLevel -> ProfDetailLevel -> OptimisationLevel -> DebugInfoLevel -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> [UnitId] -> Bool -> LocalBuildInfo
- localComponentId :: LocalBuildInfo -> ComponentId
- localUnitId :: LocalBuildInfo -> UnitId
- localCompatPackageKey :: LocalBuildInfo -> String
- buildDir :: LocalBuildInfo -> FilePath
- cabalFilePath :: LocalBuildInfo -> Maybe FilePath
- progPrefix :: LocalBuildInfo -> PathTemplate
- progSuffix :: LocalBuildInfo -> PathTemplate
- data Component
  - = CLib Library
  - | CFLib ForeignLib
  - | CExe Executable
  - | CTest TestSuite
  - | CBench Benchmark
- data ComponentName where
  - CLibName LibraryName
  - CNotLibName NotLibComponentName
  - pattern CBenchName :: UnqualComponentName -> ComponentName
  - pattern CTestName :: UnqualComponentName -> ComponentName
  - pattern CExeName :: UnqualComponentName -> ComponentName
  - pattern CFLibName :: UnqualComponentName -> ComponentName
- data LibraryName
  - = LMainLibName
  - | LSubLibName UnqualComponentName
- defaultLibName :: LibraryName
- showComponentName :: ComponentName -> String
- componentNameString :: ComponentName -> Maybe UnqualComponentName
- data ComponentLocalBuildInfo
  - = LibComponentLocalBuildInfo {
    - componentLocalName :: ComponentName
    - componentComponentId :: ComponentId
    - componentUnitId :: UnitId
    - componentIsIndefinite_ :: Bool
    - componentInstantiatedWith :: [(ModuleName, OpenModule)]
    - componentPackageDeps :: [(UnitId, MungedPackageId)]
    - componentIncludes :: [(OpenUnitId, ModuleRenaming)]
    - componentExeDeps :: [UnitId]
    - componentInternalDeps :: [UnitId]
    - componentCompatPackageKey :: String
    - componentCompatPackageName :: MungedPackageName
    - componentExposedModules :: [ExposedModule]
    - componentIsPublic :: Bool
    }
  - | FLibComponentLocalBuildInfo {
    - componentLocalName :: ComponentName
    - componentComponentId :: ComponentId
    - componentUnitId :: UnitId
    - componentPackageDeps :: [(UnitId, MungedPackageId)]
    - componentIncludes :: [(OpenUnitId, ModuleRenaming)]
    - componentExeDeps :: [UnitId]
    - componentInternalDeps :: [UnitId]
    }
  - | ExeComponentLocalBuildInfo {
    - componentLocalName :: ComponentName
    - componentComponentId :: ComponentId
    - componentUnitId :: UnitId
    - componentPackageDeps :: [(UnitId, MungedPackageId)]
    - componentIncludes :: [(OpenUnitId, ModuleRenaming)]
    - componentExeDeps :: [UnitId]
    - componentInternalDeps :: [UnitId]
    }
  - | TestComponentLocalBuildInfo {
    - componentLocalName :: ComponentName
    - componentComponentId :: ComponentId
    - componentUnitId :: UnitId
    - componentPackageDeps :: [(UnitId, MungedPackageId)]
    - componentIncludes :: [(OpenUnitId, ModuleRenaming)]
    - componentExeDeps :: [UnitId]
    - componentInternalDeps :: [UnitId]
    }
  - | BenchComponentLocalBuildInfo {
    - componentLocalName :: ComponentName
    - componentComponentId :: ComponentId
    - componentUnitId :: UnitId
    - componentPackageDeps :: [(UnitId, MungedPackageId)]
    - componentIncludes :: [(OpenUnitId, ModuleRenaming)]
    - componentExeDeps :: [UnitId]
    - componentInternalDeps :: [UnitId]
    }
- componentBuildDir :: LocalBuildInfo -> ComponentLocalBuildInfo -> FilePath
- foldComponent :: (Library -> a) -> (ForeignLib -> a) -> (Executable -> a) -> (TestSuite -> a) -> (Benchmark -> a) -> Component -> a
- componentName :: Component -> ComponentName
- componentBuildInfo :: Component -> BuildInfo
- componentBuildable :: Component -> Bool
- pkgComponents :: PackageDescription -> [Component]
- pkgBuildableComponents :: PackageDescription -> [Component]
- lookupComponent :: PackageDescription -> ComponentName -> Maybe Component
- getComponent :: PackageDescription -> ComponentName -> Component
- allComponentsInBuildOrder :: LocalBuildInfo -> [ComponentLocalBuildInfo]
- depLibraryPaths :: Bool -> Bool -> LocalBuildInfo -> ComponentLocalBuildInfo -> IO [FilePath]
- allLibModules :: Library -> ComponentLocalBuildInfo -> [ModuleName]
- withAllComponentsInBuildOrder :: PackageDescription -> LocalBuildInfo -> (Component -> ComponentLocalBuildInfo -> IO ()) -> IO ()
- withLibLBI :: PackageDescription -> LocalBuildInfo -> (Library -> ComponentLocalBuildInfo -> IO ()) -> IO ()
- withExeLBI :: PackageDescription -> LocalBuildInfo -> (Executable -> ComponentLocalBuildInfo -> IO ()) -> IO ()
- withBenchLBI :: PackageDescription -> LocalBuildInfo -> (Benchmark -> ComponentLocalBuildInfo -> IO ()) -> IO ()
- withTestLBI :: PackageDescription -> LocalBuildInfo -> (TestSuite -> ComponentLocalBuildInfo -> IO ()) -> IO ()
- enabledTestLBIs :: PackageDescription -> LocalBuildInfo -> [(TestSuite, ComponentLocalBuildInfo)]
- enabledBenchLBIs :: PackageDescription -> LocalBuildInfo -> [(Benchmark, ComponentLocalBuildInfo)]
- data InstallDirs dir = InstallDirs {
  - prefix :: dir
  - bindir :: dir
  - libdir :: dir
  - libsubdir :: dir
  - dynlibdir :: dir
  - flibdir :: dir
  - libexecdir :: dir
  - libexecsubdir :: dir
  - includedir :: dir
  - datadir :: dir
  - datasubdir :: dir
  - docdir :: dir
  - mandir :: dir
  - htmldir :: dir
  - haddockdir :: dir
  - sysconfdir :: dir
  }
- type InstallDirTemplates = InstallDirs PathTemplate
- defaultInstallDirs :: CompilerFlavor -> Bool -> Bool -> IO InstallDirTemplates
- defaultInstallDirs' :: Bool -> CompilerFlavor -> Bool -> Bool -> IO InstallDirTemplates
- combineInstallDirs :: (a -> b -> c) -> InstallDirs a -> InstallDirs b -> InstallDirs c
- data CopyDest
  - = NoCopyDest
  - | CopyTo FilePath
  - | CopyToDb FilePath
- substituteInstallDirTemplates :: PathTemplateEnv -> InstallDirTemplates -> InstallDirTemplates
- data PathTemplate
- data PathTemplateVariable
  - = PrefixVar
  - | BindirVar
  - | LibdirVar
  - | LibsubdirVar
  - | DynlibdirVar
  - | DatadirVar
  - | DatasubdirVar
  - | DocdirVar
  - | HtmldirVar
  - | PkgNameVar
  - | PkgVerVar
  - | PkgIdVar
  - | LibNameVar
  - | CompilerVar
  - | OSVar
  - | ArchVar
  - | AbiVar
  - | AbiTagVar
  - | ExecutableNameVar
  - | TestSuiteNameVar
  - | TestSuiteResultVar
  - | BenchmarkNameVar
- type PathTemplateEnv = [(PathTemplateVariable, PathTemplate)]
- toPathTemplate :: FilePath -> PathTemplate
- fromPathTemplate :: PathTemplate -> FilePath
- combinePathTemplate :: PathTemplate -> PathTemplate -> PathTemplate
- initialPathTemplateEnv :: PackageIdentifier -> UnitId -> CompilerInfo -> Platform -> PathTemplateEnv
- platformTemplateEnv :: Platform -> PathTemplateEnv
- compilerTemplateEnv :: CompilerInfo -> PathTemplateEnv
- packageTemplateEnv :: PackageIdentifier -> UnitId -> PathTemplateEnv
- abiTemplateEnv :: CompilerInfo -> Platform -> PathTemplateEnv
- installDirsTemplateEnv :: InstallDirs PathTemplate -> PathTemplateEnv
- absoluteInstallDirs :: PackageDescription -> LocalBuildInfo -> CopyDest -> InstallDirs FilePath
- prefixRelativeInstallDirs :: PackageId -> LocalBuildInfo -> InstallDirs (Maybe FilePath)
- absoluteInstallCommandDirs :: PackageDescription -> LocalBuildInfo -> UnitId -> CopyDest -> InstallDirs FilePath
- absoluteComponentInstallDirs :: PackageDescription -> LocalBuildInfo -> UnitId -> CopyDest -> InstallDirs FilePath
- prefixRelativeComponentInstallDirs :: PackageId -> LocalBuildInfo -> UnitId -> InstallDirs (Maybe FilePath)
- substPathTemplate :: PackageId -> LocalBuildInfo -> UnitId -> PathTemplate -> FilePath

# Documentation

data LocalBuildInfo Source #

Data cached after configuration step. See also `ConfigFlags`.

Constructors

NewLocalBuildInfo |

Fields

- localBuildDescr :: LocalBuildDescr

  Information about a package determined by Cabal after the configuration step.

- localBuildConfig :: LocalBuildConfig

  Information about a package configuration that can be modified by the user at configuration time.

Bundled Patterns

pattern LocalBuildInfo :: ConfigFlags -> FlagAssignment -> ComponentRequestedSpec -> [String] -> InstallDirTemplates -> Compiler -> Platform -> Maybe FilePath -> Graph ComponentLocalBuildInfo -> Map ComponentName [ComponentLocalBuildInfo] -> Map (PackageName, ComponentName) ComponentId -> InstalledPackageIndex -> PackageDescription -> ProgramDb -> PackageDBStack -> 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 Source # structureHash' :: Tagged LocalBuildInfo MD5
Binary LocalBuildInfo Source # |
Instance details Defined in Distribution.Types.LocalBuildInfo Methods put :: LocalBuildInfo -> Put # get :: Get LocalBuildInfo # putList :: [LocalBuildInfo] -> Put #
Generic LocalBuildInfo Source # |

Instance details

Defined in Distribution.Types.LocalBuildInfo

Associated Types

type Rep LocalBuildInfo |

Instance details

Defined in Distribution.Types.LocalBuildInfo

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

Methods

from :: LocalBuildInfo -> Rep LocalBuildInfo x #

to :: Rep LocalBuildInfo x -> LocalBuildInfo #

Read LocalBuildInfo Source # |
Instance details Defined in Distribution.Types.LocalBuildInfo Methods readsPrec :: Int -> ReadS LocalBuildInfo # readList :: ReadS [LocalBuildInfo] # readPrec :: ReadPrec LocalBuildInfo # readListPrec :: ReadPrec [LocalBuildInfo] #
Show LocalBuildInfo Source # |
Instance details Defined in Distribution.Types.LocalBuildInfo Methods showsPrec :: Int -> LocalBuildInfo -> ShowS # show :: LocalBuildInfo -> String # showList :: [LocalBuildInfo] -> ShowS #
type Rep LocalBuildInfo Source # |

Instance details

Defined in Distribution.Types.LocalBuildInfo

type Rep LocalBuildInfo = D1 ('MetaData "LocalBuildInfo" "Distribution.Types.LocalBuildInfo" "Cabal-3.12.1.0-cda0" '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 -> FilePath Source #

cabalFilePath :: LocalBuildInfo -> Maybe FilePath Source #

progPrefix :: LocalBuildInfo -> PathTemplate Source #

progSuffix :: LocalBuildInfo -> PathTemplate Source #

# Buildable package components

data Component Source #

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 Source #

buildable :: Lens' Component Bool Source #

buildTools :: Lens' Component [LegacyExeDependency] Source #

buildToolDepends :: Lens' Component [ExeDependency] Source #

cppOptions :: Lens' Component [String] Source #

asmOptions :: Lens' Component [String] Source #

cmmOptions :: Lens' Component [String] Source #

ccOptions :: Lens' Component [String] Source #

cxxOptions :: Lens' Component [String] Source #

ldOptions :: Lens' Component [String] Source #

hsc2hsOptions :: Lens' Component [String] Source #

pkgconfigDepends :: Lens' Component [PkgconfigDependency] Source #

frameworks :: Lens' Component [String] Source #

extraFrameworkDirs :: Lens' Component [String] Source #

asmSources :: Lens' Component [FilePath] Source #

cmmSources :: Lens' Component [FilePath] Source #

cSources :: Lens' Component [FilePath] Source #

cxxSources :: Lens' Component [FilePath] Source #

jsSources :: Lens' Component [FilePath] Source #

hsSourceDirs :: Lens' Component [SymbolicPath PackageDir SourceDir] Source #

otherModules :: Lens' Component [ModuleName] Source #

virtualModules :: Lens' Component [ModuleName] Source #

autogenModules :: Lens' Component [ModuleName] Source #

defaultLanguage :: Lens' Component (Maybe Language) Source #

otherLanguages :: Lens' Component [Language] Source #

defaultExtensions :: Lens' Component [Extension] Source #

otherExtensions :: Lens' Component [Extension] Source #

oldExtensions :: Lens' Component [Extension] Source #

extraLibs :: Lens' Component [String] Source #

extraLibsStatic :: Lens' Component [String] Source #

extraGHCiLibs :: Lens' Component [String] Source #

extraBundledLibs :: Lens' Component [String] Source #

extraLibFlavours :: Lens' Component [String] Source #

extraDynLibFlavours :: Lens' Component [String] Source #

extraLibDirs :: Lens' Component [String] Source #

extraLibDirsStatic :: Lens' Component [String] Source #

includeDirs :: Lens' Component [FilePath] Source #

includes :: Lens' Component [FilePath] Source #

autogenIncludes :: Lens' Component [FilePath] Source #

installIncludes :: Lens' Component [FilePath] Source #

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

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

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

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

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

targetBuildDepends :: Lens' Component [Dependency] Source #

mixins :: Lens' Component [Mixin] Source #

Structured Component |
Instance details Defined in Distribution.Types.Component Methods structure :: Proxy Component -> Structure Source # structureHash' :: Tagged Component MD5
Binary Component |
Instance details Defined in Distribution.Types.Component Methods put :: Component -> Put # get :: Get Component # putList :: [Component] -> Put #
Semigroup Component |
Instance details Defined in Distribution.Types.Component Methods (<>) :: Component -> Component -> Component # sconcat :: NonEmpty Component -> Component # stimes :: Integral b => b -> Component -> Component #
Generic Component |

Instance details

Defined in Distribution.Types.Component

Associated Types

type Rep Component |

Instance details

Defined in Distribution.Types.Component

type Rep Component = D1 ('MetaData "Component" "Distribution.Types.Component" "Cabal-syntax-3.12.1.0-5c0e" 'False) ((C1 ('MetaCons "CLib" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Library)) :+: C1 ('MetaCons "CFLib" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ForeignLib))) :+: (C1 ('MetaCons "CExe" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Executable)) :+: (C1 ('MetaCons "CTest" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 TestSuite)) :+: C1 ('MetaCons "CBench" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Benchmark)))))

Methods

from :: Component -> Rep Component x #

to :: Rep Component x -> Component #

Read Component |
Instance details Defined in Distribution.Types.Component Methods readsPrec :: Int -> ReadS Component # readList :: ReadS [Component] # readPrec :: ReadPrec Component # readListPrec :: ReadPrec [Component] #
Show Component |
Instance details Defined in Distribution.Types.Component Methods showsPrec :: Int -> Component -> ShowS # show :: Component -> String # showList :: [Component] -> ShowS #
Eq Component |
Instance details Defined in Distribution.Types.Component Methods (==) :: Component -> Component -> Bool # (/=) :: Component -> Component -> Bool #
type Rep Component |

Instance details

Defined in Distribution.Types.Component

type Rep Component = D1 ('MetaData "Component" "Distribution.Types.Component" "Cabal-syntax-3.12.1.0-5c0e" 'False) ((C1 ('MetaCons "CLib" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Library)) :+: C1 ('MetaCons "CFLib" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ForeignLib))) :+: (C1 ('MetaCons "CExe" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Executable)) :+: (C1 ('MetaCons "CTest" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 TestSuite)) :+: C1 ('MetaCons "CBench" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Benchmark)))))

data ComponentName Source #

Constructors

CLibName LibraryName |
CNotLibName NotLibComponentName |

Bundled Patterns

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

#### Instances

Instances details

Parsec ComponentName |
Instance details Defined in Distribution.Types.ComponentName Methods parsec :: CabalParsing m => m ComponentName Source #
Pretty ComponentName |
Instance details Defined in Distribution.Types.ComponentName Methods pretty :: ComponentName -> Doc Source # prettyVersioned :: CabalSpecVersion -> ComponentName -> Doc Source #
Structured ComponentName |
Instance details Defined in Distribution.Types.ComponentName Methods structure :: Proxy ComponentName -> Structure Source # structureHash' :: Tagged ComponentName MD5
Binary ComponentName |
Instance details Defined in Distribution.Types.ComponentName Methods put :: ComponentName -> Put # get :: Get ComponentName # putList :: [ComponentName] -> Put #
Generic ComponentName |

Instance details

Defined in Distribution.Types.ComponentName

Associated Types

type Rep ComponentName |

Instance details

Defined in Distribution.Types.ComponentName

type Rep ComponentName = D1 ('MetaData "ComponentName" "Distribution.Types.ComponentName" "Cabal-syntax-3.12.1.0-5c0e" '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)))

Methods

from :: ComponentName -> Rep ComponentName x #

to :: Rep ComponentName x -> ComponentName #

Read ComponentName |
Instance details Defined in Distribution.Types.ComponentName Methods readsPrec :: Int -> ReadS ComponentName # readList :: ReadS [ComponentName] # readPrec :: ReadPrec ComponentName # readListPrec :: ReadPrec [ComponentName] #
Show ComponentName |
Instance details Defined in Distribution.Types.ComponentName Methods showsPrec :: Int -> ComponentName -> ShowS # show :: ComponentName -> String # showList :: [ComponentName] -> ShowS #
Eq ComponentName |
Instance details Defined in Distribution.Types.ComponentName Methods (==) :: ComponentName -> ComponentName -> Bool # (/=) :: ComponentName -> ComponentName -> Bool #
Ord ComponentName |

Instance details

Defined in Distribution.Types.ComponentName

Methods

compare :: ComponentName -> ComponentName -> Ordering #

(<) :: ComponentName -> ComponentName -> Bool #

(<=) :: ComponentName -> ComponentName -> Bool #

(>) :: ComponentName -> ComponentName -> Bool #

(>=) :: ComponentName -> ComponentName -> Bool #

max :: ComponentName -> ComponentName -> ComponentName #

min :: ComponentName -> ComponentName -> ComponentName #

type Rep ComponentName |

Instance details

Defined in Distribution.Types.ComponentName

type Rep ComponentName = D1 ('MetaData "ComponentName" "Distribution.Types.ComponentName" "Cabal-syntax-3.12.1.0-5c0e" '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 Source #

Constructors

LMainLibName |
LSubLibName UnqualComponentName |

#### Instances

Instances details

Structured LibraryName |
Instance details Defined in Distribution.Types.LibraryName Methods structure :: Proxy LibraryName -> Structure Source # structureHash' :: Tagged LibraryName MD5
Binary LibraryName |
Instance details Defined in Distribution.Types.LibraryName Methods put :: LibraryName -> Put # get :: Get LibraryName # putList :: [LibraryName] -> Put #
NFData LibraryName |
Instance details Defined in Distribution.Types.LibraryName Methods rnf :: LibraryName -> () Source #
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 |

Instance details

Defined in Distribution.Types.LibraryName

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

Methods

from :: LibraryName -> Rep LibraryName x #

to :: Rep LibraryName x -> LibraryName #

Read LibraryName |
Instance details Defined in Distribution.Types.LibraryName Methods readsPrec :: Int -> ReadS LibraryName # readList :: ReadS [LibraryName] # readPrec :: ReadPrec LibraryName # readListPrec :: ReadPrec [LibraryName] #
Show LibraryName |
Instance details Defined in Distribution.Types.LibraryName Methods showsPrec :: Int -> LibraryName -> ShowS # show :: LibraryName -> String # showList :: [LibraryName] -> ShowS #
Eq LibraryName |
Instance details Defined in Distribution.Types.LibraryName Methods (==) :: LibraryName -> LibraryName -> Bool # (/=) :: LibraryName -> LibraryName -> Bool #
Ord LibraryName |
Instance details Defined in Distribution.Types.LibraryName Methods compare :: LibraryName -> LibraryName -> Ordering # (<) :: LibraryName -> LibraryName -> Bool # (<=) :: LibraryName -> LibraryName -> Bool # (>) :: LibraryName -> LibraryName -> Bool # (>=) :: LibraryName -> LibraryName -> Bool # max :: LibraryName -> LibraryName -> LibraryName # min :: LibraryName -> LibraryName -> LibraryName #
type Rep LibraryName |

Instance details

Defined in Distribution.Types.LibraryName

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

defaultLibName :: LibraryName Source #

showComponentName :: ComponentName -> String Source #

componentNameString :: ComponentName -> Maybe UnqualComponentName Source #

This gets the underlying unqualified component name. In fact, it is guaranteed to uniquely identify a component, returning `Nothing` if the `ComponentName` was for the public library.

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 |
Instance details Defined in Distribution.Types.ComponentLocalBuildInfo type Key ComponentLocalBuildInfo = UnitId

Methods

nodeKey :: ComponentLocalBuildInfo -> Key ComponentLocalBuildInfo Source #

nodeNeighbors :: ComponentLocalBuildInfo -> [Key ComponentLocalBuildInfo] Source #

Structured ComponentLocalBuildInfo Source # |
Instance details Defined in Distribution.Types.ComponentLocalBuildInfo Methods structure :: Proxy ComponentLocalBuildInfo -> Structure Source # structureHash' :: Tagged ComponentLocalBuildInfo MD5
Binary ComponentLocalBuildInfo Source # |
Instance details Defined in Distribution.Types.ComponentLocalBuildInfo Methods put :: ComponentLocalBuildInfo -> Put # get :: Get ComponentLocalBuildInfo # putList :: [ComponentLocalBuildInfo] -> Put #
Generic ComponentLocalBuildInfo Source # |

Instance details

Defined in Distribution.Types.ComponentLocalBuildInfo

Associated Types

type Rep ComponentLocalBuildInfo |

Instance details

Defined in Distribution.Types.ComponentLocalBuildInfo

type Rep ComponentLocalBuildInfo = D1 ('MetaData "ComponentLocalBuildInfo" "Distribution.Types.ComponentLocalBuildInfo" "Cabal-3.12.1.0-cda0" '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])))))))

Methods

from :: ComponentLocalBuildInfo -> Rep ComponentLocalBuildInfo x #

to :: Rep ComponentLocalBuildInfo x -> ComponentLocalBuildInfo #

Read ComponentLocalBuildInfo Source # |
Instance details Defined in Distribution.Types.ComponentLocalBuildInfo Methods readsPrec :: Int -> ReadS ComponentLocalBuildInfo # readList :: ReadS [ComponentLocalBuildInfo] # readPrec :: ReadPrec ComponentLocalBuildInfo # readListPrec :: ReadPrec [ComponentLocalBuildInfo] #
Show ComponentLocalBuildInfo Source # |
Instance details Defined in Distribution.Types.ComponentLocalBuildInfo Methods showsPrec :: Int -> ComponentLocalBuildInfo -> ShowS # show :: ComponentLocalBuildInfo -> String # showList :: [ComponentLocalBuildInfo] -> ShowS #
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.12.1.0-cda0" '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 -> FilePath Source #

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

componentName :: Component -> ComponentName Source #

componentBuildInfo :: Component -> BuildInfo Source #

componentBuildable :: Component -> Bool Source #

Is a component buildable (i.e., not marked with `buildable: False`)? See also this note in Distribution.Types.ComponentRequestedSpec.

Since: Cabal-syntax-2.0.0.2

pkgComponents :: PackageDescription -> [Component] Source #

All the components in the package.

pkgBuildableComponents :: PackageDescription -> [Component] Source #

A list of all components in the package that are buildable, i.e., were not marked with `buildable: False`. This does NOT indicate if we are actually going to build the component, see `enabledComponents` instead.

Since: Cabal-syntax-2.0.0.2

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

getComponent :: PackageDescription -> ComponentName -> Component Source #

allComponentsInBuildOrder :: LocalBuildInfo -> [ComponentLocalBuildInfo] Source #

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 `ModuleName`s 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

- prefix :: dir
- bindir :: dir
- libdir :: dir
- libsubdir :: dir
- dynlibdir :: dir
- flibdir :: dir

  foreign libraries

- libexecdir :: dir
- libexecsubdir :: dir
- includedir :: dir
- datadir :: dir
- datasubdir :: dir
- docdir :: dir
- mandir :: dir
- htmldir :: dir
- haddockdir :: dir
- sysconfdir :: dir

#### 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 Source # structureHash' :: Tagged (InstallDirs dir) MD5
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 #
(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) |

Instance details

Defined in Distribution.Simple.InstallDirs

type Rep (InstallDirs dir) = D1 ('MetaData "InstallDirs" "Distribution.Simple.InstallDirs" "Cabal-3.12.1.0-cda0" '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))))))

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 Methods readsPrec :: Int -> ReadS (InstallDirs dir) # readList :: ReadS [InstallDirs dir] # readPrec :: ReadPrec (InstallDirs dir) # readListPrec :: ReadPrec [InstallDirs dir] #
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 #
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.12.1.0-cda0" '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 `PathTemplate`s 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.

defaultInstallDirs :: CompilerFlavor -> Bool -> Bool -> IO InstallDirTemplates Source #

defaultInstallDirs' :: Bool -> CompilerFlavor -> Bool -> Bool -> IO InstallDirTemplates Source #

combineInstallDirs :: (a -> b -> c) -> InstallDirs a -> InstallDirs b -> InstallDirs c Source #

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 Source # structureHash' :: Tagged CopyDest MD5
Binary CopyDest Source # |
Instance details Defined in Distribution.Simple.InstallDirs Methods put :: CopyDest -> Put # get :: Get CopyDest # putList :: [CopyDest] -> Put #
Generic CopyDest Source # |

Instance details

Defined in Distribution.Simple.InstallDirs

Associated Types

type Rep CopyDest |

Instance details

Defined in Distribution.Simple.InstallDirs

type Rep CopyDest = D1 ('MetaData "CopyDest" "Distribution.Simple.InstallDirs" "Cabal-3.12.1.0-cda0" '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))))

Methods

from :: CopyDest -> Rep CopyDest x #

to :: Rep CopyDest x -> CopyDest #

Show CopyDest Source # |
Instance details Defined in Distribution.Simple.InstallDirs Methods showsPrec :: Int -> CopyDest -> ShowS # show :: CopyDest -> String # showList :: [CopyDest] -> ShowS #
Eq CopyDest Source # |
Instance details Defined in Distribution.Simple.InstallDirs Methods (==) :: CopyDest -> CopyDest -> Bool # (/=) :: CopyDest -> CopyDest -> Bool #
type Rep CopyDest Source # |

Instance details

Defined in Distribution.Simple.InstallDirs

type Rep CopyDest = D1 ('MetaData "CopyDest" "Distribution.Simple.InstallDirs" "Cabal-3.12.1.0-cda0" '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))))

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 `PathTemplate`s that still have the `PrefixVar` in them. Doing this makes it each to check which paths are relative to the $prefix.

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 Source # structureHash' :: Tagged PathTemplate MD5
Binary PathTemplate Source # |
Instance details Defined in Distribution.Simple.InstallDirs Methods put :: PathTemplate -> Put # get :: Get PathTemplate # putList :: [PathTemplate] -> Put #
Generic PathTemplate Source # |

Instance details

Defined in Distribution.Simple.InstallDirs

Associated Types

type Rep PathTemplate |
Instance details Defined in Distribution.Simple.InstallDirs type Rep PathTemplate = D1 ('MetaData "PathTemplate" "Distribution.Simple.InstallDirs" "Cabal-3.12.1.0-cda0" 'True) (C1 ('MetaCons "PathTemplate" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [PathComponent])))

Methods

from :: PathTemplate -> Rep PathTemplate x #

to :: Rep PathTemplate x -> PathTemplate #

Read PathTemplate Source # |
Instance details Defined in Distribution.Simple.InstallDirs Methods readsPrec :: Int -> ReadS PathTemplate # readList :: ReadS [PathTemplate] # readPrec :: ReadPrec PathTemplate # readListPrec :: ReadPrec [PathTemplate] #
Show PathTemplate Source # |
Instance details Defined in Distribution.Simple.InstallDirs Methods showsPrec :: Int -> PathTemplate -> ShowS # show :: PathTemplate -> String # showList :: [PathTemplate] -> ShowS #
Eq PathTemplate Source # |
Instance details Defined in Distribution.Simple.InstallDirs Methods (==) :: PathTemplate -> PathTemplate -> Bool # (/=) :: PathTemplate -> PathTemplate -> Bool #
Ord PathTemplate Source # |

Instance details

Defined in Distribution.Simple.InstallDirs

Methods

compare :: PathTemplate -> PathTemplate -> Ordering #

(<) :: PathTemplate -> PathTemplate -> Bool #

(<=) :: PathTemplate -> PathTemplate -> Bool #

(>) :: PathTemplate -> PathTemplate -> Bool #

(>=) :: PathTemplate -> PathTemplate -> Bool #

max :: PathTemplate -> PathTemplate -> PathTemplate #

min :: PathTemplate -> PathTemplate -> PathTemplate #

type Rep PathTemplate Source # |
Instance details Defined in Distribution.Simple.InstallDirs type Rep PathTemplate = D1 ('MetaData "PathTemplate" "Distribution.Simple.InstallDirs" "Cabal-3.12.1.0-cda0" '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 Methods structure :: Proxy PathTemplateVariable -> Structure Source # structureHash' :: Tagged PathTemplateVariable MD5
Binary PathTemplateVariable Source # |
Instance details Defined in Distribution.Simple.InstallDirs.Internal Methods put :: PathTemplateVariable -> Put # get :: Get PathTemplateVariable # putList :: [PathTemplateVariable] -> Put #
Generic PathTemplateVariable Source # |

Instance details

Defined in Distribution.Simple.InstallDirs.Internal

Associated Types

type Rep PathTemplateVariable |

Instance details

Defined in Distribution.Simple.InstallDirs.Internal

type Rep PathTemplateVariable = D1 ('MetaData "PathTemplateVariable" "Distribution.Simple.InstallDirs.Internal" "Cabal-3.12.1.0-cda0" '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))))))

Methods

from :: PathTemplateVariable -> Rep PathTemplateVariable x #

to :: Rep PathTemplateVariable x -> PathTemplateVariable #

Read PathTemplateVariable Source # |
Instance details Defined in Distribution.Simple.InstallDirs.Internal Methods readsPrec :: Int -> ReadS PathTemplateVariable # readList :: ReadS [PathTemplateVariable] # readPrec :: ReadPrec PathTemplateVariable # readListPrec :: ReadPrec [PathTemplateVariable] #
Show PathTemplateVariable Source # |
Instance details Defined in Distribution.Simple.InstallDirs.Internal Methods showsPrec :: Int -> PathTemplateVariable -> ShowS # show :: PathTemplateVariable -> String # showList :: [PathTemplateVariable] -> ShowS #
Eq PathTemplateVariable Source # |
Instance details Defined in Distribution.Simple.InstallDirs.Internal Methods (==) :: PathTemplateVariable -> PathTemplateVariable -> Bool # (/=) :: PathTemplateVariable -> PathTemplateVariable -> Bool #
Ord PathTemplateVariable Source # |

Instance details

Defined in Distribution.Simple.InstallDirs.Internal

Methods

compare :: PathTemplateVariable -> PathTemplateVariable -> Ordering #

(<) :: PathTemplateVariable -> PathTemplateVariable -> Bool #

(<=) :: PathTemplateVariable -> PathTemplateVariable -> Bool #

(>) :: PathTemplateVariable -> PathTemplateVariable -> Bool #

(>=) :: PathTemplateVariable -> PathTemplateVariable -> Bool #

max :: PathTemplateVariable -> PathTemplateVariable -> PathTemplateVariable #

min :: PathTemplateVariable -> PathTemplateVariable -> PathTemplateVariable #

type Rep PathTemplateVariable Source # |

Instance details

Defined in Distribution.Simple.InstallDirs.Internal

type Rep PathTemplateVariable = D1 ('MetaData "PathTemplateVariable" "Distribution.Simple.InstallDirs.Internal" "Cabal-3.12.1.0-cda0" '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))))))

type PathTemplateEnv = [(PathTemplateVariable, PathTemplate)] Source #

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

combinePathTemplate :: PathTemplate -> PathTemplate -> PathTemplate Source #

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

The initial environment has all the static stuff but no paths

platformTemplateEnv :: Platform -> PathTemplateEnv Source #

compilerTemplateEnv :: CompilerInfo -> PathTemplateEnv Source #

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

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

installDirsTemplateEnv :: InstallDirs PathTemplate -> 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.

absoluteInstallCommandDirs :: PackageDescription -> LocalBuildInfo -> UnitId -> CopyDest -> InstallDirs FilePath Source #

absoluteComponentInstallDirs :: PackageDescription -> LocalBuildInfo -> UnitId -> CopyDest -> InstallDirs FilePath Source #

See `absoluteInstallDirs`.

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

See `prefixRelativeInstallDirs`

substPathTemplate :: PackageId -> LocalBuildInfo -> UnitId -> PathTemplate -> FilePath Source #