Release coccinelle-0.1.2
[bpt/coccinelle.git] / parsing_c / flag_parsing_c.ml
1 (*****************************************************************************)
2 (* convenient globals to pass to parse_c.init_defs *)
3 (*****************************************************************************)
4 let path = ref
5 (try (Sys.getenv "YACFE_HOME")
6 with Not_found-> "/home/pad/c-yacfe"
7 )
8 let std_h = ref (Filename.concat !path "data/standard.h")
9 let common_h = ref (Filename.concat !path "data/common_macros.h")
10
11
12 let cmdline_flags_macrofile () =
13 [
14 "-macro_file", Arg.Set_string std_h,
15 " <file> (default=" ^ !std_h ^ ")";
16 ]
17
18
19 (*****************************************************************************)
20 (* used only by cpp_ast_c, not by the parser *)
21 (*****************************************************************************)
22 let cpp_i_opts = ref []
23 let cpp_d_opts = ref []
24
25 let cmdline_flags_cpp () = [
26 "-D", Arg.String (fun s -> Common.push2 s cpp_d_opts),
27 " <x=y>";
28 "-I", Arg.String (fun s -> Common.push2 s cpp_i_opts),
29 " <dir>"
30 ]
31
32 (*****************************************************************************)
33 (* verbose *)
34 (*****************************************************************************)
35
36 let verbose_lexing = ref true
37 let verbose_parsing = ref true
38 let verbose_type = ref true
39
40 let filter_msg = ref false
41 let filter_msg_define_error = ref false
42
43 let filter_define_error = ref false
44
45 let filter_passed_level = ref 0
46
47 let pretty_print_type_info = ref false
48
49 (* cocci specific *)
50 let show_flow_labels = ref true
51
52
53 let cmdline_flags_verbose () =
54 [
55 "-no_parse_error_msg", Arg.Clear verbose_parsing, " ";
56 "-no_verbose_parsing", Arg.Clear verbose_parsing , " ";
57 "-no_verbose_lexing", Arg.Clear verbose_lexing , " ";
58 "-no_type_error_msg", Arg.Clear verbose_type, " ";
59
60
61 "-filter_msg", Arg.Set filter_msg ,
62 " filter some cpp message when the macro is a \"known\" cpp construct";
63 "-filter_msg_define_error",Arg.Set filter_msg_define_error,
64 " filter the error msg";
65
66 "-filter_define_error",Arg.Set filter_define_error,
67 " filter the error, which will not be added in the stat";
68 "-filter_passed_level",Arg.Set_int filter_passed_level," ";
69 ]
70
71
72 (*****************************************************************************)
73 (* debugging *)
74 (*****************************************************************************)
75
76 let debug_lexer = ref false
77 let debug_etdt = ref false
78 let debug_typedef = ref false
79 let debug_cpp = ref false
80
81 let debug_unparsing = ref false
82
83 let debug_cfg = ref false
84
85 (* "debug C parsing/unparsing", "" *)
86 let cmdline_flags_debugging () =
87 [
88 "-debug_cpp", Arg.Set debug_cpp, " ";
89 "-debug_lexer", Arg.Set debug_lexer , " ";
90 "-debug_etdt", Arg.Set debug_etdt , " ";
91 "-debug_typedef", Arg.Set debug_typedef, " ";
92
93 "-debug_cfg", Arg.Set debug_cfg , " ";
94 "-debug_unparsing", Arg.Set debug_unparsing, " ";
95 ]
96
97 (*****************************************************************************)
98 (* change algo *)
99 (*****************************************************************************)
100
101 (* cocci specific *)
102 let label_strategy_2 = ref false
103
104 let cmdline_flags_algos () =
105 [
106 "-l1", Arg.Clear label_strategy_2, " ";
107 ]
108
109 (*****************************************************************************)
110 (* Disable parsing feature (for CC09 and also to see if useful) *)
111 (*****************************************************************************)
112
113 let cpp_directive_passing = ref false
114 let ifdef_directive_passing = ref false
115
116 let disable_two_pass = ref false
117 let disable_add_typedef = ref false
118
119 let if0_passing = ref true
120 let add_typedef_root = ref true
121
122 let cmdline_flags_parsing_algos () = [
123
124 "-directive_passing", Arg.Set cpp_directive_passing,
125 " pass most cpp directives, especially when inside function";
126 "-ifdef_passing", Arg.Set ifdef_directive_passing,
127 " pass ifdef directives ";
128
129 "-noif0_passing", Arg.Clear if0_passing,
130 " ";
131 "-noadd_typedef_root", Arg.Clear add_typedef_root, " ";
132 "-noadd_typedef", Arg.Set disable_add_typedef, " ";
133
134 "-disable_two_pass", Arg.Set disable_two_pass, " ";
135 ]
136
137 (*****************************************************************************)
138 (* other *)
139 (*****************************************************************************)
140
141 (* for compare_c *)
142 let diff_lines = ref (None : string option) (* number of lines of context *)
143
144 (* for parse_c *)
145 let use_cache = ref false
146
147 let cmdline_flags_other () =
148 [
149 "-U", Arg.Int (fun n -> diff_lines := Some (Common.i_to_s n)),
150 " set number of diff context lines";
151
152 "-use_cache", Arg.Set use_cache,
153 " use .ast_raw pre-parsed cached C file";
154 ]
155
156
157 (*****************************************************************************)
158