1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
This project shows how to add a configure step to a project using Dune.
In order to keep things composable, it offers several way to configure
the project:
1. with the classic `./configure <args...>`. When doing this, the
configuration script are run immediately, and the resulting configuration
is frozen for the rest of the build.
2. by copying `config.defaults` to `config` and editing it. The configuration
scripts will be run as part of the build using what is written in `config`.
When `config` is edited, the configuration scripts will be automatically
rerun.
3. by doing nothing. The configuration scripts will be run as part of the
build using the default values provided in `config.defaults`.
Technically this is how it works:
`configure` is a simple OCaml script that:
- parses the command line
- generates a `config` file using what was given on the command line
- calls `ocaml real_configure.ml`
- `real_configure.ml` does some stuff and generates `config.full`
`config.full` is what is used by the rest of the build.
Now in order to support (2) and (3), we setup the following rules in the
toplevel `dune` file:
- a rule to produce `config` by copying `config.default`
- a rule to produce `config.full` by running `real_configure.ml`
This all works as described because if Dune knows how to build a file and this
file is already present in the source tree, it will always prefer the file
that's already there.
|