OSDN Git Service

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