]> matita.cs.unibo.it Git - helm.git/blob - helm/matita/matitadep.ml
"include" command implemented.
[helm.git] / helm / matita / matitadep.ml
1 module TA = TacticAst 
2 module U = UriManager
3
4 let deps = Hashtbl.create (Array.length Sys.argv)
5 let baseuri = ref []
6 let aliases = Hashtbl.create (Array.length Sys.argv)
7
8 (*
9 let uri_of_alias = function 
10   | Ident_alias (_, uri)
11   | Symbol_alias (_, _, uri) 
12   | Number_alias (_, uri) -> uri 
13 *)
14
15 let buri alias = 
16   U.buri_of_uri (U.uri_of_string alias)
17
18 let resolve alias =
19   try
20     Some (snd(List.find (fun (u, f) -> u = (buri alias)) !baseuri))
21   with
22   | Not_found -> None
23  
24   (*** TODO MANCANO LE URI VERBATIM DENTRO GLI AST DEI TERMINI ****)
25
26 let main () =
27   for i = 1 to Array.length Sys.argv - 1 do
28     let file = Sys.argv.(i) in
29     let ic = open_in file in
30     let stms =
31       try
32         CicTextualParser2.parse_statements (Stream.of_channel ic)
33       with
34         (CicTextualParser2.Parse_error _) as exc ->
35           prerr_endline ("Unable to parse: " ^ file);
36           prerr_endline (MatitaExcPp.to_string exc);
37           exit 1
38     in
39     close_in ic;
40     List.iter 
41       (function
42       | TA.Executable (_, TA.Command (_, TA.Set (_, "baseuri", uri))) ->
43           let uri = MatitaMisc.strip_trailing_slash uri in
44           baseuri := (uri, file) :: !baseuri
45       | TA.Executable (_, TA.Command 
46           (_, TA.Alias (_, TA.Ident_alias(_, uri)))) -> 
47             Hashtbl.add aliases file uri
48       | TA.Executable (_, TA.Command (_, TA.Include (_, path))) ->
49             Hashtbl.add deps file path
50       | _ -> ()) 
51       stms; 
52     Hashtbl.iter 
53       (fun file alias -> 
54         let dep = resolve alias in
55         match dep with 
56         | None -> ()
57         | Some d -> Hashtbl.add deps file d)
58       aliases;
59   done;
60   for i = 1 to Array.length Sys.argv - 1 do
61     let file = Sys.argv.(i) in
62     let deps = Hashtbl.find_all deps file in
63     let deps = List.fast_sort Pervasives.compare deps in
64     let deps = MatitaMisc.list_uniq deps in
65     let deps = 
66       List.map (fun x -> Pcre.replace ~pat:"ma$" ~templ:"moo" x) deps 
67     in
68     let deps = file :: deps in
69     Printf.printf "%s: %s\n" (MatitaMisc.obj_file_of_script file)
70       (String.concat " " deps)
71   done
72   
73
74 let _ = main ()