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
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. */
33 /* Predefined symbols, built-in macros, and the default include path. */
35 #ifndef GET_ENV_PATH_LIST
36 #define GET_ENV_PATH_LIST(VAR,NAME) do { (VAR) = getenv (NAME); } while (0)
39 #ifndef STANDARD_INCLUDE_DIR
40 #define STANDARD_INCLUDE_DIR "/usr/include"
43 /* We let tm.h override the types used here, to handle trivial differences
44 such as the choice of unsigned int or long unsigned int for size_t.
45 When machines start needing nontrivial differences in the size type,
46 it would be best to do something here to figure out automatically
47 from other information what type to use. */
49 /* The string value for __SIZE_TYPE__. */
52 #define SIZE_TYPE "long unsigned int"
55 /* The string value for __PTRDIFF_TYPE__. */
58 #define PTRDIFF_TYPE "long int"
61 /* The string value for __WCHAR_TYPE__. */
64 #define WCHAR_TYPE "int"
67 /* The string value for __USER_LABEL_PREFIX__ */
69 #ifndef USER_LABEL_PREFIX
70 #define USER_LABEL_PREFIX ""
73 /* The string value for __REGISTER_PREFIX__ */
75 #ifndef REGISTER_PREFIX
76 #define REGISTER_PREFIX ""
79 /* Suffix for object files, and known input-file extensions. */
80 static const char * const known_suffixes[] =
82 ".c", ".C", ".s", ".S", ".m",
83 ".cc", ".cxx", ".cpp", ".cp", ".c++",
89 # define OBJECT_SUFFIX ".obj"
91 # define OBJECT_SUFFIX ".o"
96 /* This is the default list of directories to search for include files.
97 It may be overridden by the various -I and -ixxx options.
99 #include "file" looks in the same directory as the current file,
101 #include <file> just looks in this list.
103 All these directories are treated as `system' include directories
104 (they are not subject to pedantic warnings in some cases). */
106 static struct default_include
108 const char *fname; /* The name of the directory. */
109 const char *component; /* The component containing the directory
110 (see update_path in prefix.c) */
111 int cplusplus; /* Only look here if we're compiling C++. */
112 int cxx_aware; /* Includes in this directory don't need to
113 be wrapped in extern "C" when compiling
114 C++. This is not used anymore. */
116 include_defaults_array[]
117 #ifdef INCLUDE_DEFAULTS
121 /* Pick up GNU C++ specific include files. */
122 { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 },
124 /* This is the dir for fixincludes. Put it just before
125 the files that we fix. */
126 { GCC_INCLUDE_DIR, "GCC", 0, 0 },
127 /* For cross-compilation, this dir name is generated
128 automatically in Makefile.in. */
129 { CROSS_INCLUDE_DIR, "GCC", 0, 0 },
130 #ifdef TOOL_INCLUDE_DIR
131 /* This is another place that the target system's headers might be. */
132 { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1 },
134 #else /* not CROSS_COMPILE */
135 #ifdef LOCAL_INCLUDE_DIR
136 /* This should be /usr/local/include and should come before
137 the fixincludes-fixed header files. */
138 { LOCAL_INCLUDE_DIR, 0, 0, 1 },
140 #ifdef TOOL_INCLUDE_DIR
141 /* This is here ahead of GCC_INCLUDE_DIR because assert.h goes here.
142 Likewise, behind LOCAL_INCLUDE_DIR, where glibc puts its assert.h. */
143 { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1 },
145 /* This is the dir for fixincludes. Put it just before
146 the files that we fix. */
147 { GCC_INCLUDE_DIR, "GCC", 0, 0 },
148 /* Some systems have an extra dir of include files. */
149 #ifdef SYSTEM_INCLUDE_DIR
150 { SYSTEM_INCLUDE_DIR, 0, 0, 0 },
152 #ifndef STANDARD_INCLUDE_COMPONENT
153 #define STANDARD_INCLUDE_COMPONENT 0
155 { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0 },
156 #endif /* not CROSS_COMPILE */
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) */
168 struct pending_option
170 struct pending_option *next;
176 #define APPEND(pend, list, elt) \
177 do { if (!(pend)->list##_head) (pend)->list##_head = (elt); \
178 else (pend)->list##_tail->next = (elt); \
179 (pend)->list##_tail = (elt); \
182 #define APPEND(pend, list, elt) \
183 do { if (!(pend)->list/**/_head) (pend)->list/**/_head = (elt); \
184 else (pend)->list/**/_tail->next = (elt); \
185 (pend)->list/**/_tail = (elt); \
189 static void print_help PARAMS ((void));
190 static void path_include PARAMS ((cpp_reader *,
191 struct cpp_pending *,
193 static void initialize_builtins PARAMS ((cpp_reader *));
194 static void append_include_chain PARAMS ((cpp_reader *,
195 struct cpp_pending *,
197 static char *base_name PARAMS ((const char *));
198 static void dump_special_to_buffer PARAMS ((cpp_reader *, const char *));
199 static void initialize_dependency_output PARAMS ((cpp_reader *));
200 static void new_pending_define PARAMS ((struct cpp_options *,
203 /* Last argument to append_include_chain: chain to use */
204 enum { QUOTE = 0, BRACKET, SYSTEM, AFTER };
206 /* If gcc is in use (stage2/stage3) we can make this table initialized data. */
208 #define CAT(a, b) a##b
210 #define CAT(a, b) a/**/b
213 #if (GCC_VERSION >= 2007)
214 #define TABLE(id) static inline void CAT(init_, id) PARAMS ((void)) {} \
215 unsigned char id[256] = {
216 #define s(p, v) [p] = v,
219 #define TABLE(id) unsigned char id[256] = { 0 }; \
220 static void CAT(init_,id) PARAMS ((void)) { \
221 unsigned char *x = id;
222 #define s(p, v) x[p] = v;
226 #define A(x) s(x, ISidnum|ISidstart)
227 #define N(x) s(x, ISidnum|ISnumstart)
228 #define H(x) s(x, IShspace|ISspace)
229 #define S(x) s(x, ISspace)
234 A('a') A('b') A('c') A('d') A('e') A('f') A('g') A('h') A('i')
235 A('j') A('k') A('l') A('m') A('n') A('o') A('p') A('q') A('r')
236 A('s') A('t') A('u') A('v') A('w') A('x') A('y') A('z')
238 A('A') A('B') A('C') A('D') A('E') A('F') A('G') A('H') A('I')
239 A('J') A('K') A('L') A('M') A('N') A('O') A('P') A('Q') A('R')
240 A('S') A('T') A('U') A('V') A('W') A('X') A('Y') A('Z')
242 N('1') N('2') N('3') N('4') N('5') N('6') N('7') N('8') N('9') N('0')
244 H(' ') H('\t') H('\v') H('\f')
258 /* Given a colon-separated list of file names PATH,
259 add all the names to the search path for include files. */
262 path_include (pfile, pend, list, path)
264 struct cpp_pending *pend;
274 /* Find the end of this name. */
276 while (*q != 0 && *q != PATH_SEPARATOR) q++;
279 /* An empty name in the path stands for the current directory. */
280 name = (char *) xmalloc (2);
286 /* Otherwise use the directory that is named. */
287 name = (char *) xmalloc (q - p + 1);
288 memcpy (name, p, q - p);
292 append_include_chain (pfile, pend, name, path);
294 /* Advance past this name. */
302 /* Find the base name of a (partial) pathname FNAME.
303 Returns a pointer into the string passed in.
304 Accepts Unix (/-separated) paths on all systems,
305 DOS and VMS paths on those systems. */
310 char *s = (char *)fname;
312 #if defined (HAVE_DOS_BASED_FILE_SYSTEM)
313 if (ISALPHA (s[0]) && s[1] == ':') s += 2;
314 if ((p = rindex (s, '\\'))) s = p + 1;
316 if ((p = rindex (s, ':'))) s = p + 1; /* Skip device. */
317 if ((p = rindex (s, ']'))) s = p + 1; /* Skip directory. */
318 if ((p = rindex (s, '>'))) s = p + 1; /* Skip alternate (int'n'l) dir. */
320 if ((p = rindex (s, '/'))) s = p + 1;
325 /* Append DIR to include path PATH. DIR must be permanently allocated
328 append_include_chain (pfile, pend, dir, path)
330 struct cpp_pending *pend;
334 struct file_name_list *new;
338 simplify_pathname (dir);
341 /* Dirs that don't exist are silently ignored. */
343 cpp_notice_from_errno (pfile, dir);
344 else if (CPP_OPTIONS (pfile)->verbose)
345 fprintf (stderr, _("ignoring nonexistent directory `%s'\n"), dir);
349 if (!S_ISDIR (st.st_mode))
351 cpp_notice (pfile, "%s: Not a directory", dir);
356 if (len > pfile->max_include_len)
357 pfile->max_include_len = len;
359 new = (struct file_name_list *)xmalloc (sizeof (struct file_name_list));
362 new->ino = st.st_ino;
363 new->dev = st.st_dev;
364 new->sysp = (path == SYSTEM);
365 new->name_map = NULL;
371 case QUOTE: APPEND (pend, quote, new); break;
372 case BRACKET: APPEND (pend, brack, new); break;
373 case SYSTEM: APPEND (pend, systm, new); break;
374 case AFTER: APPEND (pend, after, new); break;
379 /* Write out a #define command for the special named MACRO_NAME
380 to PFILE's token_buffer. */
383 dump_special_to_buffer (pfile, macro_name)
385 const char *macro_name;
387 static char define_directive[] = "#define ";
388 int macro_name_length = strlen (macro_name);
389 output_line_command (pfile, same_file);
390 CPP_RESERVE (pfile, sizeof(define_directive) + macro_name_length);
391 CPP_PUTS_Q (pfile, define_directive, sizeof(define_directive)-1);
392 CPP_PUTS_Q (pfile, macro_name, macro_name_length);
393 CPP_PUTC_Q (pfile, ' ');
394 cpp_expand_to_buffer (pfile, macro_name, macro_name_length);
395 CPP_PUTC (pfile, '\n');
398 /* Initialize a cpp_options structure. */
400 cpp_options_init (opts)
403 bzero ((char *) opts, sizeof (struct cpp_options));
405 opts->dollars_in_ident = 1;
406 opts->cplusplus_comments = 1;
407 opts->warn_import = 1;
408 opts->discard_comments = 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->token_buffer_size = 200;
422 pfile->token_buffer = (U_CHAR *) xmalloc (pfile->token_buffer_size);
423 CPP_SET_WRITTEN (pfile, 0);
425 pfile->hashtab = (HASHNODE **) xcalloc (HASHSIZE, sizeof (HASHNODE *));
428 /* Free resources used by PFILE.
429 This is the cpp_reader 'finalizer' or 'destructor' (in C++ terminology). */
435 while (CPP_BUFFER (pfile) != CPP_NULL_BUFFER (pfile))
436 cpp_pop_buffer (pfile);
438 if (pfile->token_buffer)
440 free (pfile->token_buffer);
441 pfile->token_buffer = NULL;
444 if (pfile->deps_buffer)
446 free (pfile->deps_buffer);
447 pfile->deps_buffer = NULL;
448 pfile->deps_allocated_size = 0;
451 if (pfile->input_buffer)
453 free (pfile->input_buffer);
454 free (pfile->input_speccase);
455 pfile->input_buffer = pfile->input_speccase = NULL;
456 pfile->input_buffer_len = 0;
459 while (pfile->if_stack)
461 IF_STACK_FRAME *temp = pfile->if_stack;
462 pfile->if_stack = temp->next;
466 for (i = ALL_INCLUDE_HASHSIZE; --i >= 0; )
468 struct include_hash *imp = pfile->all_include_files[i];
471 struct include_hash *next = imp->next;
473 /* This gets freed elsewhere - I think. */
479 pfile->all_include_files[i] = 0;
482 for (i = HASHSIZE; --i >= 0;)
484 while (pfile->hashtab[i])
485 delete_macro (pfile->hashtab[i]);
487 free (pfile->hashtab);
491 /* This structure defines one built-in macro. A node of type TYPE will
492 be entered in the macro hash table under the name NAME, with value
493 VALUE (if any). FLAGS tweaks the behavior a little:
494 DUMP write debug info for this macro
495 STDC define only if not -traditional
496 ULP value is the global user_label_prefix (which can't be
497 put directly into the table).
505 unsigned short flags;
511 static const struct builtin builtin_array[] =
513 { "__TIME__", 0, T_TIME, DUMP },
514 { "__DATE__", 0, T_DATE, DUMP },
515 { "__FILE__", 0, T_FILE, 0 },
516 { "__BASE_FILE__", 0, T_BASE_FILE, DUMP },
517 { "__LINE__", 0, T_SPECLINE, 0 },
518 { "__INCLUDE_LEVEL__", 0, T_INCLUDE_LEVEL, 0 },
519 { "__VERSION__", 0, T_VERSION, DUMP },
520 { "__STDC__", 0, T_STDC, DUMP|STDC },
522 { "__USER_LABEL_PREFIX__", 0, T_CONST, ULP },
523 { "__REGISTER_PREFIX__", REGISTER_PREFIX, T_CONST, 0 },
524 { "__HAVE_BUILTIN_SETJMP__", "1", T_CONST, 0 },
525 #ifndef NO_BUILTIN_SIZE_TYPE
526 { "__SIZE_TYPE__", SIZE_TYPE, T_CONST, DUMP },
528 #ifndef NO_BUILTIN_PTRDIFF_TYPE
529 { "__PTRDIFF_TYPE__", PTRDIFF_TYPE, T_CONST, DUMP },
531 #ifndef NO_BUILTIN_WCHAR_TYPE
532 { "__WCHAR_TYPE__", WCHAR_TYPE, T_CONST, DUMP },
537 /* Subroutine of cpp_start_read; reads the builtins table above and
538 enters the macros into the hash table. */
541 initialize_builtins (pfile)
545 const struct builtin *b;
547 for(b = builtin_array; b->name; b++)
549 if ((b->flags & STDC) && CPP_TRADITIONAL (pfile))
552 val = (b->flags & ULP) ? user_label_prefix : b->value;
553 len = strlen (b->name);
555 cpp_install (pfile, b->name, len, b->type, val);
556 if ((b->flags & DUMP) && CPP_OPTIONS (pfile)->debug_output)
557 dump_special_to_buffer (pfile, b->name);
565 /* Another subroutine of cpp_start_read. This one sets up to do
566 dependency-file output. */
568 initialize_dependency_output (pfile)
571 cpp_options *opts = CPP_OPTIONS (pfile);
572 char *spec, *s, *output_file;
574 /* Either of two environment variables can specify output of deps.
575 Its value is either "OUTPUT_FILE" or "OUTPUT_FILE DEPS_TARGET",
576 where OUTPUT_FILE is the file to write deps info to
577 and DEPS_TARGET is the target to mention in the deps. */
579 if (opts->print_deps == 0)
581 spec = getenv ("DEPENDENCIES_OUTPUT");
583 opts->print_deps = 1;
586 spec = getenv ("SUNPRO_DEPENDENCIES");
588 opts->print_deps = 2;
593 /* Find the space before the DEPS_TARGET, if there is one. */
594 s = strchr (spec, ' ');
597 opts->deps_target = s + 1;
598 output_file = (char *) xmalloc (s - spec + 1);
599 memcpy (output_file, spec, s - spec);
600 output_file[s - spec] = 0;
604 opts->deps_target = 0;
608 opts->deps_file = output_file;
609 opts->print_deps_append = 1;
612 /* Print the expected object file name as the target of this Make-rule. */
613 pfile->deps_allocated_size = 200;
614 pfile->deps_buffer = (char *) xmalloc (pfile->deps_allocated_size);
615 pfile->deps_buffer[0] = 0;
616 pfile->deps_size = 0;
617 pfile->deps_column = 0;
619 if (opts->deps_target)
620 deps_output (pfile, opts->deps_target, ':');
621 else if (*opts->in_fname == 0)
622 deps_output (pfile, "-", ':');
628 /* Discard all directory prefixes from filename. */
629 q = base_name (opts->in_fname);
631 /* Copy remainder to mungable area. */
633 p = (char *) alloca (len + 8);
636 /* Output P, but remove known suffixes. */
638 /* Point to the filename suffix. */
639 r = strrchr (p, '.');
641 /* Compare against the known suffixes. */
642 for (x = 0; known_suffixes[x]; x++)
643 if (strncmp (known_suffixes[x], r, q - r) == 0)
645 /* Make q point to the bit we're going to overwrite
646 with an object suffix. */
651 /* Supply our own suffix. */
652 strcpy (q, OBJECT_SUFFIX);
654 deps_output (pfile, p, ':');
655 deps_output (pfile, opts->in_fname, ' ');
659 /* This is called after options have been processed.
660 * Check options for consistency, and setup for processing input
661 * from the file named FNAME. (Use standard input if FNAME==NULL.)
662 * Return 1 on success, 0 on failure.
666 cpp_start_read (pfile, fname)
670 struct cpp_options *opts = CPP_OPTIONS (pfile);
671 struct pending_option *p, *q;
674 struct include_hash *ih_fake;
676 /* -MG doesn't select the form of output and must be specified with one of
677 -M or -MM. -MG doesn't make sense with -MD or -MMD since they don't
678 inhibit compilation. */
679 if (opts->print_deps_missing_files
680 && (opts->print_deps == 0 || !opts->no_output))
682 cpp_fatal (pfile, "-MG must be specified with one of -M or -MM");
686 /* Chill should not be used with -trigraphs. */
687 if (opts->chill && opts->trigraphs)
689 cpp_warning (pfile, "-lang-chill and -trigraphs are mutually exclusive");
693 /* Set this if it hasn't been set already. */
694 if (user_label_prefix == NULL)
695 user_label_prefix = USER_LABEL_PREFIX;
697 /* Now that we know dollars_in_ident, we can initialize the syntax
700 /* XXX Get rid of code that depends on this, then IStable can
702 if (opts->dollars_in_ident)
703 IStable['$'] = ISidstart|ISidnum;
705 /* Do partial setup of input buffer for the sake of generating
706 early #line directives (when -g is in effect). */
707 fp = cpp_push_buffer (pfile, NULL, 0);
710 if (opts->in_fname == NULL || *opts->in_fname == 0)
712 opts->in_fname = fname;
713 if (opts->in_fname == NULL)
716 fp->nominal_fname = fp->fname = opts->in_fname;
719 /* Install __LINE__, etc. Must follow initialize_char_syntax
720 and option processing. */
721 initialize_builtins (pfile);
723 /* Do -U's, -D's and -A's in the order they were seen. */
724 p = opts->pending->define_head;
727 if (opts->debug_output)
728 output_line_command (pfile, same_file);
730 cpp_undef (pfile, p->arg);
732 cpp_define (pfile, p->arg);
739 p = opts->pending->assert_head;
742 if (opts->debug_output)
743 output_line_command (pfile, same_file);
745 cpp_unassert (pfile, p->arg);
747 cpp_assert (pfile, p->arg);
754 opts->done_initializing = 1;
756 /* Several environment variables may add to the include search path.
757 CPATH specifies an additional list of directories to be searched
758 as if specified with -I, while C_INCLUDE_PATH, CPLUS_INCLUDE_PATH,
759 etc. specify an additional list of directories to be searched as
760 if specified with -isystem, for the language indicated.
762 These variables are ignored if -nostdinc is on. */
763 if (! opts->no_standard_includes)
766 GET_ENV_PATH_LIST (path, "CPATH");
767 if (path != 0 && *path != 0)
768 path_include (pfile, opts->pending, path, BRACKET);
770 switch ((opts->objc << 1) + opts->cplusplus)
773 GET_ENV_PATH_LIST (path, "C_INCLUDE_PATH");
776 GET_ENV_PATH_LIST (path, "CPLUS_INCLUDE_PATH");
779 GET_ENV_PATH_LIST (path, "OBJC_INCLUDE_PATH");
782 GET_ENV_PATH_LIST (path, "OBJCPLUS_INCLUDE_PATH");
785 if (path != 0 && *path != 0)
786 path_include (pfile, opts->pending, path, SYSTEM);
789 /* Unless -nostdinc, add the compiled-in include path to the list,
790 translating prefixes. */
791 if (!opts->no_standard_includes)
793 struct default_include *p = include_defaults_array;
794 char *specd_prefix = opts->include_prefix;
796 /* Search "translated" versions of GNU directories.
797 These have /usr/local/lib/gcc... replaced by specd_prefix. */
798 if (specd_prefix != 0)
800 char *default_prefix = alloca (sizeof GCC_INCLUDE_DIR - 7);
801 /* Remove the `include' from /usr/local/lib/gcc.../include.
802 GCC_INCLUDE_DIR will always end in /include. */
803 int default_len = sizeof GCC_INCLUDE_DIR - 8;
804 int specd_len = strlen (specd_prefix);
806 memcpy (default_prefix, GCC_INCLUDE_DIR, default_len);
807 default_prefix[default_len] = '\0';
809 for (p = include_defaults_array; p->fname; p++)
811 /* Some standard dirs are only for C++. */
814 && !opts->no_standard_cplusplus_includes))
816 /* Does this dir start with the prefix? */
817 if (!strncmp (p->fname, default_prefix, default_len))
819 /* Yes; change prefix and add to search list. */
820 int flen = strlen (p->fname);
821 int this_len = specd_len + flen - default_len;
822 char *str = (char *) xmalloc (this_len + 1);
823 memcpy (str, specd_prefix, specd_len);
824 memcpy (str + specd_len,
825 p->fname + default_len,
826 flen - default_len + 1);
828 append_include_chain (pfile, opts->pending,
835 /* Search ordinary names for GNU include directories. */
836 for (p = include_defaults_array; p->fname; p++)
838 /* Some standard dirs are only for C++. */
841 && !opts->no_standard_cplusplus_includes))
843 /* XXX Potential memory leak! */
844 char *str = xstrdup (update_path (p->fname, p->component));
845 append_include_chain (pfile, opts->pending, str, SYSTEM);
850 merge_include_chains (opts);
852 /* With -v, print the list of dirs to search. */
855 struct file_name_list *p;
856 fprintf (stderr, _("#include \"...\" search starts here:\n"));
857 for (p = opts->quote_include; p; p = p->next)
859 if (p == opts->bracket_include)
860 fprintf (stderr, _("#include <...> search starts here:\n"));
861 fprintf (stderr, " %s\n", p->name);
863 fprintf (stderr, _("End of search list.\n"));
866 /* Don't bother trying to do macro expansion if we've already done
868 if (opts->preprocessed)
869 pfile->no_macro_expand++;
871 /* Open the main input file.
872 We do this in nonblocking mode so we don't get stuck here if
873 someone clever has asked cpp to process /dev/rmt0;
874 finclude() will check that we have a real file to work with. */
875 if (fname == NULL || *fname == 0)
880 else if ((f = open (fname, O_RDONLY|O_NONBLOCK|O_NOCTTY, 0666)) < 0)
882 cpp_notice_from_errno (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_notice_from_errno (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_notice_from_errno (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))
1008 cpp_ice (pfile, "buffers still stacked in cpp_finish");
1009 cpp_pop_buffer (pfile);
1011 if (opts->print_deps)
1013 /* Stream on which to print the dependency information. */
1014 FILE *deps_stream = 0;
1016 /* Don't actually write the deps file if compilation has failed. */
1017 if (pfile->errors == 0)
1019 const char *deps_mode = opts->print_deps_append ? "a" : "w";
1020 if (opts->deps_file == 0)
1021 deps_stream = stdout;
1022 else if ((deps_stream = fopen (opts->deps_file, deps_mode)) == 0)
1023 cpp_notice_from_errno (pfile, opts->deps_file);
1027 fputs (pfile->deps_buffer, deps_stream);
1028 putc ('\n', deps_stream);
1029 if (opts->deps_file)
1031 if (ferror (deps_stream) || fclose (deps_stream) != 0)
1032 cpp_fatal (pfile, "I/O error on output");
1038 if (opts->dump_macros == dump_only)
1042 for (i = HASHSIZE; --i >= 0;)
1044 for (h = pfile->hashtab[i]; h; h = h->next)
1045 if (h->type == T_MACRO)
1047 dump_definition (pfile, h->name, h->length, h->value.defn);
1048 CPP_PUTC (pfile, '\n');
1055 new_pending_define (opts, text)
1056 struct cpp_options *opts;
1059 struct pending_option *o = (struct pending_option *)
1060 xmalloc (sizeof (struct pending_option));
1062 o->arg = (char *) text;
1065 APPEND (opts->pending, define, o);
1068 /* Handle one command-line option in (argc, argv).
1069 Can be called multiple times, to handle multiple sets of options.
1070 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]);
1262 if (opts->out_fname != NULL)
1264 cpp_fatal (pfile, "Output filename specified twice");
1268 goto missing_filename;
1269 opts->out_fname = argv[++i];
1270 if (!strcmp (opts->out_fname, "-"))
1271 opts->out_fname = "";
1275 if (!strcmp (argv[i], "-pedantic"))
1276 CPP_PEDANTIC (pfile) = 1;
1277 else if (!strcmp (argv[i], "-pedantic-errors"))
1279 CPP_PEDANTIC (pfile) = 1;
1280 opts->pedantic_errors = 1;
1285 if (!strcmp (argv[i], "-traditional"))
1287 opts->traditional = 1;
1288 opts->cplusplus_comments = 0;
1289 opts->trigraphs = 0;
1290 opts->warn_trigraphs = 0;
1292 else if (!strcmp (argv[i], "-trigraphs"))
1293 opts->trigraphs = 1;
1297 if (! strcmp (argv[i], "-lang-c"))
1298 opts->cplusplus = 0, opts->cplusplus_comments = 1, opts->c89 = 0,
1299 opts->c99 = 1, opts->objc = 0;
1300 if (! strcmp (argv[i], "-lang-c89"))
1302 opts->cplusplus = 0, opts->cplusplus_comments = 0;
1303 opts->c89 = 1, opts->c99 = 0, opts->objc = 0;
1304 opts->trigraphs = 1;
1305 new_pending_define (opts, "__STRICT_ANSI__");
1307 if (! strcmp (argv[i], "-lang-c++"))
1308 opts->cplusplus = 1, opts->cplusplus_comments = 1, opts->c89 = 0,
1309 opts->c99 = 0, opts->objc = 0;
1310 if (! strcmp (argv[i], "-lang-objc"))
1311 opts->cplusplus = 0, opts->cplusplus_comments = 1, opts->c89 = 0,
1312 opts->c99 = 0, opts->objc = 1;
1313 if (! strcmp (argv[i], "-lang-objc++"))
1314 opts->cplusplus = 1, opts->cplusplus_comments = 1, opts->c89 = 0,
1315 opts->c99 = 0, opts->objc = 1;
1316 if (! strcmp (argv[i], "-lang-asm"))
1318 if (! strcmp (argv[i], "-lang-fortran"))
1319 opts->lang_fortran = 1, opts->cplusplus_comments = 0;
1320 if (! strcmp (argv[i], "-lang-chill"))
1321 opts->objc = 0, opts->cplusplus = 0, opts->chill = 1,
1322 opts->traditional = 1;
1326 opts->cplusplus = 1, opts->cplusplus_comments = 1;
1330 if (!strcmp (argv[i], "-std=gnu89"))
1332 opts->cplusplus = 0, opts->cplusplus_comments = 1;
1333 opts->c89 = 1, opts->c99 = 0, opts->objc = 0;
1335 else if (!strcmp (argv[i], "-std=gnu9x")
1336 || !strcmp (argv[i], "-std=gnu99"))
1338 opts->cplusplus = 0, opts->cplusplus_comments = 1;
1339 opts->c89 = 0, opts->c99 = 1, opts->objc = 0;
1340 new_pending_define (opts, "__STDC_VERSION__=199901L");
1342 else if (!strcmp (argv[i], "-std=iso9899:1990")
1343 || !strcmp (argv[i], "-std=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_define (opts, "__STRICT_ANSI__");
1350 else if (!strcmp (argv[i], "-std=iso9899:199409"))
1352 opts->cplusplus = 0, opts->cplusplus_comments = 0;
1353 opts->c89 = 1, opts->c99 = 0, opts->objc = 0;
1354 opts->trigraphs = 1;
1355 new_pending_define (opts, "__STRICT_ANSI__");
1356 new_pending_define (opts, "__STDC_VERSION__=199409L");
1358 else if (!strcmp (argv[i], "-std=iso9899:199x")
1359 || !strcmp (argv[i], "-std=iso9899:1999")
1360 || !strcmp (argv[i], "-std=c9x")
1361 || !strcmp (argv[i], "-std=c99"))
1363 opts->cplusplus = 0, opts->cplusplus_comments = 1;
1364 opts->c89 = 0, opts->c99 = 1, opts->objc = 0;
1365 opts->trigraphs = 1;
1366 new_pending_define (opts, "__STRICT_ANSI__");
1367 new_pending_define (opts, "__STDC_VERSION__=199901L");
1372 opts->inhibit_warnings = 1;
1376 if (!strcmp (argv[i], "-Wtrigraphs"))
1377 opts->warn_trigraphs = 1;
1378 else if (!strcmp (argv[i], "-Wno-trigraphs"))
1379 opts->warn_trigraphs = 0;
1380 else if (!strcmp (argv[i], "-Wcomment"))
1381 opts->warn_comments = 1;
1382 else if (!strcmp (argv[i], "-Wno-comment"))
1383 opts->warn_comments = 0;
1384 else if (!strcmp (argv[i], "-Wcomments"))
1385 opts->warn_comments = 1;
1386 else if (!strcmp (argv[i], "-Wno-comments"))
1387 opts->warn_comments = 0;
1388 else if (!strcmp (argv[i], "-Wtraditional"))
1389 opts->warn_stringify = 1;
1390 else if (!strcmp (argv[i], "-Wno-traditional"))
1391 opts->warn_stringify = 0;
1392 else if (!strcmp (argv[i], "-Wundef"))
1393 opts->warn_undef = 1;
1394 else if (!strcmp (argv[i], "-Wno-undef"))
1395 opts->warn_undef = 0;
1396 else if (!strcmp (argv[i], "-Wimport"))
1397 opts->warn_import = 1;
1398 else if (!strcmp (argv[i], "-Wno-import"))
1399 opts->warn_import = 0;
1400 else if (!strcmp (argv[i], "-Werror"))
1401 opts->warnings_are_errors = 1;
1402 else if (!strcmp (argv[i], "-Wno-error"))
1403 opts->warnings_are_errors = 0;
1404 else if (!strcmp (argv[i], "-Wall"))
1406 opts->warn_trigraphs = 1;
1407 opts->warn_comments = 1;
1412 /* The style of the choices here is a bit mixed.
1413 The chosen scheme is a hybrid of keeping all options in one string
1414 and specifying each option in a separate argument:
1415 -M|-MM|-MD file|-MMD file [-MG]. An alternative is:
1416 -M|-MM|-MD file|-MMD file|-MG|-MMG; or more concisely:
1417 -M[M][G][D file]. This is awkward to handle in specs, and is not
1419 /* ??? -MG must be specified in addition to one of -M or -MM.
1420 This can be relaxed in the future without breaking anything.
1421 The converse isn't true. */
1423 /* -MG isn't valid with -MD or -MMD. This is checked for later. */
1424 if (!strcmp (argv[i], "-MG"))
1426 opts->print_deps_missing_files = 1;
1429 if (!strcmp (argv[i], "-M"))
1430 opts->print_deps = 2;
1431 else if (!strcmp (argv[i], "-MM"))
1432 opts->print_deps = 1;
1433 else if (!strcmp (argv[i], "-MD"))
1434 opts->print_deps = 2;
1435 else if (!strcmp (argv[i], "-MMD"))
1436 opts->print_deps = 1;
1437 /* For -MD and -MMD options, write deps on file named by next arg. */
1438 if (!strcmp (argv[i], "-MD") || !strcmp (argv[i], "-MMD"))
1441 goto missing_filename;
1442 opts->deps_file = argv[++i];
1446 /* For -M and -MM, write deps on standard output
1447 and suppress the usual output. */
1448 opts->no_output = 1;
1454 char *p = argv[i] + 2;
1456 while ((c = *p++) != 0)
1458 /* Arg to -d specifies what parts of macros to dump */
1462 opts->dump_macros = dump_only;
1463 opts->no_output = 1;
1466 opts->dump_macros = dump_names;
1469 opts->dump_macros = dump_definitions;
1472 opts->dump_includes = 1;
1480 if (argv[i][2] == '3')
1481 opts->debug_output = 1;
1485 if (!strcmp (argv[i], "--help"))
1487 else if (!strcmp (argv[i], "--version"))
1488 fprintf (stderr, _("GNU CPP version %s (cpplib)\n"), version_string);
1493 fprintf (stderr, _("GNU CPP version %s (cpplib)\n"), version_string);
1494 #ifdef TARGET_VERSION
1497 fputc ('\n', stderr);
1502 opts->print_include_names = 1;
1508 if (argv[i][2] != 0)
1510 else if (i + 1 == argc)
1512 cpp_fatal (pfile, "Macro name missing after -D option");
1517 new_pending_define (opts, text);
1525 if (argv[i][2] != 0)
1527 else if (i + 1 == argc)
1529 cpp_fatal (pfile, "Assertion missing after -A option");
1535 if (strcmp (p, "-"))
1537 struct pending_option *o = (struct pending_option *)
1538 xmalloc (sizeof (struct pending_option));
1543 APPEND (opts->pending, assert, o);
1547 /* -A- eliminates all predefined macros and assertions.
1548 Let's include also any that were specified earlier
1549 on the command line. That way we can get rid of any
1550 that were passed automatically in from GCC. */
1551 struct pending_option *o1, *o2;
1553 o1 = opts->pending->define_head;
1560 o1 = opts->pending->assert_head;
1567 opts->pending->assert_head = NULL;
1568 opts->pending->assert_tail = NULL;
1569 opts->pending->define_head = NULL;
1570 opts->pending->define_tail = NULL;
1577 struct pending_option *o = (struct pending_option *)
1578 xmalloc (sizeof (struct pending_option));
1580 if (argv[i][2] != 0)
1581 o->arg = argv[i] + 2;
1582 else if (i + 1 == argc)
1584 cpp_fatal (pfile, "Macro name missing after -U option");
1592 APPEND (opts->pending, define, o);
1597 opts->discard_comments = 0;
1600 case 'E': /* -E comes from cc -E; ignore it. */
1604 opts->no_line_commands = 1;
1607 case '$': /* Don't include $ in identifiers. */
1608 opts->dollars_in_ident = 0;
1612 if (!strcmp (argv[i], "-nostdinc"))
1613 /* -nostdinc causes no default include directories.
1614 You must specify all include-file directories with -I. */
1615 opts->no_standard_includes = 1;
1616 else if (!strcmp (argv[i], "-nostdinc++"))
1617 /* -nostdinc++ causes no default C++-specific include directories. */
1618 opts->no_standard_cplusplus_includes = 1;
1622 if (!strcmp (argv[i], "-remap"))
1626 case '\0': /* JF handle '-' as file name meaning stdin or stdout */
1627 if (opts->in_fname == NULL)
1628 opts->in_fname = "";
1629 else if (opts->out_fname == NULL)
1630 opts->out_fname = "";
1632 return i; /* error */
1642 cpp_fatal (pfile, "Filename missing after `%s' option", argv[i]);
1645 cpp_fatal (pfile, "Directory name missing after `%s' option", argv[i]);
1649 /* Handle command-line options in (argc, argv).
1650 Can be called multiple times, to handle multiple sets of options.
1651 Returns if an unrecognized option is seen.
1652 Returns number of strings consumed. */
1655 cpp_handle_options (pfile, argc, argv)
1661 int strings_processed;
1662 for (i = 0; i < argc; i += strings_processed)
1664 strings_processed = cpp_handle_option (pfile, argc - i, argv + i);
1665 if (strings_processed == 0)
1674 fprintf (stderr, _("Usage: %s [switches] input output\n"), progname);
1677 -include <file> Include the contents of <file> before other files\n\
1678 -imacros <file> Accept definition of macros in <file>\n\
1679 -iprefix <path> Specify <path> as a prefix for next two options\n\
1680 -iwithprefix <dir> Add <dir> to the end of the system include path\n\
1681 -iwithprefixbefore <dir> Add <dir> to the end of the main include path\n\
1682 -isystem <dir> Add <dir> to the start of the system include path\n\
1683 -idirafter <dir> Add <dir> to the end of the system include path\n\
1684 -I <dir> Add <dir> to the end of the main include path\n\
1685 -nostdinc Do not search system include directories\n\
1686 (dirs specified with -isystem will still be used)\n\
1687 -nostdinc++ Do not search system include directories for C++\n\
1688 -o <file> Put output into <file>\n\
1689 -pedantic Issue all warnings demanded by strict ANSI C\n\
1690 -traditional Follow K&R pre-processor behaviour\n\
1691 -trigraphs Support ANSI C trigraphs\n\
1692 -lang-c Assume that the input sources are in C\n\
1693 -lang-c89 Assume that the input sources are in C89\n\
1694 -lang-c++ Assume that the input sources are in C++\n\
1695 -lang-objc Assume that the input sources are in ObjectiveC\n\
1696 -lang-objc++ Assume that the input sources are in ObjectiveC++\n\
1697 -lang-asm Assume that the input sources are in assembler\n\
1698 -lang-fortran Assume that the input sources are in Fortran\n\
1699 -lang-chill Assume that the input sources are in Chill\n\
1700 -std=<std name> Specify the conformance standard; one of:\n\
1701 gnu89, gnu99, c89, c99, iso9899:1990,\n\
1702 iso9899:199409, iso9899:1999\n\
1703 -+ Allow parsing of C++ style features\n\
1704 -w Inhibit warning messages\n\
1705 -Wtrigraphs Warn if trigraphs are encountered\n\
1706 -Wno-trigraphs Do not warn about trigraphs\n\
1707 -Wcomment{s} Warn if one comment starts inside another\n\
1708 -Wno-comment{s} Do not warn about comments\n\
1709 -Wtraditional Warn if a macro argument is/would be turned into\n\
1710 a string if -traditional is specified\n\
1711 -Wno-traditional Do not warn about stringification\n\
1712 -Wundef Warn if an undefined macro is used by #if\n\
1713 -Wno-undef Do not warn about testing undefined macros\n\
1714 -Wimport Warn about the use of the #import directive\n\
1715 -Wno-import Do not warn about the use of #import\n\
1716 -Werror Treat all warnings as errors\n\
1717 -Wno-error Do not treat warnings as errors\n\
1718 -Wall Enable all preprocessor warnings\n\
1719 -M Generate make dependencies\n\
1720 -MM As -M, but ignore system header files\n\
1721 -MD As -M, but put output in a .d file\n\
1722 -MMD As -MD, but ignore system header files\n\
1723 -MG Treat missing header file as generated files\n\
1724 -g Include #define and #undef directives in the output\n\
1725 -D<macro> Define a <macro> with string '1' as its value\n\
1726 -D<macro>=<val> Define a <macro> with <val> as its value\n\
1727 -A<question> (<answer>) Assert the <answer> to <question>\n\
1728 -U<macro> Undefine <macro> \n\
1729 -v Display the version number\n\
1730 -H Print the name of header files as they are used\n\
1731 -C Do not discard comments\n\
1732 -dM Display a list of macro definitions active at end\n\
1733 -dD Preserve macro definitions in output\n\
1734 -dN As -dD except that only the names are preserved\n\
1735 -dI Include #include directives in the output\n\
1736 -P Do not generate #line directives\n\
1737 -$ Do not allow '$' in identifiers\n\
1738 -remap Remap file names when including files.\n\
1739 -h or --help Display this information\n\