This file describes the Dune setup for lablgtk and the release instructions.
Dune takes care of all the C-stub needed to compile lablgtk almost
automatically. The src/dune
file is mostly self-describing.
The main choice we had to do is how to structure the OPAM packages. In lablgtk2, there was a single package, however it would build different binaries based on what it could detect. This was a bit fragile due to lack of reproducible, thus in lablgtk3 each C library has its own OPAM package.
We still depend on the conf-packages
, but note however that the
build system does it own versioned C library check.
The discussion at the caml-list https://sympa.inria.fr/sympa/arc/caml-list/2018-12/msg00017.html provides some more insight on this choice.
The dune_config
tool is a simple wrapper that can be used to query
pkg-config
for flags and version checks.
The lablgtk3 build uses the varcc
and propcc
scripts to
auto-generate some files. The rules for such files are in
dune-enum.sexp
and dune-prop.sexp
. These files could be also
auto-generated in the future using Dune's promote mechanism.
Quick release instructions: Run git tag -a
+ dune-release
.
The preferred workflow to release a new set of OPAM packages is to use
dune-release
.
dune-release
will take each top-level markdown item as the changelog
for the current version, thus be aware of not introducing #
markers.
The first (and most important) step is to tag the release and push it to the main repository.
We recommend you do this manually. As dune-release
uses git describe
to gather versioning information, your tag must be
annotated. Using git tag -a
or git tag -s
will do the job. Please
add the version changes to the tag annotation message.
You can also use dune-release tag
, which will try to infer the
tag information from CHANGES.md
, however the current heuristics
seem too fragile and the changes list may not be properly updated.
Once the tag is in place, calling dune-release
will build, lint, run
the tests, create the opam package, upload the archives and
docs to the release page, and submit a pull request to the OPAM
repository.
Under the hood, dune-release
executes the following 4 commands:
dune-release distrib # Create the distribution archive
dune-release publish # Publish it on the WWW with its documentation
dune-release opam pkg # Create an opam package
dune-release opam submit # Submit it to OCaml's opam repository
It is often useful to run the commands separately as to have better control of the release process.
Note that you will need the proper permissions for the publish
step,
including setting a Github access token, see dune-release help files
for more information.