-
Notifications
You must be signed in to change notification settings - Fork 416
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
feature: dynamic_include stanza #9913
Conversation
a753c6c
to
0c5cce0
Compare
Can you say a few words for the motivation behind this addition? About the name |
The main motivation is a straightforward one. Allow a way of generating rules without promoting them to the source. Why a different name? Because this include has different semantics and limitations that are (likely) impossible to lift. So I think a different name is appropriate. |
Sorry for the naive question, but what does "promoting them to the source" mean here? I looked at the test, but couldn't figure out what is special about the new form (vs a normal |
When you write (include foo), the file foo must exist in the source directory. To make foo be generated by a rule, we workaround it by making the rule promotable. If you use this new stanza, you can skip the promotion step and use a regular rule to generate stanzas provided the limitations in the description are acceptable to you. |
I had missed that, thanks. Indeed, this is a cool addition! Being able to define executables in this way is already a big advance; eg defining a test suite for every file in a directory. |
be69932
to
9878c10
Compare
99d519b
to
d959d5b
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM (but I only looked at the code changes briefly)
d959d5b
to
01e975a
Compare
1bb0c70
to
5bffe77
Compare
Introduce the [dynamic_include] stanza. It's like [(include ..)], but doesn't allow us to generate static stanzas (see [Dune_file0] for what those are). Signed-off-by: Rudi Grinberg <[email protected]> <!-- ps-id: 55957fb9-7975-4cd6-aced-4d9d348dfbd6 -->
5bffe77
to
672ab25
Compare
CHANGES: ### Added - Introduce a `(dynamic_include ..)` stanza. This is like `(include foo)` but allows `foo` to be the target of a rule. Currently, there are some limitations on the stanzas that can be generated. For example, public executables, libraries are currently forbidden. (ocaml/dune#9913, @rgrinberg) - Introduce `$ dune promotion list` to print the list of available promotions. (ocaml/dune#9705, @moyodiallo) - If Sherlodoc is installed, add a search bar in generated HTML docs (ocaml/dune#9772, @EmileTrotignon) - Add `only_sources` field to `copy_files` stanza (ocaml/dune#9827, fixes ocaml/dune#9709, @jchavarri) - The `(foreign_library)` stanza now supports the `(enabled_if)` field. (ocaml/dune#9914, @nojb) ### Fixed - Fix `$ dune install -p` incorrectly recognizing packages that are supposed to be filtered (ocaml/dune#9879, fixes ocaml/dune#4814, @rgrinberg) - subst: correctly handle opam files in opam/ subdirectory (ocaml/dune#9895, fixes ocaml/dune#9862, @emillon) - Odoc private rules are not set up if a library is not available due to `enabled_if` (ocaml/dune#9897, @rgrinberg and @jchavarri) ### Changed - When dune language 3.14 is enabled, resolve the binary in `(run %{bin:..} ..)` from where the binary is built. (ocaml/dune#9708, @rgrinberg) - boot: remove single-command bootstrap. This was an alternative bootstrap strategy that was used in certain conditions. Removal makes the bootstrap a bit slower on Linux when only a single core is available, but bootstrap is now reproducible in all cases. (ocaml/dune#9735, fixes ocaml/dune#9507, @emillon)
CHANGES: ### Added - Introduce a `(dynamic_include ..)` stanza. This is like `(include foo)` but allows `foo` to be the target of a rule. Currently, there are some limitations on the stanzas that can be generated. For example, public executables, libraries are currently forbidden. (ocaml/dune#9913, @rgrinberg) - Introduce `$ dune promotion list` to print the list of available promotions. (ocaml/dune#9705, @moyodiallo) - If Sherlodoc is installed, add a search bar in generated HTML docs (ocaml/dune#9772, @EmileTrotignon) - Add `only_sources` field to `copy_files` stanza (ocaml/dune#9827, fixes ocaml/dune#9709, @jchavarri) - The `(foreign_library)` stanza now supports the `(enabled_if)` field. (ocaml/dune#9914, @nojb) ### Fixed - Fix `$ dune install -p` incorrectly recognizing packages that are supposed to be filtered (ocaml/dune#9879, fixes ocaml/dune#4814, @rgrinberg) - subst: correctly handle opam files in opam/ subdirectory (ocaml/dune#9895, fixes ocaml/dune#9862, @emillon) - Odoc private rules are not set up if a library is not available due to `enabled_if` (ocaml/dune#9897, @rgrinberg and @jchavarri) ### Changed - When dune language 3.14 is enabled, resolve the binary in `(run %{bin:..} ..)` from where the binary is built. (ocaml/dune#9708, @rgrinberg) - boot: remove single-command bootstrap. This was an alternative bootstrap strategy that was used in certain conditions. Removal makes the bootstrap a bit slower on Linux when only a single core is available, but bootstrap is now reproducible in all cases. (ocaml/dune#9735, fixes ocaml/dune#9507, @emillon)
CHANGES: ### Added - Introduce a `(dynamic_include ..)` stanza. This is like `(include foo)` but allows `foo` to be the target of a rule. Currently, there are some limitations on the stanzas that can be generated. For example, public executables, libraries are currently forbidden. (ocaml/dune#9913, @rgrinberg) - Introduce `$ dune promotion list` to print the list of available promotions. (ocaml/dune#9705, @moyodiallo) - If Sherlodoc is installed, add a search bar in generated HTML docs (ocaml/dune#9772, @EmileTrotignon) - Add `only_sources` field to `copy_files` stanza (ocaml/dune#9827, fixes ocaml/dune#9709, @jchavarri) - The `(foreign_library)` stanza now supports the `(enabled_if)` field. (ocaml/dune#9914, @nojb) ### Fixed - Fix `$ dune install -p` incorrectly recognizing packages that are supposed to be filtered (ocaml/dune#9879, fixes ocaml/dune#4814, @rgrinberg) - subst: correctly handle opam files in opam/ subdirectory (ocaml/dune#9895, fixes ocaml/dune#9862, @emillon) - Odoc private rules are not set up if a library is not available due to `enabled_if` (ocaml/dune#9897, @rgrinberg and @jchavarri) ### Changed - When dune language 3.14 is enabled, resolve the binary in `(run %{bin:..} ..)` from where the binary is built. (ocaml/dune#9708, @rgrinberg) - boot: remove single-command bootstrap. This was an alternative bootstrap strategy that was used in certain conditions. Removal makes the bootstrap a bit slower on Linux when only a single core is available, but bootstrap is now reproducible in all cases. (ocaml/dune#9735, fixes ocaml/dune#9507, @emillon)
Introduce the [dynamic_include] stanza. It's like [(include ..)], but
doesn't allow us to generate static stanzas and a few other stanzas that can affect the entire context. Those include:
(section bin)
.The limitation on generating private libraries is possible to lift, but it will take quite a bit more effort. I will do so in subsequent PR's.
TODO
dynamic_include
indynamic_include
include
indynamic_include
.Signed-off-by: Rudi Grinberg [email protected]