Mercurial > ~dholland > hg > tradcpp > index.cgi
annotate main.c @ 64:f50b4ea6cbfe
Prune single-line comments from (most) directive lines.
Also, don't pass the string length to the directive processing
functions, as half of them weren't honoring it. Instead, ensure that
the directive line is terminated at the place the directive processing
functions should stop looking at it.
author | David A. Holland |
---|---|
date | Sun, 31 Mar 2013 02:04:56 -0400 |
parents | 57e0c7a50b2d |
children | dc63e70e425d |
rev | line source |
---|---|
30 | 1 /*- |
2 * Copyright (c) 2010 The NetBSD Foundation, Inc. | |
3 * All rights reserved. | |
4 * | |
5 * This code is derived from software contributed to The NetBSD Foundation | |
6 * by David A. Holland. | |
7 * | |
8 * Redistribution and use in source and binary forms, with or without | |
9 * modification, are permitted provided that the following conditions | |
10 * are met: | |
11 * 1. Redistributions of source code must retain the above copyright | |
12 * notice, this list of conditions and the following disclaimer. | |
13 * 2. Redistributions in binary form must reproduce the above copyright | |
14 * notice, this list of conditions and the following disclaimer in the | |
15 * documentation and/or other materials provided with the distribution. | |
16 * | |
17 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS | |
18 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | |
19 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |
20 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS | |
21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
25 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
27 * POSSIBILITY OF SUCH DAMAGE. | |
28 */ | |
29 | |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
30 #include <stdbool.h> |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
31 #include <stdio.h> |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
32 #include <stdlib.h> |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
33 #include <string.h> |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
34 #include <errno.h> |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
35 #include <err.h> |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
36 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
37 #include "version.h" |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
38 #include "config.h" |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
39 #include "utils.h" |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
40 #include "array.h" |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
41 #include "mode.h" |
8 | 42 #include "place.h" |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
43 #include "files.h" |
15 | 44 #include "directive.h" |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
45 #include "macro.h" |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
46 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
47 struct mode mode = { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
48 .werror = false, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
49 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
50 .input_allow_dollars = false, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
51 .input_tabstop = 8, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
52 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
53 .do_stdinc = true, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
54 .do_stddef = true, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
55 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
56 .do_output = true, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
57 .output_linenumbers = true, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
58 .output_retain_comments = false, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
59 .output_file = NULL, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
60 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
61 .do_depend = false, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
62 .depend_report_system = false, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
63 .depend_assume_generated = false, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
64 .depend_issue_fakerules = false, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
65 .depend_quote_target = true, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
66 .depend_target = NULL, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
67 .depend_file = NULL, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
68 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
69 .do_macrolist = false, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
70 .macrolist_include_stddef = false, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
71 .macrolist_include_expansions = false, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
72 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
73 .do_trace = false, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
74 .trace_namesonly = false, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
75 .trace_indented = false, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
76 }; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
77 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
78 struct warns warns = { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
79 .endiflabels = true, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
80 .nestcomment = false, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
81 .undef = false, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
82 .unused = false, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
83 }; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
84 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
85 //////////////////////////////////////////////////////////// |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
86 // commandline macros |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
87 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
88 struct commandline_macro { |
11 | 89 struct place where; |
15 | 90 struct place where2; |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
91 const char *macro; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
92 const char *expansion; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
93 }; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
94 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
95 static struct array commandline_macros; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
96 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
97 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
98 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
99 commandline_macros_init(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
100 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
101 array_init(&commandline_macros); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
102 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
103 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
104 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
105 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
106 commandline_macros_cleanup(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
107 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
108 array_cleanup(&commandline_macros); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
109 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
110 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
111 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
112 void |
15 | 113 commandline_macro_add(const struct place *p, const char *macro, |
114 const struct place *p2, const char *expansion) | |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
115 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
116 struct commandline_macro *cm; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
117 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
118 cm = domalloc(sizeof(*cm)); |
11 | 119 cm->where = *p; |
15 | 120 cm->where2 = *p2; |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
121 cm->macro = macro; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
122 cm->expansion = expansion; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
123 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
124 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
125 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
126 void |
7 | 127 commandline_def(const struct place *p, char *str) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
128 { |
15 | 129 struct place p2; |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
130 char *val; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
131 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
132 val = strchr(str, '='); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
133 if (val != NULL) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
134 *val = '\0'; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
135 val++; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
136 } |
15 | 137 |
138 if (val) { | |
139 p2 = *p; | |
140 p2.column += strlen(str); | |
141 } else { | |
142 place_setbuiltin(&p2, 1); | |
143 } | |
144 commandline_macro_add(p, str, &p2, val ? val : "1"); | |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
145 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
146 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
147 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
148 void |
7 | 149 commandline_undef(const struct place *p, char *str) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
150 { |
15 | 151 commandline_macro_add(p, str, p, NULL); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
152 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
153 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
154 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
155 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
156 apply_commandline_macros(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
157 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
158 struct commandline_macro *cm; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
159 unsigned i, num; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
160 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
161 num = array_num(&commandline_macros); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
162 for (i=0; i<num; i++) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
163 cm = array_get(&commandline_macros, i); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
164 if (cm->expansion != NULL) { |
18 | 165 macro_define_plain(&cm->where, cm->macro, |
166 &cm->where2, cm->expansion); | |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
167 } else { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
168 macro_undef(cm->macro); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
169 } |
39
337110e7240a
Pass the size to free; it makes debug checking easier.
David A. Holland
parents:
38
diff
changeset
|
170 dofree(cm, sizeof(*cm)); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
171 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
172 array_setsize(&commandline_macros, 0); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
173 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
174 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
175 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
176 void |
7 | 177 apply_builtin_macro(unsigned num, const char *name, const char *val) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
178 { |
11 | 179 struct place p; |
7 | 180 |
11 | 181 place_setbuiltin(&p, num); |
18 | 182 macro_define_plain(&p, name, &p, val); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
183 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
184 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
185 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
186 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
187 apply_builtin_macros(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
188 { |
7 | 189 unsigned n = 1; |
190 | |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
191 #ifdef CONFIG_OS |
7 | 192 apply_builtin_macro(n++, CONFIG_OS, "1"); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
193 #endif |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
194 #ifdef CONFIG_OS_2 |
7 | 195 apply_builtin_macro(n++, CONFIG_OS_2, "1"); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
196 #endif |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
197 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
198 #ifdef CONFIG_CPU |
7 | 199 apply_builtin_macro(n++, CONFIG_CPU, "1"); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
200 #endif |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
201 #ifdef CONFIG_CPU_2 |
7 | 202 apply_builtin_macro(n++, CONFIG_CPU_2, "1"); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
203 #endif |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
204 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
205 #ifdef CONFIG_SIZE |
7 | 206 apply_builtin_macro(n++, CONFIG_SIZE, "1"); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
207 #endif |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
208 #ifdef CONFIG_BINFMT |
7 | 209 apply_builtin_macro(n++, CONFIG_BINFMT, "1"); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
210 #endif |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
211 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
212 #ifdef CONFIG_COMPILER |
7 | 213 apply_builtin_macro(n++, CONFIG_COMPILER, VERSION_MAJOR); |
214 apply_builtin_macro(n++, CONFIG_COMPILER_MINOR, VERSION_MINOR); | |
215 apply_builtin_macro(n++, "__VERSION__", VERSION_LONG); | |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
216 #endif |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
217 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
218 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
219 //////////////////////////////////////////////////////////// |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
220 // extra included files |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
221 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
222 struct commandline_file { |
11 | 223 struct place where; |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
224 char *name; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
225 bool suppress_output; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
226 }; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
227 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
228 static struct array commandline_files; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
229 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
230 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
231 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
232 commandline_files_init(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
233 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
234 array_init(&commandline_files); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
235 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
236 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
237 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
238 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
239 commandline_files_cleanup(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
240 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
241 array_cleanup(&commandline_files); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
242 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
243 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
244 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
245 void |
7 | 246 commandline_addfile(const struct place *p, char *name, bool suppress_output) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
247 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
248 struct commandline_file *cf; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
249 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
250 cf = domalloc(sizeof(*cf)); |
11 | 251 cf->where = *p; |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
252 cf->name = name; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
253 cf->suppress_output = suppress_output; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
254 array_add(&commandline_files, cf, NULL); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
255 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
256 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
257 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
258 void |
7 | 259 commandline_addfile_output(const struct place *p, char *name) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
260 { |
7 | 261 commandline_addfile(p, name, false); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
262 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
263 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
264 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
265 void |
7 | 266 commandline_addfile_nooutput(const struct place *p, char *name) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
267 { |
7 | 268 commandline_addfile(p, name, true); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
269 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
270 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
271 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
272 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
273 read_commandline_files(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
274 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
275 struct commandline_file *cf; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
276 unsigned i, num; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
277 bool save = false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
278 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
279 num = array_num(&commandline_files); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
280 for (i=0; i<num; i++) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
281 cf = array_get(&commandline_files, i); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
282 if (cf->suppress_output) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
283 save = mode.do_output; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
284 mode.do_output = false; |
11 | 285 file_readquote(&cf->where, cf->name); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
286 mode.do_output = save; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
287 } else { |
11 | 288 file_readquote(&cf->where, cf->name); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
289 } |
39
337110e7240a
Pass the size to free; it makes debug checking easier.
David A. Holland
parents:
38
diff
changeset
|
290 dofree(cf, sizeof(*cf)); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
291 } |
5
7c489c73d62b
Clear commandline_files after processing it.
David A. Holland
parents:
4
diff
changeset
|
292 array_setsize(&commandline_files, 0); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
293 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
294 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
295 //////////////////////////////////////////////////////////// |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
296 // include path accumulation |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
297 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
298 static struct stringarray incpath_quote; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
299 static struct stringarray incpath_user; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
300 static struct stringarray incpath_system; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
301 static struct stringarray incpath_late; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
302 static const char *sysroot; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
303 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
304 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
305 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
306 incpath_init(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
307 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
308 stringarray_init(&incpath_quote); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
309 stringarray_init(&incpath_user); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
310 stringarray_init(&incpath_system); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
311 stringarray_init(&incpath_late); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
312 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
313 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
314 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
315 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
316 incpath_cleanup(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
317 { |
37
70902cac4170
Sort the option lists to match the comparison used to search them. duh.
David A. Holland
parents:
30
diff
changeset
|
318 stringarray_setsize(&incpath_quote, 0); |
70902cac4170
Sort the option lists to match the comparison used to search them. duh.
David A. Holland
parents:
30
diff
changeset
|
319 stringarray_setsize(&incpath_user, 0); |
70902cac4170
Sort the option lists to match the comparison used to search them. duh.
David A. Holland
parents:
30
diff
changeset
|
320 stringarray_setsize(&incpath_system, 0); |
70902cac4170
Sort the option lists to match the comparison used to search them. duh.
David A. Holland
parents:
30
diff
changeset
|
321 stringarray_setsize(&incpath_late, 0); |
70902cac4170
Sort the option lists to match the comparison used to search them. duh.
David A. Holland
parents:
30
diff
changeset
|
322 |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
323 stringarray_cleanup(&incpath_quote); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
324 stringarray_cleanup(&incpath_user); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
325 stringarray_cleanup(&incpath_system); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
326 stringarray_cleanup(&incpath_late); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
327 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
328 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
329 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
330 void |
7 | 331 commandline_isysroot(const struct place *p, char *dir) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
332 { |
7 | 333 (void)p; |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
334 sysroot = dir; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
335 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
336 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
337 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
338 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
339 commandline_addincpath(struct stringarray *arr, char *s) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
340 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
341 stringarray_add(arr, s, NULL); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
342 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
343 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
344 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
345 void |
7 | 346 commandline_addincpath_quote(const struct place *p, char *dir) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
347 { |
7 | 348 (void)p; |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
349 commandline_addincpath(&incpath_quote, dir); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
350 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
351 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
352 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
353 void |
7 | 354 commandline_addincpath_user(const struct place *p, char *dir) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
355 { |
7 | 356 (void)p; |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
357 commandline_addincpath(&incpath_user, dir); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
358 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
359 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
360 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
361 void |
7 | 362 commandline_addincpath_system(const struct place *p, char *dir) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
363 { |
7 | 364 (void)p; |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
365 commandline_addincpath(&incpath_system, dir); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
366 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
367 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
368 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
369 void |
7 | 370 commandline_addincpath_late(const struct place *p, char *dir) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
371 { |
7 | 372 (void)p; |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
373 commandline_addincpath(&incpath_late, dir); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
374 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
375 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
376 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
377 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
378 loadincludepath(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
379 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
380 unsigned i, num; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
381 const char *dir; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
382 char *t; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
383 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
384 num = stringarray_num(&incpath_quote); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
385 for (i=0; i<num; i++) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
386 dir = stringarray_get(&incpath_quote, i); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
387 files_addquotepath(dir, false); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
388 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
389 files_addquotepath(".", false); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
390 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
391 num = stringarray_num(&incpath_user); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
392 for (i=0; i<num; i++) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
393 dir = stringarray_get(&incpath_user, i); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
394 files_addquotepath(dir, false); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
395 files_addbracketpath(dir, false); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
396 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
397 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
398 if (mode.do_stdinc) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
399 if (sysroot != NULL) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
400 t = dostrdup3(sysroot, "/", CONFIG_LOCALINCLUDE); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
401 freestringlater(t); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
402 dir = t; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
403 } else { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
404 dir = CONFIG_LOCALINCLUDE; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
405 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
406 files_addquotepath(dir, true); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
407 files_addbracketpath(dir, true); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
408 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
409 if (sysroot != NULL) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
410 t = dostrdup3(sysroot, "/", CONFIG_SYSTEMINCLUDE); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
411 freestringlater(t); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
412 dir = t; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
413 } else { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
414 dir = CONFIG_SYSTEMINCLUDE; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
415 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
416 files_addquotepath(dir, true); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
417 files_addbracketpath(dir, true); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
418 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
419 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
420 num = stringarray_num(&incpath_system); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
421 for (i=0; i<num; i++) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
422 dir = stringarray_get(&incpath_system, i); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
423 files_addquotepath(dir, true); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
424 files_addbracketpath(dir, true); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
425 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
426 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
427 num = stringarray_num(&incpath_late); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
428 for (i=0; i<num; i++) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
429 dir = stringarray_get(&incpath_late, i); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
430 files_addquotepath(dir, false); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
431 files_addbracketpath(dir, false); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
432 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
433 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
434 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
435 //////////////////////////////////////////////////////////// |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
436 // silly commandline stuff |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
437 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
438 static const char *commandline_prefix; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
439 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
440 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
441 void |
7 | 442 commandline_setprefix(const struct place *p, char *prefix) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
443 { |
7 | 444 (void)p; |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
445 commandline_prefix = prefix; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
446 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
447 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
448 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
449 void |
7 | 450 commandline_addincpath_user_withprefix(const struct place *p, char *dir) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
451 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
452 char *s; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
453 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
454 if (commandline_prefix == NULL) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
455 warnx("-iprefix needed"); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
456 die(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
457 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
458 s = dostrdup3(commandline_prefix, "/", dir); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
459 freestringlater(s); |
7 | 460 commandline_addincpath_user(p, s); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
461 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
462 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
463 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
464 void |
7 | 465 commandline_addincpath_late_withprefix(const struct place *p, char *dir) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
466 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
467 char *s; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
468 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
469 if (commandline_prefix == NULL) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
470 warnx("-iprefix needed"); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
471 die(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
472 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
473 s = dostrdup3(commandline_prefix, "/", dir); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
474 freestringlater(s); |
7 | 475 commandline_addincpath_late(p, s); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
476 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
477 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
478 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
479 void |
7 | 480 commandline_setstd(const struct place *p, char *std) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
481 { |
7 | 482 (void)p; |
6 | 483 |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
484 if (!strcmp(std, "krc")) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
485 return; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
486 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
487 warnx("Standard %s not supported by this preprocessor", std); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
488 die(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
489 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
490 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
491 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
492 void |
7 | 493 commandline_setlang(const struct place *p, char *lang) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
494 { |
7 | 495 (void)p; |
6 | 496 |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
497 if (!strcmp(lang, "c") || !strcmp(lang, "assembler-with-cpp")) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
498 return; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
499 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
500 warnx("Language %s not supported by this preprocessor", lang); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
501 die(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
502 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
503 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
504 //////////////////////////////////////////////////////////// |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
505 // complex modes |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
506 |
43
f185d1ac4db4
__dead + __printflike for clang
Joerg Sonnenberger <joerg@bec.de>
parents:
39
diff
changeset
|
507 __dead static |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
508 void |
7 | 509 commandline_iremap(const struct place *p, char *str) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
510 { |
7 | 511 (void)p; |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
512 /* XXX */ |
6 | 513 (void)str; |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
514 warnx("-iremap not supported"); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
515 die(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
516 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
517 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
518 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
519 void |
7 | 520 commandline_tabstop(const struct place *p, char *s) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
521 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
522 char *t; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
523 unsigned long val; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
524 |
7 | 525 (void)p; |
6 | 526 |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
527 t = strchr(s, '='); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
528 if (t == NULL) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
529 /* should not happen */ |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
530 warnx("Invalid tabstop"); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
531 die(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
532 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
533 t++; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
534 errno = 0; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
535 val = strtoul(t, &t, 10); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
536 if (errno || *t != '\0') { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
537 warnx("Invalid tabstop"); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
538 die(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
539 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
540 if (val > 64) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
541 warnx("Preposterously large tabstop"); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
542 die(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
543 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
544 mode.input_tabstop = val; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
545 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
546 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
547 /* |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
548 * macrolist |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
549 */ |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
550 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
551 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
552 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
553 commandline_dD(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
554 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
555 mode.do_macrolist = true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
556 mode.macrolist_include_stddef = false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
557 mode.macrolist_include_expansions = true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
558 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
559 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
560 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
561 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
562 commandline_dM(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
563 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
564 mode.do_macrolist = true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
565 mode.macrolist_include_stddef = true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
566 mode.macrolist_include_expansions = true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
567 mode.do_output = false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
568 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
569 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
570 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
571 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
572 commandline_dN(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
573 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
574 mode.do_macrolist = true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
575 mode.macrolist_include_stddef = false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
576 mode.macrolist_include_expansions = false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
577 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
578 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
579 /* |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
580 * include trace |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
581 */ |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
582 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
583 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
584 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
585 commandline_dI(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
586 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
587 mode.do_trace = true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
588 mode.trace_namesonly = false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
589 mode.trace_indented = false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
590 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
591 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
592 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
593 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
594 commandline_H(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
595 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
596 mode.do_trace = true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
597 mode.trace_namesonly = true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
598 mode.trace_indented = true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
599 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
600 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
601 /* |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
602 * depend |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
603 */ |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
604 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
605 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
606 void |
7 | 607 commandline_setdependtarget(const struct place *p, char *str) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
608 { |
7 | 609 (void)p; |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
610 mode.depend_target = str; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
611 mode.depend_quote_target = false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
612 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
613 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
614 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
615 void |
7 | 616 commandline_setdependtarget_quoted(const struct place *p, char *str) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
617 { |
7 | 618 (void)p; |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
619 mode.depend_target = str; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
620 mode.depend_quote_target = true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
621 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
622 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
623 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
624 void |
7 | 625 commandline_setdependoutput(const struct place *p, char *str) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
626 { |
7 | 627 (void)p; |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
628 mode.depend_file = str; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
629 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
630 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
631 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
632 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
633 commandline_M(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
634 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
635 mode.do_depend = true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
636 mode.depend_report_system = true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
637 mode.do_output = false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
638 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
639 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
640 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
641 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
642 commandline_MM(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
643 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
644 mode.do_depend = true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
645 mode.depend_report_system = false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
646 mode.do_output = false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
647 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
648 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
649 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
650 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
651 commandline_MD(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
652 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
653 mode.do_depend = true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
654 mode.depend_report_system = true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
655 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
656 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
657 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
658 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
659 commandline_MMD(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
660 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
661 mode.do_depend = true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
662 mode.depend_report_system = false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
663 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
664 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
665 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
666 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
667 commandline_wall(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
668 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
669 warns.nestcomment = true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
670 warns.undef = true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
671 warns.unused = true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
672 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
673 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
674 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
675 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
676 commandline_wnoall(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
677 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
678 warns.nestcomment = false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
679 warns.undef = false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
680 warns.unused = false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
681 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
682 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
683 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
684 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
685 commandline_wnone(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
686 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
687 warns.nestcomment = false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
688 warns.endiflabels = false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
689 warns.undef = false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
690 warns.unused = false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
691 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
692 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
693 //////////////////////////////////////////////////////////// |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
694 // options |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
695 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
696 struct flag_option { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
697 const char *string; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
698 bool *flag; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
699 bool setto; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
700 }; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
701 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
702 struct act_option { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
703 const char *string; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
704 void (*func)(void); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
705 }; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
706 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
707 struct prefix_option { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
708 const char *string; |
7 | 709 void (*func)(const struct place *, char *); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
710 }; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
711 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
712 struct arg_option { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
713 const char *string; |
7 | 714 void (*func)(const struct place *, char *); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
715 }; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
716 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
717 static const struct flag_option flag_options[] = { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
718 { "C", &mode.output_retain_comments, true }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
719 { "CC", &mode.output_retain_comments, true }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
720 { "MG", &mode.depend_assume_generated, true }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
721 { "MP", &mode.depend_issue_fakerules, true }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
722 { "P", &mode.output_linenumbers, false }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
723 { "Wcomment", &warns.nestcomment, true }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
724 { "Wendif-labels", &warns.endiflabels, true }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
725 { "Werror", &mode.werror, true }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
726 { "Wno-comment", &warns.nestcomment, false }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
727 { "Wno-endif-labels", &warns.endiflabels, false }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
728 { "Wno-error", &mode.werror, false }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
729 { "Wno-undef", &warns.undef, false }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
730 { "Wno-unused-macros", &warns.unused, false }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
731 { "Wundef", &warns.undef, true }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
732 { "Wunused-macros", &warns.unused, true }, |
37
70902cac4170
Sort the option lists to match the comparison used to search them. duh.
David A. Holland
parents:
30
diff
changeset
|
733 { "fdollars-in-identifiers", &mode.input_allow_dollars, true }, |
70902cac4170
Sort the option lists to match the comparison used to search them. duh.
David A. Holland
parents:
30
diff
changeset
|
734 { "fno-dollars-in-identifiers", &mode.input_allow_dollars, false }, |
70902cac4170
Sort the option lists to match the comparison used to search them. duh.
David A. Holland
parents:
30
diff
changeset
|
735 { "nostdinc", &mode.do_stdinc, false }, |
70902cac4170
Sort the option lists to match the comparison used to search them. duh.
David A. Holland
parents:
30
diff
changeset
|
736 { "undef", &mode.do_stddef, false }, |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
737 }; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
738 static const unsigned num_flag_options = HOWMANY(flag_options); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
739 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
740 static const struct act_option act_options[] = { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
741 { "H", commandline_H }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
742 { "M", commandline_M }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
743 { "MD", commandline_MD }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
744 { "MM", commandline_MM }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
745 { "MMD", commandline_MMD }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
746 { "Wall", commandline_wall }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
747 { "Wno-all", commandline_wnoall }, |
37
70902cac4170
Sort the option lists to match the comparison used to search them. duh.
David A. Holland
parents:
30
diff
changeset
|
748 { "dD", commandline_dD }, |
70902cac4170
Sort the option lists to match the comparison used to search them. duh.
David A. Holland
parents:
30
diff
changeset
|
749 { "dI", commandline_dI }, |
70902cac4170
Sort the option lists to match the comparison used to search them. duh.
David A. Holland
parents:
30
diff
changeset
|
750 { "dM", commandline_dM }, |
70902cac4170
Sort the option lists to match the comparison used to search them. duh.
David A. Holland
parents:
30
diff
changeset
|
751 { "dN", commandline_dN }, |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
752 { "w", commandline_wnone }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
753 }; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
754 static const unsigned num_act_options = HOWMANY(act_options); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
755 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
756 static const struct prefix_option prefix_options[] = { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
757 { "D", commandline_def }, |
37
70902cac4170
Sort the option lists to match the comparison used to search them. duh.
David A. Holland
parents:
30
diff
changeset
|
758 { "I", commandline_addincpath_user }, |
70902cac4170
Sort the option lists to match the comparison used to search them. duh.
David A. Holland
parents:
30
diff
changeset
|
759 { "U", commandline_undef }, |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
760 { "ftabstop=", commandline_tabstop }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
761 { "std=", commandline_setstd }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
762 }; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
763 static const unsigned num_prefix_options = HOWMANY(prefix_options); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
764 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
765 static const struct arg_option arg_options[] = { |
37
70902cac4170
Sort the option lists to match the comparison used to search them. duh.
David A. Holland
parents:
30
diff
changeset
|
766 { "MF", commandline_setdependoutput }, |
70902cac4170
Sort the option lists to match the comparison used to search them. duh.
David A. Holland
parents:
30
diff
changeset
|
767 { "MQ", commandline_setdependtarget_quoted }, |
70902cac4170
Sort the option lists to match the comparison used to search them. duh.
David A. Holland
parents:
30
diff
changeset
|
768 { "MT", commandline_setdependtarget }, |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
769 { "idirafter", commandline_addincpath_late }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
770 { "imacros", commandline_addfile_nooutput }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
771 { "include", commandline_addfile_output }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
772 { "iprefix", commandline_setprefix }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
773 { "iquote", commandline_addincpath_quote }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
774 { "iremap", commandline_iremap }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
775 { "isysroot", commandline_isysroot }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
776 { "isystem", commandline_addincpath_system }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
777 { "iwithprefix", commandline_addincpath_late_withprefix }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
778 { "iwithprefixbefore", commandline_addincpath_user_withprefix }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
779 { "x", commandline_setlang }, |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
780 }; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
781 static const unsigned num_arg_options = HOWMANY(arg_options); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
782 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
783 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
784 bool |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
785 check_flag_option(const char *opt) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
786 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
787 unsigned i; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
788 int r; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
789 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
790 for (i=0; i<num_flag_options; i++) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
791 r = strcmp(opt, flag_options[i].string); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
792 if (r == 0) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
793 *flag_options[i].flag = flag_options[i].setto; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
794 return true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
795 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
796 if (r < 0) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
797 break; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
798 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
799 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
800 return false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
801 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
802 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
803 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
804 bool |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
805 check_act_option(const char *opt) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
806 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
807 unsigned i; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
808 int r; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
809 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
810 for (i=0; i<num_act_options; i++) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
811 r = strcmp(opt, act_options[i].string); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
812 if (r == 0) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
813 act_options[i].func(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
814 return true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
815 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
816 if (r < 0) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
817 break; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
818 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
819 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
820 return false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
821 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
822 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
823 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
824 bool |
7 | 825 check_prefix_option(const struct place *p, char *opt) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
826 { |
44
57e0c7a50b2d
Skip option itself, before passing down to handler.
Joerg Sonnenberger <joerg@bec.de>
parents:
43
diff
changeset
|
827 unsigned i, len; |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
828 int r; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
829 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
830 for (i=0; i<num_prefix_options; i++) { |
44
57e0c7a50b2d
Skip option itself, before passing down to handler.
Joerg Sonnenberger <joerg@bec.de>
parents:
43
diff
changeset
|
831 len = strlen(prefix_options[i].string); |
57e0c7a50b2d
Skip option itself, before passing down to handler.
Joerg Sonnenberger <joerg@bec.de>
parents:
43
diff
changeset
|
832 r = strncmp(opt, prefix_options[i].string, len); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
833 if (r == 0) { |
44
57e0c7a50b2d
Skip option itself, before passing down to handler.
Joerg Sonnenberger <joerg@bec.de>
parents:
43
diff
changeset
|
834 prefix_options[i].func(p, opt + len); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
835 return true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
836 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
837 if (r < 0) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
838 break; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
839 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
840 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
841 return false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
842 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
843 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
844 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
845 bool |
7 | 846 check_arg_option(const char *opt, const struct place *argplace, char *arg) |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
847 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
848 unsigned i; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
849 int r; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
850 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
851 for (i=0; i<num_arg_options; i++) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
852 r = strcmp(opt, arg_options[i].string); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
853 if (r == 0) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
854 if (arg == NULL) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
855 warnx("Option -%s requires an argument", opt); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
856 die(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
857 } |
7 | 858 arg_options[i].func(argplace, arg); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
859 return true; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
860 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
861 if (r < 0) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
862 break; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
863 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
864 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
865 return false; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
866 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
867 |
43
f185d1ac4db4
__dead + __printflike for clang
Joerg Sonnenberger <joerg@bec.de>
parents:
39
diff
changeset
|
868 __dead static |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
869 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
870 usage(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
871 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
872 fprintf(stderr, "Usage: %s [options] [infile [outfile]]\n", |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
873 getprogname()); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
874 fprintf(stderr, "Common options:\n"); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
875 fprintf(stderr, " -C Retain comments\n"); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
876 fprintf(stderr, " -Dmacro[=def] Predefine macro\n"); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
877 fprintf(stderr, " -Idir Add to include path\n"); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
878 fprintf(stderr, " -M Issue depend info\n"); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
879 fprintf(stderr, " -MD Issue depend info and output\n"); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
880 fprintf(stderr, " -MM -M w/o system headers\n"); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
881 fprintf(stderr, " -MMD -MD w/o system headers\n"); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
882 fprintf(stderr, " -nostdinc Drop default include path\n"); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
883 fprintf(stderr, " -Umacro Undefine macro\n"); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
884 fprintf(stderr, " -undef Undefine everything\n"); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
885 fprintf(stderr, " -Wall Enable all warnings\n"); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
886 fprintf(stderr, " -Werror Make warnings into errors\n"); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
887 fprintf(stderr, " -w Disable all warnings\n"); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
888 die(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
889 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
890 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
891 //////////////////////////////////////////////////////////// |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
892 // exit and cleanup |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
893 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
894 static struct stringarray freestrings; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
895 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
896 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
897 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
898 init(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
899 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
900 stringarray_init(&freestrings); |
6 | 901 |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
902 incpath_init(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
903 commandline_macros_init(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
904 commandline_files_init(); |
6 | 905 |
10 | 906 place_init(); |
6 | 907 files_init(); |
15 | 908 directive_init(); |
17 | 909 macros_init(); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
910 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
911 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
912 static |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
913 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
914 cleanup(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
915 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
916 unsigned i, num; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
917 |
17 | 918 macros_cleanup(); |
15 | 919 directive_cleanup(); |
6 | 920 files_cleanup(); |
10 | 921 place_cleanup(); |
6 | 922 |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
923 commandline_files_cleanup(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
924 commandline_macros_cleanup(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
925 incpath_cleanup(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
926 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
927 num = stringarray_num(&freestrings); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
928 for (i=0; i<num; i++) { |
39
337110e7240a
Pass the size to free; it makes debug checking easier.
David A. Holland
parents:
38
diff
changeset
|
929 dostrfree(stringarray_get(&freestrings, i)); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
930 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
931 stringarray_setsize(&freestrings, 0); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
932 stringarray_cleanup(&freestrings); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
933 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
934 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
935 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
936 die(void) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
937 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
938 cleanup(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
939 exit(EXIT_FAILURE); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
940 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
941 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
942 void |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
943 freestringlater(char *s) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
944 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
945 stringarray_add(&freestrings, s, NULL); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
946 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
947 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
948 //////////////////////////////////////////////////////////// |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
949 // main |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
950 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
951 int |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
952 main(int argc, char *argv[]) |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
953 { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
954 const char *inputfile = NULL; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
955 const char *outputfile = NULL; |
11 | 956 struct place cmdplace; |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
957 int i; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
958 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
959 init(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
960 |
7 | 961 for (i=1; i<argc; i++) { |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
962 if (argv[i][0] != '-') { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
963 break; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
964 } |
14 | 965 place_setcommandline(&cmdplace, i, 1); |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
966 if (check_flag_option(argv[i]+1)) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
967 continue; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
968 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
969 if (check_act_option(argv[i]+1)) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
970 continue; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
971 } |
11 | 972 if (check_prefix_option(&cmdplace, argv[i]+1)) { |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
973 continue; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
974 } |
14 | 975 place_setcommandline(&cmdplace, i+1, 1); |
11 | 976 if (check_arg_option(argv[i]+1, &cmdplace, argv[i+1])) { |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
977 i++; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
978 continue; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
979 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
980 usage(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
981 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
982 if (i < argc) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
983 inputfile = argv[i++]; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
984 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
985 if (i < argc) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
986 outputfile = argv[i++]; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
987 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
988 if (i < argc) { |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
989 usage(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
990 } |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
991 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
992 mode.output_file = outputfile; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
993 |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
994 loadincludepath(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
995 apply_builtin_macros(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
996 apply_commandline_macros(); |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
997 read_commandline_files(); |
11 | 998 place_setnowhere(&cmdplace); |
999 file_readabsolute(&cmdplace, inputfile); | |
7 | 1000 |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
1001 cleanup(); |
6 | 1002 if (complain_failed()) { |
1003 return EXIT_FAILURE; | |
1004 } | |
4
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
1005 return EXIT_SUCCESS; |
ee9a66b87c70
Initial version of toplevel and options handling.
David A. Holland
parents:
diff
changeset
|
1006 } |