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