Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
..
Failed to load latest commit information.
src
.gitignore
README.org
config.defaults
config_common.ml
configure
dune
dune-project
myproject.opam
real_configure.ml
run.t

README.org

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 re-run
  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

The reason it all work as described is 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