A compromise between the speed of make and the ease of use of a build script
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
moonbuild/README.md

37 lines
1.8 KiB

4 years ago
# moonbuild
**Now in v2 - complete rework from v1**
4 years ago
4 years ago
Because `make` is painful to use, and build scripts are too slow. Moonbuild aims to be a good compromise.
You should probably use [http://gittup.org/tup/](tup) instead if you want a good build system.
4 years ago
## How does it work?
4 years ago
`moonbuild` reads a build file, usually `Build.moon` that is written in a Moonscript DSL to define its targets and variables.
It then builds a DAG for the dependancies of the targets you tell it to build.
Then, it tries building every target in the graph while respecting dependancies, possibly on multiple processes.
4 years ago
4 years ago
Essentially, it works the same way as `make`, just with a different language, you can compare the `Build.moon` and `Makefile` in this repo to see for yourself.
4 years ago
4 years ago
## Why Moonscript?
Because it's fast, based on lua, and making DSLs with it is relatively easy.
It's also a language I like a lot, so I might have been biased when choosing it.
4 years ago
4 years ago
## Installing
It is available on luarocks with `luarocks install moonbuild`.
It is also recommended to install `luaposix` if you can, as it speeds it up a lot, or `luafilesystem` in case it isn't available.
4 years ago
4 years ago
## Building from source
You will need `argparse` and `moonscript` installed from luarocks, and `luaposix` or `luafilesystem` are recommended.
4 years ago
4 years ago
### Bootstrapping
You can build moonbuild with itself: `moon bin/moonbuild.moon -qjy`.
This will leave the binary ready to be used as `out/moonbuild` (it will still depend on the library to be used).
The binary and library can then be installed with `bin/moonbuild install`.
You can combine these steps with `moon bin/moonbuild.moon -qjy install` which will build and install moonbuild.
### With `Alfons`
Alfons can use the devel version of moonbuild directly from its sources, so `alfons build` and `alfons install` will work directly.
4 years ago
## Docs
TODO