Skip to content

Commit 8fd2a98

Browse files
committed
Remove Build_system.set_packages
Signed-off-by: Jeremie Dimino <[email protected]>
1 parent f7d63f0 commit 8fd2a98

File tree

7 files changed

+66
-62
lines changed

7 files changed

+66
-62
lines changed

src/dune_engine/build_system.ml

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -384,8 +384,6 @@ type t =
384384
-> extra_sub_directories_to_keep Memo.Build.t)
385385
option)
386386
Fdecl.t
387-
; (* Package files are part of *)
388-
packages : (Path.Build.t -> Package.Id.Set.t Memo.Build.t) Fdecl.t
389387
; mutable caching : caching option
390388
; sandboxing_preference : Sandbox_mode.t list
391389
; mutable rule_done : int
@@ -2091,12 +2089,7 @@ let process_memcycle (cycle_error : Memo.Cycle_error.t) =
20912089
; Pp.chain cycle ~f:(fun p -> p)
20922090
]
20932091

2094-
let set_packages f =
2095-
let t = t () in
2096-
Fdecl.set t.packages f
2097-
2098-
let package_deps (pkg : Package.t) files =
2099-
let t = t () in
2092+
let package_deps ~packages_of (pkg : Package.t) files =
21002093
let rules_seen = ref Rule.Set.empty in
21012094
let rec loop fn =
21022095
match Path.as_in_build_dir fn with
@@ -2105,7 +2098,7 @@ let package_deps (pkg : Package.t) files =
21052098
and it doesn't have dependencies that do *)
21062099
Memo.Build.return Package.Id.Set.empty
21072100
| Some fn ->
2108-
let* pkgs = Fdecl.get t.packages fn in
2101+
let* pkgs = packages_of fn in
21092102
if Package.Id.Set.is_empty pkgs || Package.Id.Set.mem pkgs pkg.id then
21102103
loop_deps fn
21112104
else
@@ -2346,7 +2339,6 @@ let init ~stats ~contexts ~promote_source ?caching ~sandboxing_preference () =
23462339
in
23472340
let t =
23482341
{ contexts
2349-
; packages = Fdecl.create Dyn.Encoder.opaque
23502342
; gen_rules = Fdecl.create Dyn.Encoder.opaque
23512343
; init_rules = Fdecl.create Dyn.Encoder.opaque
23522344
; vcs = Fdecl.create Dyn.Encoder.opaque

src/dune_engine/build_system.mli

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,14 @@ val targets_of : dir:Path.t -> Path.Set.t Memo.Build.t
105105
(** Load the rules for this directory. *)
106106
val load_dir : dir:Path.t -> unit Memo.Build.t
107107

108-
(** Sets the package assignment *)
109-
val set_packages : (Path.Build.t -> Package.Id.Set.t Memo.Build.t) -> unit
110-
111108
(** Assuming [files] is the list of files in [_build/install] that belong to
112109
package [pkg], [package_deps t pkg files] is the set of direct package
113110
dependencies of [package]. *)
114-
val package_deps : Package.t -> Path.Set.t -> Package.Id.Set.t Memo.Build.t
111+
val package_deps :
112+
packages_of:(Path.Build.t -> Package.Id.Set.t Memo.Build.t)
113+
-> Package.t
114+
-> Path.Set.t
115+
-> Package.Id.Set.t Memo.Build.t
115116

116117
(** {2 Aliases} *)
117118

src/dune_rules/gen_rules.ml

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -390,22 +390,6 @@ let gen_rules ~sctx ~dir components =
390390
let init () =
391391
let open Fiber.O in
392392
let* sctxs = Memo.Build.run (Memo.Lazy.force Super_context.all) in
393-
let () =
394-
Build_system.set_packages (fun path ->
395-
match
396-
let open Option.O in
397-
let* ctx_name, _ = Path.Build.extract_build_context path in
398-
let* ctx_name = Context_name.of_string_opt ctx_name in
399-
Context_name.Map.find sctxs ctx_name
400-
with
401-
| None -> Memo.Build.return Package.Id.Set.empty
402-
| Some sctx ->
403-
let open Memo.Build.O in
404-
let+ map = Install_rules.packages sctx in
405-
Option.value
406-
(Path.Build.Map.find map path)
407-
~default:Package.Id.Set.empty)
408-
in
409393
let+ () =
410394
Build_system.set_rule_generators
411395
~init:(fun () ->

src/dune_rules/install_rules.ml

Lines changed: 45 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -752,6 +752,48 @@ let install_entries sctx (package : Package.t) =
752752
let+ packages = Stanzas_to_entries.stanzas_to_entries sctx in
753753
Package.Name.Map.Multi.find packages (Package.name package)
754754

755+
let packages =
756+
let f sctx =
757+
let packages = Package.Name.Map.values (Super_context.packages sctx) in
758+
let+ l =
759+
Memo.Build.parallel_map packages ~f:(fun (pkg : Package.t) ->
760+
install_entries sctx pkg
761+
>>| List.map ~f:(fun (_loc, (entry : _ Install.Entry.t)) ->
762+
(entry.src, pkg.id)))
763+
in
764+
Path.Build.Map.of_list_fold (List.concat l) ~init:Package.Id.Set.empty
765+
~f:Package.Id.Set.add
766+
in
767+
let memo =
768+
Memo.create "package-map" ~doc:"Return a map assining package to files"
769+
~input:(module Super_context.As_memo_key)
770+
~visibility:Hidden
771+
~output:
772+
(Allow_cutoff
773+
(module struct
774+
type t = Package.Id.Set.t Path.Build.Map.t
775+
776+
let to_dyn = Path.Build.Map.to_dyn Package.Id.Set.to_dyn
777+
778+
let equal = Path.Build.Map.equal ~equal:Package.Id.Set.equal
779+
end))
780+
f
781+
in
782+
fun sctx -> Memo.exec memo sctx
783+
784+
let packages_file_is_part_of path =
785+
Memo.Build.Option.bind
786+
(let open Option.O in
787+
let* ctx_name, _ = Path.Build.extract_build_context path in
788+
Context_name.of_string_opt ctx_name)
789+
~f:Super_context.find
790+
>>= function
791+
| None -> Memo.Build.return Package.Id.Set.empty
792+
| Some sctx ->
793+
let open Memo.Build.O in
794+
let+ map = packages sctx in
795+
Option.value (Path.Build.Map.find map path) ~default:Package.Id.Set.empty
796+
755797
let install_rules sctx (package : Package.t) =
756798
let package_name = Package.name package in
757799
let install_paths =
@@ -772,7 +814,9 @@ let install_rules sctx (package : Package.t) =
772814
let packages =
773815
let open Action_builder.O in
774816
let+ packages =
775-
Action_builder.memo_build (Build_system.package_deps package files)
817+
Action_builder.memo_build
818+
(Build_system.package_deps package files
819+
~packages_of:packages_file_is_part_of)
776820
in
777821
match strict_package_deps with
778822
| false -> packages
@@ -932,32 +976,3 @@ let gen_rules sctx ~dir =
932976
Rules.produce_dir ~dir (Option.value ~default:Rules.Dir_rules.empty rules)
933977
in
934978
Build_system.Subdir_set.These subdirs
935-
936-
let packages =
937-
let f sctx =
938-
let packages = Package.Name.Map.values (Super_context.packages sctx) in
939-
let+ l =
940-
Memo.Build.parallel_map packages ~f:(fun (pkg : Package.t) ->
941-
install_entries sctx pkg
942-
>>| List.map ~f:(fun (_loc, (entry : _ Install.Entry.t)) ->
943-
(entry.src, pkg.id)))
944-
in
945-
Path.Build.Map.of_list_fold (List.concat l) ~init:Package.Id.Set.empty
946-
~f:Package.Id.Set.add
947-
in
948-
let memo =
949-
Memo.create "package-map" ~doc:"Return a map assining package to files"
950-
~input:(module Super_context.As_memo_key)
951-
~visibility:Hidden
952-
~output:
953-
(Allow_cutoff
954-
(module struct
955-
type t = Package.Id.Set.t Path.Build.Map.t
956-
957-
let to_dyn = Path.Build.Map.to_dyn Package.Id.Set.to_dyn
958-
959-
let equal = Path.Build.Map.equal ~equal:Package.Id.Set.equal
960-
end))
961-
f
962-
in
963-
fun sctx -> Memo.exec memo sctx

src/dune_rules/install_rules.mli

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,3 @@ val meta_and_dune_package_rules :
2020
aalekseyev: actually I think we should just remove
2121
[meta_and_dune_package_rules] from the interface and have [gen_rules] do
2222
everything. *)
23-
24-
val packages : Super_context.t -> Package.Id.Set.t Path.Build.Map.t Memo.Build.t

src/memo/memo.ml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,16 @@ module Build = struct
3232
match option with
3333
| None -> return ()
3434
| Some a -> f a
35+
36+
let map option ~f =
37+
match option with
38+
| None -> return None
39+
| Some a -> f a >>| Option.some
40+
41+
let bind option ~f =
42+
match option with
43+
| None -> return None
44+
| Some a -> f a
3545
end
3646

3747
module Result = struct

src/memo/memo.mli

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@ module Build : sig
8686

8787
module Option : sig
8888
val iter : 'a option -> f:('a -> unit t) -> unit t
89+
90+
val map : 'a option -> f:('a -> 'b t) -> 'b option t
91+
92+
val bind : 'a option -> f:('a -> 'b option t) -> 'b option t
8993
end
9094

9195
module Result : sig

0 commit comments

Comments
 (0)