OSDN Git Service

* cppfiles.c (stack_include_file): Don't handle -H here.
[pf3gnuchains/gcc-fork.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 }