-
Notifications
You must be signed in to change notification settings - Fork 397
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
Dependency error with "dune -p" and "infer true" for menhir #1504
Comments
Remove 4.07 as a possible platform, due to an issue with 4.07 or Dune that I don't understand. See ocaml/dune#1504
OK so I was wrong, it doesn't come from 4.07.1. Actually it happens when the |
I can't reproduce this issue. I'm using dune 1.4.0 and menhir 20181026. The following works for me:
|
Ouch. This is what I get:
|
I can reproduce this with 4.06.1 but not with 4.07.1, so this seems indeed linked to the version of the compiler. Looking at the diff between |
So I guess it must be types inferred by Menhir piggybacking on the compiler, right? We should perhaps Cc François Pottier? |
Basically menhir reads the output of |
At any rate, I can't reproduce the part where I said that the bug only happens with the |
Actually, I observe the same as you:
|
BTW, a workaround is to write the following at the beginning of module Libelectrod = struct end |
Good idea! However the problem is still here with the Smv_trace_parser and this one creates a functorized parser for with the workaround doesn't seem to work out of the box. I don't have time to investigate, so meanwhile I'll stick to my |
I've run into the same issue, but with 4.07.0+flambda and dune 1.5.1. Running
The two parts that seem incorrect to me are are:
|
This needs to be reported on the OCaml bug tracker, as this seems to be a bug in |
@diml, are you going to report it? If not, can you give us a bit more information about how dune uses |
@ifazk if you could report it that would be cool. The problem is the following: in parser.mly, the code references a module X. X is an alias defined in module X = Lib__X and the |
Sorry for the delayed follow up, but I have been trying to create a minimal example that show the differences between < 4.07 and >= 4.07. Here's what i have: (* lib__m2.mli *)
type t (* lib__m2.ml *)
type t = int (* lib__.ml *)
module M2 = Lib__m2 (* parser.ml *)
type t = M2.t Now when i run the following for both 4.06.1 and 4.07.0, ocamlc -c lib__m2.mli lib__m2.ml lib__.ml
ocamlc -i -open Lib__ parser.ml I get same the output type t = Lib__.M2.t Should I be doing something else for Lib__ to not be displayed in 4.06? |
can you try with |
Some updates:
Setup (same as before): (* lib__m2.mli *)
type t (* lib__m2.ml *)
type t = int (* lib__.ml *)
module M2 = Lib__m2 (* parser.ml *)
type t = M2.t I get the same results for both 4.06.1 and 4.07.1:
type t = Lib__.M2.t
type t = M2.t
type t = M2.t |
I've lost track of this conversation, the problem only appears when the |
Alas, the effect of this option is very useful and I seem to remember it was strongly encouraged to be set to true in the Menhir manual. Now Menhir was recently updated on this front with other related options so I guess indeed @fpottier could be of some help here. |
For me, the problem only appears when I try to build with |
@ifazk, the conclusion I draw from your results is that the issue is related to |
Maybe we could always pass diff --git a/src/module_compilation.ml b/src/module_compilation.ml
index 40903b72..fd6a449d 100644
--- a/src/module_compilation.ml
+++ b/src/module_compilation.ml
@@ -214,6 +214,7 @@ let ocamlc_i ?sandbox ?(flags=[]) ~dep_graphs cctx (m : Module.t) ~output =
| Some (m : Module.t) ->
As ["-open"; Module.Name.to_string (Module.name m)])
; As flags
+ ; A "-short-paths"
; A "-i"; Ml_kind.flag Impl; Dep src
]
>>^ (fun act -> Action.with_stdout_to output act) ? |
The patch worked for my project! |
@diml's last suggestion sounds reasonable to me (although I don't really know what |
@fpottier, when several names are available for a given type, I'll create a PR with the suggested patch. |
CHANGES: - Fix merlin handling of private module visibility (ocaml/dune#1653 @bobot) - skip directories when looking up programs in the PATH (ocaml/dune#1628, fixes ocaml/dune#1616, @diml) - Fix preprocessing for libraries with `(include_subdirs ..)` (ocaml/dune#1624, fix ocaml/dune#1626, @nojb, @rgrinberg) - Do not generate targets for archive that don't match the `modes` field. (ocaml/dune#1632, fix ocaml/dune#1617, @rgrinberg) - When executing actions, open files lazily and close them as soon as possible in order to reduce the maximum number of file descriptors opened by Dune (ocaml/dune#1635, ocaml/dune#1643, fixes ocaml/dune#1633, @jonludlam, @rgrinberg, @diml) - Do not generate targets for archive that don't match the `modes` field. (ocaml/dune#1632, fix ocaml/dune#1617, @rgrinberg) - Get the correct environment node for multi project workspaces (ocaml/dune#1648, @rgrinberg) - Fix an issue causing menhir generated parsers to fail to build in some cases. The fix is to systematically use `-short-paths` when calling `ocamlc -i` (ocaml/dune#1743, fix ocaml/dune#1504, @diml)
CHANGES: - Fix merlin handling of private module visibility (ocaml/dune#1653 @bobot) - skip directories when looking up programs in the PATH (ocaml/dune#1628, fixes ocaml/dune#1616, @diml) - Fix preprocessing for libraries with `(include_subdirs ..)` (ocaml/dune#1624, fix ocaml/dune#1626, @nojb, @rgrinberg) - Do not generate targets for archive that don't match the `modes` field. (ocaml/dune#1632, fix ocaml/dune#1617, @rgrinberg) - When executing actions, open files lazily and close them as soon as possible in order to reduce the maximum number of file descriptors opened by Dune (ocaml/dune#1635, ocaml/dune#1643, fixes ocaml/dune#1633, @jonludlam, @rgrinberg, @diml) - Do not generate targets for archive that don't match the `modes` field. (ocaml/dune#1632, fix ocaml/dune#1617, @rgrinberg) - Get the correct environment node for multi project workspaces (ocaml/dune#1648, @rgrinberg) - Fix an issue causing menhir generated parsers to fail to build in some cases. The fix is to systematically use `-short-paths` when calling `ocamlc -i` (ocaml/dune#1743, fix ocaml/dune#1504, @diml)
CHANGES: - Second step of the deprecation of jbuilder: the `jbuilder` binary now emits a warning on every startup and both `jbuilder` and `dune` emit warnings when encountering `jbuild` files (ocaml/dune#1752, @diml) - Change the layout of build artifacts inside _build. The new layout enables optimizations that depend on the presence of `.cmx` files of private modules (ocaml/dune#1676, @bobot) - Fix merlin handling of private module visibility (ocaml/dune#1653 @bobot) - unstable-fmt: use boxes to wrap some lists (ocaml/dune#1608, fix ocaml/dune#1153, @emillon, thanks to @rgrinberg) - skip directories when looking up programs in the PATH (ocaml/dune#1628, fixes ocaml/dune#1616, @diml) - Use `lsof` on macOS to implement `--stats` (ocaml/dune#1636, fixes ocaml/dune#1634, @xclerc) - Generate `dune-package` files for every package. These files are installed and read instead of `META` files whenever they are available (ocaml/dune#1329, @rgrinberg) - Fix preprocessing for libraries with `(include_subdirs ..)` (ocaml/dune#1624, fix ocaml/dune#1626, @nojb, @rgrinberg) - Do not generate targets for archive that don't match the `modes` field. (ocaml/dune#1632, fix ocaml/dune#1617, @rgrinberg) - When executing actions, open files lazily and close them as soon as possible in order to reduce the maximum number of file descriptors opened by Dune (ocaml/dune#1635, ocaml/dune#1643, fixes ocaml/dune#1633, @jonludlam, @rgrinberg, @diml) - Reimplement the core of Dune using a new generic memoization system (ocaml/dune#1489, @rudihorn, @diml) - Replace the broken cycle detection algorithm by a state of the art one from [this paper](https://doi.org/10.1145/2756553) (ocaml/dune#1489, @rudihorn) - Get the correct environment node for multi project workspaces (ocaml/dune#1648, @rgrinberg) - Add `dune compute` to call internal memoized functions (ocaml/dune#1528, @rudihorn, @diml) - Add `--trace-file` option to trace dune internals (ocaml/dune#1639, fix ocaml/dune#1180, @emillon) - Add `--no-print-directory` (borrowed from GNU make) to suppress `Entering directory` messages. (ocaml/dune#1668, @dra27) - Remove `--stats` and track fd usage in `--trace-file` (ocaml/dune#1667, @emillon) - Add virtual libraries feature and enable it by default (ocaml/dune#1430 fixes ocaml/dune#921, @rgrinberg) - Fix handling of Control+C in watch mode (ocaml/dune#1678, fixes ocaml/dune#1671, @diml) - Look for jsoo runtime in the same dir as the `js_of_ocaml` binary when the ocamlfind package is not available (ocaml/dune#1467, @nojb) - Make the `seq` package available for OCaml >= 4.07 (ocaml/dune#1714, @rgrinberg) - Add locations to error messages where a rule fails to generate targets and rules that require files outside the build/source directory. (ocaml/dune#1708, fixes ocaml/dune#848, @rgrinberg) - Let `Configurator` handle `sizeof` (in addition to negative numbers). (ocaml/dune#1726, fixes ocaml/dune#1723, @Chris00) - Fix an issue causing menhir generated parsers to fail to build in some cases. The fix is to systematically use `-short-paths` when calling `ocamlc -i` (ocaml/dune#1743, fix ocaml/dune#1504, @diml) - Never raise when printing located errors. The code that would print the location excerpts was prone to raising. (ocaml/dune#1744, fix ocaml/dune#1736, @rgrinberg) - Add a `dune upgrade` command for upgrading jbuilder projects to Dune (ocaml/dune#1749, @diml) - When automatically creating a `dune-project` file, insert the detected name in it (ocaml/dune#1749, @diml) - Add `(implicit_transitive_deps <bool>)` mode to dune projects. When this mode is turned off, transitive dependencies are not accessible. Only listed dependencies are directly accessible. (ocaml/dune#1734, ocaml/dune#430, @rgrinberg, @hnrgrgr) - Add `toplevel` stanza. This stanza is used to define toplevels with libraries already preloaded. (ocaml/dune#1713, @rgrinberg) - Generate `.merlin` files that account for normal preprocessors defined using a subset of the `action` language. (ocaml/dune#1768, @rgrinberg) - Emit `(orig_src_dir <path>)` metadata in `dune-package` for dune packages built with `--store-orig-source-dir` command line flag (also controlled by `DUNE_STORE_ORIG_SOURCE_DIR` env variable). This is later used to generate `.merlin` with `S`-directives pointed to original source locations and thus allowing merlin to see those. (ocaml/dune#1750, @andreypopp) - Improve the behavior of `dune promote` when the files to be promoted have been deleted. (ocaml/dune#1775, fixes ocaml/dune#1772, @diml) - unstable-fmt: preserve comments (ocaml/dune#1766, @emillon) - Pass flags correctly when using `staged_pps` (ocaml/dune#1779, fixes ocaml/dune#1774, @diml) - Fix an issue with the use of `(mode promote)` in the menhir stanza. It was previously causing intermediate *mock* files to be promoted (ocaml/dune#1783, fixes ocaml/dune#1781, @diml) - unstable-fmt: ignore files using OCaml syntax (ocaml/dune#1784, @emillon) - Configurator: Add `which` function to replace the `which` command line utility in a cross platform way. (ocaml/dune#1773, fixes ocaml/dune#1705, @Chris00) - Make configurator append paths to `$PKG_CONFIG_PATH` on macOS. Previously it was prepending paths and thus `$PKG_CONFIG_PATH` set by users could have been overridden by homebrew installed libraries (ocaml/dune#1785, @andreypopp) - Disallow c/cxx sources that share an object file in the same stubs archive. This means that `foo.c` and `foo.cpp` can no longer exist in the same library. (ocaml/dune#1788, @rgrinberg) - Forbid use of `%{targets}` (or `${@}` in jbuild files) inside preprocessing actions (ocaml/dune#1812, fixes ocaml/dune#1811, @diml) - Add `DUNE_PROFILE` environment variable to easily set the profile. (ocaml/dune#1806, @rgrinberg) - Deprecate the undocumented `(no_keep_locs)` field. It was only necessary until virtual libraries were supported (ocaml/dune#1822, fix ocaml/dune#1816, @diml) - Rename `unstable-fmt` to `format-dune-file` and remove its `--inplace` option. (ocaml/dune#1821, @emillon). - Autoformatting: `(using fmt 1.1)` will also format dune files (ocaml/dune#1821, @emillon). - Autoformatting: record dependencies on `.ocamlformat-ignore` files (ocaml/dune#1824, fixes ocaml/dune#1793, @emillon)
Hello,
I have an issue that I think comes from Dune (well at least an error message in its source code). The code in question is at: https://github.com/grayswandyr/electrod/tree/release/0.2.0
It happens on 4.07.1 while it compiles well on 4.06.1 for instance, I had never encountered this essage with Jbuilder/Dune on previous major releases of OCaml (I haven't tested 4.07.0). The error message says:
Alas, this message doesn't really make sens to me either ;-)
Any help appreciated!
The text was updated successfully, but these errors were encountered: