diff --git a/src/odoc.ml b/src/odoc.ml index 261acb77..e23cf06c 100644 --- a/src/odoc.ml +++ b/src/odoc.ml @@ -4,6 +4,56 @@ open Build.O module SC = Super_context +module Doc = struct + let root sctx = Path.relative (SC.context sctx).Context.build_dir "_doc" + + type origin = + | Public of string + | Private of string * Scope_info.Name.t + + let dir_internal t origin = + let name = + match origin with + | Public n -> n + | Private (n, s) -> sprintf "%s@%s" n (Scope_info.Name.to_string s) + in + Path.relative (root t) name + + let dir t (lib : Library.t) = + dir_internal t + (match lib.public with + | Some { name; _ } -> Public name + | None -> Private (lib.name, lib.scope_name)) + + let alias = Build_system.Alias.make ".doc-all" + + let deps t = + Build.dyn_paths (Build.arr ( + List.fold_left ~init:[] ~f:(fun acc (lib : Lib.t) -> + if Lib.is_local lib then ( + let dir = + dir_internal t + (match Lib.status lib with + | Installed -> assert false + | Public -> Public (Lib.name lib) + | Private s -> Private (Lib.name lib, s)) + in + Build_system.Alias.stamp_file (alias ~dir) :: acc + ) else ( + acc + ) + ))) + + let alias t lib = alias ~dir:(dir t lib) + + let static_deps t lib = Build_system.Alias.dep (alias t lib) + + let setup_deps t lib files = SC.add_alias_deps t (alias t lib) files + + let dir t lib = dir t lib +end + + let ( ++ ) = Path.relative let get_odoc sctx = SC.resolve_program sctx "odoc" ~hint:"opam install odoc" @@ -103,7 +153,7 @@ let to_html sctx (m : Module_or_mld.t) odoc_file ~doc_dir ~odoc ~dir ~includes html_dir, [jbuilder_keep] in SC.add_rule sctx - (SC.Doc.static_deps sctx lib + (Doc.static_deps sctx lib >>> includes >>> @@ -127,7 +177,7 @@ let all_mld_files sctx ~(lib : Library.t) ~modules ~dir files = if List.mem "index.mld" ~set:files then files else "index.mld" :: files in let lib_name = Library.best_name lib in - let doc_dir = SC.Doc.dir sctx lib in + let doc_dir = Doc.dir sctx lib in List.map all_files ~f:(fun file -> let name = Filename.chop_extension file in let mld = Mld.create ~name in @@ -160,7 +210,7 @@ let toplevel_index ~doc_dir = doc_dir ++ "index.html" let setup_library_rules sctx (lib : Library.t) ~dir ~scope ~modules ~mld_files ~requires ~(dep_graphs:Ocamldep.Dep_graph.t Ml_kind.Dict.t) = - let doc_dir = SC.Doc.dir sctx lib in + let doc_dir = Doc.dir sctx lib in let obj_dir, lib_unique_name = let obj_dir, name, status = match Lib.DB.find (Scope.libs scope) lib.name with @@ -184,7 +234,7 @@ let setup_library_rules sctx (lib : Library.t) ~dir ~scope ~modules ~mld_files let ctx = SC.context sctx in Build.memoize "includes" (requires - >>> SC.Doc.deps sctx + >>> Doc.deps sctx >>^ Lib.L.include_flags ~stdlib_dir:ctx.stdlib_dir) in let mld_files = @@ -201,7 +251,7 @@ let setup_library_rules sctx (lib : Library.t) ~dir ~scope ~modules ~mld_files ~doc_dir ~lib_unique_name (Module m)) in let inputs_and_odoc_files = modules_and_odoc_files @ mld_and_odoc_files in - SC.Doc.setup_deps sctx lib (List.map inputs_and_odoc_files ~f:snd); + Doc.setup_deps sctx lib (List.map inputs_and_odoc_files ~f:snd); (* let modules_and_odoc_files = if lib.wrapped then @@ -215,7 +265,7 @@ let setup_library_rules sctx (lib : Library.t) ~dir ~scope ~modules ~mld_files List.map inputs_and_odoc_files ~f:(fun (m, odoc_file) -> to_html sctx m odoc_file ~doc_dir ~odoc ~dir ~includes ~lib) in - let doc_root = SC.Doc.root sctx in + let doc_root = Doc.root sctx in let alias = match lib.public with | None -> Build_system.Alias.private_doc ~dir @@ -227,7 +277,7 @@ let setup_library_rules sctx (lib : Library.t) ~dir ~scope ~modules ~mld_files let setup_css_rule sctx = let context = SC.context sctx in - let doc_dir = SC.Doc.root sctx in + let doc_dir = Doc.root sctx in SC.add_rule sctx (Build.run ~context ~dir:context.build_dir @@ -278,7 +328,7 @@ let setup_toplevel_index_rule sctx = |} list_items in - let doc_dir = SC.Doc.root sctx in + let doc_dir = Doc.root sctx in SC.add_rule sctx @@ Build.write_file (toplevel_index ~doc_dir) html let gen_rules sctx ~dir:_ rest = diff --git a/src/super_context.ml b/src/super_context.ml index b8a0967a..832017c1 100644 --- a/src/super_context.ml +++ b/src/super_context.ml @@ -294,55 +294,6 @@ module Libs = struct x :: acc))) end -module Doc = struct - let root t = Path.relative t.context.Context.build_dir "_doc" - - type origin = - | Public of string - | Private of string * Scope_info.Name.t - - let dir_internal t origin = - let name = - match origin with - | Public n -> n - | Private (n, s) -> sprintf "%s@%s" n (Scope_info.Name.to_string s) - in - Path.relative (root t) name - - let dir t (lib : Library.t) = - dir_internal t - (match lib.public with - | Some { name; _ } -> Public name - | None -> Private (lib.name, lib.scope_name)) - - let alias = Alias.make ".doc-all" - - let deps t = - Build.dyn_paths (Build.arr ( - List.fold_left ~init:[] ~f:(fun acc (lib : Lib.t) -> - if Lib.is_local lib then ( - let dir = - dir_internal t - (match Lib.status lib with - | Installed -> assert false - | Public -> Public (Lib.name lib) - | Private s -> Private (Lib.name lib, s)) - in - Alias.stamp_file (alias ~dir) :: acc - ) else ( - acc - ) - ))) - - let alias t lib = alias ~dir:(dir t lib) - - let static_deps t lib = Alias.dep (alias t lib) - - let setup_deps t lib files = add_alias_deps t (alias t lib) files - - let dir t lib = dir t lib -end - module Deps = struct open Build.O open Dep_conf diff --git a/src/super_context.mli b/src/super_context.mli index 2d0704e7..39f06329 100644 --- a/src/super_context.mli +++ b/src/super_context.mli @@ -173,18 +173,6 @@ module Deps : sig -> (unit, Path.t list) Build.t end -module Doc : sig - val root : t -> Path.t - - val dir : t -> Library.t -> Path.t - - val deps : t -> (Lib.t list, Lib.t list) Build.t - - val static_deps : t -> Library.t -> ('a, 'a) Build.t - - val setup_deps : t -> Library.t -> Path.t list -> unit -end - (** Interpret action written in jbuild files *) module Action : sig type targets =