OCaml Changelog

RSS

Read the latest releases and updates from the OCaml ecosystem.

Dune 1.4.0

The dune team is pleased to announce the 1.4.0 release of Dune. The highlight of this release is the improved support for menhir, in particular the long awaited --infer flag. This seemingly small feature took quite a bit of coordination between the maintainers of dune and menhir. So I'd like to thank @fpottier for helping us out with this by adding better support for dune in menhir itself, and implementing the majority of the support in dune as well.

The rest of the release is mostly bug fixes, but one notable feature is that dune is now C-c friendly. Dune will now resume exactly where it's stopped after interruption instead of restarting the entire build.

EDIT: I actually forgot to mention that this release also includes integration with OCamlFormat due to @emillon. Initially, I had thought that this feature was released in 1.3.0. Sorry about that!

See full changelog
  • Do not fail if the output of ocamlc -config doesn't include standard_runtime (#1326, @jeremiedimino)

  • Let Configurator.V1.C_define.import handle negative integers (#1334, @Chris00)

  • Re-execute actions when a target is modified by the user inside _build (#1343, fix #1342, @jeremiedimino)

  • Pass --set-switch to opam (#1341, fix #1337, @jeremiedimino)

  • Fix bad interaction between multi-directory libraries the menhir stanza (#1373, fix #1372, @jeremiedimino)

  • Integration with automatic formatters (#1252, fix #1201, @emillon)

  • Better error message when using (self_build_stubs_archive ...) and (c_names ...) or (cxx_names ...) simultaneously. (#1375, fix #1306, @nojb)

  • Improve name detection for packages when the prefix isn't an actual package (#1361, fix #1360, @rgrinberg)

  • Support for new menhir rules (#863, fix #305, @fpottier, @rgrinberg)

  • Do not remove flags when compiling compatibility modules for wrapped mode (#1382, fix #1364, @rgrinberg)

  • Fix reason support when using staged_pps (#1384, @charlesetc)

  • Add support for enabled_if in rule, menhir, ocamllex, ocamlyacc (#1387, @jeremiedimino)

  • Exit gracefully when a signal is received (#1366, @jeremiedimino)

  • Load all defined libraries recursively into utop (#1384, fix #1344, @rgrinberg)

  • Allow to use libraries bytes, result and uchar without findlib installed (#1391, @nojb)

  • Take argument to self_build_stubs_archive into account. (#1395, @nojb)

  • Fix bad interaction between env customization and vendored projects: when a vendored project didn't have its own env stanza, the env stanza from the enclosing project was in effect (#1408, @jeremiedimino)

  • Fix stop early bug when scanning for watermarks (#1423, @struktured)

See full changelog
  • Improve: set break-sequences in sparse and compact profiles (#455, @jberdine)
  • Improve: keep a space inside tuples parens (#453, @gpetiot)
  • Improve: --root option to isolate configuration files (#402, @gpetiot)
  • Fix: missing parens around partially-applied :: (#452, @jberdine)
  • Fix: parens around expressions with attributes (#441, @gpetiot)
  • Build: do not execute shell scripts directly in build (#448, @dra27)
  • Add: read ocp indent config files (#445, @gpetiot)
  • Improve: option 'break-sequences' (#434, @gpetiot)
  • Improve: option 'no-indicate-multiline-delimiters' to have less whitespaces (#429, @gpetiot)
  • Fix: outdent before arrow (#444, @gpetiot)
  • Improve: User documentation (#449, @gpetiot)
  • Improve: option 'cases-exp-indent' to adjust indent (#428, @gpetiot)
  • Add: compact and sparse profiles (#408, @jberdine)
  • Improve: explicit error message in case of 'permission denied' error (#425, @gpetiot)
  • Fix: comment stabilization in Pexp_override (#422, @gpetiot)
  • Fix: corner case while formatting type variables (#440, @hhugo)
  • Fix: many missing comments (#418, @hhugo)
  • Fix: asserts and attributes (#414, @hhugo)
  • Fix: extension and attribute (#417, @hhugo)
  • Improve: support for function%ext (#416, @hhugo)
  • Fix: Inconsistent spacing around comments in signatures vs structures (#437, @gpetiot)
  • Improve: better error with location when comment dropped (#401, @gpetiot)
  • Fix doc comments (#413, @hhugo)
  • Improve: use input_name for error messages (@hhugo)
  • Improve: break after inherit (@hhugo)
  • Fix: aliases inside constructor declaration (#424, @gpetiot)
  • Fix: broken invariant for Pmod_unpack (#421, @gpetiot)
  • Fix: print error details in debug mode only (#420, @hhugo)
  • Fix: mark_parenzed_inner_nested_match (@hhugo)
  • Improve: tune the janestreet profile (@hhugo)
  • Improve: disable ocamlformat if no dot ocamlformat in the project (#391, @hhugo)
  • Improve: new option to control spacing around let bindings (#344, @hhugo)
  • Fix: prec of string/array sugar (#381, @hhugo)
  • Fix: lost comment in constraint expression (#400, @gpetiot)
  • Fix: lost cmt near functor (#399, @gpetiot)
  • Improve: preset profiles (default & janestreet) (#390, @gpetiot)
  • Improve: try to fit simple list/array elements on a single line (#375, @gpetiot)
  • Fix: bad comment spacing with module-item-spacing=compact (#395, @gpetiot)
  • Fix: dropped comment in revapply of extension (#394, @gpetiot)
  • Improve: let-and structures spacing depends on module-item-spacing (#367, @gpetiot)
  • Fix: consecutive prefix operator (#386, @hhugo)
  • Fix: invalid (#383, @hhugo)
  • Fix: lazy and alias (#388, @hhugo)
  • Improve: main loop and error reporting (#389, @hhugo)
  • Fix: exposed_left_typ (#385, @hhugo)
  • Fix: rec functor (#382, @hhugo)
  • Fix: while%ext/for%ext (@hhugo)
  • Fix: more on class (@hhugo)
  • Fix: invalid syntax on class (@hhugo)
  • Improve: follow XDG for global config files (@gpetiot)
  • Improve: add support for bigarray sugar index operator (@hhugo)
  • Add: support reading input from stdin (#353, @bkase)
  • Fix: the precedence of options (@gpetiot)
  • Improve: doc of config option choice alternatives (#354, @jberdine)
  • Improve: string formatting (@hhugo)
See full changelog
  • Switched build to dune (thanks to @nojb).
  • Added support for 4.07.1
  • Various bugfixes in the backend and in the editor modes.
  • Fix build on OCaml 4.02 to 4.04

Dune 1.3.0

It is my pleasure to announce the release of Dune 1.3.0. This release does not contain many features, but it does contain a few important bug fixes. Everyone is encouraged to upgrade.

Happy Hacking.

See full changelog
  • Support colors on Windows (#1290, @jeremiedimino)

  • Allow dune.configurator and base to be used together (#1291, fix #1167, @jeremiedimino)

  • Support interrupting and restarting builds on file changes (#1246, @kodek16)

  • Fix findlib-dynload support with byte mode only (#1295, @bobot)

  • Make dune rules -m output a valid makefile (#1293, @jeremiedimino)

  • Expand variables in (targets ..) field (#1301, #1320, fix #1189, @nojb, @rgrinberg, @jeremiedimino)

  • Fix a race condition on Windows that was introduced in 1.2.0 (#1304, fix #1303, @jeremiedimino)

  • Fix the generation of .merlin files to account for private modules (@rgrinberg, fix #1314)

  • Exclude the local opam switch directory (_opam) from the list of watched directories (#1315, @dysinger)

  • Fix compilation of the module generated for findlib.dynload (#1317, fix #1310, @jeremiedimino)

  • Lift restriction on copy_files and copy_files# stanzas that files to be copied should be in a subdirectory of the current directory. (#1323, fix #911, @nojb)

See full changelog
  • Determine opam-repository fork user from URI (#64, @NathanReb and @diml)
  • All subcommands now support multiple package names (@samoht)
  • Do not remove Makefile from the distribution archives (#71, @samoht)
  • Do not duplicate version strings in opam file (#72, @samoht)
  • Fix configuration file upgrade from 0.2 (#55, @samoht)
  • Add a --tag option to select the release tag (@samoht)
  • Add a --version option to select the release version (@samoht)
  • Fix --keep-v (#70, @samoht)
  • Make dune-release <OPTIONS> a shorchut to dune-release bistro <OPTIONS> (#75, @samoht)
  • Add a --no-open option to not open a browser after creating a new P (#79, @samoht)
  • Control --keep-v and --no-auto-open via options in the config file (#79, @samoht)
  • Be flexible with file names (#86 and #20, @anuragsoni)

Ppxlib 0.3.1

See full changelog
  • Add Attribute.declare_with_name_loc (#33, @diml)
  • Let the tool name pass thought when used as a -ppx (#41, @diml)
  • Update the AST to 4.06 (#8, @xclerc)

We are happy to announce the final release of opam 2.0.0.

A few weeks ago, we released a last release candidate to be later promoted to 2.0.0, synchronised with the opam package repository upgrade.

You are encouraged to update as soon as you see fit, to continue to get package updates: opam 2.0.0 supports the older formats, and 1.2.2 will no longer get regular updates. See the Upgrade Guide for details about the new features and changes.

The website opam.ocaml.org has been updated, with the full 2.0.0 documentation pages. You can still find the documentation for the previous versions in the corresponding menu.

Package maintainers should be aware of the following:

  • the master branch of the opam package repository is now in the 2.0.0 format
  • package submissions must accordingly be made in the 2.0.0 format, or using the new version of opam-publish (2.0.0)
  • anything that was merged into the repository in 1.2 format has been automatically updated to the 2.0.0 format
  • the 1.2 format repository has been forked to its own branch, and will only be updated for critical fixes

For custom repositories, the advice remains the same.


Installation instructions (unchanged):

  1. From binaries: run

    sh <(curl -sL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)
    

    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.

  2. 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)

  3. From source, manually: see the instructions in the README.

We hope you enjoy this new major 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!

Ppxlib 0.2.2

See full changelog

Oops, we went looking but didn't find the changelog for this release 🙈

Dune 1.2.1

Dune 1.2.1 includes a few critical bug fixes over 1.2.0. Everyone is encouraged to upgrade as soon as possible.

On behalf of the dune team,

Happy hacking.

See full changelog
  • Enrich the dune Emacs mode with syntax highlighting and indentation. New file dune-flymake to provide a hook dune-flymake-dune-mode-hook to enable linting of dune files. (#1265, @Chris00)

  • Pass link_flags to cc when compiling with Configurator.V1.c_test (#1274, @rgrinberg)

  • Fix digest calculation of aliases. It should take into account extra bindings passed to the alias (#1277, fix #1276, @rgrinberg)

  • Fix a bug causing dune to fail eagerly when an optional library isn't available (#1281, @jeremiedimino)

  • ocamlmklib should use response files only if ocaml >= 4.08 (@1268, @bryphe)

Dune 1.2.0

On behalf of the dune team, I'm pleased to announce the release of Dune 1.2.0. This release contains many new goodies which I will not describe here. This is because Etienne Millon has prepared a blog post for this release: https://tarides.com/2018-09-06-dune-1-2-0.html

I'd also like to personally thank him for all work he's done to make this release so great.

As usual, the change log is replicated below for your convenience.

Happy hacking!

See full changelog
  • Ignore stderr output when trying to find out the number of jobs available (#1118, fix #1116, @jeremiedimino)

  • Fix error message when the source directory of copy_files does not exist. (#1120, fix #1099, @emillon)

  • Highlight error locations in error messages (#1121, @emillon)

  • Display actual stanza when package is ambiguous (#1126, fix #1123, @emillon)

  • Add dune unstable-fmt to format dune files. The interface and syntax are still subject to change, so use with caution. (#1130, fix #940, @emillon)

  • Improve error message for dune utop without a library name (#1154, fix #1149, @emillon)

  • Fix parsing ocamllex stanza in jbuild files (#1150, @rgrinberg)

  • Highlight multi-line errors (#1131, @anuragsoni)

  • Do no try to generate shared libraries when this is not supported by the OS (#1165, fix #1051, @jeremiedimino)

  • Fix Flags.write_{sexp,lines} in configurator by avoiding the use of Stdune.Path (#1175, fix #1161, @rgrinberg)

  • Add support for findlib.dynload: when linking an executable using findlib.dynload, automatically record linked in libraries and findlib predicates (#1172, @bobot)

  • Add support for promoting a selected list of files (#1192, @jeremiedimino)

  • Add an emacs mode providing helpers to promote correction files (#1192, @jeremiedimino)

  • Improve message suggesting to remove parentheses (#1196, fix #1173, @emillon)

  • Add (wrapped (transition "..message..")) as an option that will generate wrapped modules but keep unwrapped modules with a deprecation message to preserve compatibility. (#1188, fix #985, @rgrinberg)

  • Fix the flags passed to the ppx rewriter when using staged_pps (#1218, @jeremiedimino)

  • Add (env var) to add a dependency to an environment variable. (#1186, @emillon)

  • Add a simple version of a polling mode: dune build -w keeps running and restarts the build when something change on the filesystem (#1140, @kodek16)

  • Cleanup the way we detect the library search path. We no longer call opam config var lib in the default build context (#1226, @jeremiedimino)

  • Make test stanzas honor the -p flag. (#1236, fix #1231, @emillon)

  • Test stanzas take an optional (action) field to customize how they run (#1248, #1195, @emillon)

  • Add support for private modules via the private_modules field (#1241, fix #427, @rgrinberg)

  • Add support for passing arguments to the OCaml compiler via a response file when the list of arguments is too long (#1256, @jeremiedimino)

  • Do not print diffs by default when running inside dune (#1260, @jeremiedimino)

  • Interpret $ dune build dir as building the default alias in dir. (#1259, @rgrinberg)

  • Make the dynlink library available without findlib installed (#1270, fix #1264, @rgrinberg)

See full changelog
  • Improve: simplify setting option defaults, slight --help improvement (#350, @jberdine)
  • Improve: update emacs mode to use replace-buffer-contents (#345, @hhugo)
  • Improve: add option to not force-break structs (#346, @jberdine)
  • Improve: move 'formatting' options into separate section (#348, @gpetiot)
  • Improve: fun sugar (@hhugo)
  • Improve: add option to omit open lines between one-line module items (#303, @gpetiot)
  • Fix: infix ops (@hhugo)
  • Improve: reformat files with no locations (@hhugo)
  • Improve: better error when max-iters = 1 (@hhugo)
  • Improve: breaking before arrows in pattern match cases (@jberdine)
  • Improve: no parens for trailing 'not' (@hhugo)
  • Improve: missing break hint, fix #331 (@hhugo)
  • Improve: comments before match (#330, @jberdine)
  • Fix: missing comments (@hhugo)
  • Fix: missing attributes due to sugar (@hhugo)
  • Fix: parens non trivial rhs for # infix ops (@hhugo)
  • Improve: let-module-in break before in (#328, @jberdine)
  • Improve: sugar for nestest module_with (@hhugo)
  • Improve: attributes on let bindings (#324, @jberdine)
  • Improve: wrapping of functor args in type declaration (#315, @gpetiot)
  • Fix: comments attachment with infix ops (@hhugo)
  • Fix: comments attachment with Pexp_fun (@hhugo)
  • Fix: docstrings as attributes (@hhugo)
  • Improve: refactor and improve documentation of options (#302, @gpetiot)
  • Improve: error reporting in emacs integration (#304, @jberdine)
  • Improve: pexp_open as final arg of infix op (#314, @jberdine)
  • Fix: missing parens around labeled record pattern arg (@jberdine)
  • Fix: missing attributes (@hhugo)
  • Fix: duplicated (x3) attributes in pexp_letmodule (@hhugo)
  • Improve: allow to locally disable ocamlformat (@hhugo)
  • Improve: corner case indentation of fun -> function (#312, @jberdine)
  • Improve: labeled, optional, and default args (@jberdine)
  • Improve: punning default arg with type constraint (@jberdine)
  • Improve: add options to controls various spaces (#284, @hhugo)
  • Improve: add option to disable wrapping fun args (#283, @hhugo)
  • Improve: add option --break-cases to break each pattern-matching case (#251, @gpetiot)
  • Improve: rename --nested-parens option (@hhugo)
  • Improve: ws before colon for constraint (#293, @hhugo)
  • Improve: option to choose where to parens nested match (@hhugo)
  • Improve: always parens nested match (even the right most one) (@hhugo)
  • Improve: always break for let_and contruct (@hhugo)
  • Fix: missing comments (@hhugo)
  • Improve: Add option to preserve style of local module open (#267, @gpetiot)
  • Improve: preserve extension point formatting (@hhugo)
  • Improve: make double semi consistent between implementation and use_file (#292, @hhugo)
  • Improve: configure ocamlformat using attributes (@hhugo)
  • Improve: extension point (@hhugo)
  • Improve: break in type declaration for variant and record (#280, @hhugo)
  • Fix: memory leak (@hhugo)
  • Test: add ocaml compiler to test suite, and improve make -C test (@jberdine)
  • Fix: unary operator +/- (@hhugo)
  • Fix: doc comments in class (@hhugo)
  • Fix: ocaml bug, sort fields (@hhugo)
  • Improve: empty mod with comments (@hhugo)
  • Improve: disable warning generated by the lexer in quiet mode (@hhugo)
  • Fix: record update (@hhugo)
  • Fix: rec let binding and attribute (@hhugo)
  • Fix: punning (@hhugo)
  • Fix: let open and constraint (@hhugo)
  • Fix: not extension sugar when attribute (@hhugo)
  • Fix: no-comment-check missing case (@hhugo)
  • Fix: string literal (@hhugo)
  • Fix: format of infix in presence of %; (@hhugo)
  • Fix: let binding and type annot (@hhugo)
  • Fix: binding when lhs is an extension (@hhugo)
  • Fix: pat constraint in payload (@hhugo)
  • Fix: let rec with extension (@hhugo)
  • Fix: comments (@hhugo)
  • Fix: comments in fmt_case (@hhugo)
  • Fix: comments around Longident (@hhugo)
  • Fix: missing comment for pmty_with (@hhugo)
  • Improve: add option to disambiguate infix precedence with parens (@jberdine)
  • Improve: not when infix op arg (@jberdine)
  • Improve: add a flag to skip all checks about comments (@hhugo)
  • Improve: breaking of module ident/unpack/extension exps (#269, @jberdine)
  • Fix: literal sub-exps with attributes (@jberdine)
  • Fix: many fixes regarding attributes (@hhugo)
  • Improve: preserve formatting of block comments (#255, @hhugo)
  • Improve: breaking of applications with long literal list args (#258, @jberdine)
  • Fix: sugar functor (@hhugo)
  • Fix: type alias in variant (@hhugo)
  • Improve: formatting of comments (@jberdine)
  • Fix: prefix operators (@hhugo)
  • Fix: exception declarations (@hhugo)
  • Fix: doc comments in structure (#250, @hhugo)
  • Fix: add parens around pat with trailing attr (@hhugo)
  • Fix: let binding and Ppat_or (@hhugo)
  • Fix: be more permissive with pattern (@hhugo)
  • Fix: fix string_literal with when its location includes its attribute (#244, @hhugo)
  • Improve: improve errors returned to the user. (#243, @hhugo)
  • Fix: missing comments for Pexp_construct (#240, @hhugo)
  • Fix: multiple fixes around classes (#242, @hhugo)
  • Fix: comments in empty () and [] (#241, @hhugo)
  • Fix: support empty variant (#239, @hhugo)
  • Fix: add missing attribute (#238, @hhugo)
  • Fix: be more permissive with ppat_interval (#237, @hhugo)
  • Improve: remove trailing ws (#210, @hhugo)
  • Improve: attributes on type declarations (#232, @jberdine)
  • Improve: breaking of infix Array and String get and set ops (#233, @jberdine)
  • Fix: attributes and doc comments (#221, @hhugo)
  • Improve: spacing of module unpack (#230, @jberdine)
  • Improve: no parent for new (@hhugo)
  • Fix: Revert: Improve: remove redundant parens around application operators (@hhugo)
  • Improve: array alignment (#226, @hhugo)
  • Improve: nested array infix ops (#225, @hhugo)
  • Fix: is_adjacent and remove [~inclusive] from [Source.string_between] (@hhugo)
  • Fix: Cmts.CmtSet.split (@hhugo)
  • Improve: Allow comments inside empty delimited "things" (#223, @hhugo)
  • Fix: Source.ends_line (#222, @hhugo)
  • Improve: empty struct and sig (#217, @hhugo)
  • Improve: support for toplevel files (#218, @hhugo)
  • Fix: string literal, fix #214 (#219, @hhugo)
  • Improve: more tuning for functors (@hhugo)
  • Improve: sugar for functor type with multiple args (@hhugo)
  • Improve: sugar for functors with multiple args (@hhugo)
  • Improve: module type with (@hhugo)
  • Improve: break before with/and type (@hhugo)
  • Improve: break between fun args (@hhugo)
  • Improve: module unpacking (#215, @hhugo)
  • Improve: for & while loops (#211, @hhugo)
  • Fix: attributes on ite (#209, @hhugo)
  • Fix: partially applied (+) and (-) (#208, @hhugo)
  • Fix: polymorphic variant (#202, @hhugo)
  • Fix: parens with lazy pat (fix #199) (#201, @hhugo)
  • Improve: omit excess indentation of function cases (@jberdine)
  • Improve: extensions with payloads of multiple structure items (@jberdine)
  • Improve: parenthesization and attribute placement of if-then-else (@jberdine)
  • Fix: do not attach comments to docstrings (@jberdine)
  • Fix: short syntax for extensions (#193, @hhugo)
  • Fix: missing attrs for pcl_fun (@hhugo)
  • Fix: pos of attribute for functors (@hhugo)
  • Fix: () module only if not attrs (@hhugo)
  • Fix: missing attrs for object (@hhugo)
  • Fix: no short form of extension with attribs (@hhugo)
  • Fix: normalization for Pexp_poly and Pexp_constraint (#190, @hhugo)
  • Fix: some parenthesization context checks (#189, @hhugo)
  • Fix: attributes on fun expressions (@jberdine)
  • Fix: extensions with multiple module-level eval expressions (#185, @jberdine)
  • Fix: functor & apply (#182, @hhugo)
  • Fix: module rec with (@hhugo)
  • Fix: more parens in pat_constraint (@hhugo)
  • Improve: tuple & constraint (@hhugo)
  • Improve: empty module (#178, @hhugo)
  • Fix: extensible variant (#177, @hhugo)
  • Fix: index operator (#176, @hhugo)
  • Improve: empty module sig (@hhugo)
  • Fix: add attributes to module signature (@hhugo)
  • Add: support for objects and classes (#173, @hhugo)
  • Improve: remove some redundant parens around tuple types (@jberdine)
  • Fix: args in let bindings (@hhugo)
  • Improve: let module%ext (@hhugo)
  • Fix: infix op in alias (@hhugo)
  • Fix: extensions pat (@hhugo)
  • Fix: limit use of short syntax for extensions (@hhugo)
  • Improve: allow break after Psig_include (@jberdine)
  • Fix: { (a; b) with a; b } (@hhugo)
  • Fix: with type [longident] (@hhugo)
  • Fix: attributes on polymorphic variants (@hhugo)
  • Fix: attribute in let bindings (@hhugo)
  • Fix: private in extensible variant (@hhugo)
  • Fix: gadt in extensible variant (@hhugo)
  • Fix: missing parens in list pattern (@hhugo)
  • Improve: format [new e] like an apply (@hhugo)
  • Fix: parens for constraint (@hhugo)
  • Fix: avoid emitting >] which is an unparsable keyword (#171, @hhugo)
  • Fix: misplaced comments on module type of (@jberdine)

Dune 1.1.1

See full changelog
  • Fix $ jbuilder --dev (#1104, fixes #1103, @rgrinberg)

  • Fix dune exec when --build-dir is set to an absolute path (#1105, fixes #1101, @rgrinberg)

  • Fix duplicate profile argument in suggested command when an external library is missing (#1109, #1106, @emillon)

  • -opaque wasn't correctly being added to modules without an interface. (#1108, fix #1107, @rgrinberg)

  • Fix validation of library name fields and make sure this validation also applies when the name is derived from the public_name. (#1110, fix #1102, @rgrinberg)

  • Fix a bug causing the toplevel env stanza in the workspace file to be ignored when at least one context had (merlin) (#1114, @diml)

Dune 1.1.0

On behalf of the dune team, I'm proud to announce the 1.1.0 release of dune. This release contains a few interesting features that I won't describe in this post, because I've already written a dedicated blog post about this release: http://rgrinberg.com/posts/dune-upcoming-1-1/

See full changelog
  • Fix lookup of command line specified files when --root is given. Previously, passing in --root in conjunction with --workspace or --config would not work correctly (#997, @rgrinberg)

  • Add support for customizing env nodes in workspace files. The env stanza is now allowed in toplevel position in the workspace file, or for individual contexts. This feature requires (dune lang 1.1) (#1038, @rgrinberg)

  • Add enabled_if field for aliases and tests. This field controls whether the test will be ran using a boolean expression language. (#819, @rgrinberg)

  • Make name, names fields optional when a public_name, public_names field is provided. (#1041, fix #1000, @rgrinberg)

  • Interpret X in --libdir X as relative to PREFIX when X is relative (#1072, fix #1070, @jeremiedimino)

  • Add support for multi directory libraries by writing (include_subdirs unqualified) (#1034, @jeremiedimino)

  • Add (staged_pps ...) to support staged ppx rewriters such as ones using the OCaml typer like ppx_import (#1080, fix #193, @jeremiedimino)

  • Use -opaque in the dev profile. This option trades off binary quality for compilation speed when compiling .cmx files. (#1079, fix #1058, @rgrinberg)

  • Fix placeholders in dune subst documentation (#1090, @emillon, thanks @trefis for the bug report)

  • Add locations to errors when a missing binary in PATH comes from a dune file (#1096, fixes #1095, @rgrinberg)

We are happy to announce the opam 2.0.0 final release candidate! 🍾

This release features a few bugfixes over Release Candidate 3. It will be promoted to 2.0.0 proper within a few weeks, when the official repository format switches from 1.2.0 to 2.0.0. After that date, updates to the 1.2.0 repository may become limited, as new features are getting used in packages.

It is safe to update as soon as you see fit, since opam 2.0.0 supports the older formats. See the Upgrade Guide for details about the new features and changes. If you are a package maintainer, you should keep publishing as before for now: the roadmap for the repository upgrade will be detailed shortly.

The opam.ocaml.org pages have also been refreshed a bit, and the new version showing the 2.0.0 branch of the repository is already online. Report any issues here.


Installation instructions:

  1. From binaries: run

    sh <(curl -sL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)
    

    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.

  2. 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)

  3. From source, manually: see the instructions in the README.

We hope you enjoy this new 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!

Dune 1.0.1

See full changelog
  • Fix parsing of %{lib:name:file} forms (#1022, fixes #1019, @diml)

Utop 2.2.0

See full changelog
  • 4.07.0 compatibility (#238, @hcarty)
  • Fix compatibility with latest tuareg-mode (#241, @Wilfred)
  • Do not expand include directories (#242, @sliquister)

Dune 1.0.0

It is my pleasure to announce the 1.0.0 release of Dune!

Dune is a built system for OCaml and Reason projects. It aims at building things fast and providing a smooth user experience.

Dune 1.0.0 is now available on github and in opam.

This is a big milestone for the project as it is the first release using the new Dune name that the community helped to choose. Dune started about a year and a half ago as the more narrow scoped Jbuilder and as since then proven itself to be the right tool for the job.

A big part of the work for this release was preparing the project for long-term support. Dune is the kind of project that will pretty much continue to evolve forever: it needs to keep up with the OCaml compiler evolving, development workflows changing, new kinds of tools with specific needs, etc... While doing so, it also needs to offer stability so that projects released now will continue to build with future versions of Dune.

Meeting these two constraints is a challenge. However, we had to do this for the renaming: we changed many things in Dune using what we learned from the Jbuilder experience. Still, Dune is able to understand and build Jbuilder projects. The mechanism used to support both Jbuilder and Dune projects is fully generic and will be the basis for future evolution.

You can find the full list of changes and bug fixes since Jbuilder 1.0+beta20 on the github release page. Following is an overview of some the new features:

  • General cleanup of the syntax: less parentheses, better behaved variables

  • Introduction of a dune.configurator library to help projects with C stubs detect and query the environment

  • General improvement of the default behavior: more parallelism by default, development mode by default

  • Better support for changing the defaults: it is now possible to set the default flags or change what dune build does by default

  • Support for setting the build directory

  • Better support for expectation tests on Windows

See full changelog
  • Store config files in ~/.config/dune/ instead of ~/.dune to match what dune is doing (#27, @samoht)
  • Support opam 1.2.2 when linting (#29, @samoht)
  • Use -p <pkg> instead of -n <pkg> to follow dune convention (#30, #42, @samoht)
  • Default to nano if the EDITOR environment variable is not set. (#32, @avsm)
  • Fix location of documentation when odoc creates an _html subdirectory (#34, @samoht)
  • Remove the browse command (#36, @samoht)
  • Re-add the publish delegatation mechanism to allow non-GitHub users to publish packages (see dune-release help delegate) (#37, @samoht)
  • Fix dropping of v at the beginning of version numbers in dune-release opam (#40, @let-def)
  • Add basic token validation (#40, @let-def)

We are pleased to announce the release of a third release candidate for opam 2.0.0. This one is expected to be the last before 2.0.0 comes out.

Changes since the 2.0.0~rc2 are, as expected, mostly fixes. We deemed it useful, however, to bring in the following:

  • a new command opam switch link that allows to select a switch to be used in a given directory (particularly convenient if you use the shell hook for automatic opam environment update)
  • a new option opam install --assume-built, that allows to install a package using its normal opam procedure, but for a source repository that has been built by hand. This fills a gap that remained in the local development workflows.

The preview of the opam 2 webpages can be browsed at https://opam.ocaml.org/2.0-preview/ (please report issues here).

Installation instructions (unchanged):

  1. From binaries: run

    sh <(curl -sL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)
    

    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.

  2. 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)

  3. From source, manually: see the instructions in the README.

Thanks a lot for testing out this new RC and reporting any issues you may find.

Thanks to the people who contributed to this release: ELLIOTTCABLE, Louis Roché, Rudi Grinberg, Yotam Barnoy, Leo White, Daniel Below, Andreas Hauptmann, Christophe Troestler, Bobby Priambodo, Milo Davis.

See full changelog
  • backend

    • new "polarity search" feature: provides a Hoogle-like type-based search for libraries that are in merlin's scope. See https://github.com/ocaml/merlin/blob/master/doc/features.md#polarity-search
    • new "open refactoring" feature: helps cleaning the code in the scope of an open statement. See https://github.com/ocaml/merlin/blob/master/doc/features.md#open-refactoring
    • spell-checking: a simple spell-checker has been added to suggest corrections when nothing can be directly completed.
    • type-driven record completion: merlin will now make use of type information from the context for narrowing and refining completion candidates.
    • support for #require directive in a source file, and will treat it as a package use
    • Add support for OCaml 4.07
    • locate: various minor bugfixes, as well as the following general improvements:
      • improved context detection
      • better tracking of namespaces
      • fixed support for local bindings
      • fixed support of disambiguated record fields and variant constructors
      • improved support for functors: merlin will now jump through functor application to the functor definitions and in some cases go back to the argument that was given (if it is simply reexported).
    • backport fixes of OCaml 4.06.1 to the 4.06 backend
    • various minor bugfixes
  • editor modes

    • emacs
      • proper handling of multibyte strings (by @Chris00)
      • bind "q" to close type buffer (by @MiloDavis)
      • make goto-point encoding independent
      • add reason-mode to the guessed favorite mode list (by @Khady)
      • sped up some tight loops (by @rgrinberg)
      • add support for x-ref backend (by @rgrinberg)
    • vim
      • fix support for Neomake (by @bobbypriambodo and @statianzo)
      • fix encoding issues in filepaths (by @Thelyria)
      • fix handling of enclosing-type cache (by @ELLIOTTCABLE)
      • add to prevent flashing when highlighting an enclosing (by @bluddy)
See full changelog
  • Remove opam lint warnings for 1.2 files (#2, @samoht)
  • Add a --keep-v option to not drop v at the beginning of version numbers (#6, @samoht)
  • Pass -p <package> to jbuilder (#8, @diml)
  • Fix a bug in Distrib.write_subst which could cause an infinite loop (#10, @diml)
  • Add a --dry-run option to avoid side-effects for all commands (@samoht)
  • Rewrite issues numbers in changelog to point to the right repository (#13, @samoht)
  • Stop force pushing tags to origin. Instead, just force push the release tag directly to the dev-repo repository (@samoht)
  • Fix publishing distribution when the the tag to publish is not the repository HEAD (#4, @samoht)
  • Do not depend on opam-publish anymore. Use configuration files stored in ~/.dune to parametrise the publishing workflow. (@samoht)

Ppxlib 0.2.1

See full changelog

Oops, we went looking but didn't find the changelog for this release 🙈

We are pleased to announce the release of a second release candidate for opam 2.0.0.

This new version brings us very close to a final 2.0.0 release, and in addition to many fixes, features big performance enhancements over the RC1.

Among the new features, we have squeezed in full sandboxing of package commands for both Linux and macOS, to protect our users from any misbehaving scripts.

NOTE: if upgrading manually from 2.0.0~rc, you need to run opam init --reinit -ni to enable sandboxing.

The new release candidate also offers the possibility to setup a hook in your shell, so that you won't need to run eval $(opam env) anymore. This is specially useful in combination with local switches, because with it enabled, you are guaranteed that running make from a project directory containing a local switch will use it.

The documentation has also been updated, and a preview of the opam 2 webpages can be browsed at https://opam.ocaml.org/2.0-preview/ (please report issues here). This provides the list of packages available for opam 2 (the 2.0 branch of opam-repository), including the compiler packages.

Installation instructions:

  1. From binaries: run

    sh <(curl -sL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)
    

    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.

  2. 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)

  3. From source, manually: see the instructions in the README.

Thanks a lot for testing out this new RC and reporting any issues you may find.

NOTE: this article is cross-posted on opam.ocaml.org and ocamlpro.com. Please head to the latter for the comments!

If you want to contribute to a new release announcement, check out the Contributing Guide on GitHub.