diff --git a/doc/reference/dune/env.rst b/doc/reference/dune/env.rst index a0474c5bd19..e2aa4f8bd9c 100644 --- a/doc/reference/dune/env.rst +++ b/doc/reference/dune/env.rst @@ -30,6 +30,11 @@ Fields supported in ```` are: variables to the environment where the build commands are executed and are used by ``dune exec``. +- ``(env_vars ( ) .. ( ))`` is an alias for ``env-vars``. + It was introduced to stick to the underscore naming convention. + + .. versionadded:: 3.18 + - ``(menhir_flags ))`` specifies flags for Menhir stanzas. This flag was replaced by the ``(menhir)`` field (see below) starting in version 3.0 of the Menhir extension. diff --git a/src/dune_rules/dune_env.ml b/src/dune_rules/dune_env.ml index 42854dcd1ee..477ddf8bc62 100644 --- a/src/dune_rules/dune_env.ml +++ b/src/dune_rules/dune_env.ml @@ -196,16 +196,25 @@ let inline_tests_field = ;; let env_vars_field = - field - "env-vars" - ~default:Env.empty - (Dune_lang.Syntax.since Stanza.syntax (1, 5) - >>> located (repeat (pair string string)) - >>| fun (loc, pairs) -> - match Env.Map.of_list pairs with - | Ok vars -> Env.extend Env.empty ~vars - | Error (k, _, _) -> - User_error.raise ~loc [ Pp.textf "Variable %s is specified several times" k ]) + let env_decoder = + located (repeat (pair string string)) + >>| fun (loc, pairs) -> + match Env.Map.of_list pairs with + | Ok vars -> Env.extend Env.empty ~vars + | Error (k, _, _) -> + User_error.raise ~loc [ Pp.textf "Variable %s is specified several times" k ] + in + let+ env_vars_legacy = + field_o "env-vars" (Dune_lang.Syntax.since Stanza.syntax (1, 5) >>> env_decoder) + and+ env_vars = + field_o "env_vars" (Dune_lang.Syntax.since Stanza.syntax (3, 18) >>> env_decoder) + in + match env_vars_legacy, env_vars with + | None, None -> Env.empty + | Some env, None -> env + | None, Some env -> env + | Some _, Some _ -> + Code_error.raise "(env_vars) and (env-vars) are aliases and cannot both be present" [] ;; let odoc_field = diff --git a/test/blackbox-tests/test-cases/env/env_vars_alias.t b/test/blackbox-tests/test-cases/env/env_vars_alias.t new file mode 100644 index 00000000000..eb080eb11ab --- /dev/null +++ b/test/blackbox-tests/test-cases/env/env_vars_alias.t @@ -0,0 +1,19 @@ +Since Dune 3.18, we support `env_vars` as an alias for `env-vars` for naming +consistency. + + $ cat > dune-project << EOF + > (lang dune 3.18) + > EOF + +We check the rule is evaluated: + + $ cat > dune << 'EOF' + > (env + > (_ (env_vars (VAR default )))) + > (rule + > (alias runtest) + > (action (system "echo $VAR"))) + > EOF + + $ dune runtest + default