1 open Common
open Commonop
3 (*****************************************************************************)
5 (*****************************************************************************)
7 let generate_dependencies dir
=
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}
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;
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")
34 | [] -> "/home/pad/kernels/git/linux-2.6/drivers/net"
36 | _ -> failwith "too much path"
41 then Common.cmd_to_list ("find " ^ path ^ " -type d") +> Kbuild.adjust_dirs
44 dirs +> List.iter (fun dir ->
50 Sys.chdir "/home/pad/kernels/git/linux-2.6";
51 let path="drivers/net" in
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}
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;
68 check_no_duplicate_global_definitions global
69 (*build_graph c_info global (Filename.concat dir "depgraph.dot");*)
73 (*****************************************************************************)
74 (* Main entry point *)
75 (*****************************************************************************)
83 "Usage: " ^ basename
Sys.argv
.(0) ^
84 " <dir> [options]" ^
"\n" ^
"Options are:"
87 Arg.parse
(Arg.align
options) (fun x -> args := x::!args) usage_msg;
88 args := List.rev
!args;
92 generate_dependencies x
93 | _
-> Arg.usage
(Arg.align
options) usage_msg;
97 (*****************************************************************************)