]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cppinit.c
hwint.h (HOST_BITS_PER_WIDE_INT, [...]): Use long long if it's wider than long and...
[thirdparty/gcc.git] / gcc / cppinit.c
CommitLineData
5538ada6 1/* CPP Library.
5e7b4e25 2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
03b9ab42 3 1999, 2000, 2001 Free Software Foundation, Inc.
5538ada6
ZW
4 Contributed by Per Bothner, 1994-95.
5 Based on CCCP program by Paul Rubin, June 1986
6 Adapted to ANSI C, Richard Stallman, Jan 1987
7
8This program is free software; you can redistribute it and/or modify it
9under the terms of the GNU General Public License as published by the
10Free Software Foundation; either version 2, or (at your option) any
11later version.
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with this program; if not, write to the Free Software
20Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
21
5538ada6
ZW
22#include "config.h"
23#include "system.h"
6de1e2a9
ZW
24#include "cpplib.h"
25#include "cpphash.h"
26#include "output.h"
27#include "prefix.h"
28#include "intl.h"
9f8f4efe 29#include "version.h"
49e6c08e 30#include "mkdeps.h"
60893f43 31#include "cppdefault.h"
6de1e2a9 32
4a58aab6 33/* Predefined symbols, built-in macros, and the default include path. */
6de1e2a9
ZW
34
35#ifndef GET_ENV_PATH_LIST
36#define GET_ENV_PATH_LIST(VAR,NAME) do { (VAR) = getenv (NAME); } while (0)
37#endif
38
88ae23e7
ZW
39/* Windows does not natively support inodes, and neither does MSDOS.
40 Cygwin's emulation can generate non-unique inodes, so don't use it.
41 VMS has non-numeric inodes. */
42#ifdef VMS
43#define INO_T_EQ(a, b) (!memcmp (&(a), &(b), sizeof (a)))
44#elif (defined _WIN32 && ! defined (_UWIN)) || defined __MSDOS__
45#define INO_T_EQ(a, b) 0
46#else
47#define INO_T_EQ(a, b) ((a) == (b))
48#endif
49
4a58aab6 50/* Internal structures and prototypes. */
6de1e2a9 51
4a58aab6
NB
52/* A `struct pending_option' remembers one -D, -A, -U, -include, or
53 -imacros switch. */
40eac643 54
8be1ddca 55typedef void (* cl_directive_handler) PARAMS ((cpp_reader *, const char *));
0b22d65c 56struct pending_option
6de1e2a9 57{
0b22d65c 58 struct pending_option *next;
7ceb3598 59 const char *arg;
40eac643 60 cl_directive_handler handler;
6de1e2a9 61};
0b22d65c 62
88ae23e7
ZW
63/* The `pending' structure accumulates all the options that are not
64 actually processed until we hit cpp_start_read. It consists of
65 several lists, one for each type of option. We keep both head and
4a58aab6 66 tail pointers for quick insertion. */
88ae23e7
ZW
67struct cpp_pending
68{
40eac643 69 struct pending_option *directive_head, *directive_tail;
88ae23e7
ZW
70
71 struct file_name_list *quote_head, *quote_tail;
72 struct file_name_list *brack_head, *brack_tail;
73 struct file_name_list *systm_head, *systm_tail;
74 struct file_name_list *after_head, *after_tail;
75
76 struct pending_option *imacros_head, *imacros_tail;
77 struct pending_option *include_head, *include_tail;
78};
79
0b22d65c
ZW
80#ifdef __STDC__
81#define APPEND(pend, list, elt) \
82 do { if (!(pend)->list##_head) (pend)->list##_head = (elt); \
83 else (pend)->list##_tail->next = (elt); \
84 (pend)->list##_tail = (elt); \
85 } while (0)
86#else
87#define APPEND(pend, list, elt) \
88 do { if (!(pend)->list/**/_head) (pend)->list/**/_head = (elt); \
89 else (pend)->list/**/_tail->next = (elt); \
90 (pend)->list/**/_tail = (elt); \
91 } while (0)
92#endif
6de1e2a9 93
6de1e2a9 94static void print_help PARAMS ((void));
0b22d65c 95static void path_include PARAMS ((cpp_reader *,
0b22d65c 96 char *, int));
674c3b40 97static void init_library PARAMS ((void));
7ca3d2b1 98static void init_builtins PARAMS ((cpp_reader *));
0b22d65c 99static void append_include_chain PARAMS ((cpp_reader *,
c45da1ca 100 char *, int, int));
dd69c71b
NB
101struct file_name_list * remove_dup_dir PARAMS ((cpp_reader *,
102 struct file_name_list *));
103struct file_name_list * remove_dup_dirs PARAMS ((cpp_reader *,
104 struct file_name_list *));
ae79697b 105static void merge_include_chains PARAMS ((cpp_reader *));
4a58aab6
NB
106static void do_includes PARAMS ((cpp_reader *,
107 struct pending_option *,
108 int));
dd07b884 109static void set_lang PARAMS ((cpp_reader *, enum c_lang));
7ca3d2b1
NB
110static void init_dependency_output PARAMS ((cpp_reader *));
111static void init_standard_includes PARAMS ((cpp_reader *));
2c0accc9 112static void new_pending_directive PARAMS ((struct cpp_pending *,
40eac643
NB
113 const char *,
114 cl_directive_handler));
7ca3d2b1 115static void output_deps PARAMS ((cpp_reader *));
e23c0ba3 116static int parse_option PARAMS ((const char *));
6de1e2a9 117
4a58aab6 118/* Fourth argument to append_include_chain: chain to use. */
0b22d65c 119enum { QUOTE = 0, BRACKET, SYSTEM, AFTER };
6de1e2a9 120
61d0346d
NB
121/* If we have designated initializers (GCC >2.7) these tables can be
122 initialized, constant data. Otherwise, they have to be filled in at
12cf91fe 123 runtime. */
61d0346d 124#if HAVE_DESIGNATED_INITIALIZERS
a9ae4483 125
4a58aab6 126#define init_trigraph_map() /* Nothing. */
61d0346d
NB
127#define TRIGRAPH_MAP \
128__extension__ const U_CHAR _cpp_trigraph_map[UCHAR_MAX + 1] = {
129
a9ae4483 130#define END };
455d2586 131#define s(p, v) [p] = v,
61d0346d 132
a9ae4483 133#else
61d0346d 134
61d0346d
NB
135#define TRIGRAPH_MAP U_CHAR _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \
136 static void init_trigraph_map PARAMS ((void)) { \
137 unsigned char *x = _cpp_trigraph_map;
138
ae79697b 139#define END }
455d2586 140#define s(p, v) x[p] = v;
61d0346d 141
a9ae4483 142#endif
6de1e2a9 143
61d0346d
NB
144TRIGRAPH_MAP
145 s('=', '#') s(')', ']') s('!', '|')
146 s('(', '[') s('\'', '^') s('>', '}')
147 s('/', '\\') s('<', '{') s('-', '~')
148END
149
a9ae4483 150#undef s
455d2586 151#undef END
61d0346d 152#undef TRIGRAPH_MAP
6de1e2a9
ZW
153
154/* Given a colon-separated list of file names PATH,
155 add all the names to the search path for include files. */
156
157static void
e33f6253 158path_include (pfile, list, path)
6de1e2a9 159 cpp_reader *pfile;
0b22d65c
ZW
160 char *list;
161 int path;
6de1e2a9 162{
0b22d65c 163 char *p, *q, *name;
6de1e2a9 164
0b22d65c 165 p = list;
6de1e2a9 166
0b22d65c
ZW
167 do
168 {
6de1e2a9 169 /* Find the end of this name. */
0b22d65c 170 q = p;
6de1e2a9 171 while (*q != 0 && *q != PATH_SEPARATOR) q++;
0b22d65c
ZW
172 if (q == p)
173 {
174 /* An empty name in the path stands for the current directory. */
175 name = (char *) xmalloc (2);
176 name[0] = '.';
177 name[1] = 0;
178 }
179 else
180 {
181 /* Otherwise use the directory that is named. */
182 name = (char *) xmalloc (q - p + 1);
183 memcpy (name, p, q - p);
184 name[q - p] = 0;
185 }
6de1e2a9 186
e33f6253 187 append_include_chain (pfile, name, path, 0);
6de1e2a9
ZW
188
189 /* Advance past this name. */
0b22d65c 190 if (*q == 0)
6de1e2a9 191 break;
0b22d65c
ZW
192 p = q + 1;
193 }
194 while (1);
195}
196
0b22d65c
ZW
197/* Append DIR to include path PATH. DIR must be permanently allocated
198 and writable. */
199static void
e33f6253 200append_include_chain (pfile, dir, path, cxx_aware)
0b22d65c 201 cpp_reader *pfile;
0b22d65c
ZW
202 char *dir;
203 int path;
c45da1ca 204 int cxx_aware;
0b22d65c 205{
e33f6253 206 struct cpp_pending *pend = CPP_OPTION (pfile, pending);
0b22d65c
ZW
207 struct file_name_list *new;
208 struct stat st;
209 unsigned int len;
210
b0699dad 211 _cpp_simplify_pathname (dir);
0b22d65c
ZW
212 if (stat (dir, &st))
213 {
214 /* Dirs that don't exist are silently ignored. */
215 if (errno != ENOENT)
c1212d2f 216 cpp_notice_from_errno (pfile, dir);
ae79697b 217 else if (CPP_OPTION (pfile, verbose))
041c3194 218 fprintf (stderr, _("ignoring nonexistent directory \"%s\"\n"), dir);
0b22d65c
ZW
219 return;
220 }
221
222 if (!S_ISDIR (st.st_mode))
223 {
c1212d2f 224 cpp_notice (pfile, "%s: Not a directory", dir);
0b22d65c
ZW
225 return;
226 }
227
228 len = strlen (dir);
229 if (len > pfile->max_include_len)
230 pfile->max_include_len = len;
ae79697b 231
7ceb3598 232 new = (struct file_name_list *) xmalloc (sizeof (struct file_name_list));
0b22d65c
ZW
233 new->name = dir;
234 new->nlen = len;
235 new->ino = st.st_ino;
236 new->dev = st.st_dev;
c45da1ca
ZW
237 if (path == SYSTEM)
238 new->sysp = cxx_aware ? 1 : 2;
239 else
240 new->sysp = 0;
0b22d65c 241 new->name_map = NULL;
503cb436
DB
242 new->next = NULL;
243 new->alloc = NULL;
0b22d65c
ZW
244
245 switch (path)
246 {
247 case QUOTE: APPEND (pend, quote, new); break;
248 case BRACKET: APPEND (pend, brack, new); break;
249 case SYSTEM: APPEND (pend, systm, new); break;
250 case AFTER: APPEND (pend, after, new); break;
6de1e2a9
ZW
251 }
252}
253
dd69c71b
NB
254/* Handle a duplicated include path. PREV is the link in the chain
255 before the duplicate. The duplicate is removed from the chain and
256 freed. Returns PREV. */
257struct file_name_list *
258remove_dup_dir (pfile, prev)
259 cpp_reader *pfile;
260 struct file_name_list *prev;
261{
262 struct file_name_list *cur = prev->next;
263
264 if (CPP_OPTION (pfile, verbose))
265 fprintf (stderr, _("ignoring duplicate directory \"%s\"\n"), cur->name);
266
267 prev->next = cur->next;
268 free (cur->name);
269 free (cur);
270
271 return prev;
272}
273
274/* Remove duplicate directories from a chain. Returns the tail of the
275 chain, or NULL if the chain is empty. This algorithm is quadratic
276 in the number of -I switches, which is acceptable since there
277 aren't usually that many of them. */
278struct file_name_list *
279remove_dup_dirs (pfile, head)
280 cpp_reader *pfile;
281 struct file_name_list *head;
282{
283 struct file_name_list *prev = NULL, *cur, *other;
284
285 for (cur = head; cur; cur = cur->next)
286 {
287 for (other = head; other != cur; other = other->next)
288 if (INO_T_EQ (cur->ino, other->ino) && cur->dev == other->dev)
289 {
290 cur = remove_dup_dir (pfile, prev);
291 break;
292 }
293 prev = cur;
294 }
295
296 return prev;
297}
298
88ae23e7
ZW
299/* Merge the four include chains together in the order quote, bracket,
300 system, after. Remove duplicate dirs (as determined by
301 INO_T_EQ()). The system_include and after_include chains are never
302 referred to again after this function; all access is through the
303 bracket_include path.
304
305 For the future: Check if the directory is empty (but
4a58aab6 306 how?) and possibly preload the include hash. */
88ae23e7
ZW
307
308static void
ae79697b
ZW
309merge_include_chains (pfile)
310 cpp_reader *pfile;
88ae23e7 311{
dd69c71b 312 struct file_name_list *quote, *brack, *systm, *qtail;
88ae23e7 313
ae79697b 314 struct cpp_pending *pend = CPP_OPTION (pfile, pending);
88ae23e7 315
ae79697b
ZW
316 quote = pend->quote_head;
317 brack = pend->brack_head;
318 systm = pend->systm_head;
dd69c71b 319 qtail = pend->quote_tail;
88ae23e7 320
dd69c71b
NB
321 /* Paste together bracket, system, and after include chains. */
322 if (systm)
323 pend->systm_tail->next = pend->after_head;
88ae23e7 324 else
dd69c71b
NB
325 systm = pend->after_head;
326
327 if (brack)
328 pend->brack_tail->next = systm;
88ae23e7
ZW
329 else
330 brack = systm;
331
dd69c71b
NB
332 /* This is a bit tricky. First we drop dupes from the quote-include
333 list. Then we drop dupes from the bracket-include list.
334 Finally, if qtail and brack are the same directory, we cut out
335 brack.
88ae23e7
ZW
336
337 We can't just merge the lists and then uniquify them because
338 then we may lose directories from the <> search path that should
339 be there; consider -Ifoo -Ibar -I- -Ifoo -Iquux. It is however
340 safe to treat -Ibar -Ifoo -I- -Ifoo -Iquux as if written
dd69c71b 341 -Ibar -I- -Ifoo -Iquux. */
88ae23e7 342
dd69c71b
NB
343 remove_dup_dirs (pfile, brack);
344 qtail = remove_dup_dirs (pfile, quote);
88ae23e7
ZW
345
346 if (quote)
347 {
dd69c71b
NB
348 qtail->next = brack;
349
350 /* If brack == qtail, remove brack as it's simpler. */
88ae23e7 351 if (INO_T_EQ (qtail->ino, brack->ino) && qtail->dev == brack->dev)
dd69c71b 352 brack = remove_dup_dir (pfile, qtail);
88ae23e7
ZW
353 }
354 else
355 quote = brack;
356
ae79697b
ZW
357 CPP_OPTION (pfile, quote_include) = quote;
358 CPP_OPTION (pfile, bracket_include) = brack;
88ae23e7
ZW
359}
360
dd07b884
NB
361/* Sets internal flags correctly for a given language, and defines
362 macros if necessary. */
363static void
364set_lang (pfile, lang)
365 cpp_reader *pfile;
366 enum c_lang lang;
367{
368 struct cpp_pending *pend = CPP_OPTION (pfile, pending);
369
bdb05a7b
NB
370 /* Defaults. */
371 CPP_OPTION (pfile, lang) = lang;
dd07b884
NB
372 CPP_OPTION (pfile, objc) = 0;
373 CPP_OPTION (pfile, cplusplus) = 0;
bdb05a7b 374 CPP_OPTION (pfile, extended_numbers) = 1; /* Allowed in GNU C and C99. */
dd07b884
NB
375
376 switch (lang)
377 {
378 /* GNU C. */
379 case CLK_GNUC99:
380 CPP_OPTION (pfile, trigraphs) = 0;
381 CPP_OPTION (pfile, dollars_in_ident) = 1;
382 CPP_OPTION (pfile, cplusplus_comments) = 1;
383 CPP_OPTION (pfile, digraphs) = 1;
dd07b884
NB
384 CPP_OPTION (pfile, c99) = 1;
385 new_pending_directive (pend, "__STDC_VERSION__=199901L", cpp_define);
386 break;
387 case CLK_GNUC89:
388 CPP_OPTION (pfile, trigraphs) = 0;
389 CPP_OPTION (pfile, dollars_in_ident) = 1;
390 CPP_OPTION (pfile, cplusplus_comments) = 1;
391 CPP_OPTION (pfile, digraphs) = 1;
dd07b884
NB
392 CPP_OPTION (pfile, c99) = 0;
393 break;
394
395 /* ISO C. */
396 case CLK_STDC94:
397 new_pending_directive (pend, "__STDC_VERSION__=199409L", cpp_define);
398 case CLK_STDC89:
399 CPP_OPTION (pfile, trigraphs) = 1;
400 CPP_OPTION (pfile, dollars_in_ident) = 0;
401 CPP_OPTION (pfile, cplusplus_comments) = 0;
402 CPP_OPTION (pfile, digraphs) = lang == CLK_STDC94;
dd07b884 403 CPP_OPTION (pfile, c99) = 0;
bdb05a7b 404 CPP_OPTION (pfile, extended_numbers) = 0;
dd07b884
NB
405 new_pending_directive (pend, "__STRICT_ANSI__", cpp_define);
406 break;
407 case CLK_STDC99:
408 CPP_OPTION (pfile, trigraphs) = 1;
409 CPP_OPTION (pfile, dollars_in_ident) = 0;
410 CPP_OPTION (pfile, cplusplus_comments) = 1;
411 CPP_OPTION (pfile, digraphs) = 1;
dd07b884
NB
412 CPP_OPTION (pfile, c99) = 1;
413 new_pending_directive (pend, "__STRICT_ANSI__", cpp_define);
414 new_pending_directive (pend, "__STDC_VERSION__=199901L", cpp_define);
415 break;
416
417 /* Objective C. */
418 case CLK_OBJCXX:
419 new_pending_directive (pend, "__cplusplus", cpp_define);
420 CPP_OPTION (pfile, cplusplus) = 1;
421 case CLK_OBJC:
422 CPP_OPTION (pfile, trigraphs) = 0;
423 CPP_OPTION (pfile, dollars_in_ident) = 1;
424 CPP_OPTION (pfile, cplusplus_comments) = 1;
425 CPP_OPTION (pfile, digraphs) = 1;
dd07b884
NB
426 CPP_OPTION (pfile, c99) = 0;
427 CPP_OPTION (pfile, objc) = 1;
428 new_pending_directive (pend, "__OBJC__", cpp_define);
429 break;
430
431 /* C++. */
432 case CLK_GNUCXX:
433 case CLK_CXX98:
434 CPP_OPTION (pfile, cplusplus) = 1;
435 CPP_OPTION (pfile, trigraphs) = lang == CLK_CXX98;
436 CPP_OPTION (pfile, dollars_in_ident) = lang == CLK_GNUCXX;
437 CPP_OPTION (pfile, cplusplus_comments) = 1;
438 CPP_OPTION (pfile, digraphs) = 1;
dd07b884
NB
439 CPP_OPTION (pfile, c99) = 0;
440 new_pending_directive (pend, "__cplusplus", cpp_define);
441 break;
442
443 /* Assembler. */
444 case CLK_ASM:
445 CPP_OPTION (pfile, trigraphs) = 0;
446 CPP_OPTION (pfile, dollars_in_ident) = 0; /* Maybe not? */
447 CPP_OPTION (pfile, cplusplus_comments) = 1;
448 CPP_OPTION (pfile, digraphs) = 0;
dd07b884 449 CPP_OPTION (pfile, c99) = 0;
dd07b884
NB
450 new_pending_directive (pend, "__ASSEMBLER__", cpp_define);
451 break;
452 }
453}
454
7ca3d2b1
NB
455#ifdef HOST_EBCDIC
456static int opt_comp PARAMS ((const void *, const void *));
457
458/* Run-time sorting of options array. */
459static int
460opt_comp (p1, p2)
461 const void *p1, *p2;
462{
463 return strcmp (((struct cl_option *) p1)->opt_text,
464 ((struct cl_option *) p2)->opt_text);
465}
466#endif
cf44ea52 467
7ca3d2b1
NB
468/* init initializes library global state. It might not need to
469 do anything depending on the platform and compiler. */
cf44ea52
NB
470
471static void
674c3b40 472init_library ()
cf44ea52 473{
7ca3d2b1
NB
474 static int initialized = 0;
475
476 if (! initialized)
477 {
478 initialized = 1;
479
cf44ea52 480#ifdef HOST_EBCDIC
7ca3d2b1
NB
481 /* For non-ASCII hosts, the cl_options array needs to be sorted at
482 runtime. */
483 qsort (cl_options, N_OPTS, sizeof (struct cl_option), opt_comp);
cf44ea52
NB
484#endif
485
7ca3d2b1
NB
486 /* Set up the trigraph map. This doesn't need to do anything if
487 we were compiled with a compiler that supports C99 designated
488 initializers. */
489 init_trigraph_map ();
490 }
cf44ea52
NB
491}
492
6de1e2a9 493/* Initialize a cpp_reader structure. */
cf44ea52
NB
494cpp_reader *
495cpp_create_reader (lang)
dd07b884 496 enum c_lang lang;
6de1e2a9 497{
93c80368 498 struct spec_nodes *s;
7ca3d2b1 499 cpp_reader *pfile;
93c80368 500
cf44ea52 501 /* Initialise this instance of the library if it hasn't been already. */
674c3b40 502 init_library ();
7ca3d2b1
NB
503
504 pfile = (cpp_reader *) xcalloc (1, sizeof (cpp_reader));
93c80368 505
ae79697b
ZW
506 CPP_OPTION (pfile, warn_import) = 1;
507 CPP_OPTION (pfile, discard_comments) = 1;
508 CPP_OPTION (pfile, show_column) = 1;
6ab3e7dd 509 CPP_OPTION (pfile, tabstop) = 8;
be768055 510 CPP_OPTION (pfile, operator_names) = 1;
ae79697b
ZW
511
512 CPP_OPTION (pfile, pending) =
513 (struct cpp_pending *) xcalloc (1, sizeof (struct cpp_pending));
514
056487e7
NB
515 /* After creating pfile->pending. */
516 set_lang (pfile, lang);
517
f7114e17
NB
518 /* It's simplest to just create this struct whether or not it will
519 be needed. */
520 pfile->deps = deps_init ();
521
4a58aab6 522 /* Initialize lexer state. */
93c80368
NB
523 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
524
525 /* Indicate date and time not yet calculated. */
526 pfile->date.type = CPP_EOF;
527
528 /* Initialise the base context. */
529 pfile->context = &pfile->base_context;
530 pfile->base_context.macro = 0;
531 pfile->base_context.prev = pfile->base_context.next = 0;
532
533 /* Identifier pool initially 8K. Unaligned, permanent pool. */
534 _cpp_init_pool (&pfile->ident_pool, 8 * 1024, 1, 0);
535
93c80368
NB
536 /* Argument pool initially 8K. Aligned, temporary pool. */
537 _cpp_init_pool (&pfile->argument_pool, 8 * 1024, 0, 1);
538
539 /* Macro pool initially 8K. Aligned, permanent pool. */
540 _cpp_init_pool (&pfile->macro_pool, 8 * 1024, 0, 0);
3cb553b4 541
93c80368 542 _cpp_init_hashtable (pfile);
bfb9dc7f 543 _cpp_init_stacks (pfile);
c71f835b 544 _cpp_init_includes (pfile);
58fea6af 545 _cpp_init_internal_pragmas (pfile);
6de1e2a9 546
93c80368
NB
547 /* Initialize the special nodes. */
548 s = &pfile->spec_nodes;
549 s->n_L = cpp_lookup (pfile, DSC("L"));
550 s->n_defined = cpp_lookup (pfile, DSC("defined"));
a5c3cccd 551 s->n__Pragma = cpp_lookup (pfile, DSC("_Pragma"));
93c80368
NB
552 s->n__STRICT_ANSI__ = cpp_lookup (pfile, DSC("__STRICT_ANSI__"));
553 s->n__CHAR_UNSIGNED__ = cpp_lookup (pfile, DSC("__CHAR_UNSIGNED__"));
554 s->n__VA_ARGS__ = cpp_lookup (pfile, DSC("__VA_ARGS__"));
555 s->n__VA_ARGS__->flags |= NODE_DIAGNOSTIC;
cf44ea52
NB
556
557 return pfile;
f2d5f0cc
ZW
558}
559
6de1e2a9
ZW
560/* Free resources used by PFILE.
561 This is the cpp_reader 'finalizer' or 'destructor' (in C++ terminology). */
562void
563cpp_cleanup (pfile)
564 cpp_reader *pfile;
565{
93c80368
NB
566 struct file_name_list *dir, *dirn;
567 cpp_context *context, *contextn;
709e9e50 568
38b24ee2 569 while (CPP_BUFFER (pfile) != NULL)
6de1e2a9
ZW
570 cpp_pop_buffer (pfile);
571
93c80368
NB
572 if (pfile->macro_buffer)
573 free ((PTR) pfile->macro_buffer);
574
f7114e17 575 deps_free (pfile->deps);
49e6c08e 576
bfb9dc7f 577 _cpp_cleanup_includes (pfile);
c71f835b 578 _cpp_cleanup_stacks (pfile);
93c80368
NB
579 _cpp_cleanup_hashtable (pfile);
580
581 _cpp_free_lookaheads (pfile);
709e9e50 582
93c80368 583 _cpp_free_pool (&pfile->ident_pool);
93c80368
NB
584 _cpp_free_pool (&pfile->macro_pool);
585 _cpp_free_pool (&pfile->argument_pool);
586
587 for (dir = CPP_OPTION (pfile, quote_include); dir; dir = dirn)
709e9e50 588 {
93c80368 589 dirn = dir->next;
709e9e50
NB
590 free (dir->name);
591 free (dir);
592 }
93c80368
NB
593
594 for (context = pfile->base_context.next; context; context = contextn)
595 {
596 contextn = context->next;
597 free (context);
598 }
6de1e2a9
ZW
599}
600
601
93c80368
NB
602/* This structure defines one built-in identifier. A node will be
603 entered in the hash table under the name NAME, with value VALUE (if
604 any). If flags has OPERATOR, the node's operator field is used; if
605 flags has BUILTIN the node's builtin field is used.
92936ecf
ZW
606
607 Two values are not compile time constants, so we tag
041c3194 608 them in the FLAGS field instead:
8c389f84
ZW
609 VERS value is the global version_string, quoted
610 ULP value is the global user_label_prefix
92936ecf 611
93c80368 612 Also, macros with CPLUS set in the flags field are entered only for C++. */
a9ae4483
ZW
613
614struct builtin
615{
12cf91fe 616 const U_CHAR *name;
041c3194 617 const char *value;
93c80368
NB
618 unsigned char builtin;
619 unsigned char operator;
a9ae4483 620 unsigned short flags;
93c80368 621 unsigned short len;
a9ae4483 622};
93c80368
NB
623#define VERS 0x01
624#define ULP 0x02
625#define CPLUS 0x04
626#define BUILTIN 0x08
627#define OPERATOR 0x10
628
629#define B(n, t) { U n, 0, t, 0, BUILTIN, sizeof n - 1 }
630#define C(n, v) { U n, v, 0, 0, 0, sizeof n - 1 }
631#define X(n, f) { U n, 0, 0, 0, f, sizeof n - 1 }
632#define O(n, c, f) { U n, 0, 0, c, OPERATOR | f, sizeof n - 1 }
a9ae4483 633static const struct builtin builtin_array[] =
6de1e2a9 634{
93c80368
NB
635 B("__TIME__", BT_TIME),
636 B("__DATE__", BT_DATE),
637 B("__FILE__", BT_FILE),
638 B("__BASE_FILE__", BT_BASE_FILE),
639 B("__LINE__", BT_SPECLINE),
640 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL),
641 B("__STDC__", BT_STDC),
12cf91fe 642
041c3194
ZW
643 X("__VERSION__", VERS),
644 X("__USER_LABEL_PREFIX__", ULP),
12cf91fe
ZW
645 C("__REGISTER_PREFIX__", REGISTER_PREFIX),
646 C("__HAVE_BUILTIN_SETJMP__", "1"),
6de1e2a9 647#ifndef NO_BUILTIN_SIZE_TYPE
12cf91fe 648 C("__SIZE_TYPE__", SIZE_TYPE),
6de1e2a9
ZW
649#endif
650#ifndef NO_BUILTIN_PTRDIFF_TYPE
12cf91fe 651 C("__PTRDIFF_TYPE__", PTRDIFF_TYPE),
6de1e2a9 652#endif
0209c340 653#ifndef NO_BUILTIN_WCHAR_TYPE
12cf91fe 654 C("__WCHAR_TYPE__", WCHAR_TYPE),
0209c340 655#endif
d6777972
JM
656#ifndef NO_BUILTIN_WINT_TYPE
657 C("__WINT_TYPE__", WINT_TYPE),
658#endif
92936ecf
ZW
659
660 /* Named operators known to the preprocessor. These cannot be #defined
661 and always have their stated meaning. They are treated like normal
93c80368 662 identifiers except for the type code and the meaning. Most of them
92936ecf 663 are only for C++ (but see iso646.h). */
92936ecf
ZW
664 O("and", CPP_AND_AND, CPLUS),
665 O("and_eq", CPP_AND_EQ, CPLUS),
666 O("bitand", CPP_AND, CPLUS),
667 O("bitor", CPP_OR, CPLUS),
668 O("compl", CPP_COMPL, CPLUS),
669 O("not", CPP_NOT, CPLUS),
670 O("not_eq", CPP_NOT_EQ, CPLUS),
671 O("or", CPP_OR_OR, CPLUS),
672 O("or_eq", CPP_OR_EQ, CPLUS),
673 O("xor", CPP_XOR, CPLUS),
93c80368 674 O("xor_eq", CPP_XOR_EQ, CPLUS)
a9ae4483 675};
12cf91fe
ZW
676#undef B
677#undef C
678#undef X
be768055 679#undef O
8c389f84
ZW
680#define builtin_array_end \
681 builtin_array + sizeof(builtin_array)/sizeof(struct builtin)
a9ae4483
ZW
682
683/* Subroutine of cpp_start_read; reads the builtins table above and
684 enters the macros into the hash table. */
a9ae4483 685static void
7ca3d2b1 686init_builtins (pfile)
a9ae4483
ZW
687 cpp_reader *pfile;
688{
a9ae4483 689 const struct builtin *b;
771c4df3 690
8c389f84 691 for(b = builtin_array; b < builtin_array_end; b++)
6de1e2a9 692 {
93c80368 693 if ((b->flags & CPLUS) && ! CPP_OPTION (pfile, cplusplus))
92936ecf
ZW
694 continue;
695
be768055
JJ
696 if ((b->flags & OPERATOR) && ! CPP_OPTION (pfile, operator_names))
697 continue;
698
93c80368
NB
699 if (b->flags & (OPERATOR | BUILTIN))
700 {
701 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
702 if (b->flags & OPERATOR)
703 {
704 hp->flags |= NODE_OPERATOR;
705 hp->value.operator = b->operator;
706 }
707 else
708 {
709 hp->type = NT_MACRO;
710 hp->flags |= NODE_BUILTIN;
711 hp->value.builtin = b->builtin;
712 }
713 }
714 else /* A standard macro of some kind. */
8c389f84 715 {
041c3194
ZW
716 const char *val;
717 char *str;
718
719 if (b->flags & VERS)
720 {
2c8f0515
ZW
721 /* Allocate enough space for 'name "value"\n\0'. */
722 str = alloca (b->len + strlen (version_string) + 5);
723 sprintf (str, "%s \"%s\"\n", b->name, version_string);
041c3194
ZW
724 }
725 else
726 {
727 if (b->flags & ULP)
771c4df3 728 val = CPP_OPTION (pfile, user_label_prefix);
041c3194
ZW
729 else
730 val = b->value;
731
2c8f0515
ZW
732 /* Allocate enough space for "name value\n\0". */
733 str = alloca (b->len + strlen (val) + 3);
734 sprintf(str, "%s %s\n", b->name, val);
041c3194 735 }
c154ba66 736
2c8f0515 737 _cpp_define_builtin (pfile, str);
8c389f84 738 }
6de1e2a9
ZW
739 }
740}
93c80368
NB
741#undef BUILTIN
742#undef OPERATOR
6feb7728 743#undef VERS
a9ae4483 744#undef ULP
93c80368 745#undef CPLUS
041c3194 746#undef builtin_array_end
6de1e2a9 747
c45da1ca
ZW
748/* And another subroutine. This one sets up the standard include path. */
749static void
7ca3d2b1 750init_standard_includes (pfile)
c45da1ca
ZW
751 cpp_reader *pfile;
752{
c45da1ca 753 char *path;
455d2586 754 const struct default_include *p;
ae79697b 755 const char *specd_prefix = CPP_OPTION (pfile, include_prefix);
c45da1ca
ZW
756
757 /* Several environment variables may add to the include search path.
758 CPATH specifies an additional list of directories to be searched
759 as if specified with -I, while C_INCLUDE_PATH, CPLUS_INCLUDE_PATH,
760 etc. specify an additional list of directories to be searched as
761 if specified with -isystem, for the language indicated. */
762
763 GET_ENV_PATH_LIST (path, "CPATH");
764 if (path != 0 && *path != 0)
e33f6253 765 path_include (pfile, path, BRACKET);
c45da1ca 766
ae79697b 767 switch ((CPP_OPTION (pfile, objc) << 1) + CPP_OPTION (pfile, cplusplus))
c45da1ca
ZW
768 {
769 case 0:
770 GET_ENV_PATH_LIST (path, "C_INCLUDE_PATH");
771 break;
772 case 1:
773 GET_ENV_PATH_LIST (path, "CPLUS_INCLUDE_PATH");
774 break;
775 case 2:
776 GET_ENV_PATH_LIST (path, "OBJC_INCLUDE_PATH");
777 break;
778 case 3:
779 GET_ENV_PATH_LIST (path, "OBJCPLUS_INCLUDE_PATH");
780 break;
781 }
782 if (path != 0 && *path != 0)
e33f6253 783 path_include (pfile, path, SYSTEM);
c45da1ca
ZW
784
785 /* Search "translated" versions of GNU directories.
786 These have /usr/local/lib/gcc... replaced by specd_prefix. */
60893f43 787 if (specd_prefix != 0 && cpp_GCC_INCLUDE_DIR_len)
c45da1ca 788 {
c45da1ca
ZW
789 /* Remove the `include' from /usr/local/lib/gcc.../include.
790 GCC_INCLUDE_DIR will always end in /include. */
60893f43
ZW
791 int default_len = cpp_GCC_INCLUDE_DIR_len;
792 char *default_prefix = (char *) alloca (default_len + 1);
c45da1ca
ZW
793 int specd_len = strlen (specd_prefix);
794
60893f43 795 memcpy (default_prefix, cpp_GCC_INCLUDE_DIR, default_len);
c45da1ca
ZW
796 default_prefix[default_len] = '\0';
797
60893f43 798 for (p = cpp_include_defaults; p->fname; p++)
c45da1ca
ZW
799 {
800 /* Some standard dirs are only for C++. */
801 if (!p->cplusplus
ae79697b
ZW
802 || (CPP_OPTION (pfile, cplusplus)
803 && !CPP_OPTION (pfile, no_standard_cplusplus_includes)))
c45da1ca
ZW
804 {
805 /* Does this dir start with the prefix? */
61d0346d 806 if (!memcmp (p->fname, default_prefix, default_len))
c45da1ca
ZW
807 {
808 /* Yes; change prefix and add to search list. */
809 int flen = strlen (p->fname);
810 int this_len = specd_len + flen - default_len;
811 char *str = (char *) xmalloc (this_len + 1);
812 memcpy (str, specd_prefix, specd_len);
813 memcpy (str + specd_len,
814 p->fname + default_len,
815 flen - default_len + 1);
816
e33f6253 817 append_include_chain (pfile, str, SYSTEM, p->cxx_aware);
c45da1ca
ZW
818 }
819 }
820 }
821 }
822
823 /* Search ordinary names for GNU include directories. */
60893f43 824 for (p = cpp_include_defaults; p->fname; p++)
c45da1ca
ZW
825 {
826 /* Some standard dirs are only for C++. */
827 if (!p->cplusplus
ae79697b
ZW
828 || (CPP_OPTION (pfile, cplusplus)
829 && !CPP_OPTION (pfile, no_standard_cplusplus_includes)))
c45da1ca 830 {
c45da1ca 831 char *str = xstrdup (update_path (p->fname, p->component));
e33f6253 832 append_include_chain (pfile, str, SYSTEM, p->cxx_aware);
c45da1ca
ZW
833 }
834 }
835}
836
4a58aab6
NB
837/* Handles -imacro and -include from the command line. */
838static void
839do_includes (pfile, p, scan)
840 cpp_reader *pfile;
841 struct pending_option *p;
842 int scan;
843{
844 while (p)
845 {
4a58aab6
NB
846 struct pending_option *q;
847
3fc786a4
NB
848 /* Later: maybe update this to use the #include "" search path
849 if cpp_read_file fails. */
614c7d37 850 if (_cpp_read_file (pfile, p->arg) && scan)
8dc4676d 851 cpp_scan_buffer_nooutput (pfile, 0);
4a58aab6
NB
852 q = p->next;
853 free (p);
854 p = q;
855 }
856}
857
858/* This is called after options have been processed. Check options
859 for consistency, and setup for processing input from the file named
860 FNAME. (Use standard input if FNAME == NULL.) Return 1 on success,
861 0 on failure. */
6de1e2a9
ZW
862
863int
93c80368 864cpp_start_read (pfile, fname)
6de1e2a9 865 cpp_reader *pfile;
7ceb3598 866 const char *fname;
6de1e2a9 867{
0b22d65c 868 struct pending_option *p, *q;
6de1e2a9 869
c45da1ca 870 /* Set up the include search path now. */
ae79697b 871 if (! CPP_OPTION (pfile, no_standard_includes))
7ca3d2b1 872 init_standard_includes (pfile);
c45da1ca 873
ae79697b 874 merge_include_chains (pfile);
c45da1ca
ZW
875
876 /* With -v, print the list of dirs to search. */
ae79697b 877 if (CPP_OPTION (pfile, verbose))
c45da1ca
ZW
878 {
879 struct file_name_list *l;
880 fprintf (stderr, _("#include \"...\" search starts here:\n"));
ae79697b 881 for (l = CPP_OPTION (pfile, quote_include); l; l = l->next)
c45da1ca 882 {
ae79697b 883 if (l == CPP_OPTION (pfile, bracket_include))
c45da1ca
ZW
884 fprintf (stderr, _("#include <...> search starts here:\n"));
885 fprintf (stderr, " %s\n", l->name);
886 }
887 fprintf (stderr, _("End of search list.\n"));
888 }
889
ae79697b
ZW
890 if (CPP_OPTION (pfile, in_fname) == NULL
891 || *CPP_OPTION (pfile, in_fname) == 0)
6de1e2a9 892 {
ae79697b
ZW
893 CPP_OPTION (pfile, in_fname) = fname;
894 if (CPP_OPTION (pfile, in_fname) == NULL)
895 CPP_OPTION (pfile, in_fname) = "";
6de1e2a9 896 }
ae79697b
ZW
897 if (CPP_OPTION (pfile, out_fname) == NULL)
898 CPP_OPTION (pfile, out_fname) = "";
6de1e2a9 899
96302433
NB
900 if (CPP_OPTION (pfile, print_deps))
901 {
902 /* Set the default target (if there is none already). */
903 deps_add_default_target (pfile->deps, CPP_OPTION (pfile, in_fname));
904
905 if (CPP_OPTION (pfile, in_fname))
906 deps_add_dep (pfile->deps, CPP_OPTION (pfile, in_fname));
907 }
908
909 /* Open the main input file. This must be done early, so we have a
910 buffer to stand on. */
614c7d37 911 if (!_cpp_read_file (pfile, fname))
c45da1ca
ZW
912 return 0;
913
c45da1ca 914 /* Install __LINE__, etc. */
7ca3d2b1 915 init_builtins (pfile);
6de1e2a9 916
6de1e2a9 917 /* Do -U's, -D's and -A's in the order they were seen. */
ae79697b 918 p = CPP_OPTION (pfile, pending)->directive_head;
0b22d65c 919 while (p)
6de1e2a9 920 {
b1b74f93 921 (*p->handler) (pfile, p->arg);
0b22d65c
ZW
922 q = p->next;
923 free (p);
924 p = q;
6de1e2a9 925 }
ae79697b 926 pfile->done_initializing = 1;
041c3194 927
6de1e2a9 928 /* The -imacros files can be scanned now, but the -include files
4a58aab6
NB
929 have to be pushed onto the buffer stack and processed later,
930 otherwise cppmain.c won't see the tokens. include_head was built
931 up as a stack, and popping this stack onto the buffer stack means
932 we preserve the order of the command line. */
933 do_includes (pfile, CPP_OPTION (pfile, pending)->imacros_head, 1);
934 do_includes (pfile, CPP_OPTION (pfile, pending)->include_head, 0);
6de1e2a9 935
ae79697b
ZW
936 free (CPP_OPTION (pfile, pending));
937 CPP_OPTION (pfile, pending) = NULL;
6de1e2a9
ZW
938
939 return 1;
940}
941
7ca3d2b1
NB
942static void
943output_deps (pfile)
944 cpp_reader *pfile;
945{
946 /* Stream on which to print the dependency information. */
947 FILE *deps_stream = 0;
948 const char *deps_mode = CPP_OPTION (pfile, print_deps_append) ? "a" : "w";
949
950 if (CPP_OPTION (pfile, deps_file) == 0)
951 deps_stream = stdout;
952 else
953 {
954 deps_stream = fopen (CPP_OPTION (pfile, deps_file), deps_mode);
955 if (deps_stream == 0)
956 {
957 cpp_notice_from_errno (pfile, CPP_OPTION (pfile, deps_file));
958 return;
959 }
960 }
961
962 deps_write (pfile->deps, deps_stream, 72);
963
964 if (CPP_OPTION (pfile, deps_phony_targets))
965 deps_phony_targets (pfile->deps, deps_stream);
966
967 /* Don't close stdout. */
968 if (CPP_OPTION (pfile, deps_file))
969 {
970 if (ferror (deps_stream) || fclose (deps_stream) != 0)
971 cpp_fatal (pfile, "I/O error on output");
972 }
973}
974
6de1e2a9
ZW
975/* This is called at the end of preprocessing. It pops the
976 last buffer and writes dependency output. It should also
977 clear macro definitions, such that you could call cpp_start_read
4a58aab6 978 with a new filename to restart processing. */
6de1e2a9 979void
93c80368 980cpp_finish (pfile)
6de1e2a9
ZW
981 cpp_reader *pfile;
982{
f2d5f0cc
ZW
983 if (CPP_BUFFER (pfile))
984 {
985 cpp_ice (pfile, "buffers still stacked in cpp_finish");
986 while (CPP_BUFFER (pfile))
987 cpp_pop_buffer (pfile);
988 }
c1212d2f 989
49e6c08e 990 /* Don't write the deps file if preprocessing has failed. */
ae79697b 991 if (CPP_OPTION (pfile, print_deps) && pfile->errors == 0)
7ca3d2b1 992 output_deps (pfile);
3caee4a8 993
d4506961
ZW
994 /* Report on headers that could use multiple include guards. */
995 if (CPP_OPTION (pfile, print_include_names))
c71f835b 996 _cpp_report_missing_guards (pfile);
6de1e2a9
ZW
997}
998
223dca6a 999static void
ae79697b
ZW
1000new_pending_directive (pend, text, handler)
1001 struct cpp_pending *pend;
223dca6a 1002 const char *text;
40eac643 1003 cl_directive_handler handler;
223dca6a
RH
1004{
1005 struct pending_option *o = (struct pending_option *)
1006 xmalloc (sizeof (struct pending_option));
1007
7ceb3598 1008 o->arg = text;
223dca6a 1009 o->next = NULL;
40eac643 1010 o->handler = handler;
ae79697b 1011 APPEND (pend, directive, o);
223dca6a
RH
1012}
1013
ae79697b
ZW
1014/* Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string");
1015 I.e. a const string initializer with parens around it. That is
1016 what N_("string") resolves to, so we make no_* be macros instead. */
1017#define no_arg N_("Argument missing after %s")
1018#define no_ass N_("Assertion missing after %s")
1019#define no_dir N_("Directory name missing after %s")
1020#define no_fil N_("File name missing after %s")
1021#define no_mac N_("Macro name missing after %s")
1022#define no_pth N_("Path name missing after %s")
6ab3e7dd 1023#define no_num N_("Number missing after %s")
03b9ab42 1024#define no_tgt N_("Target missing after %s")
ae79697b
ZW
1025
1026/* This is the list of all command line options, with the leading
1027 "-" removed. It must be sorted in ASCII collating order. */
1028#define COMMAND_LINE_OPTIONS \
1029 DEF_OPT("", 0, OPT_stdin_stdout) \
1030 DEF_OPT("$", 0, OPT_dollar) \
1031 DEF_OPT("+", 0, OPT_plus) \
1032 DEF_OPT("-help", 0, OPT__help) \
91606ce2 1033 DEF_OPT("-target-help", 0, OPT_target__help) \
ae79697b
ZW
1034 DEF_OPT("-version", 0, OPT__version) \
1035 DEF_OPT("A", no_ass, OPT_A) \
1036 DEF_OPT("C", 0, OPT_C) \
1037 DEF_OPT("D", no_mac, OPT_D) \
1038 DEF_OPT("H", 0, OPT_H) \
1039 DEF_OPT("I", no_dir, OPT_I) \
1040 DEF_OPT("M", 0, OPT_M) \
96302433 1041 DEF_OPT("MF", no_fil, OPT_MF) \
ae79697b
ZW
1042 DEF_OPT("MG", 0, OPT_MG) \
1043 DEF_OPT("MM", 0, OPT_MM) \
a5a4ce3c 1044 DEF_OPT("MP", 0, OPT_MP) \
f7114e17 1045 DEF_OPT("MQ", no_tgt, OPT_MQ) \
03b9ab42 1046 DEF_OPT("MT", no_tgt, OPT_MT) \
ae79697b
ZW
1047 DEF_OPT("P", 0, OPT_P) \
1048 DEF_OPT("U", no_mac, OPT_U) \
1049 DEF_OPT("W", no_arg, OPT_W) /* arg optional */ \
1050 DEF_OPT("d", no_arg, OPT_d) \
1051 DEF_OPT("fleading-underscore", 0, OPT_fleading_underscore) \
1052 DEF_OPT("fno-leading-underscore", 0, OPT_fno_leading_underscore) \
be768055 1053 DEF_OPT("fno-operator-names", 0, OPT_fno_operator_names) \
ae79697b
ZW
1054 DEF_OPT("fno-preprocessed", 0, OPT_fno_preprocessed) \
1055 DEF_OPT("fno-show-column", 0, OPT_fno_show_column) \
1056 DEF_OPT("fpreprocessed", 0, OPT_fpreprocessed) \
1057 DEF_OPT("fshow-column", 0, OPT_fshow_column) \
6ab3e7dd 1058 DEF_OPT("ftabstop=", no_num, OPT_ftabstop) \
ae79697b
ZW
1059 DEF_OPT("g", no_arg, OPT_g) /* arg optional */ \
1060 DEF_OPT("h", 0, OPT_h) \
1061 DEF_OPT("idirafter", no_dir, OPT_idirafter) \
1062 DEF_OPT("imacros", no_fil, OPT_imacros) \
1063 DEF_OPT("include", no_fil, OPT_include) \
1064 DEF_OPT("iprefix", no_pth, OPT_iprefix) \
1065 DEF_OPT("isystem", no_dir, OPT_isystem) \
1066 DEF_OPT("iwithprefix", no_dir, OPT_iwithprefix) \
1067 DEF_OPT("iwithprefixbefore", no_dir, OPT_iwithprefixbefore) \
1068 DEF_OPT("lang-asm", 0, OPT_lang_asm) \
1069 DEF_OPT("lang-c", 0, OPT_lang_c) \
1070 DEF_OPT("lang-c++", 0, OPT_lang_cplusplus) \
1071 DEF_OPT("lang-c89", 0, OPT_lang_c89) \
ae79697b
ZW
1072 DEF_OPT("lang-objc", 0, OPT_lang_objc) \
1073 DEF_OPT("lang-objc++", 0, OPT_lang_objcplusplus) \
1074 DEF_OPT("nostdinc", 0, OPT_nostdinc) \
1075 DEF_OPT("nostdinc++", 0, OPT_nostdincplusplus) \
1076 DEF_OPT("o", no_fil, OPT_o) \
1077 DEF_OPT("pedantic", 0, OPT_pedantic) \
1078 DEF_OPT("pedantic-errors", 0, OPT_pedantic_errors) \
1079 DEF_OPT("remap", 0, OPT_remap) \
dd07b884 1080 DEF_OPT("std=c++98", 0, OPT_std_cplusplus98) \
ae79697b
ZW
1081 DEF_OPT("std=c89", 0, OPT_std_c89) \
1082 DEF_OPT("std=c99", 0, OPT_std_c99) \
1083 DEF_OPT("std=c9x", 0, OPT_std_c9x) \
1084 DEF_OPT("std=gnu89", 0, OPT_std_gnu89) \
1085 DEF_OPT("std=gnu99", 0, OPT_std_gnu99) \
1086 DEF_OPT("std=gnu9x", 0, OPT_std_gnu9x) \
1087 DEF_OPT("std=iso9899:1990", 0, OPT_std_iso9899_1990) \
1088 DEF_OPT("std=iso9899:199409", 0, OPT_std_iso9899_199409) \
1089 DEF_OPT("std=iso9899:1999", 0, OPT_std_iso9899_1999) \
1090 DEF_OPT("std=iso9899:199x", 0, OPT_std_iso9899_199x) \
ae79697b
ZW
1091 DEF_OPT("trigraphs", 0, OPT_trigraphs) \
1092 DEF_OPT("v", 0, OPT_v) \
f4cdc368 1093 DEF_OPT("version", 0, OPT_version) \
ae79697b
ZW
1094 DEF_OPT("w", 0, OPT_w)
1095
1096#define DEF_OPT(text, msg, code) code,
e23c0ba3
ZW
1097enum opt_code
1098{
ae79697b 1099 COMMAND_LINE_OPTIONS
e23c0ba3
ZW
1100 N_OPTS
1101};
ae79697b 1102#undef DEF_OPT
e23c0ba3
ZW
1103
1104struct cl_option
1105{
1106 const char *opt_text;
1107 const char *msg;
1108 size_t opt_len;
1109 enum opt_code opt_code;
1110};
1111
ae79697b 1112#define DEF_OPT(text, msg, code) { text, msg, sizeof(text) - 1, code },
e23c0ba3
ZW
1113#ifdef HOST_EBCDIC
1114static struct cl_option cl_options[] =
1115#else
1116static const struct cl_option cl_options[] =
1117#endif
1118{
ae79697b 1119 COMMAND_LINE_OPTIONS
e23c0ba3
ZW
1120};
1121#undef DEF_OPT
ae79697b 1122#undef COMMAND_LINE_OPTIONS
e23c0ba3
ZW
1123
1124/* Perform a binary search to find which, if any, option the given
1125 command-line matches. Returns its index in the option array,
1126 negative on failure. Complications arise since some options can be
1127 suffixed with an argument, and multiple complete matches can occur,
1128 e.g. -iwithprefix and -iwithprefixbefore. Moreover, we want to
1129 accept options beginning with -g and -W that we do not recognise,
1130 but not to swallow any subsequent command line argument; these are
4a58aab6 1131 handled as special cases in cpp_handle_option. */
e23c0ba3
ZW
1132static int
1133parse_option (input)
1134 const char *input;
1135{
1136 unsigned int md, mn, mx;
1137 size_t opt_len;
1138 int comp;
1139
1140 mn = 0;
1141 mx = N_OPTS;
1142
1143 while (mx > mn)
1144 {
1145 md = (mn + mx) / 2;
ae79697b 1146
e23c0ba3 1147 opt_len = cl_options[md].opt_len;
61d0346d 1148 comp = memcmp (input, cl_options[md].opt_text, opt_len);
ae79697b 1149
e23c0ba3
ZW
1150 if (comp > 0)
1151 mn = md + 1;
1152 else if (comp < 0)
1153 mx = md;
1154 else
1155 {
1156 if (input[opt_len] == '\0')
1157 return md;
1158 /* We were passed more text. If the option takes an argument,
1159 we may match a later option or we may have been passed the
1160 argument. The longest possible option match succeeds.
1161 If the option takes no arguments we have not matched and
4a58aab6 1162 continue the search (e.g. input="stdc++" match was "stdc"). */
e23c0ba3
ZW
1163 mn = md + 1;
1164 if (cl_options[md].msg)
1165 {
1166 /* Scan forwards. If we get an exact match, return it.
1167 Otherwise, return the longest option-accepting match.
4a58aab6 1168 This loops no more than twice with current options. */
e23c0ba3
ZW
1169 mx = md;
1170 for (; mn < N_OPTS; mn++)
1171 {
1172 opt_len = cl_options[mn].opt_len;
61d0346d 1173 if (memcmp (input, cl_options[mn].opt_text, opt_len))
e23c0ba3
ZW
1174 break;
1175 if (input[opt_len] == '\0')
1176 return mn;
1177 if (cl_options[mn].msg)
1178 mx = mn;
1179 }
1180 return mx;
1181 }
1182 }
1183 }
1184
1185 return -1;
1186}
1187
6de1e2a9
ZW
1188/* Handle one command-line option in (argc, argv).
1189 Can be called multiple times, to handle multiple sets of options.
1190 Returns number of strings consumed. */
c8d8ed65 1191
2c0accc9
ZW
1192int
1193cpp_handle_option (pfile, argc, argv)
6de1e2a9
ZW
1194 cpp_reader *pfile;
1195 int argc;
1196 char **argv;
1197{
6de1e2a9 1198 int i = 0;
f8f769ea 1199 struct cpp_pending *pend = CPP_OPTION (pfile, pending);
6de1e2a9 1200
0b22d65c
ZW
1201 if (argv[i][0] != '-')
1202 {
ae79697b
ZW
1203 if (CPP_OPTION (pfile, out_fname) != NULL)
1204 cpp_fatal (pfile, "Too many arguments. Type %s --help for usage info",
1205 progname);
1206 else if (CPP_OPTION (pfile, in_fname) != NULL)
1207 CPP_OPTION (pfile, out_fname) = argv[i];
0b22d65c 1208 else
ae79697b 1209 CPP_OPTION (pfile, in_fname) = argv[i];
0b22d65c
ZW
1210 }
1211 else
e23c0ba3
ZW
1212 {
1213 enum opt_code opt_code;
1214 int opt_index;
7ceb3598 1215 const char *arg = 0;
e23c0ba3 1216
4a58aab6 1217 /* Skip over '-'. */
e23c0ba3
ZW
1218 opt_index = parse_option (&argv[i][1]);
1219 if (opt_index < 0)
1220 return i;
1221
1222 opt_code = cl_options[opt_index].opt_code;
1223 if (cl_options[opt_index].msg)
1224 {
1225 arg = &argv[i][cl_options[opt_index].opt_len + 1];
1226
1227 /* Yuk. Special case for -g and -W as they must not swallow
1228 up any following argument. If this becomes common, add
4a58aab6 1229 another field to the cl_options table. */
e23c0ba3
ZW
1230 if (arg[0] == '\0' && !(opt_code == OPT_g || opt_code == OPT_W))
1231 {
1232 arg = argv[++i];
1233 if (!arg)
1234 {
d88b89e5 1235 cpp_fatal (pfile, cl_options[opt_index].msg, argv[i - 1]);
e23c0ba3
ZW
1236 return argc;
1237 }
1238 }
1239 }
ae79697b 1240
e23c0ba3
ZW
1241 switch (opt_code)
1242 {
4a58aab6 1243 case N_OPTS: /* Shut GCC up. */
e23c0ba3
ZW
1244 break;
1245 case OPT_fleading_underscore:
771c4df3 1246 CPP_OPTION (pfile, user_label_prefix) = "_";
e23c0ba3
ZW
1247 break;
1248 case OPT_fno_leading_underscore:
771c4df3 1249 CPP_OPTION (pfile, user_label_prefix) = "";
e23c0ba3 1250 break;
be768055
JJ
1251 case OPT_fno_operator_names:
1252 CPP_OPTION (pfile, operator_names) = 0;
1253 break;
e23c0ba3 1254 case OPT_fpreprocessed:
ae79697b 1255 CPP_OPTION (pfile, preprocessed) = 1;
e23c0ba3
ZW
1256 break;
1257 case OPT_fno_preprocessed:
ae79697b
ZW
1258 CPP_OPTION (pfile, preprocessed) = 0;
1259 break;
1260 case OPT_fshow_column:
1261 CPP_OPTION (pfile, show_column) = 1;
1262 break;
1263 case OPT_fno_show_column:
1264 CPP_OPTION (pfile, show_column) = 0;
e23c0ba3 1265 break;
6ab3e7dd
NB
1266 case OPT_ftabstop:
1267 /* Silently ignore empty string, non-longs and silly values. */
1268 if (arg[0] != '\0')
1269 {
1270 char *endptr;
1271 long tabstop = strtol (arg, &endptr, 10);
1272 if (*endptr == '\0' && tabstop >= 1 && tabstop <= 100)
1273 CPP_OPTION (pfile, tabstop) = tabstop;
1274 }
1275 break;
e23c0ba3 1276 case OPT_w:
ae79697b 1277 CPP_OPTION (pfile, inhibit_warnings) = 1;
e23c0ba3 1278 break;
4a58aab6 1279 case OPT_g: /* Silently ignore anything but -g3. */
e23c0ba3 1280 if (!strcmp(&argv[i][2], "3"))
ae79697b 1281 CPP_OPTION (pfile, debug_output) = 1;
e23c0ba3
ZW
1282 break;
1283 case OPT_h:
1284 case OPT__help:
1285 print_help ();
f4cdc368 1286 pfile->help_only = 1;
e23c0ba3 1287 break;
91606ce2 1288 case OPT_target__help:
f4cdc368
ZW
1289 /* Print if any target specific options. cpplib has none, but
1290 make sure help_only gets set. */
1291 pfile->help_only = 1;
91606ce2 1292 break;
f4cdc368
ZW
1293
1294 /* --version inhibits compilation, -version doesn't. -v means
1295 verbose and -version. Historical reasons, don't ask. */
e23c0ba3 1296 case OPT__version:
f4cdc368
ZW
1297 pfile->help_only = 1;
1298 goto version;
1299 case OPT_v:
1300 CPP_OPTION (pfile, verbose) = 1;
1301 goto version;
1302
1303 case OPT_version:
1304 version:
1305 fprintf (stderr, _("GNU CPP version %s (cpplib)"), version_string);
1306#ifdef TARGET_VERSION
1307 TARGET_VERSION;
1308#endif
1309 fputc ('\n', stderr);
e23c0ba3 1310 break;
f4cdc368 1311
e23c0ba3 1312 case OPT_C:
ae79697b 1313 CPP_OPTION (pfile, discard_comments) = 0;
e23c0ba3
ZW
1314 break;
1315 case OPT_P:
ae79697b 1316 CPP_OPTION (pfile, no_line_commands) = 1;
e23c0ba3 1317 break;
4a58aab6 1318 case OPT_dollar: /* Don't include $ in identifiers. */
ae79697b 1319 CPP_OPTION (pfile, dollars_in_ident) = 0;
e23c0ba3
ZW
1320 break;
1321 case OPT_H:
ae79697b 1322 CPP_OPTION (pfile, print_include_names) = 1;
e23c0ba3
ZW
1323 break;
1324 case OPT_D:
f8f769ea 1325 new_pending_directive (pend, arg, cpp_define);
e23c0ba3
ZW
1326 break;
1327 case OPT_pedantic_errors:
ae79697b 1328 CPP_OPTION (pfile, pedantic_errors) = 1;
e23c0ba3
ZW
1329 /* fall through */
1330 case OPT_pedantic:
ae79697b 1331 CPP_OPTION (pfile, pedantic) = 1;
e23c0ba3 1332 break;
e23c0ba3 1333 case OPT_trigraphs:
ae79697b 1334 CPP_OPTION (pfile, trigraphs) = 1;
e23c0ba3
ZW
1335 break;
1336 case OPT_plus:
ae79697b
ZW
1337 CPP_OPTION (pfile, cplusplus) = 1;
1338 CPP_OPTION (pfile, cplusplus_comments) = 1;
e23c0ba3
ZW
1339 break;
1340 case OPT_remap:
ae79697b 1341 CPP_OPTION (pfile, remap) = 1;
e23c0ba3
ZW
1342 break;
1343 case OPT_iprefix:
ae79697b
ZW
1344 CPP_OPTION (pfile, include_prefix) = arg;
1345 CPP_OPTION (pfile, include_prefix_len) = strlen (arg);
e23c0ba3
ZW
1346 break;
1347 case OPT_lang_c:
dd07b884 1348 set_lang (pfile, CLK_GNUC89);
e23c0ba3 1349 break;
e23c0ba3 1350 case OPT_lang_cplusplus:
dd07b884 1351 set_lang (pfile, CLK_GNUCXX);
e23c0ba3 1352 break;
f8f769ea 1353 case OPT_lang_objc:
dd07b884 1354 set_lang (pfile, CLK_OBJC);
e23c0ba3 1355 break;
dd07b884
NB
1356 case OPT_lang_objcplusplus:
1357 set_lang (pfile, CLK_OBJCXX);
e23c0ba3 1358 break;
dd07b884
NB
1359 case OPT_lang_asm:
1360 set_lang (pfile, CLK_ASM);
e23c0ba3 1361 break;
dd07b884
NB
1362 case OPT_std_cplusplus98:
1363 set_lang (pfile, CLK_CXX98);
e23c0ba3
ZW
1364 break;
1365 case OPT_std_gnu89:
dd07b884 1366 set_lang (pfile, CLK_GNUC89);
e23c0ba3
ZW
1367 break;
1368 case OPT_std_gnu9x:
1369 case OPT_std_gnu99:
dd07b884 1370 set_lang (pfile, CLK_GNUC99);
e23c0ba3
ZW
1371 break;
1372 case OPT_std_iso9899_199409:
dd07b884
NB
1373 set_lang (pfile, CLK_STDC94);
1374 break;
e23c0ba3
ZW
1375 case OPT_std_iso9899_1990:
1376 case OPT_std_c89:
9b55f29a 1377 case OPT_lang_c89:
dd07b884 1378 set_lang (pfile, CLK_STDC89);
e23c0ba3
ZW
1379 break;
1380 case OPT_std_iso9899_199x:
1381 case OPT_std_iso9899_1999:
1382 case OPT_std_c9x:
1383 case OPT_std_c99:
dd07b884
NB
1384 set_lang (pfile, CLK_STDC99);
1385 break;
1386 case OPT_nostdinc:
1387 /* -nostdinc causes no default include directories.
1388 You must specify all include-file directories with -I. */
1389 CPP_OPTION (pfile, no_standard_includes) = 1;
1390 break;
1391 case OPT_nostdincplusplus:
1392 /* -nostdinc++ causes no default C++-specific include directories. */
1393 CPP_OPTION (pfile, no_standard_cplusplus_includes) = 1;
e23c0ba3
ZW
1394 break;
1395 case OPT_o:
ae79697b 1396 if (CPP_OPTION (pfile, out_fname) != NULL)
0b22d65c 1397 {
e23c0ba3
ZW
1398 cpp_fatal (pfile, "Output filename specified twice");
1399 return argc;
1400 }
ae79697b
ZW
1401 CPP_OPTION (pfile, out_fname) = arg;
1402 if (!strcmp (CPP_OPTION (pfile, out_fname), "-"))
1403 CPP_OPTION (pfile, out_fname) = "";
e23c0ba3 1404 break;
e23c0ba3 1405 case OPT_stdin_stdout:
4a58aab6 1406 /* JF handle '-' as file name meaning stdin or stdout. */
ae79697b
ZW
1407 if (CPP_OPTION (pfile, in_fname) == NULL)
1408 CPP_OPTION (pfile, in_fname) = "";
1409 else if (CPP_OPTION (pfile, out_fname) == NULL)
1410 CPP_OPTION (pfile, out_fname) = "";
e23c0ba3
ZW
1411 break;
1412 case OPT_d:
1413 /* Args to -d specify what parts of macros to dump.
1414 Silently ignore unrecognised options; they may
4a58aab6 1415 be aimed at the compiler proper. */
e23c0ba3
ZW
1416 {
1417 char c;
ae79697b 1418
e23c0ba3
ZW
1419 while ((c = *arg++) != '\0')
1420 switch (c)
1421 {
1422 case 'M':
ae79697b
ZW
1423 CPP_OPTION (pfile, dump_macros) = dump_only;
1424 CPP_OPTION (pfile, no_output) = 1;
0b22d65c
ZW
1425 break;
1426 case 'N':
ae79697b 1427 CPP_OPTION (pfile, dump_macros) = dump_names;
0b22d65c
ZW
1428 break;
1429 case 'D':
ae79697b 1430 CPP_OPTION (pfile, dump_macros) = dump_definitions;
0b22d65c
ZW
1431 break;
1432 case 'I':
ae79697b 1433 CPP_OPTION (pfile, dump_includes) = 1;
0b22d65c
ZW
1434 break;
1435 }
e23c0ba3
ZW
1436 }
1437 break;
96302433 1438
e23c0ba3 1439 case OPT_MG:
ae79697b 1440 CPP_OPTION (pfile, print_deps_missing_files) = 1;
e23c0ba3
ZW
1441 break;
1442 case OPT_M:
96302433
NB
1443 CPP_OPTION (pfile, print_deps) = 2;
1444 break;
e23c0ba3 1445 case OPT_MM:
96302433 1446 CPP_OPTION (pfile, print_deps) = 1;
e23c0ba3 1447 break;
96302433
NB
1448 case OPT_MF:
1449 CPP_OPTION (pfile, deps_file) = arg;
1450 break;
1451 case OPT_MP:
a5a4ce3c
NB
1452 CPP_OPTION (pfile, deps_phony_targets) = 1;
1453 break;
f7114e17 1454 case OPT_MQ:
03b9ab42 1455 case OPT_MT:
f7114e17
NB
1456 /* Add a target. -MQ quotes for Make. */
1457 deps_add_target (pfile->deps, arg, opt_code == OPT_MQ);
03b9ab42
NB
1458 break;
1459
e23c0ba3 1460 case OPT_A:
e1e97c4f 1461 if (arg[0] == '-')
0b22d65c 1462 {
e1e97c4f
NB
1463 /* -A with an argument beginning with '-' acts as
1464 #unassert on whatever immediately follows the '-'.
1465 If "-" is the whole argument, we eliminate all
1466 predefined macros and assertions, including those
1467 that were specified earlier on the command line.
1468 That way we can get rid of any that were passed
1469 automatically in from GCC. */
1470
1471 if (arg[1] == '\0')
0b22d65c 1472 {
e1e97c4f
NB
1473 struct pending_option *o1, *o2;
1474
e33f6253 1475 o1 = pend->directive_head;
e1e97c4f
NB
1476 while (o1)
1477 {
1478 o2 = o1->next;
1479 free (o1);
1480 o1 = o2;
1481 }
e33f6253
NB
1482 pend->directive_head = NULL;
1483 pend->directive_tail = NULL;
0b22d65c 1484 }
e1e97c4f 1485 else
e33f6253 1486 new_pending_directive (pend, arg + 1, cpp_unassert);
6de1e2a9 1487 }
e1e97c4f 1488 else
e33f6253 1489 new_pending_directive (pend, arg, cpp_assert);
e23c0ba3
ZW
1490 break;
1491 case OPT_U:
e33f6253 1492 new_pending_directive (pend, arg, cpp_undef);
e23c0ba3
ZW
1493 break;
1494 case OPT_I: /* Add directory to path for includes. */
1495 if (!strcmp (arg, "-"))
1496 {
1497 /* -I- means:
1498 Use the preceding -I directories for #include "..."
1499 but not #include <...>.
1500 Don't search the directory of the present file
1501 for #include "...". (Note that -I. -I- is not the same as
1502 the default setup; -I. uses the compiler's working dir.) */
ae79697b 1503 if (! CPP_OPTION (pfile, ignore_srcdir))
e23c0ba3 1504 {
ae79697b
ZW
1505 pend->quote_head = pend->brack_head;
1506 pend->quote_tail = pend->brack_tail;
1507 pend->brack_head = 0;
1508 pend->brack_tail = 0;
1509 CPP_OPTION (pfile, ignore_srcdir) = 1;
e23c0ba3
ZW
1510 }
1511 else
1512 {
1513 cpp_fatal (pfile, "-I- specified twice");
1514 return argc;
1515 }
1516 }
1517 else
e33f6253 1518 append_include_chain (pfile, xstrdup (arg), BRACKET, 0);
e23c0ba3
ZW
1519 break;
1520 case OPT_isystem:
1521 /* Add directory to beginning of system include path, as a system
4a58aab6 1522 include directory. */
e33f6253 1523 append_include_chain (pfile, xstrdup (arg), SYSTEM, 0);
e23c0ba3
ZW
1524 break;
1525 case OPT_include:
1526 {
1527 struct pending_option *o = (struct pending_option *)
1528 xmalloc (sizeof (struct pending_option));
1529 o->arg = arg;
1530
1531 /* This list has to be built in reverse order so that
1532 when cpp_start_read pushes all the -include files onto
1533 the buffer stack, they will be scanned in forward order. */
e33f6253
NB
1534 o->next = pend->include_head;
1535 pend->include_head = o;
e23c0ba3
ZW
1536 }
1537 break;
1538 case OPT_imacros:
1539 {
1540 struct pending_option *o = (struct pending_option *)
1541 xmalloc (sizeof (struct pending_option));
1542 o->arg = arg;
1543 o->next = NULL;
ae79697b 1544
e33f6253 1545 APPEND (pend, imacros, o);
e23c0ba3
ZW
1546 }
1547 break;
1548 case OPT_iwithprefix:
1549 /* Add directory to end of path for includes,
1550 with the default prefix at the front of its name. */
1551 /* fall through */
1552 case OPT_iwithprefixbefore:
1553 /* Add directory to main path for includes,
1554 with the default prefix at the front of its name. */
1555 {
1556 char *fname;
1557 int len;
ae79697b 1558
e23c0ba3 1559 len = strlen (arg);
ae79697b
ZW
1560
1561 if (CPP_OPTION (pfile, include_prefix) != 0)
e23c0ba3 1562 {
ae79697b
ZW
1563 size_t ipl = CPP_OPTION (pfile, include_prefix_len);
1564 fname = xmalloc (ipl + len + 1);
1565 memcpy (fname, CPP_OPTION (pfile, include_prefix), ipl);
1566 memcpy (fname + ipl, arg, len + 1);
e23c0ba3 1567 }
60893f43 1568 else if (cpp_GCC_INCLUDE_DIR_len)
e23c0ba3 1569 {
60893f43
ZW
1570 fname = xmalloc (cpp_GCC_INCLUDE_DIR_len + len + 1);
1571 memcpy (fname, cpp_GCC_INCLUDE_DIR, cpp_GCC_INCLUDE_DIR_len);
1572 memcpy (fname + cpp_GCC_INCLUDE_DIR_len, arg, len + 1);
e23c0ba3 1573 }
60893f43
ZW
1574 else
1575 fname = xstrdup (arg);
ae79697b 1576
e33f6253 1577 append_include_chain (pfile, fname,
e23c0ba3
ZW
1578 opt_code == OPT_iwithprefix ? SYSTEM: BRACKET, 0);
1579 }
1580 break;
1581 case OPT_idirafter:
1582 /* Add directory to end of path for includes. */
e33f6253 1583 append_include_chain (pfile, xstrdup (arg), AFTER, 0);
e23c0ba3
ZW
1584 break;
1585 case OPT_W:
4a58aab6 1586 /* Silently ignore unrecognised options. */
e23c0ba3 1587 if (!strcmp (argv[i], "-Wall"))
0b22d65c 1588 {
ae79697b
ZW
1589 CPP_OPTION (pfile, warn_trigraphs) = 1;
1590 CPP_OPTION (pfile, warn_comments) = 1;
0b22d65c 1591 }
e23c0ba3 1592 else if (!strcmp (argv[i], "-Wtraditional"))
07aa0b04 1593 CPP_OPTION (pfile, warn_traditional) = 1;
e23c0ba3 1594 else if (!strcmp (argv[i], "-Wtrigraphs"))
ae79697b 1595 CPP_OPTION (pfile, warn_trigraphs) = 1;
e23c0ba3 1596 else if (!strcmp (argv[i], "-Wcomment"))
ae79697b 1597 CPP_OPTION (pfile, warn_comments) = 1;
e23c0ba3 1598 else if (!strcmp (argv[i], "-Wcomments"))
ae79697b 1599 CPP_OPTION (pfile, warn_comments) = 1;
e23c0ba3 1600 else if (!strcmp (argv[i], "-Wundef"))
ae79697b 1601 CPP_OPTION (pfile, warn_undef) = 1;
e23c0ba3 1602 else if (!strcmp (argv[i], "-Wimport"))
ae79697b 1603 CPP_OPTION (pfile, warn_import) = 1;
e23c0ba3 1604 else if (!strcmp (argv[i], "-Werror"))
ae79697b 1605 CPP_OPTION (pfile, warnings_are_errors) = 1;
317639a8
BC
1606 else if (!strcmp (argv[i], "-Wsystem-headers"))
1607 CPP_OPTION (pfile, warn_system_headers) = 1;
e23c0ba3 1608 else if (!strcmp (argv[i], "-Wno-traditional"))
07aa0b04 1609 CPP_OPTION (pfile, warn_traditional) = 0;
e23c0ba3 1610 else if (!strcmp (argv[i], "-Wno-trigraphs"))
ae79697b 1611 CPP_OPTION (pfile, warn_trigraphs) = 0;
e23c0ba3 1612 else if (!strcmp (argv[i], "-Wno-comment"))
ae79697b 1613 CPP_OPTION (pfile, warn_comments) = 0;
e23c0ba3 1614 else if (!strcmp (argv[i], "-Wno-comments"))
ae79697b 1615 CPP_OPTION (pfile, warn_comments) = 0;
e23c0ba3 1616 else if (!strcmp (argv[i], "-Wno-undef"))
ae79697b 1617 CPP_OPTION (pfile, warn_undef) = 0;
e23c0ba3 1618 else if (!strcmp (argv[i], "-Wno-import"))
ae79697b 1619 CPP_OPTION (pfile, warn_import) = 0;
e23c0ba3 1620 else if (!strcmp (argv[i], "-Wno-error"))
ae79697b 1621 CPP_OPTION (pfile, warnings_are_errors) = 0;
317639a8
BC
1622 else if (!strcmp (argv[i], "-Wno-system-headers"))
1623 CPP_OPTION (pfile, warn_system_headers) = 0;
e23c0ba3
ZW
1624 break;
1625 }
1626 }
6de1e2a9 1627 return i + 1;
e23c0ba3 1628}
0b22d65c 1629
6de1e2a9
ZW
1630/* Handle command-line options in (argc, argv).
1631 Can be called multiple times, to handle multiple sets of options.
1632 Returns if an unrecognized option is seen.
1633 Returns number of strings consumed. */
6de1e2a9
ZW
1634int
1635cpp_handle_options (pfile, argc, argv)
1636 cpp_reader *pfile;
1637 int argc;
1638 char **argv;
1639{
1640 int i;
1641 int strings_processed;
e23c0ba3 1642
6de1e2a9
ZW
1643 for (i = 0; i < argc; i += strings_processed)
1644 {
2c0accc9 1645 strings_processed = cpp_handle_option (pfile, argc - i, argv + i);
6de1e2a9
ZW
1646 if (strings_processed == 0)
1647 break;
1648 }
96302433 1649
6de1e2a9
ZW
1650 return i;
1651}
1652
96302433
NB
1653/* Extra processing when all options are parsed, after all calls to
1654 cpp_handle_option[s]. Consistency checks etc. */
1655void
1656cpp_post_options (pfile)
1657 cpp_reader *pfile;
1658{
1659 /* -Wtraditional is not useful in C++ mode. */
1660 if (CPP_OPTION (pfile, cplusplus))
1661 CPP_OPTION (pfile, warn_traditional) = 0;
1662
1663 /* Set this if it hasn't been set already. */
1664 if (CPP_OPTION (pfile, user_label_prefix) == NULL)
1665 CPP_OPTION (pfile, user_label_prefix) = USER_LABEL_PREFIX;
1666
1667 /* We need to do this after option processing and before
1668 cpp_start_read, as cppmain.c relies on the options->no_output to
1669 set its callbacks correctly before calling cpp_start_read. */
1670 init_dependency_output (pfile);
1671
1672 /* -MG doesn't select the form of output and must be specified with
1673 one of -M or -MM. -MG doesn't make sense unless preprocessed
1674 output (and compilation) is inhibited. */
1675 if (CPP_OPTION (pfile, print_deps_missing_files)
1676 && CPP_OPTION (pfile, print_deps) == 0)
1677 cpp_fatal (pfile, "-MG must be specified with one of -M or -MM");
1678}
1679
7ca3d2b1
NB
1680/* Set up dependency-file output. */
1681static void
1682init_dependency_output (pfile)
1683 cpp_reader *pfile;
1684{
1685 char *spec, *s, *output_file;
1686
1687 /* Either of two environment variables can specify output of deps.
1688 Its value is either "OUTPUT_FILE" or "OUTPUT_FILE DEPS_TARGET",
1689 where OUTPUT_FILE is the file to write deps info to
1690 and DEPS_TARGET is the target to mention in the deps. */
1691
1692 if (CPP_OPTION (pfile, print_deps) == 0)
1693 {
1694 spec = getenv ("DEPENDENCIES_OUTPUT");
1695 if (spec)
1696 CPP_OPTION (pfile, print_deps) = 1;
1697 else
1698 {
1699 spec = getenv ("SUNPRO_DEPENDENCIES");
1700 if (spec)
1701 CPP_OPTION (pfile, print_deps) = 2;
1702 else
1703 return;
1704 }
1705
1706 /* Find the space before the DEPS_TARGET, if there is one. */
1707 s = strchr (spec, ' ');
1708 if (s)
1709 {
1710 /* Let the caller perform MAKE quoting. */
1711 deps_add_target (pfile->deps, s + 1, 0);
1712 output_file = (char *) xmalloc (s - spec + 1);
1713 memcpy (output_file, spec, s - spec);
1714 output_file[s - spec] = 0;
1715 }
1716 else
1717 output_file = spec;
1718
96302433
NB
1719 /* Command line overrides environment variables. */
1720 if (CPP_OPTION (pfile, deps_file) == 0)
1721 CPP_OPTION (pfile, deps_file) = output_file;
7ca3d2b1
NB
1722 CPP_OPTION (pfile, print_deps_append) = 1;
1723 }
1724
96302433
NB
1725 /* If dependencies go to standard output, we need to suppress
1726 output. The user may be requesting other stuff to stdout, with
1727 -dM, -v etc. We let them shoot themselves in the foot. */
1728 if (CPP_OPTION (pfile, deps_file) == 0)
1729 CPP_OPTION (pfile, no_output) = 1;
7ca3d2b1
NB
1730}
1731
6de1e2a9
ZW
1732static void
1733print_help ()
1734{
c1212d2f 1735 fprintf (stderr, _("Usage: %s [switches] input output\n"), progname);
aaaf7848
DT
1736 /* To keep the lines from getting too long for some compilers, limit
1737 to about 500 characters (6 lines) per chunk. */
6de1e2a9
ZW
1738 fputs (_("\
1739Switches:\n\
1740 -include <file> Include the contents of <file> before other files\n\
1741 -imacros <file> Accept definition of macros in <file>\n\
1742 -iprefix <path> Specify <path> as a prefix for next two options\n\
1743 -iwithprefix <dir> Add <dir> to the end of the system include path\n\
1744 -iwithprefixbefore <dir> Add <dir> to the end of the main include path\n\
1745 -isystem <dir> Add <dir> to the start of the system include path\n\
aaaf7848
DT
1746"), stdout);
1747 fputs (_("\
6de1e2a9
ZW
1748 -idirafter <dir> Add <dir> to the end of the system include path\n\
1749 -I <dir> Add <dir> to the end of the main include path\n\
e23c0ba3 1750 -I- Fine-grained include path control; see info docs\n\
6de1e2a9
ZW
1751 -nostdinc Do not search system include directories\n\
1752 (dirs specified with -isystem will still be used)\n\
1753 -nostdinc++ Do not search system include directories for C++\n\
1754 -o <file> Put output into <file>\n\
aaaf7848
DT
1755"), stdout);
1756 fputs (_("\
041c3194 1757 -pedantic Issue all warnings demanded by strict ISO C\n\
e23c0ba3 1758 -pedantic-errors Issue -pedantic warnings as errors instead\n\
041c3194 1759 -trigraphs Support ISO C trigraphs\n\
6de1e2a9
ZW
1760 -lang-c Assume that the input sources are in C\n\
1761 -lang-c89 Assume that the input sources are in C89\n\
aaaf7848
DT
1762"), stdout);
1763 fputs (_("\
f9a0e96c 1764 -lang-c++ Assume that the input sources are in C++\n\
6de1e2a9
ZW
1765 -lang-objc Assume that the input sources are in ObjectiveC\n\
1766 -lang-objc++ Assume that the input sources are in ObjectiveC++\n\
1767 -lang-asm Assume that the input sources are in assembler\n\
aaaf7848
DT
1768"), stdout);
1769 fputs (_("\
6de1e2a9 1770 -std=<std name> Specify the conformance standard; one of:\n\
916269ab
UD
1771 gnu89, gnu99, c89, c99, iso9899:1990,\n\
1772 iso9899:199409, iso9899:1999\n\
6de1e2a9
ZW
1773 -+ Allow parsing of C++ style features\n\
1774 -w Inhibit warning messages\n\
1775 -Wtrigraphs Warn if trigraphs are encountered\n\
1776 -Wno-trigraphs Do not warn about trigraphs\n\
1777 -Wcomment{s} Warn if one comment starts inside another\n\
aaaf7848
DT
1778"), stdout);
1779 fputs (_("\
6de1e2a9 1780 -Wno-comment{s} Do not warn about comments\n\
f9a0e96c
ZW
1781 -Wtraditional Warn about features not present in traditional C\n\
1782 -Wno-traditional Do not warn about traditional C\n\
6de1e2a9
ZW
1783 -Wundef Warn if an undefined macro is used by #if\n\
1784 -Wno-undef Do not warn about testing undefined macros\n\
1785 -Wimport Warn about the use of the #import directive\n\
aaaf7848
DT
1786"), stdout);
1787 fputs (_("\
6de1e2a9
ZW
1788 -Wno-import Do not warn about the use of #import\n\
1789 -Werror Treat all warnings as errors\n\
1790 -Wno-error Do not treat warnings as errors\n\
317639a8
BC
1791 -Wsystem-headers Do not suppress warnings from system headers\n\
1792 -Wno-system-headers Suppress warnings from system headers\n\
6de1e2a9 1793 -Wall Enable all preprocessor warnings\n\
aaaf7848
DT
1794"), stdout);
1795 fputs (_("\
317639a8
BC
1796 -M Generate make dependencies\n\
1797 -MM As -M, but ignore system header files\n\
96302433 1798 -MF <file> Write dependency output to the given file\n\
6de1e2a9 1799 -MG Treat missing header file as generated files\n\
96302433
NB
1800"), stdout);
1801 fputs (_("\
1802 -MP Generate phony targets for all headers\n\
1803 -MQ <target> Add a MAKE-quoted target\n\
1804 -MT <target> Add an unquoted target\n\
e23c0ba3 1805 -g3 Include #define and #undef directives in the output\n\
aaaf7848
DT
1806"), stdout);
1807 fputs (_("\
317639a8
BC
1808 -D<macro> Define a <macro> with string '1' as its value\n\
1809 -D<macro>=<val> Define a <macro> with <val> as its value\n\
6de1e2a9 1810 -A<question> (<answer>) Assert the <answer> to <question>\n\
e1e97c4f 1811 -A-<question> (<answer>) Disable the <answer> to <question>\n\
6de1e2a9 1812 -U<macro> Undefine <macro> \n\
6de1e2a9 1813 -v Display the version number\n\
aaaf7848
DT
1814"), stdout);
1815 fputs (_("\
317639a8
BC
1816 -H Print the name of header files as they are used\n\
1817 -C Do not discard comments\n\
6de1e2a9
ZW
1818 -dM Display a list of macro definitions active at end\n\
1819 -dD Preserve macro definitions in output\n\
1820 -dN As -dD except that only the names are preserved\n\
1821 -dI Include #include directives in the output\n\
317639a8
BC
1822"), stdout);
1823 fputs (_("\
6ab3e7dd 1824 -ftabstop=<number> Distance between tab stops for column reporting\n\
6de1e2a9
ZW
1825 -P Do not generate #line directives\n\
1826 -$ Do not allow '$' in identifiers\n\
1827 -remap Remap file names when including files.\n\
e23c0ba3 1828 --version Display version information\n\
6de1e2a9
ZW
1829 -h or --help Display this information\n\
1830"), stdout);
1831}