Skip to content

Commit e49538b

Browse files
committed
Revert "Avoid possibly unmatched pkg_name and pkg_dir"
This reverts commit eef2240.
1 parent 08c201a commit e49538b

File tree

5 files changed

+73
-80
lines changed

5 files changed

+73
-80
lines changed

src/driver/compile.ml

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,18 @@ type compiled = {
1717
include_dirs : Fpath.Set.t;
1818
impl : impl option;
1919
pkg_args : pkg_args;
20-
pkgdir : Packages.pkgdir;
20+
pkg_name : string;
21+
pkg_dir : Fpath.t;
2122
}
2223

2324
let mk_byhash (pkgs : Packages.t Util.StringMap.t) =
2425
Util.StringMap.fold
25-
(fun _pkgname pkg acc ->
26+
(fun pkgname pkg acc ->
2627
List.fold_left
2728
(fun acc (lib : Packages.libty) ->
2829
List.fold_left
2930
(fun acc (m : Packages.modulety) ->
30-
Util.StringMap.add m.m_intf.mif_hash m acc)
31+
Util.StringMap.add m.m_intf.mif_hash (pkgname, m) acc)
3132
acc lib.modules)
3233
acc pkg.Packages.libraries)
3334
pkgs Util.StringMap.empty
@@ -68,7 +69,8 @@ let init_stats (pkgs : Packages.t Util.StringMap.t) =
6869

6970
open Eio.Std
7071

71-
type partial = (string * compiled) list * Packages.modulety Util.StringMap.t
72+
type partial =
73+
(string * compiled) list * (string * Packages.modulety) Util.StringMap.t
7274

7375
let unmarshal filename : partial =
7476
let ic = open_in_bin (Fpath.to_string filename) in
@@ -140,7 +142,7 @@ let compile ?partial ~output_dir ?linked_dir all =
140142
| None ->
141143
Logs.debug (fun m -> m "Error locating hash: %s" hash);
142144
Error Not_found
143-
| Some modty ->
145+
| Some (package_name, modty) ->
144146
let deps = modty.m_intf.mif_deps in
145147
let odoc_file = Fpath.(output_dir // modty.m_intf.mif_odoc_file) in
146148
let odocl_file = Fpath.(linked_dir // modty.m_intf.mif_odocl_file) in
@@ -200,7 +202,8 @@ let compile ?partial ~output_dir ?linked_dir all =
200202
include_dirs = includes;
201203
impl;
202204
pkg_args;
203-
pkgdir = modty.m_pkg;
205+
pkg_dir = modty.m_pkg_dir;
206+
pkg_name = package_name;
204207
}
205208
in
206209

@@ -226,7 +229,7 @@ let compile ?partial ~output_dir ?linked_dir all =
226229
in
227230
let result =
228231
Util.StringMap.fold
229-
(fun _pkgname (pkg : Packages.t) acc ->
232+
(fun package_name (pkg : Packages.t) acc ->
230233
Logs.debug (fun m ->
231234
m "Package %s mlds: [%a]" pkg.name
232235
Fmt.(list ~sep:sp Packages.pp_mld)
@@ -255,7 +258,8 @@ let compile ?partial ~output_dir ?linked_dir all =
255258
include_dirs;
256259
impl = None;
257260
pkg_args;
258-
pkgdir = mld.mld_pkg;
261+
pkg_dir = mld.mld_pkg_dir;
262+
pkg_name = package_name;
259263
}
260264
:: acc)
261265
acc pkg.mlds)
@@ -267,21 +271,17 @@ let compile ?partial ~output_dir ?linked_dir all =
267271
| None -> ());
268272
result
269273

270-
type linked = {
271-
output_file : Fpath.t;
272-
src : Fpath.t option;
273-
pkgdir : Packages.pkgdir;
274-
}
274+
type linked = { output_file : Fpath.t; src : Fpath.t option; pkg_dir : Fpath.t }
275275

