OSDN Git Service

11c86aa337791ca79ddc6d50d2faae105de4f792
[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.  Start at logical line 1, so we can use
506      a line number of zero for special states.  */
507   init_line_maps (&pfile->line_maps);
508   pfile->line = 1;
509
510   /* Initialize lexer state.  */
511   pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
512
513   /* Set up static tokens.  */
514   pfile->date.type = CPP_EOF;
515   pfile->avoid_paste.type = CPP_PADDING;
516   pfile->avoid_paste.val.source = NULL;
517   pfile->eof.type = CPP_EOF;
518   pfile->eof.flags = 0;
519
520   /* Create a token buffer for the lexer.  */
521   _cpp_init_tokenrun (&pfile->base_run, 250);
522   pfile->cur_run = &pfile->base_run;
523   pfile->cur_token = pfile->base_run.base;
524
525   /* Initialise the base context.  */
526   pfile->context = &pfile->base_context;
527   pfile->base_context.macro = 0;
528   pfile->base_context.prev = pfile->base_context.next = 0;
529
530   /* Identifier pool initially 8K.  Unaligned, permanent pool.  */
531   _cpp_init_pool (&pfile->ident_pool, 8 * 1024, 1, 0);
532
533   /* Argument pool initially 8K.  Aligned, temporary pool.  */
534   _cpp_init_pool (&pfile->argument_pool, 8 * 1024, 0, 1);
535
536   /* Macro pool initially 8K.  Aligned, permanent pool.  */
537   _cpp_init_pool (&pfile->macro_pool, 8 * 1024, 0, 0);
538
539   /* Initialise the buffer obstack.  */
540   gcc_obstack_init (&pfile->buffer_ob);
541
542   /* Initialise the hashtable.  */
543   _cpp_init_hashtable (pfile, table);
544
545   _cpp_init_directives (pfile);
546   _cpp_init_includes (pfile);
547   _cpp_init_internal_pragmas (pfile);
548
549   /* Initialize the special nodes.  */
550   s = &pfile->spec_nodes;
551   s->n_L                = cpp_lookup (pfile, DSC("L"));
552   s->n_defined          = cpp_lookup (pfile, DSC("defined"));
553   s->n_true             = cpp_lookup (pfile, DSC("true"));
554   s->n_false            = cpp_lookup (pfile, DSC("false"));
555   s->n__Pragma          = cpp_lookup (pfile, DSC("_Pragma"));
556   s->n__STRICT_ANSI__   = cpp_lookup (pfile, DSC("__STRICT_ANSI__"));
557   s->n__CHAR_UNSIGNED__ = cpp_lookup (pfile, DSC("__CHAR_UNSIGNED__"));
558   s->n__VA_ARGS__       = cpp_lookup (pfile, DSC("__VA_ARGS__"));
559   s->n__VA_ARGS__->flags |= NODE_DIAGNOSTIC;
560
561   return pfile;
562 }
563
564 /* Free resources used by PFILE.  Accessing PFILE after this function
565    returns leads to undefined behaviour.  */
566 int
567 cpp_destroy (pfile)
568      cpp_reader *pfile;
569 {
570   int result;
571   struct search_path *dir, *dirn;
572   cpp_context *context, *contextn;
573   tokenrun *run, *runn;
574
575   while (CPP_BUFFER (pfile) != NULL)
576     _cpp_pop_buffer (pfile);
577
578   if (pfile->macro_buffer)
579     {
580       free ((PTR) pfile->macro_buffer);
581       pfile->macro_buffer = NULL;
582       pfile->macro_buffer_len = 0;
583     }
584
585   deps_free (pfile->deps);
586   obstack_free (&pfile->buffer_ob, 0);
587
588   _cpp_destroy_hashtable (pfile);
589   _cpp_cleanup_includes (pfile);
590
591   _cpp_free_pool (&pfile->ident_pool);
592   _cpp_free_pool (&pfile->macro_pool);
593   _cpp_free_pool (&pfile->argument_pool);
594
595   for (run = &pfile->base_run; run; run = runn)
596     {
597       runn = run->next;
598       free (run->base);
599       if (run != &pfile->base_run)
600         free (run);
601     }
602
603   for (dir = CPP_OPTION (pfile, quote_include); dir; dir = dirn)
604     {
605       dirn = dir->next;
606       free ((PTR) dir->name);
607       free (dir);
608     }
609
610   for (context = pfile->base_context.next; context; context = contextn)
611     {
612       contextn = context->next;
613       free (context);
614     }
615
616   free_line_maps (&pfile->line_maps);
617
618   result = pfile->errors;
619   free (pfile);
620
621   return result;
622 }
623
624
625 /* This structure defines one built-in identifier.  A node will be
626    entered in the hash table under the name NAME, with value VALUE (if
627    any).  If flags has OPERATOR, the node's operator field is used; if
628    flags has BUILTIN the node's builtin field is used.  Macros that are
629    known at build time should not be flagged BUILTIN, as then they do
630    not appear in macro dumps with e.g. -dM or -dD.
631
632    Two values are not compile time constants, so we tag
633    them in the FLAGS field instead:
634    VERS         value is the global version_string, quoted
635    ULP          value is the global user_label_prefix
636
637    Also, macros with CPLUS set in the flags field are entered only for C++.  */
638
639 struct builtin
640 {
641   const U_CHAR *name;
642   const char *value;
643   unsigned char builtin;
644   unsigned char operator;
645   unsigned short flags;
646   unsigned short len;
647 };
648 #define VERS            0x01
649 #define ULP             0x02
650 #define CPLUS           0x04
651 #define BUILTIN         0x08
652 #define OPERATOR        0x10
653
654 #define B(n, t)       { U n, 0, t, 0, BUILTIN, sizeof n - 1 }
655 #define C(n, v)       { U n, v, 0, 0, 0, sizeof n - 1 }
656 #define X(n, f)       { U n, 0, 0, 0, f, sizeof n - 1 }
657 #define O(n, c, f)    { U n, 0, 0, c, OPERATOR | f, sizeof n - 1 }
658 static const struct builtin builtin_array[] =
659 {
660   B("__TIME__",          BT_TIME),
661   B("__DATE__",          BT_DATE),
662   B("__FILE__",          BT_FILE),
663   B("__BASE_FILE__",     BT_BASE_FILE),
664   B("__LINE__",          BT_SPECLINE),
665   B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL),
666
667   X("__VERSION__",              VERS),
668   X("__USER_LABEL_PREFIX__",    ULP),
669   C("__REGISTER_PREFIX__",      REGISTER_PREFIX),
670   C("__HAVE_BUILTIN_SETJMP__",  "1"),
671 #ifndef NO_BUILTIN_SIZE_TYPE
672   C("__SIZE_TYPE__",            SIZE_TYPE),
673 #endif
674 #ifndef NO_BUILTIN_PTRDIFF_TYPE
675   C("__PTRDIFF_TYPE__",         PTRDIFF_TYPE),
676 #endif
677 #ifndef NO_BUILTIN_WCHAR_TYPE
678   C("__WCHAR_TYPE__",           WCHAR_TYPE),
679 #endif
680 #ifndef NO_BUILTIN_WINT_TYPE
681   C("__WINT_TYPE__",            WINT_TYPE),
682 #endif
683 #ifdef STDC_0_IN_SYSTEM_HEADERS
684   B("__STDC__",          BT_STDC),
685 #else
686   C("__STDC__",          "1"),
687 #endif
688
689   /* Named operators known to the preprocessor.  These cannot be #defined
690      and always have their stated meaning.  They are treated like normal
691      identifiers except for the type code and the meaning.  Most of them
692      are only for C++ (but see iso646.h).  */
693   O("and",      CPP_AND_AND, CPLUS),
694   O("and_eq",   CPP_AND_EQ,  CPLUS),
695   O("bitand",   CPP_AND,     CPLUS),
696   O("bitor",    CPP_OR,      CPLUS),
697   O("compl",    CPP_COMPL,   CPLUS),
698   O("not",      CPP_NOT,     CPLUS),
699   O("not_eq",   CPP_NOT_EQ,  CPLUS),
700   O("or",       CPP_OR_OR,   CPLUS),
701   O("or_eq",    CPP_OR_EQ,   CPLUS),
702   O("xor",      CPP_XOR,     CPLUS),
703   O("xor_eq",   CPP_XOR_EQ,  CPLUS)
704 };
705 #undef B
706 #undef C
707 #undef X
708 #undef O
709 #define builtin_array_end \
710  builtin_array + sizeof(builtin_array)/sizeof(struct builtin)
711
712 /* Subroutine of cpp_start_read; reads the builtins table above and
713    enters the macros into the hash table.  */
714 static void
715 init_builtins (pfile)
716      cpp_reader *pfile;
717 {
718   const struct builtin *b;
719
720   for(b = builtin_array; b < builtin_array_end; b++)
721     {
722       if ((b->flags & CPLUS) && ! CPP_OPTION (pfile, cplusplus))
723         continue;
724
725       if ((b->flags & OPERATOR) && ! CPP_OPTION (pfile, operator_names))
726         continue;
727
728       if (b->flags & (OPERATOR | BUILTIN))
729         {
730           cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
731           if (b->flags & OPERATOR)
732             {
733               hp->flags |= NODE_OPERATOR;
734               hp->value.operator = b->operator;
735             }
736           else
737             {
738               hp->type = NT_MACRO;
739               hp->flags |= NODE_BUILTIN | NODE_WARN;
740               hp->value.builtin = b->builtin;
741             }
742         }
743       else                      /* A standard macro of some kind.  */
744         {
745           const char *val;
746           char *str;
747
748           if (b->flags & VERS)
749             {
750               /* Allocate enough space for 'name "value"\n\0'.  */
751               str = alloca (b->len + strlen (version_string) + 5);
752               sprintf (str, "%s \"%s\"\n", b->name, version_string);
753             }
754           else
755             {
756               if (b->flags & ULP)
757                 val = CPP_OPTION (pfile, user_label_prefix);
758               else
759                 val = b->value;
760
761               /* Allocate enough space for "name value\n\0".  */
762               str = alloca (b->len + strlen (val) + 3);
763               sprintf(str, "%s %s\n", b->name, val);
764             }
765
766           _cpp_define_builtin (pfile, str);
767         }
768     }
769
770   if (CPP_OPTION (pfile, cplusplus))
771     {
772       _cpp_define_builtin (pfile, "__cplusplus 1");
773       if (SUPPORTS_ONE_ONLY)
774         _cpp_define_builtin (pfile, "__GXX_WEAK__ 1");
775       else
776         _cpp_define_builtin (pfile, "__GXX_WEAK__ 0");
777     }
778   if (CPP_OPTION (pfile, objc))
779     _cpp_define_builtin (pfile, "__OBJC__ 1");
780
781   if (CPP_OPTION (pfile, lang) == CLK_STDC94)
782     _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
783   else if (CPP_OPTION (pfile, c99))
784     _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
785
786   if (CPP_OPTION (pfile, lang) == CLK_STDC89
787       || CPP_OPTION (pfile, lang) == CLK_STDC94
788       || CPP_OPTION (pfile, lang) == CLK_STDC99)
789     _cpp_define_builtin (pfile, "__STRICT_ANSI__ 1");
790   else if (CPP_OPTION (pfile, lang) == CLK_ASM)
791     _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
792 }
793 #undef BUILTIN
794 #undef OPERATOR
795 #undef VERS
796 #undef ULP
797 #undef CPLUS
798 #undef builtin_array_end
799
800 /* And another subroutine.  This one sets up the standard include path.  */
801 static void
802 init_standard_includes (pfile)
803      cpp_reader *pfile;
804 {
805   char *path;
806   const struct default_include *p;
807   const char *specd_prefix = CPP_OPTION (pfile, include_prefix);
808
809   /* Several environment variables may add to the include search path.
810      CPATH specifies an additional list of directories to be searched
811      as if specified with -I, while C_INCLUDE_PATH, CPLUS_INCLUDE_PATH,
812      etc. specify an additional list of directories to be searched as
813      if specified with -isystem, for the language indicated.  */
814
815   GET_ENV_PATH_LIST (path, "CPATH");
816   if (path != 0 && *path != 0)
817     path_include (pfile, path, BRACKET);
818
819   switch ((CPP_OPTION (pfile, objc) << 1) + CPP_OPTION (pfile, cplusplus))
820     {
821     case 0:
822       GET_ENV_PATH_LIST (path, "C_INCLUDE_PATH");
823       break;
824     case 1:
825       GET_ENV_PATH_LIST (path, "CPLUS_INCLUDE_PATH");
826       break;
827     case 2:
828       GET_ENV_PATH_LIST (path, "OBJC_INCLUDE_PATH");
829       break;
830     case 3:
831       GET_ENV_PATH_LIST (path, "OBJCPLUS_INCLUDE_PATH");
832       break;
833     }
834   if (path != 0 && *path != 0)
835     path_include (pfile, path, SYSTEM);
836
837   /* Search "translated" versions of GNU directories.
838      These have /usr/local/lib/gcc... replaced by specd_prefix.  */
839   if (specd_prefix != 0 && cpp_GCC_INCLUDE_DIR_len)
840     {
841       /* Remove the `include' from /usr/local/lib/gcc.../include.
842          GCC_INCLUDE_DIR will always end in /include.  */
843       int default_len = cpp_GCC_INCLUDE_DIR_len;
844       char *default_prefix = (char *) alloca (default_len + 1);
845       int specd_len = strlen (specd_prefix);
846
847       memcpy (default_prefix, cpp_GCC_INCLUDE_DIR, default_len);
848       default_prefix[default_len] = '\0';
849
850       for (p = cpp_include_defaults; p->fname; p++)
851         {
852           /* Some standard dirs are only for C++.  */
853           if (!p->cplusplus
854               || (CPP_OPTION (pfile, cplusplus)
855                   && !CPP_OPTION (pfile, no_standard_cplusplus_includes)))
856             {
857               /* Does this dir start with the prefix?  */
858               if (!memcmp (p->fname, default_prefix, default_len))
859                 {
860                   /* Yes; change prefix and add to search list.  */
861                   int flen = strlen (p->fname);
862                   int this_len = specd_len + flen - default_len;
863                   char *str = (char *) xmalloc (this_len + 1);
864                   memcpy (str, specd_prefix, specd_len);
865                   memcpy (str + specd_len,
866                           p->fname + default_len,
867                           flen - default_len + 1);
868
869                   append_include_chain (pfile, str, SYSTEM, p->cxx_aware);
870                 }
871             }
872         }
873     }
874
875   /* Search ordinary names for GNU include directories.  */
876   for (p = cpp_include_defaults; p->fname; p++)
877     {
878       /* Some standard dirs are only for C++.  */
879       if (!p->cplusplus
880           || (CPP_OPTION (pfile, cplusplus)
881               && !CPP_OPTION (pfile, no_standard_cplusplus_includes)))
882         {
883           char *str = update_path (p->fname, p->component);
884           append_include_chain (pfile, str, SYSTEM, p->cxx_aware);
885         }
886     }
887 }
888
889 /* Pushes a -imacro and -include file given on the command line onto
890    the buffer stack.  Returns non-zero if successful.  */
891 static bool
892 push_include (pfile, p)
893      cpp_reader *pfile;
894      struct pending_option *p;
895 {
896   cpp_token header;
897
898   /* Later: maybe update this to use the #include "" search path
899      if cpp_read_file fails.  */
900   header.type = CPP_STRING;
901   header.val.str.text = (const unsigned char *) p->arg;
902   header.val.str.len = strlen (p->arg);
903   /* Make the command line directive take up a line.  */
904   pfile->line++;
905
906   return _cpp_execute_include (pfile, &header, IT_CMDLINE);
907 }
908
909 /* Frees a pending_option chain.  */
910 static void
911 free_chain (head)
912      struct pending_option *head;
913 {
914   struct pending_option *next;
915
916   while (head)
917     {
918       next = head->next;
919       free (head);
920       head = next;
921     }
922 }
923
924 /* This is called after options have been processed.  Setup for
925    processing input from the file named FNAME, or stdin if it is the
926    empty string.  Return 1 on success, 0 on failure.  */
927 int
928 cpp_start_read (pfile, fname)
929      cpp_reader *pfile;
930      const char *fname;
931 {
932   /* Set up the include search path now.  */
933   if (! CPP_OPTION (pfile, no_standard_includes))
934     init_standard_includes (pfile);
935
936   merge_include_chains (pfile);
937
938   /* With -v, print the list of dirs to search.  */
939   if (CPP_OPTION (pfile, verbose))
940     {
941       struct search_path *l;
942       fprintf (stderr, _("#include \"...\" search starts here:\n"));
943       for (l = CPP_OPTION (pfile, quote_include); l; l = l->next)
944         {
945           if (l == CPP_OPTION (pfile, bracket_include))
946             fprintf (stderr, _("#include <...> search starts here:\n"));
947           fprintf (stderr, " %s\n", l->name);
948         }
949       fprintf (stderr, _("End of search list.\n"));
950     }
951
952   if (CPP_OPTION (pfile, print_deps))
953     /* Set the default target (if there is none already).  */
954     deps_add_default_target (pfile->deps, fname);
955
956   /* Open the main input file.  This must be done early, so we have a
957      buffer to stand on.  */
958   if (!_cpp_read_file (pfile, fname))
959     return 0;
960
961   /* Set this after cpp_post_options so the client can change the
962      option if it wishes, and after stacking the main file so we don't
963      trace the main file.  */
964   pfile->line_maps.trace_includes = CPP_OPTION (pfile, print_include_names);
965
966   /* Install builtins and process command line macros etc. in the order
967      they appeared, but only if not already preprocessed.  */
968   if (! CPP_OPTION (pfile, preprocessed))
969     {
970       struct pending_option *p;
971
972       _cpp_do_file_change (pfile, LC_RENAME, _("<builtin>"), 1, 0);
973       init_builtins (pfile);
974       _cpp_do_file_change (pfile, LC_RENAME, _("<command line>"), 1, 0);
975       for (p = CPP_OPTION (pfile, pending)->directive_head; p; p = p->next)
976         (*p->handler) (pfile, p->arg);
977
978       /* Scan -imacros files after command line defines, but before
979          files given with -include.  */
980       while ((p = CPP_OPTION (pfile, pending)->imacros_head) != NULL)
981         {
982           if (push_include (pfile, p))
983             {
984               pfile->buffer->return_at_eof = true;
985               cpp_scan_nooutput (pfile);
986             }
987           CPP_OPTION (pfile, pending)->imacros_head = p->next;
988           free (p);
989         }
990     }
991
992   free_chain (CPP_OPTION (pfile, pending)->directive_head);
993   _cpp_push_next_buffer (pfile);
994
995   return 1;
996 }
997
998 /* Called to push the next buffer on the stack given by -include.  If
999    there are none, free the pending structure and restore the line map
1000    for the main file.  */
1001 bool
1002 _cpp_push_next_buffer (pfile)
1003      cpp_reader *pfile;
1004 {
1005   bool pushed = false;
1006
1007   /* This is't pretty; we'd rather not be relying on this as a boolean
1008      for reverting the line map.  Further, we only free the chains in
1009      this conditional, so an early call to cpp_finish / cpp_destroy
1010      will leak that memory.  */
1011   if (CPP_OPTION (pfile, pending)
1012       && CPP_OPTION (pfile, pending)->imacros_head == NULL)
1013     {
1014       while (!pushed)
1015         {
1016           struct pending_option *p = CPP_OPTION (pfile, pending)->include_head;
1017
1018           if (p == NULL)
1019             break;
1020           if (! CPP_OPTION (pfile, preprocessed))
1021             pushed = push_include (pfile, p);
1022           CPP_OPTION (pfile, pending)->include_head = p->next;
1023           free (p);
1024         }
1025
1026       if (!pushed)
1027         {
1028           free (CPP_OPTION (pfile, pending));
1029           CPP_OPTION (pfile, pending) = NULL;
1030
1031           /* Restore the line map for the main file.  */
1032           if (! CPP_OPTION (pfile, preprocessed))
1033             _cpp_do_file_change (pfile, LC_RENAME,
1034                                  pfile->line_maps.maps[0].to_file, 1, 0);
1035         }
1036     }
1037
1038   return pushed;
1039 }
1040
1041 /* Use mkdeps.c to output dependency information.  */
1042 static void
1043 output_deps (pfile)
1044      cpp_reader *pfile;
1045 {
1046   /* Stream on which to print the dependency information.  */
1047   FILE *deps_stream = 0;
1048   const char *const deps_mode =
1049     CPP_OPTION (pfile, print_deps_append) ? "a" : "w";
1050
1051   if (CPP_OPTION (pfile, deps_file) == 0)
1052     deps_stream = stdout;
1053   else
1054     {
1055       deps_stream = fopen (CPP_OPTION (pfile, deps_file), deps_mode);
1056       if (deps_stream == 0)
1057         {
1058           cpp_notice_from_errno (pfile, CPP_OPTION (pfile, deps_file));
1059           return;
1060         }
1061     }
1062
1063   deps_write (pfile->deps, deps_stream, 72);
1064
1065   if (CPP_OPTION (pfile, deps_phony_targets))
1066     deps_phony_targets (pfile->deps, deps_stream);
1067
1068   /* Don't close stdout.  */
1069   if (CPP_OPTION (pfile, deps_file))
1070     {
1071       if (ferror (deps_stream) || fclose (deps_stream) != 0)
1072         cpp_fatal (pfile, "I/O error on output");
1073     }
1074 }
1075
1076 /* This is called at the end of preprocessing.  It pops the
1077    last buffer and writes dependency output.  It should also
1078    clear macro definitions, such that you could call cpp_start_read
1079    with a new filename to restart processing.  */
1080 void
1081 cpp_finish (pfile)
1082      cpp_reader *pfile;
1083 {
1084   /* cpplex.c leaves the final buffer on the stack.  This it so that
1085      it returns an unending stream of CPP_EOFs to the client.  If we
1086      popped the buffer, we'd derefence a NULL buffer pointer and
1087      segfault.  It's nice to allow the client to do worry-free excess
1088      cpp_get_token calls.  */
1089   while (pfile->buffer)
1090     _cpp_pop_buffer (pfile);
1091
1092   /* Don't write the deps file if preprocessing has failed.  */
1093   if (CPP_OPTION (pfile, print_deps) && pfile->errors == 0)
1094     output_deps (pfile);
1095
1096   /* Report on headers that could use multiple include guards.  */
1097   if (CPP_OPTION (pfile, print_include_names))
1098     _cpp_report_missing_guards (pfile);
1099 }
1100
1101 static void
1102 new_pending_directive (pend, text, handler)
1103      struct cpp_pending *pend;
1104      const char *text;
1105      cl_directive_handler handler;
1106 {
1107   struct pending_option *o = (struct pending_option *)
1108     xmalloc (sizeof (struct pending_option));
1109
1110   o->arg = text;
1111   o->next = NULL;
1112   o->handler = handler;
1113   APPEND (pend, directive, o);
1114 }
1115
1116 /* Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string");
1117    I.e. a const string initializer with parens around it.  That is
1118    what N_("string") resolves to, so we make no_* be macros instead.  */
1119 #define no_arg N_("Argument missing after %s")
1120 #define no_ass N_("Assertion missing after %s")
1121 #define no_dir N_("Directory name missing after %s")
1122 #define no_fil N_("File name missing after %s")
1123 #define no_mac N_("Macro name missing after %s")
1124 #define no_pth N_("Path name missing after %s")
1125 #define no_num N_("Number missing after %s")
1126 #define no_tgt N_("Target missing after %s")
1127
1128 /* This is the list of all command line options, with the leading
1129    "-" removed.  It must be sorted in ASCII collating order.  */
1130 #define COMMAND_LINE_OPTIONS                                                  \
1131   DEF_OPT("$",                        0,      OPT_dollar)                     \
1132   DEF_OPT("+",                        0,      OPT_plus)                       \
1133   DEF_OPT("-help",                    0,      OPT__help)                      \
1134   DEF_OPT("-target-help",             0,      OPT_target__help)               \
1135   DEF_OPT("-version",                 0,      OPT__version)                   \
1136   DEF_OPT("A",                        no_ass, OPT_A)                          \
1137   DEF_OPT("C",                        0,      OPT_C)                          \
1138   DEF_OPT("D",                        no_mac, OPT_D)                          \
1139   DEF_OPT("H",                        0,      OPT_H)                          \
1140   DEF_OPT("I",                        no_dir, OPT_I)                          \
1141   DEF_OPT("M",                        0,      OPT_M)                          \
1142   DEF_OPT("MD",                       no_fil, OPT_MD)                         \
1143   DEF_OPT("MF",                       no_fil, OPT_MF)                         \
1144   DEF_OPT("MG",                       0,      OPT_MG)                         \
1145   DEF_OPT("MM",                       0,      OPT_MM)                         \
1146   DEF_OPT("MMD",                      no_fil, OPT_MMD)                        \
1147   DEF_OPT("MP",                       0,      OPT_MP)                         \
1148   DEF_OPT("MQ",                       no_tgt, OPT_MQ)                         \
1149   DEF_OPT("MT",                       no_tgt, OPT_MT)                         \
1150   DEF_OPT("P",                        0,      OPT_P)                          \
1151   DEF_OPT("U",                        no_mac, OPT_U)                          \
1152   DEF_OPT("W",                        no_arg, OPT_W)  /* arg optional */      \
1153   DEF_OPT("d",                        no_arg, OPT_d)                          \
1154   DEF_OPT("fleading-underscore",      0,      OPT_fleading_underscore)        \
1155   DEF_OPT("fno-leading-underscore",   0,      OPT_fno_leading_underscore)     \
1156   DEF_OPT("fno-operator-names",       0,      OPT_fno_operator_names)         \
1157   DEF_OPT("fno-preprocessed",         0,      OPT_fno_preprocessed)           \
1158   DEF_OPT("fno-show-column",          0,      OPT_fno_show_column)            \
1159   DEF_OPT("fpreprocessed",            0,      OPT_fpreprocessed)              \
1160   DEF_OPT("fshow-column",             0,      OPT_fshow_column)               \
1161   DEF_OPT("ftabstop=",                no_num, OPT_ftabstop)                   \
1162   DEF_OPT("h",                        0,      OPT_h)                          \
1163   DEF_OPT("idirafter",                no_dir, OPT_idirafter)                  \
1164   DEF_OPT("imacros",                  no_fil, OPT_imacros)                    \
1165   DEF_OPT("include",                  no_fil, OPT_include)                    \
1166   DEF_OPT("iprefix",                  no_pth, OPT_iprefix)                    \
1167   DEF_OPT("isystem",                  no_dir, OPT_isystem)                    \
1168   DEF_OPT("iwithprefix",              no_dir, OPT_iwithprefix)                \
1169   DEF_OPT("iwithprefixbefore",        no_dir, OPT_iwithprefixbefore)          \
1170   DEF_OPT("lang-asm",                 0,      OPT_lang_asm)                   \
1171   DEF_OPT("lang-c",                   0,      OPT_lang_c)                     \
1172   DEF_OPT("lang-c++",                 0,      OPT_lang_cplusplus)             \
1173   DEF_OPT("lang-c89",                 0,      OPT_lang_c89)                   \
1174   DEF_OPT("lang-objc",                0,      OPT_lang_objc)                  \
1175   DEF_OPT("lang-objc++",              0,      OPT_lang_objcplusplus)          \
1176   DEF_OPT("nostdinc",                 0,      OPT_nostdinc)                   \
1177   DEF_OPT("nostdinc++",               0,      OPT_nostdincplusplus)           \
1178   DEF_OPT("o",                        no_fil, OPT_o)                          \
1179   DEF_OPT("pedantic",                 0,      OPT_pedantic)                   \
1180   DEF_OPT("pedantic-errors",          0,      OPT_pedantic_errors)            \
1181   DEF_OPT("remap",                    0,      OPT_remap)                      \
1182   DEF_OPT("std=c++98",                0,      OPT_std_cplusplus98)            \
1183   DEF_OPT("std=c89",                  0,      OPT_std_c89)                    \
1184   DEF_OPT("std=c99",                  0,      OPT_std_c99)                    \
1185   DEF_OPT("std=c9x",                  0,      OPT_std_c9x)                    \
1186   DEF_OPT("std=gnu89",                0,      OPT_std_gnu89)                  \
1187   DEF_OPT("std=gnu99",                0,      OPT_std_gnu99)                  \
1188   DEF_OPT("std=gnu9x",                0,      OPT_std_gnu9x)                  \
1189   DEF_OPT("std=iso9899:1990",         0,      OPT_std_iso9899_1990)           \
1190   DEF_OPT("std=iso9899:199409",       0,      OPT_std_iso9899_199409)         \
1191   DEF_OPT("std=iso9899:1999",         0,      OPT_std_iso9899_1999)           \
1192   DEF_OPT("std=iso9899:199x",         0,      OPT_std_iso9899_199x)           \
1193   DEF_OPT("trigraphs",                0,      OPT_trigraphs)                  \
1194   DEF_OPT("v",                        0,      OPT_v)                          \
1195   DEF_OPT("version",                  0,      OPT_version)                    \
1196   DEF_OPT("w",                        0,      OPT_w)
1197
1198 #define DEF_OPT(text, msg, code) code,
1199 enum opt_code
1200 {
1201   COMMAND_LINE_OPTIONS
1202   N_OPTS
1203 };
1204 #undef DEF_OPT
1205
1206 struct cl_option
1207 {
1208   const char *opt_text;
1209   const char *msg;
1210   size_t opt_len;
1211   enum opt_code opt_code;
1212 };
1213
1214 #define DEF_OPT(text, msg, code) { text, msg, sizeof(text) - 1, code },
1215 #ifdef HOST_EBCDIC
1216 static struct cl_option cl_options[] =
1217 #else
1218 static const struct cl_option cl_options[] =
1219 #endif
1220 {
1221   COMMAND_LINE_OPTIONS
1222 };
1223 #undef DEF_OPT
1224 #undef COMMAND_LINE_OPTIONS
1225
1226 /* Perform a binary search to find which, if any, option the given
1227    command-line matches.  Returns its index in the option array,
1228    negative on failure.  Complications arise since some options can be
1229    suffixed with an argument, and multiple complete matches can occur,
1230    e.g. -iwithprefix and -iwithprefixbefore.  Moreover, we need to
1231    accept options beginning with -W that we do not recognise, but not
1232    to swallow any subsequent command line argument; this is handled as
1233    special cases in cpp_handle_option.  */
1234 static int
1235 parse_option (input)
1236      const char *input;
1237 {
1238   unsigned int md, mn, mx;
1239   size_t opt_len;
1240   int comp;
1241
1242   mn = 0;
1243   mx = N_OPTS;
1244
1245   while (mx > mn)
1246     {
1247       md = (mn + mx) / 2;
1248
1249       opt_len = cl_options[md].opt_len;
1250       comp = memcmp (input, cl_options[md].opt_text, opt_len);
1251
1252       if (comp > 0)
1253         mn = md + 1;
1254       else if (comp < 0)
1255         mx = md;
1256       else
1257         {
1258           if (input[opt_len] == '\0')
1259             return md;
1260           /* We were passed more text.  If the option takes an argument,
1261              we may match a later option or we may have been passed the
1262              argument.  The longest possible option match succeeds.
1263              If the option takes no arguments we have not matched and
1264              continue the search (e.g. input="stdc++" match was "stdc").  */
1265           mn = md + 1;
1266           if (cl_options[md].msg)
1267             {
1268               /* Scan forwards.  If we get an exact match, return it.
1269                  Otherwise, return the longest option-accepting match.
1270                  This loops no more than twice with current options.  */
1271               mx = md;
1272               for (; mn < (unsigned int) N_OPTS; mn++)
1273                 {
1274                   opt_len = cl_options[mn].opt_len;
1275                   if (memcmp (input, cl_options[mn].opt_text, opt_len))
1276                     break;
1277                   if (input[opt_len] == '\0')
1278                     return mn;
1279                   if (cl_options[mn].msg)
1280                     mx = mn;
1281                 }
1282               return mx;
1283             }
1284         }
1285     }
1286
1287   return -1;
1288 }
1289
1290 /* Handle one command-line option in (argc, argv).
1291    Can be called multiple times, to handle multiple sets of options.
1292    Returns number of strings consumed.  */
1293
1294 int
1295 cpp_handle_option (pfile, argc, argv)
1296      cpp_reader *pfile;
1297      int argc;
1298      char **argv;
1299 {
1300   int i = 0;
1301   struct cpp_pending *pend = CPP_OPTION (pfile, pending);
1302
1303   /* Interpret "-" or a non-option as a file name.  */
1304   if (argv[i][0] != '-' || argv[i][1] == '\0')
1305     {
1306       if (CPP_OPTION (pfile, in_fname) == NULL)
1307         CPP_OPTION (pfile, in_fname) = argv[i];
1308       else if (CPP_OPTION (pfile, out_fname) == NULL)
1309         CPP_OPTION (pfile, out_fname) = argv[i];
1310       else
1311         cpp_fatal (pfile, "Too many filenames. Type %s --help for usage info",
1312                    progname);
1313     }
1314   else
1315     {
1316       enum opt_code opt_code;
1317       int opt_index;
1318       const char *arg = 0;
1319
1320       /* Skip over '-'.  */
1321       opt_index = parse_option (&argv[i][1]);
1322       if (opt_index < 0)
1323         return i;
1324
1325       opt_code = cl_options[opt_index].opt_code;
1326       if (cl_options[opt_index].msg)
1327         {
1328           arg = &argv[i][cl_options[opt_index].opt_len + 1];
1329
1330           /* Yuk. Special case for -W as it must not swallow
1331              up any following argument.  If this becomes common, add
1332              another field to the cl_options table.  */
1333           if (arg[0] == '\0' && opt_code != OPT_W)
1334             {
1335               arg = argv[++i];
1336               if (!arg)
1337                 {
1338                   cpp_fatal (pfile, cl_options[opt_index].msg, argv[i - 1]);
1339                   return argc;
1340                 }
1341             }
1342         }
1343
1344       switch (opt_code)
1345         {
1346         case N_OPTS: /* Shut GCC up.  */
1347           break;
1348         case OPT_fleading_underscore:
1349           CPP_OPTION (pfile, user_label_prefix) = "_";
1350           break;
1351         case OPT_fno_leading_underscore:
1352           CPP_OPTION (pfile, user_label_prefix) = "";
1353           break;
1354         case OPT_fno_operator_names:
1355           CPP_OPTION (pfile, operator_names) = 0;
1356           break;
1357         case OPT_fpreprocessed:
1358           CPP_OPTION (pfile, preprocessed) = 1;
1359           break;
1360         case OPT_fno_preprocessed:
1361           CPP_OPTION (pfile, preprocessed) = 0;
1362           break;
1363         case OPT_fshow_column:
1364           CPP_OPTION (pfile, show_column) = 1;
1365           break;
1366         case OPT_fno_show_column:
1367           CPP_OPTION (pfile, show_column) = 0;
1368           break;
1369         case OPT_ftabstop:
1370           /* Silently ignore empty string, non-longs and silly values.  */
1371           if (arg[0] != '\0')
1372             {
1373               char *endptr;
1374               long tabstop = strtol (arg, &endptr, 10);
1375               if (*endptr == '\0' && tabstop >= 1 && tabstop <= 100)
1376                 CPP_OPTION (pfile, tabstop) = tabstop;
1377             }
1378           break;
1379         case OPT_w:
1380           CPP_OPTION (pfile, inhibit_warnings) = 1;
1381           break;
1382         case OPT_h:
1383         case OPT__help:
1384           print_help ();
1385           CPP_OPTION (pfile, help_only) = 1;
1386           break;
1387         case OPT_target__help:
1388           /* Print if any target specific options. cpplib has none, but
1389              make sure help_only gets set.  */
1390           CPP_OPTION (pfile, help_only) = 1;
1391           break;
1392
1393           /* --version inhibits compilation, -version doesn't. -v means
1394              verbose and -version.  Historical reasons, don't ask.  */
1395         case OPT__version:
1396           CPP_OPTION (pfile, help_only) = 1;
1397           pfile->print_version = 1;
1398           break;
1399         case OPT_v:
1400           CPP_OPTION (pfile, verbose) = 1;
1401           pfile->print_version = 1;
1402           break;
1403         case OPT_version:
1404           pfile->print_version = 1;
1405           break;
1406
1407         case OPT_C:
1408           CPP_OPTION (pfile, discard_comments) = 0;
1409           break;
1410         case OPT_P:
1411           CPP_OPTION (pfile, no_line_commands) = 1;
1412           break;
1413         case OPT_dollar:        /* Don't include $ in identifiers.  */
1414           CPP_OPTION (pfile, dollars_in_ident) = 0;
1415           break;
1416         case OPT_H:
1417           CPP_OPTION (pfile, print_include_names) = 1;
1418           break;
1419         case OPT_D:
1420           new_pending_directive (pend, arg, cpp_define);
1421           break;
1422         case OPT_pedantic_errors:
1423           CPP_OPTION (pfile, pedantic_errors) = 1;
1424           /* fall through */
1425         case OPT_pedantic:
1426           CPP_OPTION (pfile, pedantic) = 1;
1427           break;
1428         case OPT_trigraphs:
1429           CPP_OPTION (pfile, trigraphs) = 1;
1430           break;
1431         case OPT_plus:
1432           CPP_OPTION (pfile, cplusplus) = 1;
1433           CPP_OPTION (pfile, cplusplus_comments) = 1;
1434           break;
1435         case OPT_remap:
1436           CPP_OPTION (pfile, remap) = 1;
1437           break;
1438         case OPT_iprefix:
1439           CPP_OPTION (pfile, include_prefix) = arg;
1440           CPP_OPTION (pfile, include_prefix_len) = strlen (arg);
1441           break;
1442         case OPT_lang_c:
1443           set_lang (pfile, CLK_GNUC89);
1444           break;
1445         case OPT_lang_cplusplus:
1446           set_lang (pfile, CLK_GNUCXX);
1447           break;
1448         case OPT_lang_objc:
1449           set_lang (pfile, CLK_OBJC);
1450           break;
1451         case OPT_lang_objcplusplus:
1452           set_lang (pfile, CLK_OBJCXX);
1453           break;
1454         case OPT_lang_asm:
1455           set_lang (pfile, CLK_ASM);
1456           break;
1457         case OPT_std_cplusplus98:
1458           set_lang (pfile, CLK_CXX98);
1459           break;
1460         case OPT_std_gnu89:
1461           set_lang (pfile, CLK_GNUC89);
1462           break;
1463         case OPT_std_gnu9x:
1464         case OPT_std_gnu99:
1465           set_lang (pfile, CLK_GNUC99);
1466           break;
1467         case OPT_std_iso9899_199409:
1468           set_lang (pfile, CLK_STDC94);
1469           break;
1470         case OPT_std_iso9899_1990:
1471         case OPT_std_c89:
1472         case OPT_lang_c89:
1473           set_lang (pfile, CLK_STDC89);
1474           break;
1475         case OPT_std_iso9899_199x:
1476         case OPT_std_iso9899_1999:
1477         case OPT_std_c9x:
1478         case OPT_std_c99:
1479           set_lang (pfile, CLK_STDC99);
1480           break;
1481         case OPT_nostdinc:
1482           /* -nostdinc causes no default include directories.
1483              You must specify all include-file directories with -I.  */
1484           CPP_OPTION (pfile, no_standard_includes) = 1;
1485           break;
1486         case OPT_nostdincplusplus:
1487           /* -nostdinc++ causes no default C++-specific include directories.  */
1488           CPP_OPTION (pfile, no_standard_cplusplus_includes) = 1;
1489           break;
1490         case OPT_o:
1491           if (CPP_OPTION (pfile, out_fname) == NULL)
1492             CPP_OPTION (pfile, out_fname) = arg;
1493           else
1494             {
1495               cpp_fatal (pfile, "Output filename specified twice");
1496               return argc;
1497             }
1498           break;
1499         case OPT_d:
1500           /* Args to -d specify what parts of macros to dump.
1501              Silently ignore unrecognised options; they may
1502              be aimed at the compiler proper.  */
1503           {
1504             char c;
1505
1506             while ((c = *arg++) != '\0')
1507               switch (c)
1508                 {
1509                 case 'M':
1510                   CPP_OPTION (pfile, dump_macros) = dump_only;
1511                   CPP_OPTION (pfile, no_output) = 1;
1512                   break;
1513                 case 'N':
1514                   CPP_OPTION (pfile, dump_macros) = dump_names;
1515                   break;
1516                 case 'D':
1517                   CPP_OPTION (pfile, dump_macros) = dump_definitions;
1518                   break;
1519                 case 'I':
1520                   CPP_OPTION (pfile, dump_includes) = 1;
1521                   break;
1522                 }
1523           }
1524           break;
1525
1526         case OPT_MG:
1527           CPP_OPTION (pfile, print_deps_missing_files) = 1;
1528           break;
1529         case OPT_M:
1530           CPP_OPTION (pfile, print_deps) = 2;
1531           break;
1532         case OPT_MM:
1533           CPP_OPTION (pfile, print_deps) = 1;
1534           break;
1535         case OPT_MF:
1536           CPP_OPTION (pfile, deps_file) = arg;
1537           break;
1538         case OPT_MP:
1539           CPP_OPTION (pfile, deps_phony_targets) = 1;
1540           break;
1541         case OPT_MQ:
1542         case OPT_MT:
1543           /* Add a target.  -MQ quotes for Make.  */
1544           deps_add_target (pfile->deps, arg, opt_code == OPT_MQ);
1545           break;
1546
1547           /* -MD and -MMD for cpp0 are deprecated and undocumented
1548              (use -M or -MM with -MF instead), and probably should be
1549              removed with the next major GCC version.  For the moment
1550              we allow these for the benefit of Automake 1.4, which
1551              uses these when dependency tracking is enabled.  Automake
1552              1.5 will fix this.  */
1553         case OPT_MD:
1554           CPP_OPTION (pfile, print_deps) = 2;
1555           CPP_OPTION (pfile, deps_file) = arg;
1556           break;
1557         case OPT_MMD:
1558           CPP_OPTION (pfile, print_deps) = 1;
1559           CPP_OPTION (pfile, deps_file) = arg;
1560           break;
1561
1562         case OPT_A:
1563           if (arg[0] == '-')
1564             {
1565               /* -A with an argument beginning with '-' acts as
1566                  #unassert on whatever immediately follows the '-'.
1567                  If "-" is the whole argument, we eliminate all
1568                  predefined macros and assertions, including those
1569                  that were specified earlier on the command line.
1570                  That way we can get rid of any that were passed
1571                  automatically in from GCC.  */
1572
1573               if (arg[1] == '\0')
1574                 {
1575                   free_chain (pend->directive_head);
1576                   pend->directive_head = NULL;
1577                   pend->directive_tail = NULL;
1578                 }
1579               else
1580                 new_pending_directive (pend, arg + 1, cpp_unassert);
1581             }
1582           else
1583             new_pending_directive (pend, arg, cpp_assert);
1584           break;
1585         case OPT_U:
1586           new_pending_directive (pend, arg, cpp_undef);
1587           break;
1588         case OPT_I:           /* Add directory to path for includes.  */
1589           if (!strcmp (arg, "-"))
1590             {
1591               /* -I- means:
1592                  Use the preceding -I directories for #include "..."
1593                  but not #include <...>.
1594                  Don't search the directory of the present file
1595                  for #include "...".  (Note that -I. -I- is not the same as
1596                  the default setup; -I. uses the compiler's working dir.)  */
1597               if (! CPP_OPTION (pfile, ignore_srcdir))
1598                 {
1599                   pend->quote_head = pend->brack_head;
1600                   pend->quote_tail = pend->brack_tail;
1601                   pend->brack_head = 0;
1602                   pend->brack_tail = 0;
1603                   CPP_OPTION (pfile, ignore_srcdir) = 1;
1604                 }
1605               else
1606                 {
1607                   cpp_fatal (pfile, "-I- specified twice");
1608                   return argc;
1609                 }
1610             }
1611           else
1612             append_include_chain (pfile, xstrdup (arg), BRACKET, 0);
1613           break;
1614         case OPT_isystem:
1615           /* Add directory to beginning of system include path, as a system
1616              include directory.  */
1617           append_include_chain (pfile, xstrdup (arg), SYSTEM, 0);
1618           break;
1619         case OPT_include:
1620         case OPT_imacros:
1621           {
1622             struct pending_option *o = (struct pending_option *)
1623               xmalloc (sizeof (struct pending_option));
1624             o->arg = arg;
1625             o->next = NULL;
1626
1627             if (opt_code == OPT_include)
1628               APPEND (pend, include, o);
1629             else
1630               APPEND (pend, imacros, o);
1631           }
1632           break;
1633         case OPT_iwithprefix:
1634           /* Add directory to end of path for includes,
1635              with the default prefix at the front of its name.  */
1636           /* fall through */
1637         case OPT_iwithprefixbefore:
1638           /* Add directory to main path for includes,
1639              with the default prefix at the front of its name.  */
1640           {
1641             char *fname;
1642             int len;
1643
1644             len = strlen (arg);
1645
1646             if (CPP_OPTION (pfile, include_prefix) != 0)
1647               {
1648                 size_t ipl = CPP_OPTION (pfile, include_prefix_len);
1649                 fname = xmalloc (ipl + len + 1);
1650                 memcpy (fname, CPP_OPTION (pfile, include_prefix), ipl);
1651                 memcpy (fname + ipl, arg, len + 1);
1652               }
1653             else if (cpp_GCC_INCLUDE_DIR_len)
1654               {
1655                 fname = xmalloc (cpp_GCC_INCLUDE_DIR_len + len + 1);
1656                 memcpy (fname, cpp_GCC_INCLUDE_DIR, cpp_GCC_INCLUDE_DIR_len);
1657                 memcpy (fname + cpp_GCC_INCLUDE_DIR_len, arg, len + 1);
1658               }
1659             else
1660               fname = xstrdup (arg);
1661
1662             append_include_chain (pfile, fname,
1663                           opt_code == OPT_iwithprefix ? SYSTEM: BRACKET, 0);
1664           }
1665           break;
1666         case OPT_idirafter:
1667           /* Add directory to end of path for includes.  */
1668           append_include_chain (pfile, xstrdup (arg), AFTER, 0);
1669           break;
1670         case OPT_W:
1671           /* Silently ignore unrecognised options.  */
1672           if (!strcmp (argv[i], "-Wall"))
1673             {
1674               CPP_OPTION (pfile, warn_trigraphs) = 1;
1675               CPP_OPTION (pfile, warn_comments) = 1;
1676             }
1677           else if (!strcmp (argv[i], "-Wtraditional"))
1678             CPP_OPTION (pfile, warn_traditional) = 1;
1679           else if (!strcmp (argv[i], "-Wtrigraphs"))
1680             CPP_OPTION (pfile, warn_trigraphs) = 1;
1681           else if (!strcmp (argv[i], "-Wcomment"))
1682             CPP_OPTION (pfile, warn_comments) = 1;
1683           else if (!strcmp (argv[i], "-Wcomments"))
1684             CPP_OPTION (pfile, warn_comments) = 1;
1685           else if (!strcmp (argv[i], "-Wundef"))
1686             CPP_OPTION (pfile, warn_undef) = 1;
1687           else if (!strcmp (argv[i], "-Wimport"))
1688             CPP_OPTION (pfile, warn_import) = 1;
1689           else if (!strcmp (argv[i], "-Werror"))
1690             CPP_OPTION (pfile, warnings_are_errors) = 1;
1691           else if (!strcmp (argv[i], "-Wsystem-headers"))
1692             CPP_OPTION (pfile, warn_system_headers) = 1;
1693           else if (!strcmp (argv[i], "-Wno-traditional"))
1694             CPP_OPTION (pfile, warn_traditional) = 0;
1695           else if (!strcmp (argv[i], "-Wno-trigraphs"))
1696             CPP_OPTION (pfile, warn_trigraphs) = 0;
1697           else if (!strcmp (argv[i], "-Wno-comment"))
1698             CPP_OPTION (pfile, warn_comments) = 0;
1699           else if (!strcmp (argv[i], "-Wno-comments"))
1700             CPP_OPTION (pfile, warn_comments) = 0;
1701           else if (!strcmp (argv[i], "-Wno-undef"))
1702             CPP_OPTION (pfile, warn_undef) = 0;
1703           else if (!strcmp (argv[i], "-Wno-import"))
1704             CPP_OPTION (pfile, warn_import) = 0;
1705           else if (!strcmp (argv[i], "-Wno-error"))
1706             CPP_OPTION (pfile, warnings_are_errors) = 0;
1707           else if (!strcmp (argv[i], "-Wno-system-headers"))
1708             CPP_OPTION (pfile, warn_system_headers) = 0;
1709           break;
1710         }
1711     }
1712   return i + 1;
1713 }
1714
1715 /* Handle command-line options in (argc, argv).
1716    Can be called multiple times, to handle multiple sets of options.
1717    Returns if an unrecognized option is seen.
1718    Returns number of strings consumed.  */
1719 int
1720 cpp_handle_options (pfile, argc, argv)
1721      cpp_reader *pfile;
1722      int argc;
1723      char **argv;
1724 {
1725   int i;
1726   int strings_processed;
1727
1728   for (i = 0; i < argc; i += strings_processed)
1729     {
1730       strings_processed = cpp_handle_option (pfile, argc - i, argv + i);
1731       if (strings_processed == 0)
1732         break;
1733     }
1734
1735   return i;
1736 }
1737
1738 /* Extra processing when all options are parsed, after all calls to
1739    cpp_handle_option[s].  Consistency checks etc.  */
1740 void
1741 cpp_post_options (pfile)
1742      cpp_reader *pfile;
1743 {
1744   if (pfile->print_version)
1745     {
1746       fprintf (stderr, _("GNU CPP version %s (cpplib)"), version_string);
1747 #ifdef TARGET_VERSION
1748       TARGET_VERSION;
1749 #endif
1750       fputc ('\n', stderr);
1751     }
1752
1753   /* Canonicalize in_fname and out_fname.  We guarantee they are not
1754      NULL, and that the empty string represents stdin / stdout.  */
1755   if (CPP_OPTION (pfile, in_fname) == NULL
1756       || !strcmp (CPP_OPTION (pfile, in_fname), "-"))
1757     CPP_OPTION (pfile, in_fname) = "";
1758
1759   if (CPP_OPTION (pfile, out_fname) == NULL
1760       || !strcmp (CPP_OPTION (pfile, out_fname), "-"))
1761     CPP_OPTION (pfile, out_fname) = "";
1762
1763   /* -Wtraditional is not useful in C++ mode.  */
1764   if (CPP_OPTION (pfile, cplusplus))
1765     CPP_OPTION (pfile, warn_traditional) = 0;
1766
1767   /* Set this if it hasn't been set already.  */
1768   if (CPP_OPTION (pfile, user_label_prefix) == NULL)
1769     CPP_OPTION (pfile, user_label_prefix) = USER_LABEL_PREFIX;
1770
1771   /* Permanently disable macro expansion if we are rescanning
1772      preprocessed text.  */
1773   if (CPP_OPTION (pfile, preprocessed))
1774     pfile->state.prevent_expansion = 1;
1775
1776   /* We need to do this after option processing and before
1777      cpp_start_read, as cppmain.c relies on the options->no_output to
1778      set its callbacks correctly before calling cpp_start_read.  */
1779   init_dependency_output (pfile);
1780
1781   /* After checking the environment variables, check if -M or -MM has
1782      not been specified, but other -M options have.  */
1783   if (CPP_OPTION (pfile, print_deps) == 0 &&
1784       (CPP_OPTION (pfile, print_deps_missing_files)
1785        || CPP_OPTION (pfile, deps_file)
1786        || CPP_OPTION (pfile, deps_phony_targets)))
1787     cpp_fatal (pfile, "you must additionally specify either -M or -MM");
1788 }
1789
1790 /* Set up dependency-file output.  */
1791 static void
1792 init_dependency_output (pfile)
1793      cpp_reader *pfile;
1794 {
1795   char *spec, *s, *output_file;
1796
1797   /* Either of two environment variables can specify output of deps.
1798      Its value is either "OUTPUT_FILE" or "OUTPUT_FILE DEPS_TARGET",
1799      where OUTPUT_FILE is the file to write deps info to
1800      and DEPS_TARGET is the target to mention in the deps.  */
1801
1802   if (CPP_OPTION (pfile, print_deps) == 0)
1803     {
1804       spec = getenv ("DEPENDENCIES_OUTPUT");
1805       if (spec)
1806         CPP_OPTION (pfile, print_deps) = 1;
1807       else
1808         {
1809           spec = getenv ("SUNPRO_DEPENDENCIES");
1810           if (spec)
1811             CPP_OPTION (pfile, print_deps) = 2;
1812           else
1813             return;
1814         }
1815
1816       /* Find the space before the DEPS_TARGET, if there is one.  */
1817       s = strchr (spec, ' ');
1818       if (s)
1819         {
1820           /* Let the caller perform MAKE quoting.  */
1821           deps_add_target (pfile->deps, s + 1, 0);
1822           output_file = (char *) xmalloc (s - spec + 1);
1823           memcpy (output_file, spec, s - spec);
1824           output_file[s - spec] = 0;
1825         }
1826       else
1827         output_file = spec;
1828
1829       /* Command line overrides environment variables.  */
1830       if (CPP_OPTION (pfile, deps_file) == 0)
1831         CPP_OPTION (pfile, deps_file) = output_file;
1832       CPP_OPTION (pfile, print_deps_append) = 1;
1833     }
1834
1835   /* If dependencies go to standard output, or -MG is used, we should
1836      suppress output, including -dM, -dI etc.  */
1837   if (CPP_OPTION (pfile, deps_file) == 0
1838       || CPP_OPTION (pfile, print_deps_missing_files))
1839     {
1840       CPP_OPTION (pfile, no_output) = 1;
1841       CPP_OPTION (pfile, dump_macros) = 0;
1842       CPP_OPTION (pfile, dump_includes) = 0;
1843     }
1844 }
1845
1846 static void
1847 print_help ()
1848 {
1849   fprintf (stderr, _("Usage: %s [switches] input output\n"), progname);
1850   /* To keep the lines from getting too long for some compilers, limit
1851      to about 500 characters (6 lines) per chunk.  */
1852   fputs (_("\
1853 Switches:\n\
1854   -include <file>           Include the contents of <file> before other files\n\
1855   -imacros <file>           Accept definition of macros in <file>\n\
1856   -iprefix <path>           Specify <path> as a prefix for next two options\n\
1857   -iwithprefix <dir>        Add <dir> to the end of the system include path\n\
1858   -iwithprefixbefore <dir>  Add <dir> to the end of the main include path\n\
1859   -isystem <dir>            Add <dir> to the start of the system include path\n\
1860 "), stdout);
1861   fputs (_("\
1862   -idirafter <dir>          Add <dir> to the end of the system include path\n\
1863   -I <dir>                  Add <dir> to the end of the main include path\n\
1864   -I-                       Fine-grained include path control; see info docs\n\
1865   -nostdinc                 Do not search system include directories\n\
1866                              (dirs specified with -isystem will still be used)\n\
1867   -nostdinc++               Do not search system include directories for C++\n\
1868   -o <file>                 Put output into <file>\n\
1869 "), stdout);
1870   fputs (_("\
1871   -pedantic                 Issue all warnings demanded by strict ISO C\n\
1872   -pedantic-errors          Issue -pedantic warnings as errors instead\n\
1873   -trigraphs                Support ISO C trigraphs\n\
1874   -lang-c                   Assume that the input sources are in C\n\
1875   -lang-c89                 Assume that the input sources are in C89\n\
1876 "), stdout);
1877   fputs (_("\
1878   -lang-c++                 Assume that the input sources are in C++\n\
1879   -lang-objc                Assume that the input sources are in ObjectiveC\n\
1880   -lang-objc++              Assume that the input sources are in ObjectiveC++\n\
1881   -lang-asm                 Assume that the input sources are in assembler\n\
1882 "), stdout);
1883   fputs (_("\
1884   -std=<std name>           Specify the conformance standard; one of:\n\
1885                             gnu89, gnu99, c89, c99, iso9899:1990,\n\
1886                             iso9899:199409, iso9899:1999\n\
1887   -+                        Allow parsing of C++ style features\n\
1888   -w                        Inhibit warning messages\n\
1889   -Wtrigraphs               Warn if trigraphs are encountered\n\
1890   -Wno-trigraphs            Do not warn about trigraphs\n\
1891   -Wcomment{s}              Warn if one comment starts inside another\n\
1892 "), stdout);
1893   fputs (_("\
1894   -Wno-comment{s}           Do not warn about comments\n\
1895   -Wtraditional             Warn about features not present in traditional C\n\
1896   -Wno-traditional          Do not warn about traditional C\n\
1897   -Wundef                   Warn if an undefined macro is used by #if\n\
1898   -Wno-undef                Do not warn about testing undefined macros\n\
1899   -Wimport                  Warn about the use of the #import directive\n\
1900 "), stdout);
1901   fputs (_("\
1902   -Wno-import               Do not warn about the use of #import\n\
1903   -Werror                   Treat all warnings as errors\n\
1904   -Wno-error                Do not treat warnings as errors\n\
1905   -Wsystem-headers          Do not suppress warnings from system headers\n\
1906   -Wno-system-headers       Suppress warnings from system headers\n\
1907   -Wall                     Enable all preprocessor warnings\n\
1908 "), stdout);
1909   fputs (_("\
1910   -M                        Generate make dependencies\n\
1911   -MM                       As -M, but ignore system header files\n\
1912   -MF <file>                Write dependency output to the given file\n\
1913   -MG                       Treat missing header file as generated files\n\
1914 "), stdout);
1915   fputs (_("\
1916   -MP                       Generate phony targets for all headers\n\
1917   -MQ <target>              Add a MAKE-quoted target\n\
1918   -MT <target>              Add an unquoted target\n\
1919 "), stdout);
1920   fputs (_("\
1921   -D<macro>                 Define a <macro> with string '1' as its value\n\
1922   -D<macro>=<val>           Define a <macro> with <val> as its value\n\
1923   -A<question> (<answer>)   Assert the <answer> to <question>\n\
1924   -A-<question> (<answer>)  Disable the <answer> to <question>\n\
1925   -U<macro>                 Undefine <macro> \n\
1926   -v                        Display the version number\n\
1927 "), stdout);
1928   fputs (_("\
1929   -H                        Print the name of header files as they are used\n\
1930   -C                        Do not discard comments\n\
1931   -dM                       Display a list of macro definitions active at end\n\
1932   -dD                       Preserve macro definitions in output\n\
1933   -dN                       As -dD except that only the names are preserved\n\
1934   -dI                       Include #include directives in the output\n\
1935 "), stdout);
1936   fputs (_("\
1937   -fpreprocessed            Treat the input file as already preprocessed\n\
1938   -ftabstop=<number>        Distance between tab stops for column reporting\n\
1939   -P                        Do not generate #line directives\n\
1940   -$                        Do not allow '$' in identifiers\n\
1941   -remap                    Remap file names when including files.\n\
1942   --version                 Display version information\n\
1943   -h or --help              Display this information\n\
1944 "), stdout);
1945 }