From 70c83bce7d1d50c19c297e47691f7d66208e4d83 Mon Sep 17 00:00:00 2001 From: Enrico Tassi Date: Fri, 11 Jan 2008 14:59:19 +0000 Subject: [PATCH] -dot fixed, now the .dot file contains also edges --- helm/software/matita/matitadep.ml | 69 ++++++++++++++----------------- 1 file changed, 32 insertions(+), 37 deletions(-) diff --git a/helm/software/matita/matitadep.ml b/helm/software/matita/matitadep.ml index fe7cab920..0b64778ec 100644 --- a/helm/software/matita/matitadep.ml +++ b/helm/software/matita/matitadep.ml @@ -35,7 +35,9 @@ let main () = let include_deps = Hashtbl.create 13 in let baseuri_of = Hashtbl.create 13 in let baseuri_of_inv = Hashtbl.create 13 in + let dot_name = "depends" in let dot_file = ref "" in + let set_dot_file () = dot_file := dot_name^".dot" in (* helpers *) let include_paths = ref [] in let baseuri_of_script s = @@ -63,8 +65,8 @@ let main () = in (* initialization *) MatitaInit.add_cmdline_spec - ["-dot", Arg.Set_string dot_file, - " Save dependency graph in dot format to the given file";]; + ["-dot", Arg.Unit set_dot_file, + "Save dependency graph in dot format and generate a png";]; MatitaInit.parse_cmdline_and_configuration_file (); MatitaInit.initialize_environment (); let args = @@ -83,10 +85,17 @@ let main () = HExtlib.find ~test:(fun x -> Filename.check_suffix x ".ma") "." | _ -> let roots = List.map (HExtlib.chop_prefix (Sys.getcwd()^"/")) roots in - prerr_endline ("Too many roots found:\n\t" ^ String.concat "\n\t" roots); + prerr_endline ("Too many roots found:\n\t"^String.concat "\n\t" roots); prerr_endline ("\nEnter one of these directories and retry"); exit 1 in + let fix_name f = + let f = + if Pcre.pmatch ~pat:"^\\./" f then String.sub f 2 (String.length f - 2) + else f + in + HExtlib.normalize_path f + in let ma_files = args in (* here we go *) (* fills: @@ -115,40 +124,7 @@ let main () = Hashtbl.add include_deps ma_file path) dependencies) ma_files; - (* dot generation *) - if !dot_file <> "" then - begin - let oc = open_out !dot_file in - let fmt = Format.formatter_of_out_channel oc in - GraphvizPp.Dot.header fmt; - List.iter - (fun ma_file -> - let deps = Hashtbl.find_all include_deps ma_file in - let deps = - HExtlib.filter_map - (fun u -> - try Some (Hashtbl.find baseuri_of_inv u) - with Not_found -> None) - deps - in - let deps = List.fast_sort Pervasives.compare deps in - let deps = HExtlib.list_uniq deps in - GraphvizPp.Dot.node ma_file fmt; - List.iter (fun dep -> GraphvizPp.Dot.edge ma_file dep fmt) deps) - ma_files; - GraphvizPp.Dot.trailer fmt; - close_out oc - end; (* generate regular depend output *) - let fix_name f = - let f = - if Pcre.pmatch ~pat:"^\\./" f then - String.sub f 2 (String.length f - 2) - else - f - in - HExtlib.normalize_path f - in let deps = List.fold_left (fun acc ma_file -> @@ -171,6 +147,25 @@ let main () = in Librarian.write_deps_file (Sys.getcwd()) (deps@HExtlib.list_uniq (List.sort Pervasives.compare (List.map (fun x -> - x,[]) extern))) + x,[]) extern))); + (* dot generation *) + if !dot_file <> "" then + begin + let oc = open_out !dot_file in + let fmt = Format.formatter_of_out_channel oc in + GraphvizPp.Dot.header fmt; + List.iter + (fun (ma_file,deps) -> + GraphvizPp.Dot.node ma_file fmt; + List.iter (fun dep -> GraphvizPp.Dot.edge ma_file dep fmt) deps) + deps; + List.iter + (fun x -> GraphvizPp.Dot.node ~attrs:["style","dashed"] x fmt) + extern; + GraphvizPp.Dot.trailer fmt; + close_out oc; + ignore(Sys.command ("tred "^ !dot_file^"| dot -Tpng -o"^dot_name^".png")); + HLog.message ("Type 'eog "^dot_name^".png' to view the graph"); + end; ;; -- 2.39.2