2 * Copyright 2005-2010, Ecole des Mines de Nantes, University of Copenhagen
3 * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix
4 * This file is part of Coccinelle.
6 * Coccinelle is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, according to version 2 of the License.
10 * Coccinelle is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with Coccinelle. If not, see <http://www.gnu.org/licenses/>.
18 * The authors reserve the right to distribute this or future versions of
19 * Coccinelle under other licenses.
24 * Copyright 2005-2010, Ecole des Mines de Nantes, University of Copenhagen
25 * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix
26 * This file is part of Coccinelle.
28 * Coccinelle is free software: you can redistribute it and/or modify
29 * it under the terms of the GNU General Public License as published by
30 * the Free Software Foundation, according to version 2 of the License.
32 * Coccinelle is distributed in the hope that it will be useful,
33 * but WITHOUT ANY WARRANTY; without even the implied warranty of
34 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
35 * GNU General Public License for more details.
37 * You should have received a copy of the GNU General Public License
38 * along with Coccinelle. If not, see <http://www.gnu.org/licenses/>.
40 * The authors reserve the right to distribute this or future versions of
41 * Coccinelle under other licenses.
46 ["Copyright 2005-2010, Ecole des Mines de Nantes, University of Copenhagen";
47 "Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix";
48 "This file is part of Coccinelle.";
50 "Coccinelle is free software: you can redistribute it and/or modify";
51 "it under the terms of the GNU General Public License as published by";
52 "the Free Software Foundation, according to version 2 of the License.";
54 "Coccinelle is distributed in the hope that it will be useful,";
55 "but WITHOUT ANY WARRANTY; without even the implied warranty of";
56 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the";
57 "GNU General Public License for more details.";
59 "You should have received a copy of the GNU General Public License";
60 "along with Coccinelle. If not, see <http://www.gnu.org/licenses/>.";
62 "The authors reserve the right to distribute this or future versions of";
63 "Coccinelle under other licenses."
68 List.map
(function x
-> if x
<> "" then " * "^x
else " *") lines
70 let cpp_lines = "/*" :: comment_lines @ [" */"]
72 let ml_lines = "(*" :: comment_lines @ [" *)"]
74 let make_lines = (List.map
(function x
-> if x
<> "" then "# "^x
else "#") lines)
75 let c_lines = (List.map
(function x
-> if x
<> "" then "// "^x
else "//") lines)
79 if Filename.check_suffix file
".cocci" then c_lines else
80 if Filename.check_suffix file
".mly" then cpp_lines else
81 if Filename.check_suffix file
".ml" then ml_lines else
82 if Filename.check_suffix file
".mli" then ml_lines else
83 if Filename.check_suffix file
".mll" then ml_lines else
84 if Filename.check_suffix file
".pl" then make_lines else
85 if Filename.basename file
= "Makefile" then make_lines else
86 failwith
(Printf.sprintf
"unknown file type: %s" file
) in
87 let _ = Sys.command
(Printf.sprintf
"cp %s /tmp/tmpfl" file
) in
88 let o = open_out file
in
89 List.iter
(function l
-> Printf.fprintf
o "%s\n" l
) lines;
90 Printf.fprintf
o "\n";
91 Printf.fprintf
o "\n";
93 let _ = Sys.command
(Printf.sprintf
"cat /tmp/tmpfl >> %s" file
) in
99 let chan = open_in file
in
100 let rec cat_aux acc
() =
101 (* cant do input_line chan::aux() cos ocaml eval from right to left ! *)
102 let (b
, l
) = try (true, input_line
chan) with End_of_file
-> (false, "") in
104 then cat_aux (l
::acc
) ()
107 cat_aux [] () +> List.rev
+> (fun x
-> close_in
chan; x
)
110 let rec process dir
=
113 List.map
(function fl
-> dir^
"/"^fl
)
114 (Array.to_list
(Sys.readdir dir
))
115 with Sys_error
_ -> [] in
116 List.iter
(function file
->
119 if List.exists
(fun s
->
120 s
= "* This file is part of Coccinelle."
122 s
= "# This file is part of Coccinelle."
124 s
= "// This file is part of Coccinelle."
126 Str.string_match
(Str.regexp_string
"Copyright") s
0
128 then print_string
("already processed: " ^ file ^
"\n")
131 print_string
("processed: " ^ file ^
"\n");
134 print_string
("skipped: " ^ file ^
"\n");
137 (* pad: no recursive call in directory List.iter process files *)