From 4e7d1fa8a9f518edb7bfd1a2476c6ff950a5ed87 Mon Sep 17 00:00:00 2001 From: Jon Ludlam Date: Sat, 21 Jan 2023 11:22:24 +0000 Subject: [PATCH 1/6] odoc: Put support files in their own directory odoc 2.2 added math support, which comes with extra javascript, css and font files. Rather than add these as explicit targets, this commit changes the invocation of `odoc support-files` to output into the dir `_build/default/_doc/_html/_odoc_support` as a directory target. Signed-off-by: Jon Ludlam --- src/dune_rules/odoc.ml | 26 +++++++++++-------- .../odoc/multiple-private-libs.t/run.t | 2 +- .../test-cases/odoc/odoc-simple.t/run.t | 2 +- .../odoc/odoc-unique-mlds/diff-scope.t/run.t | 2 +- .../odoc/odoc-unique-mlds/same-scope.t/run.t | 2 +- 5 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/dune_rules/odoc.ml b/src/dune_rules/odoc.ml index b2fbede28bd..d49d230a142 100644 --- a/src/dune_rules/odoc.ml +++ b/src/dune_rules/odoc.ml @@ -111,9 +111,7 @@ module Paths = struct let gen_mld_dir ctx pkg = root ctx ++ "_mlds" ++ Package.Name.to_string pkg - let css_file ctx = html_root ctx ++ "odoc.css" - - let highlight_pack_js ctx = html_root ctx ++ "highlight.pack.js" + let odoc_support ctx = html_root ctx ++ "_odoc_support" let toplevel_index ctx = html_root ctx ++ "index.html" end @@ -353,6 +351,10 @@ let setup_html sctx (odoc_file : odoc_artefact) = "html-generate" ~flags_for:None [ A "-o" ; Path (Path.build (Paths.html_root ctx)) + ; A "--support-uri" + ; A "_odoc_support" + ; A "--theme-uri" + ; A "_odoc_support" ; Dep (Path.build odoc_file.odocl_file) ; Hidden_targets [ odoc_file.html_file ] ] @@ -371,15 +373,17 @@ let setup_html sctx (odoc_file : odoc_artefact) = let setup_css_rule sctx = let open Memo.O in let ctx = Super_context.context sctx in + let dir = Paths.html_root ctx ++ "_odoc_support" in let* run_odoc = run_odoc sctx ~dir:(Path.build ctx.build_dir) "support-files" - ~flags_for:None - [ A "-o" - ; Path (Path.build (Paths.html_root ctx)) - ; Hidden_targets [ Paths.css_file ctx; Paths.highlight_pack_js ctx ] - ] + ~flags_for:None [ A "-o"; Target dir ] in - add_rule sctx run_odoc + add_rule sctx + (Action_builder.progn + [ Action_builder.with_no_targets + (Action_builder.return (Action.Full.make (Action.Remove_tree dir))) + ; run_odoc + ]) let sp = Printf.sprintf @@ -404,7 +408,7 @@ let setup_toplevel_index_rule sctx = index - + @@ -495,7 +499,7 @@ let create_odoc ctx ~target odoc_file = let static_html ctx = let open Paths in - [ css_file ctx; highlight_pack_js ctx; toplevel_index ctx ] + [ odoc_support ctx; toplevel_index ctx ] let check_mlds_no_dupes ~pkg ~mlds = match diff --git a/test/blackbox-tests/test-cases/odoc/multiple-private-libs.t/run.t b/test/blackbox-tests/test-cases/odoc/multiple-private-libs.t/run.t index bcf2b7dba9e..64fb6cd78a8 100644 --- a/test/blackbox-tests/test-cases/odoc/multiple-private-libs.t/run.t +++ b/test/blackbox-tests/test-cases/odoc/multiple-private-libs.t/run.t @@ -1,7 +1,7 @@ This test checks that there is no clash when two private libraries have the same name $ dune build --display short @doc-private - odoc _doc/_html/highlight.pack.js,_doc/_html/odoc.css + odoc _doc/_html/_odoc_support ocamlc a/.test.objs/byte/test.{cmi,cmo,cmt} ocamlc b/.test.objs/byte/test.{cmi,cmo,cmt} odoc a/.test.objs/byte/test.odoc diff --git a/test/blackbox-tests/test-cases/odoc/odoc-simple.t/run.t b/test/blackbox-tests/test-cases/odoc/odoc-simple.t/run.t index 6b74815d066..32fa585da52 100644 --- a/test/blackbox-tests/test-cases/odoc/odoc-simple.t/run.t +++ b/test/blackbox-tests/test-cases/odoc/odoc-simple.t/run.t @@ -16,7 +16,7 @@ This test if `.odocl` files are generated index - + diff --git a/test/blackbox-tests/test-cases/odoc/odoc-unique-mlds/diff-scope.t/run.t b/test/blackbox-tests/test-cases/odoc/odoc-unique-mlds/diff-scope.t/run.t index 42818864d7e..0facbf03562 100644 --- a/test/blackbox-tests/test-cases/odoc/odoc-unique-mlds/diff-scope.t/run.t +++ b/test/blackbox-tests/test-cases/odoc/odoc-unique-mlds/diff-scope.t/run.t @@ -1,6 +1,6 @@ Duplicate mld's in different scope $ dune build @doc --display short - odoc _doc/_html/highlight.pack.js,_doc/_html/odoc.css + odoc _doc/_html/_odoc_support odoc _doc/_odoc/pkg/scope1/page-index.odoc ocamlc scope1/.scope1.objs/byte/scope1.{cmi,cmo,cmt} odoc _doc/_odoc/pkg/scope2/page-index.odoc diff --git a/test/blackbox-tests/test-cases/odoc/odoc-unique-mlds/same-scope.t/run.t b/test/blackbox-tests/test-cases/odoc/odoc-unique-mlds/same-scope.t/run.t index e7bcb2e8c8e..1284d13aff7 100644 --- a/test/blackbox-tests/test-cases/odoc/odoc-unique-mlds/same-scope.t/run.t +++ b/test/blackbox-tests/test-cases/odoc/odoc-unique-mlds/same-scope.t/run.t @@ -1,6 +1,6 @@ Duplicate mld's in the same scope $ dune build @doc --display short - odoc _doc/_html/highlight.pack.js,_doc/_html/odoc.css + odoc _doc/_html/_odoc_support odoc _doc/_odoc/pkg/root/page-index.odoc ocamlc lib1/.root_lib1.objs/byte/root_lib1.{cmi,cmo,cmt} ocamlc lib2/.root_lib2.objs/byte/root_lib2.{cmi,cmo,cmt} From 370d8fc6ef16749b616103233a38358bca496810 Mon Sep 17 00:00:00 2001 From: Jon Ludlam Date: Mon, 6 Feb 2023 16:52:44 +0000 Subject: [PATCH 2/6] Set directory targets for the _odoc_support dir Signed-off-by: Jon Ludlam --- src/dune_rules/odoc.ml | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/dune_rules/odoc.ml b/src/dune_rules/odoc.ml index d49d230a142..e5f6edafb8a 100644 --- a/src/dune_rules/odoc.ml +++ b/src/dune_rules/odoc.ml @@ -370,10 +370,15 @@ let setup_html sctx (odoc_file : odoc_artefact) = ]))) :: run_odoc :: dummy)) +let css_directory sctx = + let ctx = Super_context.context sctx in + let dir = Paths.html_root ctx ++ "_odoc_support" in + dir + let setup_css_rule sctx = let open Memo.O in + let dir = css_directory sctx in let ctx = Super_context.context sctx in - let dir = Paths.html_root ctx ++ "_odoc_support" in let* run_odoc = run_odoc sctx ~dir:(Path.build ctx.build_dir) "support-files" ~flags_for:None [ A "-o"; Target dir ] @@ -790,14 +795,11 @@ let setup_private_library_doc_alias sctx ~scope ~dir (l : Dune_file.Library.t) = Rules.Produce.Alias.add_deps (Alias.private_doc ~dir) (lib |> Dep.html_alias ctx |> Dune_engine.Dep.alias |> Action_builder.dep) -let has_rules m = +let has_rules ?(directory_targets = Path.Build.Map.empty) m = let rules = Rules.collect_unit (fun () -> m) in Memo.return (Build_config.Rules - { rules - ; build_dir_only_sub_dirs = Subdir_set.empty - ; directory_targets = Path.Build.Map.empty - }) + { rules; build_dir_only_sub_dirs = Subdir_set.empty; directory_targets }) let with_package pkg ~f = let pkg = Package.Name.of_string pkg in @@ -822,7 +824,11 @@ let gen_rules sctx ~dir:_ rest = ; directory_targets = Path.Build.Map.empty }) | [ "_html" ] -> - has_rules (setup_css_rule sctx >>> setup_toplevel_index_rule sctx) + let directory_targets = + Path.Build.Map.singleton (css_directory sctx) Loc.none + in + has_rules ~directory_targets + (setup_css_rule sctx >>> setup_toplevel_index_rule sctx) | [ "_mlds"; pkg ] -> with_package pkg ~f:(fun pkg -> let* _mlds, rules = package_mlds sctx ~pkg in From 2adb08e21ba273215d4afbee1e0b6c6194213301 Mon Sep 17 00:00:00 2001 From: Jon Ludlam Date: Mon, 6 Feb 2023 17:40:32 +0000 Subject: [PATCH 3/6] More directory rules fixes for odoc Signed-off-by: Jon Ludlam --- src/dune_rules/odoc.ml | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/dune_rules/odoc.ml b/src/dune_rules/odoc.ml index e5f6edafb8a..acc37f20031 100644 --- a/src/dune_rules/odoc.ml +++ b/src/dune_rules/odoc.ml @@ -380,15 +380,11 @@ let setup_css_rule sctx = let dir = css_directory sctx in let ctx = Super_context.context sctx in let* run_odoc = - run_odoc sctx ~dir:(Path.build ctx.build_dir) "support-files" - ~flags_for:None [ A "-o"; Target dir ] + let+ cmd = run_odoc sctx ~dir:(Path.build ctx.build_dir) "support-files" + ~flags_for:None [ A "-o"; Path (Path.build dir) ] in + cmd |> Action_builder.With_targets.add_directories ~directory_targets:[ dir ] in - add_rule sctx - (Action_builder.progn - [ Action_builder.with_no_targets - (Action_builder.return (Action.Full.make (Action.Remove_tree dir))) - ; run_odoc - ]) + add_rule sctx run_odoc let sp = Printf.sprintf From 239d21d6af8f7396e8f41fb7e2ddd955da46ed38 Mon Sep 17 00:00:00 2001 From: Jon Ludlam Date: Mon, 6 Feb 2023 18:11:07 +0000 Subject: [PATCH 4/6] Formatting Signed-off-by: Jon Ludlam --- src/dune_rules/odoc.ml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/dune_rules/odoc.ml b/src/dune_rules/odoc.ml index acc37f20031..4316d36d7a6 100644 --- a/src/dune_rules/odoc.ml +++ b/src/dune_rules/odoc.ml @@ -380,9 +380,13 @@ let setup_css_rule sctx = let dir = css_directory sctx in let ctx = Super_context.context sctx in let* run_odoc = - let+ cmd = run_odoc sctx ~dir:(Path.build ctx.build_dir) "support-files" - ~flags_for:None [ A "-o"; Path (Path.build dir) ] in - cmd |> Action_builder.With_targets.add_directories ~directory_targets:[ dir ] + let+ cmd = + run_odoc sctx ~dir:(Path.build ctx.build_dir) "support-files" + ~flags_for:None + [ A "-o"; Path (Path.build dir) ] + in + cmd + |> Action_builder.With_targets.add_directories ~directory_targets:[ dir ] in add_rule sctx run_odoc From e6616e89dddb8369355600bacf6b54eb3e17d76e Mon Sep 17 00:00:00 2001 From: Jon Ludlam Date: Mon, 6 Feb 2023 22:02:24 +0000 Subject: [PATCH 5/6] Factor out constant Signed-off-by: Jon Ludlam --- src/dune_rules/odoc.ml | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/dune_rules/odoc.ml b/src/dune_rules/odoc.ml index 4316d36d7a6..9e4841b4927 100644 --- a/src/dune_rules/odoc.ml +++ b/src/dune_rules/odoc.ml @@ -85,6 +85,8 @@ let add_rule sctx = Super_context.add_rule sctx ~dir module Paths = struct + let odoc_support_dirname = "_odoc_support" + let root (context : Context.t) = Path.Build.relative context.Context.build_dir "_doc" @@ -111,7 +113,7 @@ module Paths = struct let gen_mld_dir ctx pkg = root ctx ++ "_mlds" ++ Package.Name.to_string pkg - let odoc_support ctx = html_root ctx ++ "_odoc_support" + let odoc_support ctx = html_root ctx ++ odoc_support_dirname let toplevel_index ctx = html_root ctx ++ "index.html" end @@ -345,6 +347,11 @@ let setup_html sctx (odoc_file : odoc_artefact) = (odoc_file.html_dir, [ dummy ]) in let open Memo.O in + let odoc_support_path = Paths.odoc_support ctx in + let html_output = Paths.html_root ctx in + let support_relative = + Path.reach (Path.build odoc_support_path) ~from:(Path.build html_output) + in let* run_odoc = run_odoc sctx ~dir:(Path.build (Paths.html_root ctx)) @@ -352,9 +359,9 @@ let setup_html sctx (odoc_file : odoc_artefact) = [ A "-o" ; Path (Path.build (Paths.html_root ctx)) ; A "--support-uri" - ; A "_odoc_support" + ; A support_relative ; A "--theme-uri" - ; A "_odoc_support" + ; A support_relative ; Dep (Path.build odoc_file.odocl_file) ; Hidden_targets [ odoc_file.html_file ] ] @@ -370,15 +377,10 @@ let setup_html sctx (odoc_file : odoc_artefact) = ]))) :: run_odoc :: dummy)) -let css_directory sctx = - let ctx = Super_context.context sctx in - let dir = Paths.html_root ctx ++ "_odoc_support" in - dir - let setup_css_rule sctx = let open Memo.O in - let dir = css_directory sctx in let ctx = Super_context.context sctx in + let dir = Paths.odoc_support ctx in let* run_odoc = let+ cmd = run_odoc sctx ~dir:(Path.build ctx.build_dir) "support-files" @@ -413,7 +415,7 @@ let setup_toplevel_index_rule sctx = index - + @@ -428,7 +430,7 @@ let setup_toplevel_index_rule sctx = |} - list_items + Paths.odoc_support_dirname list_items in let ctx = Super_context.context sctx in add_rule sctx (Action_builder.write_file (Paths.toplevel_index ctx) html) @@ -824,8 +826,9 @@ let gen_rules sctx ~dir:_ rest = ; directory_targets = Path.Build.Map.empty }) | [ "_html" ] -> + let ctx = Super_context.context sctx in let directory_targets = - Path.Build.Map.singleton (css_directory sctx) Loc.none + Path.Build.Map.singleton (Paths.odoc_support ctx) Loc.none in has_rules ~directory_targets (setup_css_rule sctx >>> setup_toplevel_index_rule sctx) From 8098bd1edaafdb120eaebdcb345b5bca13f378b0 Mon Sep 17 00:00:00 2001 From: Jon Ludlam Date: Tue, 7 Feb 2023 08:24:37 +0000 Subject: [PATCH 6/6] Update CHANGES Signed-off-by: Jon Ludlam --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index 1c09a7ebf6f..21f63e0122a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,6 @@ Unreleased ---------- +- Fix handling of support files generated by odoc. (#6913, @jonludlam) - Fix parsing of OCaml errors that contain code excerpts with `...` in them. (#7008, @rgrinberg)