See full changelog
- merlin binary
- dune: restore compatibility with dune 1.8.0 (#1157, #1153)
Read the latest releases and updates from the OCaml ecosystem.
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 a
env_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)
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 happy to announce a alpha for opam 2.1.0, one year and a half in the making after the release of 2.0.0.
Many new features made it in (see the complete changelog or release note for the details), but here are a few highlights of this release.
The two following features have been around for a while as plugins and are now completely integrated in the core of opam. No extra installs needed anymore, and a more smooth experience.
A number of opam packages depend on tools or libraries installed on the system, which are out of the scope of opam itself. Previous versions of opam added a specification format, and opam 2.0 already handled checking the OS and extracting the required system package names.
However, the workflow generally involved letting opam fail once, then installing the dependencies and retrying, or explicitely using the opam-depext plugin, which was invaluable for CI but still incurred extra steps.
With opam 2.1.0, depexts are seamlessly integrated, and you basically won't have to worry about them ahead of time:
sudo
, or just run the provided commands yourself.This is all fully configurable, and can be bypassed without tricky commands when you need it (e.g. when you compiled a dependency yourself).
To share a project for development, it is often necessary to be able to reproduce the exact same environment and dependencies setting — as opposed to allowing a range of versions as opam encourages you to do for releases.
For some reason, most other package managers call this feature "lock files".
Opam can handle those in the form of [foo.]opam.locked
files, and the
--locked
option.
With 2.1.0, you no longer need a plugin to generate these files: just running
opam lock
will create them for existing opam
files, enforcing the exact
version of all dependencies (including locally pinned packages).
If you check-in these files, new users would just have run
opam switch create . --locked
on a fresh clone to get a local switch ready to
build the project.
This one is completely new: fans of the Monorepo rejoice, opam is now able to handle projects in subtrees of a repository.
opam pin PROJECT_ROOT --subpath SUB_PROJECT
, opam will look for
PROJECT_ROOT/SUB_PROJECT/foo.opam
. This will behave as a pinning to
PROJECT_ROOT/SUB_PROJECT
, except that the version-control handling is done
in PROJECT_ROOT
.opam pin PROJECT_ROOT --recursive
to automatically lookup all sub-trees
with opam files and pin them.Previous versions of opam defined switches based on base packages, which typically included a compiler, and were immutable. Opam 2.1.0 instead defines them in terms of an invariant, which is a generic dependency formula.
This removes a lot of the rigidity opam switch
commands had, with little
changes on the existing commands. For example, opam upgrade ocaml
commands are
now possible; you could also define the invariant as ocaml-system
and have
its version change along with the version of the OCaml compiler installed
system-wide.
The new opam option
command allows to configure several options,
without requiring manual edition of the configuration files.
For example:
opam option jobs=6 --global
will set the number of parallel build
jobs opam is allowed to run (along with the associated jobs
variable)opam option depext-run-commands=false
disables the use of sudo
for
handling system dependencies; it will be replaced by a prompt to run the
installation commands.The command opam var
is extended with the same format, acting on switch and
global variables.
In case you plan a possible rollback, you may want to first backup your
~/.opam
directory.
The upgrade instructions are unchanged:
Either from binaries: run
bash -c "sh <(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh) --version 2.1.0~alpha"
or download manually from the Github "Releases" page to your PATH.
Or from source, manually: see the instructions in the README.
You should then run:
opam init --reinit -ni
This is still a alpha, so a few glitches or regressions are to be expected. Please report them to the bug-tracker. Thanks for trying it out, and hoping you enjoy!
NOTE: this article is cross-posted on opam.ocaml.org and ocamlpro.com. Please head to the latter for the comments!
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://raw.githubusercontent.com/ocaml/opam/master/shell/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)