See full changelog
- dot-merlin-reader
- fix issue when multiple packages with pxxes are declared in the configuration. (#1181, fixes #1179)
Official stable release announcements and updates from the OCaml compiler, OCaml infrastructure and the OCaml Platform Tools.
code_path and tool_name to Expansion_context.Base
(#173, @jberdine)cases methods to traversal classes in Ast_traverse (#183, @pitag-ha)dot-merlin-reader with a binary that reads
.merlin files. (#1123, #1152)configurator: More flexible probing of #define. We allow duplicate values in
the object file, as long as they are the same after parsing. (#3739, fixes
#3736, @rgrinberg)
Record instrumentation backends in dune-package files. This makes it possible to use instrumentation backends defined in installed libraries (eg via OPAM). (#3735, @nojb)
Add missing .aux & .glob targets to coq rules (#3721, fixes #3437,
@rgrinberg)
Fix dune-package installation when META templates are present (#3743, fixes
#3746, @rgrinberg)
Resolve symlinks before running $ git diff (#3750, fixes #3740, @rgrinberg)
Cram tests: when checking that all test directories contain a run.t file,
skip empty directories. These can be left around by git. (#3753, @emillon)
Oops, we went looking but didn't find the changelog for this release 🙈
Driver.register_transformation: add optional parameter ~instrument
(#161, @pitag-ha)Location.init (#165, @pitag-ha)On behalf of the dune team, I'm pleased to announce the release of dune 2.7.0. This release adds a couple of important features and many bug fixes. I'll just briefly summarize the two features, and let our improved documentation elaborate on the details.
The first one is first class support for instrumentation tools such as bisect_ppx and landmarks. This is one of the most requested dune features ever, and we're pleased to show you all what we've come up with
Special thanks to @stephanieyou & @nojb for implementing this feature. Many thanks to @aantron for tirelessly iterating on the end user experience with us.
While the features is looking quite good already, we consider it a "first take" on this subject. We welcome your experience reports and feature requests.
The second feature we're introducing this release is dune's cram testing framework. The cram framework is our secret weapon for making dune (relatively) bug free. I'll soon write up a dedicated post to give you a flavour of how it works. To those who can't wait, there's a new section in the documentation that explains everything.
As always, the change log is replicated below for your convenience.
Happy Hacking.
Write intermediate files in a .mdx folder for each mdx stanza
to prevent the corresponding actions to be executed as part of the @all
alias (#3659, @NathanReb)
Read Coq flags from env (#3547 , fixes #3486, @gares)
Allow bisect_ppx to be enabled/disabled via dune-workspace. (#3404, @stephanieyou)
Formatting of dune files is now done in the executing dune process instead of in a separate process. (#3536, @nojb)
Add a --debug-artifact-substution flag to help debug problem with
version not being captured by dune-build-info (#3589,
@jeremiedimino)
Allow the use of the context_name variable in the enabled_if fields of
executable(s) and install stanzas. (#3568, fixes #3566, @voodoos)
Fix compatibility with OCaml 4.12.0 when compiling empty archives; no .a file is generated. (#3576, @dra27)
$ dune utop no longer tries to load optional libraries that are unavailable
(#3612, fixes #3188, @anuragsoni)
Fix dune-build-info on 4.10.0+flambda (#3599, @emillon, @jeremiedimino).
Allow multiple libraries with inline_tests to be defined in the same
directory (#3621, @rgrinberg)
Run exit hooks in jsoo separate compilation mode (#3626, fixes #3622, @rgrinberg)
Add (alias ...), (mode ...) fields to (copy_fields ...) stanza (#3631, @nojb)
(copy_files ...) now supports copying files from outside the workspace using absolute file names (#3639, @nojb)
Dune does not use ocamlc as an intermediary to call C compiler anymore.
Configuration flags ocamlc_cflags and ocamlc_cppflags are always prepended
to the compiler arguments. (#3565, fixes #3346, @voodoos)
Revert the build optimization in #2268. This optimization slows down building
individual executables when they're part of an executables stanza group
(#3644, @rgrinberg)
Use {dev} rather than {pinned} in the generated .opam file. (#3647,
@kit-ty-kate)
Insert correct extension name when editing dune-project files. Previously,
dune would just insert the stanza name. (#3649, fixes #3624, @rgrinberg)
Fix crash when evaluating an mdx stanza that depends on unavailable
packages. (#3650, @CraigFe)
Fix typo in cache-check-probablity field in dune config files. This field
now requires 2.7 as it wasn't usable before this version. (#3652, @edwintorok)
Add "odoc" {with-doc} to the dependencies in the generated .opam files.
(#3667, @kit-ty-kate)
Do not allow user actions to capture dune's stdin (#3677, fixes #3672, @rgrinberg)
(subdir ...) stanzas can now appear in dune files used via (include ...).
(#3676, @nojb)
base and stdio dependencies (#151, @ceastlund)Driver.partition_transformation (#156, @NathanReb)ppxlib_traverse (#159, @ceastlund){i blah} in docstrings (#1346, @jberdine)#**# or #**. where ** can be 0 or more operator chars are considered getter operators and are not surrounded by spaces, as opposed to regular infix operators (#1376, @gpetiot)function body of a fun (#1343, @jberdine)*compilation* buffer on successful reformat (#1350, @jberdine)wrap-comments=false and ocp-indent-compat=true are set to avoid interfering with ocp-indent indentation. (#1352, @gpetiot)[]{} must not be escaped in the arguments of @raise, @author, @version and others.(* *), (** *) and (*$ *) (#1407, @gpetiot)<!-- $MDX labels -->, where labels is a list of valid
labels separated by a comma. This line has to immediately precede the block
it is attached to. The legacy syntax is preserved and will be deprecated in a
later release..mli files' doc comments (#206, @jsomers)env_and_file "a:f" associates f to the environment named aenv_and_file " :f" associates f to the default environmentenv_and_file "f" associates f to all environments.mdx-error code block
following the ocaml block instead of crashing the mdx process. Those mdx-error blocks
are recognized and checked by mdx and can be intentionally used to show case specific
compile errors. (#238, @gpetiot)(* $MDX part-... *) delimiters (#250, @gpetiot)set- and unset- labels (#257, @shonfeder)dune-release config subcommand to display and edit the global
configuration (#220, @NathanReb).delegate-info to print information needed by external
release scripts (#221, @pitag-ha)x-commit-hash field to the opam file when releasing (#224, @gpetiot)tag: improve error and log messages by comparing the provided
commit with the commit correspondent to the provided tag (#226, @pitag-ha)dune-release (#231, @pitag-ha)dune-release distrib does not fail when opam's doc field
is missing. Do not try to generate nor publish the documentation when opam's
doc field is missing. (#235, @gpetiot)publish logs (#171, @hannesm)git command used in publish doc should check DUNE_RELEASE_GIT (even
if deprecated) before PATH. (#242, @gpetiot)log subcommand (#196, @gpetiot)Expansion_context and replace it with tool_name
(#149, @NathanReb)Ppxlib.Driver.map_structure to return a ppxlib's
structure instead of a Migrate_parsetree.Driver.some_structure.
(#153, @NathanReb)Fix crash when caching is enabled (@rgrinberg, #3581, fixes #3580)
Do not use -output-complete-exe until 4.10.1 as it is broken in
4.10.0 (@jeremiedimino, #3187)
Fix crash when an unknown pform is found (such as %{unknown}) (#3560,
@emillon)
Improve error message when invalid package names (such as the empty string)
are passed to dune build -p. (#3561, @emillon)
Fix a stack overflow when displaying large outputs (including diffs) (#3537, fixes #2767, #3490, @emillon)
Pass -g when compiling ppx preprocessors (#3671, @rgrinberg)
Additions
- (#1142)Locate_type) (#1067)Fix a bug where valid lib names in dune init exec --libs=lib1,lib2
results in an error. (#3444, fix #3443, @bikallem)
Add and enabled_ if field to the install stanza. Enforce the same variable
restrictions for enabled_if fields in the executable and install stanzas
than in the library stanza. When using dune lang < 2.6, the usage of
forbidden variables in executables stanzas with only trigger a warning to
maintain compatibility. (#3408 and #3496, fixes #3354, @voodoos)
Insert a constraint one the version of dune when the user explicitly
specify the dependency on dune in the dune-project file (#3434 ,
fixes #3427, @diml)
Generate correct META files for sub-libraries (of the form lib.foo) that
contain .js runtime files. (#3445, @hhugo)
Add a (no-infer ...) action that prevents inference of targets and
dependencies in actions. (#3456, fixes #2006, @roddyyaga)
Correctly infer targets for the diff? action. (#3457, fixes #2990, @greedy)
Fix $ dune print-rules crashing (#3459, fixes #3440, @rgrinberg)
Simplify js_of_ocaml rules using js_of_ocaml.3.6 (#3375, @hhugo)
Add a new ocaml-merlin subcommand that can be used by Merlin to get
configuration directly from dune instead of using .merlin files. (#3395,
@voodoos)
Remove experimental variants feature and make default implementations part of the language (#3491, fixes #3483, @rgrinberg)
We're happy to announce the release of ocp-indent 1.8.2!
doc-comments-val option with doc-comments. The placement of documentation comments on val and external items is now controled by doc-comments.
doc-comments=after becomes doc-comments=after-when-possible to take into account the technical limitations of ocamlformat;doc-comments=before is unchanged;doc-comments-val is now replaced with doc-comments.
To reproduce the former behaviors
doc-comments=before + doc-comments-val=before: now use doc-comments=before;doc-comments=before + doc-comments-val=after: now use doc-comments=before-except-val;doc-comments=after + doc-comments-val=before: this behavior did not make much sense and is not available anymore;doc-comments=after + doc-comments-val=after: now use doc-comments=after-when-possible.
(#1358, @jberdine, @Julow, @gpetiot).
This reverts changes introduced in 0.14.1 (#1335) and 0.14.0 (#1012).#edit_mode_vi and #edit_mode_default mode to set the editing mode(@kandu)#use_output directive (@diml, #313)We are pleased to announce the minor release of opam 2.0.7.
This new version contains backported small fixes:
Installation instructions (unchanged):
From binaries: run
bash -c "sh <(curl -fsSL https://opam.ocaml.org/install.sh) --version 2.0.7"
or download manually from the Github "Releases" page to your PATH. In this case, don't forget to run opam init --reinit -ni to enable sandboxing if you had version 2.0.0~rc manually installed or to update you sandbox script.
From source, using opam:
opam update; opam install opam-devel
(then copy the opam binary to your PATH as explained, and don't forget to run opam init --reinit -ni to enable sandboxing if you had version 2.0.0~rc manually installed or to update you sandbox script)
From source, manually: see the instructions in the README.
We hope you enjoy this new minor version, and remain open to bug reports and suggestions.
NOTE: this article is cross-posted on opam.ocaml.org and ocamlpro.com. Please head to the latter for the comments!
Option module accidentally added in 1.7.0[coq] Fix install .v files for Coq theories (#3384, @lthms)
[coq] Fix install path for theory names with level greater than 1 (#3358, @ejgallego)
Fix a bug introduced in 2.0.0 where the [locks] field in rules with no targets had no effect. (@aalekseyev, report by @craigfe)
From 1.7.0:
doc-comments is changed to after (#1335, @Julow).
This reverts a change introduced in 0.14.0 (#1012).doc-comments option (#1331, @Julow).
This reverts a change introduced in 0.14.0 (#1293).The dune team is pleased to announce the release of dune 2.5.0. This release has been brewing for a while and contains a few interesting features. I'll highlight some of the bigger ones:
The coq support has been thoroughly extended. There's now support for both composition of coq libraries in the same workspace and extraction of coq code to OCaml.
There's a new $ dune upgrade subcommand to help you upgrade dune files from 1.x to 2.x
$ dune utop will now load ppx preprocessors to the toplevel. Ppx authors might enjoy this style of interactive development.
There's a new (subdir ..) stanza that can be used to evaluate stanzas in sub directories. This makes it possible to have a single dune file for an entire project (generated or not).
I'd like to thank everyone who contributed to dune 2.5.0. Your help is greatly appreciated.
Add a --release option meaning the same as -p but without the
package filtering. This is useful for custom dune invocation in opam
files where we don't want -p (#3260, @jeremiedimino)
Fix a bug introduced in 2.4.0 causing .bc programs to be built
with -custom by default (#3269, fixes #3262, @jeremiedimino)
Allow contexts to be defined with local switches in workspace files (#3265, fix #3264, @rgrinberg)
Delay expansion errors until the rule is used to build something (#3261, fix #3252, @rgrinberg, @jeremiedimino)
[coq] Support for theory dependencies and compositional builds using
new field (theories ...) (#2053, @ejgallego, @rgrinberg)
From now on, each version of a syntax extension must be explicitely tied to a
minimum version of the dune language. Inconsistent versions in a
dune-project will trigger a warning for version <=2.4 and an error for
versions >2.4 of the dune language. (#3270, fixes #2957, @voodoos)
[coq] Bump coq lang version to 0.2. New coq features presented this release require this version of the coq lang. (#3283, @ejgallego)
Prevent installation of public executables disabled using the enabled_if field.
Installation will now simply skip such executables instead of raising an
error. (#3195, @voodoos)
dune upgrade will now try to upgrade projects using versions <2.0 to version
2.0 of the dune language. (#3174, @voodoos)
Add a top command to integrate dune with any toplevel, not just
utop. It is meant to be used with the new #use_output directive of
OCaml 4.11 (#2952, @mbernat, @jeremiedimino)
Allow per-package version in generated opam files (#3287, @toots)
[coq] Introduce the coq.extraction stanza. It can be used to extract OCaml
sources (#3299, fixes #2178, @rgrinberg)
Load ppx rewriters in dune utop and add pps field to toplevel stanza. Ppx extensions will now be usable in the toplevel (#3266, fixes #346, @stephanieyou)
Add a (subdir ..) stanza to allow evaluating stanzas in sub directories.
(#3268, @rgrinberg)
Fix a bug preventing one from running inline tests in multiple modes (#3352, @jeremiedimino)
Allow the use of the %{profile} variable in the enabled_if field of the
library stanza. (#3344, @mrmr1993)
Allow the use of %{ocaml_version} variable in enabled_if field of the
library stanza. (#3339, @voodoos)
Fix dune build freezing on MacOS when cache is enabled. (#3249, fixes ##2973, @artempyanykh)
--format-invalid-files to print unparsable parts of the input as verbatim text. This feature is still experimental. (#1026, @gpetiot)module M = functor (K : S) -> struct end and module M (K : S) = struct end would be formatted as the latter, the original syntax is now preserved.doc-comments-val=before|after (#1012, @Julow).
This option set the placement of documentation comment on val and external only.
It is set to after by default.doc-comments is changed from after to before (#1012, #1325, @Julow).
This affects both conventional (default) and ocamlformat profiles.doc-comments (#1293, #1012).
This option depends on a flawed heuristic.
It is replaced by doc-comments-val for val and external declarations.
There is no equivalent to this option in the general case.escape-chars, escape-strings and extension-sugar (#1293).
These options are rarely used and their default behavior is considered to be the right behavior.row_field attributes and the label or arguments, to be
consistent with the non-polymorphic case. (#1299, @CraigFe)let open (#1229, @Julow).
eg. M.f (M.(x) [@attr]) would be formatted to M.f M.(x) [@attr], which would crash OCamlformat[%ext (() [@attr])] or the structure item (() [@attr]) ;;let _ = ... constructs (#1244, @emillon)(x >>= fun y -> y (* A *)) would be droppedmodule M = (val x : S (* A *))[%a:] (#1236, @emillon){< >} (#1238, @emillon)(a.x <- b) [@a] (#1284, @CraigFe)(a <- b) [@a] (#1288, @CraigFe)(a.(b)) [@a] (#1300, @CraigFe)(a; b) [@a] (#1291, @CraigFe){foo : < .. > [@a]} and { foo : < .. > } (#1296, @CraigFe)f ((0, 0) [@a]) would be formatted to f (0, 0) [@a], crashing OCamlformat.>] when an object type is contained in an extension point or attribute payload (#1298, @CraigFe)(0).*(0) (#1304, @Julow).
It was formatting to 0.*(0) which parses as an other expression.(**) would be formatted to (***).class (#1289, @emillon)let f ?a:(A) = () rather than the unparsable let f ?a:A = () (#1305, @CraigFe)On behalf of the dune team, I'm pleased to announce the release of dune 2.4.0. This releases features support for mdx, an interesting take on the notebook paradigm by the RWO team. This release also includes a crucial fix to polling mode which makes it usable in environments with finite memory :slight_smile:.
Happy hacking!
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, @jeremiedimino)
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)
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)
--duniverse-mode to ocaml-mdx rule so that the generated rules work
within a duniversefile label. (#203, #207, @voodoos)--non-deterministic option through the MDX_RUN_NON_DETERMINISTIC
env variables (#208, @NathanReb)--syntax is not set, and add 'markdown' as an alias to 'normal' (#222, @gpetiot)ocaml-mdx deps command to be used by dune to compute file and dir dependencies of an
mdx file. (#217, @voodoos)INSIDE_DUNE when executing shell commands by default (#224, @NathanReb)ocaml-mdx test to crash on some include in toplevel code blocks
(#202, @trefis)direction option, only synchronize from .ml to .md files (#214, @gpetiot)On behalf of the dune team, I'm proud to announce the 2.3.0 release of dune. This release is particularly relevant for users of coq that use dune to build their theories, developers of coq that use dune to build their favorite theorem prover. I'd like to thank @ejgallego for all the hard work to improve dune in this regard.
I'd also like to point out the (strict_package_deps) option that is now available in project files. This option will now ask dune to validate the package dependencies specified in the package stanzas in your dune-project files.
Here's the full change list, and as always, happy hacking!
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
@voodoos)
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, @jeremiedimino)
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. (#3075, @diml)
Do not install vendored packages (#3074, @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)
Additions
Bugs fixed
nlfork-1.5.4
--margin-check to emit a warning if the formatted output exceeds the margin (#1110, @gpetiot)wrap-comments is unset (#1138, #1159, @Julow)ocamlformat_reason (#254, #1185, @emillon).
This tool has never been released to opam, has no known users, and overlaps
with what refmt can do.ocamlformat-diff (#1205, @gpetiot).
This tool has never been released to opam, has no known users, and overlaps
with what merge-fmt can do.break-cases=fit (#1167, @Julow).
This also fixes an unstable comment bug in or-patternsversion-check (#1135, @Wilfred)break-separators=after-and-docked (#1130, @gretay-js)We are pleased to announce the minor release of opam 2.0.6.
As sandbox scripts have been updated, don't forget to run opam init --reinit -ni to update yours.
Note: To homogenise macOS name on system detection, we decided to keep
macos, and convertdarwintomacosin opam. For the moment, to not break jobs & CIs, we keep uploadingdarwin&macosbinaries, but from the 2.1.0 release, onlymacosones will be kept.
Installation instructions (unchanged):
From binaries: run
bash -c "sh <(curl -fsSL https://opam.ocaml.org/install.sh) --version 2.0.6"
or download manually from the Github "Releases" page to your PATH. In this case, don't forget to run opam init --reinit -ni to enable sandboxing if you had version 2.0.0~rc manually installed or to update you sandbox script.
From source, using opam:
opam update; opam install opam-devel
(then copy the opam binary to your PATH as explained, and don't forget to run opam init --reinit -ni to enable sandboxing if you had version 2.0.0~rc manually installed or to update you sandbox script)
From source, manually: see the instructions in the README.
We hope you enjoy this new minor version, and remain open to bug reports and suggestions.
NOTE: this article is cross-posted on opam.ocaml.org and ocamlpro.com. Please head to the latter for the comments!
Fiber.finalize function of the concurrency monad of Dune,
causing a race condition at the user level (#3009, fix #2958, @diml)