| .. | ||
| src | ||
| .gitignore | ||
| config.defaults | ||
| config_common.ml | ||
| configure | ||
| dune | ||
| dune-project | ||
| myproject.opam | ||
| README.md | ||
| real_configure.ml | ||
| run.t | ||
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:
-
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. -
by copying
config.defaultstoconfigand editing it. The configuration scripts will be run as part of the build using what is written inconfig. Whenconfigis edited, the configuration scripts will be automatically rerun. -
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
configfile using what was given on the command line - calls
ocaml real_configure.ml real_configure.mldoes some stuff and generatesconfig.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
configby copyingconfig.default - a rule to produce
config.fullby runningreal_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.