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. */
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 /* Windows does not natively support inodes, and neither does MSDOS.
41 Cygwin's emulation can generate non-unique inodes, so don't use it.
42 VMS has non-numeric inodes. */
44 #define INO_T_EQ(a, b) (!memcmp (&(a), &(b), sizeof (a)))
45 #elif (defined _WIN32 && ! defined (_UWIN)) || defined __MSDOS__
46 #define INO_T_EQ(a, b) 0
48 #define INO_T_EQ(a, b) ((a) == (b))
51 #ifndef STANDARD_INCLUDE_DIR
52 #define STANDARD_INCLUDE_DIR "/usr/include"
55 /* We let tm.h override the types used here, to handle trivial differences
56 such as the choice of unsigned int or long unsigned int for size_t.
57 When machines start needing nontrivial differences in the size type,
58 it would be best to do something here to figure out automatically
59 from other information what type to use. */
61 /* The string value for __SIZE_TYPE__. */
64 #define SIZE_TYPE "long unsigned int"
67 /* The string value for __PTRDIFF_TYPE__. */
70 #define PTRDIFF_TYPE "long int"
73 /* The string value for __WCHAR_TYPE__. */
76 #define WCHAR_TYPE "int"
79 /* The string value for __USER_LABEL_PREFIX__ */
81 #ifndef USER_LABEL_PREFIX
82 #define USER_LABEL_PREFIX ""
85 /* The string value for __REGISTER_PREFIX__ */
87 #ifndef REGISTER_PREFIX
88 #define REGISTER_PREFIX ""
91 /* This is the default list of directories to search for include files.
92 It may be overridden by the various -I and -ixxx options.
94 #include "file" looks in the same directory as the current file,
96 #include <file> just looks in this list.
98 All these directories are treated as `system' include directories
99 (they are not subject to pedantic warnings in some cases). */
101 struct default_include
103 const char *fname
; /* The name of the directory. */
104 const char *component
; /* The component containing the directory
105 (see update_path in prefix.c) */
106 int cplusplus
; /* Only look here if we're compiling C++. */
107 int cxx_aware
; /* Includes in this directory don't need to
108 be wrapped in extern "C" when compiling
112 #ifndef STANDARD_INCLUDE_COMPONENT
113 #define STANDARD_INCLUDE_COMPONENT 0
117 #undef LOCAL_INCLUDE_DIR
118 #undef SYSTEM_INCLUDE_DIR
119 #undef STANDARD_INCLUDE_DIR
121 #undef CROSS_INCLUDE_DIR
124 static const struct default_include include_defaults_array
[]
125 #ifdef INCLUDE_DEFAULTS
129 #ifdef GPLUSPLUS_INCLUDE_DIR
130 /* Pick up GNU C++ specific include files. */
131 { GPLUSPLUS_INCLUDE_DIR
, "G++", 1, 1 },
133 #ifdef LOCAL_INCLUDE_DIR
134 /* /usr/local/include comes before the fixincluded header files. */
135 { LOCAL_INCLUDE_DIR
, 0, 0, 1 },
137 #ifdef GCC_INCLUDE_DIR
138 /* This is the dir for fixincludes and for gcc's private headers. */
139 { GCC_INCLUDE_DIR
, "GCC", 0, 0 },
141 #ifdef CROSS_INCLUDE_DIR
142 /* One place the target system's headers might be. */
143 { CROSS_INCLUDE_DIR
, "GCC", 0, 0 },
145 #ifdef TOOL_INCLUDE_DIR
146 /* Another place the target system's headers might be. */
147 { TOOL_INCLUDE_DIR
, "BINUTILS", 0, 1 },
149 #ifdef SYSTEM_INCLUDE_DIR
150 /* Some systems have an extra dir of include files. */
151 { SYSTEM_INCLUDE_DIR
, 0, 0, 0 },
153 #ifdef STANDARD_INCLUDE_DIR
154 /* /usr/include comes dead last. */
155 { STANDARD_INCLUDE_DIR
, STANDARD_INCLUDE_COMPONENT
, 0, 0 },
159 #endif /* no INCLUDE_DEFAULTS */
161 /* Internal structures and prototypes. */
163 /* A `struct pending_option' remembers one -D, -A, -U, -include, or -imacros
164 switch. There are four lists: one for -D and -U, one for -A, one
165 for -include, one for -imacros. `undef' is set for -U, clear for
166 -D, ignored for the others.
167 (Future: add an equivalent of -U for -A) */
169 typedef void (* cl_directive_handler
) PARAMS ((cpp_reader
*, const char *));
170 struct pending_option
172 struct pending_option
*next
;
174 cl_directive_handler handler
;
177 /* The `pending' structure accumulates all the options that are not
178 actually processed until we hit cpp_start_read. It consists of
179 several lists, one for each type of option. We keep both head and
180 tail pointers for quick insertion. */
183 struct pending_option
*directive_head
, *directive_tail
;
185 struct file_name_list
*quote_head
, *quote_tail
;
186 struct file_name_list
*brack_head
, *brack_tail
;
187 struct file_name_list
*systm_head
, *systm_tail
;
188 struct file_name_list
*after_head
, *after_tail
;
190 struct pending_option
*imacros_head
, *imacros_tail
;
191 struct pending_option
*include_head
, *include_tail
;
195 #define APPEND(pend, list, elt) \
196 do { if (!(pend)->list##_head) (pend)->list##_head = (elt); \
197 else (pend)->list##_tail->next = (elt); \
198 (pend)->list##_tail = (elt); \
201 #define APPEND(pend, list, elt) \
202 do { if (!(pend)->list/**/_head) (pend)->list/**/_head = (elt); \
203 else (pend)->list/**/_tail->next = (elt); \
204 (pend)->list/**/_tail = (elt); \
208 static void print_help
PARAMS ((void));
209 static void path_include
PARAMS ((cpp_reader
*,
210 struct cpp_pending
*,
212 static void initialize_builtins
PARAMS ((cpp_reader
*));
213 static void append_include_chain
PARAMS ((cpp_reader
*,
214 struct cpp_pending
*,
216 static void merge_include_chains
PARAMS ((struct cpp_options
*));
218 static void dump_special_to_buffer
PARAMS ((cpp_reader
*, const char *));
219 static void initialize_dependency_output
PARAMS ((cpp_reader
*));
220 static void initialize_standard_includes
PARAMS ((cpp_reader
*));
221 static void new_pending_directive
PARAMS ((struct cpp_options
*,
223 cl_directive_handler
));
225 static int opt_comp
PARAMS ((const void *, const void *));
227 static int parse_option
PARAMS ((const char *));
228 static int handle_option
PARAMS ((cpp_reader
*, int, char **));
230 /* Fourth argument to append_include_chain: chain to use */
231 enum { QUOTE
= 0, BRACKET
, SYSTEM
, AFTER
};
233 /* If we have designated initializers (GCC >2.7, or C99) this table
234 can be initialized, constant data. Otherwise, it has to be filled
237 #if (GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L)
238 #define init_IStable() /* nothing */
239 #define ISTABLE const unsigned char _cpp_IStable[256] = {
241 #define s(p, v) [p] = v,
243 #define ISTABLE unsigned char _cpp_IStable[256] = { 0 }; \
244 static void init_IStable PARAMS ((void)) { \
245 unsigned char *x = _cpp_IStable;
247 #define s(p, v) x[p] = v;
250 #define A(x) s(x, ISidnum|ISidstart)
251 #define N(x) s(x, ISidnum|ISnumstart)
252 #define H(x) s(x, IShspace|ISspace)
253 #define S(x) s(x, ISspace)
258 A('a') A('b') A('c') A('d') A('e') A('f') A('g') A('h') A('i')
259 A('j') A('k') A('l') A('m') A('n') A('o') A('p') A('q') A('r')
260 A('s') A('t') A('u') A('v') A('w') A('x') A('y') A('z')
262 A('A') A('B') A('C') A('D') A('E') A('F') A('G') A('H') A('I')
263 A('J') A('K') A('L') A('M') A('N') A('O') A('P') A('Q') A('R')
264 A('S') A('T') A('U') A('V') A('W') A('X') A('Y') A('Z')
266 N('1') N('2') N('3') N('4') N('5') N('6') N('7') N('8') N('9') N('0')
268 H(' ') H('\t') H('\v') H('\f')
281 /* Given a colon-separated list of file names PATH,
282 add all the names to the search path for include files. */
285 path_include (pfile
, pend
, list
, path
)
287 struct cpp_pending
*pend
;
297 /* Find the end of this name. */
299 while (*q
!= 0 && *q
!= PATH_SEPARATOR
) q
++;
302 /* An empty name in the path stands for the current directory. */
303 name
= (char *) xmalloc (2);
309 /* Otherwise use the directory that is named. */
310 name
= (char *) xmalloc (q
- p
+ 1);
311 memcpy (name
, p
, q
- p
);
315 append_include_chain (pfile
, pend
, name
, path
, 0);
317 /* Advance past this name. */
325 /* Append DIR to include path PATH. DIR must be permanently allocated
328 append_include_chain (pfile
, pend
, dir
, path
, cxx_aware
)
330 struct cpp_pending
*pend
;
335 struct file_name_list
*new;
339 _cpp_simplify_pathname (dir
);
342 /* Dirs that don't exist are silently ignored. */
344 cpp_notice_from_errno (pfile
, dir
);
345 else if (CPP_OPTIONS (pfile
)->verbose
)
346 fprintf (stderr
, _("ignoring nonexistent directory `%s'\n"), dir
);
350 if (!S_ISDIR (st
.st_mode
))
352 cpp_notice (pfile
, "%s: Not a directory", 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
;
366 new->sysp
= cxx_aware
? 1 : 2;
369 new->name_map
= NULL
;
375 case QUOTE
: APPEND (pend
, quote
, new); break;
376 case BRACKET
: APPEND (pend
, brack
, new); break;
377 case SYSTEM
: APPEND (pend
, systm
, new); break;
378 case AFTER
: APPEND (pend
, after
, new); break;
382 /* Merge the four include chains together in the order quote, bracket,
383 system, after. Remove duplicate dirs (as determined by
384 INO_T_EQ()). The system_include and after_include chains are never
385 referred to again after this function; all access is through the
386 bracket_include path.
388 For the future: Check if the directory is empty (but
389 how?) and possibly preload the include hash. */
392 merge_include_chains (opts
)
393 struct cpp_options
*opts
;
395 struct file_name_list
*prev
, *cur
, *other
;
396 struct file_name_list
*quote
, *brack
, *systm
, *after
;
397 struct file_name_list
*qtail
, *btail
, *stail
, *atail
;
399 qtail
= opts
->pending
->quote_tail
;
400 btail
= opts
->pending
->brack_tail
;
401 stail
= opts
->pending
->systm_tail
;
402 atail
= opts
->pending
->after_tail
;
404 quote
= opts
->pending
->quote_head
;
405 brack
= opts
->pending
->brack_head
;
406 systm
= opts
->pending
->systm_head
;
407 after
= opts
->pending
->after_head
;
409 /* Paste together bracket, system, and after include chains. */
419 /* This is a bit tricky.
420 First we drop dupes from the quote-include list.
421 Then we drop dupes from the bracket-include list.
422 Finally, if qtail and brack are the same directory,
425 We can't just merge the lists and then uniquify them because
426 then we may lose directories from the <> search path that should
427 be there; consider -Ifoo -Ibar -I- -Ifoo -Iquux. It is however
428 safe to treat -Ibar -Ifoo -I- -Ifoo -Iquux as if written
429 -Ibar -I- -Ifoo -Iquux.
431 Note that this algorithm is quadratic in the number of -I switches,
432 which is acceptable since there aren't usually that many of them. */
434 for (cur
= quote
, prev
= NULL
; cur
; cur
= cur
->next
)
436 for (other
= quote
; other
!= cur
; other
= other
->next
)
437 if (INO_T_EQ (cur
->ino
, other
->ino
)
438 && cur
->dev
== other
->dev
)
441 fprintf (stderr
, _("ignoring duplicate directory `%s'\n"),
444 prev
->next
= cur
->next
;
454 for (cur
= brack
; cur
; cur
= cur
->next
)
456 for (other
= brack
; other
!= cur
; other
= other
->next
)
457 if (INO_T_EQ (cur
->ino
, other
->ino
)
458 && cur
->dev
== other
->dev
)
461 fprintf (stderr
, _("ignoring duplicate directory `%s'\n"),
464 prev
->next
= cur
->next
;
475 if (INO_T_EQ (qtail
->ino
, brack
->ino
) && qtail
->dev
== brack
->dev
)
480 fprintf (stderr
, _("ignoring duplicate directory `%s'\n"),
490 while (cur
->next
!= qtail
)
494 fprintf (stderr
, _("ignoring duplicate directory `%s'\n"),
507 opts
->quote_include
= quote
;
508 opts
->bracket_include
= brack
;
512 /* Write out a #define command for the special named MACRO_NAME
513 to PFILE's token_buffer. */
516 dump_special_to_buffer (pfile
, macro_name
)
518 const char *macro_name
;
520 static const char define_directive
[] = "#define ";
521 int macro_name_length
= strlen (macro_name
);
522 output_line_command (pfile
, same_file
);
523 CPP_RESERVE (pfile
, sizeof(define_directive
) + macro_name_length
);
524 CPP_PUTS_Q (pfile
, define_directive
, sizeof(define_directive
)-1);
525 CPP_PUTS_Q (pfile
, macro_name
, macro_name_length
);
526 CPP_PUTC_Q (pfile
, ' ');
527 cpp_expand_to_buffer (pfile
, macro_name
, macro_name_length
);
528 CPP_PUTC (pfile
, '\n');
531 /* Initialize a cpp_options structure. */
533 cpp_options_init (opts
)
536 memset ((char *) opts
, 0, sizeof (struct cpp_options
));
538 opts
->dollars_in_ident
= 1;
539 opts
->cplusplus_comments
= 1;
540 opts
->warn_import
= 1;
541 opts
->discard_comments
= 1;
544 (struct cpp_pending
*) xcalloc (1, sizeof (struct cpp_pending
));
547 /* Initialize a cpp_reader structure. */
549 cpp_reader_init (pfile
)
552 memset ((char *) pfile
, 0, sizeof (cpp_reader
));
554 pfile
->token_buffer_size
= 200;
555 pfile
->token_buffer
= (U_CHAR
*) xmalloc (pfile
->token_buffer_size
);
556 CPP_SET_WRITTEN (pfile
, 0);
558 _cpp_init_macro_hash (pfile
);
559 _cpp_init_include_hash (pfile
);
562 /* Free resources used by PFILE.
563 This is the cpp_reader 'finalizer' or 'destructor' (in C++ terminology). */
568 while (CPP_BUFFER (pfile
) != NULL
)
569 cpp_pop_buffer (pfile
);
571 if (pfile
->token_buffer
)
573 free (pfile
->token_buffer
);
574 pfile
->token_buffer
= NULL
;
577 if (pfile
->input_buffer
)
579 free (pfile
->input_buffer
);
580 free (pfile
->input_speccase
);
581 pfile
->input_buffer
= pfile
->input_speccase
= NULL
;
582 pfile
->input_buffer_len
= 0;
586 deps_free (pfile
->deps
);
588 htab_delete (pfile
->hashtab
);
589 htab_delete (pfile
->all_include_files
);
593 /* This structure defines one built-in macro. A node of type TYPE will
594 be entered in the macro hash table under the name NAME, with value
595 VALUE (if any). FLAGS tweaks the behavior a little:
596 DUMP write debug info for this macro
597 STDC define only if not -traditional
598 ULP value is the global user_label_prefix (which can't be
599 put directly into the table).
607 unsigned short flags
;
613 static const struct builtin builtin_array
[] =
615 { "__TIME__", 0, T_TIME
, DUMP
},
616 { "__DATE__", 0, T_DATE
, DUMP
},
617 { "__FILE__", 0, T_FILE
, 0 },
618 { "__BASE_FILE__", 0, T_BASE_FILE
, 0 },
619 { "__LINE__", 0, T_SPECLINE
, 0 },
620 { "__INCLUDE_LEVEL__", 0, T_INCLUDE_LEVEL
, 0 },
621 { "__VERSION__", 0, T_VERSION
, DUMP
},
622 { "__STDC__", 0, T_STDC
, DUMP
|STDC
},
624 { "__USER_LABEL_PREFIX__", 0, T_CONST
, ULP
},
625 { "__REGISTER_PREFIX__", REGISTER_PREFIX
, T_CONST
, 0 },
626 { "__HAVE_BUILTIN_SETJMP__", "1", T_CONST
, 0 },
627 #ifndef NO_BUILTIN_SIZE_TYPE
628 { "__SIZE_TYPE__", SIZE_TYPE
, T_CONST
, DUMP
},
630 #ifndef NO_BUILTIN_PTRDIFF_TYPE
631 { "__PTRDIFF_TYPE__", PTRDIFF_TYPE
, T_CONST
, DUMP
},
633 #ifndef NO_BUILTIN_WCHAR_TYPE
634 { "__WCHAR_TYPE__", WCHAR_TYPE
, T_CONST
, DUMP
},
639 /* Subroutine of cpp_start_read; reads the builtins table above and
640 enters the macros into the hash table. */
642 initialize_builtins (pfile
)
646 const struct builtin
*b
;
649 for(b
= builtin_array
; b
->name
; b
++)
651 if ((b
->flags
& STDC
) && CPP_TRADITIONAL (pfile
))
654 val
= (b
->flags
& ULP
) ? user_label_prefix
: b
->value
;
655 len
= strlen (b
->name
);
657 hp
= _cpp_make_hashnode (b
->name
, len
, b
->type
, -1);
658 hp
->value
.cpval
= val
;
659 *(htab_find_slot (pfile
->hashtab
, (void *)hp
, 1)) = hp
;
661 if ((b
->flags
& DUMP
) && CPP_OPTIONS (pfile
)->debug_output
)
662 dump_special_to_buffer (pfile
, b
->name
);
670 /* Another subroutine of cpp_start_read. This one sets up to do
671 dependency-file output. */
673 initialize_dependency_output (pfile
)
676 cpp_options
*opts
= CPP_OPTIONS (pfile
);
677 char *spec
, *s
, *output_file
;
679 /* Either of two environment variables can specify output of deps.
680 Its value is either "OUTPUT_FILE" or "OUTPUT_FILE DEPS_TARGET",
681 where OUTPUT_FILE is the file to write deps info to
682 and DEPS_TARGET is the target to mention in the deps. */
684 if (opts
->print_deps
== 0)
686 spec
= getenv ("DEPENDENCIES_OUTPUT");
688 opts
->print_deps
= 1;
691 spec
= getenv ("SUNPRO_DEPENDENCIES");
693 opts
->print_deps
= 2;
698 /* Find the space before the DEPS_TARGET, if there is one. */
699 s
= strchr (spec
, ' ');
702 opts
->deps_target
= s
+ 1;
703 output_file
= (char *) xmalloc (s
- spec
+ 1);
704 memcpy (output_file
, spec
, s
- spec
);
705 output_file
[s
- spec
] = 0;
709 opts
->deps_target
= 0;
713 opts
->deps_file
= output_file
;
714 opts
->print_deps_append
= 1;
717 pfile
->deps
= deps_init ();
719 /* Print the expected object file name as the target of this Make-rule. */
720 if (opts
->deps_target
)
721 deps_add_target (pfile
->deps
, opts
->deps_target
);
722 else if (*opts
->in_fname
== 0)
723 deps_add_target (pfile
->deps
, "-");
725 deps_calc_target (pfile
->deps
, opts
->in_fname
);
728 deps_add_dep (pfile
->deps
, opts
->in_fname
);
731 /* And another subroutine. This one sets up the standard include path. */
733 initialize_standard_includes (pfile
)
736 cpp_options
*opts
= CPP_OPTIONS (pfile
);
738 const struct default_include
*p
;
739 const char *specd_prefix
= opts
->include_prefix
;
741 /* Several environment variables may add to the include search path.
742 CPATH specifies an additional list of directories to be searched
743 as if specified with -I, while C_INCLUDE_PATH, CPLUS_INCLUDE_PATH,
744 etc. specify an additional list of directories to be searched as
745 if specified with -isystem, for the language indicated. */
747 GET_ENV_PATH_LIST (path
, "CPATH");
748 if (path
!= 0 && *path
!= 0)
749 path_include (pfile
, opts
->pending
, path
, BRACKET
);
751 switch ((opts
->objc
<< 1) + opts
->cplusplus
)
754 GET_ENV_PATH_LIST (path
, "C_INCLUDE_PATH");
757 GET_ENV_PATH_LIST (path
, "CPLUS_INCLUDE_PATH");
760 GET_ENV_PATH_LIST (path
, "OBJC_INCLUDE_PATH");
763 GET_ENV_PATH_LIST (path
, "OBJCPLUS_INCLUDE_PATH");
766 if (path
!= 0 && *path
!= 0)
767 path_include (pfile
, opts
->pending
, path
, SYSTEM
);
769 /* Search "translated" versions of GNU directories.
770 These have /usr/local/lib/gcc... replaced by specd_prefix. */
771 if (specd_prefix
!= 0)
773 char *default_prefix
= alloca (sizeof GCC_INCLUDE_DIR
- 7);
774 /* Remove the `include' from /usr/local/lib/gcc.../include.
775 GCC_INCLUDE_DIR will always end in /include. */
776 int default_len
= sizeof GCC_INCLUDE_DIR
- 8;
777 int specd_len
= strlen (specd_prefix
);
779 memcpy (default_prefix
, GCC_INCLUDE_DIR
, default_len
);
780 default_prefix
[default_len
] = '\0';
782 for (p
= include_defaults_array
; p
->fname
; p
++)
784 /* Some standard dirs are only for C++. */
787 && !opts
->no_standard_cplusplus_includes
))
789 /* Does this dir start with the prefix? */
790 if (!strncmp (p
->fname
, default_prefix
, default_len
))
792 /* Yes; change prefix and add to search list. */
793 int flen
= strlen (p
->fname
);
794 int this_len
= specd_len
+ flen
- default_len
;
795 char *str
= (char *) xmalloc (this_len
+ 1);
796 memcpy (str
, specd_prefix
, specd_len
);
797 memcpy (str
+ specd_len
,
798 p
->fname
+ default_len
,
799 flen
- default_len
+ 1);
801 append_include_chain (pfile
, opts
->pending
,
802 str
, SYSTEM
, p
->cxx_aware
);
808 /* Search ordinary names for GNU include directories. */
809 for (p
= include_defaults_array
; p
->fname
; p
++)
811 /* Some standard dirs are only for C++. */
814 && !opts
->no_standard_cplusplus_includes
))
816 /* XXX Potential memory leak! */
817 char *str
= xstrdup (update_path (p
->fname
, p
->component
));
818 append_include_chain (pfile
, opts
->pending
, str
, SYSTEM
,
824 /* This is called after options have been processed.
825 * Check options for consistency, and setup for processing input
826 * from the file named FNAME. (Use standard input if FNAME==NULL.)
827 * Return 1 on success, 0 on failure.
831 cpp_start_read (pfile
, fname
)
835 struct cpp_options
*opts
= CPP_OPTIONS (pfile
);
836 struct pending_option
*p
, *q
;
838 /* -MG doesn't select the form of output and must be specified with one of
839 -M or -MM. -MG doesn't make sense with -MD or -MMD since they don't
840 inhibit compilation. */
841 if (opts
->print_deps_missing_files
842 && (opts
->print_deps
== 0 || !opts
->no_output
))
844 cpp_fatal (pfile
, "-MG must be specified with one of -M or -MM");
848 /* Chill should not be used with -trigraphs. */
849 if (opts
->chill
&& opts
->trigraphs
)
851 cpp_warning (pfile
, "-lang-chill and -trigraphs are mutually exclusive");
855 /* Set this if it hasn't been set already. */
856 if (user_label_prefix
== NULL
)
857 user_label_prefix
= USER_LABEL_PREFIX
;
859 /* Don't bother trying to do macro expansion if we've already done
861 if (opts
->preprocessed
)
862 pfile
->no_macro_expand
++;
864 /* Set up the IStable. This doesn't do anything if we were compiled
865 with a compiler that supports C99 designated initializers. */
868 /* Set up the include search path now. */
869 if (! opts
->no_standard_includes
)
870 initialize_standard_includes (pfile
);
872 merge_include_chains (opts
);
874 /* With -v, print the list of dirs to search. */
877 struct file_name_list
*l
;
878 fprintf (stderr
, _("#include \"...\" search starts here:\n"));
879 for (l
= opts
->quote_include
; l
; l
= l
->next
)
881 if (l
== opts
->bracket_include
)
882 fprintf (stderr
, _("#include <...> search starts here:\n"));
883 fprintf (stderr
, " %s\n", l
->name
);
885 fprintf (stderr
, _("End of search list.\n"));
888 initialize_dependency_output (pfile
);
890 /* Open the main input file. This must be done before -D processing
891 so we have a buffer to stand on. */
892 if (opts
->in_fname
== NULL
|| *opts
->in_fname
== 0)
894 opts
->in_fname
= fname
;
895 if (opts
->in_fname
== NULL
)
899 if (!cpp_read_file (pfile
, fname
))
902 /* -D and friends may produce output, which should be identified
905 CPP_BUFFER (pfile
)->lineno
= 0;
907 /* Install __LINE__, etc. */
908 initialize_builtins (pfile
);
910 /* Do -U's, -D's and -A's in the order they were seen. */
911 p
= opts
->pending
->directive_head
;
914 (*p
->handler
) (pfile
, p
->arg
);
920 opts
->done_initializing
= 1;
921 CPP_BUFFER (pfile
)->lineno
= 1;
923 if (opts
->preprocessed
)
924 /* If we've already processed this code, we want to trust the #line
925 directives in the input. But we still need to update our line
926 counter accordingly. */
927 pfile
->lineno
= CPP_BUFFER (pfile
)->lineno
;
929 output_line_command (pfile
, same_file
);
930 pfile
->only_seen_white
= 2;
932 /* The -imacros files can be scanned now, but the -include files
933 have to be pushed onto the include stack and processed later,
934 in the main loop calling cpp_get_token. */
937 p
= opts
->pending
->imacros_head
;
940 if (cpp_read_file (pfile
, p
->arg
))
941 cpp_scan_buffer (pfile
);
949 p
= opts
->pending
->include_head
;
952 if (cpp_read_file (pfile
, p
->arg
))
953 output_line_command (pfile
, enter_file
);
960 free (opts
->pending
);
961 opts
->pending
= NULL
;
966 /* This is called at the end of preprocessing. It pops the
967 last buffer and writes dependency output. It should also
968 clear macro definitions, such that you could call cpp_start_read
969 with a new filename to restart processing. */
974 struct cpp_options
*opts
= CPP_OPTIONS (pfile
);
976 if (CPP_PREV_BUFFER (CPP_BUFFER (pfile
)))
977 cpp_ice (pfile
, "buffers still stacked in cpp_finish");
978 while (CPP_BUFFER (pfile
))
979 cpp_pop_buffer (pfile
);
981 /* Don't write the deps file if preprocessing has failed. */
982 if (opts
->print_deps
&& pfile
->errors
== 0)
984 /* Stream on which to print the dependency information. */
985 FILE *deps_stream
= 0;
987 const char *deps_mode
= opts
->print_deps_append
? "a" : "w";
988 if (opts
->deps_file
== 0)
989 deps_stream
= stdout
;
990 else if ((deps_stream
= fopen (opts
->deps_file
, deps_mode
)) == 0)
991 cpp_notice_from_errno (pfile
, opts
->deps_file
);
995 deps_write (pfile
->deps
, deps_stream
, 72);
998 if (ferror (deps_stream
) || fclose (deps_stream
) != 0)
999 cpp_fatal (pfile
, "I/O error on output");
1004 if (opts
->dump_macros
== dump_only
)
1005 _cpp_dump_macro_hash (pfile
);
1009 new_pending_directive (opts
, text
, handler
)
1010 struct cpp_options
*opts
;
1012 cl_directive_handler handler
;
1014 struct pending_option
*o
= (struct pending_option
*)
1015 xmalloc (sizeof (struct pending_option
));
1019 o
->handler
= handler
;
1020 APPEND (opts
->pending
, directive
, o
);
1025 OPT_stdin_stdout
= 0, OPT_dollar
, OPT_plus
,
1026 OPT__help
, OPT__version
,
1027 OPT_A
, OPT_C
, OPT_D
, OPT_H
, OPT_I
, OPT_M
,
1028 OPT_MD
, OPT_MG
, OPT_MM
, OPT_MMD
,
1029 OPT_P
, OPT_U
, OPT_W
,
1031 OPT_fleading_underscore
, OPT_fno_leading_underscore
,
1032 OPT_fpreprocessed
, OPT_fno_preprocessed
,
1034 OPT_idirafter
, OPT_imacros
, OPT_include
,
1035 OPT_iprefix
, OPT_isystem
, OPT_iwithprefix
, OPT_iwithprefixbefore
,
1036 OPT_lang_asm
, OPT_lang_c
, OPT_lang_cplusplus
, OPT_lang_c89
,
1037 OPT_lang_chill
, OPT_lang_fortran
, OPT_lang_objc
, OPT_lang_objcplusplus
,
1038 OPT_nostdinc
, OPT_nostdincplusplus
,
1040 OPT_pedantic
, OPT_pedantic_errors
, OPT_remap
,
1041 OPT_std_c89
, OPT_std_c99
, OPT_std_c9x
, OPT_std_gnu89
, OPT_std_gnu99
,
1042 OPT_std_gnu9x
, OPT_std_iso9899_1990
, OPT_std_iso9899_199409
,
1043 OPT_std_iso9899_1999
, OPT_std_iso9899_199x
,
1044 OPT_traditional
, OPT_trigraphs
,
1051 const char *opt_text
;
1054 enum opt_code opt_code
;
1057 /* Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string");
1058 I.e. a const string initializer with parens around it. That is
1059 what N_("string") resolves to, so we make no_* be macros instead. */
1060 #define no_arg N_("Argument missing after `%s' option")
1061 #define no_ass N_("Assertion missing after `%s' option")
1062 #define no_dir N_("Directory name missing after `%s' option")
1063 #define no_fil N_("File name missing after `%s' option")
1064 #define no_mac N_("Macro name missing after `%s' option")
1065 #define no_pth N_("Path name missing after `%s' option")
1067 /* This list must be ASCII sorted. Make enum order above match this. */
1068 #define DEF_OPT(text, msg, code) {text, msg, sizeof(text) - 1, code}
1071 static struct cl_option cl_options
[] =
1073 static const struct cl_option cl_options
[] =
1076 DEF_OPT("", 0, OPT_stdin_stdout
),
1077 DEF_OPT("$", 0, OPT_dollar
),
1078 DEF_OPT("+", 0, OPT_plus
),
1079 DEF_OPT("-help", 0, OPT__help
),
1080 DEF_OPT("-version", 0, OPT__version
),
1081 DEF_OPT("A", no_ass
, OPT_A
),
1082 DEF_OPT("C", 0, OPT_C
),
1083 DEF_OPT("D", no_mac
, OPT_D
),
1084 DEF_OPT("H", 0, OPT_H
),
1085 DEF_OPT("I", no_dir
, OPT_I
),
1086 DEF_OPT("M", 0, OPT_M
),
1087 DEF_OPT("MD", no_fil
, OPT_MD
),
1088 DEF_OPT("MG", 0, OPT_MG
),
1089 DEF_OPT("MM", 0, OPT_MM
),
1090 DEF_OPT("MMD", no_fil
, OPT_MMD
),
1091 DEF_OPT("P", 0, OPT_P
),
1092 DEF_OPT("U", no_mac
, OPT_U
),
1093 /* NB: Immed arg only, and not reqd */
1094 DEF_OPT("W", no_arg
, OPT_W
),
1095 DEF_OPT("d", no_arg
, OPT_d
),
1096 DEF_OPT("fleading-underscore", 0, OPT_fleading_underscore
),
1097 DEF_OPT("fno-leading-underscore", 0, OPT_fno_leading_underscore
),
1098 DEF_OPT("fpreprocessed", 0, OPT_fpreprocessed
),
1099 DEF_OPT("fno-preprocessed", 0, OPT_fno_preprocessed
),
1100 /* NB: Immed arg only, and not reqd */
1101 DEF_OPT("g", no_arg
, OPT_g
),
1102 DEF_OPT("h", 0, OPT_h
),
1103 DEF_OPT("idirafter", no_dir
, OPT_idirafter
),
1104 DEF_OPT("imacros", no_fil
, OPT_imacros
),
1105 DEF_OPT("include", no_fil
, OPT_include
),
1106 DEF_OPT("iprefix", no_pth
, OPT_iprefix
),
1107 DEF_OPT("isystem", no_dir
, OPT_isystem
),
1108 DEF_OPT("iwithprefix", no_dir
, OPT_iwithprefix
),
1109 DEF_OPT("iwithprefixbefore", no_dir
, OPT_iwithprefixbefore
),
1110 DEF_OPT("lang-asm", 0, OPT_lang_asm
),
1111 DEF_OPT("lang-c", 0, OPT_lang_c
),
1112 DEF_OPT("lang-c++", 0, OPT_lang_cplusplus
),
1113 DEF_OPT("lang-c89", 0, OPT_lang_c89
),
1114 DEF_OPT("lang-chill", 0, OPT_lang_chill
),
1115 DEF_OPT("lang-fortran", 0, OPT_lang_fortran
),
1116 DEF_OPT("lang-objc", 0, OPT_lang_objc
),
1117 DEF_OPT("lang-objc++", 0, OPT_lang_objcplusplus
),
1118 DEF_OPT("nostdinc", 0, OPT_nostdinc
),
1119 DEF_OPT("nostdinc++", 0, OPT_nostdincplusplus
),
1120 DEF_OPT("o", no_fil
, OPT_o
),
1121 DEF_OPT("pedantic", 0, OPT_pedantic
),
1122 DEF_OPT("pedantic-errors", 0, OPT_pedantic_errors
),
1123 DEF_OPT("remap", 0, OPT_remap
),
1124 DEF_OPT("std=c89", 0, OPT_std_c89
),
1125 DEF_OPT("std=c99", 0, OPT_std_c99
),
1126 DEF_OPT("std=c9x", 0, OPT_std_c9x
),
1127 DEF_OPT("std=gnu89", 0, OPT_std_gnu89
),
1128 DEF_OPT("std=gnu99", 0, OPT_std_gnu99
),
1129 DEF_OPT("std=gnu9x", 0, OPT_std_gnu9x
),
1130 DEF_OPT("std=iso9899:1990", 0, OPT_std_iso9899_1990
),
1131 DEF_OPT("std=iso9899:199409", 0, OPT_std_iso9899_199409
),
1132 DEF_OPT("std=iso9899:1999", 0, OPT_std_iso9899_1999
),
1133 DEF_OPT("std=iso9899:199x", 0, OPT_std_iso9899_199x
),
1134 DEF_OPT("traditional", 0, OPT_traditional
),
1135 DEF_OPT("trigraphs", 0, OPT_trigraphs
),
1136 DEF_OPT("v", 0, OPT_v
),
1137 DEF_OPT("w", 0, OPT_w
)
1141 /* Perform a binary search to find which, if any, option the given
1142 command-line matches. Returns its index in the option array,
1143 negative on failure. Complications arise since some options can be
1144 suffixed with an argument, and multiple complete matches can occur,
1145 e.g. -iwithprefix and -iwithprefixbefore. Moreover, we want to
1146 accept options beginning with -g and -W that we do not recognise,
1147 but not to swallow any subsequent command line argument; these are
1148 handled as special cases in cpp_handle_option */
1150 parse_option (input
)
1153 unsigned int md
, mn
, mx
;
1164 opt_len
= cl_options
[md
].opt_len
;
1165 comp
= strncmp (input
, cl_options
[md
].opt_text
, opt_len
);
1173 if (input
[opt_len
] == '\0')
1175 /* We were passed more text. If the option takes an argument,
1176 we may match a later option or we may have been passed the
1177 argument. The longest possible option match succeeds.
1178 If the option takes no arguments we have not matched and
1179 continue the search (e.g. input="stdc++" match was "stdc") */
1181 if (cl_options
[md
].msg
)
1183 /* Scan forwards. If we get an exact match, return it.
1184 Otherwise, return the longest option-accepting match.
1185 This loops no more than twice with current options */
1187 for (; mn
< N_OPTS
; mn
++)
1189 opt_len
= cl_options
[mn
].opt_len
;
1190 if (strncmp (input
, cl_options
[mn
].opt_text
, opt_len
))
1192 if (input
[opt_len
] == '\0')
1194 if (cl_options
[mn
].msg
)
1205 /* Handle one command-line option in (argc, argv).
1206 Can be called multiple times, to handle multiple sets of options.
1207 Returns number of strings consumed. */
1210 handle_option (pfile
, argc
, argv
)
1215 struct cpp_options
*opts
= CPP_OPTIONS (pfile
);
1218 if (argv
[i
][0] != '-')
1220 if (opts
->out_fname
!= NULL
)
1223 cpp_fatal (pfile
, "Too many arguments");
1225 else if (opts
->in_fname
!= NULL
)
1226 opts
->out_fname
= argv
[i
];
1228 opts
->in_fname
= argv
[i
];
1232 enum opt_code opt_code
;
1234 const char *arg
= 0;
1237 opt_index
= parse_option (&argv
[i
][1]);
1241 opt_code
= cl_options
[opt_index
].opt_code
;
1242 if (cl_options
[opt_index
].msg
)
1244 arg
= &argv
[i
][cl_options
[opt_index
].opt_len
+ 1];
1246 /* Yuk. Special case for -g and -W as they must not swallow
1247 up any following argument. If this becomes common, add
1248 another field to the cl_options table */
1249 if (arg
[0] == '\0' && !(opt_code
== OPT_g
|| opt_code
== OPT_W
))
1254 cpp_fatal (pfile
, _(cl_options
[opt_index
].msg
), argv
[i
- 1]);
1262 case N_OPTS
: /* shut GCC up */
1264 case OPT_fleading_underscore
:
1265 user_label_prefix
= "_";
1267 case OPT_fno_leading_underscore
:
1268 user_label_prefix
= "";
1270 case OPT_fpreprocessed
:
1271 opts
->preprocessed
= 1;
1273 case OPT_fno_preprocessed
:
1274 opts
->preprocessed
= 0;
1277 opts
->inhibit_warnings
= 1;
1279 case OPT_g
: /* Silently ignore anything but -g3 */
1280 if (!strcmp(&argv
[i
][2], "3"))
1281 opts
->debug_output
= 1;
1289 fprintf (stderr
, _("GNU CPP version %s (cpplib)\n"), version_string
);
1293 opts
->discard_comments
= 0;
1296 opts
->no_line_commands
= 1;
1298 case OPT_dollar
: /* Don't include $ in identifiers. */
1299 opts
->dollars_in_ident
= 0;
1302 opts
->print_include_names
= 1;
1305 new_pending_directive (opts
, arg
, cpp_define
);
1307 case OPT_pedantic_errors
:
1308 opts
->pedantic_errors
= 1;
1313 case OPT_traditional
:
1314 opts
->traditional
= 1;
1315 opts
->cplusplus_comments
= 0;
1316 opts
->trigraphs
= 0;
1317 opts
->warn_trigraphs
= 0;
1320 opts
->trigraphs
= 1;
1323 opts
->cplusplus
= 1;
1324 opts
->cplusplus_comments
= 1;
1330 opts
->include_prefix
= arg
;
1331 opts
->include_prefix_len
= strlen (arg
);
1334 opts
->cplusplus
= 0, opts
->cplusplus_comments
= 1;
1335 opts
->c89
= 0, opts
->c99
= 1, opts
->objc
= 0;
1338 opts
->cplusplus
= 0, opts
->cplusplus_comments
= 0;
1339 opts
->c89
= 1, opts
->c99
= 0, opts
->objc
= 0;
1340 opts
->trigraphs
= 1;
1341 new_pending_directive (opts
, "__STRICT_ANSI__", cpp_define
);
1343 case OPT_lang_cplusplus
:
1344 opts
->cplusplus
= 1, opts
->cplusplus_comments
= 1;
1345 opts
->c89
= 0, opts
->c99
= 0, opts
->objc
= 0;
1348 case OPT_lang_objcplusplus
:
1349 opts
->cplusplus
= opt_code
== OPT_lang_objcplusplus
;
1350 opts
->cplusplus_comments
= 1;
1351 opts
->c89
= 0, opts
->c99
= 0, opts
->objc
= 1;
1356 case OPT_lang_fortran
:
1357 opts
->lang_fortran
= 1, opts
->cplusplus_comments
= 0;
1359 case OPT_lang_chill
:
1360 opts
->objc
= 0, opts
->cplusplus
= 0;
1361 opts
->chill
= 1, opts
->traditional
= 1;
1364 /* -nostdinc causes no default include directories.
1365 You must specify all include-file directories with -I. */
1366 opts
->no_standard_includes
= 1;
1368 case OPT_nostdincplusplus
:
1369 /* -nostdinc++ causes no default C++-specific include directories. */
1370 opts
->no_standard_cplusplus_includes
= 1;
1373 opts
->cplusplus
= 0, opts
->cplusplus_comments
= 1;
1374 opts
->c89
= 1, opts
->c99
= 0, opts
->objc
= 0;
1378 opts
->cplusplus
= 0, opts
->cplusplus_comments
= 1;
1379 opts
->c89
= 0, opts
->c99
= 1, opts
->objc
= 0;
1380 new_pending_directive (opts
, "__STDC_VERSION__=199901L", cpp_define
);
1382 case OPT_std_iso9899_199409
:
1383 new_pending_directive (opts
, "__STDC_VERSION__=199409L", cpp_define
);
1385 case OPT_std_iso9899_1990
:
1387 opts
->cplusplus
= 0, opts
->cplusplus_comments
= 0;
1388 opts
->c89
= 1, opts
->c99
= 0, opts
->objc
= 0;
1389 opts
->trigraphs
= 1;
1390 new_pending_directive (opts
, "__STRICT_ANSI__", cpp_define
);
1392 case OPT_std_iso9899_199x
:
1393 case OPT_std_iso9899_1999
:
1396 opts
->cplusplus
= 0, opts
->cplusplus_comments
= 1;
1397 opts
->c89
= 0, opts
->c99
= 1, opts
->objc
= 0;
1398 opts
->trigraphs
= 1;
1399 new_pending_directive (opts
, "__STRICT_ANSI__", cpp_define
);
1400 new_pending_directive (opts
, "__STDC_VERSION__=199901L", cpp_define
);
1403 if (opts
->out_fname
!= NULL
)
1405 cpp_fatal (pfile
, "Output filename specified twice");
1408 opts
->out_fname
= arg
;
1409 if (!strcmp (opts
->out_fname
, "-"))
1410 opts
->out_fname
= "";
1413 fprintf (stderr
, _("GNU CPP version %s (cpplib)\n"), version_string
);
1414 #ifdef TARGET_VERSION
1417 fputc ('\n', stderr
);
1420 case OPT_stdin_stdout
:
1421 /* JF handle '-' as file name meaning stdin or stdout */
1422 if (opts
->in_fname
== NULL
)
1423 opts
->in_fname
= "";
1424 else if (opts
->out_fname
== NULL
)
1425 opts
->out_fname
= "";
1428 /* Args to -d specify what parts of macros to dump.
1429 Silently ignore unrecognised options; they may
1430 be aimed at the compiler proper. */
1434 while ((c
= *arg
++) != '\0')
1438 opts
->dump_macros
= dump_only
;
1439 opts
->no_output
= 1;
1442 opts
->dump_macros
= dump_names
;
1445 opts
->dump_macros
= dump_definitions
;
1448 opts
->dump_includes
= 1;
1453 /* The style of the choices here is a bit mixed.
1454 The chosen scheme is a hybrid of keeping all options in one string
1455 and specifying each option in a separate argument:
1456 -M|-MM|-MD file|-MMD file [-MG]. An alternative is:
1457 -M|-MM|-MD file|-MMD file|-MG|-MMG; or more concisely:
1458 -M[M][G][D file]. This is awkward to handle in specs, and is not
1460 /* ??? -MG must be specified in addition to one of -M or -MM.
1461 This can be relaxed in the future without breaking anything.
1462 The converse isn't true. */
1464 /* -MG isn't valid with -MD or -MMD. This is checked for later. */
1466 opts
->print_deps_missing_files
= 1;
1472 if (opt_code
== OPT_M
|| opt_code
== OPT_MD
)
1473 opts
->print_deps
= 2;
1475 opts
->print_deps
= 1;
1477 /* For -MD and -MMD options, write deps on file named by next arg */
1478 /* For -M and -MM, write deps on standard output
1479 and suppress the usual output. */
1480 if (opt_code
== OPT_MD
|| opt_code
== OPT_MMD
)
1481 opts
->deps_file
= arg
;
1483 opts
->no_output
= 1;
1486 if (strcmp (arg
, "-"))
1487 new_pending_directive (opts
, arg
, cpp_assert
);
1490 /* -A- eliminates all predefined macros and assertions.
1491 Let's include also any that were specified earlier
1492 on the command line. That way we can get rid of any
1493 that were passed automatically in from GCC. */
1494 struct pending_option
*o1
, *o2
;
1496 o1
= opts
->pending
->directive_head
;
1503 opts
->pending
->directive_head
= NULL
;
1504 opts
->pending
->directive_tail
= NULL
;
1508 new_pending_directive (opts
, arg
, cpp_undef
);
1510 case OPT_I
: /* Add directory to path for includes. */
1511 if (!strcmp (arg
, "-"))
1514 Use the preceding -I directories for #include "..."
1515 but not #include <...>.
1516 Don't search the directory of the present file
1517 for #include "...". (Note that -I. -I- is not the same as
1518 the default setup; -I. uses the compiler's working dir.) */
1519 if (! opts
->ignore_srcdir
)
1521 opts
->ignore_srcdir
= 1;
1522 opts
->pending
->quote_head
= opts
->pending
->brack_head
;
1523 opts
->pending
->quote_tail
= opts
->pending
->brack_tail
;
1524 opts
->pending
->brack_head
= 0;
1525 opts
->pending
->brack_tail
= 0;
1529 cpp_fatal (pfile
, "-I- specified twice");
1534 append_include_chain (pfile
, opts
->pending
,
1535 xstrdup (arg
), BRACKET
, 0);
1538 /* Add directory to beginning of system include path, as a system
1539 include directory. */
1540 append_include_chain (pfile
, opts
->pending
,
1541 xstrdup (arg
), SYSTEM
, 0);
1545 struct pending_option
*o
= (struct pending_option
*)
1546 xmalloc (sizeof (struct pending_option
));
1549 /* This list has to be built in reverse order so that
1550 when cpp_start_read pushes all the -include files onto
1551 the buffer stack, they will be scanned in forward order. */
1552 o
->next
= opts
->pending
->include_head
;
1553 opts
->pending
->include_head
= o
;
1558 struct pending_option
*o
= (struct pending_option
*)
1559 xmalloc (sizeof (struct pending_option
));
1563 APPEND (opts
->pending
, imacros
, o
);
1566 case OPT_iwithprefix
:
1567 /* Add directory to end of path for includes,
1568 with the default prefix at the front of its name. */
1570 case OPT_iwithprefixbefore
:
1571 /* Add directory to main path for includes,
1572 with the default prefix at the front of its name. */
1579 if (opts
->include_prefix
!= 0)
1581 fname
= xmalloc (opts
->include_prefix_len
+ len
+ 1);
1582 memcpy (fname
, opts
->include_prefix
, opts
->include_prefix_len
);
1583 memcpy (fname
+ opts
->include_prefix_len
, arg
, len
+ 1);
1587 fname
= xmalloc (sizeof GCC_INCLUDE_DIR
- 8 + len
);
1588 memcpy (fname
, GCC_INCLUDE_DIR
, sizeof GCC_INCLUDE_DIR
- 9);
1589 memcpy (fname
+ sizeof GCC_INCLUDE_DIR
- 9, arg
, len
+ 1);
1592 append_include_chain (pfile
, opts
->pending
, fname
,
1593 opt_code
== OPT_iwithprefix
? SYSTEM
: BRACKET
, 0);
1597 /* Add directory to end of path for includes. */
1598 append_include_chain (pfile
, opts
->pending
,
1599 xstrdup (arg
), AFTER
, 0);
1602 /* Silently ignore unrecognised options */
1603 if (!strcmp (argv
[i
], "-Wall"))
1605 opts
->warn_trigraphs
= 1;
1606 opts
->warn_comments
= 1;
1608 else if (!strcmp (argv
[i
], "-Wtraditional"))
1609 opts
->warn_stringify
= 1;
1610 else if (!strcmp (argv
[i
], "-Wtrigraphs"))
1611 opts
->warn_trigraphs
= 1;
1612 else if (!strcmp (argv
[i
], "-Wcomment"))
1613 opts
->warn_comments
= 1;
1614 else if (!strcmp (argv
[i
], "-Wcomments"))
1615 opts
->warn_comments
= 1;
1616 else if (!strcmp (argv
[i
], "-Wundef"))
1617 opts
->warn_undef
= 1;
1618 else if (!strcmp (argv
[i
], "-Wimport"))
1619 opts
->warn_import
= 1;
1620 else if (!strcmp (argv
[i
], "-Werror"))
1621 opts
->warnings_are_errors
= 1;
1622 else if (!strcmp (argv
[i
], "-Wno-traditional"))
1623 opts
->warn_stringify
= 0;
1624 else if (!strcmp (argv
[i
], "-Wno-trigraphs"))
1625 opts
->warn_trigraphs
= 0;
1626 else if (!strcmp (argv
[i
], "-Wno-comment"))
1627 opts
->warn_comments
= 0;
1628 else if (!strcmp (argv
[i
], "-Wno-comments"))
1629 opts
->warn_comments
= 0;
1630 else if (!strcmp (argv
[i
], "-Wno-undef"))
1631 opts
->warn_undef
= 0;
1632 else if (!strcmp (argv
[i
], "-Wno-import"))
1633 opts
->warn_import
= 0;
1634 else if (!strcmp (argv
[i
], "-Wno-error"))
1635 opts
->warnings_are_errors
= 0;
1644 opt_comp (const void *p1
, const void *p2
)
1646 return strcmp (((struct cl_option
*)p1
)->opt_text
,
1647 ((struct cl_option
*)p2
)->opt_text
);
1651 /* Handle command-line options in (argc, argv).
1652 Can be called multiple times, to handle multiple sets of options.
1653 Returns if an unrecognized option is seen.
1654 Returns number of strings consumed. */
1656 cpp_handle_options (pfile
, argc
, argv
)
1662 int strings_processed
;
1665 static int opts_sorted
= 0;
1670 /* For non-ASCII hosts, the array needs to be sorted at runtime */
1671 qsort (cl_options
, N_OPTS
, sizeof (struct cl_option
), opt_comp
);
1675 for (i
= 0; i
< argc
; i
+= strings_processed
)
1677 strings_processed
= handle_option (pfile
, argc
- i
, argv
+ i
);
1678 if (strings_processed
== 0)
1687 fprintf (stderr
, _("Usage: %s [switches] input output\n"), progname
);
1690 -include <file> Include the contents of <file> before other files\n\
1691 -imacros <file> Accept definition of macros in <file>\n\
1692 -iprefix <path> Specify <path> as a prefix for next two options\n\
1693 -iwithprefix <dir> Add <dir> to the end of the system include path\n\
1694 -iwithprefixbefore <dir> Add <dir> to the end of the main include path\n\
1695 -isystem <dir> Add <dir> to the start of the system include path\n\
1696 -idirafter <dir> Add <dir> to the end of the system include path\n\
1697 -I <dir> Add <dir> to the end of the main include path\n\
1698 -I- Fine-grained include path control; see info docs\n\
1699 -nostdinc Do not search system include directories\n\
1700 (dirs specified with -isystem will still be used)\n\
1701 -nostdinc++ Do not search system include directories for C++\n\
1702 -o <file> Put output into <file>\n\
1703 -pedantic Issue all warnings demanded by strict ANSI C\n\
1704 -pedantic-errors Issue -pedantic warnings as errors instead\n\
1705 -traditional Follow K&R pre-processor behaviour\n\
1706 -trigraphs Support ANSI C trigraphs\n\
1707 -lang-c Assume that the input sources are in C\n\
1708 -lang-c89 Assume that the input sources are in C89\n\
1709 -lang-c++ Assume that the input sources are in C++\n\
1710 -lang-objc Assume that the input sources are in ObjectiveC\n\
1711 -lang-objc++ Assume that the input sources are in ObjectiveC++\n\
1712 -lang-asm Assume that the input sources are in assembler\n\
1713 -lang-fortran Assume that the input sources are in Fortran\n\
1714 -lang-chill Assume that the input sources are in Chill\n\
1715 -std=<std name> Specify the conformance standard; one of:\n\
1716 gnu89, gnu99, c89, c99, iso9899:1990,\n\
1717 iso9899:199409, iso9899:1999\n\
1718 -+ Allow parsing of C++ style features\n\
1719 -w Inhibit warning messages\n\
1720 -Wtrigraphs Warn if trigraphs are encountered\n\
1721 -Wno-trigraphs Do not warn about trigraphs\n\
1722 -Wcomment{s} Warn if one comment starts inside another\n\
1723 -Wno-comment{s} Do not warn about comments\n\
1724 -Wtraditional Warn if a macro argument is/would be turned into\n\
1725 a string if -traditional is specified\n\
1726 -Wno-traditional Do not warn about stringification\n\
1727 -Wundef Warn if an undefined macro is used by #if\n\
1728 -Wno-undef Do not warn about testing undefined macros\n\
1729 -Wimport Warn about the use of the #import directive\n\
1730 -Wno-import Do not warn about the use of #import\n\
1731 -Werror Treat all warnings as errors\n\
1732 -Wno-error Do not treat warnings as errors\n\
1733 -Wall Enable all preprocessor warnings\n\
1734 -M Generate make dependencies\n\
1735 -MM As -M, but ignore system header files\n\
1736 -MD As -M, but put output in a .d file\n\
1737 -MMD As -MD, but ignore system header files\n\
1738 -MG Treat missing header file as generated files\n\
1739 -g3 Include #define and #undef directives in the output\n\
1740 -D<macro> Define a <macro> with string '1' as its value\n\
1741 -D<macro>=<val> Define a <macro> with <val> as its value\n\
1742 -A<question> (<answer>) Assert the <answer> to <question>\n\
1743 -U<macro> Undefine <macro> \n\
1744 -v Display the version number\n\
1745 -H Print the name of header files as they are used\n\
1746 -C Do not discard comments\n\
1747 -dM Display a list of macro definitions active at end\n\
1748 -dD Preserve macro definitions in output\n\
1749 -dN As -dD except that only the names are preserved\n\
1750 -dI Include #include directives in the output\n\
1751 -P Do not generate #line directives\n\
1752 -$ Do not allow '$' in identifiers\n\
1753 -remap Remap file names when including files.\n\
1754 --version Display version information\n\
1755 -h or --help Display this information\n\