Release coccinelle-0.2.0rc1
[bpt/coccinelle.git] / tools / generate_dependencies.ml
1 open Common
2
3 (*****************************************************************************)
4 (* Flags *)
5 (*****************************************************************************)
6
7 let generate_dependencies dir =
8 let c_info =
9 Common.glob (Filename.concat dir "*.[c]")
10 +> List.map (fun file ->
11 let (x,_) = Parse_c.parse_cache file in
12 let defined = C_info.defined_stuff x in
13 let used = C_info.used_stuff x in
14 let extra = C_info.extra_stuff x in
15 C_info.adjust_used_only_external used defined;
16 file, { C_info.used = used; defined = defined; is_module = extra}
17 ) in
18 let global = C_info.mk_global_definitions_index c_info in
19 c_info +> List.iter (fun (file, used_defined) ->
20 pr2 ("HANDLING : " ^ file);
21 C_info.print_entities used_defined.C_info.used;
22 );
23 C_info.check_no_duplicate_global_definitions global;
24 let g = C_info.build_graph c_info global
25 (Filename.concat dir "depgraph.dot") in
26 C_info.generate_makefile g (Filename.concat dir "depcocci.dep")
27
28
29
30
31 (*
32 let path =
33 match xs with
34 | [] -> "/home/pad/kernels/git/linux-2.6/drivers/net"
35 | [x] -> x
36 | _ -> failwith "too much path"
37 in
38
39 let dirs =
40 if dir
41 then Common.cmd_to_list ("find " ^ path ^ " -type d") +> Kbuild.adjust_dirs
42 else [path]
43 in
44 dirs +> List.iter (fun dir ->
45 *)
46
47
48 (*
49 let test_yyy () =
50 Sys.chdir "/home/pad/kernels/git/linux-2.6";
51 let path="drivers/net" in
52
53 let c_info =
54 Common.cmd_to_list ("find " ^ path ^ " -name \"*.c\" ")
55 +> List.map (fun file ->
56 let x = cprogram_of_file_cached file in
57 let defined = defined_stuff x in
58 let used = used_stuff x in
59 let extra = extra_stuff x in
60 adjust_used_only_external used defined;
61 file, { used = used; defined = defined; is_module = extra}
62 ) in
63 let global = mk_global_definitions_index c_info in
64 c_info +> List.iter (fun (file, used_defined) ->
65 pr2 ("HANDLING : " ^ file);
66 print_entities used_defined.used;
67 );
68 check_no_duplicate_global_definitions global
69 (*build_graph c_info global (Filename.concat dir "depgraph.dot");*)
70 *)
71
72
73 (*****************************************************************************)
74 (* Main entry point *)
75 (*****************************************************************************)
76
77 let main () =
78 begin
79 let args = ref [] in
80 let options = [
81 ] in
82 let usage_msg =
83 "Usage: " ^ basename Sys.argv.(0) ^
84 " <dir> [options]" ^ "\n" ^ "Options are:"
85 in
86
87 Arg.parse (Arg.align options) (fun x -> args := x::!args) usage_msg;
88 args := List.rev !args;
89
90 (match (!args) with
91 | [x] ->
92 generate_dependencies x
93 | _ -> Arg.usage (Arg.align options) usage_msg;
94 )
95 end
96
97 (*****************************************************************************)
98 let _ =
99 main ()
100