@@ -29,7 +29,7 @@ let prepend_root r b = match r with
2929 | None -> b
3030 | Some r -> Filename. concat r b
3131
32- let print_rule ~nd ~prelude ~md_file ~ml_files ~dirs ~root options =
32+ let print_rule ~nd ~prelude ~md_file ~ml_files ~dirs ~root ~ requires options =
3333 let ml_files = String.Set. elements ml_files in
3434 let ml_files = List. map (prepend_root root) ml_files in
3535 let dirs = match root with
@@ -44,6 +44,10 @@ let print_rule ~nd ~prelude ~md_file ~ml_files ~dirs ~root options =
4444 let f (cpt , acc ) _ = cpt + 1 , (" y" ^ string_of_int cpt) :: acc in
4545 List. fold_left f (0 , [] ) ml_files |> snd
4646 in
47+ let requires = String.Set. elements requires in
48+ let pp_package_deps fmt name =
49+ Fmt. pf fmt " \ (package %s)" name
50+ in
4751 let pp_ml_deps fmt (var_name , ml_file ) =
4852 Fmt. pf fmt " \ (:%s %s)" var_name ml_file
4953 in
@@ -57,30 +61,24 @@ let print_rule ~nd ~prelude ~md_file ~ml_files ~dirs ~root options =
5761 let files = String.Set. of_list (List. map prelude_file prelude) in
5862 String.Set. elements files
5963 |> List. map (fun f -> Fmt. strf " %s" f)
60- |> String. concat ~sep: " \n "
6164 in
6265 let root = match root with None -> " " | Some r -> Fmt. strf " --root=%s " r in
6366 let deps =
64- let sep1 = if var_names <> [] then " \n " else " " in
65- let sep2 = if dirs <> [] && prelude <> " " then " \n " else " " in
66- let x = Fmt. strf " %a%s%a%s%s"
67- Fmt. (list ~sep: (unit " \n " ) pp_ml_deps) (List. combine var_names ml_files)
68- sep1
69- Fmt. (list ~sep: (unit " \n " ) pp_dir_deps) dirs
70- sep2
71- prelude
72- in
73- match x with
74- | "" -> " "
75- | s -> " \n " ^ s
67+ match
68+ List. map (Fmt. to_to_string pp_package_deps) requires @
69+ List. map (Fmt. to_to_string pp_ml_deps) (List. combine var_names ml_files) @
70+ List. map (Fmt. to_to_string pp_dir_deps) dirs @
71+ prelude
72+ with
73+ | [] -> " "
74+ | s -> String. concat ~sep: " \n " (" " :: s)
7675 in
7776 let pp name arg =
7877 Fmt. pr
7978 " \
8079(alias\n \
8180\ (name %s)\n \
82- \ (deps (:x %s)\n \
83- \ (package mdx)%s)\n \
81+ \ (deps (:x %s)%s)\n \
8482\ (action (progn\n \
8583\ (run ocaml-mdx test %a %s%s%%{x})\n %a\n \
8684\ (diff? %%{x} %%{x}.corrected))))\n "
@@ -100,7 +98,7 @@ let pp_direction fmt = function
10098 | `To_ml -> Fmt. pf fmt " --direction=to-ml"
10199
102100let pp_prelude fmt s = Fmt. pf fmt " --prelude=%s" s
103- let pp_prelude_str fmt s = Fmt. pf fmt " --prelude-str= %S" s
101+ let pp_prelude_str fmt s = Fmt. pf fmt " --prelude-str %S" s
104102
105103let add_opt e s = match e with None -> s | Some e -> String.Set. add e s
106104
@@ -117,7 +115,11 @@ let run () md_file section direction prelude prelude_str root =
117115 let on_item acc = function
118116 | Mdx. Section _ | Text _ -> acc
119117 | Block b when active b ->
120- let files, dirs, nd = acc in
118+ let files, dirs, nd, requires = acc in
119+ let requires =
120+ Mdx.Block. required_packages b
121+ |> List. fold_left (fun s e -> String.Set. add e s) requires
122+ in
121123 let nd = nd || match Mdx.Block. mode b with
122124 | `Non_det _ -> true
123125 | _ -> false
@@ -129,19 +131,20 @@ let run () md_file section direction prelude prelude_str root =
129131 |> String.Set. union source_trees
130132 in
131133 let files = add_opt (Mdx.Block. file b) files in
132- files, dirs, nd
134+ files, dirs, nd, requires
133135 | Block _ -> acc
134136 in
135137 let on_file file_contents items =
136- let ml_files, dirs, nd =
137- List. fold_left on_item (String.Set. empty, String.Set. empty, false ) items
138+ let ml_files, dirs, nd, requires =
139+ let empty = String.Set. empty in
140+ List. fold_left on_item (empty, empty, false , empty) items
138141 in
139142 let options =
140143 List. map (Fmt. to_to_string pp_prelude) prelude @
141144 List. map (Fmt. to_to_string pp_prelude_str) prelude_str @
142145 [Fmt. to_to_string pp_direction direction]
143146 in
144- print_rule ~md_file ~prelude ~nd ~ml_files ~dirs ~root options;
147+ print_rule ~md_file ~prelude ~nd ~ml_files ~dirs ~root ~requires options;
145148 file_contents
146149 in
147150 Mdx. run md_file ~f: on_file;
0 commit comments