See full changelog
- Fix location in parse error reporting (#257, @pitag-ha)
Read the latest releases and updates from the OCaml ecosystem.
dune-gen
subcommand that generates testing code for Dune to build
and run with the new mdx
stanza. (#305, @voodoos)Switch verbosity
from 1 to 0. This is the same default that merlin uses.
The old value for verbosity (#433)
Get fresh diagnostics (warning and error messages) on a file save (#438)
Note: If you want the fresh diagnostics to take into account changes in other
files, you likely need to rebuild your project. An easy way to get automatic
rebuilds is to run dune
in a watching mode, e.g.,[dune build --watch].
On behalf of the ocaml-lsp team, I'd like to announce version 1.6.0 of ocaml-lsp-server. The highlight of this release is the updated version of merlin which brings lots of new bug fixes.
Fix interface/implementation switching on Windows (#427)
Correctly parse project paths with spaces and other special characters that must be escaped.
Print types with -short-paths
even if the project wasn't built yet
workdir
configuration value when using the
dune ocaml-merlin
configuration provider the same as when using
dot-merlin-reader
so that ppxes behaves in the same way as before
(#1284, fixes ocaml/dune#4479, discussion in #1292)_
), allow correct typing of these
holes and add a new holes
command that returns the locations of all
holes in the current file along with their types (#1242, #1289)MerlinNextHole
and MerlinPreviousHole
commands to navigate
between holes. Jump to the first hole after destruct (#1287, #1303)merlin-next-hole
and merlin-previous-hole
commands to
navigate holes. Jump to the first hole after calling destruct. (#1291)holes
command and AST node (#1242, #1289)Oops, we went looking but didn't find the changelog for this release 🙈
let open
with closing-on-separate-line
(#1612, @Julow)bisect_ppx
(#1550, @tmattio)ocamlformat-rpc
and a new library ocamlformat-rpc-lib
(#1586, @gpetiot, @voodoos)Support 4.12 and drop support for all earlier versions
Update to the latest version of merlin
Fixed absence of executable bit for installed .cmxs
(#4149, fixes #4148, @bobot)
Fix a race in Dune cache. It was particularly easy to hit this race when using the cache on Windows (#4406, fixes #4167, @snowleopard)
Backport fixes from merlin (#382, #383)
Encode request & notification params
in a list. This is required by the
spec. (#351)
Make patdiff
show refined diffs (#4257, fixes #4254, @hakuch)
Fixed a bug that could result in needless recompilation under Windows due to
case differences in the result of Sys.getcwd
(observed under emacs
).
(#3966, @nojb).
Restore compatibility with Coq < 8.10 for coq-lang < 0.3 , document
that (using coq 0.3)
does require Coq 8.10 at least (#4224, fixes
#4142, @ejgallego)
Add a META rule for compiler-libs.native-toplevel
(#4175, @altgr)
No longer call chmod
on symbolic links (fixes #4195, @dannywillems)
Have dune
communicate the location of the standard library directory to
merlin
(#4211, fixes #4188, @nojb)
Workaround incorrect exception raised by Unix.utimes
(OCaml PR#8857) in
Path.touch
on Windows. This fixes dune cache in direct mode on Windows.
(#4223, @dra27)
dune ocaml-merlin
is now able to provide configuration for source files in
the _build
directory. (#4274, @voodoos)
Automatically delete left-over Merlin files when rebuilding for the first time
a project previously built with Dune <= 2.7
. (#4261, @voodoos, @aalekseyev)
Fix ppx.exe
being compiled for the wrong target when cross-compiling
(#3751, fixes #3698, @toots)
dune top
correctly escapes the generated toplevel directives, and make it
easier for dune top
to locate C stubs associated to concerned libraries.
(#4242, fixes #4231, @nojb)
Do not pass include directories containing native objects when compiling bytecode (#4200, @nojb)
Fix crash when META file for compiler-libs.toplevel
is present
(@jeremiedimino, #4249)
String.get
and similar calls used to be automatically rewritten to their corresponding infix form .()
, that was incorrect when using the -unsafe
compilation flag. Now the concrete syntax of these calls is preserved.merlin_analysis
and merlin_utils
libraryFeedback on this post is welcomed on Discuss!
On behalf of the opam team, it gives me great pleasure to announce the third beta release of opam 2.1. Don’t worry, you didn’t miss beta3 - we had an issue with a configure script that caused beta2 to report as beta3 in some instances, so we skipped to beta4 to avoid any further confusion!
We encourage you to try out this new beta release: there are instructions for doing so in our wiki. The instructions include taking a backup of your ~/.opam
root as part of the process, which can be restored in order to wind back. Please note that local switches which are written to by opam 2.1 are upgraded and will need to be rebuilt if you go back to opam 2.0. This can either be done by removing _opam
and repeating whatever you use in your build process to create the switch, or you can use opam switch export switch.export
to backup the switch to a file before installing new packages. Note that opam 2.1 shouldn’t upgrade a local switch unless you upgrade the base packages (i.e. the compiler).
option
and expanded var
sub-commands)In opam 2.0, when a switch is created the packages selected are put into the “base” of the switch. These packages are not normally considered for upgrade, in order to ease pressure on opam’s solver. This was a much bigger concern early on in opam 2.0’s development, but is less of a problem with the default mccs solver.
However, it’s a problem for system compilers. opam would detect that your system compiler version had changed, but be unable to upgrade the ocaml-system package unless you went through a slightly convoluted process with --unlock-base
.
In opam 2.1, base packages have been replaced by switch invariants. The switch invariant is a package formula which must be satisfied on every upgrade and install. All existing switches’ base packages could just be expressed as package1 & package2 & package3
etc. but opam 2.1 recognises many existing patterns and simplifies them, so in most cases the invariant will be "ocaml-base-compiler" {= 4.11.1}
, etc. This means that opam switch create my_switch ocaml-system
now creates a switch invariant of "ocaml-system"
rather than a specific version of the ocaml-system
package. If your system OCaml package is updated, opam upgrade
will seamlessly switch to the new package.
This also allows you to have switches which automatically install new point releases of OCaml. For example:
opam switch create ocaml-4.11 --formula='"ocaml-base-compiler" {>= "4.11.0" & < "4.12.0~"}' --repos=old=git+https://github.com/ocaml/opam-repository#a11299d81591
opam install utop
Creates a switch with OCaml 4.11.0 (the --repos=
was just to select a version of opam-repository from before 4.11.1 was released). Now issue:
opam repo set-url old git+https://github.com/ocaml/opam-repository
opam upgrade
and opam 2.1 will automatically offer to upgrade OCaml 4.11.1 along with a rebuild of the switch. There’s not yet a clean CLI for specifying the formula, but we intend to iterate further on this with future opam releases so that there is an easier way of saying “install OCaml 4.11.x”.
opam has long included the ability to install system dependencies automatically via the depext plugin. This plugin has been promoted to a native feature of opam 2.1.0 onwards, giving the following benefits:
opam depext
, opam always checks depexts (there are options to disable this or automate it for CI use). Installation of an opam package in a CI system is now as easy as opam install .
, without having to do the dance of opam pin add -n/depext/install
. Just one command now for the common case!opam depext
stage and a different solution for the opam install
stage, resulting in some depexts missing.opam install mysql
will offer to install conf-mysql
and mysql
, but if you have the MariaDB dev libraries installed, opam will offer to install conf-mariadb
and mysql
.When opam was first released, it had the mission of gathering together scattered OCaml source code to build a community repository. As time marches on, the size of the opam repository has grown tremendously, to over 3000 unique packages with over 18000 unique versions. opam looks at all these packages and is designed to solve for the best constraints for a given package, so that your project can keep up with releases of your dependencies.
While this works well for libraries, we need a different strategy for projects that need to test and ship using a fixed set of dependencies. To satisfy this use-case, opam 2.0.0 shipped with support for using project.opam.locked
files. These are normal opam files but with exact versions of dependencies. The lock file can be used as simply as opam install . --locked
to have a reproducible package installation.
With opam 2.1.0, the creation of lock files is also now integrated into the client:
opam lock
will create a .locked
file for your current switch and project, that you can check into the repository.opam switch create . --locked
can be used by users to reproduce your dependencies in a fresh switch.This lets a project simultaneously keep up with the latest dependencies (without lock files) while providing a stricter set for projects that need it (with lock files).
A new --cli
switch was added to the first beta release, but it’s only now that it’s being widely used. opam is a complex enough system that sometimes bug fixes need to change the semantics of some commands. For example:
opam show --file
needed to change behaviouropam config
was becoming cluttered and some things want to move to opam var
opam switch install 4.11.1
still works in opam 2.0, but it’s really an OPAM 1.2.2 syntax.Changing the CLI is exceptionally painful since it can break scripts and tools which themselves need to drive opam
. CLI versioning is our attempt to solve this. The feature is inspired by the (lang dune ...)
stanza in dune-project
files which has allowed the Dune project to rename variables and alter semantics without requiring every single package using Dune to upgrade their dune
files on each release.
Now you can specify which version of opam you expected the command to be run against. In day-to-day use of opam at the terminal, you wouldn’t specify it, and you’ll get the latest version of the CLI. For example: opam var --global
is the same as opam var --cli=2.1 --global
. However, if you issue opam var --cli=2.0 --global
, you will told that --global
was added in 2.1 and so is not available to you. You can see similar things with the renaming of opam upgrade --unlock-base
to opam upgrade --update-invariant
.
The intention is that --cli
should be used in scripts, user guides (e.g. blog posts), and in software which calls opam. The only decision you have to take is the oldest version of opam which you need to support. If your script is using a new opam 2.1 feature (for example opam switch create --formula=
) then you simply don’t support opam 2.0. If you need to support opam 2.0, then you can’t use --formula
and should use --packages
instead. opam 2.0 does not have the --cli
option, so for opam 2.0 instead of --cli=2.0
you should set the environment variable OPAMCLI
to 2.0
. As with all opam command line switches, OPAMCLI
is simply the equivalent of --cli
which opam 2.1 will pick-up but opam 2.0 will quietly ignore (and, as with other options, the command line takes precedence over the environment).
Note that opam 2.1 sets OPAMCLI=2.0
when building packages, so on the rare instances where you need to use the opam
command in a package build:
command (or in your build system), you must specify --cli=2.1
if you’re using new features.
There’s even more detail on this feature in our wiki. We’re still finalising some details on exactly how opam
behaves when --cli
is not given, but we’re hoping that this feature will make it much easier in future releases for opam to make required changes and improvements to the CLI without breaking existing set-ups and tools.
opam install
now has a --download-only
flag (#4036), allowing opam’s caches to be primedopam init
now advises the correct shell-specific command for eval $(opam env)
(#4427)post-install
hooks are now allowed to modify or remove installed files (#4388)opamfile-loc
with the location of the installed package opam file (#4402)opam update
now has --depexts
flag (#4355), allowing the system package manager to update tooos-family=ubuntu
is now treated as os-family=debian
(#4441)opam lint
now checks that strings in filtered package formulae are booleans or variables (#4439)and many other bug fixes as listed on the release page.
Several features that were formerly plugins have been integrated into opam 2.1.0. We have also developed some new plugins that satisfy emerging workflows from the community and the core OCaml team. They are available for use with the opam 2.1 beta as well, and feedback on them should be directed to the respective GitHub trackers for those plugins.
The opam compiler
plugin can be used to create switches from various sources such as the main opam repository, the ocaml-multicore fork, or a local development directory. It can use Git tag names, branch names, or PR numbers to specify what to install.
Once installed, these are normal opam switches, and one can install packages in them. To iterate on a compiler feature and try opam packages at the same time, it supports two ways to reinstall the compiler: either a safe and slow technique that will reinstall all packages, or a quick way that will just overwrite the compiler in place.
The opam monorepo
plugin lets you assemble standalone dune workspaces with your projects and all of their opam dependencies, letting you build it all from scratch using only Dune and OCaml. This satisfies the “monorepo” workflow which is commonly requested by large projects that need all of their dependencies in one place. It is also being used by projects that need global cross-compilation for all aspects of a codebase (including C stubs in packages), such as the MirageOS unikernel framework.
This is anticipated to be the final beta in the 2.1 series, and we will be moving to release candidate status after this. We could really use your help with testing this release in your infrastructure and projects and let us know if you run into any blockers. If you have feature requests, please also report them on our issue tracker -- we will be planning the next release cycle once we ship opam 2.1.0 shortly.
Sync_error
) instead of code 40
(Package_operation_error
) when all failures happend during fetching
[#4416 @rjbou - fix #4214]--download-only
flag [#4071 @Armael @rjbou - fix #4036]opam update --depexts
to request an update of the system package manager databases [#4379 @AltGr - fix #4355]opam init
[#4370 @rjbou - fix #4368]opam init
[#4427 @freevoid]init
script check in csh [#4482 @gahr]stdout
of pre-
and post-session
hooks is now propagated to the user [#4382 @AltGr - fix #4359]post-install
hooks are now allowed to modify or remove installed files [#4388 @lefessan]opam remove --autoremove <PKG>
to not autoremove unrelated packages [#4369 @AltGr - fix #4250 #4332]opam remove -a
could trigger conflicts in the presence of orphan packages [#4369 @AltGr - fix #4250 #4332]--update-invariant
when removing or changing package name [#4360 @AltGr - fix #4353]--update-invariant
[#4431 @AltGr]opamfile
format upgrade on pinning [#4366 @rjbou - fix #4365]pin --show
actually pinning [#4367 @rjbou - fix #4348]--working-dir
with local switches [#4433 @rjbou]opamfile-loc
, containing the location of installed package opam file [#4402 @rjbou]arch
detection when using 32bit mode on ARM64 [#4462 @kit-ty-kate]arch
detection of i486 [#4462 @kit-ty-kate]opam option depext-bypass-=["XXX"]
[#4428 @rjbou]os-family=ubuntu
as os-family=debian
[#4441 @alan-j-hu]opam
files to 2.0 [#4371 @AltGr]custom-libinstall
for opam-custom-install
use [#4401 @AltGr]opam admin cache
[#4384 @AltGr - fix #4352]opam admin check --cycles
on repositories with huge cliques [#4392 @AltGr]openssl
[#4449 @Blaisorblade - fix #4448]subst
applications [#4464 @rjbou - fix #4453]--read-only
is not used [#4467 @AltGr - fix #4354]We are pleased to announce the minor release of opam 2.0.8.
This new version contains some backported fixes:
.
to PATH
. [#4078]ccache
versions. [#4079 and #4087]~/.cache
is a symlink. [#4068]opam init
. [#4020 & #4092]/tmp
read-write, regardless of TMPDIR
[#3742, addressing ocaml/opam-repository#13339]pre-
and post-session
hooks can now print to the console [#4359]opam-installer
now correctly builds from sources [#4173]arch
variable detection when using 32bit mode on ARM64 and i486 [#4462]A more complete release note is available.
Installation instructions (unchanged):
From binaries: run
bash -c "sh <(curl -fsSL https://opam.ocaml.org/install.sh) --version 2.0.8"
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, and published in discuss.ocaml.org. Please head to the latter for the comments!
-as-ppx
: take into account the -loc-filename
argument (#197, @pitag-ha)register_transformation
(#202, @pitag-ha)-cookie
argument into account, also when the input is a
binary AST (@pitag-ha, #209)run_as_ppx_rewriter
: take into account the arguments
-loc-filename
, apply
and dont-apply
(#205, @pitag-ha)raise
and update_loc
(#205, @pitag-ha)Fixed wrong workspace discovery from dune ocaml-merlin
(#4127, fixes #4125,
@voodoos)
Fixed memory blow up introduced in 2.8.0 (#4144, fixes #4134, @jeremiedimino)
Configurator: always link the C libraries in the build command (#4088, @MisterDA).
ocaml
, cram
, toplevel
or include
. (#237, @gpetiot)#require
directive errors (#276, @gpetiot)--root
and --prelude
are checked (#292, @gpetiot)create_process
instead of execvp
to call mdx-test
from mdx
. This fixes running mdx from dune on Windows (#299, @emillon)dune --version
printing n/a
rather than the versionOn behalf of the dune, I'm pleased to announce the release of dune 2.8.0. This release contains many bug fixes, performance improvements, and interesting new features. I'll point out two new features that I'm most excited about.
First is the experimental dune_site
extension that makes it possible to register and load plugins at runtime. This feature is quite involved, but we've documented it extensively in the manual.
Another cool feature is that we've eliminated the need for .merlin files and all the caveats that came with them. Now, merlin talks to dune directly to get precise configuration for every module. Say goodbye to all those "approximate .merlin file" warnings!
I encourage everyone to upgrade as soon as possible, as earlier versions are not compatible with OCaml 4.12. Happy Hacking.
dune rules
accepts aliases and other non-path rules (#4063, @mrmr1993)
Action (diff reference test_result)
now accept reference
to be absent and
in that case consider that the reference is empty. Then running dune promote
will create the reference file. (#3795, @bobot)
Ignore special files (BLK, CHR, FIFO, SOCKET), (#3570, fixes #3124, #3546, @ejgallego)
Experimental: Simplify loading of additional files (data or code) at runtime in programs by introducing specific installation sites. In particular it allow to define plugins to be installed in these sites. (#3104, #3794, fixes #1185, @bobot)
Move all temporary files created by dune to run actions to a single directory
and make sure that actions executed by dune also use this directory by setting
TMPDIR
(or TEMP
on Windows). (#3691, fixes #3422, @rgrinberg)
Fix bootstrap script with custom configuration. (#3757, fixes #3774, @marsam)
Add the executable
field to inline_tests
to customize the compilation
flags of the test runner executable (#3747, fixes #3679, @lubegasimon)
Add (enabled_if ...)
to (copy_files ...)
(#3756, @nojb)
Make sure Dune cleans up the status line before exiting (#3767, fixes #3737, @alan-j-hu)
Add {gitlab,bitbucket}
as options for defining project sources with source
stanza (source (<host> user/repo))
in the dune-project
file. (#3813,
@rgrinberg)
Fix generation of META
and dune-package
files when some targets (byte,
native, dynlink) are disabled. Previously, dune would generate all archives
for regardless of settings. (#3829, #4041, @rgrinberg)
Do not run ocamldep to for single module executables & libraries. The dependency graph for such artifacts is trivial (#3847, @rgrinberg)
Fix cram tests inside vendored directories not being interpreted correctly. (#3860, fixes #3843, @rgrinberg)
Add package
field to private libraries. This allows such libraries to be
installed and to be usable by other public libraries in the same project
(#3655, fixes #1017, @rgrinberg)
Fix the %{make}
variable on Windows by only checking for a gmake
binary
on UNIX-like systems as a unrelated gmake
binary might exist on Windows.
(#3853, @kit-ty-kate)
Fix $ dune install
modifying the build directory. This made the build
directory unusable when $ sudo dune install
modified permissions. (fix
#3857, @rgrinberg)
Fix handling of aliases given on the command line (using the @
and @@
syntax) so as to correctly handle relative paths. (#3874, fixes #3850, @nojb)
Allow link time code generation to be used in preprocessing executable. This makes it possible to use the build info module inside the preprocessor. (#3848, fix #3848, @rgrinberg)
Correctly call git ls-tree
so unicode files are not quoted, this fixes
problems with dune subst
in the presence of unicode files. Fixes #3219
(#3879, @ejgallego)
dune subst
now accepts common command-line arguments such as
--debug-backtraces
(#3878, @ejgallego)
dune describe
now also includes information about executables in addition to
that of libraries. (#3892, #3895, @nojb)
instrumentation backends can now receive arguments via (instrumentation (backend <name> <args>))
. (#3906, #3932, @nojb)
Tweak auto-formatting of dune
files to improve readability. (#3928, @nojb)
Add a switch argument to opam when context is not default. (#3951, @tmattio)
Avoid pager when running $ git diff
(#3912, @AltGr)
Add (root_module ..)
field to libraries & executables. This makes it
possible to use library dependencies shadowed by local modules (#3825,
@rgrinberg)
Allow (formatting ...)
field in (env ...)
stanza to set per-directory
formatting specification. (#3942, @nojb)
[coq] In coq.theory
, :standard
for the flags
field now uses the
flags set in env
profile flags (#3931 , @ejgallego @rgrinberg)
[coq] Add -q
flag to :standard
coqc
flags , fixes #3924, (#3931 , @ejgallego)
Add support for Coq's native compute compilation mode (@ejgallego, #3210)
Add a SUFFIX
directive in .merlin
files for each dialect with no
preprocessing, to let merlin know of additional file extensions (#3977,
@vouillon)
Stop promoting .merlin
files. Write per-stanza Merlin configurations in
binary form. Add a new subcommand dune ocaml-merlin
that Merlin can use to
query the configuration files. The allow_approximate_merlin
option is now
useless and deprecated. Dune now conflicts with merlin < 3.4.0
and
ocaml-lsp-server < 1.3.0
(#3554, @voodoos)
Configurator: fix a bug introduced in 2.6.0 where the configurator V1 API doesn't work at all when used outside of dune. (#4046, @aalekseyev)
Fix libexec
and libexec-private
variables. In cross-compilation settings,
they now point to the file in the host context. (#4058, fixes #4057,
@TheLortex)
When running $ dune subst
, use project metadata as a fallback when package
metadata is missing. We also generate a warning when (name ..)
is missing in
dune-project
files to avoid failures in production builds.
Remove support for passing -nodynlink
for executables. It was bypassed in
most cases and not correct in other cases in particular on arm32.
(#4085, fixes #4069, fixes #2527, @emillon)
Generate archive rules compatible with 4.12. Dune longer attempt to generate an archive file if it's unnecessary (#3973, fixes #3766, @rgrinberg)
Fix generated Merlin configurations when multiple preprocessors are defined for different modules in the same folder. (#4092, fixes #2596, #1212 and #3409, @voodoos)
Add the option use_standard_c_and_cxx_flags
to dune-project
that 1.
disables the unconditional use of the ocamlc_cflags
and ocamlc_cppflags
from ocamlc -config
in C compiler calls, these flags will be present in the
:standard
set instead; and 2. enables the detection of the C compiler family
and populates the :standard
set of flags with common default values when
building CXX stubs. (#3875, #3802, fix #3718 and #3528, @voodoos)
github
library, avoiding warning with deprecated authentication method--no-browser
to disable browser popupOn behalf of the ocaml-lsp team, it is my pleasure to announce version 1.4.0. This release introduces support for automatic signature help. Signature help is not yet present in all possible contexts. We intend to improve to support as many relevant language constructs as possible in the future. Many thanks to @mnxn for implementing this feature.
The full change log is replicated at the end of this post for your convenience.
Happy Holidays!
Support cancellation notifications when possible. (#323)
Implement signature help request for functions (#324)
Server LSP requests & notifications concurrently. Requests that require merlin are still serialized. (#330)
On behalf of the ocaml-lsp team, I’d like to announce version 1.3.0.
This release an improvement in keyword completion and a new code action. Keywords are now filtered by the context the user requested the completion, and there’s a new code action to quickly populate .mli files with the the inferred types from the .ml file.
Code action to insert inferred module interface (#308)
Filter keywords by context (#307)
On behalf of the ocaml-lsp team, I’d like to announce version 1.2.0.
This version contains many bug fixes and some performance improvements A couple of interesting features made it in as well:
Add keyword completion
Add go to declaration functionality to jump to a value's specification in a .mli file (#294)
#245: correctly use mutexes on OpenBSD (#264)
#268: Do not use vendored libraries when building the lsp package (#260)
#271: Clear diagnostics when files are closed
Disable non-prefix completion. There's no reliably way to trigger it and it can be slow.
if%ext
with if-then-else=keyword-first
(#1419, #1543, @gpetiot)match
and try
keywords (#1458, @gpetiot)ocamlformat.el
for submission to MELPA (#1476, #1495, @bcc32)
ocamlformat.el
(#1474, @bcc32)ocamlformat.el
buffer replacement for MacOS Emacs (#1481, @juxd)function
match (#1498, @gpetiot)open%ext M
will not get rewritten to [%%ext open M]
.Ppxlib.Driver.map_signature
(#194, @kit-ty-kate)Additions
Oops, we went looking but didn't find the changelog for this release 🙈
opam exec
[#4341 @altgr]--with-version
was not respected by opam pin
[#4346 @altgr]Initial Release
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)