See the Cabal web site for more information.
The cabal-install
package provides a command line tool named cabal
.
It uses the Cabal
library and provides a convenient user interface to
the Cabal/Hackage build automation and package management system. It
can build and install both local and remote packages, including
dependencies.
The cabal-install
package requires a number of other packages, most of
which come with a standard GHC installation. It requires the network
package, which is sometimes packaged separately by Linux distributions;
for example, on Debian or Ubuntu, it is located in the
"libghc6-network-dev" package.
cabal
requires a few other Haskell packages that are not always
installed. The exact list is specified in the .cabal file or in the
boostrap.sh file. All these packages are available from Hackage.
Note that on some Unix systems you may need to install an additional zlib development package using your system package manager; for example, on Debian or Ubuntu, it is located in the "zlib1g-dev" package; on Fedora, it is located in the "zlib-devel" package. It is required because the Haskell zlib package uses the system zlib C library and header files.
The cabal-install
package is now part of the Haskell Platform, so you
do not usually need to install it separately. However, if you are
starting from a minimal GHC installation then you need to install
cabal-install
manually. Since it is an ordinary Cabal package, it can
be built in the standard way; to facilitate this, the process is
partially automated. It is described below.
As a convenience for users on Unix-like systems, there is a [./bootstrap.sh] script that will download and install each of the dependencies in turn.
$ ./bootstrap.sh
It will download and install the dependencies. The script will install
the library packages into $HOME/.cabal/
and the cabal
program into
$HOME/.cabal/bin/
.
You then have the choice either to
- place
$HOME/.cabal/bin
on your$PATH
or - move the
cabal
program somewhere that is on your$PATH
.
Next, you can get the latest list of packages by running:
$ cabal update
This will also create a default configuration file (if it does not
already exist) at $HOME/.cabal/config
By default, cabal
will install programs to $HOME/.cabal/bin
. If you
do not want to add this directory to your $PATH
, you can change
the setting in the config file; for example, you could use the
following:
symlink-bindir: $HOME/bin
For Windows users, a precompiled program, cabal.exe, is provided.
Download and put it somewhere on your %PATH%
, for example:
C:\Program Files\Haskell\bin
Next, you can get the latest list of packages by running:
$ cabal update
This will also create a default configuration file (if it does not
already exist) at
C:\Documents and Settings\username\Application Data\cabal\config
.
There are two sets of commands: commands for working with a local project build tree and ones for working with packages distributed from Hackage.
For a list of the full set of commands and the flags for each command, run:
$ cabal help
The commands for local project build trees are almost exactly the same
as the runghc Setup
command-line interface that you may already be
familiar with. In particular, there are the following commands:
cabal configure
cabal build
cabal haddock
cabal clean
cabal sdist
The install
command is somewhat different; it is an all-in-one
operation. If you run
$ cabal install
in your build tree, it will configure, build, and install. It takes all
the flags that configure
takes such as --global
and --prefix
.
In addition, cabal
will download and install any dependencies that are
not already installed. It can also rebuild packages to ensure a
consistent set of dependencies.
$ cabal update
This command gets the latest list of packages from the Hackage server. On occasion, this command must be run manually, for instance, if you want to install a newly released package.
$ cabal install xmonad
This is the eponymous command. It installs one or more named packages, and all their dependencies, from Hackage.
By default, it installs the latest available version; however, you may
specify exact versions or version ranges. For example,
cabal install alex-2.2
or cabal install parsec < 3
.
$ cabal list xml
This does a search of the installed and available packages. It does a case-insensitive substring match on the package name.