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