Getting the GHC Sources

There are two ways to get sources to GHC: download a source distribution, or get the sources directly from our repository using ​darcs.

Source distributions

A source distribution is a file like ghc-6.6-src.tar.bz2, which contains a complete snapshot of the source tree for a particular version of GHC. Source distributions for all versions of GHC are available from the download page.

ghc-<version>-src-extralibs.tar.bz2 contains a selection of supplemental libraries that can be built
and installed at the same time as GHC. Just unpack this on top of ghc-<version>-src.tar.bz2, and
the extra libraries will be built automatically.

In addition to fixed releases of GHC, source distributions are also made each night from the current source repository, for both the HEAD and STABLE branches. To download these snapshots, head over to the download page.

Source distributions are easier to build, because we also include the output from running certain external tools like ​Happy, so you don't need to install these tools. See Building/Prerequisites for details.

Getting a GHC source tree using darcs

A source tree consists of the GHC repository,
with a set of library packages in the libraries directory. Each of these
libraries has its own repository: see DarcsRepositories.

If you plan to modify GHC, then you must get repositories with full history rather than just partial repositories. (Why? Because darcs has some bugs that sometimes cause problems when using partial repositories for anything more than just pulling the latest patches.)
However, you cannot use darcs get to get a full GHC repository, for two reasons:

GHC has more than 16,000 patches and the darcs get will take forever.

Darcs has a bug concerning case-sensitivity on Windows, and (​apparently) MacOS X, which makes Darcs crash on Windows if you do darcs get on the full GHC repository. You get this message

Download a complete bundle of the required repositories first, using your browser rather than darcs. These bundles are on ​http://darcs.haskell.org/ in files of the form ghc-HEAD-date-ghc-corelibs-testsuite.tar.bz2, e.g. ghc-HEAD-2007-08-29-ghc-corelibs-testsuite.tar.bz2.

Unpack the bundle, which will create a directory called ghc. You can rename this directory freely.

Change into the new directory, and pull patches from the main GHC repository:

$ cd ghc
$ darcs pull -a

We've had ​reports of Darcs crashing on Mac OS X in this step. If this happens, see the section on troubleshooting.

Now use the darcs-all script to pull patches from all the library repositories, and the testsuite repository:

$ chmod +x darcs-all
$ ./darcs-all pull -a

The command darcs-all automates the fetching of the repositories for the libraries.

If you omit step (3), then darcs-all will pull patches into the GHC repository too. If one of those patches modifies the darcs-all script itself, then bizarre things can happen (or at least: in the past, they could happen.) The safe thing to do is to get your main ghc repo up to date (step 3) and then run the script.

If you only want to download the latest sources and aren't interested in working on GHC, then you can get partial repositories:

Getting more packages

The above will grab the "core" set of packages and the testsuite. This is the minimal set of packages required to bootstrap GHC. If you want to get a more comprehensive set of packages and include them in your GHC build, then you can say:

$ ./darcs-all --extra get

This isn't usually necessary: extra packages can be compiled and installed separately using Cabal, after you have built and installed GHC itself with its core packages. The "core" and "extra" packages are listed in DarcsRepositories.

Optionally, you might want to grab the testsuite (if you have not already got it) and nofib benchmark suite too, which also become sub-directories of ghc:

If this happens, try increasing the number of open files allowed by typing in $ ulimit -n unlimited and try pulling again. If this fails, close all terminal windows, restart Terminal.app, and try again.

If this still doesn't work, try pulling 100 patches at a time using the darcs pull command (notice the lack of the -a flag). Hold down 'y' until 100 or so patches are accepted, then hit 'd' to skip the rest; repeat until all patches are applied. If this fails, try with less than 100 patches at a time (e.g., 50).

This issue has been reported as ​issue 560 in the darcs bug tracking system.