Commit 53d02ea6 authored by benoit's avatar benoit
Browse files


parent df4b46ab
2.4.0 (06/03/2020)
- Add `mdx` extension and stanza version 0.1 (#3094, @NathanReb)
- Allow to make Odoc warnings fatal. This is configured from the `(env ...)`
stanza. (#3029, @Julow)
- Fix separate compilation of JS when findlib is not installed. (#3177, @nojb)
- Add a `dune describe` command to obtain the topology of a dune workspace, for
projects such as ROTOR. (#3128, @diml)
- Add `plugin` linking mode for executables and the `(embed_in_plugin_libraries
...)` field. (#3141, @nojb)
- Add an `%{ext_plugin}` variable (#3141, @nojb)
- Dune will no longer build shared objects for stubs if
`supports_shared_libraries` is false (#3225, fixes #3222, @rgrinberg)
- Fix a memory leak in the file-watching mode (`dune build -w`)
(#3220, @snowleopard and @aalekseyev)
2.3.1 (20/02/2020)
- Fix versioning of artifact variables (eg %{cmxa:...}), which were introduced
in 2.0, not 1.11. (#3149, @nojb)
- Fix a bug introduced in 2.3.0 where dune insists on using `fswatch` on linux
(even when `inotifywait` is available). (#3162, @aalekseyev)
- Fix a bug causing all executables to be considered as optional (#3163, @diml)
2.3.0 (15/02/2020)
- Improve validation and error handling of arguments to `dune init` (#3103, fixes
#3046, @shonfeder)
- `dune init exec NAME` now uses the `NAME` argument for private modules (#3103,
fixes #3088, @shonfeder)
- Avoid linear walk to detect children, this should greatly improve
performance when a target has a large number of dependencies (#2959,
@ejgallego, @aalekseyev, @Armael)
- [coq] Add `(boot)` option to `(coq.theories)` to enable bootstrap of
Coq's stdlib (#3096, @ejgallego)
- [coq] Deprecate `public_name` field in favour of `package` (#2087, @ejgallego)
- Better error reporting for "data only" and "vendored" dirs. Using these with
anything else than a strict subdirectory or `*` will raise an error. The
previous behavior was to just do nothing (#3056, fixes #3019, @voodoos)
- Fix bootstrap on bytecode only switches on windows or where `-j1` is set.
(#3112, @xclerc, @rgrinberg)
- Allow `enabled_if` fields in `executable(s)` stanzas (#3137, fixes #1690
- Do not fail if `ocamldep`, `ocamlmklib`, or `ocaml` are absent. Wait for them
to be used to fail (#3138, @rgrinberg)
- Introduce a `strict_package_deps` mode that verifies that dependencies between
packages in the workspace are specified correctly. (@rgrinberg, #3117)
- Make sure the `@all` alias is defined when no `dune` file is present
in a directory (#2946, fix #2927, @diml)
2.2.0 (06/02/2020)
- `dune test` is now a command alias for `dune runtest`. This is to make the CLI
less idiosyncratic (#3006, @shonfeder)
- Allow to set menhir flags in the `env` stanza using the `menhir_flags` field.
(#2960, fix #2924, @bschommer)
- By default, do not show the full command line of commands executed
by `dune` when `dune` is executed inside `dune`. This is to make
integration tests more reproducible (#3042, @diml)
- `dune subst` now works even without opam files (#2955, fixes #2910,
@fangyi-zhou and @diml)
- Hint when trying to execute an executable defined in the current directory
without using the `./` prefix (#3041, fixes #1094, @voodoos).
- Extend the list of modifiers that can be nested under
`with-accepted-exit-codes` with `chdir`, `setenv`, `ignore-<outputs>`,
`with-stdin-from` and `with-<outputs>-to` (#3027, fixes #3014, @voodoos)
- It is now an error to have a preprocessing dependency on a ppx rewriter
library that is not marked as `(kind ppx_rewriter)` (#3039, @snowleopard).
- Fix permissions of files promoted to the source tree when using the
shared cache. In particular, make them writable by the user (#3043,
fixes #3026, @diml)
- Only detect internal OCaml tools with `.opt` extensions. Previously, this
detection applied to other binaries as well (@kit-ty-kate, @rgrinberg, #3051).
- Give the user a proper error message when they try to promote into a source
directory that doesn't exist. (#3073, fix #3069, @rgrinberg)
- Correctly build vendored packages in `-p` mode. These packages were
incorrectly filtered out before. (#3705, @diml)
- Do not install vendored packages (#3704, @diml)
- `make` now prints a message explaining the main targets available
(#3085, fix #3078, @diml)
- Add a `byte_complete` executable mode to build programs as
self-contained bytecode programs
(#3076, fixes #1519, @diml)
2.1.3 (16/01/2020)
- Fix building the OCaml compiler with Dune (#3038, fixes #2974,
2.1.2 (08/01/2020)
- Fix a bug in the `Fiber.finalize` function of the concurrency monad of Dune,
causing a race condition at the user level (#3009, fix #2958, @diml)
2.1.1 (07/01/2020)
- Guess foreign archives & native archives for libraries defined using the
`META` format. (#2994, @rgrinberg, @anmonteiro)
- Fix generation of `.merlin` files when depending on local libraries with more
than one source directory. (#2983, @rgrinberg)
2.1.0 (21/12/2019)
- Attach cinaps stanza actions to both `@runtest` and `@cinaps` aliases
(#2831, @NathanReb)
- Add variables `%{lib-private...}` and `%{libexec-private...}` for finding
build paths of files in public and private libraries within the same
project. (#2901, @snowleopard)
- Add `--mandir` option to `$ dune install`. This option allows to override the
installation directory for man pages. (#2915, fixes #2670, @rgrinberg)
- Fix `dune --version`. The bootstrap didn't compute the version
correctly. (#2929, fixes #2911, @diml)
- Do not open the log file in `dune clean`. (#2965, fixes #2964 and
#2921, @diml)
- Support passing two arguments to `=`, `<>`, ... operators in package
dependencies so that we can have things such as `(<> :os win32)`
(#2965, @diml)
2.0.1 (17/12/2019)
- Delay errors raised by invalid `dune-package` files. The error is now raised
only if the invalid package is treated as a library and used to build
something. (#2972, @rgrinberg)
2.0.0 (20/11/2019)
- Remove existing destination files in `install` before installing the new
ones. (#2885, fixes #2883, @bschommer)
- The `action` field in the `alias` stanza is not available starting `lang dune
2.0`. The `alias` field in the `rule` stanza is a replacement. (#2846, fixes
2681, @rgrinberg)
- Introduce `alias` and `package` fields to the `rule` stanza. This is the
preferred way of attaching rules to aliases. (#2744, @rgrinberg)
- Add field `(optional)` for executable stanzas (#2463, fixes #2433, @bobot)
- Infer targets for rule stanzas expressed in long form (#2494, fixes #2469,
- Indicate the progress of the initial file tree loading (#2459, fixes #2374,
- Build `.cm[ox]` files for executables more eagerly. This speeds up builds at
the cost of building unnecessary artifacts in some cases. Some of these extra
artifacts can fail to built, so this is a breaking change. (#2268, @rgrinberg)
- Do not put the `<package>.install` files in the source tree unless `-p` or
`--promote-install-files` is passed on the command line (#2329, @diml)
- Compilation units of user defined executables are now mangled by default. This
is done to prevent the accidental collision with library dependencies of the
executable. (#2364, fixes #2292, @rgrinberg)
- Enable `(explicit_js_mode)` by default. (#1941, @nojb)
- Add an option to clear the console in-between builds with
- Stop symlinking object files to main directory for stanzas defined `jbuild`
files (#2440, @rgrinberg)
- Library names are now validated in a strict fashion. Previously, invalid names
would be allowed for unwrapped libraries (#2442, @rgrinberg)
- mli only modules must now be explicitly declared. This was previously a
warning and is now an error. (#2442, @rgrinberg)
- Modules filtered out from the module list via the Ordered Set Language must
now be actual modules. (#2442, @rgrinberg)
- Actions which introduce targets where new targets are forbidden (e.g.
preprocessing) are now an error instead of a warning. (#2442, @rgrinberg)
- No longer install a `jbuilder` binary. (#2441, @diml)
- Stub names are no longer allowed relative paths. This was previously a warning
and is now an error (#2443, @rgrinberg).
- Define (paths ...) fields in (context ...) definitions in order to set or
extend any PATH-like variable in the context environment. (#2426, @nojb)
- The `diff` action will always normalize newlines before diffing. Perviousy, it
would not do this normalization for rules defined in jbuild files. (#2457,
- Modules may no longer belong to more than one stanza. This was previously
allowed only in stanzas defined in `jbuild` files. (#2458, @rgrinberg)
- Remove support for `jbuild-ignore` files. They have been replaced by the the
`dirs` stanza in `dune` files. (#2456, @rgrinberg)
- Add a new config option `sandboxing_preference`, the cli argument `--sandbox`,
and the dep spec `sandbox` in dune language. These let the user control the level of
sandboxing done by dune per rule and globally. The rule specification takes precedence.
The global configuration merely specifies the default.
(#2213, @aalekseyev, @diml)
- Remove support for old style subsystems. Dune will now emit a warning to
reinstall the library with the old style subsystem. (#2480, @rgrinberg)
- Add action (with-stdin-from <file> <action>) to redirect input from <file>
when performing <action>. (#2487, @nojb)
- Change the automatically generated odoc index to only list public modules.
This only affects unwrapped libraries (#2479, @rgrinberg)
- Set up formatting rules by default. They can be configured through a new
`(formatting)` stanza in `dune-project` (#2347, fixes #2315, @emillon)
- Change default target from `@install` to `@all`. (#2449, fixes #1220,
- Include building stubs in `@check` rules. (@rgrinberg, #2530)
- Get rid of ad-hoc rules for guessing the version. Dune now only
relies on the version written in the `dune-project` file and no
longer read `VERSION` or similar files (#2541, @diml)
- In `(diff? x y)` action, require `x` to exist and register a
dependency on that file. (#2486, @aalekseyev)
- On Windows, an .exe suffix is no longer added implicitly to binary names that
already end in .exe. Second, when resolving binary names, .opt variants are no
longer chosen automatically. (#2543, @nojb)
- Make `(diff? x y)` move the correction file (`y`) away from the build
directory to promotion staging area. This makes corrections work with
sandboxing and in general reduces build directory pollution. (#2486,
@aalekseyev, fixes #2482)
- `c_flags`, `c_names` and `cxx_names` are now supported in `executable`
and `executables` stanzas. (#2562, @nojb)
Note: this feature has been subsequently extended into a separate
`foreign_stubs` field. (#2659, RFC #2650, @snowleopard)
- Remove git integration from `$ dune upgrade` (#2565, @rgrinberg)
- Add a `--disable-promotion` to disable all modification to the source
directory. There's also a corresponding `DUNE_DISABLE_PROMOTION` environment
variable. (#2588, fix #2568, @rgrinberg)
- Add a `forbidden_libraries` field to prevent some library from being
linked in an executable. This help detecting who accidently pulls in
`unix` for instance (#2570, @diml)
- Fix incorrect error message when a variable is expanded in static context:
`%{lib:lib:..}` when the library does not exist. (#2597, fix #1541,
- Add `--sections` option to `$ dune install` to install subsections of .install
files. This is useful for installing only the binaries in a workspace for
example. (#2609, fixes #2554, @rgrinberg)
- Drop support for `jbuild` and `jbuild-ignore` files (#2607, @diml)
- Add a `dune-action-plugin` library for describing dependencies direcly in
the executable source. Programs that use this feature can be run by a new
action (dynamic-run <progn> ...). (#2635, @staronj, @aalekseyev)
- Stop installing the `ocaml-syntax-shims` binary. In order to use
`future_syntax`, one now need to depend on the `ocaml-syntax-shims`
package (#2654, @diml)
- Add support for dependencies that are re-exported. Such dependencies
are marked with`re_export` and will automatically be provided to
users of a library (#2605, @rgrinberg)
- Add a `deprecated_library_name` stanza to redirect old names after a
library has been renamed (#2528, @diml)
- Error out when a `preprocessor_deps` field is present but not
`preprocess` field is. It is a warning with Dune 1.x projects
(#2660, @Julow)
- Dune will use `-output-complete-exe` instead of `-custom` when compiling
self-contained bytecode executables whenever this options is available
(OCaml version >= 4.10) (#2692, @nojb)
- Add action `(with-accepted-exit-codes <pred> <action>)` to specify the set of
successful exit codes of `<action>`. `<pred>` is specified using the predicate
language. (#2699, @nojb)
- Do not setup rules for disabled libraries (#2491, fixes #2272, @bobot)
- Configurator: filter out empty flags from `pkg-config` (#2716, @AltGr)
- `no_keep_locs` is a no-op for projects that use `lang dune` older than 2.0. In
projects where the language is at least `2.0`, the field is now forbidden.
(#2752, fixes #2747, @rgrinberg)
- Extend support for foreign sources and archives via the `(foreign_library ...)`
stanza as well as the `(foreign_stubs ...)` and `(foreign_archives ...)` fields.
(#2659, RFC #2650, @snowleopard)
- Add (deprecated_package_names) field to (package) declaration in
dune-project. The names declared here can be used in the (old_public_name)
field of (deprecated_library_name) stanza. These names are interpreted as
library names (not prefixed by a package name) and appropiate redirections are
setup in their META files. This feaure is meant to migrate old libraries which
do not follow Dune's convention of prefixing libraries with the package
name. (#2696, @nojb)
- The fields `license`, `authors`, `maintainers`, `source`, `bug_reports`,
`homepage`, and `documentation` of `dune-project` can now be overriden on a
per-package basis. (#2774, @nojb)
- Change the default `modes` field of executables to `(mode exe)`. If
one wants to build a bytecode program, it now needs to be explicitly
requested via `(modes byte exe)`. (#2851, @diml)
- Allow `ccomp_type` as a variable for evaluating `enabled_if`. (#2855, @dra27,
- Stricter validation of file names in `select`. The file names of conditional
sources must match the prefix and the extension of the resultant filename.
(#2867, @rgrinberg)
- Add flag `disable_dynamically_linked_foreign_archives` to the workspace file.
If the flag is set to `true` then: (i) when installing libraries, we do not
install dynamic foreign archives `dll*.so`; (ii) when building executables in
the `byte` mode, we statically link in foreign archives into the runtime
system; (iii) we do not generate any `dll*.so` rules. (#2864, @snowleopard)
- Reimplement the bootstrap procedure. The new procedure is faster and
should no longer stack overflow (#2854, @dra27, @diml)
- Allow `.opam.template` files to be generated using rules (#2866, @rgrinberg)
1.11.4 (09/10/2019)
- Allow to mark directories as `data_only_dirs` without including them as `dirs`
(#2619, fix #2584, @rgrinberg)
- Fix reading `.install` files generated with an external `--build-dir`. (#2638,
fix #2629, @rgrinberg)
1.11.3 (23/08/2019)
- Fix a ppx hash collision in watch mode (#2546, fixes #2520, @diml)
1.11.2 (20/08/2019)
- Remove the optimisation of passing `-nodynlink` for executalbes when
not necessary. It seems to be breaking things (see #2527, @diml)
- Fix invalid library names in `dune-package` files. Only public names should
exist in such files. (#2558, fix #2425, @rgrinberg)
1.11.1 (09/08/2019)
- Fix config file dependencies of ocamlformat (#2471, fixes #2464,
- Cleanup stale directories when using `(source_tree ...)` in the
presence of directories with only sub-directories and no files
(#2514, fixes #2499, @diml)
1.11.0 (23/07/2019)
- Don't select all local implementations in `dune utop`. Instead, let the
default implementation selection do its job. (#2327, fixes #2323, @TheLortex,
review by @rgrinberg)
- Check that selected implementations (either by variants or default
implementations) are indeed implementations. (#2328, @TheLortex, review by
- Don't reserve the `Ppx` toplevel module name for ppx rewriters (#2242, @diml)
- Redesign of the library variant feature according to the #2134 proposal. The
set of variants is now computed when the virtual library is installed.
Introducing a new `external_variant` stanza. (#2169, fixes #2134, @TheLortex,
review by @diml)
- Add proper line directives when copying `.cc` and `.cxx` sources (#2275,
- Fix error message for missing C++ sources. The `.cc` extension was always
ignored before. (#2275, @rgrinberg)
- Add `$ dune init project` subcommand to create project boilerplate according
to a common template. (#2185, fixes #159, @shonfeder)
- Allow to run inline tests in javascript with nodejs (#2266, @hhugo)
- Build `ppx.exe` as compiling host binary. (#2286, fixes #2252, @toots, review
by @rgrinberg and @diml)
- Add a `cinaps` extension and stanza for better integration with the
[cinaps tool]( tool (#2269,
- Allow to embed build info in executables such as version and list
and version of statically linked libraries (#2224, @diml)
- Set version in `META` and `dune-package` files to the one read from
the vcs when no other version is available (#2224, @diml)
- Add a variable `%{target}` to be used in situations where the context
requires at most one word, so `%{targets}` can be confusing; stdout
redirections and "-o" arguments of various tools are the main use
case; also, introduce a separate field `target` that must be used
instead of `targets` in those situations. (#2341, @aalekseyev)
- Fix dependency graph of wrapped_compat modules. Previously, the dependency on
the user written entry module was omitted. (#2305, @rgrinberg)
- Allow to promote executables built with an `executable` stanza
(#2379, @diml)
- When instantiating an implementation with a variant, make sure it matches
virtual library's list of known implementations. (#2361, fixes #2322,
@TheLortex, review by @rgrinberg)
- Add a variable `%{ignoring_promoted_rules}` that is `true` when
`--ingore-promoted-rules` is passed on the command line and false
otherwise (#2382, @diml)
- Fix a bug in `future_syntax` where the characters `@` and `&` were
not distinguished in the names of binding operators (`let@` was the
same as `let&`) (#2376, @aalekseyev, @diml)
- Workspaces with non unique project names are now supported. (#2377, fix #2325,
- Improve opam generation to include the `dune` dependencies with the minimum
constraint set based on the dune language version specified in the
`dune-project` file. (2383, @avsm)
- The order of fields in the generated opam file now follows order preferred in
opam-lib. (@avsm, #2380)
- Fix coloring of error messages from the compiler (@diml, #2384)
- Add warning `66` to default set of warnings starting for dune projects with
language verison >= `1.11` (@rgrinberg, @diml, fixes #2299)
- Add (dialect ...) stanza
(@nojb, #2404)
- Add a `--context` argument to `dune install/uninstall` (@diml, #2412)
- Do not warn about merlin files pre 1.9. This warning can only be disabled in
1.9 (#2421, fixes #2399, @emillon)
- Add a new `inline_tests` field in the env stanza to control inline_tests
framework with a variable (#2313, @mlasson, original idea by @diml, review
by @rgrinberg).
- New binary kind `js` for executables in order to explicitly enable Javascript
targets, and a switch `(explicit_js_mode)` to require this mode in order to
declare JS targets corresponding to executables. (#1941, @nojb)
1.10.0 (04/06/2019)
- Restricted the set of variables available for expansion in the destination
filename of `install` stanza to simplify implementation and avoid dependency
cycles. (#2073, @aalekseyev, @diml)
- [menhir] call menhir from context root build_dir (#2067, @ejgallego,
review by @diml, @rgrinberg)
- [coq] Add `coq.pp` stanza to help with pre-processing of grammar
files (#2054, @ejgallego, review by @rgrinberg)
- Add a new more generic form for the *promote* mode: `(promote
(until-clean) (into <dir>))` (#2068, @diml)
- Allow to promote only a subset of the targets via `(promote (only
<pred>))`. For instance: `(promote (only *.mli))` (#2068, @diml)
- Improve the behavior when a strict subset of the targets of a rule is already
in the source tree for projects using the dune language < 1.10 (#2068, fixes
#2061, @diml)
- With lang dune >= 1.10, rules in standard mode are no longer allowed to
produce targets that are present in the source tree. This has been a warning
for long enough (#2068, @diml)
- Allow %{...} variables in pps flags (#2076, @mlasson review by @diml and
- Add a 'cookies' option to ppx_rewriter/deriver flags in library stanzas. This
allow to specify cookie requests from variables expanded at each invocation of
the preprocessor. (#2106, @mlasson @diml)
- Add more opam metadata and use it to generate `.opam` files. In particular, a
`package` field has been added to specify package specific information.
(#2017, #2091, @avsm, @jonludlam, @rgrinberg)
- Clean up the special support for `findlib.dynload`. Before, Dune would simply
match on the library name. Now, we only match on the findlib package name when
the library doesn't come from Dune. Someone writing a library called
`findlib.dynload` with Dune would have to add `(special_builtin_support
findlib_dynload)` to trigger the special behavior. (#2115, @diml)
- Install the `future_syntax` preprocessor as `ocaml-syntax-shims.exe` (#2125,
- Hide full command on errors and warnings in development and show them in CI.
(detected using the `CI` environment variable). Commands for which the
invocation might be omitted must output an error prefixed with `File `. Add an
`--always-show-command-line` option to disable this behavior and always show
the full command. (#2120, fixes #1733, @rgrinberg)
- In `dune-workspace` files, add the ability to choose the host context and to
create duplicates of the default context with different settings. (#2098,
@TheLortex, review by @diml, @rgrinberg and @aalekseyev)
- Add support for hg in `dune subst` (#2135, @diml)
- Don't build documentation for implementations of virtual libraries (#2141,
fixes #2138, @jonludlam)
- Fix generation of the `-pp` flag in .merlin (#2142, @rgrinberg)
- Make `dune subst` add a `(version ...)` field to the `dune-project`
file (#2148, @diml)
- Add the `%{os_type}` variable, which is a short-hand for
`%{ocaml-config:os_type}` (#1764, @diml)
- Allow `enabled_if` fields in `library` stanzas, restricted to the
`%{os_type}`, `%{model}`, `%{architecture}`, `%{system}` variables (#1764,
#2164 @diml, @rgrinberg)
- Fix `chdir` on external and source paths. Dune will also fail gracefully if
the external or source path does not exist (#2165, fixes #2158, @rgrinberg)
- Support the `.cc` extension fro C++ sources (#2195, fixes #83, @rgrinberg)
- Run `ocamlformat` relative to the context root. This improves the locations of
errors. (#2196, fixes #1370, @rgrinberg)
- Fix detection of `README`, `LICENSE`, `CHANGE`, and `HISTORY` files. These
would be undetected whenever the project was nested in another workspace.
(#2194, @rgrinberg)
- Fix generation of `.merlin` whenever there's more than one stanza with the
same ppx preprocessing specification (#2209 ,fixes #2206, @rgrinberg)
- Fix generation of `.merlin` in the presence of the `copy_files` stanza and
preprocessing specifications of other stanazs. (#2211, fixes #2206,
- Run `refmt` from the context's root directory. This improves error messages in
case of syntax errors. (#2223, @rgrinberg)
- In .merlin files, don't pass `-dump-ast` to the `future_syntax` preprocessor.
Merlin doesn't seem to like it when binary AST is generated by a `-pp`
preprocessor. (#2236, @aalekseyev)
- `dune install` will verify that all files mentioned in all .install files
exist before trying to install anything. This prevents partial installation of
packages (#2230, @rgrinberg)
1.9.3 (06/05/2019)
- Fix `.install` files not being generated (#2124, fixes #2123, @rgrinberg)
1.9.2 (02/05/2019)
- Put back library variants in development mode. We discovered a
serious unexpected issue and we might need to adjust the design of
this feature before we are ready to commit to a final version. Users
will need to write `(using library_variants 0.1)` in their
`dune-project` file if they want to use it before the design is
finalized. (#2116, @diml)
- Forbid to attach a variant to a library that implements a virtual
library outside the current project (#2104, @rgrinberg)
- Fix a bug where `dune install` would install man pages to incorrect
paths when compared to `opam-installer`. For example dune now