-
Notifications
You must be signed in to change notification settings - Fork 410
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
META.pkg is illformed #5767
Comments
What prevents you from wanting to use the installed META? Is it because you want to load a private library with findlib? |
@rgrinberg it is because we've been told that depending on things in However I'm not sure that advice is correct. |
You can depend on things being in |
I mean, why the rule for |
Although we never intended this to be user facing, you most certainly can. And we are not planning to shift the location of this directory around just to spite our users :) But let me try to convince to why you should think twice before doing it. When we load the rules for _build/install, recall that we need to scan the entire workspace to determine all files that might be installable (install stanzas, public libraries, executables, etc). Doing this work requires us to load certain user rules. While we try to load as little rules as possible, it's not something that we ever guarantee to be stable between versions of dune. This means that you might get cycles in future versions of dune if we decide to force the rules in the directory that's using |
@rgrinberg I'm fine not depending on For example, I'd be fine emulating That would also be the most useful thing to do I think as would provide convenient support for other people using OCaml plugins. Maybe I'm just not respecting some API boundaries, but for me, morally having |
We could implement this feature as a new This provides an alternative to some functionality present in the dune sites plugin, but seems much lighter to me. |
Sure, I have nothing against in generating rules that will help you with runtime deps. I'd like to hear more about your use case however. How are you using the runtime deps? Are you building something with them? Are you dynlinking?
I would like something simpler than this. There are also some related use cases in dune that we might be able to unify.
Could you describe this a bit more? |
Coq projects are sometimes made of both .v files .ml files. The latter constitutes a plugin coqc must load in order to compile the .v files. Now, dune builds a META file and a cmxs but that seems only to be properly after the fact. During the build process the META file is illformed hence unusable. Emilio proposes to make the file usable while building the package. Splitting each Coq projects with a plugin into two packages (an ocaml library and a pure .v one) and use a package dependency seems to the Coq devs a bit too much to ask to our users. There are a few PR out there doing that, and they are too large to be considered reasonable, IMO. Hope it helps. |
Yes, we are dynlinking, and we use We could make things work by depending on the (installed) cmxs and the META file, but as you mentioned, it'd be better to have more constrained rules similarly to what is done for |
This was discussed and a few points where made:
I guess for now the easiest thing to do , but as Rudi points out, we need to be beware of cycles, user messages may not be the best. |
…ne-site, dune-rpc, dune-rpc-lwt, dune-private-libs, dune-glob, dune-configurator, dune-build-info, dune-action-plugin and chrome-trace (3.5.0) CHANGES: - macOS: Handle unknown fsevents without crashing (ocaml/dune#6217, @rgrinberg) - Enable file watching on MacOS SDK < 10.13. (ocaml/dune#6218, @rgrinberg) - Sandbox running cinaps actions starting from cinaps 1.1 (ocaml/dune#6176, @rgrinberg) - Add a `runtime_deps` field in the `cinaps` stanza to specify runtime dependencies for running the cinaps preprocessing action (ocaml/dune#6175, @rgrinberg) - Shadow alias module `Foo__` when building a library `Foo` (ocaml/dune#6126, @rgrinberg) - Extend dune describe to include the root path of the workspace and the relative path to the build directory. (ocaml/dune#6136, @reubenrowe) - Allow dune describe workspace to accept directories as arguments. The provided directories restrict the worskpace description to those directories. (ocaml/dune#6107, fixes ocaml/dune#3893, @esope) - Add a terminal persistence mode that attempts to clear the terminal history. It is enabled by setting terminal persistence to `clear-on-rebuild-and-flush-history` (ocaml/dune#6065, @rgrinberg) - Disallow generating targets in sub direcories in inferred rules. The check to forbid this was accidentally done only for manually specified targets (ocaml/dune#6031, @rgrinberg) - Do not ignore rules marked `(promote (until-clean))` when `--ignore-promoted-rules` (or `-p`) is passed. (ocaml/dune#6010, fixes ocaml/dune#4401, @emillon) - Dune no longer considers .aux files as targets during Coq compilation. This means that .aux files are no longer cached. (ocaml/dune#6024, fixes ocaml/dune#6004, @Alizter) - Cinaps actions are now sandboxed by default (ocaml/dune#6062, @rgrinberg) - Allow rules producing directory targets to be not sandboxed (ocaml/dune#6056, @rgrinberg) - Introduce a `dirs` field in the `install` stanza to install entire directories (ocaml/dune#5097, fixes ocaml/dune#5059, @rgrinberg) - Menhir rules are now sandboxed by default (ocaml/dune#6076, @rgrinberg) - Allow rules producing directory targets to create symlinks (ocaml/dune#6077, fixes ocaml/dune#5945, @rgrinberg) - Inline tests are now sandboxed by default (ocaml/dune#6079, @rgrinberg) - Fix build-info version when used with flambda (ocaml/dune#6089, fixes ocaml/dune#6075, @jberdine) - Add an `(include <file>)` term to the `include_dirs` field for adding directories to the include paths sourced from a file. (ocaml/dune#6058, fixes ocaml/dune#3993, @gridbugs) - Support `(extra_objects ...)` field in `(executable ...)` and `(library ...)` stanzas (ocaml/dune#6084, fixes ocaml/dune#4129, @gridbugs) - Fix compilation of Dune under esy on Windows (ocaml/dune#6109, fixes ocaml/dune#6098, @nojb) - Improve error message when parsing several licenses in `(license)` (ocaml/dune#6114, fixes ocaml/dune#6103, @emillon) - odoc rules now about `ODOC_SYNTAX` and will rerun accordingly (ocaml/dune#6010, fixes ocaml/dune#1117, @emillon) - dune install: copy files in an atomic way (ocaml/dune#6150, @emillon) - Add `%{coq:...}` macro for accessing data about the configuration about Coq. For instance `%{coq:version}` (ocaml/dune#6049, @Alizter) - update vendored copy of cmdliner to 1.1.1. This improves the built-in documentation for command groups such as `dune ocaml`. (ocaml/dune#6038, @emillon, ocaml/dune#6169, @shonfeder) - The test suite for Coq now requires Coq >= 8.16 due to changes in the plugin loading mechanism upstream (which now uses `Findlib`). - Starting with Coq build language 0.6, theories can be built without importing Coq's standard library by including `(stdlib no)`. (ocaml/dune#6165 ocaml/dune#6164, fixes ocaml/dune#6163, @ejgallego @Alizter @LasseBlaauwbroek) - on macOS, sign executables produced by artifact substitution (ocaml/dune#6137, ocaml/dune#6231, fixes ocaml/dune#5650, fixes ocaml/dune#6226, @emillon) - Added an (aliases ...) field to the (rules ...) stanza which allows the specification of multiple aliases per rule (ocaml/dune#6194, @Alizter) - The `(coq.theory ...)` stanza will now ensure that for each declared `(plugin ...)`, the `META` file for it is built before calling `coqdep`. This enables the use of the new `Findlib`-based loading method in Coq 8.16; however as of Coq 8.16.0, Coq itself has some bugs preventing this to work yet. (ocaml/dune#6167 , workarounds ocaml/dune#5767, @ejgallego) - Allow include statement in install stanza (ocaml/dune#6139, fixes ocaml/dune#256, @gridbugs) - Handle CSI n K code in ANSI escape codes from commands. (ocaml/dune#6214, fixes ocaml/dune#5528, @emillon) - Add a new experimental feature `mode_specific_stubs` that allows the specification of different flags and sources for foreign stubs depending on the build mode (ocaml/dune#5649, @voodoos)
I have a similar need when running the testsuite for Caqti, which also uses (My current solution has been to rewrite the META files, prepending a |
In When we generate |
Expected Behavior
The file is placed at the toot of the build tree and findlib can parse it
Actual Behavior
Findlib cannot parse it since it lacks the directory stanza. The file is only accepted when symlinked in _build/install/...lib/pkg/META since there it does not need the directory stanza.
My suggestion is to create two meta files, one good for installation, and another one good for using uninstalled. The former shall be "hidden".
The text was updated successfully, but these errors were encountered: