| 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.
- data PackageDescription = PackageDescription {
- package :: PackageIdentifier
 - license :: License
 - licenseFiles :: [FilePath]
 - copyright :: String
 - maintainer :: String
 - author :: String
 - stability :: String
 - testedWith :: [(CompilerFlavor, VersionRange)]
 - homepage :: String
 - pkgUrl :: String
 - bugReports :: String
 - sourceRepos :: [SourceRepo]
 - synopsis :: String
 - description :: String
 - category :: String
 - customFieldsPD :: [(String, String)]
 - buildDepends :: [Dependency]
 - specVersionRaw :: Either Version VersionRange
 - buildType :: 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
 - descCabalVersion :: PackageDescription -> VersionRange
 - 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]
 - 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 #
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 
  | |
specVersion :: PackageDescription -> Version #
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.
descCabalVersion :: PackageDescription -> VersionRange #
Deprecated: Use specVersion instead
The range of versions of the Cabal tools that this package is intended to work with.
This function is deprecated and should not be used for new purposes, only to support old packages that rely on the old interpretation.
hasPublicLib :: PackageDescription -> Bool #
Does this package have a buildable PUBLIC library?
hasLibs :: PackageDescription -> Bool #
Does this package have any libraries?
allLibraries :: PackageDescription -> [Library] #
withLib :: PackageDescription -> (Library -> IO ()) -> IO () #
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 #
does this package have any executables?
withExe :: PackageDescription -> (Executable -> IO ()) -> IO () #
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 #
Does this package have any test suites?
withTest :: PackageDescription -> (TestSuite -> IO ()) -> IO () #
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 #
Does this package have any benchmarks?
withBenchmark :: PackageDescription -> (Benchmark -> IO ()) -> IO () #
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 #
Does this package have any foreign libraries?
withForeignLib :: PackageDescription -> (ForeignLib -> IO ()) -> IO () #
Perform the action on each buildable ForeignLib in the package
 description.
allBuildInfo :: PackageDescription -> [BuildInfo] #
The BuildInfo for the library (if there is one and it's buildable), and
 all buildable executables, test suites and benchmarks.  Useful for gathering
 dependencies.
enabledBuildInfos :: PackageDescription -> ComponentRequestedSpec -> [BuildInfo] #
Return all of the BuildInfos of enabled components, i.e., all of
 the ones that would be built if you run ./Setup build.
pkgComponents :: PackageDescription -> [Component] #
All the components in the package.
pkgBuildableComponents :: PackageDescription -> [Component] #
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] #
A list of all components in the package that are enabled.
Since: 2.0.0.2