Skip to content

Commit a19677f

Browse files
authored
refactor(melange_rules): store target / output_dir separately in Output_kind (#12052)
Signed-off-by: Antonio Nuno Monteiro <[email protected]>
1 parent d750ef4 commit a19677f

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

src/dune_rules/melange/melange_rules.ml

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,22 @@ module Output_kind = struct
66
| Private_library_or_emit of Path.Build.t
77
| Public_library of
88
{ lib_dir : Path.t
9-
; output_dir : Path.Build.t
9+
; target_dir : Path.Build.t
10+
; output_dir : Path.Local.t
1011
}
1112

1213
let[@ocaml.warning "-32"] to_dyn t =
1314
match t with
1415
| Private_library_or_emit dir ->
1516
Dyn.variant "Private_library_or_emit" [ Path.Build.to_dyn dir ]
16-
| Public_library { lib_dir; output_dir } ->
17+
| Public_library { lib_dir; output_dir; target_dir } ->
1718
Dyn.variant
1819
"Public_library"
1920
[ Dyn.record
20-
[ "lib_dir", Path.to_dyn lib_dir; "output_dir", Path.Build.to_dyn output_dir ]
21+
[ "lib_dir", Path.to_dyn lib_dir
22+
; "output_dir", Path.Local.to_dyn output_dir
23+
; "target_dir", Path.Build.to_dyn target_dir
24+
]
2125
]
2226
;;
2327
end
@@ -26,8 +30,11 @@ let output_of_lib =
2630
let public_lib ~info ~target_dir lib_name =
2731
Output_kind.Public_library
2832
{ lib_dir = Lib_info.src_dir info
33+
; target_dir
2934
; output_dir =
30-
Path.Build.L.relative target_dir [ "node_modules"; Lib_name.to_string lib_name ]
35+
Path.Local.relative
36+
(Path.Local.of_string "node_modules")
37+
(Lib_name.to_string lib_name)
3138
}
3239
in
3340
fun ~target_dir lib ->
@@ -55,7 +62,8 @@ let make_js_name ~js_ext ~output m =
5562
let dst_dir =
5663
let src_dir = Module.file m ~ml_kind:Impl |> Option.value_exn |> Path.parent_exn in
5764
match output with
58-
| Output_kind.Public_library { lib_dir; output_dir } ->
65+
| Output_kind.Public_library { lib_dir; target_dir; output_dir } ->
66+
let output_dir = Path.Build.append_local target_dir output_dir in
5967
lib_output_path ~output_dir ~lib_dir src_dir
6068
| Private_library_or_emit target_dir ->
6169
Path.Build.append_source
@@ -431,14 +439,17 @@ module Runtime_deps = struct
431439
Lib_file_deps.eval ~expander ~loc ~paths:Allow_all dep_conf)
432440
in
433441
match output with
434-
| Output_kind.Public_library { lib_dir; output_dir } ->
442+
| Output_kind.Public_library { lib_dir; target_dir; output_dir } ->
435443
Path.Set.fold ~init:empty deps ~f:(fun src ({ copy; deps = _ } as acc) ->
436444
let copy =
437445
match Path.as_external src with
438-
| None -> (src, lib_output_path ~output_dir ~lib_dir src) :: copy
446+
| None ->
447+
let output_dir = Path.Build.append_local target_dir output_dir in
448+
(src, lib_output_path ~output_dir ~lib_dir src) :: copy
439449
| Some src_e ->
440450
(match Path.as_external lib_dir with
441451
| Some lib_dir_e when Path.External.is_descendant src_e ~of_:lib_dir_e ->
452+
let output_dir = Path.Build.append_local target_dir output_dir in
442453
(src, lib_output_path ~output_dir ~lib_dir src) :: copy
443454
| Some _ | None -> raise_external_dep_error src ~for_)
444455
in

0 commit comments

Comments
 (0)