Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 19 additions & 15 deletions src/dune_rules/simple_rules.ml
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,23 @@ open Import
open Memo.O

module Alias_rules = struct
let check_empty ~loc ~dir alias =
match Alias.Name.compare (Alias.name alias) Alias0.empty with
| Lt | Gt -> Memo.return ()
| Eq ->
let* project = Dune_load.find_project ~dir in
if Dune_project.dune_version project >= (3, 20)
then
User_error.raise
~loc
[ Pp.text "User-defined rules cannot be added to the 'empty' alias" ]
else Memo.return ()
;;

let add sctx ~alias ~loc build =
let dir = Alias.dir alias in
let* () =
match Alias.Name.compare (Alias.name alias) Alias0.empty with
| Lt | Gt -> Memo.return ()
| Eq ->
let* project = Dune_load.find_project ~dir in
if Dune_project.dune_version project >= (3, 20)
then
User_error.raise
~loc
[ Pp.text "User-defined rules cannot be added to the 'empty' alias" ]
else Memo.return ()
in
Super_context.add_alias_action sctx alias ~dir ~loc build
check_empty ~loc ~dir alias
>>> Super_context.add_alias_action sctx alias ~dir ~loc build
;;

let add_empty sctx ~loc ~alias =
Expand Down Expand Up @@ -269,7 +271,8 @@ let copy_files sctx ~dir ~expander ~src_dir (def : Copy_files.t) =
let+ () =
Memo.Option.iter def.alias ~f:(fun alias ->
let alias = Alias.make alias ~dir in
Rules.Produce.Alias.add_deps alias (Action_builder.path_set targets))
Alias_rules.check_empty ~loc ~dir alias
>>> Rules.Produce.Alias.add_deps alias (Action_builder.path_set targets))
in
targets
;;
Expand All @@ -284,7 +287,8 @@ let copy_files sctx ~dir ~expander ~src_dir (def : Copy_files.t) =
let alias sctx ?extra_bindings ~dir ~expander (alias_conf : Alias_conf.t) =
let alias = Alias.make ~dir alias_conf.name in
let loc = alias_conf.loc in
Expander.eval_blang expander alias_conf.enabled_if
Alias_rules.check_empty ~loc ~dir alias
>>> Expander.eval_blang expander alias_conf.enabled_if
>>= function
| false -> Alias_rules.add_empty sctx ~loc ~alias
| true ->
Expand Down
34 changes: 33 additions & 1 deletion test/blackbox-tests/test-cases/alias-empty.t
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,29 @@ For versions prior to 3.20 this does not fail:
$ dune build @empty
I should not be added!

For versions 3.20 and after this fails:
Also creating an alias called empty is allowed prior to 3.20:
$ cat > dune <<EOF
> (alias
> (name empty)
> (deps foo))
> EOF
$ cat > foo

$ dune build @empty

For versions 3.20 and after these should fail:

$ cat > dune-project <<EOF
> (lang dune 3.20)
> EOF

$ cat > dune <<EOF
> (rule
> (alias empty)
> (action
> (echo "I should not be added!")))
> EOF

$ dune build @empty
File "dune", lines 1-4, characters 0-65:
1 | (rule
Expand All @@ -33,3 +51,17 @@ For versions 3.20 and after this fails:
Error: User-defined rules cannot be added to the 'empty' alias
[1]

$ cat > dune <<EOF
> (alias
> (name empty)
> (deps foo))
> EOF

$ dune build @empty
File "dune", lines 1-3, characters 0-33:
1 | (alias
2 | (name empty)
3 | (deps foo))
Error: User-defined rules cannot be added to the 'empty' alias
[1]

Loading