From 23f00abf18be03c9699514263f3bf23192485db2 Mon Sep 17 00:00:00 2001 From: Jeremie Dimino Date: Mon, 22 May 2017 14:12:02 +0100 Subject: [PATCH] Update odoc rules --- src/odoc.ml | 34 ++++++++++++---------------------- src/super_context.ml | 3 +++ src/super_context.mli | 3 +++ 3 files changed, 18 insertions(+), 22 deletions(-) diff --git a/src/odoc.ml b/src/odoc.ml index 22e63b50..710d2afd 100644 --- a/src/odoc.ml +++ b/src/odoc.ml @@ -7,14 +7,7 @@ module SC = Super_context let ( ++ ) = Path.relative let get_odoc sctx = SC.resolve_program sctx "odoc" ~hint:"opam install odoc" - -let lib_odoc_all ~dir (lib : Library.t) = - Alias.file (Alias.lib_odoc_all ~dir lib.name) - -let lib_dependencies (libs : Lib.t list) = - List.filter_map libs ~f:(function - | External _ -> None - | Internal (dir, lib) -> Some (lib_odoc_all ~dir lib)) +let odoc_ext = ".odoc" let module_deps (m : Module.t) ~dir ~dep_graph ~modules = Build.dyn_paths @@ -50,7 +43,7 @@ let to_html sctx (m : Module.t) odoc_file ~doc_dir ~odoc ~dir ~includes doc_dir ++ lib_public_name ++ String.capitalize m.obj_name ++ "index.html" in SC.add_rule sctx - (Alias.dep (Alias.lib_odoc_all ~dir lib.name) + (SC.Libs.static_file_deps (dir, lib) ~ext:odoc_ext >>> includes >>> @@ -96,7 +89,7 @@ let lib_index sctx ~odoc ~dir ~(lib : Library.t) ~lib_public_name ~doc_dir ~modu doc_dir ++ lib_public_name ++ "index.html" in SC.add_rule sctx - (Alias.dep (Alias.lib_odoc_all ~dir lib.name) + (SC.Libs.static_file_deps (dir, lib) ~ext:odoc_ext >>> includes >>> @@ -110,11 +103,9 @@ let lib_index sctx ~odoc ~dir ~(lib : Library.t) ~lib_public_name ~doc_dir ~modu ]); html_file -let doc_dir = Path.of_string "_build/doc" +let doc_dir ~context = Path.relative context.Context.build_dir "_doc" -let css_file sctx = - let context = SC.context sctx in - doc_dir ++ context.name ++ "odoc.css" +let css_file ~doc_dir = doc_dir ++ "odoc.css" let setup_library_rules sctx (lib : Library.t) ~dir ~modules ~requires ~(dep_graph:Ocamldep.dep_graph) = @@ -136,7 +127,7 @@ let setup_library_rules sctx (lib : Library.t) ~dir ~modules ~requires let includes = requires >>> - Build.dyn_paths (Build.arr lib_dependencies) + SC.Libs.file_deps sctx ~ext:odoc_ext >>^ Lib.include_flags in let modules_and_odoc_files = @@ -144,10 +135,9 @@ let setup_library_rules sctx (lib : Library.t) ~dir ~modules ~requires ~f:(compile_module sctx ~odoc ~dir ~includes ~dep_graph ~modules ~lib_public_name:public.name) in - let aliases = SC.aliases sctx in - Alias.add_deps aliases (Alias.lib_odoc_all ~dir lib.name) + SC.Libs.setup_file_deps_alias sctx ~ext:odoc_ext (dir, lib) (List.map modules_and_odoc_files ~f:snd); - let doc_dir = doc_dir ++ context.name in + let doc_dir = doc_dir ~context in (* let modules_and_odoc_files = if lib.wrapped then @@ -166,17 +156,17 @@ let setup_library_rules sctx (lib : Library.t) ~dir ~modules ~requires lib_index sctx ~dir ~lib ~lib_public_name:public.name ~doc_dir ~modules ~includes ~odoc in - Alias.add_deps aliases (Alias.doc ~dir) - (css_file sctx + Alias.add_deps (SC.aliases sctx) (Alias.doc ~dir) + (css_file ~doc_dir :: lib_index_html :: html_files)) let setup_css_rule sctx = let context = SC.context sctx in - let doc_dir = doc_dir ++ context.name in + let doc_dir = doc_dir ~context in SC.add_rule sctx (Build.run ~context ~dir:context.build_dir - ~extra_targets:[doc_dir ++ "odoc.css"] + ~extra_targets:[css_file ~doc_dir] (get_odoc sctx) [ A "css"; A "-o"; Path doc_dir ]); diff --git a/src/super_context.ml b/src/super_context.ml index 0fcfa053..5d5d3b28 100644 --- a/src/super_context.ml +++ b/src/super_context.ml @@ -380,6 +380,9 @@ module Libs = struct end | Internal lib -> Alias.file (lib_files_alias lib ~ext) :: acc))) + + let static_file_deps ~ext lib = + Alias.dep (lib_files_alias lib ~ext) end module Deps = struct diff --git a/src/super_context.mli b/src/super_context.mli index 7b0f6b36..20417209 100644 --- a/src/super_context.mli +++ b/src/super_context.mli @@ -100,6 +100,9 @@ module Libs : sig extension [ext] of the libraries given as input. *) val file_deps : t -> ext:string -> (Lib.t list, Lib.t list) Build.t + (** Same as [file_deps] but for a single known library *) + val static_file_deps : ext:string -> Lib.Internal.t -> ('a, 'a) Build.t + (** Setup the alias that depends on all files with a given extension for a library *) val setup_file_deps_alias : t -> Lib.Internal.t -> ext:string -> Path.t list -> unit