From a947c18efbf42b6262fe82b67f9f6f1feb1da60a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr>
Date: Wed, 29 Nov 2023 20:22:59 +0100
Subject: [PATCH] [server] fix server doc generation

---
 src/plugins/callgraph/requests.ml |  2 +-
 src/plugins/server/package.ml     | 15 ++-------------
 src/plugins/server/package.mli    |  2 +-
 src/plugins/server/server_doc.ml  | 15 +++++++++++----
 src/plugins/server/server_doc.mli |  9 +++++----
 5 files changed, 20 insertions(+), 23 deletions(-)

diff --git a/src/plugins/callgraph/requests.ml b/src/plugins/callgraph/requests.ml
index ec50ebcb6aa..e431a7d22ea 100644
--- a/src/plugins/callgraph/requests.ml
+++ b/src/plugins/callgraph/requests.ml
@@ -26,7 +26,7 @@ module G = Services.G
 
 (* --- Package declaration --- *)
 
-let package = Package.package ~plugin:"callgraph" ~title:"Callgraph" ()
+let package = Package.package ~plugin:"callgraph" ~title:"Callgraph Services" ()
 
 
 (* --- Helper modules --- *)
diff --git a/src/plugins/server/package.ml b/src/plugins/server/package.ml
index a056c3cad89..a61a1319f21 100644
--- a/src/plugins/server/package.ml
+++ b/src/plugins/server/package.ml
@@ -236,7 +236,7 @@ type packageInfo = {
   p_package : string list ;
   p_title : string ;
   p_descr : Markdown.text ;
-  p_readme : Filepath.Normalized.t option ;
+  p_readme : string option ;
   p_content : declInfo list ;
 }
 
@@ -377,17 +377,6 @@ let register_ident id =
     Senv.fatal "Duplicate identifier '%a'" pp_ident id ;
   registry := IdSet.add id !registry
 
-let resolve_readme ~plugin = function
-  | None -> None
-  | Some readme ->
-    let file =
-      match plugin with
-      | Kernel ->
-        Filepath.Normalized.concats Fc_config.datadir ["server"; "doc"; readme]
-      | Plugin name ->
-        Filepath.Normalized.concats Fc_config.datadir [name; "doc"; readme]
-    in Some file
-
 (* -------------------------------------------------------------------------- *)
 (* --- Declarations                                                       --- *)
 (* -------------------------------------------------------------------------- *)
@@ -403,7 +392,7 @@ let package ?plugin ?name ~title ?(descr=[]) ?readme () =
     p_package = pkgname ;
     p_title = title ;
     p_descr = descr ;
-    p_readme = resolve_readme ~plugin readme ;
+    p_readme = readme ;
     p_content = [] ;
   } in
   let package = { pkgInfo ; revDecl=[] } in
diff --git a/src/plugins/server/package.mli b/src/plugins/server/package.mli
index 101688e27c7..34a878af921 100644
--- a/src/plugins/server/package.mli
+++ b/src/plugins/server/package.mli
@@ -100,7 +100,7 @@ type packageInfo = {
   p_package : string list ;
   p_title : string ;
   p_descr : Markdown.text ;
-  p_readme : Filepath.Normalized.t option ;
+  p_readme : string option ;
   p_content : declInfo list ;
 }
 
diff --git a/src/plugins/server/server_doc.ml b/src/plugins/server/server_doc.ml
index 9641f91c100..52eb8613929 100644
--- a/src/plugins/server/server_doc.ml
+++ b/src/plugins/server/server_doc.ml
@@ -68,13 +68,20 @@ let path_for chapter filename =
   | `Kernel -> ".." , Printf.sprintf "kernel/%s" filename
   | `Plugin name -> "../.." , Printf.sprintf "plugins/%s/%s" name filename
 
-let page chapter ~title ?(descr=[]) ?readme ~filename () =
+let path_for_readme ~plugin filename =
+  let dirname = match plugin with Kernel -> "server" | Plugin p -> p in
+  Filepath.Normalized.concats
+    (Filepath.Normalized.of_string ".")
+    ["src";"plugins";dirname;"doc";filename]
+
+let page chapter ~title ?(descr=[]) ?(plugin=Kernel) ~readme ~filename () =
   let rootdir , path = path_for chapter filename in
   try
     let other = Pages.find path !pages in
     Senv.failure "Duplicate page '%s' path@." path ; other
   with Not_found ->
     let order = incr order ; !order in
+    let readme = Option.map (path_for_readme ~plugin) readme in
     let page = {
       order ; rootdir ; path ;
       chapter ; title ; descr ; readme ;
@@ -99,8 +106,7 @@ let publish ~page ?name ?(index=[]) ~title
   page.sections <- section :: page.sections ; href
 
 let protocol ~title ~readme:filename =
-  let readme = Filepath.Normalized.concats Fc_config.datadir ["server"; "doc"; filename] in
-  ignore (page `Protocol ~title ~readme ~filename ())
+  ignore (page `Protocol ~title ~readme:(Some filename) ~filename ())
 
 let () = protocol ~title:"Architecture" ~readme:"server.md"
 
@@ -131,7 +137,8 @@ let page_of_package pkg =
     page chapter
       ~title:pkg.p_title
       ~descr:(Markdown.par pkg.p_descr)
-      ?readme:pkg.p_readme
+      ~plugin:pkg.p_plugin
+      ~readme:pkg.p_readme
       ~filename ()
 
 let kind_of_decl = function
diff --git a/src/plugins/server/server_doc.mli b/src/plugins/server/server_doc.mli
index 635b09905d0..9643170c070 100644
--- a/src/plugins/server/server_doc.mli
+++ b/src/plugins/server/server_doc.mli
@@ -39,14 +39,15 @@ val chapter : page -> chapter
 (** Obtain the given page in the server documentation.
 
     The readme introductory section is
-    read from the share directory:
-    - [frama-c/share/<filename>] server and kernel pages,
-    - [frama-c/share/<plugin>/server/<filename>] for plugin's pages.
+    read from the source directory:
+    - [src/plugins/server/<filename>] server and kernel pages,
+    - [src/plugins/<plugin>/<filename>] for plugin's pages.
 *)
 val page : chapter ->
   title:string ->
   ?descr:elements ->
-  ?readme:Filepath.Normalized.t ->
+  ?plugin:Package.plugin ->
+  readme:string option ->
   filename:string ->
   unit ->page
 
-- 
GitLab