2ee65f75886fd7b4edb1327d31d5a480dd2de824
[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 (* types *)
34 (*****************************************************************************)
35 let std_envir = ref (Filename.concat !path "config/envos/environment_splint.h")
36
37 let cmdline_flags_envfile () =
38 [
39 "-env_file", Arg.Set_string std_envir,
40 " <file> (default=" ^ !std_envir ^ ")";
41 ]
42
43
44 (*****************************************************************************)
45 (* verbose *)
46 (*****************************************************************************)
47
48 let verbose_lexing = ref true
49 let verbose_parsing = ref true
50 let verbose_type = ref true
51 let verbose_annotater = ref true
52
53 let filter_msg = ref false
54 let filter_msg_define_error = ref false
55
56 let filter_define_error = ref false
57
58 let filter_passed_level = ref 0
59
60 let pretty_print_type_info = ref false
61 let pretty_print_comment_info = ref false
62
63 (* cocci specific *)
64 let show_flow_labels = ref true
65
66
67 let cmdline_flags_verbose () =
68 [
69 "-no_verbose_parsing", Arg.Clear verbose_parsing , " ";
70 "-no_verbose_lexing", Arg.Clear verbose_lexing , " ";
71 "-no_verbose_annotater", Arg.Clear verbose_annotater , " ";
72
73 "-no_parse_error_msg", Arg.Clear verbose_parsing, " ";
74 "-no_type_error_msg", Arg.Clear verbose_type, " ";
75
76
77 "-filter_msg", Arg.Set filter_msg ,
78 " filter some cpp message when the macro is a \"known\" cpp construct";
79 "-filter_msg_define_error",Arg.Set filter_msg_define_error,
80 " filter the error msg";
81
82 "-filter_define_error",Arg.Set filter_define_error,
83 " filter the error, which will not be added in the stat";
84 "-filter_passed_level",Arg.Set_int filter_passed_level," ";
85 ]
86
87
88 (*****************************************************************************)
89 (* debugging *)
90 (*****************************************************************************)
91
92 let debug_lexer = ref false
93 let debug_etdt = ref false
94 let debug_typedef = ref false
95 let debug_cpp = ref false
96
97 let debug_unparsing = ref false
98
99 let debug_cfg = ref false
100
101 (* "debug C parsing/unparsing", "" *)
102 let cmdline_flags_debugging () =
103 [
104 "-debug_cpp", Arg.Set debug_cpp, " ";
105 "-debug_lexer", Arg.Set debug_lexer , " ";
106 "-debug_etdt", Arg.Set debug_etdt , " ";
107 "-debug_typedef", Arg.Set debug_typedef, " ";
108
109 "-debug_cfg", Arg.Set debug_cfg , " ";
110 "-debug_unparsing", Arg.Set debug_unparsing, " ";
111 ]
112
113 (*****************************************************************************)
114 (* checks *)
115 (*****************************************************************************)
116
117 let check_annotater = ref true
118 let cmdline_flags_checks () =
119 [
120 "-disable_check_annotater", Arg.Clear check_annotater, " ";
121 "-enable_check_annotater", Arg.Set check_annotater, " ";
122 ]
123
124 (*****************************************************************************)
125 (* change algo *)
126 (*****************************************************************************)
127
128 (* cocci specific *)
129 let label_strategy_2 = ref false
130
131 let cmdline_flags_algos () =
132 [
133 "-l1", Arg.Clear label_strategy_2, " ";
134 ]
135
136 (*****************************************************************************)
137 (* Disable parsing feature (for CC09 and also to see if useful) *)
138 (*****************************************************************************)
139
140 let cpp_directive_passing = ref false
141 let ifdef_directive_passing = ref false
142
143 let disable_two_pass = ref false
144 let disable_add_typedef = ref false
145
146 let if0_passing = ref true
147 let add_typedef_root = ref true
148
149 let cmdline_flags_parsing_algos () = [
150
151 "-directive_passing", Arg.Set cpp_directive_passing,
152 " pass most cpp directives, especially when inside function";
153 "-ifdef_passing", Arg.Set ifdef_directive_passing,
154 " pass ifdef directives ";
155
156 "-noif0_passing", Arg.Clear if0_passing,
157 " ";
158 "-noadd_typedef_root", Arg.Clear add_typedef_root, " ";
159 "-noadd_typedef", Arg.Set disable_add_typedef, " ";
160
161 "-disable_two_pass", Arg.Set disable_two_pass, " ";
162 ]
163
164 (*****************************************************************************)
165 (* other *)
166 (*****************************************************************************)
167
168 (* for compare_c *)
169 let diff_lines = ref (None : string option) (* number of lines of context *)
170
171 (* for parse_c *)
172 let use_cache = ref false
173
174 let cmdline_flags_other () =
175 [
176 "-U", Arg.Int (fun n -> diff_lines := Some (Common.i_to_s n)),
177 " set number of diff context lines";
178
179 "-use_cache", Arg.Set use_cache,
180 " use .ast_raw pre-parsed cached C file";
181 ]
182
183 (*****************************************************************************)