Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tracking paths to error locations #138

Closed
mmottl opened this issue Jun 10, 2017 · 23 comments · Fixed by #6419 or ocaml/opam-repository#23349
Closed

Tracking paths to error locations #138

mmottl opened this issue Jun 10, 2017 · 23 comments · Fixed by #6419 or ocaml/opam-repository#23349

Comments

@mmottl
Copy link
Contributor

mmottl commented Jun 10, 2017

My directory structure is as follows:

jbuild
jbuild-workspace
src/
  jbuild
  ...
examples/
  foo.ml
  jbuild
  ...

src contains a library and examples example applications. If I go to the examples directory and issue a build command from there (e.g. from an editor), an error in example foo.ml would be reported using location examples/foo.ml. This is a problem for inferring correct error locations. The editor does not know where the root of this path is, because we are in a (potentially even deeper) subdirectory.

Could you please print the absolute path of the root for error messages for a particular build when jbuilder is invoked so editors can infer the correct path? E.g. Vim allows you to pattern match on the build output to keep track of directory stacks for correct errors locations. A somewhat unique string should be used to correctly identify this location message, preferably an existing make-like Entering directory message that Vim or Emacs already understand.

@ghost
Copy link

ghost commented Jun 12, 2017

I admit I'm a bit fuzzy on what is recommended way of invoking the build system from the editor. Myself I use some emacs lisp code that guesses the project root by looking for a few key files (Makefile, _oasis, jbuild-workspace...) and then set the build command to something like cd ... && make.

So the idea would be to have an option --make-style-errors and/or possibly an environment variable to make jbuilder print:

Entering "<absolute path>"

before reporting an error?

@mmottl
Copy link
Contributor Author

mmottl commented Jun 12, 2017

Yes, something like that would work. I don't think it would be a good idea to have everybody write their own editor scripts for how jbuilder determines build roots or maybe even changes directories during build operations.

@bobot
Copy link
Collaborator

bobot commented Jun 13, 2017

Instead of an option that should be added manually, can't jbuilder always print Entering "<absolute path>" when it is not the current directory?

PS: I personally use projectile, where projectile-compile run the command where the .git is.

@ghost
Copy link

ghost commented Jun 13, 2017

Entering ... doesn't make much sense, jbuilder builds everything at once. I'm ok adding a compatibility option for editors but making it the default will make things confusing

@mmottl
Copy link
Contributor Author

mmottl commented Jun 13, 2017

It's not a big deal. Various messages can coexist. You can choose your own, maybe something like jbuilder root is ....

I'm not sure how jbuilder works, but it would certainly be necessary to never change directories if different directories are built in parallel. All paths would have to start at the root to avoid confusing editors.

@mmottl
Copy link
Contributor Author

mmottl commented Jun 14, 2017

Btw., if anybody needs a quickfix for now when building from within a subdirectory of the root, just create a Makefile containing e.g.:

