So you want to build git-annex from source. This is encouraged for
users with experience building code from source. But the build may
require some care and feeding. This page will start with the easy
methods and work up to the harder ones.

## prerequisites

Start by installing the 
[Haskell Platform](http://hackage.haskell.org/platform/).

In Debian, this is as simple as:

	sudo apt-get install haskell-platform

## downloading the source code

The easiest way is using git; see [[download]] or just:

	git clone git://git-annex.branchable.com/ git-annex

Or, you can use cabal to get the source code:

	cabal update; cabal unpack git-annex

## building from source on Debian

This is the method used by git-annex's author, and so it's the one most
likely to work without problems.

First, install everything git-annex needs to build:

	sudo apt-get build-dep git-annex

Now you can build git-annex by running either `make` or `cabal build`
inside the source tree.

## building from source with stack

Using stack automates nearly everything, will work on many systems,
and avoids build failures due to fast-changing haskell libraries.

First, [install stack](https://github.com/commercialhaskell/stack/blob/master/doc/install_and_upgrade.md)
It will be part of the Haskell Platform soon. On Debian unstable/testing:

	sudo apt-get install haskell-stack zlib1g-dev

Use stack to install all dependencies and git-annex:

	stack setup
	stack install git-annex

Move git-annex into some directory that is in your PATH:

	mv ~/.local/bin/git-annex ~/bin # or /usr/local/bin/ or whatever

Note that this build produces a git-annex without the build flags
XMPP, DBUS, and MagicMime.
These optional features require installing additional C libraries.
To try to build with these features 
enabled, pass extra parameters when running stack: 
`--flag git-annex:XMPP --flag git-annex:DBUS --flag git-annex:MagicMime`

## minimal build from source with cabal

This can be done anywhere, and builds git-annex without some optional
features that require harder-to-install C libraries. This is plenty to let
you get started with git-annex, but it does not include the assistant or
webapp.

Be warned that this involves building a lot of Haskell libraries from
source, and so it has a lot of moving parts, and it's not uncommon for it
to be broken from time to time.

Inside the source tree, run:

	cabal install -j -f"-assistant -webapp -webdav -pairing -xmpp -dns -dbus -magicmime" --only-dependencies
	cabal configure -f"-assistant -webapp -webdav -pairing -xmpp -dns -dbus -magicmime"
	cabal build -j
	PATH=$HOME/bin:$PATH
	cabal install --bindir=$HOME/bin

## full build from source with cabal

To build with all features enabled, including the assistant and webapp,
you will need to install several C libraries and their headers,
including libgnutls, libgsasl, libxml2, libmagic, and zlib. How to do
that for your OS is beyond the scope of this page. 

Once the C libraries are installed, run inside the source tree:

	cabal install -j --only-dependencies
	cabal configure
	cabal build -j
	PATH=$HOME/bin:$PATH
	cabal install --bindir=$HOME/bin

## EKG

When building with cabal, you can optionally enable the 
[[EKG monitoring interface|ekg]]. This is great for debugging resource
usage problems, but not for general-purpose builds.
Just pass `-f+EKG` to `cabal configure`
