OSDN Git Service

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