X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatitadep.ml;h=f62a6067fa405765294d8251aa2622007767eaac;hb=72a91e9bdd1a8c1a3f12522ec9acec4f53afe345;hp=65743db582852752bb102f9e90c79a07ed6d4be4;hpb=2edd802fd82af7aa282a82344d14c851c210ed1c;p=helm.git diff --git a/matita/matitadep.ml b/matita/matitadep.ml index 65743db58..f62a6067f 100644 --- a/matita/matitadep.ml +++ b/matita/matitadep.ml @@ -66,6 +66,13 @@ let main () = exit 1 end; let ma_files = args in + let bof = Hashtbl.create 10 in + let baseuri_of_script s = + try Hashtbl.find bof s + with Not_found -> + let b,_ = DependenciesParser.baseuri_of_script ~include_paths s in + Hashtbl.add bof s b; b + in List.iter (fun ma_file -> let ic = open_in ma_file in @@ -84,8 +91,7 @@ let main () = Hashtbl.add baseuri_of_inv uri ma_file | DependenciesParser.IncludeDep path -> try - let baseuri,_ = - DependenciesParser.baseuri_of_script ~include_paths path in + let baseuri = baseuri_of_script path in if not (Http_getter_storage.is_legacy baseuri) then (let moo_file = obj_file_of_baseuri false baseuri in Hashtbl.add include_deps ma_file moo_file; @@ -107,6 +113,29 @@ let main () = prerr_endline ("File "^ file^" has no baseuri. Use set baseuri"); exit 1) uri_deps; + let gcp x y = + (* explode and implode from the OCaml Expert FAQ. *) + let explode s = + let rec exp i l = + if i < 0 then l else exp (i - 1) (s.[i] :: l) in + exp (String.length s - 1) [] + in + let implode l = + let res = String.create (List.length l) in + let rec imp i = function + | [] -> res + | c :: l -> res.[i] <- c; imp (i + 1) l in + imp 0 l + in + let rec aux = function + | x::tl1,y::tl2 when x = y -> x::(aux (tl1,tl2)) + | _ -> [] + in + implode (aux (explode x,explode y)) + in + let max_path = List.hd ma_files in + let max_path = List.fold_left gcp max_path ma_files in + let short x = Pcre.replace ~pat:("^"^max_path) x in if !dot_file <> "" then (* generate dependency graph if required *) begin let oc = open_out !dot_file in @@ -124,8 +153,8 @@ let main () = 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) + GraphvizPp.Dot.node (short ma_file) fmt; + List.iter (fun dep -> GraphvizPp.Dot.edge (short ma_file) (short dep) fmt) deps) ma_files; GraphvizPp.Dot.trailer fmt; close_out oc @@ -139,10 +168,11 @@ let main () = let deps = ma_file :: deps in let baseuri = Hashtbl.find baseuri_of ma_file in let moo = obj_file_of_baseuri true baseuri in - Printf.printf "%s: %s\n%s: %s\n%s: %s\n" + Printf.printf "%s: %s\n%s: %s\n%s: %s\n%s: %s\n" moo (String.concat " " deps) (Filename.basename(Pcre.replace ~pat:"ma$" ~templ:"mo" ma_file)) moo (Pcre.replace ~pat:"ma$" ~templ:"mo" ma_file) moo + (Pcre.replace ~pat:"ma$" ~templ:"mo" (short ma_file)) moo with Not_found -> prerr_endline ("File "^ma_file^" has no baseuri. Use set baseuri"); exit 1)