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