.PHONY: all
all:
        @echo jbuilder: Entering directory \`$(abspath $(dir $(lastword $(PWD))))\'
        @jbuilder build --dev @all

Then a simple call to make should do what you want.

@ghost
Copy link

ghost commented Jun 15, 2017

It's not a big deal. Various messages can coexist. You can choose your own, maybe something like jbuilder root is ....

That seems fine to me

All paths would have to start at the root to avoid confusing editors.

It's almost the case. Basically most commands run by jbuilder are run from the root, except for building C files as the .o is always generated in the cwd. User actions are also run from the directory they are defined. In any cases, jbuilder always print the directory in which the action is run, using this syntax:

(cd <dir> && ...)

@mmottl
Copy link
Contributor Author

mmottl commented Jun 15, 2017

The handling of C-files makes things more complicated then. Since you presumably build them in parallel, I guess the best way would be to only print the directory change right before emitting an error message, making sure that there is no race condition that could insert another message between the directory change message and the error message.

I'm not sure (cd <dir> && ...) is unique enough. There may also be a chance that the S-expression pretty printer, if it's being used here, will break lines, which makes pattern matching in editors more difficult.

@Chris00
Copy link
Member

Chris00 commented Aug 19, 2017

The standard way of launching a build system in Emacs is M-x compile, usually bound to C-c C-c.

Unless there is a strong motivation, it would be better to keep the sentence Entering directory '<dir>' — you can put anything you want before it but it must end the line —, otherwise editors will need to be told about it.

Another possibility (which I'm not particularly fond of) is to invoke OCaml compilers with absolute file names, the errors will then contain the full path and links to errors will work.

@ghost ghost closed this as completed in 157e4d6 Sep 22, 2017
@ghost
Copy link

ghost commented Sep 22, 2017

I implemented @bobot's suggestion. Initially I was thinking about printing Entering directory ... before every command that output something given that commands are not all run from the same directory. However this clutters the output and given that all ocamlXXX commands are run from the root, printing it only once at the beginning is enough for most cases.

Unfortunately, it still doesn't help for C stubs. The problem with C stubs is that when you call ocamlc -c src/file.c, you get file.o rather than src/file.o. As a result the command has to be executed in src. Maybe we could workaround this problem by doing a rename just after the ocamlc -c ... and sandbox the action to avoid race conditions.

@mmottl
Copy link
Contributor Author

mmottl commented Nov 26, 2017

jbuilder now prints directory changes, but the format does not match the patterns typically defined in Vim configurations for make. E.g. it prints:

Entering directory '...'

But most Vim errorformat configurations would expect something like the following:

jbuilder: Entering directory `...'

This would require the following changes:

  1. Print jbuilder: before Entering directory to indicate the build tool.
  2. Use a backtick to open the quoted directory (keep the regular tick at the end).

I have updated my personal (public) OCaml Vim configuration to support both kinds of ticks, which is what other configurations do now, too. GNU make is apparently switching to saner quoting. But it would help if jbuilder stayed compatible with legacy make error formats.

@bobot
Copy link
Collaborator

bobot commented Nov 27, 2017

But it would help if jbuilder stayed compatible with legacy make error formats.

The format that jbuilder is currently using is the output used by gnu make since 4.0 (2013). Editors have been updated (for example four years ago for emacs).

Even if gnu make 4.0 had been adopted slowly it is now. So I don't want jbuilder to support an old format that is deprecated.

@Chris00
Copy link
Member

Chris00 commented Nov 27, 2017

I agree about not supporting deprecated formats but @mmottl has a point when he says that the line is still prefixed by make: (hence, here, jbuilder:). Emacs is not sensitive to that but Vim may be.

@bobot
Copy link
Collaborator

bobot commented Nov 27, 2017

Indeed I forget to say that I don't see any problem for the first point.

@mmottl
Copy link
Contributor Author

mmottl commented Nov 27, 2017

Some platforms (e.g. Mac OS X) still ship with old make programs by default. I agree that in case of the backtick it's probably better to push editor maintainers to update accordingly. I still think the prefix should be there, not just for make, but because it also helps determine what program produced a log message. This may be helpful for projects with mixed build tools.

@bobot
Copy link
Collaborator

bobot commented Nov 27, 2017

I agree, I don't see any problem for the implementation and inclusion of the first point. We can add the prefix "jbuilder:". Sorry if I was not clear.

@cpitclaudel
Copy link
Contributor

cpitclaudel commented Sep 25, 2019

Any chance that the corresponding "Leaving directory …" messages could be added? Otherwise, when dune is run in a sequence including other programs, the messages produced by those programs are misinterpreted by editors.

For example, the following case is broken: project root is in /project/, and I have the following makefile in /project/codegen/:

../build/codegen/cppgen.exe:
	dune build cppgen.exe

example.cpp: build example.in
	../build/codegen/cppgen.exe example.in

a.out: example.cpp
	g++ example.cpp

run: a.out
	./a.out

