Move SC.Doc to Odoc module

It longer has a rason to exist in super context.
This commit is contained in:
Rudi Grinberg 2018-02-28 17:24:37 +07:00
parent 4144823d9b
commit d01a684f71
3 changed files with 58 additions and 69 deletions

View File

@ -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 =
</html>
|} 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 =

View File

@ -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

View File

@ -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 =