2 Copyright (C) 1986, 87, 89, 92-98, 1999, 2000 Free Software Foundation, Inc.
3 Contributed by Per Bothner, 1994-95.
4 Based on CCCP program by Paul Rubin, June 1986
5 Adapted to ANSI C, Richard Stallman, Jan 1987
7 This program is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 2, or (at your option) any
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
31 /* XXX Should be in a header file. */
32 extern char *version_string;
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)
40 #ifndef STANDARD_INCLUDE_DIR
41 #define STANDARD_INCLUDE_DIR "/usr/include"
44 /* We let tm.h override the types used here, to handle trivial differences
45 such as the choice of unsigned int or long unsigned int for size_t.
46 When machines start needing nontrivial differences in the size type,
47 it would be best to do something here to figure out automatically
48 from other information what type to use. */
50 /* The string value for __SIZE_TYPE__. */
53 #define SIZE_TYPE "long unsigned int"
56 /* The string value for __PTRDIFF_TYPE__. */
59 #define PTRDIFF_TYPE "long int"
62 /* The string value for __WCHAR_TYPE__. */
65 #define WCHAR_TYPE "int"
67 #define CPP_WCHAR_TYPE(PFILE) \
68 (CPP_OPTIONS (PFILE)->cplusplus ? "__wchar_t" : WCHAR_TYPE)
70 /* The string value for __USER_LABEL_PREFIX__ */
72 #ifndef USER_LABEL_PREFIX
73 #define USER_LABEL_PREFIX ""
76 /* The string value for __REGISTER_PREFIX__ */
78 #ifndef REGISTER_PREFIX
79 #define REGISTER_PREFIX ""
82 /* Suffix for object files, and known input-file extensions. */
83 static const char * const known_suffixes[] =
85 ".c", ".C", ".s", ".S", ".m",
86 ".cc", ".cxx", ".cpp", ".cp", ".c++",
92 # define OBJECT_SUFFIX ".obj"
94 # define OBJECT_SUFFIX ".o"
99 /* This is the default list of directories to search for include files.
100 It may be overridden by the various -I and -ixxx options.
102 #include "file" looks in the same directory as the current file,
104 #include <file> just looks in this list.
106 All these directories are treated as `system' include directories
107 (they are not subject to pedantic warnings in some cases). */
109 static struct default_include
111 const char *fname; /* The name of the directory. */
112 const char *component; /* The component containing the directory
113 (see update_path in prefix.c) */
114 int cplusplus; /* Only look here if we're compiling C++. */
115 int cxx_aware; /* Includes in this directory don't need to
116 be wrapped in extern "C" when compiling
117 C++. This is not used anymore. */
119 include_defaults_array[]
120 #ifdef INCLUDE_DEFAULTS
124 /* Pick up GNU C++ specific include files. */
125 { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 },
127 /* This is the dir for fixincludes. Put it just before
128 the files that we fix. */
129 { GCC_INCLUDE_DIR, "GCC", 0, 0 },
130 /* For cross-compilation, this dir name is generated
131 automatically in Makefile.in. */
132 { CROSS_INCLUDE_DIR, "GCC", 0, 0 },
133 #ifdef TOOL_INCLUDE_DIR
134 /* This is another place that the target system's headers might be. */
135 { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1 },
137 #else /* not CROSS_COMPILE */
138 #ifdef LOCAL_INCLUDE_DIR
139 /* This should be /usr/local/include and should come before
140 the fixincludes-fixed header files. */
141 { LOCAL_INCLUDE_DIR, 0, 0, 1 },
143 #ifdef TOOL_INCLUDE_DIR
144 /* This is here ahead of GCC_INCLUDE_DIR because assert.h goes here.
145 Likewise, behind LOCAL_INCLUDE_DIR, where glibc puts its assert.h. */
146 { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1 },
148 /* This is the dir for fixincludes. Put it just before
149 the files that we fix. */
150 { GCC_INCLUDE_DIR, "GCC", 0, 0 },
151 /* Some systems have an extra dir of include files. */
152 #ifdef SYSTEM_INCLUDE_DIR
153 { SYSTEM_INCLUDE_DIR, 0, 0, 0 },
155 #ifndef STANDARD_INCLUDE_COMPONENT
156 #define STANDARD_INCLUDE_COMPONENT 0
158 { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0 },
159 #endif /* not CROSS_COMPILE */
162 #endif /* no INCLUDE_DEFAULTS */
164 /* Internal structures and prototypes. */
166 /* A `struct pending_option' remembers one -D, -A, -U, -include, or -imacros
167 switch. There are four lists: one for -D and -U, one for -A, one
168 for -include, one for -imacros. `undef' is set for -U, clear for
169 -D, ignored for the others.
170 (Future: add an equivalent of -U for -A) */
171 struct pending_option
173 struct pending_option *next;
179 #define APPEND(pend, list, elt) \
180 do { if (!(pend)->list##_head) (pend)->list##_head = (elt); \
181 else (pend)->list##_tail->next = (elt); \
182 (pend)->list##_tail = (elt); \
185 #define APPEND(pend, list, elt) \
186 do { if (!(pend)->list/**/_head) (pend)->list/**/_head = (elt); \
187 else (pend)->list/**/_tail->next = (elt); \
188 (pend)->list/**/_tail = (elt); \
192 static void print_help PARAMS ((void));
193 static void path_include PARAMS ((cpp_reader *,
194 struct cpp_pending *,
196 static void initialize_builtins PARAMS ((cpp_reader *));
197 static void append_include_chain PARAMS ((cpp_reader *,
198 struct cpp_pending *,
200 static char *base_name PARAMS ((const char *));
201 static void dump_special_to_buffer PARAMS ((cpp_reader *, const char *));
202 static void initialize_dependency_output PARAMS ((cpp_reader *));
204 /* Last argument to append_include_chain: chain to use */
205 enum { QUOTE = 0, BRACKET, SYSTEM, AFTER };
207 /* If gcc is in use (stage2/stage3) we can make this table initialized data. */
209 #define CAT(a, b) a##b
211 #define CAT(a, b) a/**/b
214 #if (GCC_VERSION >= 2007)
215 #define TABLE(id) static inline void CAT(init_, id) PARAMS ((void)) {} \
216 unsigned char id[256] = {
217 #define s(p, v) [p] = v,
220 #define TABLE(id) unsigned char id[256] = { 0 }; \
221 static void CAT(init_,id) PARAMS ((void)) { \
222 unsigned char *x = id;
223 #define s(p, v) x[p] = v;
227 #define A(x) s(x, ISidnum|ISidstart)
228 #define N(x) s(x, ISidnum|ISnumstart)
229 #define H(x) s(x, IShspace|ISspace)
230 #define S(x) s(x, ISspace)
235 A('a') A('b') A('c') A('d') A('e') A('f') A('g') A('h') A('i')
236 A('j') A('k') A('l') A('m') A('n') A('o') A('p') A('q') A('r')
237 A('s') A('t') A('u') A('v') A('w') A('x') A('y') A('z')
239 A('A') A('B') A('C') A('D') A('E') A('F') A('G') A('H') A('I')
240 A('J') A('K') A('L') A('M') A('N') A('O') A('P') A('Q') A('R')
241 A('S') A('T') A('U') A('V') A('W') A('X') A('Y') A('Z')
243 N('1') N('2') N('3') N('4') N('5') N('6') N('7') N('8') N('9') N('0')
245 H(' ') H('\t') H('\v') H('\f')
259 /* Given a colon-separated list of file names PATH,
260 add all the names to the search path for include files. */
263 path_include (pfile, pend, list, path)
265 struct cpp_pending *pend;
275 /* Find the end of this name. */
277 while (*q != 0 && *q != PATH_SEPARATOR) q++;
280 /* An empty name in the path stands for the current directory. */
281 name = (char *) xmalloc (2);
287 /* Otherwise use the directory that is named. */
288 name = (char *) xmalloc (q - p + 1);
289 memcpy (name, p, q - p);
293 append_include_chain (pfile, pend, name, path);
295 /* Advance past this name. */
303 /* Find the base name of a (partial) pathname FNAME.
304 Returns a pointer into the string passed in.
305 Accepts Unix (/-separated) paths on all systems,
306 DOS and VMS paths on those systems. */
311 char *s = (char *)fname;
313 #if defined (HAVE_DOS_BASED_FILE_SYSTEM)
314 if (ISALPHA (s[0]) && s[1] == ':') s += 2;
315 if ((p = rindex (s, '\\'))) s = p + 1;
317 if ((p = rindex (s, ':'))) s = p + 1; /* Skip device. */
318 if ((p = rindex (s, ']'))) s = p + 1; /* Skip directory. */
319 if ((p = rindex (s, '>'))) s = p + 1; /* Skip alternate (int'n'l) dir. */
321 if ((p = rindex (s, '/'))) s = p + 1;
326 /* Append DIR to include path PATH. DIR must be permanently allocated
329 append_include_chain (pfile, pend, dir, path)
331 struct cpp_pending *pend;
335 struct file_name_list *new;
339 simplify_pathname (dir);
342 /* Dirs that don't exist are silently ignored. */
344 cpp_perror_with_name (pfile, dir);
345 else if (CPP_OPTIONS (pfile)->verbose)
346 cpp_notice ("ignoring nonexistent directory `%s'\n", dir);
350 if (!S_ISDIR (st.st_mode))
352 cpp_message (pfile, 1, "%s: %s: Not a directory", progname, 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));
363 new->ino = st.st_ino;
364 new->dev = st.st_dev;
365 new->sysp = (path == SYSTEM);
366 new->name_map = NULL;
372 case QUOTE: APPEND (pend, quote, new); break;
373 case BRACKET: APPEND (pend, brack, new); break;
374 case SYSTEM: APPEND (pend, systm, new); break;
375 case AFTER: APPEND (pend, after, new); break;
380 /* Write out a #define command for the special named MACRO_NAME
381 to PFILE's token_buffer. */
384 dump_special_to_buffer (pfile, macro_name)
386 const char *macro_name;
388 static char define_directive[] = "#define ";
389 int macro_name_length = strlen (macro_name);
390 output_line_command (pfile, same_file);
391 CPP_RESERVE (pfile, sizeof(define_directive) + macro_name_length);
392 CPP_PUTS_Q (pfile, define_directive, sizeof(define_directive)-1);
393 CPP_PUTS_Q (pfile, macro_name, macro_name_length);
394 CPP_PUTC_Q (pfile, ' ');
395 cpp_expand_to_buffer (pfile, macro_name, macro_name_length);
396 CPP_PUTC (pfile, '\n');
399 /* Initialize a cpp_options structure. */
401 cpp_options_init (opts)
404 bzero ((char *) opts, sizeof (struct cpp_options));
406 opts->dollars_in_ident = 1;
407 opts->cplusplus_comments = 1;
408 opts->warn_import = 1;
411 (struct cpp_pending *) xcalloc (1, sizeof (struct cpp_pending));
414 /* Initialize a cpp_reader structure. */
416 cpp_reader_init (pfile)
419 bzero ((char *) pfile, sizeof (cpp_reader));
421 pfile->get_token = cpp_get_token;
424 pfile->token_buffer_size = 200;
425 pfile->token_buffer = (U_CHAR *) xmalloc (pfile->token_buffer_size);
426 CPP_SET_WRITTEN (pfile, 0);
428 pfile->hashtab = (HASHNODE **) xcalloc (HASHSIZE, sizeof (HASHNODE *));
431 /* Free resources used by PFILE.
432 This is the cpp_reader 'finalizer' or 'destructor' (in C++ terminology). */
438 while (CPP_BUFFER (pfile) != CPP_NULL_BUFFER (pfile))
439 cpp_pop_buffer (pfile);
441 if (pfile->token_buffer)
443 free (pfile->token_buffer);
444 pfile->token_buffer = NULL;
447 if (pfile->deps_buffer)
449 free (pfile->deps_buffer);
450 pfile->deps_buffer = NULL;
451 pfile->deps_allocated_size = 0;
454 if (pfile->input_buffer)
456 free (pfile->input_buffer);
457 free (pfile->input_speccase);
458 pfile->input_buffer = pfile->input_speccase = NULL;
459 pfile->input_buffer_len = 0;
462 while (pfile->if_stack)
464 IF_STACK_FRAME *temp = pfile->if_stack;
465 pfile->if_stack = temp->next;
469 for (i = ALL_INCLUDE_HASHSIZE; --i >= 0; )
471 struct include_hash *imp = pfile->all_include_files[i];
474 struct include_hash *next = imp->next;
476 /* This gets freed elsewhere - I think. */
482 pfile->all_include_files[i] = 0;
485 for (i = HASHSIZE; --i >= 0;)
487 while (pfile->hashtab[i])
488 delete_macro (pfile->hashtab[i]);
490 free (pfile->hashtab);
494 /* This structure defines one built-in macro. A node of type TYPE will
495 be entered in the macro hash table under the name NAME, with value
496 VALUE (if any). FLAGS tweaks the behavior a little:
497 DUMP write debug info for this macro
498 STDC define only if not -traditional
499 ULP value is the global user_label_prefix (which can't be
500 put directly into the table).
508 unsigned short flags;
514 static const struct builtin builtin_array[] =
516 { "__TIME__", 0, T_TIME, DUMP },
517 { "__DATE__", 0, T_DATE, DUMP },
518 { "__FILE__", 0, T_FILE, 0 },
519 { "__BASE_FILE__", 0, T_BASE_FILE, DUMP },
520 { "__LINE__", 0, T_SPECLINE, 0 },
521 { "__INCLUDE_LEVEL__", 0, T_INCLUDE_LEVEL, 0 },
522 { "__VERSION__", 0, T_VERSION, DUMP },
523 { "__STDC__", 0, T_STDC, DUMP|STDC },
525 { "__USER_LABEL_PREFIX__", 0, T_CONST, ULP },
526 { "__REGISTER_PREFIX__", REGISTER_PREFIX, T_CONST, 0 },
527 { "__HAVE_BUILTIN_SETJMP__", "1", T_CONST, 0 },
528 #ifndef NO_BUILTIN_SIZE_TYPE
529 { "__SIZE_TYPE__", SIZE_TYPE, T_CONST, DUMP },
531 #ifndef NO_BUILTIN_PTRDIFF_TYPE
532 { "__PTRDIFF_TYPE__", PTRDIFF_TYPE, T_CONST, DUMP },
534 { "__WCHAR_TYPE__", WCHAR_TYPE, T_CONST, DUMP },
538 /* Subroutine of cpp_start_read; reads the builtins table above and
539 enters the macros into the hash table. */
542 initialize_builtins (pfile)
546 const struct builtin *b;
548 for(b = builtin_array; b->name; b++)
550 if ((b->flags & STDC) && CPP_TRADITIONAL (pfile))
553 val = (b->flags & ULP) ? user_label_prefix : b->value;
554 len = strlen (b->name);
556 cpp_install (pfile, b->name, len, b->type, val, -1);
557 if ((b->flags & DUMP) && CPP_OPTIONS (pfile)->debug_output)
558 dump_special_to_buffer (pfile, b->name);
566 /* Another subroutine of cpp_start_read. This one sets up to do
567 dependency-file output. */
569 initialize_dependency_output (pfile)
572 cpp_options *opts = CPP_OPTIONS (pfile);
573 char *spec, *s, *output_file;
575 /* Either of two environment variables can specify output of deps.
576 Its value is either "OUTPUT_FILE" or "OUTPUT_FILE DEPS_TARGET",
577 where OUTPUT_FILE is the file to write deps info to
578 and DEPS_TARGET is the target to mention in the deps. */
580 if (opts->print_deps == 0)
582 spec = getenv ("DEPENDENCIES_OUTPUT");
584 opts->print_deps = 1;
587 spec = getenv ("SUNPRO_DEPENDENCIES");
589 opts->print_deps = 2;
594 /* Find the space before the DEPS_TARGET, if there is one. */
595 s = strchr (spec, ' ');
598 opts->deps_target = s + 1;
599 output_file = (char *) xmalloc (s - spec + 1);
600 memcpy (output_file, spec, s - spec);
601 output_file[s - spec] = 0;
605 opts->deps_target = 0;
609 opts->deps_file = output_file;
610 opts->print_deps_append = 1;
613 /* Print the expected object file name as the target of this Make-rule. */
614 pfile->deps_allocated_size = 200;
615 pfile->deps_buffer = (char *) xmalloc (pfile->deps_allocated_size);
616 pfile->deps_buffer[0] = 0;
617 pfile->deps_size = 0;
618 pfile->deps_column = 0;
620 if (opts->deps_target)
621 deps_output (pfile, opts->deps_target, ':');
622 else if (*opts->in_fname == 0)
623 deps_output (pfile, "-", ':');
629 /* Discard all directory prefixes from filename. */
630 q = base_name (opts->in_fname);
632 /* Copy remainder to mungable area. */
634 p = (char *) alloca (len + 8);
637 /* Output P, but remove known suffixes. */
639 /* Point to the filename suffix. */
641 /* Compare against the known suffixes. */
642 for (x = 0; known_suffixes[x]; x++)
644 if (strncmp (known_suffixes[x], r, q - r) == 0)
646 /* Make q point to the bit we're going to overwrite
647 with an object suffix. */
653 /* Supply our own suffix. */
654 strcpy (q, OBJECT_SUFFIX);
656 deps_output (pfile, p, ':');
657 deps_output (pfile, opts->in_fname, ' ');
661 /* This is called after options have been processed.
662 * Check options for consistency, and setup for processing input
663 * from the file named FNAME. (Use standard input if FNAME==NULL.)
664 * Return 1 on success, 0 on failure.
668 cpp_start_read (pfile, fname)
672 struct cpp_options *opts = CPP_OPTIONS (pfile);
673 struct pending_option *p, *q;
676 struct include_hash *ih_fake;
678 /* -MG doesn't select the form of output and must be specified with one of
679 -M or -MM. -MG doesn't make sense with -MD or -MMD since they don't
680 inhibit compilation. */
681 if (opts->print_deps_missing_files
682 && (opts->print_deps == 0 || !opts->no_output))
684 cpp_fatal (pfile, "-MG must be specified with one of -M or -MM");
688 /* Chill should not be used with -trigraphs. */
689 if (opts->chill && opts->trigraphs)
691 cpp_warning (pfile, "-lang-chill and -trigraphs are mutually exclusive");
695 /* Set this if it hasn't been set already. */
696 if (user_label_prefix == NULL)
697 user_label_prefix = USER_LABEL_PREFIX;
699 /* Now that we know dollars_in_ident, we can initialize the syntax
702 /* XXX Get rid of code that depends on this, then IStable can
704 if (opts->dollars_in_ident)
705 IStable['$'] = ISidstart|ISidnum;
707 /* Do partial setup of input buffer for the sake of generating
708 early #line directives (when -g is in effect). */
709 fp = cpp_push_buffer (pfile, NULL, 0);
712 if (opts->in_fname == NULL || *opts->in_fname == 0)
714 opts->in_fname = fname;
715 if (opts->in_fname == NULL)
718 fp->nominal_fname = fp->fname = opts->in_fname;
721 /* Install __LINE__, etc. Must follow initialize_char_syntax
722 and option processing. */
723 initialize_builtins (pfile);
725 /* Do -U's, -D's and -A's in the order they were seen. */
726 p = opts->pending->define_head;
729 if (opts->debug_output)
730 output_line_command (pfile, same_file);
732 cpp_undef (pfile, p->arg);
734 cpp_define (pfile, p->arg);
741 p = opts->pending->assert_head;
744 if (opts->debug_output)
745 output_line_command (pfile, same_file);
747 cpp_unassert (pfile, p->arg);
749 cpp_assert (pfile, p->arg);
756 opts->done_initializing = 1;
758 /* Several environment variables may add to the include search path.
759 CPATH specifies an additional list of directories to be searched
760 as if specified with -I, while C_INCLUDE_PATH, CPLUS_INCLUDE_PATH,
761 etc. specify an additional list of directories to be searched as
762 if specified with -isystem, for the language indicated.
764 These variables are ignored if -nostdinc is on. */
765 if (! opts->no_standard_includes)
768 GET_ENV_PATH_LIST (path, "CPATH");
769 if (path != 0 && *path != 0)
770 path_include (pfile, opts->pending, path, BRACKET);
772 switch ((opts->objc << 1) + opts->cplusplus)
775 GET_ENV_PATH_LIST (path, "C_INCLUDE_PATH");
778 GET_ENV_PATH_LIST (path, "CPLUS_INCLUDE_PATH");
781 GET_ENV_PATH_LIST (path, "OBJC_INCLUDE_PATH");
784 GET_ENV_PATH_LIST (path, "OBJCPLUS_INCLUDE_PATH");
787 if (path != 0 && *path != 0)
788 path_include (pfile, opts->pending, path, SYSTEM);
791 /* Unless -nostdinc, add the compiled-in include path to the list,
792 translating prefixes. */
793 if (!opts->no_standard_includes)
795 struct default_include *p = include_defaults_array;
796 char *specd_prefix = opts->include_prefix;
798 /* Search "translated" versions of GNU directories.
799 These have /usr/local/lib/gcc... replaced by specd_prefix. */
800 if (specd_prefix != 0)
802 char *default_prefix = alloca (sizeof GCC_INCLUDE_DIR - 7);
803 /* Remove the `include' from /usr/local/lib/gcc.../include.
804 GCC_INCLUDE_DIR will always end in /include. */
805 int default_len = sizeof GCC_INCLUDE_DIR - 8;
806 int specd_len = strlen (specd_prefix);
808 default_len = sizeof GCC_INCLUDE_DIR - 8;
809 memcpy (default_prefix, GCC_INCLUDE_DIR, default_len);
810 default_prefix[default_len] = '\0';
812 for (p = include_defaults_array; p->fname; p++)
814 /* Some standard dirs are only for C++. */
817 && !opts->no_standard_cplusplus_includes))
819 /* Does this dir start with the prefix? */
820 if (!strncmp (p->fname, default_prefix, default_len))
822 /* Yes; change prefix and add to search list. */
823 int flen = strlen (p->fname);
824 int this_len = specd_len + flen - default_len;
825 char *str = (char *) xmalloc (this_len + 1);
826 memcpy (str, specd_prefix, specd_len);
827 memcpy (str + specd_len,
828 p->fname + default_len,
829 flen - default_len + 1);
831 append_include_chain (pfile, opts->pending,
838 /* Search ordinary names for GNU include directories. */
839 for (p = include_defaults_array; p->fname; p++)
841 /* Some standard dirs are only for C++. */
844 && !opts->no_standard_cplusplus_includes))
846 /* XXX Potential memory leak! */
847 char *str = xstrdup (update_path (p->fname, p->component));
848 append_include_chain (pfile, opts->pending, str, SYSTEM);
853 merge_include_chains (opts);
855 /* With -v, print the list of dirs to search. */
858 struct file_name_list *p;
859 cpp_message (pfile, -1, "#include \"...\" search starts here:\n");
860 for (p = opts->quote_include; p; p = p->next)
862 if (p == opts->bracket_include)
863 cpp_message (pfile, -1, "#include <...> search starts here:\n");
864 fprintf (stderr, " %s\n", p->name);
866 cpp_message (pfile, -1, "End of search list.\n");
869 /* Don't bother trying to do macro expansion if we've already done
871 if (opts->preprocessed)
872 pfile->no_macro_expand++;
874 /* Open the main input file.
875 We do this in nonblocking mode so we don't get stuck here if
876 someone clever has asked cpp to process /dev/rmt0;
877 finclude() will check that we have a real file to work with. */
878 if (fname == NULL || *fname == 0)
883 else if ((f = open (fname, O_RDONLY|O_NONBLOCK|O_NOCTTY, 0666)) < 0)
884 cpp_pfatal_with_name (pfile, fname);
886 initialize_dependency_output (pfile);
888 /* Must call finclude() on the main input before processing
889 -include switches; otherwise the -included text winds up
890 after the main input. */
891 ih_fake = (struct include_hash *) xmalloc (sizeof (struct include_hash));
893 ih_fake->next_this_file = 0;
894 ih_fake->foundhere = ABSOLUTE_PATH; /* well sort of ... */
895 ih_fake->name = fname;
896 ih_fake->control_macro = 0;
897 ih_fake->buf = (char *)-1;
899 if (!finclude (pfile, f, ih_fake))
901 if (opts->preprocessed)
902 /* If we've already processed this code, we want to trust the #line
903 directives in the input. But we still need to update our line
904 counter accordingly. */
905 pfile->lineno = CPP_BUFFER (pfile)->lineno;
907 output_line_command (pfile, same_file);
908 pfile->only_seen_white = 2;
910 /* The -imacros files can be scanned now, but the -include files
911 have to be pushed onto the include stack and processed later,
912 in the main loop calling cpp_get_token. */
914 pfile->no_record_file++;
916 p = opts->pending->imacros_head;
919 int fd = open (p->arg, O_RDONLY|O_NONBLOCK|O_NOCTTY, 0666);
922 cpp_perror_with_name (pfile, p->arg);
925 if (!cpp_push_buffer (pfile, NULL, 0))
928 ih_fake = (struct include_hash *)
929 xmalloc (sizeof (struct include_hash));
931 ih_fake->next_this_file = 0;
932 ih_fake->foundhere = ABSOLUTE_PATH; /* well sort of ... */
933 ih_fake->name = p->arg;
934 ih_fake->control_macro = 0;
935 ih_fake->buf = (char *)-1;
937 if (finclude (pfile, fd, ih_fake))
939 if (CPP_PRINT_DEPS (pfile))
940 deps_output (pfile, ih_fake->name, ' ');
942 cpp_scan_buffer (pfile);
945 cpp_pop_buffer (pfile);
955 p = opts->pending->include_head;
958 int fd = open (p->arg, O_RDONLY|O_NONBLOCK|O_NOCTTY, 0666);
961 cpp_perror_with_name (pfile, p->arg);
964 if (!cpp_push_buffer (pfile, NULL, 0))
967 ih_fake = (struct include_hash *)
968 xmalloc (sizeof (struct include_hash));
970 ih_fake->next_this_file = 0;
971 ih_fake->foundhere = ABSOLUTE_PATH; /* well sort of ... */
972 ih_fake->name = p->arg;
973 ih_fake->control_macro = 0;
974 ih_fake->buf = (char *)-1;
976 if (finclude (pfile, fd, ih_fake))
978 if (CPP_PRINT_DEPS (pfile))
979 deps_output (pfile, ih_fake->name, ' ');
981 output_line_command (pfile, enter_file);
984 cpp_pop_buffer (pfile);
989 pfile->no_record_file--;
991 free (opts->pending);
992 opts->pending = NULL;
997 /* This is called at the end of preprocessing. It pops the
998 last buffer and writes dependency output. It should also
999 clear macro definitions, such that you could call cpp_start_read
1000 with a new filename to restart processing. */
1005 struct cpp_options *opts = CPP_OPTIONS (pfile);
1007 if (CPP_PREV_BUFFER (CPP_BUFFER (pfile)) != CPP_NULL_BUFFER (pfile))
1009 "cpplib internal error: buffers still stacked in cpp_finish");
1010 cpp_pop_buffer (pfile);
1012 if (opts->print_deps)
1014 /* Stream on which to print the dependency information. */
1017 /* Don't actually write the deps file if compilation has failed. */
1018 if (pfile->errors == 0)
1020 const char *deps_mode = opts->print_deps_append ? "a" : "w";
1021 if (opts->deps_file == 0)
1022 deps_stream = stdout;
1023 else if ((deps_stream = fopen (opts->deps_file, deps_mode)) == 0)
1024 cpp_pfatal_with_name (pfile, opts->deps_file);
1025 fputs (pfile->deps_buffer, deps_stream);
1026 putc ('\n', deps_stream);
1027 if (opts->deps_file)
1029 if (ferror (deps_stream) || fclose (deps_stream) != 0)
1030 cpp_fatal (pfile, "I/O error on output");
1035 if (opts->dump_macros == dump_only)
1040 for (i = HASHSIZE; --i >= 0;)
1042 for (h = pfile->hashtab[i]; h; h = h->next)
1043 if (h->type == T_MACRO)
1045 m.defn = h->value.defn;
1047 m.symlen = h->length;
1048 dump_definition (pfile, m);
1049 CPP_PUTC (pfile, '\n');
1056 new_pending_define (opts, text)
1057 struct cpp_options *opts;
1060 struct pending_option *o = (struct pending_option *)
1061 xmalloc (sizeof (struct pending_option));
1066 APPEND (opts->pending, define, o);
1069 /* Handle one command-line option in (argc, argv).
1070 Can be called multiple times, to handle multiple sets of options.
1071 Returns number of strings consumed. */
1073 cpp_handle_option (pfile, argc, argv)
1078 struct cpp_options *opts = CPP_OPTIONS (pfile);
1081 if (argv[i][0] != '-')
1083 if (opts->out_fname != NULL)
1086 cpp_fatal (pfile, "Too many arguments");
1088 else if (opts->in_fname != NULL)
1089 opts->out_fname = argv[i];
1091 opts->in_fname = argv[i];
1097 if (!strcmp (argv[i], "-fleading-underscore"))
1098 user_label_prefix = "_";
1099 else if (!strcmp (argv[i], "-fno-leading-underscore"))
1100 user_label_prefix = "";
1101 else if (!strcmp (argv[i], "-fpreprocessed"))
1102 opts->preprocessed = 1;
1103 else if (!strcmp (argv[i], "-fno-preprocessed"))
1104 opts->preprocessed = 0;
1111 case 'I': /* Add directory to path for includes. */
1112 if (!strcmp (argv[i] + 2, "-"))
1115 Use the preceding -I directories for #include "..."
1116 but not #include <...>.
1117 Don't search the directory of the present file
1118 for #include "...". (Note that -I. -I- is not the same as
1119 the default setup; -I. uses the compiler's working dir.) */
1120 if (! opts->ignore_srcdir)
1122 opts->ignore_srcdir = 1;
1123 opts->pending->quote_head = opts->pending->brack_head;
1124 opts->pending->quote_tail = opts->pending->brack_tail;
1125 opts->pending->brack_head = 0;
1126 opts->pending->brack_tail = 0;
1130 cpp_fatal (pfile, "-I- specified twice");
1137 if (argv[i][2] != 0)
1138 fname = argv[i] + 2;
1139 else if (i + 1 == argc)
1140 goto missing_dirname;
1143 append_include_chain (pfile, opts->pending,
1144 xstrdup (fname), BRACKET);
1149 /* Add directory to beginning of system include path, as a system
1150 include directory. */
1151 if (!strcmp (argv[i], "-isystem"))
1154 goto missing_filename;
1155 append_include_chain (pfile, opts->pending,
1156 xstrdup (argv[++i]), SYSTEM);
1158 else if (!strcmp (argv[i], "-include"))
1161 goto missing_filename;
1164 struct pending_option *o = (struct pending_option *)
1165 xmalloc (sizeof (struct pending_option));
1168 /* This list has to be built in reverse order so that
1169 when cpp_start_read pushes all the -include files onto
1170 the buffer stack, they will be scanned in forward order. */
1171 o->next = opts->pending->include_head;
1172 opts->pending->include_head = o;
1175 else if (!strcmp (argv[i], "-imacros"))
1178 goto missing_filename;
1181 struct pending_option *o = (struct pending_option *)
1182 xmalloc (sizeof (struct pending_option));
1186 APPEND (opts->pending, imacros, o);
1189 /* Add directory to end of path for includes,
1190 with the default prefix at the front of its name. */
1191 else if (!strcmp (argv[i], "-iwithprefix"))
1196 goto missing_dirname;
1198 len = strlen (argv[i]);
1200 if (opts->include_prefix != 0)
1202 fname = xmalloc (opts->include_prefix_len + len + 1);
1203 memcpy (fname, opts->include_prefix, opts->include_prefix_len);
1204 memcpy (fname + opts->include_prefix_len, argv[i], len + 1);
1208 fname = xmalloc (sizeof GCC_INCLUDE_DIR - 8 + len);
1209 memcpy (fname, GCC_INCLUDE_DIR, sizeof GCC_INCLUDE_DIR - 9);
1210 memcpy (fname + sizeof GCC_INCLUDE_DIR - 9, argv[i], len + 1);
1213 append_include_chain (pfile, opts->pending, fname, SYSTEM);
1215 /* Add directory to main path for includes,
1216 with the default prefix at the front of its name. */
1217 else if (!strcmp (argv[i], "-iwithprefixbefore"))
1222 goto missing_dirname;
1224 len = strlen (argv[i]);
1226 if (opts->include_prefix != 0)
1228 fname = xmalloc (opts->include_prefix_len + len + 1);
1229 memcpy (fname, opts->include_prefix, opts->include_prefix_len);
1230 memcpy (fname + opts->include_prefix_len, argv[i], len + 1);
1234 fname = xmalloc (sizeof GCC_INCLUDE_DIR - 8 + len);
1235 memcpy (fname, GCC_INCLUDE_DIR, sizeof GCC_INCLUDE_DIR - 9);
1236 memcpy (fname + sizeof GCC_INCLUDE_DIR - 9, argv[i], len + 1);
1239 append_include_chain (pfile, opts->pending, fname, BRACKET);
1241 /* Add directory to end of path for includes. */
1242 else if (!strcmp (argv[i], "-idirafter"))
1245 goto missing_dirname;
1246 append_include_chain (pfile, opts->pending,
1247 xstrdup (argv[++i]), AFTER);
1249 else if (!strcmp (argv[i], "-iprefix"))
1252 goto missing_filename;
1255 opts->include_prefix = argv[++i];
1256 opts->include_prefix_len = strlen (argv[i]);
1259 else if (!strcmp (argv[i], "-ifoutput"))
1260 opts->output_conditionals = 1;
1265 if (opts->out_fname != NULL)
1267 cpp_fatal (pfile, "Output filename specified twice");
1271 goto missing_filename;
1272 opts->out_fname = argv[++i];
1273 if (!strcmp (opts->out_fname, "-"))
1274 opts->out_fname = "";
1278 if (!strcmp (argv[i], "-pedantic"))
1279 CPP_PEDANTIC (pfile) = 1;
1280 else if (!strcmp (argv[i], "-pedantic-errors"))
1282 CPP_PEDANTIC (pfile) = 1;
1283 opts->pedantic_errors = 1;
1286 else if (!strcmp (argv[i], "-pcp")) {
1287 char *pcp_fname = argv[++i];
1288 pcp_outfile = ((pcp_fname[0] != '-' || pcp_fname[1] != '\0')
1289 ? fopen (pcp_fname, "w")
1290 : fdopen (dup (fileno (stdout)), "w"));
1291 if (pcp_outfile == 0)
1292 cpp_pfatal_with_name (pfile, pcp_fname);
1299 if (!strcmp (argv[i], "-traditional"))
1301 opts->traditional = 1;
1302 opts->cplusplus_comments = 0;
1303 opts->trigraphs = 0;
1304 opts->warn_trigraphs = 0;
1306 else if (!strcmp (argv[i], "-trigraphs"))
1307 opts->trigraphs = 1;
1311 if (! strcmp (argv[i], "-lang-c"))
1312 opts->cplusplus = 0, opts->cplusplus_comments = 1, opts->c89 = 0,
1313 opts->c99 = 1, opts->objc = 0;
1314 if (! strcmp (argv[i], "-lang-c89"))
1316 opts->cplusplus = 0, opts->cplusplus_comments = 0;
1317 opts->c89 = 1, opts->c99 = 0, opts->objc = 0;
1318 opts->trigraphs = 1;
1319 new_pending_define (opts, "__STRICT_ANSI__");
1321 if (! strcmp (argv[i], "-lang-c++"))
1322 opts->cplusplus = 1, opts->cplusplus_comments = 1, opts->c89 = 0,
1323 opts->c99 = 0, opts->objc = 0;
1324 if (! strcmp (argv[i], "-lang-objc"))
1325 opts->cplusplus = 0, opts->cplusplus_comments = 1, opts->c89 = 0,
1326 opts->c99 = 0, opts->objc = 1;
1327 if (! strcmp (argv[i], "-lang-objc++"))
1328 opts->cplusplus = 1, opts->cplusplus_comments = 1, opts->c89 = 0,
1329 opts->c99 = 0, opts->objc = 1;
1330 if (! strcmp (argv[i], "-lang-asm"))
1332 if (! strcmp (argv[i], "-lang-fortran"))
1333 opts->lang_fortran = 1, opts->cplusplus_comments = 0;
1334 if (! strcmp (argv[i], "-lint"))
1336 if (! strcmp (argv[i], "-lang-chill"))
1337 opts->objc = 0, opts->cplusplus = 0, opts->chill = 1,
1338 opts->traditional = 1;
1342 opts->cplusplus = 1, opts->cplusplus_comments = 1;
1346 if (!strcmp (argv[i], "-std=gnu89"))
1348 opts->cplusplus = 0, opts->cplusplus_comments = 1;
1349 opts->c89 = 1, opts->c99 = 0, opts->objc = 0;
1351 else if (!strcmp (argv[i], "-std=gnu9x")
1352 || !strcmp (argv[i], "-std=gnu99"))
1354 opts->cplusplus = 0, opts->cplusplus_comments = 1;
1355 opts->c89 = 0, opts->c99 = 1, opts->objc = 0;
1356 new_pending_define (opts, "__STDC_VERSION__=199901L");
1358 else if (!strcmp (argv[i], "-std=iso9899:1990")
1359 || !strcmp (argv[i], "-std=c89"))
1361 opts->cplusplus = 0, opts->cplusplus_comments = 0;
1362 opts->c89 = 1, opts->c99 = 0, opts->objc = 0;
1363 opts->trigraphs = 1;
1364 new_pending_define (opts, "__STRICT_ANSI__");
1366 else if (!strcmp (argv[i], "-std=iso9899:199409"))
1368 opts->cplusplus = 0, opts->cplusplus_comments = 0;
1369 opts->c89 = 1, opts->c99 = 0, opts->objc = 0;
1370 opts->trigraphs = 1;
1371 new_pending_define (opts, "__STRICT_ANSI__");
1372 new_pending_define (opts, "__STDC_VERSION__=199409L");
1374 else if (!strcmp (argv[i], "-std=iso9899:199x")
1375 || !strcmp (argv[i], "-std=iso9899:1999")
1376 || !strcmp (argv[i], "-std=c9x")
1377 || !strcmp (argv[i], "-std=c99"))
1379 opts->cplusplus = 0, opts->cplusplus_comments = 1;
1380 opts->c89 = 0, opts->c99 = 1, opts->objc = 0;
1381 opts->trigraphs = 1;
1382 new_pending_define (opts, "__STRICT_ANSI__");
1383 new_pending_define (opts, "__STDC_VERSION__=199901L");
1388 opts->inhibit_warnings = 1;
1392 if (!strcmp (argv[i], "-Wtrigraphs"))
1393 opts->warn_trigraphs = 1;
1394 else if (!strcmp (argv[i], "-Wno-trigraphs"))
1395 opts->warn_trigraphs = 0;
1396 else if (!strcmp (argv[i], "-Wcomment"))
1397 opts->warn_comments = 1;
1398 else if (!strcmp (argv[i], "-Wno-comment"))
1399 opts->warn_comments = 0;
1400 else if (!strcmp (argv[i], "-Wcomments"))
1401 opts->warn_comments = 1;
1402 else if (!strcmp (argv[i], "-Wno-comments"))
1403 opts->warn_comments = 0;
1404 else if (!strcmp (argv[i], "-Wtraditional"))
1405 opts->warn_stringify = 1;
1406 else if (!strcmp (argv[i], "-Wno-traditional"))
1407 opts->warn_stringify = 0;
1408 else if (!strcmp (argv[i], "-Wundef"))
1409 opts->warn_undef = 1;
1410 else if (!strcmp (argv[i], "-Wno-undef"))
1411 opts->warn_undef = 0;
1412 else if (!strcmp (argv[i], "-Wimport"))
1413 opts->warn_import = 1;
1414 else if (!strcmp (argv[i], "-Wno-import"))
1415 opts->warn_import = 0;
1416 else if (!strcmp (argv[i], "-Werror"))
1417 opts->warnings_are_errors = 1;
1418 else if (!strcmp (argv[i], "-Wno-error"))
1419 opts->warnings_are_errors = 0;
1420 else if (!strcmp (argv[i], "-Wall"))
1422 opts->warn_trigraphs = 1;
1423 opts->warn_comments = 1;
1428 /* The style of the choices here is a bit mixed.
1429 The chosen scheme is a hybrid of keeping all options in one string
1430 and specifying each option in a separate argument:
1431 -M|-MM|-MD file|-MMD file [-MG]. An alternative is:
1432 -M|-MM|-MD file|-MMD file|-MG|-MMG; or more concisely:
1433 -M[M][G][D file]. This is awkward to handle in specs, and is not
1435 /* ??? -MG must be specified in addition to one of -M or -MM.
1436 This can be relaxed in the future without breaking anything.
1437 The converse isn't true. */
1439 /* -MG isn't valid with -MD or -MMD. This is checked for later. */
1440 if (!strcmp (argv[i], "-MG"))
1442 opts->print_deps_missing_files = 1;
1445 if (!strcmp (argv[i], "-M"))
1446 opts->print_deps = 2;
1447 else if (!strcmp (argv[i], "-MM"))
1448 opts->print_deps = 1;
1449 else if (!strcmp (argv[i], "-MD"))
1450 opts->print_deps = 2;
1451 else if (!strcmp (argv[i], "-MMD"))
1452 opts->print_deps = 1;
1453 /* For -MD and -MMD options, write deps on file named by next arg. */
1454 if (!strcmp (argv[i], "-MD") || !strcmp (argv[i], "-MMD"))
1457 goto missing_filename;
1458 opts->deps_file = argv[++i];
1462 /* For -M and -MM, write deps on standard output
1463 and suppress the usual output. */
1464 opts->no_output = 1;
1470 char *p = argv[i] + 2;
1472 while ((c = *p++) != 0)
1474 /* Arg to -d specifies what parts of macros to dump */
1478 opts->dump_macros = dump_only;
1479 opts->no_output = 1;
1482 opts->dump_macros = dump_names;
1485 opts->dump_macros = dump_definitions;
1488 opts->dump_includes = 1;
1496 if (argv[i][2] == '3')
1497 opts->debug_output = 1;
1501 if (!strcmp (argv[i], "--help"))
1503 else if (!strcmp (argv[i], "--version"))
1504 cpp_notice ("GNU CPP version %s (cpplib)\n", version_string);
1509 cpp_notice ("GNU CPP version %s (cpplib)", version_string);
1510 #ifdef TARGET_VERSION
1513 fputc ('\n', stderr);
1518 opts->print_include_names = 1;
1524 if (argv[i][2] != 0)
1526 else if (i + 1 == argc)
1528 cpp_fatal (pfile, "Macro name missing after -D option");
1533 new_pending_define (opts, text);
1541 if (argv[i][2] != 0)
1543 else if (i + 1 == argc)
1545 cpp_fatal (pfile, "Assertion missing after -A option");
1551 if (strcmp (p, "-"))
1553 struct pending_option *o = (struct pending_option *)
1554 xmalloc (sizeof (struct pending_option));
1559 APPEND (opts->pending, assert, o);
1563 /* -A- eliminates all predefined macros and assertions.
1564 Let's include also any that were specified earlier
1565 on the command line. That way we can get rid of any
1566 that were passed automatically in from GCC. */
1567 struct pending_option *o1, *o2;
1569 o1 = opts->pending->define_head;
1576 o1 = opts->pending->assert_head;
1583 opts->pending->assert_head = NULL;
1584 opts->pending->assert_tail = NULL;
1585 opts->pending->define_head = NULL;
1586 opts->pending->define_tail = NULL;
1593 struct pending_option *o = (struct pending_option *)
1594 xmalloc (sizeof (struct pending_option));
1596 if (argv[i][2] != 0)
1597 o->arg = argv[i] + 2;
1598 else if (i + 1 == argc)
1600 cpp_fatal (pfile, "Macro name missing after -U option");
1608 APPEND (opts->pending, define, o);
1613 opts->put_out_comments = 1;
1616 case 'E': /* -E comes from cc -E; ignore it. */
1620 opts->no_line_commands = 1;
1623 case '$': /* Don't include $ in identifiers. */
1624 opts->dollars_in_ident = 0;
1628 if (!strcmp (argv[i], "-nostdinc"))
1629 /* -nostdinc causes no default include directories.
1630 You must specify all include-file directories with -I. */
1631 opts->no_standard_includes = 1;
1632 else if (!strcmp (argv[i], "-nostdinc++"))
1633 /* -nostdinc++ causes no default C++-specific include directories. */
1634 opts->no_standard_cplusplus_includes = 1;
1636 else if (!strcmp (argv[i], "-noprecomp"))
1642 if (!strcmp (argv[i], "-remap"))
1646 case '\0': /* JF handle '-' as file name meaning stdin or stdout */
1647 if (opts->in_fname == NULL)
1648 opts->in_fname = "";
1649 else if (opts->out_fname == NULL)
1650 opts->out_fname = "";
1652 return i; /* error */
1662 cpp_fatal (pfile, "Filename missing after `%s' option", argv[i]);
1665 cpp_fatal (pfile, "Directory name missing after `%s' option", argv[i]);
1669 /* Handle command-line options in (argc, argv).
1670 Can be called multiple times, to handle multiple sets of options.
1671 Returns if an unrecognized option is seen.
1672 Returns number of strings consumed. */
1675 cpp_handle_options (pfile, argc, argv)
1681 int strings_processed;
1682 for (i = 0; i < argc; i += strings_processed)
1684 strings_processed = cpp_handle_option (pfile, argc - i, argv + i);
1685 if (strings_processed == 0)
1694 cpp_notice ("Usage: %s [switches] input output\n", progname);
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 -nostdinc Do not search system include directories\n\
1706 (dirs specified with -isystem will still be used)\n\
1707 -nostdinc++ Do not search system include directories for C++\n\
1708 -o <file> Put output into <file>\n\
1709 -pedantic Issue all warnings demanded by strict ANSI C\n\
1710 -traditional Follow K&R pre-processor behaviour\n\
1711 -trigraphs Support ANSI C trigraphs\n\
1712 -lang-c Assume that the input sources are in C\n\
1713 -lang-c89 Assume that the input sources are in C89\n\
1714 -lang-c++ Assume that the input sources are in C++\n\
1715 -lang-objc Assume that the input sources are in ObjectiveC\n\
1716 -lang-objc++ Assume that the input sources are in ObjectiveC++\n\
1717 -lang-asm Assume that the input sources are in assembler\n\
1718 -lang-fortran Assume that the input sources are in Fortran\n\
1719 -lang-chill Assume that the input sources are in Chill\n\
1720 -std=<std name> Specify the conformance standard; one of:\n\
1721 gnu89, gnu99, c89, c99, iso9899:1990,\n\
1722 iso9899:199409, iso9899:1999\n\
1723 -+ Allow parsing of C++ style features\n\
1724 -w Inhibit warning messages\n\
1725 -Wtrigraphs Warn if trigraphs are encountered\n\
1726 -Wno-trigraphs Do not warn about trigraphs\n\
1727 -Wcomment{s} Warn if one comment starts inside another\n\
1728 -Wno-comment{s} Do not warn about comments\n\
1729 -Wtraditional Warn if a macro argument is/would be turned into\n\
1730 a string if -traditional is specified\n\
1731 -Wno-traditional Do not warn about stringification\n\
1732 -Wundef Warn if an undefined macro is used by #if\n\
1733 -Wno-undef Do not warn about testing undefined macros\n\
1734 -Wimport Warn about the use of the #import directive\n\
1735 -Wno-import Do not warn about the use of #import\n\
1736 -Werror Treat all warnings as errors\n\
1737 -Wno-error Do not treat warnings as errors\n\
1738 -Wall Enable all preprocessor warnings\n\
1739 -M Generate make dependencies\n\
1740 -MM As -M, but ignore system header files\n\
1741 -MD As -M, but put output in a .d file\n\
1742 -MMD As -MD, but ignore system header files\n\
1743 -MG Treat missing header file as generated files\n\
1744 -g Include #define and #undef directives in the output\n\
1745 -D<macro> Define a <macro> with string '1' as its value\n\
1746 -D<macro>=<val> Define a <macro> with <val> as its value\n\
1747 -A<question> (<answer>) Assert the <answer> to <question>\n\
1748 -U<macro> Undefine <macro> \n\
1749 -v Display the version number\n\
1750 -H Print the name of header files as they are used\n\
1751 -C Do not discard comments\n\
1752 -dM Display a list of macro definitions active at end\n\
1753 -dD Preserve macro definitions in output\n\
1754 -dN As -dD except that only the names are preserved\n\
1755 -dI Include #include directives in the output\n\
1756 -ifoutput Describe skipped code blocks in output \n\
1757 -P Do not generate #line directives\n\
1758 -$ Do not allow '$' in identifiers\n\
1759 -remap Remap file names when including files.\n\
1760 -h or --help Display this information\n\