Copyright | Isaac Jones 2003-2005 |
---|---|
License | BSD3 |
Maintainer | cabal-devel@haskell.org |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
Distribution.Types.PackageDescription
Description
This defines the data structure for the
.cabal
file format. There are
several parts to this structure. It has top level info and then
Library
,
Executable
,
TestSuite
, and
Benchmark
sections each of which have
associated
BuildInfo
data that's used to build the library, exe, test, or
benchmark. To further complicate things there is both a
PackageDescription
and a
GenericPackageDescription
. This distinction relates to cabal
configurations. When we initially read a
.cabal
file we get a
GenericPackageDescription
which has all the conditional sections.
Before actually building a package we have to decide
on each conditional. Once we've done that we get a
PackageDescription
.
It was done this way initially to avoid breaking too much stuff when the
feature was introduced. It could probably do with being rationalised at some
point to make it simpler.
Synopsis
-
data
PackageDescription
=
PackageDescription
{
- specVersionRaw :: Either Version VersionRange
- package :: PackageIdentifier
- licenseRaw :: Either License License
- licenseFiles :: [ FilePath ]
- copyright :: ! ShortText
- maintainer :: ! ShortText
- author :: ! ShortText
- stability :: ! ShortText
- testedWith :: [( CompilerFlavor , VersionRange )]
- homepage :: ! ShortText
- pkgUrl :: ! ShortText
- bugReports :: ! ShortText
- sourceRepos :: [ SourceRepo ]
- synopsis :: ! ShortText
- description :: ! ShortText
- category :: ! ShortText
- customFieldsPD :: [( String , String )]
- buildTypeRaw :: Maybe BuildType
- setupBuildInfo :: Maybe SetupBuildInfo
- library :: Maybe Library
- subLibraries :: [ Library ]
- executables :: [ Executable ]
- foreignLibs :: [ ForeignLib ]
- testSuites :: [ TestSuite ]
- benchmarks :: [ Benchmark ]
- dataFiles :: [ FilePath ]
- dataDir :: FilePath
- extraSrcFiles :: [ FilePath ]
- extraTmpFiles :: [ FilePath ]
- extraDocFiles :: [ FilePath ]
- specVersion :: PackageDescription -> Version
- specVersion' :: Either Version VersionRange -> Version
- license :: PackageDescription -> License
- license' :: Either License License -> License
- buildType :: PackageDescription -> BuildType
- emptyPackageDescription :: PackageDescription
- hasPublicLib :: PackageDescription -> Bool
- hasLibs :: PackageDescription -> Bool
- allLibraries :: PackageDescription -> [ Library ]
- withLib :: PackageDescription -> ( Library -> IO ()) -> IO ()
- hasExes :: PackageDescription -> Bool
- withExe :: PackageDescription -> ( Executable -> IO ()) -> IO ()
- hasTests :: PackageDescription -> Bool
- withTest :: PackageDescription -> ( TestSuite -> IO ()) -> IO ()
- hasBenchmarks :: PackageDescription -> Bool
- withBenchmark :: PackageDescription -> ( Benchmark -> IO ()) -> IO ()
- hasForeignLibs :: PackageDescription -> Bool
- withForeignLib :: PackageDescription -> ( ForeignLib -> IO ()) -> IO ()
- allBuildInfo :: PackageDescription -> [ BuildInfo ]
- enabledBuildInfos :: PackageDescription -> ComponentRequestedSpec -> [ BuildInfo ]
- allBuildDepends :: PackageDescription -> [ Dependency ]
- enabledBuildDepends :: PackageDescription -> ComponentRequestedSpec -> [ Dependency ]
- updatePackageDescription :: HookedBuildInfo -> PackageDescription -> PackageDescription
- pkgComponents :: PackageDescription -> [ Component ]
- pkgBuildableComponents :: PackageDescription -> [ Component ]
- enabledComponents :: PackageDescription -> ComponentRequestedSpec -> [ Component ]
- lookupComponent :: PackageDescription -> ComponentName -> Maybe Component
- getComponent :: PackageDescription -> ComponentName -> Component
Documentation
data PackageDescription Source #
This data type is the internal representation of the file
pkg.cabal
.
It contains two kinds of information about the package: information
which is needed for all packages, such as the package name and version, and
information which is needed for the simple build system only, such as
the compiler options and library name.
Constructors
PackageDescription | |
Fields
|
Instances
specVersion :: PackageDescription -> Version Source #
The version of the Cabal spec that this package should be interpreted against.
Historically we used a version range but we are switching to using a single version. Currently we accept either. This function converts into a single version by ignoring upper bounds in the version range.
specVersion' :: Either Version VersionRange -> Version Source #
Since: 2.2.0.0
license :: PackageDescription -> License Source #
The SPDX
LicenseExpression
of the package.
Since: 2.2.0.0
buildType :: PackageDescription -> BuildType Source #
The effective
build-type
after applying defaulting rules.
The original
build-type
value parsed is stored in the
buildTypeRaw
field. However, the
build-type
field is optional
and can therefore be empty in which case we need to compute the
effective
build-type
. This function implements the following
defaulting rules:
-
For
cabal-version:2.0
and below, default to theCustom
build-type unconditionally. -
Otherwise, if a
custom-setup
stanza is defined, default to theCustom
build-type; else default toSimple
build-type.
Since: 2.2
hasPublicLib :: PackageDescription -> Bool Source #
Does this package have a buildable PUBLIC library?
hasLibs :: PackageDescription -> Bool Source #
Does this package have any libraries?
allLibraries :: PackageDescription -> [ Library ] Source #
withLib :: PackageDescription -> ( Library -> IO ()) -> IO () Source #
If the package description has a buildable library section,
call the given function with the library build info as argument.
You probably want
withLibLBI
if you have a
LocalBuildInfo
,
see the note in
Distribution.Types.ComponentRequestedSpec
for more information.
hasExes :: PackageDescription -> Bool Source #
does this package have any executables?
withExe :: PackageDescription -> ( Executable -> IO ()) -> IO () Source #
Perform the action on each buildable
Executable
in the package
description. You probably want
withExeLBI
if you have a
LocalBuildInfo
, see the note in
Distribution.Types.ComponentRequestedSpec
for more information.
hasTests :: PackageDescription -> Bool Source #
Does this package have any test suites?
withTest :: PackageDescription -> ( TestSuite -> IO ()) -> IO () Source #
Perform an action on each buildable
TestSuite
in a package.
You probably want
withTestLBI
if you have a
LocalBuildInfo
, see the note in
Distribution.Types.ComponentRequestedSpec
for more information.
hasBenchmarks :: PackageDescription -> Bool Source #
Does this package have any benchmarks?
withBenchmark :: PackageDescription -> ( Benchmark -> IO ()) -> IO () Source #
Perform an action on each buildable
Benchmark
in a package.
You probably want
withBenchLBI
if you have a
LocalBuildInfo
, see the note in
Distribution.Types.ComponentRequestedSpec
for more information.
hasForeignLibs :: PackageDescription -> Bool Source #
Does this package have any foreign libraries?
withForeignLib :: PackageDescription -> ( ForeignLib -> IO ()) -> IO () Source #
Perform the action on each buildable
ForeignLib
in the package
description.
allBuildInfo :: PackageDescription -> [ BuildInfo ] Source #
All
BuildInfo
in the
PackageDescription
:
libraries, executables, test-suites and benchmarks.
Useful for implementing package checks.
enabledBuildInfos :: PackageDescription -> ComponentRequestedSpec -> [ BuildInfo ] Source #
Return all of the
BuildInfo
s of enabled components, i.e., all of
the ones that would be built if you run
./Setup build
.
allBuildDepends :: PackageDescription -> [ Dependency ] Source #
Get the combined build-depends entries of all components.
enabledBuildDepends :: PackageDescription -> ComponentRequestedSpec -> [ Dependency ] Source #
Get the combined build-depends entries of all enabled components, per the given request spec.
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: 2.0.0.2
enabledComponents :: PackageDescription -> ComponentRequestedSpec -> [ Component ] Source #
A list of all components in the package that are enabled.
Since: 2.0.0.2