Mon Mar 13 11:36:51 2000 Hans Boehm <boehm@acm.org>
[official-gcc.git] / gcc / cppinit.c
blob0eb2a298dff19d7f2f2127803ea16c5a7248599e
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
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.
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.
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. */
22 #include "config.h"
23 #include "system.h"
25 #include "cpplib.h"
26 #include "cpphash.h"
27 #include "output.h"
28 #include "prefix.h"
29 #include "intl.h"
30 #include "version.h"
31 #include "hashtab.h"
32 #include "mkdeps.h"
34 /* Predefined symbols, built-in macros, and the default include path. */
36 #ifndef GET_ENV_PATH_LIST
37 #define GET_ENV_PATH_LIST(VAR,NAME) do { (VAR) = getenv (NAME); } while (0)
38 #endif
40 /* Windows does not natively support inodes, and neither does MSDOS.
41 Cygwin's emulation can generate non-unique inodes, so don't use it.
42 VMS has non-numeric inodes. */
43 #ifdef VMS
44 #define INO_T_EQ(a, b) (!memcmp (&(a), &(b), sizeof (a)))
45 #elif (defined _WIN32 && ! defined (_UWIN)) || defined __MSDOS__
46 #define INO_T_EQ(a, b) 0
47 #else
48 #define INO_T_EQ(a, b) ((a) == (b))
49 #endif
51 #ifndef STANDARD_INCLUDE_DIR
52 #define STANDARD_INCLUDE_DIR "/usr/include"
53 #endif
55 /* We let tm.h override the types used here, to handle trivial differences
56 such as the choice of unsigned int or long unsigned int for size_t.
57 When machines start needing nontrivial differences in the size type,
58 it would be best to do something here to figure out automatically
59 from other information what type to use. */
61 /* The string value for __SIZE_TYPE__. */
63 #ifndef SIZE_TYPE
64 #define SIZE_TYPE "long unsigned int"
65 #endif
67 /* The string value for __PTRDIFF_TYPE__. */
69 #ifndef PTRDIFF_TYPE
70 #define PTRDIFF_TYPE "long int"
71 #endif
73 /* The string value for __WCHAR_TYPE__. */
75 #ifndef WCHAR_TYPE
76 #define WCHAR_TYPE "int"
77 #endif
79 /* The string value for __USER_LABEL_PREFIX__ */
81 #ifndef USER_LABEL_PREFIX
82 #define USER_LABEL_PREFIX ""
83 #endif
85 /* The string value for __REGISTER_PREFIX__ */
87 #ifndef REGISTER_PREFIX
88 #define REGISTER_PREFIX ""
89 #endif
91 /* This is the default list of directories to search for include files.
92 It may be overridden by the various -I and -ixxx options.
94 #include "file" looks in the same directory as the current file,
95 then this list.
96 #include <file> just looks in this list.
98 All these directories are treated as `system' include directories
99 (they are not subject to pedantic warnings in some cases). */
101 struct default_include
103 const char *fname; /* The name of the directory. */
104 const char *component; /* The component containing the directory
105 (see update_path in prefix.c) */
106 int cplusplus; /* Only look here if we're compiling C++. */
107 int cxx_aware; /* Includes in this directory don't need to
108 be wrapped in extern "C" when compiling
109 C++. */
112 #ifndef STANDARD_INCLUDE_COMPONENT
113 #define STANDARD_INCLUDE_COMPONENT 0
114 #endif
116 #ifdef CROSS_COMPILE
117 #undef LOCAL_INCLUDE_DIR
118 #undef SYSTEM_INCLUDE_DIR
119 #undef STANDARD_INCLUDE_DIR
120 #else
121 #undef CROSS_INCLUDE_DIR
122 #endif
124 static const struct default_include include_defaults_array[]
125 #ifdef INCLUDE_DEFAULTS
126 = INCLUDE_DEFAULTS;
127 #else
129 #ifdef GPLUSPLUS_INCLUDE_DIR
130 /* Pick up GNU C++ specific include files. */
131 { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 },
132 #endif
133 #ifdef LOCAL_INCLUDE_DIR
134 /* /usr/local/include comes before the fixincluded header files. */
135 { LOCAL_INCLUDE_DIR, 0, 0, 1 },
136 #endif
137 #ifdef GCC_INCLUDE_DIR
138 /* This is the dir for fixincludes and for gcc's private headers. */
139 { GCC_INCLUDE_DIR, "GCC", 0, 0 },
140 #endif
141 #ifdef CROSS_INCLUDE_DIR
142 /* One place the target system's headers might be. */
143 { CROSS_INCLUDE_DIR, "GCC", 0, 0 },
144 #endif
145 #ifdef TOOL_INCLUDE_DIR
146 /* Another place the target system's headers might be. */
147 { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1 },
148 #endif
149 #ifdef SYSTEM_INCLUDE_DIR
150 /* Some systems have an extra dir of include files. */
151 { SYSTEM_INCLUDE_DIR, 0, 0, 0 },
152 #endif
153 #ifdef STANDARD_INCLUDE_DIR
154 /* /usr/include comes dead last. */
155 { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0 },
156 #endif
157 { 0, 0, 0, 0 }
159 #endif /* no INCLUDE_DEFAULTS */
161 /* Internal structures and prototypes. */
163 /* A `struct pending_option' remembers one -D, -A, -U, -include, or -imacros
164 switch. There are four lists: one for -D and -U, one for -A, one
165 for -include, one for -imacros. `undef' is set for -U, clear for
166 -D, ignored for the others.
167 (Future: add an equivalent of -U for -A) */
169 typedef void (* cl_directive_handler) PARAMS ((cpp_reader *, const char *));
170 struct pending_option
172 struct pending_option *next;
173 const char *arg;
174 cl_directive_handler handler;
177 /* The `pending' structure accumulates all the options that are not
178 actually processed until we hit cpp_start_read. It consists of
179 several lists, one for each type of option. We keep both head and
180 tail pointers for quick insertion. */
181 struct cpp_pending
183 struct pending_option *directive_head, *directive_tail;
185 struct file_name_list *quote_head, *quote_tail;
186 struct file_name_list *brack_head, *brack_tail;
187 struct file_name_list *systm_head, *systm_tail;
188 struct file_name_list *after_head, *after_tail;
190 struct pending_option *imacros_head, *imacros_tail;
191 struct pending_option *include_head, *include_tail;
194 #ifdef __STDC__
195 #define APPEND(pend, list, elt) \
196 do { if (!(pend)->list##_head) (pend)->list##_head = (elt); \
197 else (pend)->list##_tail->next = (elt); \
198 (pend)->list##_tail = (elt); \
199 } while (0)
200 #else
201 #define APPEND(pend, list, elt) \
202 do { if (!(pend)->list/**/_head) (pend)->list/**/_head = (elt); \
203 else (pend)->list/**/_tail->next = (elt); \
204 (pend)->list/**/_tail = (elt); \
205 } while (0)
206 #endif
208 static void print_help PARAMS ((void));
209 static void path_include PARAMS ((cpp_reader *,
210 struct cpp_pending *,
211 char *, int));
212 static void initialize_builtins PARAMS ((cpp_reader *));
213 static void append_include_chain PARAMS ((cpp_reader *,
214 struct cpp_pending *,
215 char *, int, int));
216 static void merge_include_chains PARAMS ((struct cpp_options *));
218 static void dump_special_to_buffer PARAMS ((cpp_reader *, const char *));
219 static void initialize_dependency_output PARAMS ((cpp_reader *));
220 static void initialize_standard_includes PARAMS ((cpp_reader *));
221 static void new_pending_directive PARAMS ((struct cpp_options *,
222 const char *,
223 cl_directive_handler));
224 #ifdef HOST_EBCDIC
225 static int opt_comp PARAMS ((const void *, const void *));
226 #endif
227 static int parse_option PARAMS ((const char *));
228 static int handle_option PARAMS ((cpp_reader *, int, char **));
230 /* Fourth argument to append_include_chain: chain to use */
231 enum { QUOTE = 0, BRACKET, SYSTEM, AFTER };
233 /* If we have designated initializers (GCC >2.7, or C99) this table
234 can be initialized, constant data. Otherwise, it has to be filled
235 in at runtime. */
237 #if (GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L)
238 #define init_IStable() /* nothing */
239 #define ISTABLE const unsigned char _cpp_IStable[256] = {
240 #define END };
241 #define s(p, v) [p] = v,
242 #else
243 #define ISTABLE unsigned char _cpp_IStable[256] = { 0 }; \
244 static void init_IStable PARAMS ((void)) { \
245 unsigned char *x = _cpp_IStable;
246 #define END }
247 #define s(p, v) x[p] = v;
248 #endif
250 #define A(x) s(x, ISidnum|ISidstart)
251 #define N(x) s(x, ISidnum|ISnumstart)
252 #define H(x) s(x, IShspace|ISspace)
253 #define S(x) s(x, ISspace)
255 ISTABLE
256 A('_')
258 A('a') A('b') A('c') A('d') A('e') A('f') A('g') A('h') A('i')
259 A('j') A('k') A('l') A('m') A('n') A('o') A('p') A('q') A('r')
260 A('s') A('t') A('u') A('v') A('w') A('x') A('y') A('z')
262 A('A') A('B') A('C') A('D') A('E') A('F') A('G') A('H') A('I')
263 A('J') A('K') A('L') A('M') A('N') A('O') A('P') A('Q') A('R')
264 A('S') A('T') A('U') A('V') A('W') A('X') A('Y') A('Z')
266 N('1') N('2') N('3') N('4') N('5') N('6') N('7') N('8') N('9') N('0')
268 H(' ') H('\t') H('\v') H('\f')
270 S('\n')
273 #undef A
274 #undef N
275 #undef H
276 #undef S
277 #undef s
278 #undef ISTABLE
279 #undef END
281 /* Given a colon-separated list of file names PATH,
282 add all the names to the search path for include files. */
284 static void
285 path_include (pfile, pend, list, path)
286 cpp_reader *pfile;
287 struct cpp_pending *pend;
288 char *list;
289 int path;
291 char *p, *q, *name;
293 p = list;
297 /* Find the end of this name. */
298 q = p;
299 while (*q != 0 && *q != PATH_SEPARATOR) q++;
300 if (q == p)
302 /* An empty name in the path stands for the current directory. */
303 name = (char *) xmalloc (2);
304 name[0] = '.';
305 name[1] = 0;
307 else
309 /* Otherwise use the directory that is named. */
310 name = (char *) xmalloc (q - p + 1);
311 memcpy (name, p, q - p);
312 name[q - p] = 0;
315 append_include_chain (pfile, pend, name, path, 0);
317 /* Advance past this name. */
318 if (*q == 0)
319 break;
320 p = q + 1;
322 while (1);
325 /* Append DIR to include path PATH. DIR must be permanently allocated
326 and writable. */
327 static void
328 append_include_chain (pfile, pend, dir, path, cxx_aware)
329 cpp_reader *pfile;
330 struct cpp_pending *pend;
331 char *dir;
332 int path;
333 int cxx_aware;
335 struct file_name_list *new;
336 struct stat st;
337 unsigned int len;
339 _cpp_simplify_pathname (dir);
340 if (stat (dir, &st))
342 /* Dirs that don't exist are silently ignored. */
343 if (errno != ENOENT)
344 cpp_notice_from_errno (pfile, dir);
345 else if (CPP_OPTIONS (pfile)->verbose)
346 fprintf (stderr, _("ignoring nonexistent directory `%s'\n"), dir);
347 return;
350 if (!S_ISDIR (st.st_mode))
352 cpp_notice (pfile, "%s: Not a directory", dir);
353 return;
356 len = strlen (dir);
357 if (len > pfile->max_include_len)
358 pfile->max_include_len = len;
360 new = (struct file_name_list *) xmalloc (sizeof (struct file_name_list));
361 new->name = dir;
362 new->nlen = len;
363 new->ino = st.st_ino;
364 new->dev = st.st_dev;
365 if (path == SYSTEM)
366 new->sysp = cxx_aware ? 1 : 2;
367 else
368 new->sysp = 0;
369 new->name_map = NULL;
370 new->next = NULL;
371 new->alloc = NULL;
373 switch (path)
375 case QUOTE: APPEND (pend, quote, new); break;
376 case BRACKET: APPEND (pend, brack, new); break;
377 case SYSTEM: APPEND (pend, systm, new); break;
378 case AFTER: APPEND (pend, after, new); break;
382 /* Merge the four include chains together in the order quote, bracket,
383 system, after. Remove duplicate dirs (as determined by
384 INO_T_EQ()). The system_include and after_include chains are never
385 referred to again after this function; all access is through the
386 bracket_include path.
388 For the future: Check if the directory is empty (but
389 how?) and possibly preload the include hash. */
391 static void
392 merge_include_chains (opts)
393 struct cpp_options *opts;
395 struct file_name_list *prev, *cur, *other;
396 struct file_name_list *quote, *brack, *systm, *after;
397 struct file_name_list *qtail, *btail, *stail, *atail;
399 qtail = opts->pending->quote_tail;
400 btail = opts->pending->brack_tail;
401 stail = opts->pending->systm_tail;
402 atail = opts->pending->after_tail;
404 quote = opts->pending->quote_head;
405 brack = opts->pending->brack_head;
406 systm = opts->pending->systm_head;
407 after = opts->pending->after_head;
409 /* Paste together bracket, system, and after include chains. */
410 if (stail)
411 stail->next = after;
412 else
413 systm = after;
414 if (btail)
415 btail->next = systm;
416 else
417 brack = systm;
419 /* This is a bit tricky.
420 First we drop dupes from the quote-include list.
421 Then we drop dupes from the bracket-include list.
422 Finally, if qtail and brack are the same directory,
423 we cut out qtail.
425 We can't just merge the lists and then uniquify them because
426 then we may lose directories from the <> search path that should
427 be there; consider -Ifoo -Ibar -I- -Ifoo -Iquux. It is however
428 safe to treat -Ibar -Ifoo -I- -Ifoo -Iquux as if written
429 -Ibar -I- -Ifoo -Iquux.
431 Note that this algorithm is quadratic in the number of -I switches,
432 which is acceptable since there aren't usually that many of them. */
434 for (cur = quote, prev = NULL; cur; cur = cur->next)
436 for (other = quote; other != cur; other = other->next)
437 if (INO_T_EQ (cur->ino, other->ino)
438 && cur->dev == other->dev)
440 if (opts->verbose)
441 fprintf (stderr, _("ignoring duplicate directory `%s'\n"),
442 cur->name);
444 prev->next = cur->next;
445 free (cur->name);
446 free (cur);
447 cur = prev;
448 break;
450 prev = cur;
452 qtail = prev;
454 for (cur = brack; cur; cur = cur->next)
456 for (other = brack; other != cur; other = other->next)
457 if (INO_T_EQ (cur->ino, other->ino)
458 && cur->dev == other->dev)
460 if (opts->verbose)
461 fprintf (stderr, _("ignoring duplicate directory `%s'\n"),
462 cur->name);
464 prev->next = cur->next;
465 free (cur->name);
466 free (cur);
467 cur = prev;
468 break;
470 prev = cur;
473 if (quote)
475 if (INO_T_EQ (qtail->ino, brack->ino) && qtail->dev == brack->dev)
477 if (quote == qtail)
479 if (opts->verbose)
480 fprintf (stderr, _("ignoring duplicate directory `%s'\n"),
481 quote->name);
483 free (quote->name);
484 free (quote);
485 quote = brack;
487 else
489 cur = quote;
490 while (cur->next != qtail)
491 cur = cur->next;
492 cur->next = brack;
493 if (opts->verbose)
494 fprintf (stderr, _("ignoring duplicate directory `%s'\n"),
495 qtail->name);
497 free (qtail->name);
498 free (qtail);
501 else
502 qtail->next = brack;
504 else
505 quote = brack;
507 opts->quote_include = quote;
508 opts->bracket_include = brack;
512 /* Write out a #define command for the special named MACRO_NAME
513 to PFILE's token_buffer. */
515 static void
516 dump_special_to_buffer (pfile, macro_name)
517 cpp_reader *pfile;
518 const char *macro_name;
520 static const char define_directive[] = "#define ";
521 int macro_name_length = strlen (macro_name);
522 output_line_command (pfile, same_file);
523 CPP_RESERVE (pfile, sizeof(define_directive) + macro_name_length);
524 CPP_PUTS_Q (pfile, define_directive, sizeof(define_directive)-1);
525 CPP_PUTS_Q (pfile, macro_name, macro_name_length);
526 CPP_PUTC_Q (pfile, ' ');
527 cpp_expand_to_buffer (pfile, macro_name, macro_name_length);
528 CPP_PUTC (pfile, '\n');
531 /* Initialize a cpp_options structure. */
532 void
533 cpp_options_init (opts)
534 cpp_options *opts;
536 memset ((char *) opts, 0, sizeof (struct cpp_options));
538 opts->dollars_in_ident = 1;
539 opts->cplusplus_comments = 1;
540 opts->warn_import = 1;
541 opts->discard_comments = 1;
543 opts->pending =
544 (struct cpp_pending *) xcalloc (1, sizeof (struct cpp_pending));
547 /* Initialize a cpp_reader structure. */
548 void
549 cpp_reader_init (pfile)
550 cpp_reader *pfile;
552 memset ((char *) pfile, 0, sizeof (cpp_reader));
554 pfile->token_buffer_size = 200;
555 pfile->token_buffer = (U_CHAR *) xmalloc (pfile->token_buffer_size);
556 CPP_SET_WRITTEN (pfile, 0);
558 _cpp_init_macro_hash (pfile);
559 _cpp_init_include_hash (pfile);
562 /* Free resources used by PFILE.
563 This is the cpp_reader 'finalizer' or 'destructor' (in C++ terminology). */
564 void
565 cpp_cleanup (pfile)
566 cpp_reader *pfile;
568 while (CPP_BUFFER (pfile) != NULL)
569 cpp_pop_buffer (pfile);
571 if (pfile->token_buffer)
573 free (pfile->token_buffer);
574 pfile->token_buffer = NULL;
577 if (pfile->input_buffer)
579 free (pfile->input_buffer);
580 free (pfile->input_speccase);
581 pfile->input_buffer = pfile->input_speccase = NULL;
582 pfile->input_buffer_len = 0;
585 if (pfile->deps)
586 deps_free (pfile->deps);
588 htab_delete (pfile->hashtab);
589 htab_delete (pfile->all_include_files);
593 /* This structure defines one built-in macro. A node of type TYPE will
594 be entered in the macro hash table under the name NAME, with value
595 VALUE (if any). FLAGS tweaks the behavior a little:
596 DUMP write debug info for this macro
597 STDC define only if not -traditional
598 ULP value is the global user_label_prefix (which can't be
599 put directly into the table).
602 struct builtin
604 const char *name;
605 const char *value;
606 unsigned short type;
607 unsigned short flags;
609 #define DUMP 0x01
610 #define STDC 0x02
611 #define VERS 0x04
612 #define ULP 0x08
614 static const struct builtin builtin_array[] =
616 { "__TIME__", 0, T_TIME, DUMP },
617 { "__DATE__", 0, T_DATE, DUMP },
618 { "__FILE__", 0, T_FILE, 0 },
619 { "__BASE_FILE__", 0, T_BASE_FILE, 0 },
620 { "__LINE__", 0, T_SPECLINE, 0 },
621 { "__INCLUDE_LEVEL__", 0, T_INCLUDE_LEVEL, 0 },
622 { "__VERSION__", 0, T_VERSION, DUMP|VERS },
623 { "__STDC__", 0, T_STDC, DUMP|STDC },
625 { "__USER_LABEL_PREFIX__", 0, T_CONST, ULP },
626 { "__REGISTER_PREFIX__", REGISTER_PREFIX, T_CONST, 0 },
627 { "__HAVE_BUILTIN_SETJMP__", "1", T_CONST, 0 },
628 #ifndef NO_BUILTIN_SIZE_TYPE
629 { "__SIZE_TYPE__", SIZE_TYPE, T_CONST, DUMP },
630 #endif
631 #ifndef NO_BUILTIN_PTRDIFF_TYPE
632 { "__PTRDIFF_TYPE__", PTRDIFF_TYPE, T_CONST, DUMP },
633 #endif
634 #ifndef NO_BUILTIN_WCHAR_TYPE
635 { "__WCHAR_TYPE__", WCHAR_TYPE, T_CONST, DUMP },
636 #endif
637 { 0, 0, 0, 0 }
640 /* Subroutine of cpp_start_read; reads the builtins table above and
641 enters the macros into the hash table. */
642 static void
643 initialize_builtins (pfile)
644 cpp_reader *pfile;
646 int len;
647 const struct builtin *b;
648 const char *val;
649 HASHNODE *hp;
650 for(b = builtin_array; b->name; b++)
652 if ((b->flags & STDC) && CPP_TRADITIONAL (pfile))
653 continue;
655 if (b->flags & ULP)
656 val = user_label_prefix;
657 else if (b->flags & VERS)
658 val = version_string;
659 else
660 val = b->value;
662 len = strlen (b->name);
663 hp = _cpp_make_hashnode (b->name, len, b->type, -1);
664 hp->value.cpval = val;
665 *(htab_find_slot (pfile->hashtab, (void *)hp, 1)) = hp;
667 if ((b->flags & DUMP) && CPP_OPTIONS (pfile)->debug_output)
668 dump_special_to_buffer (pfile, b->name);
672 #undef DUMP
673 #undef STDC
674 #undef VERS
675 #undef ULP
677 /* Another subroutine of cpp_start_read. This one sets up to do
678 dependency-file output. */
679 static void
680 initialize_dependency_output (pfile)
681 cpp_reader *pfile;
683 cpp_options *opts = CPP_OPTIONS (pfile);
684 char *spec, *s, *output_file;
686 /* Either of two environment variables can specify output of deps.
687 Its value is either "OUTPUT_FILE" or "OUTPUT_FILE DEPS_TARGET",
688 where OUTPUT_FILE is the file to write deps info to
689 and DEPS_TARGET is the target to mention in the deps. */
691 if (opts->print_deps == 0)
693 spec = getenv ("DEPENDENCIES_OUTPUT");
694 if (spec)
695 opts->print_deps = 1;
696 else
698 spec = getenv ("SUNPRO_DEPENDENCIES");
699 if (spec)
700 opts->print_deps = 2;
701 else
702 return;
705 /* Find the space before the DEPS_TARGET, if there is one. */
706 s = strchr (spec, ' ');
707 if (s)
709 opts->deps_target = s + 1;
710 output_file = (char *) xmalloc (s - spec + 1);
711 memcpy (output_file, spec, s - spec);
712 output_file[s - spec] = 0;
714 else
716 opts->deps_target = 0;
717 output_file = spec;
720 opts->deps_file = output_file;
721 opts->print_deps_append = 1;
724 pfile->deps = deps_init ();
726 /* Print the expected object file name as the target of this Make-rule. */
727 if (opts->deps_target)
728 deps_add_target (pfile->deps, opts->deps_target);
729 else if (*opts->in_fname == 0)
730 deps_add_target (pfile->deps, "-");
731 else
732 deps_calc_target (pfile->deps, opts->in_fname);
734 if (opts->in_fname)
735 deps_add_dep (pfile->deps, opts->in_fname);
738 /* And another subroutine. This one sets up the standard include path. */
739 static void
740 initialize_standard_includes (pfile)
741 cpp_reader *pfile;
743 cpp_options *opts = CPP_OPTIONS (pfile);
744 char *path;
745 const struct default_include *p;
746 const char *specd_prefix = opts->include_prefix;
748 /* Several environment variables may add to the include search path.
749 CPATH specifies an additional list of directories to be searched
750 as if specified with -I, while C_INCLUDE_PATH, CPLUS_INCLUDE_PATH,
751 etc. specify an additional list of directories to be searched as
752 if specified with -isystem, for the language indicated. */
754 GET_ENV_PATH_LIST (path, "CPATH");
755 if (path != 0 && *path != 0)
756 path_include (pfile, opts->pending, path, BRACKET);
758 switch ((opts->objc << 1) + opts->cplusplus)
760 case 0:
761 GET_ENV_PATH_LIST (path, "C_INCLUDE_PATH");
762 break;
763 case 1:
764 GET_ENV_PATH_LIST (path, "CPLUS_INCLUDE_PATH");
765 break;
766 case 2:
767 GET_ENV_PATH_LIST (path, "OBJC_INCLUDE_PATH");
768 break;
769 case 3:
770 GET_ENV_PATH_LIST (path, "OBJCPLUS_INCLUDE_PATH");
771 break;
773 if (path != 0 && *path != 0)
774 path_include (pfile, opts->pending, path, SYSTEM);
776 /* Search "translated" versions of GNU directories.
777 These have /usr/local/lib/gcc... replaced by specd_prefix. */
778 if (specd_prefix != 0)
780 char *default_prefix = alloca (sizeof GCC_INCLUDE_DIR - 7);
781 /* Remove the `include' from /usr/local/lib/gcc.../include.
782 GCC_INCLUDE_DIR will always end in /include. */
783 int default_len = sizeof GCC_INCLUDE_DIR - 8;
784 int specd_len = strlen (specd_prefix);
786 memcpy (default_prefix, GCC_INCLUDE_DIR, default_len);
787 default_prefix[default_len] = '\0';
789 for (p = include_defaults_array; p->fname; p++)
791 /* Some standard dirs are only for C++. */
792 if (!p->cplusplus
793 || (opts->cplusplus
794 && !opts->no_standard_cplusplus_includes))
796 /* Does this dir start with the prefix? */
797 if (!strncmp (p->fname, default_prefix, default_len))
799 /* Yes; change prefix and add to search list. */
800 int flen = strlen (p->fname);
801 int this_len = specd_len + flen - default_len;
802 char *str = (char *) xmalloc (this_len + 1);
803 memcpy (str, specd_prefix, specd_len);
804 memcpy (str + specd_len,
805 p->fname + default_len,
806 flen - default_len + 1);
808 append_include_chain (pfile, opts->pending,
809 str, SYSTEM, p->cxx_aware);
815 /* Search ordinary names for GNU include directories. */
816 for (p = include_defaults_array; p->fname; p++)
818 /* Some standard dirs are only for C++. */
819 if (!p->cplusplus
820 || (opts->cplusplus
821 && !opts->no_standard_cplusplus_includes))
823 /* XXX Potential memory leak! */
824 char *str = xstrdup (update_path (p->fname, p->component));
825 append_include_chain (pfile, opts->pending, str, SYSTEM,
826 p->cxx_aware);
831 /* This is called after options have been processed.
832 * Check options for consistency, and setup for processing input
833 * from the file named FNAME. (Use standard input if FNAME==NULL.)
834 * Return 1 on success, 0 on failure.
838 cpp_start_read (pfile, fname)
839 cpp_reader *pfile;
840 const char *fname;
842 struct cpp_options *opts = CPP_OPTIONS (pfile);
843 struct pending_option *p, *q;
845 /* -MG doesn't select the form of output and must be specified with one of
846 -M or -MM. -MG doesn't make sense with -MD or -MMD since they don't
847 inhibit compilation. */
848 if (opts->print_deps_missing_files
849 && (opts->print_deps == 0 || !opts->no_output))
851 cpp_fatal (pfile, "-MG must be specified with one of -M or -MM");
852 return 0;
855 /* Chill should not be used with -trigraphs. */
856 if (opts->chill && opts->trigraphs)
858 cpp_warning (pfile, "-lang-chill and -trigraphs are mutually exclusive");
859 opts->trigraphs = 0;
862 /* Set this if it hasn't been set already. */
863 if (user_label_prefix == NULL)
864 user_label_prefix = USER_LABEL_PREFIX;
866 /* Don't bother trying to do macro expansion if we've already done
867 preprocessing. */
868 if (opts->preprocessed)
869 pfile->no_macro_expand++;
871 /* Set up the IStable. This doesn't do anything if we were compiled
872 with a compiler that supports C99 designated initializers. */
873 init_IStable ();
875 /* Set up the include search path now. */
876 if (! opts->no_standard_includes)
877 initialize_standard_includes (pfile);
879 merge_include_chains (opts);
881 /* With -v, print the list of dirs to search. */
882 if (opts->verbose)
884 struct file_name_list *l;
885 fprintf (stderr, _("#include \"...\" search starts here:\n"));
886 for (l = opts->quote_include; l; l = l->next)
888 if (l == opts->bracket_include)
889 fprintf (stderr, _("#include <...> search starts here:\n"));
890 fprintf (stderr, " %s\n", l->name);
892 fprintf (stderr, _("End of search list.\n"));
895 initialize_dependency_output (pfile);
897 /* Open the main input file. This must be done before -D processing
898 so we have a buffer to stand on. */
899 if (opts->in_fname == NULL || *opts->in_fname == 0)
901 opts->in_fname = fname;
902 if (opts->in_fname == NULL)
903 opts->in_fname = "";
906 if (!cpp_read_file (pfile, fname))
907 return 0;
909 /* -D and friends may produce output, which should be identified
910 as line 0. */
912 CPP_BUFFER (pfile)->lineno = 0;
914 /* Install __LINE__, etc. */
915 initialize_builtins (pfile);
917 /* Do -U's, -D's and -A's in the order they were seen. */
918 p = opts->pending->directive_head;
919 while (p)
921 (*p->handler) (pfile, p->arg);
922 q = p->next;
923 free (p);
924 p = q;
927 opts->done_initializing = 1;
928 CPP_BUFFER (pfile)->lineno = 1;
930 if (opts->preprocessed)
931 /* If we've already processed this code, we want to trust the #line
932 directives in the input. But we still need to update our line
933 counter accordingly. */
934 pfile->lineno = CPP_BUFFER (pfile)->lineno;
935 else
936 output_line_command (pfile, same_file);
937 pfile->only_seen_white = 2;
939 /* The -imacros files can be scanned now, but the -include files
940 have to be pushed onto the include stack and processed later,
941 in the main loop calling cpp_get_token. */
943 opts->no_output++;
944 p = opts->pending->imacros_head;
945 while (p)
947 if (cpp_read_file (pfile, p->arg))
948 cpp_scan_buffer (pfile);
950 q = p->next;
951 free (p);
952 p = q;
954 opts->no_output--;
956 p = opts->pending->include_head;
957 while (p)
959 if (cpp_read_file (pfile, p->arg))
960 output_line_command (pfile, enter_file);
962 q = p->next;
963 free (p);
964 p = q;
967 free (opts->pending);
968 opts->pending = NULL;
970 return 1;
973 /* This is called at the end of preprocessing. It pops the
974 last buffer and writes dependency output. It should also
975 clear macro definitions, such that you could call cpp_start_read
976 with a new filename to restart processing. */
977 void
978 cpp_finish (pfile)
979 cpp_reader *pfile;
981 struct cpp_options *opts = CPP_OPTIONS (pfile);
983 if (CPP_PREV_BUFFER (CPP_BUFFER (pfile)))
984 cpp_ice (pfile, "buffers still stacked in cpp_finish");
985 while (CPP_BUFFER (pfile))
986 cpp_pop_buffer (pfile);
988 /* Don't write the deps file if preprocessing has failed. */
989 if (opts->print_deps && pfile->errors == 0)
991 /* Stream on which to print the dependency information. */
992 FILE *deps_stream = 0;
994 const char *deps_mode = opts->print_deps_append ? "a" : "w";
995 if (opts->deps_file == 0)
996 deps_stream = stdout;
997 else if ((deps_stream = fopen (opts->deps_file, deps_mode)) == 0)
998 cpp_notice_from_errno (pfile, opts->deps_file);
1000 if (deps_stream)
1002 deps_write (pfile->deps, deps_stream, 72);
1003 if (opts->deps_file)
1005 if (ferror (deps_stream) || fclose (deps_stream) != 0)
1006 cpp_fatal (pfile, "I/O error on output");
1011 if (opts->dump_macros == dump_only)
1012 _cpp_dump_macro_hash (pfile);
1015 static void
1016 new_pending_directive (opts, text, handler)
1017 struct cpp_options *opts;
1018 const char *text;
1019 cl_directive_handler handler;
1021 struct pending_option *o = (struct pending_option *)
1022 xmalloc (sizeof (struct pending_option));
1024 o->arg = text;
1025 o->next = NULL;
1026 o->handler = handler;
1027 APPEND (opts->pending, directive, o);
1030 enum opt_code
1032 OPT_stdin_stdout = 0, OPT_dollar, OPT_plus,
1033 OPT__help, OPT__version,
1034 OPT_A, OPT_C, OPT_D, OPT_H, OPT_I, OPT_M,
1035 OPT_MD, OPT_MG, OPT_MM, OPT_MMD,
1036 OPT_P, OPT_U, OPT_W,
1037 OPT_d,
1038 OPT_fleading_underscore, OPT_fno_leading_underscore,
1039 OPT_fpreprocessed, OPT_fno_preprocessed,
1040 OPT_g, OPT_h,
1041 OPT_idirafter, OPT_imacros, OPT_include,
1042 OPT_iprefix, OPT_isystem, OPT_iwithprefix, OPT_iwithprefixbefore,
1043 OPT_lang_asm, OPT_lang_c, OPT_lang_cplusplus, OPT_lang_c89,
1044 OPT_lang_chill, OPT_lang_fortran, OPT_lang_objc, OPT_lang_objcplusplus,
1045 OPT_nostdinc, OPT_nostdincplusplus,
1046 OPT_o,
1047 OPT_pedantic, OPT_pedantic_errors, OPT_remap,
1048 OPT_std_c89, OPT_std_c99, OPT_std_c9x, OPT_std_gnu89, OPT_std_gnu99,
1049 OPT_std_gnu9x, OPT_std_iso9899_1990, OPT_std_iso9899_199409,
1050 OPT_std_iso9899_1999, OPT_std_iso9899_199x,
1051 OPT_traditional, OPT_trigraphs,
1052 OPT_v, OPT_w,
1053 N_OPTS
1056 struct cl_option
1058 const char *opt_text;
1059 const char *msg;
1060 size_t opt_len;
1061 enum opt_code opt_code;
1064 /* Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string");
1065 I.e. a const string initializer with parens around it. That is
1066 what N_("string") resolves to, so we make no_* be macros instead. */
1067 #define no_arg N_("Argument missing after `%s' option")
1068 #define no_ass N_("Assertion missing after `%s' option")
1069 #define no_dir N_("Directory name missing after `%s' option")
1070 #define no_fil N_("File name missing after `%s' option")
1071 #define no_mac N_("Macro name missing after `%s' option")
1072 #define no_pth N_("Path name missing after `%s' option")
1074 /* This list must be ASCII sorted. Make enum order above match this. */
1075 #define DEF_OPT(text, msg, code) {text, msg, sizeof(text) - 1, code}
1077 #ifdef HOST_EBCDIC
1078 static struct cl_option cl_options[] =
1079 #else
1080 static const struct cl_option cl_options[] =
1081 #endif
1083 DEF_OPT("", 0, OPT_stdin_stdout),
1084 DEF_OPT("$", 0, OPT_dollar),
1085 DEF_OPT("+", 0, OPT_plus),
1086 DEF_OPT("-help", 0, OPT__help),
1087 DEF_OPT("-version", 0, OPT__version),
1088 DEF_OPT("A", no_ass, OPT_A),
1089 DEF_OPT("C", 0, OPT_C),
1090 DEF_OPT("D", no_mac, OPT_D),
1091 DEF_OPT("H", 0, OPT_H),
1092 DEF_OPT("I", no_dir, OPT_I),
1093 DEF_OPT("M", 0, OPT_M),
1094 DEF_OPT("MD", no_fil, OPT_MD),
1095 DEF_OPT("MG", 0, OPT_MG),
1096 DEF_OPT("MM", 0, OPT_MM),
1097 DEF_OPT("MMD", no_fil, OPT_MMD),
1098 DEF_OPT("P", 0, OPT_P),
1099 DEF_OPT("U", no_mac, OPT_U),
1100 /* NB: Immed arg only, and not reqd */
1101 DEF_OPT("W", no_arg, OPT_W),
1102 DEF_OPT("d", no_arg, OPT_d),
1103 DEF_OPT("fleading-underscore", 0, OPT_fleading_underscore),
1104 DEF_OPT("fno-leading-underscore", 0, OPT_fno_leading_underscore),
1105 DEF_OPT("fpreprocessed", 0, OPT_fpreprocessed),
1106 DEF_OPT("fno-preprocessed", 0, OPT_fno_preprocessed),
1107 /* NB: Immed arg only, and not reqd */
1108 DEF_OPT("g", no_arg, OPT_g),
1109 DEF_OPT("h", 0, OPT_h),
1110 DEF_OPT("idirafter", no_dir, OPT_idirafter),
1111 DEF_OPT("imacros", no_fil, OPT_imacros),
1112 DEF_OPT("include", no_fil, OPT_include),
1113 DEF_OPT("iprefix", no_pth, OPT_iprefix),
1114 DEF_OPT("isystem", no_dir, OPT_isystem),
1115 DEF_OPT("iwithprefix", no_dir, OPT_iwithprefix),
1116 DEF_OPT("iwithprefixbefore", no_dir, OPT_iwithprefixbefore),
1117 DEF_OPT("lang-asm", 0, OPT_lang_asm),
1118 DEF_OPT("lang-c", 0, OPT_lang_c),
1119 DEF_OPT("lang-c++", 0, OPT_lang_cplusplus),
1120 DEF_OPT("lang-c89", 0, OPT_lang_c89),
1121 DEF_OPT("lang-chill", 0, OPT_lang_chill),
1122 DEF_OPT("lang-fortran", 0, OPT_lang_fortran),
1123 DEF_OPT("lang-objc", 0, OPT_lang_objc),
1124 DEF_OPT("lang-objc++", 0, OPT_lang_objcplusplus),
1125 DEF_OPT("nostdinc", 0, OPT_nostdinc),
1126 DEF_OPT("nostdinc++", 0, OPT_nostdincplusplus),
1127 DEF_OPT("o", no_fil, OPT_o),
1128 DEF_OPT("pedantic", 0, OPT_pedantic),
1129 DEF_OPT("pedantic-errors", 0, OPT_pedantic_errors),
1130 DEF_OPT("remap", 0, OPT_remap),
1131 DEF_OPT("std=c89", 0, OPT_std_c89),
1132 DEF_OPT("std=c99", 0, OPT_std_c99),
1133 DEF_OPT("std=c9x", 0, OPT_std_c9x),
1134 DEF_OPT("std=gnu89", 0, OPT_std_gnu89),
1135 DEF_OPT("std=gnu99", 0, OPT_std_gnu99),
1136 DEF_OPT("std=gnu9x", 0, OPT_std_gnu9x),
1137 DEF_OPT("std=iso9899:1990", 0, OPT_std_iso9899_1990),
1138 DEF_OPT("std=iso9899:199409", 0, OPT_std_iso9899_199409),
1139 DEF_OPT("std=iso9899:1999", 0, OPT_std_iso9899_1999),
1140 DEF_OPT("std=iso9899:199x", 0, OPT_std_iso9899_199x),
1141 DEF_OPT("traditional", 0, OPT_traditional),
1142 DEF_OPT("trigraphs", 0, OPT_trigraphs),
1143 DEF_OPT("v", 0, OPT_v),
1144 DEF_OPT("w", 0, OPT_w)
1146 #undef DEF_OPT
1148 /* Perform a binary search to find which, if any, option the given
1149 command-line matches. Returns its index in the option array,
1150 negative on failure. Complications arise since some options can be
1151 suffixed with an argument, and multiple complete matches can occur,
1152 e.g. -iwithprefix and -iwithprefixbefore. Moreover, we want to
1153 accept options beginning with -g and -W that we do not recognise,
1154 but not to swallow any subsequent command line argument; these are
1155 handled as special cases in cpp_handle_option */
1156 static int
1157 parse_option (input)
1158 const char *input;
1160 unsigned int md, mn, mx;
1161 size_t opt_len;
1162 int comp;
1164 mn = 0;
1165 mx = N_OPTS;
1167 while (mx > mn)
1169 md = (mn + mx) / 2;
1171 opt_len = cl_options[md].opt_len;
1172 comp = strncmp (input, cl_options[md].opt_text, opt_len);
1174 if (comp > 0)
1175 mn = md + 1;
1176 else if (comp < 0)
1177 mx = md;
1178 else
1180 if (input[opt_len] == '\0')
1181 return md;
1182 /* We were passed more text. If the option takes an argument,
1183 we may match a later option or we may have been passed the
1184 argument. The longest possible option match succeeds.
1185 If the option takes no arguments we have not matched and
1186 continue the search (e.g. input="stdc++" match was "stdc") */
1187 mn = md + 1;
1188 if (cl_options[md].msg)
1190 /* Scan forwards. If we get an exact match, return it.
1191 Otherwise, return the longest option-accepting match.
1192 This loops no more than twice with current options */
1193 mx = md;
1194 for (; mn < N_OPTS; mn++)
1196 opt_len = cl_options[mn].opt_len;
1197 if (strncmp (input, cl_options[mn].opt_text, opt_len))
1198 break;
1199 if (input[opt_len] == '\0')
1200 return mn;
1201 if (cl_options[mn].msg)
1202 mx = mn;
1204 return mx;
1209 return -1;
1212 /* Handle one command-line option in (argc, argv).
1213 Can be called multiple times, to handle multiple sets of options.
1214 Returns number of strings consumed. */
1216 static int
1217 handle_option (pfile, argc, argv)
1218 cpp_reader *pfile;
1219 int argc;
1220 char **argv;
1222 struct cpp_options *opts = CPP_OPTIONS (pfile);
1223 int i = 0;
1225 if (argv[i][0] != '-')
1227 if (opts->out_fname != NULL)
1229 print_help ();
1230 cpp_fatal (pfile, "Too many arguments");
1232 else if (opts->in_fname != NULL)
1233 opts->out_fname = argv[i];
1234 else
1235 opts->in_fname = argv[i];
1237 else
1239 enum opt_code opt_code;
1240 int opt_index;
1241 const char *arg = 0;
1243 /* Skip over '-' */
1244 opt_index = parse_option (&argv[i][1]);
1245 if (opt_index < 0)
1246 return i;
1248 opt_code = cl_options[opt_index].opt_code;
1249 if (cl_options[opt_index].msg)
1251 arg = &argv[i][cl_options[opt_index].opt_len + 1];
1253 /* Yuk. Special case for -g and -W as they must not swallow
1254 up any following argument. If this becomes common, add
1255 another field to the cl_options table */
1256 if (arg[0] == '\0' && !(opt_code == OPT_g || opt_code == OPT_W))
1258 arg = argv[++i];
1259 if (!arg)
1261 cpp_fatal (pfile, _(cl_options[opt_index].msg), argv[i - 1]);
1262 return argc;
1267 switch (opt_code)
1269 case N_OPTS: /* shut GCC up */
1270 break;
1271 case OPT_fleading_underscore:
1272 user_label_prefix = "_";
1273 break;
1274 case OPT_fno_leading_underscore:
1275 user_label_prefix = "";
1276 break;
1277 case OPT_fpreprocessed:
1278 opts->preprocessed = 1;
1279 break;
1280 case OPT_fno_preprocessed:
1281 opts->preprocessed = 0;
1282 break;
1283 case OPT_w:
1284 opts->inhibit_warnings = 1;
1285 break;
1286 case OPT_g: /* Silently ignore anything but -g3 */
1287 if (!strcmp(&argv[i][2], "3"))
1288 opts->debug_output = 1;
1289 break;
1290 case OPT_h:
1291 case OPT__help:
1292 print_help ();
1293 exit (0); /* XXX */
1294 break;
1295 case OPT__version:
1296 fprintf (stderr, _("GNU CPP version %s (cpplib)\n"), version_string);
1297 exit (0); /* XXX */
1298 break;
1299 case OPT_C:
1300 opts->discard_comments = 0;
1301 break;
1302 case OPT_P:
1303 opts->no_line_commands = 1;
1304 break;
1305 case OPT_dollar: /* Don't include $ in identifiers. */
1306 opts->dollars_in_ident = 0;
1307 break;
1308 case OPT_H:
1309 opts->print_include_names = 1;
1310 break;
1311 case OPT_D:
1312 new_pending_directive (opts, arg, cpp_define);
1313 break;
1314 case OPT_pedantic_errors:
1315 opts->pedantic_errors = 1;
1316 /* fall through */
1317 case OPT_pedantic:
1318 opts->pedantic = 1;
1319 break;
1320 case OPT_traditional:
1321 opts->traditional = 1;
1322 opts->cplusplus_comments = 0;
1323 opts->trigraphs = 0;
1324 opts->warn_trigraphs = 0;
1325 break;
1326 case OPT_trigraphs:
1327 opts->trigraphs = 1;
1328 break;
1329 case OPT_plus:
1330 opts->cplusplus = 1;
1331 opts->cplusplus_comments = 1;
1332 break;
1333 case OPT_remap:
1334 opts->remap = 1;
1335 break;
1336 case OPT_iprefix:
1337 opts->include_prefix = arg;
1338 opts->include_prefix_len = strlen (arg);
1339 break;
1340 case OPT_lang_c:
1341 opts->cplusplus = 0, opts->cplusplus_comments = 1;
1342 opts->c89 = 0, opts->c99 = 1, opts->objc = 0;
1343 break;
1344 case OPT_lang_c89:
1345 opts->cplusplus = 0, opts->cplusplus_comments = 0;
1346 opts->c89 = 1, opts->c99 = 0, opts->objc = 0;
1347 opts->trigraphs = 1;
1348 new_pending_directive (opts, "__STRICT_ANSI__", cpp_define);
1349 break;
1350 case OPT_lang_cplusplus:
1351 opts->cplusplus = 1, opts->cplusplus_comments = 1;
1352 opts->c89 = 0, opts->c99 = 0, opts->objc = 0;
1353 break;
1354 case OPT_lang_objc:
1355 case OPT_lang_objcplusplus:
1356 opts->cplusplus = opt_code == OPT_lang_objcplusplus;
1357 opts->cplusplus_comments = 1;
1358 opts->c89 = 0, opts->c99 = 0, opts->objc = 1;
1359 break;
1360 case OPT_lang_asm:
1361 opts->lang_asm = 1;
1362 break;
1363 case OPT_lang_fortran:
1364 opts->lang_fortran = 1, opts->cplusplus_comments = 0;
1365 break;
1366 case OPT_lang_chill:
1367 opts->objc = 0, opts->cplusplus = 0;
1368 opts->chill = 1, opts->traditional = 1;
1369 break;
1370 case OPT_nostdinc:
1371 /* -nostdinc causes no default include directories.
1372 You must specify all include-file directories with -I. */
1373 opts->no_standard_includes = 1;
1374 break;
1375 case OPT_nostdincplusplus:
1376 /* -nostdinc++ causes no default C++-specific include directories. */
1377 opts->no_standard_cplusplus_includes = 1;
1378 break;
1379 case OPT_std_gnu89:
1380 opts->cplusplus = 0, opts->cplusplus_comments = 1;
1381 opts->c89 = 1, opts->c99 = 0, opts->objc = 0;
1382 break;
1383 case OPT_std_gnu9x:
1384 case OPT_std_gnu99:
1385 opts->cplusplus = 0, opts->cplusplus_comments = 1;
1386 opts->c89 = 0, opts->c99 = 1, opts->objc = 0;
1387 new_pending_directive (opts, "__STDC_VERSION__=199901L", cpp_define);
1388 break;
1389 case OPT_std_iso9899_199409:
1390 new_pending_directive (opts, "__STDC_VERSION__=199409L", cpp_define);
1391 /* Fall through */
1392 case OPT_std_iso9899_1990:
1393 case OPT_std_c89:
1394 opts->cplusplus = 0, opts->cplusplus_comments = 0;
1395 opts->c89 = 1, opts->c99 = 0, opts->objc = 0;
1396 opts->trigraphs = 1;
1397 new_pending_directive (opts, "__STRICT_ANSI__", cpp_define);
1398 break;
1399 case OPT_std_iso9899_199x:
1400 case OPT_std_iso9899_1999:
1401 case OPT_std_c9x:
1402 case OPT_std_c99:
1403 opts->cplusplus = 0, opts->cplusplus_comments = 1;
1404 opts->c89 = 0, opts->c99 = 1, opts->objc = 0;
1405 opts->trigraphs = 1;
1406 new_pending_directive (opts, "__STRICT_ANSI__", cpp_define);
1407 new_pending_directive (opts, "__STDC_VERSION__=199901L", cpp_define);
1408 break;
1409 case OPT_o:
1410 if (opts->out_fname != NULL)
1412 cpp_fatal (pfile, "Output filename specified twice");
1413 return argc;
1415 opts->out_fname = arg;
1416 if (!strcmp (opts->out_fname, "-"))
1417 opts->out_fname = "";
1418 break;
1419 case OPT_v:
1420 fprintf (stderr, _("GNU CPP version %s (cpplib)\n"), version_string);
1421 #ifdef TARGET_VERSION
1422 TARGET_VERSION;
1423 #endif
1424 fputc ('\n', stderr);
1425 opts->verbose = 1;
1426 break;
1427 case OPT_stdin_stdout:
1428 /* JF handle '-' as file name meaning stdin or stdout */
1429 if (opts->in_fname == NULL)
1430 opts->in_fname = "";
1431 else if (opts->out_fname == NULL)
1432 opts->out_fname = "";
1433 break;
1434 case OPT_d:
1435 /* Args to -d specify what parts of macros to dump.
1436 Silently ignore unrecognised options; they may
1437 be aimed at the compiler proper. */
1439 char c;
1441 while ((c = *arg++) != '\0')
1442 switch (c)
1444 case 'M':
1445 opts->dump_macros = dump_only;
1446 opts->no_output = 1;
1447 break;
1448 case 'N':
1449 opts->dump_macros = dump_names;
1450 break;
1451 case 'D':
1452 opts->dump_macros = dump_definitions;
1453 break;
1454 case 'I':
1455 opts->dump_includes = 1;
1456 break;
1459 break;
1460 /* The style of the choices here is a bit mixed.
1461 The chosen scheme is a hybrid of keeping all options in one string
1462 and specifying each option in a separate argument:
1463 -M|-MM|-MD file|-MMD file [-MG]. An alternative is:
1464 -M|-MM|-MD file|-MMD file|-MG|-MMG; or more concisely:
1465 -M[M][G][D file]. This is awkward to handle in specs, and is not
1466 as extensible. */
1467 /* ??? -MG must be specified in addition to one of -M or -MM.
1468 This can be relaxed in the future without breaking anything.
1469 The converse isn't true. */
1471 /* -MG isn't valid with -MD or -MMD. This is checked for later. */
1472 case OPT_MG:
1473 opts->print_deps_missing_files = 1;
1474 break;
1475 case OPT_M:
1476 case OPT_MD:
1477 case OPT_MM:
1478 case OPT_MMD:
1479 if (opt_code == OPT_M || opt_code == OPT_MD)
1480 opts->print_deps = 2;
1481 else
1482 opts->print_deps = 1;
1484 /* For -MD and -MMD options, write deps on file named by next arg */
1485 /* For -M and -MM, write deps on standard output
1486 and suppress the usual output. */
1487 if (opt_code == OPT_MD || opt_code == OPT_MMD)
1488 opts->deps_file = arg;
1489 else
1490 opts->no_output = 1;
1491 break;
1492 case OPT_A:
1493 if (strcmp (arg, "-"))
1494 new_pending_directive (opts, arg, cpp_assert);
1495 else
1497 /* -A- eliminates all predefined macros and assertions.
1498 Let's include also any that were specified earlier
1499 on the command line. That way we can get rid of any
1500 that were passed automatically in from GCC. */
1501 struct pending_option *o1, *o2;
1503 o1 = opts->pending->directive_head;
1504 while (o1)
1506 o2 = o1->next;
1507 free (o1);
1508 o1 = o2;
1510 opts->pending->directive_head = NULL;
1511 opts->pending->directive_tail = NULL;
1513 break;
1514 case OPT_U:
1515 new_pending_directive (opts, arg, cpp_undef);
1516 break;
1517 case OPT_I: /* Add directory to path for includes. */
1518 if (!strcmp (arg, "-"))
1520 /* -I- means:
1521 Use the preceding -I directories for #include "..."
1522 but not #include <...>.
1523 Don't search the directory of the present file
1524 for #include "...". (Note that -I. -I- is not the same as
1525 the default setup; -I. uses the compiler's working dir.) */
1526 if (! opts->ignore_srcdir)
1528 opts->ignore_srcdir = 1;
1529 opts->pending->quote_head = opts->pending->brack_head;
1530 opts->pending->quote_tail = opts->pending->brack_tail;
1531 opts->pending->brack_head = 0;
1532 opts->pending->brack_tail = 0;
1534 else
1536 cpp_fatal (pfile, "-I- specified twice");
1537 return argc;
1540 else
1541 append_include_chain (pfile, opts->pending,
1542 xstrdup (arg), BRACKET, 0);
1543 break;
1544 case OPT_isystem:
1545 /* Add directory to beginning of system include path, as a system
1546 include directory. */
1547 append_include_chain (pfile, opts->pending,
1548 xstrdup (arg), SYSTEM, 0);
1549 break;
1550 case OPT_include:
1552 struct pending_option *o = (struct pending_option *)
1553 xmalloc (sizeof (struct pending_option));
1554 o->arg = arg;
1556 /* This list has to be built in reverse order so that
1557 when cpp_start_read pushes all the -include files onto
1558 the buffer stack, they will be scanned in forward order. */
1559 o->next = opts->pending->include_head;
1560 opts->pending->include_head = o;
1562 break;
1563 case OPT_imacros:
1565 struct pending_option *o = (struct pending_option *)
1566 xmalloc (sizeof (struct pending_option));
1567 o->arg = arg;
1568 o->next = NULL;
1570 APPEND (opts->pending, imacros, o);
1572 break;
1573 case OPT_iwithprefix:
1574 /* Add directory to end of path for includes,
1575 with the default prefix at the front of its name. */
1576 /* fall through */
1577 case OPT_iwithprefixbefore:
1578 /* Add directory to main path for includes,
1579 with the default prefix at the front of its name. */
1581 char *fname;
1582 int len;
1584 len = strlen (arg);
1586 if (opts->include_prefix != 0)
1588 fname = xmalloc (opts->include_prefix_len + len + 1);
1589 memcpy (fname, opts->include_prefix, opts->include_prefix_len);
1590 memcpy (fname + opts->include_prefix_len, arg, len + 1);
1592 else
1594 fname = xmalloc (sizeof GCC_INCLUDE_DIR - 8 + len);
1595 memcpy (fname, GCC_INCLUDE_DIR, sizeof GCC_INCLUDE_DIR - 9);
1596 memcpy (fname + sizeof GCC_INCLUDE_DIR - 9, arg, len + 1);
1599 append_include_chain (pfile, opts->pending, fname,
1600 opt_code == OPT_iwithprefix ? SYSTEM: BRACKET, 0);
1602 break;
1603 case OPT_idirafter:
1604 /* Add directory to end of path for includes. */
1605 append_include_chain (pfile, opts->pending,
1606 xstrdup (arg), AFTER, 0);
1607 break;
1608 case OPT_W:
1609 /* Silently ignore unrecognised options */
1610 if (!strcmp (argv[i], "-Wall"))
1612 opts->warn_trigraphs = 1;
1613 opts->warn_comments = 1;
1615 else if (!strcmp (argv[i], "-Wtraditional"))
1616 opts->warn_stringify = 1;
1617 else if (!strcmp (argv[i], "-Wtrigraphs"))
1618 opts->warn_trigraphs = 1;
1619 else if (!strcmp (argv[i], "-Wcomment"))
1620 opts->warn_comments = 1;
1621 else if (!strcmp (argv[i], "-Wcomments"))
1622 opts->warn_comments = 1;
1623 else if (!strcmp (argv[i], "-Wundef"))
1624 opts->warn_undef = 1;
1625 else if (!strcmp (argv[i], "-Wimport"))
1626 opts->warn_import = 1;
1627 else if (!strcmp (argv[i], "-Werror"))
1628 opts->warnings_are_errors = 1;
1629 else if (!strcmp (argv[i], "-Wno-traditional"))
1630 opts->warn_stringify = 0;
1631 else if (!strcmp (argv[i], "-Wno-trigraphs"))
1632 opts->warn_trigraphs = 0;
1633 else if (!strcmp (argv[i], "-Wno-comment"))
1634 opts->warn_comments = 0;
1635 else if (!strcmp (argv[i], "-Wno-comments"))
1636 opts->warn_comments = 0;
1637 else if (!strcmp (argv[i], "-Wno-undef"))
1638 opts->warn_undef = 0;
1639 else if (!strcmp (argv[i], "-Wno-import"))
1640 opts->warn_import = 0;
1641 else if (!strcmp (argv[i], "-Wno-error"))
1642 opts->warnings_are_errors = 0;
1643 break;
1646 return i + 1;
1649 #ifdef HOST_EBCDIC
1650 static int
1651 opt_comp (const void *p1, const void *p2)
1653 return strcmp (((struct cl_option *)p1)->opt_text,
1654 ((struct cl_option *)p2)->opt_text);
1656 #endif
1658 /* Handle command-line options in (argc, argv).
1659 Can be called multiple times, to handle multiple sets of options.
1660 Returns if an unrecognized option is seen.
1661 Returns number of strings consumed. */
1663 cpp_handle_options (pfile, argc, argv)
1664 cpp_reader *pfile;
1665 int argc;
1666 char **argv;
1668 int i;
1669 int strings_processed;
1671 #ifdef HOST_EBCDIC
1672 static int opts_sorted = 0;
1674 if (!opts_sorted)
1676 opts_sorted = 1;
1677 /* For non-ASCII hosts, the array needs to be sorted at runtime */
1678 qsort (cl_options, N_OPTS, sizeof (struct cl_option), opt_comp);
1680 #endif
1682 for (i = 0; i < argc; i += strings_processed)
1684 strings_processed = handle_option (pfile, argc - i, argv + i);
1685 if (strings_processed == 0)
1686 break;
1688 return i;
1691 static void
1692 print_help ()
1694 fprintf (stderr, _("Usage: %s [switches] input output\n"), progname);
1695 fputs (_("\
1696 Switches:\n\
1697 -include <file> Include the contents of <file> before other files\n\
1698 -imacros <file> Accept definition of macros in <file>\n\
1699 -iprefix <path> Specify <path> as a prefix for next two options\n\
1700 -iwithprefix <dir> Add <dir> to the end of the system include path\n\
1701 -iwithprefixbefore <dir> Add <dir> to the end of the main include path\n\
1702 -isystem <dir> Add <dir> to the start of the system include path\n\
1703 -idirafter <dir> Add <dir> to the end of the system include path\n\
1704 -I <dir> Add <dir> to the end of the main include path\n\
1705 -I- Fine-grained include path control; see info docs\n\
1706 -nostdinc Do not search system include directories\n\
1707 (dirs specified with -isystem will still be used)\n\
1708 -nostdinc++ Do not search system include directories for C++\n\
1709 -o <file> Put output into <file>\n\
1710 -pedantic Issue all warnings demanded by strict ANSI C\n\
1711 -pedantic-errors Issue -pedantic warnings as errors instead\n\
1712 -traditional Follow K&R pre-processor behaviour\n\
1713 -trigraphs Support ANSI C trigraphs\n\
1714 -lang-c Assume that the input sources are in C\n\
1715 -lang-c89 Assume that the input sources are in C89\n\
1716 -lang-c++ Assume that the input sources are in C++\n\
1717 -lang-objc Assume that the input sources are in ObjectiveC\n\
1718 -lang-objc++ Assume that the input sources are in ObjectiveC++\n\
1719 -lang-asm Assume that the input sources are in assembler\n\
1720 -lang-fortran Assume that the input sources are in Fortran\n\
1721 -lang-chill Assume that the input sources are in Chill\n\
1722 -std=<std name> Specify the conformance standard; one of:\n\
1723 gnu89, gnu99, c89, c99, iso9899:1990,\n\
1724 iso9899:199409, iso9899:1999\n\
1725 -+ Allow parsing of C++ style features\n\
1726 -w Inhibit warning messages\n\
1727 -Wtrigraphs Warn if trigraphs are encountered\n\
1728 -Wno-trigraphs Do not warn about trigraphs\n\
1729 -Wcomment{s} Warn if one comment starts inside another\n\
1730 -Wno-comment{s} Do not warn about comments\n\
1731 -Wtraditional Warn if a macro argument is/would be turned into\n\
1732 a string if -traditional is specified\n\
1733 -Wno-traditional Do not warn about stringification\n\
1734 -Wundef Warn if an undefined macro is used by #if\n\
1735 -Wno-undef Do not warn about testing undefined macros\n\
1736 -Wimport Warn about the use of the #import directive\n\
1737 -Wno-import Do not warn about the use of #import\n\
1738 -Werror Treat all warnings as errors\n\
1739 -Wno-error Do not treat warnings as errors\n\
1740 -Wall Enable all preprocessor warnings\n\
1741 -M Generate make dependencies\n\
1742 -MM As -M, but ignore system header files\n\
1743 -MD As -M, but put output in a .d file\n\
1744 -MMD As -MD, but ignore system header files\n\
1745 -MG Treat missing header file as generated files\n\
1746 -g3 Include #define and #undef directives in the output\n\
1747 -D<macro> Define a <macro> with string '1' as its value\n\
1748 -D<macro>=<val> Define a <macro> with <val> as its value\n\
1749 -A<question> (<answer>) Assert the <answer> to <question>\n\
1750 -U<macro> Undefine <macro> \n\
1751 -v Display the version number\n\
1752 -H Print the name of header files as they are used\n\
1753 -C Do not discard comments\n\
1754 -dM Display a list of macro definitions active at end\n\
1755 -dD Preserve macro definitions in output\n\
1756 -dN As -dD except that only the names are preserved\n\
1757 -dI Include #include directives in the output\n\
1758 -P Do not generate #line directives\n\
1759 -$ Do not allow '$' in identifiers\n\
1760 -remap Remap file names when including files.\n\
1761 --version Display version information\n\
1762 -h or --help Display this information\n\
1763 "), stdout);