37 lines
1.4 KiB
Org Mode
37 lines
1.4 KiB
Org Mode
This project shows how to add a configure step to a project using
|
|
jbuilder.
|
|
|
|
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 =jbuild=:
|
|
- 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 Jbuilder 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
|