276276
let link : compiled list -> _ =
277277
fun compiled ->
278278
let link : compiled -> linked list =
279279
fun c ->
280280
let includes = Fpath.Set.add c.odoc_output_dir c.include_dirs in
281281
let link input_file output_file =
282-
let { pkg_args = { libs; docs }; pkgdir = current_package, _; _ } = c in
283-
Odoc.link ~input_file ~output_file ~includes ~libs ~docs ~current_package
284-
()
282+
let { pkg_args = { libs; docs }; pkg_name; _ } = c in
283+
Odoc.link ~input_file ~output_file ~includes ~libs ~docs
284+
~current_package:pkg_name ()
285285
in
286286
let impl =
287287
match c.impl with
@@ -290,7 +290,7 @@ let link : compiled list -> _ =
290290
m "Linking impl: %a -> %a" Fpath.pp impl_odoc Fpath.pp impl_odocl);
291291
link impl_odoc impl_odocl;
292292
Atomic.incr Stats.stats.linked_impls;
293-
[ { pkgdir = c.pkgdir; output_file = impl_odocl; src = Some src } ]
293+
[ { pkg_dir = c.pkg_dir; output_file = impl_odocl; src = Some src } ]
294294
| None -> []
295295
in
296296
match c.m with
@@ -303,12 +303,12 @@ let link : compiled list -> _ =
303303
(match c.m with
304304
| Module _ -> Atomic.incr Stats.stats.linked_units
305305
| Mld _ -> Atomic.incr Stats.stats.linked_mlds);
306-
{ output_file = c.odocl_file; src = None; pkgdir = c.pkgdir } :: impl
306+
{ output_file = c.odocl_file; src = None; pkg_dir = c.pkg_dir } :: impl
307307
in
308308
Fiber.List.map link compiled |> List.concat
309309

