2 Copyright (C) 1986, 87, 89, 92-98, 1999 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 C89 define only if -lang-c89
500 C9X define only if -lang-c9x
501 ULP value is the global user_label_prefix (which can't be
502 put directly into the table).
510 unsigned short flags;
518 static const struct builtin builtin_array[] =
520 { "__TIME__", 0, T_TIME, DUMP },
521 { "__DATE__", 0, T_DATE, DUMP },
522 { "__FILE__", 0, T_FILE, 0 },
523 { "__BASE_FILE__", 0, T_BASE_FILE, DUMP },
524 { "__LINE__", 0, T_SPECLINE, 0 },
525 { "__INCLUDE_LEVEL__", 0, T_INCLUDE_LEVEL, 0 },
526 { "__VERSION__", 0, T_VERSION, DUMP },
527 { "__STDC__", 0, T_STDC, DUMP|STDC },
529 { "__USER_LABEL_PREFIX__", 0, T_CONST, ULP },
530 { "__REGISTER_PREFIX__", REGISTER_PREFIX, T_CONST, 0 },
531 { "__HAVE_BUILTIN_SETJMP__", "1", T_CONST, 0 },
532 #ifndef NO_BUILTIN_SIZE_TYPE
533 { "__SIZE_TYPE__", SIZE_TYPE, T_CONST, DUMP },
535 #ifndef NO_BUILTIN_PTRDIFF_TYPE
536 { "__PTRDIFF_TYPE__", PTRDIFF_TYPE, T_CONST, DUMP },
538 { "__WCHAR_TYPE__", WCHAR_TYPE, T_CONST, DUMP },
539 { "__STDC_VERSION__", "199409L", T_CONST, DUMP|STDC|C89 },
540 { "__STDC_VERSION__", "199909L", T_CONST, DUMP|STDC|C9X },
544 /* Subroutine of cpp_start_read; reads the builtins table above and
545 enters the macros into the hash table. */
548 initialize_builtins (pfile)
552 const struct builtin *b;
554 for(b = builtin_array; b->name; b++)
556 if ((b->flags & STDC) && CPP_TRADITIONAL (pfile))
558 if ((b->flags & C89) && CPP_OPTIONS (pfile)->c9x)
560 if ((b->flags & C9X) && !CPP_OPTIONS (pfile)->c9x)
563 val = (b->flags & ULP) ? user_label_prefix : b->value;
564 len = strlen (b->name);
566 cpp_install (pfile, b->name, len, b->type, val, -1);
567 if ((b->flags & DUMP) && CPP_OPTIONS (pfile)->debug_output)
568 dump_special_to_buffer (pfile, b->name);
578 /* Another subroutine of cpp_start_read. This one sets up to do
579 dependency-file output. */
581 initialize_dependency_output (pfile)
584 cpp_options *opts = CPP_OPTIONS (pfile);
585 char *spec, *s, *output_file;
587 /* Either of two environment variables can specify output of deps.
588 Its value is either "OUTPUT_FILE" or "OUTPUT_FILE DEPS_TARGET",
589 where OUTPUT_FILE is the file to write deps info to
590 and DEPS_TARGET is the target to mention in the deps. */
592 if (opts->print_deps == 0)
594 spec = getenv ("DEPENDENCIES_OUTPUT");
596 opts->print_deps = 1;
599 spec = getenv ("SUNPRO_DEPENDENCIES");
601 opts->print_deps = 2;
606 /* Find the space before the DEPS_TARGET, if there is one. */
607 s = strchr (spec, ' ');
610 opts->deps_target = s + 1;
611 output_file = (char *) xmalloc (s - spec + 1);
612 memcpy (output_file, spec, s - spec);
613 output_file[s - spec] = 0;
617 opts->deps_target = 0;
621 opts->deps_file = output_file;
622 opts->print_deps_append = 1;
625 /* Print the expected object file name as the target of this Make-rule. */
626 pfile->deps_allocated_size = 200;
627 pfile->deps_buffer = (char *) xmalloc (pfile->deps_allocated_size);
628 pfile->deps_buffer[0] = 0;
629 pfile->deps_size = 0;
630 pfile->deps_column = 0;
632 if (opts->deps_target)
633 deps_output (pfile, opts->deps_target, ':');
634 else if (*opts->in_fname == 0)
635 deps_output (pfile, "-", ':');
641 /* Discard all directory prefixes from filename. */
642 q = base_name (opts->in_fname);
644 /* Copy remainder to mungable area. */
646 p = (char *) alloca (len + 8);
649 /* Output P, but remove known suffixes. */
651 /* Point to the filename suffix. */
653 /* Compare against the known suffixes. */
654 for (x = 0; known_suffixes[x]; x++)
656 if (strncmp (known_suffixes[x], r, q - r) == 0)
658 /* Make q point to the bit we're going to overwrite
659 with an object suffix. */
665 /* Supply our own suffix. */
666 strcpy (q, OBJECT_SUFFIX);
668 deps_output (pfile, p, ':');
669 deps_output (pfile, opts->in_fname, ' ');
673 /* This is called after options have been processed.
674 * Check options for consistency, and setup for processing input
675 * from the file named FNAME. (Use standard input if FNAME==NULL.)
676 * Return 1 on success, 0 on failure.
680 cpp_start_read (pfile, fname)
684 struct cpp_options *opts = CPP_OPTIONS (pfile);
685 struct pending_option *p, *q;
688 struct include_hash *ih_fake;
690 /* -MG doesn't select the form of output and must be specified with one of
691 -M or -MM. -MG doesn't make sense with -MD or -MMD since they don't
692 inhibit compilation. */
693 if (opts->print_deps_missing_files
694 && (opts->print_deps == 0 || !opts->no_output))
696 cpp_fatal (pfile, "-MG must be specified with one of -M or -MM");
700 /* Chill should not be used with -trigraphs. */
701 if (opts->chill && opts->trigraphs)
703 cpp_warning (pfile, "-lang-chill and -trigraphs are mutually exclusive");
707 /* Set this if it hasn't been set already. */
708 if (user_label_prefix == NULL)
709 user_label_prefix = USER_LABEL_PREFIX;
711 /* Now that we know dollars_in_ident, we can initialize the syntax
714 /* XXX Get rid of code that depends on this, then IStable can
716 if (opts->dollars_in_ident)
717 IStable['$'] = ISidstart|ISidnum;
719 /* Do partial setup of input buffer for the sake of generating
720 early #line directives (when -g is in effect). */
721 fp = cpp_push_buffer (pfile, NULL, 0);
724 if (opts->in_fname == NULL || *opts->in_fname == 0)
726 opts->in_fname = fname;
727 if (opts->in_fname == NULL)
730 fp->nominal_fname = fp->fname = opts->in_fname;
733 /* Install __LINE__, etc. Must follow initialize_char_syntax
734 and option processing. */
735 initialize_builtins (pfile);
737 /* Do -U's, -D's and -A's in the order they were seen. */
738 p = opts->pending->define_head;
741 if (opts->debug_output)
742 output_line_command (pfile, same_file);
744 cpp_undef (pfile, p->arg);
746 cpp_define (pfile, p->arg);
753 p = opts->pending->assert_head;
756 if (opts->debug_output)
757 output_line_command (pfile, same_file);
759 cpp_unassert (pfile, p->arg);
761 cpp_assert (pfile, p->arg);
768 opts->done_initializing = 1;
770 /* Several environment variables may add to the include search path.
771 CPATH specifies an additional list of directories to be searched
772 as if specified with -I, while C_INCLUDE_PATH, CPLUS_INCLUDE_PATH,
773 etc. specify an additional list of directories to be searched as
774 if specified with -isystem, for the language indicated.
776 These variables are ignored if -nostdinc is on. */
777 if (! opts->no_standard_includes)
780 GET_ENV_PATH_LIST (path, "CPATH");
781 if (path != 0 && *path != 0)
782 path_include (pfile, opts->pending, path, BRACKET);
784 switch ((opts->objc << 1) + opts->cplusplus)
787 GET_ENV_PATH_LIST (path, "C_INCLUDE_PATH");
790 GET_ENV_PATH_LIST (path, "CPLUS_INCLUDE_PATH");
793 GET_ENV_PATH_LIST (path, "OBJC_INCLUDE_PATH");
796 GET_ENV_PATH_LIST (path, "OBJCPLUS_INCLUDE_PATH");
799 if (path != 0 && *path != 0)
800 path_include (pfile, opts->pending, path, SYSTEM);
803 /* Unless -nostdinc, add the compiled-in include path to the list,
804 translating prefixes. */
805 if (!opts->no_standard_includes)
807 struct default_include *p = include_defaults_array;
808 char *specd_prefix = opts->include_prefix;
810 /* Search "translated" versions of GNU directories.
811 These have /usr/local/lib/gcc... replaced by specd_prefix. */
812 if (specd_prefix != 0)
814 char *default_prefix = alloca (sizeof GCC_INCLUDE_DIR - 7);
815 /* Remove the `include' from /usr/local/lib/gcc.../include.
816 GCC_INCLUDE_DIR will always end in /include. */
817 int default_len = sizeof GCC_INCLUDE_DIR - 8;
818 int specd_len = strlen (specd_prefix);
820 default_len = sizeof GCC_INCLUDE_DIR - 8;
821 memcpy (default_prefix, GCC_INCLUDE_DIR, default_len);
822 default_prefix[default_len] = '\0';
824 for (p = include_defaults_array; p->fname; p++)
826 /* Some standard dirs are only for C++. */
829 && !opts->no_standard_cplusplus_includes))
831 /* Does this dir start with the prefix? */
832 if (!strncmp (p->fname, default_prefix, default_len))
834 /* Yes; change prefix and add to search list. */
835 int flen = strlen (p->fname);
836 int this_len = specd_len + flen - default_len;
837 char *str = (char *) xmalloc (this_len + 1);
838 memcpy (str, specd_prefix, specd_len);
839 memcpy (str + specd_len,
840 p->fname + default_len,
841 flen - default_len + 1);
843 append_include_chain (pfile, opts->pending,
850 /* Search ordinary names for GNU include directories. */
851 for (p = include_defaults_array; p->fname; p++)
853 /* Some standard dirs are only for C++. */
856 && !opts->no_standard_cplusplus_includes))
858 /* XXX Potential memory leak! */
859 char *str = xstrdup (update_path (p->fname, p->component));
860 append_include_chain (pfile, opts->pending, str, SYSTEM);
865 merge_include_chains (opts);
867 /* With -v, print the list of dirs to search. */
870 struct file_name_list *p;
871 cpp_message (pfile, -1, "#include \"...\" search starts here:\n");
872 for (p = opts->quote_include; p; p = p->next)
874 if (p == opts->bracket_include)
875 cpp_message (pfile, -1, "#include <...> search starts here:\n");
876 fprintf (stderr, " %s\n", p->name);
878 cpp_message (pfile, -1, "End of search list.\n");
881 /* Don't bother trying to do macro expansion if we've already done
883 if (opts->preprocessed)
884 pfile->no_macro_expand++;
886 /* Open the main input file.
887 We do this in nonblocking mode so we don't get stuck here if
888 someone clever has asked cpp to process /dev/rmt0;
889 finclude() will check that we have a real file to work with. */
890 if (fname == NULL || *fname == 0)
895 else if ((f = open (fname, O_RDONLY|O_NONBLOCK|O_NOCTTY, 0666)) < 0)
896 cpp_pfatal_with_name (pfile, fname);
898 initialize_dependency_output (pfile);
900 /* Must call finclude() on the main input before processing
901 -include switches; otherwise the -included text winds up
902 after the main input. */
903 ih_fake = (struct include_hash *) xmalloc (sizeof (struct include_hash));
905 ih_fake->next_this_file = 0;
906 ih_fake->foundhere = ABSOLUTE_PATH; /* well sort of ... */
907 ih_fake->name = fname;
908 ih_fake->control_macro = 0;
909 ih_fake->buf = (char *)-1;
911 if (!finclude (pfile, f, ih_fake))
913 if (opts->preprocessed)
914 /* If we've already processed this code, we want to trust the #line
915 directives in the input. But we still need to update our line
916 counter accordingly. */
917 pfile->lineno = CPP_BUFFER (pfile)->lineno;
919 output_line_command (pfile, same_file);
920 pfile->only_seen_white = 2;
922 /* The -imacros files can be scanned now, but the -include files
923 have to be pushed onto the include stack and processed later,
924 in the main loop calling cpp_get_token. */
926 pfile->no_record_file++;
928 p = opts->pending->imacros_head;
931 int fd = open (p->arg, O_RDONLY|O_NONBLOCK|O_NOCTTY, 0666);
934 cpp_perror_with_name (pfile, p->arg);
937 if (!cpp_push_buffer (pfile, NULL, 0))
940 ih_fake = (struct include_hash *)
941 xmalloc (sizeof (struct include_hash));
943 ih_fake->next_this_file = 0;
944 ih_fake->foundhere = ABSOLUTE_PATH; /* well sort of ... */
945 ih_fake->name = p->arg;
946 ih_fake->control_macro = 0;
947 ih_fake->buf = (char *)-1;
949 if (finclude (pfile, fd, ih_fake))
951 if (CPP_PRINT_DEPS (pfile))
952 deps_output (pfile, ih_fake->name, ' ');
954 cpp_scan_buffer (pfile);
957 cpp_pop_buffer (pfile);
967 p = opts->pending->include_head;
970 int fd = open (p->arg, O_RDONLY|O_NONBLOCK|O_NOCTTY, 0666);
973 cpp_perror_with_name (pfile, p->arg);
976 if (!cpp_push_buffer (pfile, NULL, 0))
979 ih_fake = (struct include_hash *)
980 xmalloc (sizeof (struct include_hash));
982 ih_fake->next_this_file = 0;
983 ih_fake->foundhere = ABSOLUTE_PATH; /* well sort of ... */
984 ih_fake->name = p->arg;
985 ih_fake->control_macro = 0;
986 ih_fake->buf = (char *)-1;
988 if (finclude (pfile, fd, ih_fake))
990 if (CPP_PRINT_DEPS (pfile))
991 deps_output (pfile, ih_fake->name, ' ');
993 output_line_command (pfile, enter_file);
996 cpp_pop_buffer (pfile);
1001 pfile->no_record_file--;
1003 free (opts->pending);
1004 opts->pending = NULL;
1009 /* This is called at the end of preprocessing. It pops the
1010 last buffer and writes dependency output. It should also
1011 clear macro definitions, such that you could call cpp_start_read
1012 with a new filename to restart processing. */
1017 struct cpp_options *opts = CPP_OPTIONS (pfile);
1019 if (CPP_PREV_BUFFER (CPP_BUFFER (pfile)) != CPP_NULL_BUFFER (pfile))
1021 "cpplib internal error: buffers still stacked in cpp_finish");
1022 cpp_pop_buffer (pfile);
1024 if (opts->print_deps)
1026 /* Stream on which to print the dependency information. */
1029 /* Don't actually write the deps file if compilation has failed. */
1030 if (pfile->errors == 0)
1032 const char *deps_mode = opts->print_deps_append ? "a" : "w";
1033 if (opts->deps_file == 0)
1034 deps_stream = stdout;
1035 else if ((deps_stream = fopen (opts->deps_file, deps_mode)) == 0)
1036 cpp_pfatal_with_name (pfile, opts->deps_file);
1037 fputs (pfile->deps_buffer, deps_stream);
1038 putc ('\n', deps_stream);
1039 if (opts->deps_file)
1041 if (ferror (deps_stream) || fclose (deps_stream) != 0)
1042 cpp_fatal (pfile, "I/O error on output");
1047 if (opts->dump_macros == dump_only)
1052 for (i = HASHSIZE; --i >= 0;)
1054 for (h = pfile->hashtab[i]; h; h = h->next)
1055 if (h->type == T_MACRO)
1057 m.defn = h->value.defn;
1059 m.symlen = h->length;
1060 dump_definition (pfile, m);
1061 CPP_PUTC (pfile, '\n');
1068 new_pending_define (opts, text)
1069 struct cpp_options *opts;
1072 struct pending_option *o = (struct pending_option *)
1073 xmalloc (sizeof (struct pending_option));
1078 APPEND (opts->pending, define, o);
1081 /* Handle one command-line option in (argc, argv).
1082 Can be called multiple times, to handle multiple sets of options.
1083 Returns number of strings consumed. */
1085 cpp_handle_option (pfile, argc, argv)
1090 struct cpp_options *opts = CPP_OPTIONS (pfile);
1093 if (argv[i][0] != '-')
1095 if (opts->out_fname != NULL)
1098 cpp_fatal (pfile, "Too many arguments");
1100 else if (opts->in_fname != NULL)
1101 opts->out_fname = argv[i];
1103 opts->in_fname = argv[i];
1109 if (!strcmp (argv[i], "-fleading-underscore"))
1110 user_label_prefix = "_";
1111 else if (!strcmp (argv[i], "-fno-leading-underscore"))
1112 user_label_prefix = "";
1113 else if (!strcmp (argv[i], "-fpreprocessed"))
1114 opts->preprocessed = 1;
1115 else if (!strcmp (argv[i], "-fno-preprocessed"))
1116 opts->preprocessed = 0;
1123 case 'I': /* Add directory to path for includes. */
1124 if (!strcmp (argv[i] + 2, "-"))
1127 Use the preceding -I directories for #include "..."
1128 but not #include <...>.
1129 Don't search the directory of the present file
1130 for #include "...". (Note that -I. -I- is not the same as
1131 the default setup; -I. uses the compiler's working dir.) */
1132 if (! opts->ignore_srcdir)
1134 opts->ignore_srcdir = 1;
1135 opts->pending->quote_head = opts->pending->brack_head;
1136 opts->pending->quote_tail = opts->pending->brack_tail;
1137 opts->pending->brack_head = 0;
1138 opts->pending->brack_tail = 0;
1142 cpp_fatal (pfile, "-I- specified twice");
1149 if (argv[i][2] != 0)
1150 fname = argv[i] + 2;
1151 else if (i + 1 == argc)
1152 goto missing_dirname;
1155 append_include_chain (pfile, opts->pending,
1156 xstrdup (fname), BRACKET);
1161 /* Add directory to beginning of system include path, as a system
1162 include directory. */
1163 if (!strcmp (argv[i], "-isystem"))
1166 goto missing_filename;
1167 append_include_chain (pfile, opts->pending,
1168 xstrdup (argv[++i]), SYSTEM);
1170 else if (!strcmp (argv[i], "-include"))
1173 goto missing_filename;
1176 struct pending_option *o = (struct pending_option *)
1177 xmalloc (sizeof (struct pending_option));
1180 /* This list has to be built in reverse order so that
1181 when cpp_start_read pushes all the -include files onto
1182 the buffer stack, they will be scanned in forward order. */
1183 o->next = opts->pending->include_head;
1184 opts->pending->include_head = o;
1187 else if (!strcmp (argv[i], "-imacros"))
1190 goto missing_filename;
1193 struct pending_option *o = (struct pending_option *)
1194 xmalloc (sizeof (struct pending_option));
1198 APPEND (opts->pending, imacros, o);
1201 /* Add directory to end of path for includes,
1202 with the default prefix at the front of its name. */
1203 else if (!strcmp (argv[i], "-iwithprefix"))
1208 goto missing_dirname;
1210 len = strlen (argv[i]);
1212 if (opts->include_prefix != 0)
1214 fname = xmalloc (opts->include_prefix_len + len + 1);
1215 memcpy (fname, opts->include_prefix, opts->include_prefix_len);
1216 memcpy (fname + opts->include_prefix_len, argv[i], len + 1);
1220 fname = xmalloc (sizeof GCC_INCLUDE_DIR - 8 + len);
1221 memcpy (fname, GCC_INCLUDE_DIR, sizeof GCC_INCLUDE_DIR - 9);
1222 memcpy (fname + sizeof GCC_INCLUDE_DIR - 9, argv[i], len + 1);
1225 append_include_chain (pfile, opts->pending, fname, SYSTEM);
1227 /* Add directory to main path for includes,
1228 with the default prefix at the front of its name. */
1229 else if (!strcmp (argv[i], "-iwithprefixbefore"))
1234 goto missing_dirname;
1236 len = strlen (argv[i]);
1238 if (opts->include_prefix != 0)
1240 fname = xmalloc (opts->include_prefix_len + len + 1);
1241 memcpy (fname, opts->include_prefix, opts->include_prefix_len);
1242 memcpy (fname + opts->include_prefix_len, argv[i], len + 1);
1246 fname = xmalloc (sizeof GCC_INCLUDE_DIR - 8 + len);
1247 memcpy (fname, GCC_INCLUDE_DIR, sizeof GCC_INCLUDE_DIR - 9);
1248 memcpy (fname + sizeof GCC_INCLUDE_DIR - 9, argv[i], len + 1);
1251 append_include_chain (pfile, opts->pending, fname, BRACKET);
1253 /* Add directory to end of path for includes. */
1254 else if (!strcmp (argv[i], "-idirafter"))
1257 goto missing_dirname;
1258 append_include_chain (pfile, opts->pending,
1259 xstrdup (argv[++i]), AFTER);
1261 else if (!strcmp (argv[i], "-iprefix"))
1264 goto missing_filename;
1267 opts->include_prefix = argv[++i];
1268 opts->include_prefix_len = strlen (argv[i]);
1271 else if (!strcmp (argv[i], "-ifoutput"))
1272 opts->output_conditionals = 1;
1277 if (opts->out_fname != NULL)
1279 cpp_fatal (pfile, "Output filename specified twice");
1283 goto missing_filename;
1284 opts->out_fname = argv[++i];
1285 if (!strcmp (opts->out_fname, "-"))
1286 opts->out_fname = "";
1290 if (!strcmp (argv[i], "-pedantic"))
1291 CPP_PEDANTIC (pfile) = 1;
1292 else if (!strcmp (argv[i], "-pedantic-errors"))
1294 CPP_PEDANTIC (pfile) = 1;
1295 opts->pedantic_errors = 1;
1298 else if (!strcmp (argv[i], "-pcp")) {
1299 char *pcp_fname = argv[++i];
1300 pcp_outfile = ((pcp_fname[0] != '-' || pcp_fname[1] != '\0')
1301 ? fopen (pcp_fname, "w")
1302 : fdopen (dup (fileno (stdout)), "w"));
1303 if (pcp_outfile == 0)
1304 cpp_pfatal_with_name (pfile, pcp_fname);
1311 if (!strcmp (argv[i], "-traditional"))
1313 opts->traditional = 1;
1314 opts->cplusplus_comments = 0;
1316 else if (!strcmp (argv[i], "-trigraphs"))
1317 opts->trigraphs = 1;
1321 if (! strcmp (argv[i], "-lang-c"))
1322 opts->cplusplus = 0, opts->cplusplus_comments = 1, opts->c89 = 0,
1323 opts->c9x = 1, opts->objc = 0;
1324 if (! strcmp (argv[i], "-lang-c89"))
1326 opts->cplusplus = 0, opts->cplusplus_comments = 0;
1327 opts->c89 = 1, opts->c9x = 0, opts->objc = 0;
1328 opts->trigraphs = 1;
1329 new_pending_define (opts, "__STRICT_ANSI__");
1331 if (! strcmp (argv[i], "-lang-c++"))
1332 opts->cplusplus = 1, opts->cplusplus_comments = 1, opts->c89 = 0,
1333 opts->c9x = 0, opts->objc = 0;
1334 if (! strcmp (argv[i], "-lang-objc"))
1335 opts->cplusplus = 0, opts->cplusplus_comments = 1, opts->c89 = 0,
1336 opts->c9x = 0, opts->objc = 1;
1337 if (! strcmp (argv[i], "-lang-objc++"))
1338 opts->cplusplus = 1, opts->cplusplus_comments = 1, opts->c89 = 0,
1339 opts->c9x = 0, opts->objc = 1;
1340 if (! strcmp (argv[i], "-lang-asm"))
1342 if (! strcmp (argv[i], "-lint"))
1344 if (! strcmp (argv[i], "-lang-chill"))
1345 opts->objc = 0, opts->cplusplus = 0, opts->chill = 1,
1346 opts->traditional = 1;
1350 opts->cplusplus = 1, opts->cplusplus_comments = 1;
1354 if (!strcmp (argv[i], "-std=gnu89"))
1356 opts->cplusplus = 0, opts->cplusplus_comments = 0;
1357 opts->c89 = 1, opts->c9x = 0, opts->objc = 0;
1359 else if (!strcmp (argv[i], "-std=gnu9x"))
1361 opts->cplusplus = 0, opts->cplusplus_comments = 1;
1362 opts->c89 = 0, opts->c9x = 1, opts->objc = 0;
1363 new_pending_define (opts, "__STDC_VERSION__=199901L");
1365 else if (!strcmp (argv[i], "-std=iso9899:1990")
1366 || !strcmp (argv[i], "-std=c89"))
1368 opts->cplusplus = 0, opts->cplusplus_comments = 0;
1369 opts->c89 = 1, opts->c9x = 0, opts->objc = 0;
1370 opts->trigraphs = 1;
1371 new_pending_define (opts, "__STRICT_ANSI__");
1373 else if (!strcmp (argv[i], "-std=iso9899:199409"))
1375 opts->cplusplus = 0, opts->cplusplus_comments = 0;
1376 opts->c89 = 1, opts->c9x = 0, opts->objc = 0;
1377 opts->trigraphs = 1;
1378 new_pending_define (opts, "__STRICT_ANSI__");
1379 new_pending_define (opts, "__STDC_VERSION__=199409L");
1381 else if (!strcmp (argv[i], "-std=iso9899:199x")
1382 || !strcmp (argv[i], "-std=iso9899:1999")
1383 || !strcmp (argv[i], "-std=c9x")
1384 || !strcmp (argv[i], "-std=c99"))
1386 opts->cplusplus = 0, opts->cplusplus_comments = 1;
1387 opts->c89 = 0, opts->c9x = 1, opts->objc = 0;
1388 opts->trigraphs = 1;
1389 new_pending_define (opts, "__STRICT_ANSI__");
1390 new_pending_define (opts, "__STDC_VERSION__=199901L");
1395 opts->inhibit_warnings = 1;
1399 if (!strcmp (argv[i], "-Wtrigraphs"))
1400 opts->warn_trigraphs = 1;
1401 else if (!strcmp (argv[i], "-Wno-trigraphs"))
1402 opts->warn_trigraphs = 0;
1403 else if (!strcmp (argv[i], "-Wcomment"))
1404 opts->warn_comments = 1;
1405 else if (!strcmp (argv[i], "-Wno-comment"))
1406 opts->warn_comments = 0;
1407 else if (!strcmp (argv[i], "-Wcomments"))
1408 opts->warn_comments = 1;
1409 else if (!strcmp (argv[i], "-Wno-comments"))
1410 opts->warn_comments = 0;
1411 else if (!strcmp (argv[i], "-Wtraditional"))
1412 opts->warn_stringify = 1;
1413 else if (!strcmp (argv[i], "-Wno-traditional"))
1414 opts->warn_stringify = 0;
1415 else if (!strcmp (argv[i], "-Wundef"))
1416 opts->warn_undef = 1;
1417 else if (!strcmp (argv[i], "-Wno-undef"))
1418 opts->warn_undef = 0;
1419 else if (!strcmp (argv[i], "-Wimport"))
1420 opts->warn_import = 1;
1421 else if (!strcmp (argv[i], "-Wno-import"))
1422 opts->warn_import = 0;
1423 else if (!strcmp (argv[i], "-Werror"))
1424 opts->warnings_are_errors = 1;
1425 else if (!strcmp (argv[i], "-Wno-error"))
1426 opts->warnings_are_errors = 0;
1427 else if (!strcmp (argv[i], "-Wall"))
1429 opts->warn_trigraphs = 1;
1430 opts->warn_comments = 1;
1435 /* The style of the choices here is a bit mixed.
1436 The chosen scheme is a hybrid of keeping all options in one string
1437 and specifying each option in a separate argument:
1438 -M|-MM|-MD file|-MMD file [-MG]. An alternative is:
1439 -M|-MM|-MD file|-MMD file|-MG|-MMG; or more concisely:
1440 -M[M][G][D file]. This is awkward to handle in specs, and is not
1442 /* ??? -MG must be specified in addition to one of -M or -MM.
1443 This can be relaxed in the future without breaking anything.
1444 The converse isn't true. */
1446 /* -MG isn't valid with -MD or -MMD. This is checked for later. */
1447 if (!strcmp (argv[i], "-MG"))
1449 opts->print_deps_missing_files = 1;
1452 if (!strcmp (argv[i], "-M"))
1453 opts->print_deps = 2;
1454 else if (!strcmp (argv[i], "-MM"))
1455 opts->print_deps = 1;
1456 else if (!strcmp (argv[i], "-MD"))
1457 opts->print_deps = 2;
1458 else if (!strcmp (argv[i], "-MMD"))
1459 opts->print_deps = 1;
1460 /* For -MD and -MMD options, write deps on file named by next arg. */
1461 if (!strcmp (argv[i], "-MD") || !strcmp (argv[i], "-MMD"))
1464 goto missing_filename;
1465 opts->deps_file = argv[++i];
1469 /* For -M and -MM, write deps on standard output
1470 and suppress the usual output. */
1471 opts->no_output = 1;
1477 char *p = argv[i] + 2;
1479 while ((c = *p++) != 0)
1481 /* Arg to -d specifies what parts of macros to dump */
1485 opts->dump_macros = dump_only;
1486 opts->no_output = 1;
1489 opts->dump_macros = dump_names;
1492 opts->dump_macros = dump_definitions;
1495 opts->dump_includes = 1;
1503 if (argv[i][2] == '3')
1504 opts->debug_output = 1;
1508 if (!strcmp (argv[i], "--help"))
1510 else if (!strcmp (argv[i], "--version"))
1511 cpp_notice ("GNU CPP version %s\n", version_string);
1516 cpp_notice ("GNU CPP version %s", version_string);
1517 #ifdef TARGET_VERSION
1520 fputc ('\n', stderr);
1525 opts->print_include_names = 1;
1531 if (argv[i][2] != 0)
1533 else if (i + 1 == argc)
1535 cpp_fatal (pfile, "Macro name missing after -D option");
1540 new_pending_define (opts, text);
1548 if (argv[i][2] != 0)
1550 else if (i + 1 == argc)
1552 cpp_fatal (pfile, "Assertion missing after -A option");
1558 if (strcmp (p, "-"))
1560 struct pending_option *o = (struct pending_option *)
1561 xmalloc (sizeof (struct pending_option));
1566 APPEND (opts->pending, assert, o);
1570 /* -A- eliminates all predefined macros and assertions.
1571 Let's include also any that were specified earlier
1572 on the command line. That way we can get rid of any
1573 that were passed automatically in from GCC. */
1574 struct pending_option *o1, *o2;
1576 o1 = opts->pending->define_head;
1583 o1 = opts->pending->assert_head;
1590 opts->pending->assert_head = NULL;
1591 opts->pending->assert_tail = NULL;
1592 opts->pending->define_head = NULL;
1593 opts->pending->define_tail = NULL;
1600 struct pending_option *o = (struct pending_option *)
1601 xmalloc (sizeof (struct pending_option));
1603 if (argv[i][2] != 0)
1604 o->arg = argv[i] + 2;
1605 else if (i + 1 == argc)
1607 cpp_fatal (pfile, "Macro name missing after -U option");
1615 APPEND (opts->pending, define, o);
1620 opts->put_out_comments = 1;
1623 case 'E': /* -E comes from cc -E; ignore it. */
1627 opts->no_line_commands = 1;
1630 case '$': /* Don't include $ in identifiers. */
1631 opts->dollars_in_ident = 0;
1635 if (!strcmp (argv[i], "-nostdinc"))
1636 /* -nostdinc causes no default include directories.
1637 You must specify all include-file directories with -I. */
1638 opts->no_standard_includes = 1;
1639 else if (!strcmp (argv[i], "-nostdinc++"))
1640 /* -nostdinc++ causes no default C++-specific include directories. */
1641 opts->no_standard_cplusplus_includes = 1;
1643 else if (!strcmp (argv[i], "-noprecomp"))
1649 if (!strcmp (argv[i], "-remap"))
1653 case '\0': /* JF handle '-' as file name meaning stdin or stdout */
1654 if (opts->in_fname == NULL)
1655 opts->in_fname = "";
1656 else if (opts->out_fname == NULL)
1657 opts->out_fname = "";
1659 return i; /* error */
1669 cpp_fatal (pfile, "Filename missing after `%s' option", argv[i]);
1672 cpp_fatal (pfile, "Directory name missing after `%s' option", argv[i]);
1676 /* Handle command-line options in (argc, argv).
1677 Can be called multiple times, to handle multiple sets of options.
1678 Returns if an unrecognized option is seen.
1679 Returns number of strings consumed. */
1682 cpp_handle_options (pfile, argc, argv)
1688 int strings_processed;
1689 for (i = 0; i < argc; i += strings_processed)
1691 strings_processed = cpp_handle_option (pfile, argc - i, argv + i);
1692 if (strings_processed == 0)
1701 cpp_notice ("Usage: %s [switches] input output\n", progname);
1704 -include <file> Include the contents of <file> before other files\n\
1705 -imacros <file> Accept definition of macros in <file>\n\
1706 -iprefix <path> Specify <path> as a prefix for next two options\n\
1707 -iwithprefix <dir> Add <dir> to the end of the system include path\n\
1708 -iwithprefixbefore <dir> Add <dir> to the end of the main include path\n\
1709 -isystem <dir> Add <dir> to the start of the system include path\n\
1710 -idirafter <dir> Add <dir> to the end of the system include path\n\
1711 -I <dir> Add <dir> to the end of the main include path\n\
1712 -nostdinc Do not search system include directories\n\
1713 (dirs specified with -isystem will still be used)\n\
1714 -nostdinc++ Do not search system include directories for C++\n\
1715 -o <file> Put output into <file>\n\
1716 -pedantic Issue all warnings demanded by strict ANSI C\n\
1717 -traditional Follow K&R pre-processor behaviour\n\
1718 -trigraphs Support ANSI C trigraphs\n\
1719 -lang-c Assume that the input sources are in C\n\
1720 -lang-c89 Assume that the input sources are in C89\n\
1721 -lang-c++ Assume that the input sources are in C++\n\
1722 -lang-objc Assume that the input sources are in ObjectiveC\n\
1723 -lang-objc++ Assume that the input sources are in ObjectiveC++\n\
1724 -lang-asm Assume that the input sources are in assembler\n\
1725 -lang-chill Assume that the input sources are in Chill\n\
1726 -std=<std name> Specify the conformance standard; one of:\n\
1727 gnu89, gnu9x, c89, c9x, iso9899:1990,\n\
1728 iso9899:199409, iso9899:199x\n\
1729 -+ Allow parsing of C++ style features\n\
1730 -w Inhibit warning messages\n\
1731 -Wtrigraphs Warn if trigraphs are encountered\n\
1732 -Wno-trigraphs Do not warn about trigraphs\n\
1733 -Wcomment{s} Warn if one comment starts inside another\n\
1734 -Wno-comment{s} Do not warn about comments\n\
1735 -Wtraditional Warn if a macro argument is/would be turned into\n\
1736 a string if -traditional is specified\n\
1737 -Wno-traditional Do not warn about stringification\n\
1738 -Wundef Warn if an undefined macro is used by #if\n\
1739 -Wno-undef Do not warn about testing undefined macros\n\
1740 -Wimport Warn about the use of the #import directive\n\
1741 -Wno-import Do not warn about the use of #import\n\
1742 -Werror Treat all warnings as errors\n\
1743 -Wno-error Do not treat warnings as errors\n\
1744 -Wall Enable all preprocessor warnings\n\
1745 -M Generate make dependencies\n\
1746 -MM As -M, but ignore system header files\n\
1747 -MD As -M, but put output in a .d file\n\
1748 -MMD As -MD, but ignore system header files\n\
1749 -MG Treat missing header file as generated files\n\
1750 -g Include #define and #undef directives in the output\n\
1751 -D<macro> Define a <macro> with string '1' as its value\n\
1752 -D<macro>=<val> Define a <macro> with <val> as its value\n\
1753 -A<question> (<answer>) Assert the <answer> to <question>\n\
1754 -U<macro> Undefine <macro> \n\
1755 -v Display the version number\n\
1756 -H Print the name of header files as they are used\n\
1757 -C Do not discard comments\n\
1758 -dM Display a list of macro definitions active at end\n\
1759 -dD Preserve macro definitions in output\n\
1760 -dN As -dD except that only the names are preserved\n\
1761 -dI Include #include directives in the output\n\
1762 -ifoutput Describe skipped code blocks in output \n\
1763 -P Do not generate #line directives\n\
1764 -$ Do not allow '$' in identifiers\n\
1765 -remap Remap file names when including files.\n\
1766 -h or --help Display this information\n\