OSDN Git Service

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