310310
let index_one ~odocl_dir pkgname pkg =
311-
let _, dir = pkg.Packages.pkgdir in
311+
let dir = pkg.Packages.pkg_dir in
312312
let output_file = Fpath.(odocl_dir // dir / Odoc.index_filename) in
313313
let libs =
314314
List.map
@@ -322,9 +322,10 @@ let index_one ~odocl_dir pkgname pkg =
322322
let index ~odocl_dir pkgs = Util.StringMap.iter (index_one ~odocl_dir) pkgs
323323

324324
let sherlodoc_index_one ~html_dir ~odocl_dir _ pkg_content =
325-
let _, pkg_dir = pkg_content.Packages.pkgdir in
326-
let inputs = [ Fpath.(odocl_dir // pkg_dir / Odoc.index_filename) ] in
327-
let dst = Fpath.(html_dir // Sherlodoc.db_js_file pkg_dir) in
325+
let inputs =
326+
[ Fpath.(odocl_dir // pkg_content.Packages.pkg_dir / Odoc.index_filename) ]
327+
in
328+
let dst = Fpath.(html_dir // Sherlodoc.db_js_file pkg_content.pkg_dir) in
328329
let dst_dir, _ = Fpath.split_base dst in
329330
Util.mkdir_p dst_dir;
330331
Sherlodoc.index ~format:`js ~inputs ~dst ()
@@ -340,17 +341,15 @@ let sherlodoc ~html_dir ~odocl_dir pkgs =
340341
let inputs =
341342
pkgs |> Util.StringMap.bindings
342343
|> List.map (fun (_pkgname, pkg) ->
343-
let _, pkg_dir = pkg.Packages.pkgdir in
344-
Fpath.(odocl_dir // pkg_dir / Odoc.index_filename))
344+
Fpath.(odocl_dir // pkg.Packages.pkg_dir / Odoc.index_filename))
345345
in
346346
Sherlodoc.index ~format ~inputs ~dst ()
347347

348348
let html_generate output_dir ~odocl_dir linked =
349349
let html_generate : linked -> unit =
350350
fun l ->
351-
let _, pkg_dir = l.pkgdir in
352-
let search_uris = [ Sherlodoc.db_js_file pkg_dir; Sherlodoc.js_file ] in
353-
let index = Some Fpath.(odocl_dir // pkg_dir / Odoc.index_filename) in
351+
let search_uris = [ Sherlodoc.db_js_file l.pkg_dir; Sherlodoc.js_file ] in
352+
let index = Some Fpath.(odocl_dir // l.pkg_dir / Odoc.index_filename) in
354353
Odoc.html_generate ~search_uris ?index
355354
~output_dir:(Fpath.to_string output_dir)
356355
~input_file:l.output_file ?source:l.src ();

src/driver/dune_style.ml

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,16 @@ let of_dune_build dir =
3434
let cmtidir =
3535
Fpath.(path / Printf.sprintf ".%s.objs" libname / "byte")
3636
in
37-
(* Map lib names to package names. *)
38-
let pkgdir = (libname, Fpath.rem_prefix dir path |> Option.get) in
39-
( pkgdir,
40-
Packages.Lib.v ~pkgdir
37+
let pkg_dir = Fpath.rem_prefix dir path |> Option.get in
38+
( pkg_dir,
39+
Packages.Lib.v ~pkg_dir
4140
~libname_of_archive:(Util.StringMap.singleton libname libname)
42-
~dir:path ~cmtidir:(Some cmtidir) ))
41+
~pkg_name:libname ~dir:path ~cmtidir:(Some cmtidir) ))
4342
libs
4443
in
4544
let packages =
4645
List.filter_map
47-
(fun (pkgdir, lib) ->
46+
(fun (pkg_dir, lib) ->
4847
match lib with
4948
| [ lib ] ->
5049
Some
@@ -55,7 +54,7 @@ let of_dune_build dir =
5554
libraries = [ lib ];
5655
mlds = [];
5756
mld_odoc_dir = Fpath.v lib.Packages.lib_name;
58-
pkgdir;
57+
pkg_dir;
5958
other_docs = Fpath.Set.empty;
6059
} )
6160
| _ -> None)

src/driver/packages.ml

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
(* Packages *)
22

3-
type pkgdir = string * Fpath.t
4-
53
type dep = string * Digest.t
64

75
type id = Odoc.id
@@ -34,7 +32,7 @@ type modulety = {
3432
m_intf : intf;
3533
m_impl : impl option;
3634
m_hidden : bool;
37-
m_pkg : pkgdir;
35+
m_pkg_dir : Fpath.t;
3836
(* The 'top dir' of a package, relative to [_odoc] or [_html] *)
3937
}
4038

@@ -44,7 +42,7 @@ type mld = {
4442
mld_parent_id : id;
4543
mld_path : Fpath.t; (* Absolute or relative to cwd *)
4644
mld_deps : Fpath.t list;
47-
mld_pkg : pkgdir;
45+
mld_pkg_dir : Fpath.t;
4846
(* The 'top dir' of a package, relative to [_odoc] or [_html] *)
4947
}
5048

@@ -63,21 +61,20 @@ type t = {
6361
libraries : libty list;
6462
mlds : mld list;
6563
mld_odoc_dir : Fpath.t; (* Relative to [odoc] dir *)
66-
pkgdir : pkgdir;
64+
pkg_dir : Fpath.t;
6765
other_docs : Fpath.Set.t;
6866
}
6967

7068
let maybe_prepend_top top_dir dir =
7169
match top_dir with None -> dir | Some d -> Fpath.(d // dir)
7270

73-
let find_pkg top_dir pkg_name =
74-
(pkg_name, maybe_prepend_top top_dir Fpath.(v pkg_name))
71+
let pkg_dir top_dir pkg_name = maybe_prepend_top top_dir Fpath.(v pkg_name)
7572

76-
let parent_of_lib (_, pkg_dir) lib_name = Fpath.(pkg_dir / "lib" / lib_name)
73+
let parent_of_lib pkg_dir lib_name = Fpath.(pkg_dir / "lib" / lib_name)
7774

78-
let parent_of_pages (_, pkg_dir) = Fpath.(pkg_dir / "doc")
75+
let parent_of_pages pkg_dir = Fpath.(pkg_dir / "doc")
7976

80-
let parent_of_src (_, pkg_dir) lib_name = Fpath.(pkg_dir / "src" / lib_name)
77+
let parent_of_src pkg_dir lib_name = Fpath.(pkg_dir / "src" / lib_name)
8178

8279
module Module = struct
8380
type t = modulety
@@ -88,7 +85,7 @@ module Module = struct
8885

8986
let is_hidden name = Astring.String.is_infix ~affix:"__" name
9087

91-
let vs pkgdir lib_name libsdir cmtidir modules =
88+
let vs pkg_dir lib_name libsdir cmtidir modules =
9289
let dir = match cmtidir with None -> libsdir | Some dir -> dir in
9390
let mk m_name =
9491
let exists ext =
@@ -108,7 +105,7 @@ module Module = struct
108105
| _ -> None)
109106
in
110107
let mk_intf mif_path =
111-
let mif_parent_id = parent_of_lib pkgdir lib_name in
108+
let mif_parent_id = parent_of_lib pkg_dir lib_name in
112109
let mif_odoc_file =
113110
Fpath.(
114111
mif_parent_id
@@ -128,7 +125,7 @@ module Module = struct
128125
| Error _ -> failwith "bad deps"
129126
in
130127
let mk_impl mip_path =
131-
let mip_parent_id = parent_of_lib pkgdir lib_name in
128+
let mip_parent_id = parent_of_lib pkg_dir lib_name in
132129
let mip_odoc_file =
133130
Fpath.(
134131
mip_parent_id
@@ -151,7 +148,7 @@ module Module = struct
151148
m "Found source file %a for %s" Fpath.pp src_path m_name);
152149
let src_name = Fpath.filename src_path in
153150
let src_id =
154-
Fpath.(parent_of_src pkgdir lib_name / src_name)
151+
Fpath.(parent_of_src pkg_dir lib_name / src_name)
155152
|> Odoc.id_of_fpath
156153
in
157154
Some { src_path; src_id }
@@ -169,7 +166,7 @@ module Module = struct
169166
let m_hidden = is_hidden m_name in
170167
try
171168
let r (m_intf, m_impl) =
172-
Some { m_name; m_intf; m_impl; m_hidden; m_pkg = pkgdir }
169+
Some { m_name; m_intf; m_impl; m_hidden; m_pkg_dir = pkg_dir }
173170
in
174171
match state with
175172
| Some cmt, Some cmti -> r (mk_intf cmti, Some (mk_impl cmt))
@@ -187,8 +184,7 @@ module Module = struct
187184
end
188185

189186
module Lib = struct
190-
let v ~pkgdir ~libname_of_archive ~dir ~cmtidir =
191-
let pkg_name, _ = pkgdir in
187+
let v ~pkg_dir ~libname_of_archive ~pkg_name ~dir ~cmtidir =
192188
Logs.debug (fun m ->
193189
m "Classifying dir %a for package %s" Fpath.pp dir pkg_name);
194190
let dirs =
@@ -215,8 +211,8 @@ module Lib = struct
215211
m "Defaulting to name of library: %s" archive_name);
216212
archive_name
217213
in
218-
let modules = Module.vs pkgdir lib_name dir cmtidir modules in
219-
let odoc_dir = parent_of_lib pkgdir lib_name in
214+
let modules = Module.vs pkg_dir lib_name dir cmtidir modules in
215+
let odoc_dir = parent_of_lib pkg_dir lib_name in
220216
Some { lib_name; odoc_dir; archive_name; modules }
221217
with _ ->
222218
Logs.err (fun m ->
@@ -339,8 +335,8 @@ let of_libs ~packages_dir libs =
339335
match rel_path with
340336
| None -> acc
341337
| Some rel_path ->
342-
let pkgdir = find_pkg packages_dir pkg_name in
343-
let id = Fpath.(parent_of_pages pkgdir // rel_path) in
338+
let pkg_dir = pkg_dir packages_dir pkg_name in
339+
let id = Fpath.(parent_of_pages pkg_dir // rel_path) in
344340
let mld_parent_id = id |> Fpath.parent |> Fpath.rem_empty_seg in
345341
let page_name = Fpath.(rem_ext mld_path |> filename) in
346342
let odoc_file =
@@ -354,7 +350,7 @@ let of_libs ~packages_dir libs =
354350
mld_parent_id = Odoc.id_of_fpath mld_parent_id;
355351
mld_path;
356352
mld_deps;
357-
mld_pkg = pkgdir;
353+
mld_pkg_dir = pkg_dir;
358354
}
359355
:: acc)
360356
odoc_pages []
@@ -373,10 +369,11 @@ let of_libs ~packages_dir libs =
373369
Logs.debug (fun m -> m "No package for dir %a\n%!" Fpath.pp dir);
374370
acc
375371
| Some pkg ->
376-
let pkgdir = find_pkg packages_dir pkg.name in
372+
let pkg_dir = pkg_dir packages_dir pkg.name in
377373

378374
let libraries =
379-
Lib.v ~pkgdir ~libname_of_archive ~dir ~cmtidir:None
375+
Lib.v ~pkg_dir ~libname_of_archive ~pkg_name:pkg.name ~dir
376+
~cmtidir:None
380377
in
381378
let libraries =
382379
List.filter
@@ -407,7 +404,7 @@ let of_libs ~packages_dir libs =
407404
mlds = update_mlds pkg.mlds libraries;
408405
}
409406
| None ->
410-
let mld_odoc_dir = parent_of_pages pkgdir in
407+
let mld_odoc_dir = parent_of_pages pkg_dir in
411408
Some
412409
{
413410
name = pkg.name;
@@ -416,7 +413,7 @@ let of_libs ~packages_dir libs =
416413
mlds;
417414
mld_odoc_dir;
418415
other_docs;
419-
pkgdir;
416+
pkg_dir;
420417
})
421418
acc)
422419
dirs Util.StringMap.empty

0 commit comments

Comments
 (0)