name: cabal-bounds
version: 0.5
cabal-version: >=1.9.2
build-type: Simple
license: BSD3
license-file: LICENSE
maintainer: daniel.trstenjak@gmail.com
synopsis: A command line program for managing the bounds/versions of the dependencies in a cabal file.
description:
'cabal-bounds' is able to do two things:
.
* drop the bounds of the dependencies in the cabal file
.
* update the bounds of the dependencies in the cabal file using the cabal build information
.
.
.
/Example: Raise the upper Bounds/
.
.
If you have several cabalized projects, then it can be quite time consuming to keep the
bounds of your dependencies up to date. Especially if you're following the package versioning
policy, then you want to raise your upper bounds from time to time, to allow the building with
newer versions of the dependencies.
.
'cabal-bounds' tries to automate this update process to some degree. So a typical update process might look like:
.
> # update the version infos of all libraries
> $> cabal update
>
> # drops the upper bound of all dependencies in 'myproject.cabal',
> # most likely you want to ignore 'base'
> $> cabal-bounds drop --upper --ignore=base myproject.cabal
>
> # create a cabal sandbox for building of 'myproject'
> $> cabal sandbox init
>
> # build 'myproject'
> $> cabal install
>
> # update the upper bound of all dependencies in 'myproject.cabal'
> # by the cabal build information
> $> cabal-bounds update --upper --ignore=base myproject.cabal dist/dist-sandbox-*/setup-config
.
.
.
/Example: Bound Changes/
.
.
The '=>' shows what the result is of the operation for every dependency. Left is the dependency before
calling the command, right the one after calling.
.
> $> cabal-bounds drop ...
> lens >=4.0.1 && <4.1 => lens
>
> $> cabal-bounds drop --upper ...
> lens >=4.0.1 && <4.1 => lens >=4.0.1
.
If the cabal build (the setup-config) uses 'lens 4.1.2', then the results of the 'update' command would be:
.
> $> cabal-bounds update ...
> lens >=4.0.1 && <4.1 => lens >=4.1.2 && <4.2
> lens => lens >=4.1.2 && <4.2
>
> $> cabal-bounds update --lower ...
> lens >=4.0.1 && <5 => lens >=4.1.2 && <5
> lens >=4.0.1 && <4.1 => lens >=4.1.2
> lens <4.1 => lens >=4.1.2
> lens => lens >=4.1.2
>
> $> cabal-bounds update --upper ...
> lens >=4.0.1 && <4.1 => lens >=4.0.1 && <4.2
> lens >=4.0.1 => lens >=4.0.1 && <4.2
> lens => lens <4.2
.
You can also specify which component of the version number should be updated:
.
> $> cabal-bounds update --lowercomp=minor ...
> lens >=4.0.1 && <4.1 => lens >=4.1.2
>
> $> cabal-bounds update --lowercomp=major2 ...
> lens >=4.0.1 && <4.1 => lens >=4.1
>
> $> cabal-bounds update --lowercomp=major1 ...
> lens >=4.0.1 && <4.1 => lens >=4 && <4.1
>
> $> cabal-bounds update --uppercomp=minor ...
> lens >=4.0.1 && <4.1 => lens >=4.0.1 && <4.1.3
>
> $> cabal-bounds update --uppercomp=major2 ...
> lens >=4.0.1 && <4.1 => lens >=4.0.1 && <4.2
>
> $> cabal-bounds update --uppercomp=major1 ...
> lens >=4.0.1 && <4.1 => lens >=4.0.1 && <5
.
.
.
/Installation/
.
.
You have to ensure, that the 'Cabal' library of 'cabal-bounds' matches the one used by the 'cabal' binary:
.
> $> cabal --version
> cabal-install version 1.18.0.2
> using version 1.18.1 of the Cabal library
>
> $> cabal install --constraint="Cabal == 1.18.1" cabal-bounds
.
If you update the 'cabal' binary and the used 'Cabal' library changes, then you have to rebuild 'cabal-bounds'.
.
.
.
/Options/
.
.
You can restrict the modification to certain sections in the cabal file by specifing the type and the name of the section:
.
* --library
.
* --executable=name
.
* --testsuite=name
.
* --benchmark=name
.
If you omit these options, then all sections are considered and modified.
.
.
You can also restrict the modification of dependencies by specifing which dependencies should only or shouldn't be modified:
.
* --only=name
.
* --ignore=name
.
If you omit these options, then all dependencies are considered and modified.
.
.
All options taking a name can be specified multiple times:
.
e.g. '--executable=exe1 --executable=exe2' or '--ignore=base --ignore=whatever'
.
Please consult 'cabal-bounds --help' for a complete list of options.
.
.
.
/Issues/
.
.
Perhaps the currently most annoying thing is, that you have to live with the reformating of your
'cabal' file done by the pretty printer of the 'Cabal' library.
.
To reformat your 'cabal' file without changing any bounds you can call 'cabal-bounds' with the name of
a section that isn't present in the 'cabal' file:
.
> $> cabal-bounds drop --executable=blub myproject.cabal
category: Utils
author: Daniel Trstenjak
extra-source-files:
README.md
tests/inputFiles/original.cabal
tests/inputFiles/setup-config
tests/inputFiles/setup-config-build-env/setup-config.cabal
tests/inputFiles/setup-config-build-env/src/*.hs
tests/inputFiles/setup-config-build-env/src/CabalBounds/*.hs
tests/goldenFiles/*.cabal
tests/outputFiles/.gitignore
source-repository head
type: git
location: https://github.com/dan-t/cabal-bounds
library
build-depends:
base >=3 && <5,
cmdargs >=0.10.5 && <0.11,
lens >=4.0.1 && <4.2,
strict >=0.3.2 && <0.4,
unordered-containers >=0.2.3.3 && <0.3,
transformers >=0.3.0.0 && <0.4,
either >=4.1.1 && <4.2,
cabal-lenses >=0.1 && <0.2,
Cabal >=1.18.0 && <1.21
exposed-modules:
CabalBounds.Args
CabalBounds.Main
CabalBounds.VersionComp
exposed: True
buildable: True
cpp-options: -DCABAL
hs-source-dirs: lib
other-modules:
Paths_cabal_bounds
CabalBounds.Bound
CabalBounds.Sections
CabalBounds.Dependencies
CabalBounds.Drop
CabalBounds.Update
ghc-options: -W
executable cabal-bounds
build-depends:
base >=3 && <5,
cabal-bounds -any
main-is: Main.hs
buildable: True
hs-source-dirs: exe
ghc-options: -W
test-suite cabal-bounds-tests
build-depends:
base >=3 && <5,
tasty >=0.7 && <0.9,
tasty-golden >=2.2.0.2 && <2.3,
filepath >=1.3.0.1 && <1.4,
cabal-bounds -any
type: exitcode-stdio-1.0
main-is: Main.hs
buildable: True
hs-source-dirs: tests
ghc-options: -W