When I execute make run, dune says that it's entering /project/, and then when g++ runs and prints errors or warnings Emacs is confused and understands these relative to /project/. This wouldn't happen if dune printed Leaving directory `/project' after completing the build.

@ghost
Copy link

ghost commented Sep 25, 2019

It just feels a tad heavy :/ In your particular case, why not put the rules in the dune file directly? Then you just need one single call to dune.

@cpitclaudel
Copy link
Contributor

It just feels a tad heavy :/

That's a fair point. Maybe under a flag?

In your particular case, why not put the rules in the dune file directly? Then you just need one single call to dune.

I didn't realize this was possible. In practice, the rules tend to be more complicated. Can I do things like enumerating all files with a certain extension and run a command on each in dune? (Also, I (and to a larger extent people that I work with) have more experience with make, so I'm wary of using dune for more than the OCaml and Coq parts of my projects — but I'm open to being convinced ^^).

@ghost
Copy link

ghost commented Sep 25, 2019

Well, I won't try to convince you as the truth is, as soon as you go off the beaten track it's indeed pretty verbose compared to make. That said, if you do write the custom dune rules, then you get all the benefits that come with dune: polling mode, soon the shared cache, etc...

Adding a flag would be an option yeah. On the other hand having too many specific options tends to clutter the documentation. We generally try to just do the right thing without offering configuration unless it's really needed.

Thinking about this again, it's only one line at the end of the build and the Entering ... line was added precisely for Emacs. So if adding the Leaving ... line helps integration in Emacs, let's just do it.

Do you want to write the patch? The Entering ... line is printed in the prepare function in src/dune/scheduler.ml. You can just setup a at_exit hook at the same time as printing this line.

@cpitclaudel
Copy link
Contributor

Neat. Yes, I can (try to) prepare a patch.

One more question, though, to make sure that I have this right. Why was the fix for the original issue to print the directory when compilation starts, rather than printing error messages relative to the current directory? Is it because the messages are printed by OCaml itself (and hence can't be adjusted to be relative to the directory in which dune was invoked? (I imagine that even if OCaml could be adjusted, any other binary would need the same treatment, which is unmanageable)

@ghost
Copy link

ghost commented Sep 26, 2019

That's exactly the idea. We would need to parse the output of commands and rewrite filenames. There is no universal format for printing locations, so we'd need to hardcode a bunch of formats.

cpitclaudel added a commit to cpitclaudel/dune that referenced this issue Feb 1, 2020
The "Entering ..." message was introduced in 157e4d6.  Adding a matching
"Leaving directory "..."' message helps when dune is invoked in sequence with
other programs: otherwise, editors use dune's root to interpret path printed by
programs executed after dune (instead of the original working directory).
Discussed in ocaml#138.
cpitclaudel added a commit to cpitclaudel/dune that referenced this issue Feb 1, 2020
The "Entering ..." message was introduced in 157e4d6.  Adding a matching
"Leaving directory "..."' message helps when dune is invoked in sequence with
other programs: otherwise, editors use dune's root to interpret path printed by
programs executed after dune (instead of the original working directory).
Discussed in ocaml#138.

Signed-off-by: Clément Pit-Claudel <[email protected]>
cpitclaudel added a commit to cpitclaudel/dune that referenced this issue Feb 1, 2020
The "Entering ..." message was introduced in 157e4d6.  Adding a matching
"Leaving directory "..."' message helps when dune is invoked in sequence with
other programs: otherwise, editors use dune's root to interpret path printed by
programs executed after dune (instead of the original working directory).
Discussed in ocaml#138.

Signed-off-by: Clément Pit-Claudel <[email protected]>
@cpitclaudel
Copy link
Contributor

Done (roughly 4 months later 🎉) in #3072

rgrinberg pushed a commit that referenced this issue Nov 10, 2022
Print "Leaving Directory '%s'" in addition to "Entering Directory"

Fixes #138

Signed-off-by: Rudi Grinberg <[email protected]>

ps-id: 462a51cc-0bc8-44da-85d2-027bc1e372d7
rgrinberg pushed a commit that referenced this issue Nov 10, 2022
Print "Leaving Directory '%s'" in addition to "Entering Directory"

Fixes #138

Signed-off-by: Rudi Grinberg <[email protected]>

ps-id: 462a51cc-0bc8-44da-85d2-027bc1e372d7
rgrinberg pushed a commit that referenced this issue Nov 12, 2022
Print "Leaving Directory '%s'" in addition to "Entering Directory"

Fixes #138

Signed-off-by: Rudi Grinberg <[email protected]>

ps-id: 462a51cc-0bc8-44da-85d2-027bc1e372d7
rgrinberg pushed a commit that referenced this issue Nov 15, 2022
Print "Leaving Directory '%s'" in addition to "Entering Directory"

Fixes #138

Signed-off-by: Rudi Grinberg <[email protected]>

ps-id: 462a51cc-0bc8-44da-85d2-027bc1e372d7
rgrinberg pushed a commit that referenced this issue Nov 15, 2022
Print "Leaving Directory '%s'" in addition to "Entering Directory"

Fixes #138

Signed-off-by: Rudi Grinberg <[email protected]>

ps-id: 462a51cc-0bc8-44da-85d2-027bc1e372d7
rgrinberg pushed a commit that referenced this issue Nov 15, 2022
Print "Leaving Directory '%s'" in addition to "Entering Directory"

Fixes #138

Signed-off-by: Rudi Grinberg <[email protected]>

ps-id: 462a51cc-0bc8-44da-85d2-027bc1e372d7
rgrinberg pushed a commit that referenced this issue Nov 17, 2022
Print "Leaving Directory '%s'" in addition to "Entering Directory"

Fixes #138

Signed-off-by: Rudi Grinberg <[email protected]>

ps-id: 462a51cc-0bc8-44da-85d2-027bc1e372d7
rgrinberg pushed a commit that referenced this issue Nov 18, 2022
Print "Leaving Directory '%s'" in addition to "Entering Directory"

Fixes #138

Signed-off-by: Rudi Grinberg <[email protected]>

ps-id: 462a51cc-0bc8-44da-85d2-027bc1e372d7
rgrinberg added a commit that referenced this issue Nov 18, 2022
Print "Leaving Directory '%s'" in addition to "Entering Directory"

Fixes #138

Signed-off-by: Rudi Grinberg <[email protected]>
Co-authored-by: Clément Pit-Claudel <[email protected]>
emillon added a commit to emillon/opam-repository that referenced this issue Feb 6, 2023
…, dune-rpc, dune-rpc-lwt, dune-private-libs, dune-glob, dune-configurator, dune-build-info, dune-action-plugin and chrome-trace (3.7.0~alpha1)

CHANGES:

- Fix parsing of OCaml errors that contain code excerpts with `...` in them.
  (ocaml/dune#7008, @rgrinberg)

- Pre-emptively clear screen in watch mode (ocaml/dune#6987, fixes ocaml/dune#6884, @rgrinberg)

- Fix cross compilation configuration when a context with targets is itself a
  host of another context (ocaml/dune#6958, fixes ocaml/dune#6843, @rgrinberg)

- Fix parsing of the `<=` operator in *blang* expressions of `dune` files.
  Previously, the operator would be interpreted as `,`. (ocaml/dune#6928, @tatchi)

- Fix `--trace-file` output. Dune now emits a single *complete* event for every
  executed process. Unterminated *async* events are no longer written. (ocaml/dune#6892,
  @rgrinberg)

- Fix preprocessing with `staged_pps` (ocaml/dune#6748, fixes ocaml/dune#6644, @rgrinberg)

- Use colored output with MDX when Dune colors are enabled.
  (ocaml/dune#6462, @MisterDA)

- Make `dune describe workspace` return consistent dependencies for
  executables and for libraries. By default, compile-time dependencies
  towards PPX-rewriters are from now not taken into account (but
  runtime dependencies always are). Compile-time dependencies towards
  PPX-rewriters can be taken into account by providing the
  `--with-pps` flag. (ocaml/dune#6727, fixes ocaml/dune#6486, @esope)

- Print missing newline after `$ dune exec`. (ocaml/dune#6821, fixes ocaml/dune#6700, @rgrinberg,
  @Alizter)

- Fix binary corruption when installing or promoting in parallel (ocaml/dune#6669, fixes
  ocaml/dune#6668, @edwintorok)

- Use colored output with GCC and Clang when compiling C stubs. The
  flag `-fdiagnostics-color=always` is added to the `:standard` set of
  flags. (ocaml/dune#4083, @MisterDA)

- Fix the parsing of decimal and hexadecimal escape literals in `dune`,
  `dune-package`, and other dune s-expression based files (ocaml/dune#6710, @shym)

- Report an error if `dune init ...` would create a "dune" file in a location
  which already contains a "dune" directory (ocaml/dune#6705, @gridbugs)

- Fix the parsing of alerts. They will now show up in diagnostics correctly.
  (ocaml/dune#6678, @rginberg)

- Fix the compilation of modules generated at link time when
  `implicit_transitive_deps` is enabled (ocaml/dune#6642, @rgrinberg)

- Allow `$ dune utop` to load libraries defined in data only directories
  defined using `(subdir ..)` (ocaml/dune#6631, @rgrinberg)

- Format dune files when they are named `dune-file`. This occurs when we enable
  the alternative file names project option. (ocaml/dune#6566, @rgrinberg)

- Move `$ dune ocaml-merlin -dump-config=$dir` to `$ dune ocaml merlin
  dump-config $dir`. (ocaml/dune#6547, @rgrinberg)

- Allow compilation rules to be impacted by `(env ..)` stanzas that modify the
  environment or set binaries. (ocaml/dune#6527, @rgrinberg)

- Coq native mode is now automatically detected by Dune starting with Coq lang
  0.7. `(mode native)` has been deprecated in favour of detection from the
  configuration of Coq. (ocaml/dune#6409, @Alizter)

- Print "Leaving Directory" whenever "Entering Directory" is printed. (ocaml/dune#6149,
  fixes ocaml/dune#138, @cpitclaudel, @rgrinberg)

- Allow `$ dune ocaml dump-dot-merlin` to run in watch mode. Also this command
  shouldn't print "Entering Directory" mesages. (ocaml/dune#6497, @rgrinberg)

- `dune clean` should no longer fail under Windows due to the inability to
  remove the `.lock` file. Also, bring the implementation of the global lock
  under Windows closer to that of Unix. (ocaml/dune#6523, @nojb)

- Remove "Entering Directory" messages for `$ dune install`. (ocaml/dune#6513,
  @rgrinberg)

- Stop passing `-q` flag in `dune coq top`, which allows for `.coqrc` to be
  loaded. (ocaml/dune#6848, fixes ocaml/dune#6847, @Alizter)

- Fix missing dependencies when detecting the kind of C compiler we're using
  (ocaml/dune#6610, fixes ocaml/dune#6415, @emillon)

- Allow `(include_subdirs qualified)` for OCaml projects. (ocaml/dune#6594, fixes ocaml/dune#1084,
  @rgrinberg)

- Accurately determine merlin configuration for all sources selected with
  `copy#` and `copy_files#`. The old heuristic of looking for a module in
  parent directories is removed (ocaml/dune#6594, @rgrinberg)

- Fix inline tests with *js_of_ocaml* and whole program compilation mode
  enabled (ocaml/dune#6645, @hhugo)

- Fix *js_of_ocaml* separate compilation rules when `--enable=effects`
  ,`--enable=use-js-string` or `--toplevel` is used. (ocaml/dune#6714, ocaml/dune#6828, ocaml/dune#6920, @hhugo)

- Fix *js_of_ocaml* separate compilation in presence of linkall (ocaml/dune#6832, ocaml/dune#6916, @hhugo)

- Remove spurious build dir created when running `dune init proj ...` (ocaml/dune#6707,
  fixes ocaml/dune#5429, @gridbugs)

- Allow `--sandbox` to affect `ocamldep` invocations. Previously, they were
  wrongly marked as incompatible (ocaml/dune#6749, @rgrinberg)

- Validate the command line arguments for `$ dune ocaml top-module`. This
  command requires one positional argument (ocaml/dune#6796, fixes ocaml/dune#6793, @rgrinberg)

- Add a `dune cache size` command for displaying the size of the cache (ocaml/dune#6638,
  @Alizter)

- Add 4.14.0 MSVC to CI (ocaml/dune#6917, @jonahbeckford)

- Fix dependency cycle when installing files to the bin section with
  `glob_files` (ocaml/dune#6764, fixes ocaml/dune#6708, @gridbugs)

- Handle "Too many links" errors when using Dune cache on Windows (ocaml/dune#6993, @nojb)
emillon added a commit to emillon/opam-repository that referenced this issue Feb 17, 2023
…, dune-rpc, dune-rpc-lwt, dune-private-libs, dune-glob, dune-configurator, dune-build-info, dune-action-plugin and chrome-trace (3.7.0)

CHANGES:

- Allow running `$ dune exec` in watch mode (with the `-w` flag). In watch mode,
  `$ dune exec` the executed binary whenever it is recompiled. (ocaml/dune#6966,
  @gridbugs)

- `coqdep` is now called once per theory, instead of one time per Coq
  file. This should significantly speed up some builds, as `coqdep`
  startup time is often heavy (ocaml/dune#7048, @Alizter, @ejgallego)

- Add `map_workspace_root` dune-project stanza to allow disabling of
  mapping of workspace root to `/workspace_root`. (ocaml/dune#6988, fixes ocaml/dune#6929,
  @richardlford)

- Fix handling of support files generated by odoc. (ocaml/dune#6913, @jonludlam)

- Fix parsing of OCaml errors that contain code excerpts with `...` in them.
  (ocaml/dune#7008, @rgrinberg)

- Pre-emptively clear screen in watch mode (ocaml/dune#6987, fixes ocaml/dune#6884, @rgrinberg)

- Fix cross compilation configuration when a context with targets is itself a
  host of another context (ocaml/dune#6958, fixes ocaml/dune#6843, @rgrinberg)

- Fix parsing of the `<=` operator in *blang* expressions of `dune` files.
  Previously, the operator would be interpreted as `<`. (ocaml/dune#6928, @tatchi)

- Fix `--trace-file` output. Dune now emits a single *complete* event for every
  executed process. Unterminated *async* events are no longer written. (ocaml/dune#6892,
  @rgrinberg)

- Fix preprocessing with `staged_pps` (ocaml/dune#6748, fixes ocaml/dune#6644, @rgrinberg)

- Use colored output with MDX when Dune colors are enabled.
  (ocaml/dune#6462, @MisterDA)

- Make `dune describe workspace` return consistent dependencies for
  executables and for libraries. By default, compile-time dependencies
  towards PPX-rewriters are from now not taken into account (but
  runtime dependencies always are). Compile-time dependencies towards
  PPX-rewriters can be taken into account by providing the
  `--with-pps` flag. (ocaml/dune#6727, fixes ocaml/dune#6486, @esope)

- Print missing newline after `$ dune exec`. (ocaml/dune#6821, fixes ocaml/dune#6700, @rgrinberg,
  @Alizter)

- Fix binary corruption when installing or promoting in parallel (ocaml/dune#6669, fixes
  ocaml/dune#6668, @edwintorok)

- Use colored output with GCC and Clang when compiling C stubs. The
  flag `-fdiagnostics-color=always` is added to the `:standard` set of
  flags. (ocaml/dune#4083, @MisterDA)

- Fix the parsing of decimal and hexadecimal escape literals in `dune`,
  `dune-package`, and other dune s-expression based files (ocaml/dune#6710, @shym)

- Report an error if `dune init ...` would create a "dune" file in a location
  which already contains a "dune" directory (ocaml/dune#6705, @gridbugs)

- Fix the parsing of alerts. They will now show up in diagnostics correctly.
  (ocaml/dune#6678, @rginberg)

- Fix the compilation of modules generated at link time when
  `implicit_transitive_deps` is enabled (ocaml/dune#6642, @rgrinberg)

- Allow `$ dune utop` to load libraries defined in data only directories
  defined using `(subdir ..)` (ocaml/dune#6631, @rgrinberg)

- Format dune files when they are named `dune-file`. This occurs when we enable
  the alternative file names project option. (ocaml/dune#6566, @rgrinberg)

- Move `$ dune ocaml-merlin -dump-config=$dir` to `$ dune ocaml merlin
  dump-config $dir`. (ocaml/dune#6547, @rgrinberg)

- Allow compilation rules to be impacted by `(env ..)` stanzas that modify the
  environment or set binaries. (ocaml/dune#6527, @rgrinberg)

- Coq native mode is now automatically detected by Dune starting with Coq lang
  0.7. `(mode native)` has been deprecated in favour of detection from the
  configuration of Coq. (ocaml/dune#6409, @Alizter)

- Print "Leaving Directory" whenever "Entering Directory" is printed. (ocaml/dune#6419,
  fixes ocaml/dune#138, @cpitclaudel, @rgrinberg)

- Allow `$ dune ocaml dump-dot-merlin` to run in watch mode. Also this command
  shouldn't print "Entering Directory" mesages. (ocaml/dune#6497, @rgrinberg)

- `dune clean` should no longer fail under Windows due to the inability to
  remove the `.lock` file. Also, bring the implementation of the global lock
  under Windows closer to that of Unix. (ocaml/dune#6523, @nojb)

- Remove "Entering Directory" messages for `$ dune install`. (ocaml/dune#6513,
  @rgrinberg)

- Stop passing `-q` flag in `dune coq top`, which allows for `.coqrc` to be
  loaded. (ocaml/dune#6848, fixes ocaml/dune#6847, @Alizter)

- Fix missing dependencies when detecting the kind of C compiler we're using
  (ocaml/dune#6610, fixes ocaml/dune#6415, @emillon)

- Allow `(include_subdirs qualified)` for OCaml projects. (ocaml/dune#6594, fixes ocaml/dune#1084,
  @rgrinberg)

- Accurately determine merlin configuration for all sources selected with
  `copy#` and `copy_files#`. The old heuristic of looking for a module in
  parent directories is removed (ocaml/dune#6594, @rgrinberg)

- Fix inline tests with *js_of_ocaml* and whole program compilation mode
  enabled (ocaml/dune#6645, @hhugo)

- Fix *js_of_ocaml* separate compilation rules when `--enable=effects`
  ,`--enable=use-js-string` or `--toplevel` is used. (ocaml/dune#6714, ocaml/dune#6828, ocaml/dune#6920, @hhugo)

- Fix *js_of_ocaml* separate compilation in presence of linkall (ocaml/dune#6832, ocaml/dune#6916, @hhugo)

- Remove spurious build dir created when running `dune init proj ...` (ocaml/dune#6707,
  fixes ocaml/dune#5429, @gridbugs)

- Allow `--sandbox` to affect `ocamldep` invocations. Previously, they were
  wrongly marked as incompatible (ocaml/dune#6749, @rgrinberg)

- Validate the command line arguments for `$ dune ocaml top-module`. This
  command requires one positional argument (ocaml/dune#6796, fixes ocaml/dune#6793, @rgrinberg)

- Add a `dune cache size` command for displaying the size of the cache (ocaml/dune#6638,
  @Alizter)

- Fix dependency cycle when installing files to the bin section with
  `glob_files` (ocaml/dune#6764, fixes ocaml/dune#6708, @gridbugs)

- Handle "Too many links" errors when using Dune cache on Windows (ocaml/dune#6993, @nojb)

- Allow the `cinaps` stanza to set a custom alias. By default, if the alias is
  not set then the cinaps actions will be attached to both `@cinaps` and
  `@runtest` (ocaml/dune#6991, @rgrinberg)

- Add `(using ctypes 0.3)`. When used, paths in `(ctypes)` are interpreted
  relative to where the stanza is defined. (ocaml/dune#6883, fixes ocaml/dune#5325, @emillon)

- Auto-detect `dune-workspace` files as `dune` files in Emacs (ocaml/dune#7061,
  @ilankri)

- Add native support for polling mode on Windows (ocaml/dune#7010, @yams-yams, @nojb)
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment