(*
- * Copyright 2005-2010, Ecole des Mines de Nantes, University of Copenhagen
+ * Copyright 2012, INRIA
+ * Julia Lawall, Gilles Muller
+ * Copyright 2010-2011, INRIA, University of Copenhagen
+ * Julia Lawall, Rene Rydhof Hansen, Gilles Muller, Nicolas Palix
+ * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen
* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix
* This file is part of Coccinelle.
*
(match List.rev splitted with
new_tag::info ->
let rest = loop new_tag rest in
- (tag,String.concat "\\ " info)::rest
+ (tag,String.concat "\\ " (List.rev info))::rest
| _ -> failwith "bad element")
| _ -> failwith "no data" in
Some (cocci,loop (drop_spaces first) others)
let _ = Sys.command s in
()
-let created = ref ([] : (string * (int ref * out_channel)) list)
+let created = ref ([] : (string * (string list ref * out_channel)) list)
let mktag n = Printf.sprintf "x%d" n
try List.assoc resdir !created
with Not_found ->
begin
- command
- (Printf.sprintf "/bin/rm -r -f %s; mkdir %s" resdir resdir);
+ if Sys.file_exists resdir
+ then
+ command
+ (Printf.sprintf
+ "test %s -nt %s && /bin/rm -r -f %s && mkdir %s"
+ cocci_file resdir resdir resdir)
+ else command (Printf.sprintf "mkdir %s" resdir);
let files = Printf.sprintf "%s/files" resdir in
let o = open_out files in
Printf.fprintf o "all: real_all\n\n";
- let cell = ((ref 0),o) in
+ let cell = ((ref []),o) in
created := (resdir,cell) :: !created;
cell
end in
List.iter
(function (tag,tagval) ->
command
- (Printf.sprintf "sed s/%s/%s/ %s > %s_out; cp %s_out %s"
+ (Printf.sprintf "sed s+%s+%s+ %s > %s_out; cp %s_out %s"
tag tagval temp_file temp_file temp_file temp_file))
tags;
command
(Printf.sprintf "mv %s %s/%s.cocci" temp_file resdir first_tag_val);
- Printf.fprintf o "%s:\n\tmono_spatch_linux %s.cocci ${ARGS}\n\n"
- (mktag !n) first_tag_val;
- n := !n + 1)
+ Printf.fprintf o "%s.out:\n\tmono_spatch_linux %s.cocci ${ARGS}\n\n"
+ first_tag_val first_tag_val;
+ n := (first_tag_val^".out") :: !n)
files
(* --------------------------------------------------------------------- *)
List.iter
(function (resdir,(n,o)) ->
Printf.fprintf o "real_all: %s\n"
- (String.concat " " (List.rev (upto !n)));
+ (String.concat " " (List.rev !n));
+ Printf.fprintf o "\tcat %s > completed\n"
+ (String.concat " " (List.rev !n));
close_out o)
!created