Skip to content

Commit

Permalink
fix(melange) attach melange.emit targets to the default alias
Browse files Browse the repository at this point in the history
Signed-off-by: Haochen Kotoi-Xie <hx@kxc.inc>
Signed-off-by: Antonio Nuno Monteiro <anmonteiro@gmail.com>
  • Loading branch information
anmonteiro committed Jun 11, 2023
1 parent 9bc1592 commit 44e70e7
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 64 deletions.
4 changes: 4 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
Unreleased
----------

- Attach melange rules to the default alias (#7926, @haochenx)

- Cinaps: The promotion rules for cinaps would only offer one file at a time no
matter how many promotions were available. Now we offer all the promotions at
once (#7901, @rgrinberg)
Expand Down Expand Up @@ -39,6 +41,8 @@ Unreleased
- Allow multiple globs in library's `(stdlib (internal_modules ..))`
(@anmonteiro, #7878)

- Attach melange rules to the default alias (#7926, @haochenx)

3.8.1 (2023-06-05)
------------------

Expand Down
31 changes: 13 additions & 18 deletions src/dune_rules/melange/melange_rules.ml
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,17 @@ let build_js ~loc ~dir ~pkg_name ~mode ~module_systems ~output ~obj_dir ~sctx
; Dep src
]))

(* attach [deps] to the specified [alias] AND the (dune default) [all] alias.
when [alias] is not supplied, {!Melange_stanzas.Emit.implicit_alias} is
assumed. *)
let add_deps_to_aliases ?(alias = Melange_stanzas.Emit.implicit_alias) ~dir deps
=
let alias = Alias.make alias ~dir in
let dune_default_alias = Alias.all ~dir in
let attach alias = Rules.Produce.Alias.add_deps alias deps in
Memo.parallel_iter ~f:attach [ alias; dune_default_alias ]

let setup_emit_cmj_rules ~sctx ~dir ~scope ~expander ~dir_contents
(mel : Melange_stanzas.Emit.t) =
let open Memo.O in
Expand Down Expand Up @@ -235,13 +246,7 @@ let setup_emit_cmj_rules ~sctx ~dir ~scope ~expander ~dir_contents
in
()
in
match mel.alias with
| None ->
let alias = Alias.make Melange_stanzas.Emit.implicit_alias ~dir in
Rules.Produce.Alias.add_deps alias emit_and_libs_deps
| Some alias_name ->
let alias = Alias.make alias_name ~dir in
Rules.Produce.Alias.add_deps alias emit_and_libs_deps
add_deps_to_aliases ?alias:mel.alias emit_and_libs_deps ~dir
in
( cctx
, Merlin.make ~requires:requires_compile ~stdlib_dir ~flags ~modules
Expand Down Expand Up @@ -323,17 +328,7 @@ let setup_runtime_assets_rules sctx ~dir ~target_dir ~mode ~output ~for_ mel =
Memo.parallel_iter copy ~f:(fun (src, dst) ->
Super_context.add_rule ~loc ~dir ~mode sctx
(Action_builder.copy ~src ~dst))
and+ () =
match mel.alias with
| None ->
let alias =
Alias.make Melange_stanzas.Emit.implicit_alias ~dir:target_dir
in
Rules.Produce.Alias.add_deps alias deps
| Some alias_name ->
let alias = Alias.make alias_name ~dir:target_dir in
Rules.Produce.Alias.add_deps alias deps
in
and+ () = add_deps_to_aliases ?alias:mel.alias deps ~dir:target_dir in
()

let modules_for_js_and_obj_dir ~sctx ~dir_contents ~scope
Expand Down
48 changes: 3 additions & 45 deletions test/blackbox-tests/test-cases/melange/aliases.t
Original file line number Diff line number Diff line change
Expand Up @@ -67,37 +67,9 @@ Dune default alias works
$ dune clean
$ dune build
$ node _build/default/output/main.js
node:internal/modules/cjs/loader:1078
throw err;
^
Error: Cannot find module '$TESTCASE_ROOT/_build/default/output/main.js'
at Module._resolveFilename (node:internal/modules/cjs/loader:1075:15)
at Module._load (node:internal/modules/cjs/loader:920:27)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47 {
code: 'MODULE_NOT_FOUND',
requireStack: []
}
Node.js v18.16.0
[1]
hello
$ node _build/default/output2/main2.js
node:internal/modules/cjs/loader:1078
throw err;
^
Error: Cannot find module '$TESTCASE_ROOT/_build/default/output2/main2.js'
at Module._resolveFilename (node:internal/modules/cjs/loader:1075:15)
at Module._load (node:internal/modules/cjs/loader:920:27)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47 {
code: 'MODULE_NOT_FOUND',
requireStack: []
}
Node.js v18.16.0
[1]
hello
Users can override melange alias (even if useless)
Expand Down Expand Up @@ -139,18 +111,4 @@ Even if user defines an alias, dune default alias should still work
$ dune clean
$ dune build
$ node _build/default/output/main.js
node:internal/modules/cjs/loader:1078
throw err;
^
Error: Cannot find module '$TESTCASE_ROOT/_build/default/output/main.js'
at Module._resolveFilename (node:internal/modules/cjs/loader:1075:15)
at Module._load (node:internal/modules/cjs/loader:920:27)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47 {
code: 'MODULE_NOT_FOUND',
requireStack: []
}
Node.js v18.16.0
[1]
hello
2 changes: 1 addition & 1 deletion test/blackbox-tests/test-cases/melange/dune-rules.t
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Test dune rules
Calling dune rules with the 'all' alias works fine
$ dune rules @all | grep In_build_dir
[1]
(In_build_dir _build/default/.output.mobjs/melange/melange__Main.cmj))))
Calling dune rules with the alias works fine
Expand Down

0 comments on commit 44e70e7

Please sign in to comment.