Furher work on monadic tcTypeKind
[ghc.git] / README.md
index 35f8ac3..02bf4a8 100644 (file)
--- a/README.md
+++ b/README.md
-Shaking up GHC
-==============
-
-[![Linux & OS X status](https://img.shields.io/travis/snowleopard/shaking-up-ghc/master.svg?label=Linux%20%26%20OS%20X)](https://travis-ci.org/snowleopard/shaking-up-ghc) [![Windows status](https://img.shields.io/appveyor/ci/snowleopard/shaking-up-ghc/master.svg?label=Windows)](https://ci.appveyor.com/project/snowleopard/shaking-up-ghc)
-
-This is a new build system for the [Glasgow Haskell Compiler][ghc]. It is based
-on [Shake][shake] and we hope that it will eventually replace the current
-[`make`-based build system][make]. If you are curious about the rationale and initial
-ideas behind the project you can find more details on the [wiki page][ghc-shake-wiki]
-and in this [blog post][blog-post-1].
-
-The new build system can work side-by-side with the existing build system. Note, there is
-some interaction between them: they put (some) build results in the same directories,
-e.g. `inplace/bin/ghc-stage1`. 
-
-[Join us on #shaking-up-ghc on Freenode](irc://chat.freenode.net/#shaking-up-ghc).
-
-Your first build
-----------------
-
-Beware, the build system is in the alpha development phase. Things are shaky and often
-break; there are numerous [known issues][issues]. Not afraid? Then put on the helmet and
-follow these steps:
-
-* If you have never built GHC before, start with the [preparation guide][ghc-preparation].
-
-* This build system is written in Haskell (obviously) and depends on the following Haskell
-packages, which need to be installed: `ansi-terminal`, `mtl`, `shake`, `QuickCheck`.
-
-* Get the sources and run standard configuration scripts. It is important for the build
-system to be in the `shake-build` directory of the GHC source tree:
-
-    ```bash
-    git clone --recursive git://git.haskell.org/ghc.git
-    cd ghc
-    git clone git://github.com/snowleopard/shaking-up-ghc shake-build
-    ./boot
-    ./configure # On Windows run ./configure --enable-tarballs-autodownload
-    ```
-    
-* Build GHC using `shake-build/build.sh` or `shake-build/build.bat` (on Windows) instead
-of `make`. You might want to enable parallelism with `-j`. We will further refer to the
-build script simply as `build`. If you are interested in building in a Cabal sandbox
-or using Stack, have a look at `build.cabal.sh` and `build.stack.sh` scripts.
-
-Using the build system
-----------------------
-Once your first build is successful, simply run `build` to rebuild. Most build artefacts
-are placed into `.build` and `inplace` directories ([#113][build-artefacts-issue]).
-
-#### Command line flags
-
-In addition to standard Shake flags (try `--help`), the build system
-currently supports several others:
-* `--configure[=ARGS]`: run the `configure` script forwarding `ARGS` as command line
-arguments; also run the `boot` script to create the `configure` script if necessary.
-You do not have to use this functionality of the new build system; feel free to run
-`boot` and `configure` scripts manually, as you do when using `make`. Note: on Windows 
-we automatically add flag `--enable-tarballs-autodownload` to `ARGS`, so you 
-don't have to do it manually. Beware, this uses network I/O which may sometimes be
-undesirable.
-* `--flavour=FLAVOUR`: choose a build flavour. Two settings are currently supported:
-`default` and `quick` (adds `-O0` flag to all GHC invocations speeding up builds by 3x).
-* `--haddock`: build Haddock documentation.
-* `--progress-info=STYLE`: choose how build progress info is printed. There are four
-settings: `none`, `brief` (one line per build command), `normal` (typically a box per
-build command; this is the default setting), and `unicorn` (when `normal` just won't do).
-* `--split-objects`: generate split objects, which are switched off by default. Due to
-a GHC [bug][ghc-split-objs-bug], you need a full clean rebuild when using this flag.
-
-#### User settings
-
-The `make`-based build system uses `mk/build.mk` to specify user build settings. We
-use [`src/Settings/User.hs`][user-settings] for the same purpose. Feel free to
-experiment following the Haddock comments.
-
-#### Clean and full rebuild
-
-* `build clean` removes all build artefacts. Note, we are working towards a
-complete separation of GHC sources and build artefacts: [#113][build-artefacts-issue].
-
-* `build -B` forces Shake to rerun all rules, even if results of the previous build
-are still in the GHC tree. 
-
-#### Testing
-
-* `build validate` runs GHC tests by simply executing `make fast` in `testsuite/tests`
-directory. This can be used instead of `sh validate --fast --no-clean` in the existing
-build system. Note: this will rebuild Stage2 GHC, `ghc-pkg` and `hpc` if they are out of date.
-
-* `build test` runs GHC tests by calling the `testsuite/driver/runtests.py` python
-script with appropriate flags. The current implementation is limited and cannot
-replace the `validate` script (see [#187][validation-issue]).
-
-* `build selftest` runs tests of the build system. Current test coverage is close to
-zero (see [#197][test-issue]).
-
-Current limitations
--------------------
-The new build system still lacks many important features:
-* We only build `vanilla` way: [#4][dynamic-issue], [#186][profiling-issue].
-* Validation is not implemented: [#187][validation-issue].
-* Only HTML Haddock documentation is supported (use `--haddock` flag). 
-* Build flavours and conventional command line flags are not implemented: [#188][flavours-issue].
-* Cross-compilation is not implemented: [#177][cross-compilation-issue].
-
-Check out [milestones] to see when we hope to resolve the above limitations.
-
-How to contribute
------------------
-
-The best way to contribute is to try the new build system, report the issues
-you found, and attempt to fix them. Please note the codebase is very unstable
-at present and we expect a lot of further refactoring. The documentation is
-currently non-existent, but we are working on it: [#55][comments-issue],
-[#56][doc-issue].
-
-Acknowledgements
-----------------
-
-I started this project as part of my 6-month research visit to Microsoft
-Research Cambridge, which was funded by Newcastle University, EPSRC, and
-Microsoft Research. I would like to thank Simon Peyton Jones, Neil Mitchell
-and Simon Marlow for kick-starting the project and for their guidance. Last
-but not least, big thanks to the project [contributors][contributors], who
-helped me endure and enjoy the project.
-
-[ghc]: https://en.wikipedia.org/wiki/Glasgow_Haskell_Compiler
-[shake]: https://github.com/ndmitchell/shake/blob/master/README.md
-[make]: https://ghc.haskell.org/trac/ghc/wiki/Building/Architecture
-[ghc-shake-wiki]: https://ghc.haskell.org/trac/ghc/wiki/Building/Shake
-[blog-post-1]: https://blogs.ncl.ac.uk/andreymokhov/shaking-up-ghc
-[issues]: https://github.com/snowleopard/shaking-up-ghc/issues
-[ghc-preparation]: https://ghc.haskell.org/trac/ghc/wiki/Building/Preparation
-[ghc-windows-quick-build]: https://ghc.haskell.org/trac/ghc/wiki/Building/Preparation/Windows#AQuickBuild
-[build-artefacts-issue]: https://github.com/snowleopard/shaking-up-ghc/issues/113
-[ghc-split-objs-bug]: https://ghc.haskell.org/trac/ghc/ticket/11315
-[user-settings]: https://github.com/snowleopard/shaking-up-ghc/blob/master/src/Settings/User.hs
-[test-issue]: https://github.com/snowleopard/shaking-up-ghc/issues/197
-[dynamic-issue]: https://github.com/snowleopard/shaking-up-ghc/issues/4
-[profiling-issue]: https://github.com/snowleopard/shaking-up-ghc/issues/186
-[validation-issue]: https://github.com/snowleopard/shaking-up-ghc/issues/187
-[flavours-issue]: https://github.com/snowleopard/shaking-up-ghc/issues/188
-[cross-compilation-issue]: https://github.com/snowleopard/shaking-up-ghc/issues/177
-[milestones]: https://github.com/snowleopard/shaking-up-ghc/milestones
-[comments-issue]: https://github.com/snowleopard/shaking-up-ghc/issues/55
-[doc-issue]: https://github.com/snowleopard/shaking-up-ghc/issues/56
-[contributors]: https://github.com/snowleopard/shaking-up-ghc/graphs/contributors
+The Glasgow Haskell Compiler
+============================
+
+[![Build Status](https://api.travis-ci.org/ghc/ghc.svg?branch=master)](http://travis-ci.org/ghc/ghc)
+
+This is the source tree for [GHC][1], a compiler and interactive
+environment for the Haskell functional programming language.
+
+For more information, visit [GHC's web site][1].
+
+Information for developers of GHC can be found on the [GHC Trac][2].
+
+
+Getting the Source
+==================
+
+There are two ways to get a source tree:
+
+ 1. *Download source tarballs*
+
+  Download the GHC source distribution:
+
+        ghc-<version>-src.tar.bz2
+
+  which contains GHC itself and the "boot" libraries.
+
+ 2. *Check out the source code from git*
+
+        $ git clone --recursive git://git.haskell.org/ghc.git
+
+  Note: cloning GHC from Github requires a special setup. See [Getting a GHC
+  repository from Github][7].
+
+  *See the GHC team's working conventions regarding [how to contribute a patch to GHC](http://ghc.haskell.org/trac/ghc/wiki/WorkingConventions/FixingBugs).* First time contributors are encouraged to get started by just sending a Pull Request.
+
+
+Building & Installing
+=====================
+
+For full information on building GHC, see the [GHC Building Guide][3].
+Here follows a summary - if you get into trouble, the Building Guide
+has all the answers.
+
+Before building GHC you may need to install some other tools and
+libraries.  See, [Setting up your system for building GHC][8].
+
+*NB.* In particular, you need [GHC][1] installed in order to build GHC,
+because the compiler is itself written in Haskell.  You also need
+[Happy][4], [Alex][5], and [Cabal][9].  For instructions on how
+to port GHC to a new platform, see the [GHC Building Guide][3].
+
+For building library documentation, you'll need [Haddock][6].  To build
+the compiler documentation, you need [Sphinx](http://www.sphinx-doc.org/)
+and Xelatex (only for PDF output).
+
+**Quick start**: the following gives you a default build:
+
+    $ ./boot
+    $ ./configure
+    $ make         # can also say 'make -jX' for X number of jobs
+    $ make install
+
+  On Windows, you need an extra repository containing some build tools.
+  These can be downloaded for you by configure. This only needs to be done once by running:
+
+    $ ./configure --enable-tarballs-autodownload
+
+(NB: **Do you have multiple cores? Be sure to tell that to `make`!** This can
+save you hours of build time depending on your system configuration, and is
+almost always a win regardless of how many cores you have. As a simple rule,
+you should have about N+1 jobs, where `N` is the amount of cores you have.)
+
+The `./boot` step is only necessary if this is a tree checked out
+from git.  For source distributions downloaded from [GHC's web site][1],
+this step has already been performed.
+
+These steps give you the default build, which includes everything
+optimised and built in various ways (eg. profiling libs are built).
+It can take a long time.  To customise the build, see the file `HACKING.md`.
+
+Filing bugs and feature requests
+================================
+
+If you've encountered what you believe is a bug in GHC, or you'd like
+to propose a feature request, please let us know! Submit a ticket in
+our [bug tracker][10] and we'll be sure to look into it. Remember:
+**Filing a bug is the best way to make sure your issue isn't lost over
+time**, so please feel free.
+
+If you're an active user of GHC, you may also be interested in joining
+the [glasgow-haskell-users][11] mailing list, where developers and
+GHC users discuss various topics and hang out.
+
+Hacking & Developing GHC
+========================
+
+Once you've filed a bug, maybe you'd like to fix it yourself? That
+would be great, and we'd surely love your company! If you're looking
+to hack on GHC, check out the guidelines in the `HACKING.md` file in
+this directory - they'll get you up to speed quickly.
+
+Contributors & Acknowledgements
+===============================
+
+GHC in its current form wouldn't exist without the hard work of
+[its many contributors][12]. Over time, it has grown to include the
+efforts and research of many institutions, highly talented people, and
+groups from around the world. We'd like to thank them all, and invite
+you to join!
+
+  [1]:  http://www.haskell.org/ghc/            "www.haskell.org/ghc/"
+  [2]:  http://ghc.haskell.org/trac/ghc    "ghc.haskell.org/trac/ghc"
+  [3]:  http://ghc.haskell.org/trac/ghc/wiki/Building
+          "ghc.haskell.org/trac/ghc/wiki/Building"
+  [4]:  http://www.haskell.org/happy/          "www.haskell.org/happy/"
+  [5]:  http://www.haskell.org/alex/           "www.haskell.org/alex/"
+  [6]:  http://www.haskell.org/haddock/        "www.haskell.org/haddock/"
+  [7]: https://ghc.haskell.org/trac/ghc/wiki/Building/GettingTheSources#GettingaGHCrepositoryfromGitHub
+          "https://ghc.haskell.org/trac/ghc/wiki/Building/GettingTheSources#GettingaGHCrepositoryfromGitHub"
+  [8]:  http://ghc.haskell.org/trac/ghc/wiki/Building/Preparation
+          "http://ghc.haskell.org/trac/ghc/wiki/Building/Preparation"
+  [9]:  http://www.haskell.org/cabal/          "http://www.haskell.org/cabal/"
+  [10]: http://ghc.haskell.org/trac/ghc/
+          "http://ghc.haskell.org/trac/ghc/"
+  [11]: http://www.haskell.org/pipermail/glasgow-haskell-users/
+          "http://www.haskell.org/pipermail/glasgow-haskell-users/"
+  [12]: http://ghc.haskell.org/trac/ghc/wiki/TeamGHC
+          "http://ghc.haskell.org/trac/ghc/wiki/TeamGHC"