site: contributing: rewrite building how-to
This commit is contained in:
parent
4b6159ddf2
commit
72993a3f59
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
New contributors are always welcome. Jump in! Or [ask us](/docs.html#getting-help) to help you find a task.
|
New contributors are always welcome. Jump in! Or [ask us](/docs.html#getting-help) to help you find a task.
|
||||||
|
|
||||||
|
|
||||||
## Get started as a...
|
## Get started as a...
|
||||||
|
|
||||||
### Funder
|
### Funder
|
||||||
@ -28,6 +29,7 @@ build your prosperity consciousness!
|
|||||||
|
|
||||||
- Test installation on platforms you have access to
|
- Test installation on platforms you have access to
|
||||||
- Run the latest release or developer build
|
- Run the latest release or developer build
|
||||||
|
- Test examples and advice in the docs
|
||||||
- Report packaging, documentation, UX, functional bugs
|
- Report packaging, documentation, UX, functional bugs
|
||||||
- Report and help analyse problems via irc/mail list/bug tracker
|
- Report and help analyse problems via irc/mail list/bug tracker
|
||||||
|
|
||||||
@ -302,124 +304,84 @@ $ make haddocktest
|
|||||||
|
|
||||||
#### Do code review
|
#### Do code review
|
||||||
|
|
||||||
- review and discuss new pull requests and commits on github
|
- review and discuss new [pull requests](http://prs.hledger.org) and commits on github
|
||||||
- set up for development and test the latest changes in your own repo
|
- set up for development and test the latest changes in your own repo
|
||||||
- read the existing [code docs and source](#quick-links)
|
- read the existing [code docs and source](#quick-links)
|
||||||
- send feedback or discuss via irc or list
|
- send feedback or discuss via irc or list
|
||||||
|
|
||||||
#### Install stack and git
|
#### Build hledger
|
||||||
|
|
||||||
[stack](https://github.com/commercialhaskell/stack/wiki/Downloads) is
|
|
||||||
the recommended tool for building hledger from source.
|
|
||||||
It builds haskell projects, installing required haskell libraries as needed.
|
|
||||||
It can also install GHC (the compiler) and (on windows) git, if needed.
|
|
||||||
|
|
||||||
You don't need to use stack, if you are already expert with the older
|
|
||||||
cabal tool, or even just GHC, but I won't attempt to document those
|
|
||||||
procedures; these docs assume you have downloaded and installed stack.
|
|
||||||
|
|
||||||
On Windows, you should choose the 64-bit stack download if you will be
|
|
||||||
processing >50,000 transactions at a time with hledger
|
|
||||||
([#275](https://github.com/simonmichael/hledger/issues/275)).
|
|
||||||
|
|
||||||
[git](http://git-scm.com) is the revision control tool you'll need to
|
|
||||||
fetch the latest hledger source and submit changes. On windows, stack
|
|
||||||
can install it for you. These docs assume you have installed git and
|
|
||||||
know a little about how to use it.
|
|
||||||
|
|
||||||
#### Install other optional tools
|
|
||||||
|
|
||||||
Up-to-date `alex`, `happy`, and `haddock` tools are required, but `stack` should install those for you.
|
|
||||||
|
|
||||||
Here are some optional extra tools:
|
|
||||||
|
|
||||||
- `shelltestrunner` is useful for running functional tests.
|
|
||||||
- `hasktags` is an easy way to generate editor tag files for quick source code navigation.
|
|
||||||
- `profiteur` is for reporting stack profiles.
|
|
||||||
- `hpack` regenerates cabal files when package.yaml files have been updated.
|
|
||||||
- `hoogle` is for searching source code.
|
|
||||||
|
|
||||||
You can install them all with:
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ stack install shelltestrunner hasktags profiteur hpack hoogle
|
$ git clone http://github.com/simonmichael/hledger hledger && cd hledger && stack install # or git:
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Get the latest hledger source
|
Or in more detail:
|
||||||
|
|
||||||
|
**1. Get tools**
|
||||||
|
|
||||||
|
1. [`stack`](https://github.com/commercialhaskell/stack/wiki/Downloads)
|
||||||
|
is the recommended tool for building hledger. It will also install
|
||||||
|
haskell tools and libraries as needed. You can use cabal-install
|
||||||
|
instead of stack if you prefer, but that requires more expertise;
|
||||||
|
the hledger docs assume stack.
|
||||||
|
The [download](/download.html#b) page has more tips.
|
||||||
|
|
||||||
|
2. [`git`](http://git-scm.com) is the version control tool needed to
|
||||||
|
fetch the hledger source and submit changes. On Windows, stack will
|
||||||
|
install this as well.
|
||||||
|
|
||||||
|
3. Optional tools to consider:
|
||||||
|
|
||||||
|
- `alex`, `happy`, `haddock` and `hpack` - reasonably up-to-date
|
||||||
|
versions of these tools are required; stack ensures this automatically.
|
||||||
|
|
||||||
|
- `ghcid` is a very useful tool that gives real-time feedback as you make code changes.
|
||||||
|
|
||||||
|
- `hasktags` is an easy way to generate tag files for quick source code navigation in editors like Emacs and vi.
|
||||||
|
|
||||||
|
- `shelltestrunner` is required if you want to run hledger's functional tests.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ stack install ghcid hasktags shelltestrunner
|
||||||
|
```
|
||||||
|
|
||||||
|
**2. Get the source**
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ git clone http://github.com/simonmichael/hledger hledger # or git:
|
||||||
|
```
|
||||||
|
|
||||||
|
**3. Build/install**
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ git clone code.hledger.org hledger # aka github.com/simonmichael/hledger.git
|
|
||||||
$ cd hledger
|
$ cd hledger
|
||||||
|
$ stack install
|
||||||
```
|
```
|
||||||
|
|
||||||
<!--
|
This builds all the hledger packages, and installs executables in
|
||||||
Old instructions:
|
`$HOME/.local/bin` (or the Windows equivalent), which you should add
|
||||||
|
to your `$PATH`.
|
||||||
|
Or you can build fewer packages to save time, eg just the CLI:
|
||||||
|
`stack install hledger`.
|
||||||
|
|
||||||
1. Get [GHC](https://www.haskell.org/ghc/) and [cabal-install](http://hackage.haskell.org/package/cabal-install) installed.
|
You can also build without installing (`stack build`), and then run
|
||||||
I recommend the [stackage.org install guide](http://www.stackage.org/install).
|
executables like so: `stack exec -- hledger ...`
|
||||||
You can see which GHC versions are officially supported in the `tested-with` field in
|
|
||||||
[hledger.cabal](http://hackage.haskell.org/package/hledger/hledger.cabal),
|
|
||||||
[hledger-ui.cabal](http://hackage.haskell.org/package/hledger-ui/hledger-ui.cabal),
|
|
||||||
[hledger-web.cabal](http://hackage.haskell.org/package/hledger-web/hledger-web.cabal).
|
|
||||||
Older versions may also work.
|
|
||||||
2. Get [git](http://git-scm.com) installed.
|
|
||||||
3. Get [GNU Make](http://www.gnu.org/software/make) installed (unless you don't care about the Makefile's conveniences).
|
|
||||||
On some platforms the command will be eg `gmake` instead of `make`.
|
|
||||||
4. Get the hledger repo:
|
|
||||||
|
|
||||||
```shell
|
Note build/install will fetch most required dependencies automatically,
|
||||||
$ git clone https://github.com/simonmichael/hledger.git
|
but not C libraries such as curses or terminfo, which you might need
|
||||||
```
|
to install yourself.
|
||||||
|
In case of trouble, see [download](/download.html#b)).
|
||||||
|
|
||||||
5. You might want to install or upgrade some of these haskell developer tools.
|
Some other options useful for developer builds are `--fast` and `--file-watch`.
|
||||||
If you're not sure, skip this step and return to it as needed.
|
|
||||||
Be sure the cabal bin directory where these are installed (eg ~/.cabal/bin) is in your PATH.
|
|
||||||
|
|
||||||
```shell
|
#### Add a test
|
||||||
$ cabal update
|
|
||||||
$ cabal install alex happy # if you get alex/happy-related errors when building hledger
|
|
||||||
$ cabal install haddock # needed to build hledger API docs
|
|
||||||
$ cabal install shelltestrunner # needed to run hledger functional tests (may need latest git version)
|
|
||||||
$ cabal install hoogle hlint # maybe useful for searching API docs and checking code
|
|
||||||
```
|
|
||||||
|
|
||||||
You'll also want a comfortable code editor, preferably with Haskell support.
|
- identify what to test
|
||||||
(I use emacs + [haskell-mode](https://github.com/haskell/haskell-mode),
|
- choose the test type: unit ? functional ? benchmark ?
|
||||||
or occasionally [IntelliJ IDEA](https://www.jetbrains.com/idea/download) + one of the [plugins](https://www.google.com/search?hl=en&q=intellij+plugins+haskell)).
|
- currently expected to pass or fail ?
|
||||||
|
- figure out where it goes
|
||||||
6. Install haskell libs required by hledger:
|
- write test, verify expected result
|
||||||
|
- get it committed
|
||||||
```shell
|
|
||||||
$ cd hledger
|
|
||||||
$ cabal sandbox init # optional
|
|
||||||
$ make installdeps # or cabal install --only-dep ./hledger-lib ./hledger [./hledger-web]
|
|
||||||
```
|
|
||||||
|
|
||||||
This will install the required dependencies from Hackage.
|
|
||||||
If you're new to cabal, you can expect problems at this stage.
|
|
||||||
The usual remedy is to ensure you start with a clean package db, eg by doing `cabal sandbox init`.
|
|
||||||
You can simplify and speed up this step a lot by commenting out
|
|
||||||
hledger-web in the `PACKAGES` list in the [Makefile](https://github.com/simonmichael/hledger/blob/master/Makefile#L41).
|
|
||||||
|
|
||||||
7. Build with cabal:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
$ make cabalbuild
|
|
||||||
```
|
|
||||||
|
|
||||||
(Tip: `make cabalCMD` runs `cabal CMD` in each of the hledger packages).
|
|
||||||
|
|
||||||
8. Build with GHC:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
$ make bin/hledgerdev
|
|
||||||
```
|
|
||||||
|
|
||||||
This builds hledger (and hledger-lib) with GHC directly, without using cabal,
|
|
||||||
and as quickly as possible, without optimizations (the "dev" suffix is a reminder of this).
|
|
||||||
I use and recommend this method for development, as it crosses package boundaries and ensures you are building the latest code.
|
|
||||||
However it needs some files generated by cabal build, which is why we did that first.
|
|
||||||
-->
|
|
||||||
|
|
||||||
#### Use the Makefile
|
#### Use the Makefile
|
||||||
|
|
||||||
@ -458,68 +420,6 @@ $ make test -n
|
|||||||
&& echo functest PASSED) || echo functest FAILED
|
&& echo functest PASSED) || echo functest FAILED
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Build or install hledger
|
|
||||||
|
|
||||||
Run `make` to see a list of build rules. You probably want `build` or `install`.
|
|
||||||
|
|
||||||
`make build` runs stack build, which downloads required haskell
|
|
||||||
dependencies and builds all hledger packages.
|
|
||||||
The resulting executables will be somewhere under .stack-work, eg in
|
|
||||||
`.stack-work/install/i386-linux/lts-3.0/7.10.2/bin/`.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
$ make build
|
|
||||||
stack build
|
|
||||||
hledger-lib-0.27: configure
|
|
||||||
hledger-lib-0.27: build
|
|
||||||
hledger-lib-0.27: install
|
|
||||||
hledger-0.27: configure
|
|
||||||
hledger-0.27: build
|
|
||||||
Progress: 1/4
|
|
||||||
...
|
|
||||||
```
|
|
||||||
|
|
||||||
Note stack will install required haskell libraries, but not C
|
|
||||||
libraries such as curses or terminfo. If you get a build error, it is
|
|
||||||
likely because one of these is missing, in which case you must
|
|
||||||
identify and install it yourself using your system's package
|
|
||||||
manager. This is usually a bit harder on Windows.
|
|
||||||
|
|
||||||
`make install` runs stack install, which does everything stack build does and also
|
|
||||||
copies the executables to `~/.local/bin` or the Windows equivalent.
|
|
||||||
You should make sure this directory is in your `$PATH`, so that you can just type
|
|
||||||
`hledger` to run the latest.
|
|
||||||
```shell
|
|
||||||
$ make install
|
|
||||||
stack install
|
|
||||||
NOTE: the install command is functionally equivalent to 'build --copy-bins'
|
|
||||||
hledger-0.27: build
|
|
||||||
...
|
|
||||||
Copied executables to /Users/simon/.local/bin/:
|
|
||||||
- hledger-web
|
|
||||||
- hledger-ui
|
|
||||||
- hledger
|
|
||||||
```
|
|
||||||
|
|
||||||
You can save time and effort by building just the package(s) you're interested in.
|
|
||||||
To install just the hledger command-line tool, but not hledger-ui or (especially costly)
|
|
||||||
hledger-web, do:
|
|
||||||
```shell
|
|
||||||
$ stack install hledger
|
|
||||||
```
|
|
||||||
|
|
||||||
(This looks like the [download page](download) command for installing the latest hledger release from Stackage.
|
|
||||||
The difference is, here we are running it inside the hledger source tree, so the source version will be installed.)
|
|
||||||
|
|
||||||
#### Add a test
|
|
||||||
|
|
||||||
- identify what to test
|
|
||||||
- choose the test type: unit ? functional ? benchmark ?
|
|
||||||
- currently expected to pass or fail ?
|
|
||||||
- figure out where it goes
|
|
||||||
- write test, verify expected result
|
|
||||||
- get it committed
|
|
||||||
|
|
||||||
#### Use the REPL (GHCI)
|
#### Use the REPL (GHCI)
|
||||||
|
|
||||||
These all work from the main hledger source directory (at least).
|
These all work from the main hledger source directory (at least).
|
||||||
@ -595,10 +495,10 @@ Follow the usual github workflow:
|
|||||||
|
|
||||||
If you're new to this process, [help.github.com](http://help.github.com) may be useful.
|
If you're new to this process, [help.github.com](http://help.github.com) may be useful.
|
||||||
|
|
||||||
#### Join the contributors list
|
#### Add yourself to the contributor list
|
||||||
|
|
||||||
- after getting one or more patches committed, read and sign the [contributor list & agreement](contributors.html)
|
- after getting something into the master branch, read and sign the [contributor list & agreement](contributors.html)
|
||||||
- or, [ask](#how-to-get-help) to be added
|
- or, [ask](/docs.html#get-help) to be added
|
||||||
|
|
||||||
### Technical Writer
|
### Technical Writer
|
||||||
|
|
||||||
@ -786,8 +686,8 @@ don't run make setversion.
|
|||||||
- [tweet]
|
- [tweet]
|
||||||
|
|
||||||
|
|
||||||
## Project overview
|
|
||||||
|
|
||||||
|
## Project overview
|
||||||
### Mission, principles, goals
|
### Mission, principles, goals
|
||||||
|
|
||||||
The hledger project aims to produce:
|
The hledger project aims to produce:
|
||||||
@ -871,8 +771,8 @@ Dev sprint/party #2 was on 2015/10/10.
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Code architecture
|
|
||||||
|
|
||||||
|
## Code architecture
|
||||||
### hledger
|
### hledger
|
||||||
|
|
||||||
There are two core cabal packages:
|
There are two core cabal packages:
|
||||||
@ -1017,6 +917,7 @@ makefile for instructions). This rebuilds automatically when haskell
|
|||||||
files change in any of the hledger{-lib,,-web} packages.
|
files change in any of the hledger{-lib,,-web} packages.
|
||||||
|
|
||||||
<script async defer src="https://buttons.github.io/buttons.js"></script>
|
<script async defer src="https://buttons.github.io/buttons.js"></script>
|
||||||
|
|
||||||
## Quick links
|
## Quick links
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user