for i = 1 to Array.length Sys.argv - 1 do
let file = Sys.argv.(i) in
let ic = open_in file in
- let stms = CicTextualParser2.parse_statements (Stream.of_channel ic) in
- close_in ic;
- let stms =
- List.iter
- (function
- | TA.Executable (_, TA.Command (_, TA.Set (_, "baseuri", uri))) ->
- let uri = MatitaMisc.strip_trailing_slash uri in
- baseuri := (uri, file) :: !baseuri
- | TA.Executable (_, TA.Command
- (_, TA.Alias (_, TA.Ident_alias(_, uri)))) ->
- Hashtbl.add aliases file uri
- | _ -> ())
- stms
+ let stms =
+ try
+ CicTextualParser2.parse_statements (Stream.of_channel ic)
+ with
+ (CicTextualParser2.Parse_error _) as exc ->
+ prerr_endline ("Unable to parse: " ^ file);
+ prerr_endline (MatitaExcPp.to_string exc);
+ exit 1
in
+ close_in ic;
+ List.iter
+ (function
+ | TA.Executable (_, TA.Command (_, TA.Set (_, "baseuri", uri))) ->
+ let uri = MatitaMisc.strip_trailing_slash uri in
+ baseuri := (uri, file) :: !baseuri
+ | TA.Executable (_, TA.Command
+ (_, TA.Alias (_, TA.Ident_alias(_, uri)))) ->
+ Hashtbl.add aliases file uri
+ | TA.Executable (_, TA.Command (_, TA.Include (_, path))) ->
+ Hashtbl.add deps file path
+ | _ -> ())
+ stms;
Hashtbl.iter
(fun file alias ->
let dep = resolve alias in
let deps = Hashtbl.find_all deps file in
let deps = List.fast_sort Pervasives.compare deps in
let deps = MatitaMisc.list_uniq deps in
+ let deps =
+ List.map (fun x -> Pcre.replace ~pat:"ma$" ~templ:"moo" x) deps
+ in
let deps = file :: deps in
Printf.printf "%s: %s\n" (MatitaMisc.obj_file_of_script file)
(String.concat " " deps)