diff --git a/bin/arg.ml b/bin/arg.ml index e1467178602..ad57a2f293e 100644 --- a/bin/arg.ml +++ b/bin/arg.ml @@ -116,6 +116,16 @@ module Dep = struct let conv = conv' (parser, printer) let to_string_maybe_quoted t = String.maybe_quoted (Format.asprintf "%a" printer t) + + let alias_arg = + let parse x = Ok (Dep_conf.Alias (String_with_vars.make_text Loc.none x)) in + conv' (parse, printer) + ;; + + let alias_rec_arg = + let parse x = Ok (Dep_conf.Alias_rec (String_with_vars.make_text Loc.none x)) in + conv' (parse, printer) + ;; end let dep = Dep.conv diff --git a/bin/arg.mli b/bin/arg.mli index ca272582701..3ab4dacd11e 100644 --- a/bin/arg.mli +++ b/bin/arg.mli @@ -26,6 +26,8 @@ module Dep : sig val alias : dir:Stdune.Path.Local.t -> Dune_engine.Alias.Name.t -> t val alias_rec : dir:Stdune.Path.Local.t -> Dune_engine.Alias.Name.t -> t val to_string_maybe_quoted : t -> string + val alias_arg : t conv + val alias_rec_arg : t conv end val bytes : int64 conv diff --git a/bin/build.ml b/bin/build.ml index c6d929c8b54..20c71f0ce7b 100644 --- a/bin/build.ml +++ b/bin/build.ml @@ -184,7 +184,10 @@ let build = let name_ = Arg.info [] ~docv:"TARGET" in let term = let+ builder = Common.Builder.term - and+ targets = Arg.(value & pos_all dep [] name_) in + and+ targets = Arg.(value & pos_all dep [] name_) + and+ aliases_rec = Arg.(value & opt_all Dep.alias_rec_arg [] & info [ "alias-rec" ]) + and+ aliases = Arg.(value & opt_all Dep.alias_arg [] & info [ "alias" ]) in + let targets = List.concat [ targets; aliases; aliases_rec ] in let targets = match targets with | [] -> [ Common.Builder.default_target builder ] diff --git a/doc/changes/12043.md b/doc/changes/12043.md new file mode 100644 index 00000000000..5c336233544 --- /dev/null +++ b/doc/changes/12043.md @@ -0,0 +1,2 @@ +- Add `--alias` and `--alias-rec` flags as an alternative to the `@` and `@@` + syntax in the command line (#12043, fixes #5775, @rgrinberg) diff --git a/test/blackbox-tests/test-cases/alias-arg.t b/test/blackbox-tests/test-cases/alias-arg.t new file mode 100644 index 00000000000..526270531bd --- /dev/null +++ b/test/blackbox-tests/test-cases/alias-arg.t @@ -0,0 +1,33 @@ +Demonstrate the --alias argument to build aliases in the command +line without the @ syntax + + $ cat >dune-project < (lang dune 3.19) + > EOF + + $ cat >dune < (rule + > (alias foo) + > (action (echo "root: foo\n"))) + > (rule + > (alias bar) + > (action (echo "root: bar\n"))) + > EOF + + $ mkdir x + + $ cat >x/dune < (rule + > (alias bar) + > (action (echo "x: bar\n"))) + > EOF + + $ dune build --alias foo --alias x/bar + root: foo + x: bar + + $ dune clean + + $ dune build --alias-rec bar + root: bar + x: bar