Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
This module defines a simple JSON-based format for exporting basic
information about a Cabal package and the compiler configuration Cabal
would use to build it. This can be produced with the
cabal build --enable-build-info
command.
This format is intended for consumption by external tooling and should therefore be rather stable. Moreover, this allows tooling users to avoid linking against Cabal. This is an important advantage as direct API usage tends to be rather fragile in the presence of user-initiated upgrades of Cabal.
Below is an example of the output this module produces,
{ "cabal-lib-version": "1.23.0.0", "compiler": { "flavour": GHC, "compiler-id": "ghc-7.10.2", "path": "usrbin/ghc", }, "components": [ { "type": "lib", "name": "lib:Cabal", "compiler-args": ["-O", "-XHaskell98", "-Wall", "-package-id", "parallel-3.2.0.6-b79c38c5c25fff77f3ea7271851879eb"] "modules": [Project.ModA, Project.ModB, Paths_project], "src-files": [], "src-dirs": ["src"] } ] }
The output format needs to be validated against 'docjson-schemasbuild-info.schema.json'. If the format changes, update the schema as well!
The cabal-lib-version
property provides the version of the Cabal library
which generated the output. The compiler
property gives some basic
information about the compiler Cabal would use to compile the package.
The components
property gives a list of the Cabal Component
s defined by
the package. Each has,
type
: the type of the component (one oflib
,exe
,test
,bench
, orflib
)name
: a string serving to uniquely identify the component within the package.compiler-args
: the command-line arguments Cabal would pass to the compiler to compile the componentmodules
: the modules belonging to the componentsrc-dirs
: a list of directories where the modules might be foundsrc-files
: any other Haskell sources needed by the component
Note: At the moment this is only supported when using the GHC compiler.
Synopsis
- mkBuildInfo :: FilePath -> PackageDescription -> LocalBuildInfo -> BuildFlags -> (ConfiguredProgram, Compiler) -> [TargetInfo] -> ([String], Json)
- mkBuildInfo' :: Json -> [Json] -> [(String, Json)]
- mkCompilerInfo :: ConfiguredProgram -> Compiler -> Json
- mkComponentInfo :: FilePath -> PackageDescription -> LocalBuildInfo -> ComponentLocalBuildInfo -> ([String], Json)
Documentation
:: FilePath | The source directory of the package |
-> PackageDescription | Mostly information from the .cabal file |
-> LocalBuildInfo | Configuration information |
-> BuildFlags | Flags that the user passed to build |
-> (ConfiguredProgram, Compiler) | Compiler information. Needs to be passed explicitly, as we can't extract that information here without some partial function. |
-> [TargetInfo] | |
-> ([String], Json) | Json representation of buildinfo alongside generated warnings |
Construct a JSON document describing the build information for a package.
:: Json | The |
-> [Json] | The |
-> [(String, Json)] |
A variant of mkBuildInfo
if you need to call mkCompilerInfo
and
mkComponentInfo
yourself.
If you change the format or any name in the output json, don't forget to update
the schema at /doc/json-schemas/build-info.schema.json
and the docs of
--enable-build-info
/--disable-build-info
.
mkCompilerInfo :: ConfiguredProgram -> Compiler -> Json Source #
mkComponentInfo :: FilePath -> PackageDescription -> LocalBuildInfo -> ComponentLocalBuildInfo -> ([String], Json) Source #