]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cppinit.c
quadlib.c (_U_Qfcnvfxt_quad_to_usgl): New function.
[thirdparty/gcc.git] / gcc / cppinit.c
CommitLineData
5538ada6 1/* CPP Library.
5e7b4e25 2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
03b9ab42 3 1999, 2000, 2001 Free Software Foundation, Inc.
5538ada6
ZW
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
7
8This program is free software; you can redistribute it and/or modify it
9under the terms of the GNU General Public License as published by the
10Free Software Foundation; either version 2, or (at your option) any
11later version.
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with this program; if not, write to the Free Software
20Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
21
5538ada6
ZW
22#include "config.h"
23#include "system.h"
6de1e2a9
ZW
24#include "cpplib.h"
25#include "cpphash.h"
26#include "output.h"
27#include "prefix.h"
28#include "intl.h"
9f8f4efe 29#include "version.h"
49e6c08e 30#include "mkdeps.h"
60893f43 31#include "cppdefault.h"
6de1e2a9 32
4a58aab6 33/* Predefined symbols, built-in macros, and the default include path. */
6de1e2a9
ZW
34
35#ifndef GET_ENV_PATH_LIST
36#define GET_ENV_PATH_LIST(VAR,NAME) do { (VAR) = getenv (NAME); } while (0)
37#endif
38
88ae23e7
ZW
39/* Windows does not natively support inodes, and neither does MSDOS.
40 Cygwin's emulation can generate non-unique inodes, so don't use it.
41 VMS has non-numeric inodes. */
42#ifdef VMS
3943e756 43# define INO_T_EQ(a, b) (!memcmp (&(a), &(b), sizeof (a)))
88ae23e7 44#else
3943e756
MS
45# if (defined _WIN32 && ! defined (_UWIN)) || defined __MSDOS__
46# define INO_T_EQ(a, b) 0
47# else
48# define INO_T_EQ(a, b) ((a) == (b))
49# endif
88ae23e7
ZW
50#endif
51
4a58aab6 52/* Internal structures and prototypes. */
6de1e2a9 53
4a58aab6
NB
54/* A `struct pending_option' remembers one -D, -A, -U, -include, or
55 -imacros switch. */
40eac643 56
8be1ddca 57typedef void (* cl_directive_handler) PARAMS ((cpp_reader *, const char *));
0b22d65c 58struct pending_option
6de1e2a9 59{
0b22d65c 60 struct pending_option *next;
7ceb3598 61 const char *arg;
40eac643 62 cl_directive_handler handler;
6de1e2a9 63};
0b22d65c 64
88ae23e7
ZW
65/* The `pending' structure accumulates all the options that are not
66 actually processed until we hit cpp_start_read. It consists of
67 several lists, one for each type of option. We keep both head and
4a58aab6 68 tail pointers for quick insertion. */
88ae23e7
ZW
69struct cpp_pending
70{
40eac643 71 struct pending_option *directive_head, *directive_tail;
88ae23e7
ZW
72
73 struct file_name_list *quote_head, *quote_tail;
74 struct file_name_list *brack_head, *brack_tail;
75 struct file_name_list *systm_head, *systm_tail;
76 struct file_name_list *after_head, *after_tail;
77
78 struct pending_option *imacros_head, *imacros_tail;
79 struct pending_option *include_head, *include_tail;
80};
81
0b22d65c
ZW
82#ifdef __STDC__
83#define APPEND(pend, list, elt) \
84 do { if (!(pend)->list##_head) (pend)->list##_head = (elt); \
85 else (pend)->list##_tail->next = (elt); \
86 (pend)->list##_tail = (elt); \
87 } while (0)
88#else
89#define APPEND(pend, list, elt) \
90 do { if (!(pend)->list/**/_head) (pend)->list/**/_head = (elt); \
91 else (pend)->list/**/_tail->next = (elt); \
92 (pend)->list/**/_tail = (elt); \
93 } while (0)
94#endif
6de1e2a9 95
6de1e2a9 96static void print_help PARAMS ((void));
0b22d65c 97static void path_include PARAMS ((cpp_reader *,
0b22d65c 98 char *, int));
674c3b40 99static void init_library PARAMS ((void));
7ca3d2b1 100static void init_builtins PARAMS ((cpp_reader *));
0b22d65c 101static void append_include_chain PARAMS ((cpp_reader *,
c45da1ca 102 char *, int, int));
dd69c71b
NB
103struct file_name_list * remove_dup_dir PARAMS ((cpp_reader *,
104 struct file_name_list *));
105struct file_name_list * remove_dup_dirs PARAMS ((cpp_reader *,
106 struct file_name_list *));
ae79697b 107static void merge_include_chains PARAMS ((cpp_reader *));
4a58aab6
NB
108static void do_includes PARAMS ((cpp_reader *,
109 struct pending_option *,
110 int));
dd07b884 111static void set_lang PARAMS ((cpp_reader *, enum c_lang));
7ca3d2b1
NB
112static void init_dependency_output PARAMS ((cpp_reader *));
113static void init_standard_includes PARAMS ((cpp_reader *));
2c0accc9 114static void new_pending_directive PARAMS ((struct cpp_pending *,
40eac643
NB
115 const char *,
116 cl_directive_handler));
7ca3d2b1 117static void output_deps PARAMS ((cpp_reader *));
e23c0ba3 118static int parse_option PARAMS ((const char *));
6de1e2a9 119
4a58aab6 120/* Fourth argument to append_include_chain: chain to use. */
0b22d65c 121enum { QUOTE = 0, BRACKET, SYSTEM, AFTER };
6de1e2a9 122
61d0346d
NB
123/* If we have designated initializers (GCC >2.7) these tables can be
124 initialized, constant data. Otherwise, they have to be filled in at
12cf91fe 125 runtime. */
61d0346d 126#if HAVE_DESIGNATED_INITIALIZERS
a9ae4483 127
4a58aab6 128#define init_trigraph_map() /* Nothing. */
61d0346d
NB
129#define TRIGRAPH_MAP \
130__extension__ const U_CHAR _cpp_trigraph_map[UCHAR_MAX + 1] = {
131
a9ae4483 132#define END };
455d2586 133#define s(p, v) [p] = v,
61d0346d 134
a9ae4483 135#else
61d0346d 136
61d0346d
NB
137#define TRIGRAPH_MAP U_CHAR _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \
138 static void init_trigraph_map PARAMS ((void)) { \
139 unsigned char *x = _cpp_trigraph_map;
140
ae79697b 141#define END }
455d2586 142#define s(p, v) x[p] = v;
61d0346d 143
a9ae4483 144#endif
6de1e2a9 145
61d0346d
NB
146TRIGRAPH_MAP
147 s('=', '#') s(')', ']') s('!', '|')
148 s('(', '[') s('\'', '^') s('>', '}')
149 s('/', '\\') s('<', '{') s('-', '~')
150END
151
a9ae4483 152#undef s
455d2586 153#undef END
61d0346d 154#undef TRIGRAPH_MAP
6de1e2a9
ZW
155
156/* Given a colon-separated list of file names PATH,
157 add all the names to the search path for include files. */
158
159static void
e33f6253 160path_include (pfile, list, path)
6de1e2a9 161 cpp_reader *pfile;
0b22d65c
ZW
162 char *list;
163 int path;
6de1e2a9 164{
0b22d65c 165 char *p, *q, *name;
6de1e2a9 166
0b22d65c 167 p = list;
6de1e2a9 168
0b22d65c
ZW
169 do
170 {
6de1e2a9 171 /* Find the end of this name. */
0b22d65c 172 q = p;
6de1e2a9 173 while (*q != 0 && *q != PATH_SEPARATOR) q++;
0b22d65c
ZW
174 if (q == p)
175 {
176 /* An empty name in the path stands for the current directory. */
177 name = (char *) xmalloc (2);
178 name[0] = '.';
179 name[1] = 0;
180 }
181 else
182 {
183 /* Otherwise use the directory that is named. */
184 name = (char *) xmalloc (q - p + 1);
185 memcpy (name, p, q - p);
186 name[q - p] = 0;
187 }
6de1e2a9 188
e33f6253 189 append_include_chain (pfile, name, path, 0);
6de1e2a9
ZW
190
191 /* Advance past this name. */
0b22d65c 192 if (*q == 0)
6de1e2a9 193 break;
0b22d65c
ZW
194 p = q + 1;
195 }
196 while (1);
197}
198
0b22d65c
ZW
199/* Append DIR to include path PATH. DIR must be permanently allocated
200 and writable. */
201static void
e33f6253 202append_include_chain (pfile, dir, path, cxx_aware)
0b22d65c 203 cpp_reader *pfile;
0b22d65c
ZW
204 char *dir;
205 int path;
7d4918a2 206 int cxx_aware ATTRIBUTE_UNUSED;
0b22d65c 207{
e33f6253 208 struct cpp_pending *pend = CPP_OPTION (pfile, pending);
0b22d65c
ZW
209 struct file_name_list *new;
210 struct stat st;
211 unsigned int len;
212
b0699dad 213 _cpp_simplify_pathname (dir);
0b22d65c
ZW
214 if (stat (dir, &st))
215 {
216 /* Dirs that don't exist are silently ignored. */
217 if (errno != ENOENT)
c1212d2f 218 cpp_notice_from_errno (pfile, dir);
ae79697b 219 else if (CPP_OPTION (pfile, verbose))
041c3194 220 fprintf (stderr, _("ignoring nonexistent directory \"%s\"\n"), dir);
0b22d65c
ZW
221 return;
222 }
223
224 if (!S_ISDIR (st.st_mode))
225 {
c1212d2f 226 cpp_notice (pfile, "%s: Not a directory", dir);
0b22d65c
ZW
227 return;
228 }
229
230 len = strlen (dir);
231 if (len > pfile->max_include_len)
232 pfile->max_include_len = len;
ae79697b 233
7ceb3598 234 new = (struct file_name_list *) xmalloc (sizeof (struct file_name_list));
0b22d65c
ZW
235 new->name = dir;
236 new->nlen = len;
237 new->ino = st.st_ino;
238 new->dev = st.st_dev;
c45da1ca 239 if (path == SYSTEM)
52b357ea
JJ
240#ifdef NO_IMPLICIT_EXTERN_C
241 new->sysp = 1;
242#else
c45da1ca 243 new->sysp = cxx_aware ? 1 : 2;
52b357ea 244#endif
c45da1ca
ZW
245 else
246 new->sysp = 0;
0b22d65c 247 new->name_map = NULL;
503cb436
DB
248 new->next = NULL;
249 new->alloc = NULL;
0b22d65c
ZW
250
251 switch (path)
252 {
253 case QUOTE: APPEND (pend, quote, new); break;
254 case BRACKET: APPEND (pend, brack, new); break;
255 case SYSTEM: APPEND (pend, systm, new); break;
256 case AFTER: APPEND (pend, after, new); break;
6de1e2a9
ZW
257 }
258}
259
dd69c71b
NB
260/* Handle a duplicated include path. PREV is the link in the chain
261 before the duplicate. The duplicate is removed from the chain and
262 freed. Returns PREV. */
263struct file_name_list *
264remove_dup_dir (pfile, prev)
265 cpp_reader *pfile;
266 struct file_name_list *prev;
267{
268 struct file_name_list *cur = prev->next;
269
270 if (CPP_OPTION (pfile, verbose))
271 fprintf (stderr, _("ignoring duplicate directory \"%s\"\n"), cur->name);
272
273 prev->next = cur->next;
274 free (cur->name);
275 free (cur);
276
277 return prev;
278}
279
280/* Remove duplicate directories from a chain. Returns the tail of the
281 chain, or NULL if the chain is empty. This algorithm is quadratic
282 in the number of -I switches, which is acceptable since there
283 aren't usually that many of them. */
284struct file_name_list *
285remove_dup_dirs (pfile, head)
286 cpp_reader *pfile;
287 struct file_name_list *head;
288{
289 struct file_name_list *prev = NULL, *cur, *other;
290
291 for (cur = head; cur; cur = cur->next)
292 {
293 for (other = head; other != cur; other = other->next)
294 if (INO_T_EQ (cur->ino, other->ino) && cur->dev == other->dev)
295 {
296 cur = remove_dup_dir (pfile, prev);
297 break;
298 }
299 prev = cur;
300 }
301
302 return prev;
303}
304
88ae23e7
ZW
305/* Merge the four include chains together in the order quote, bracket,
306 system, after. Remove duplicate dirs (as determined by
307 INO_T_EQ()). The system_include and after_include chains are never
308 referred to again after this function; all access is through the
309 bracket_include path.
310
311 For the future: Check if the directory is empty (but
4a58aab6 312 how?) and possibly preload the include hash. */
88ae23e7
ZW
313
314static void
ae79697b
ZW
315merge_include_chains (pfile)
316 cpp_reader *pfile;
88ae23e7 317{
dd69c71b 318 struct file_name_list *quote, *brack, *systm, *qtail;
88ae23e7 319
ae79697b 320 struct cpp_pending *pend = CPP_OPTION (pfile, pending);
88ae23e7 321
ae79697b
ZW
322 quote = pend->quote_head;
323 brack = pend->brack_head;
324 systm = pend->systm_head;
dd69c71b 325 qtail = pend->quote_tail;
88ae23e7 326
dd69c71b
NB
327 /* Paste together bracket, system, and after include chains. */
328 if (systm)
329 pend->systm_tail->next = pend->after_head;
88ae23e7 330 else
dd69c71b
NB
331 systm = pend->after_head;
332
333 if (brack)
334 pend->brack_tail->next = systm;
88ae23e7
ZW
335 else
336 brack = systm;
337
dd69c71b
NB
338 /* This is a bit tricky. First we drop dupes from the quote-include
339 list. Then we drop dupes from the bracket-include list.
340 Finally, if qtail and brack are the same directory, we cut out
341 brack.
88ae23e7
ZW
342
343 We can't just merge the lists and then uniquify them because
344 then we may lose directories from the <> search path that should
345 be there; consider -Ifoo -Ibar -I- -Ifoo -Iquux. It is however
346 safe to treat -Ibar -Ifoo -I- -Ifoo -Iquux as if written
dd69c71b 347 -Ibar -I- -Ifoo -Iquux. */
88ae23e7 348
dd69c71b
NB
349 remove_dup_dirs (pfile, brack);
350 qtail = remove_dup_dirs (pfile, quote);
88ae23e7
ZW
351
352 if (quote)
353 {
dd69c71b
NB
354 qtail->next = brack;
355
356 /* If brack == qtail, remove brack as it's simpler. */
88ae23e7 357 if (INO_T_EQ (qtail->ino, brack->ino) && qtail->dev == brack->dev)
dd69c71b 358 brack = remove_dup_dir (pfile, qtail);
88ae23e7
ZW
359 }
360 else
361 quote = brack;
362
ae79697b
ZW
363 CPP_OPTION (pfile, quote_include) = quote;
364 CPP_OPTION (pfile, bracket_include) = brack;
88ae23e7
ZW
365}
366
dd07b884
NB
367/* Sets internal flags correctly for a given language, and defines
368 macros if necessary. */
369static void
370set_lang (pfile, lang)
371 cpp_reader *pfile;
372 enum c_lang lang;
373{
bdb05a7b
NB
374 /* Defaults. */
375 CPP_OPTION (pfile, lang) = lang;
dd07b884
NB
376 CPP_OPTION (pfile, objc) = 0;
377 CPP_OPTION (pfile, cplusplus) = 0;
bdb05a7b 378 CPP_OPTION (pfile, extended_numbers) = 1; /* Allowed in GNU C and C99. */
dd07b884
NB
379
380 switch (lang)
381 {
382 /* GNU C. */
383 case CLK_GNUC99:
384 CPP_OPTION (pfile, trigraphs) = 0;
385 CPP_OPTION (pfile, dollars_in_ident) = 1;
386 CPP_OPTION (pfile, cplusplus_comments) = 1;
387 CPP_OPTION (pfile, digraphs) = 1;
dd07b884 388 CPP_OPTION (pfile, c99) = 1;
dd07b884
NB
389 break;
390 case CLK_GNUC89:
391 CPP_OPTION (pfile, trigraphs) = 0;
392 CPP_OPTION (pfile, dollars_in_ident) = 1;
393 CPP_OPTION (pfile, cplusplus_comments) = 1;
394 CPP_OPTION (pfile, digraphs) = 1;
dd07b884
NB
395 CPP_OPTION (pfile, c99) = 0;
396 break;
397
398 /* ISO C. */
399 case CLK_STDC94:
dd07b884
NB
400 case CLK_STDC89:
401 CPP_OPTION (pfile, trigraphs) = 1;
402 CPP_OPTION (pfile, dollars_in_ident) = 0;
403 CPP_OPTION (pfile, cplusplus_comments) = 0;
404 CPP_OPTION (pfile, digraphs) = lang == CLK_STDC94;
dd07b884 405 CPP_OPTION (pfile, c99) = 0;
bdb05a7b 406 CPP_OPTION (pfile, extended_numbers) = 0;
dd07b884
NB
407 break;
408 case CLK_STDC99:
409 CPP_OPTION (pfile, trigraphs) = 1;
410 CPP_OPTION (pfile, dollars_in_ident) = 0;
411 CPP_OPTION (pfile, cplusplus_comments) = 1;
412 CPP_OPTION (pfile, digraphs) = 1;
dd07b884 413 CPP_OPTION (pfile, c99) = 1;
dd07b884
NB
414 break;
415
416 /* Objective C. */
417 case CLK_OBJCXX:
dd07b884
NB
418 CPP_OPTION (pfile, cplusplus) = 1;
419 case CLK_OBJC:
420 CPP_OPTION (pfile, trigraphs) = 0;
421 CPP_OPTION (pfile, dollars_in_ident) = 1;
422 CPP_OPTION (pfile, cplusplus_comments) = 1;
423 CPP_OPTION (pfile, digraphs) = 1;
dd07b884
NB
424 CPP_OPTION (pfile, c99) = 0;
425 CPP_OPTION (pfile, objc) = 1;
dd07b884
NB
426 break;
427
428 /* C++. */
429 case CLK_GNUCXX:
430 case CLK_CXX98:
431 CPP_OPTION (pfile, cplusplus) = 1;
432 CPP_OPTION (pfile, trigraphs) = lang == CLK_CXX98;
433 CPP_OPTION (pfile, dollars_in_ident) = lang == CLK_GNUCXX;
434 CPP_OPTION (pfile, cplusplus_comments) = 1;
435 CPP_OPTION (pfile, digraphs) = 1;
dd07b884 436 CPP_OPTION (pfile, c99) = 0;
dd07b884
NB
437 break;
438
439 /* Assembler. */
440 case CLK_ASM:
441 CPP_OPTION (pfile, trigraphs) = 0;
442 CPP_OPTION (pfile, dollars_in_ident) = 0; /* Maybe not? */
443 CPP_OPTION (pfile, cplusplus_comments) = 1;
444 CPP_OPTION (pfile, digraphs) = 0;
dd07b884 445 CPP_OPTION (pfile, c99) = 0;
dd07b884
NB
446 break;
447 }
448}
449
7ca3d2b1
NB
450#ifdef HOST_EBCDIC
451static int opt_comp PARAMS ((const void *, const void *));
452
453/* Run-time sorting of options array. */
454static int
455opt_comp (p1, p2)
456 const void *p1, *p2;
457{
458 return strcmp (((struct cl_option *) p1)->opt_text,
459 ((struct cl_option *) p2)->opt_text);
460}
461#endif
cf44ea52 462
7ca3d2b1
NB
463/* init initializes library global state. It might not need to
464 do anything depending on the platform and compiler. */
cf44ea52
NB
465
466static void
674c3b40 467init_library ()
cf44ea52 468{
7ca3d2b1
NB
469 static int initialized = 0;
470
471 if (! initialized)
472 {
473 initialized = 1;
474
cf44ea52 475#ifdef HOST_EBCDIC
7ca3d2b1
NB
476 /* For non-ASCII hosts, the cl_options array needs to be sorted at
477 runtime. */
478 qsort (cl_options, N_OPTS, sizeof (struct cl_option), opt_comp);
cf44ea52
NB
479#endif
480
7ca3d2b1
NB
481 /* Set up the trigraph map. This doesn't need to do anything if
482 we were compiled with a compiler that supports C99 designated
483 initializers. */
484 init_trigraph_map ();
485 }
cf44ea52
NB
486}
487
6de1e2a9 488/* Initialize a cpp_reader structure. */
cf44ea52
NB
489cpp_reader *
490cpp_create_reader (lang)
dd07b884 491 enum c_lang lang;
6de1e2a9 492{
93c80368 493 struct spec_nodes *s;
7ca3d2b1 494 cpp_reader *pfile;
93c80368 495
cf44ea52 496 /* Initialise this instance of the library if it hasn't been already. */
674c3b40 497 init_library ();
7ca3d2b1
NB
498
499 pfile = (cpp_reader *) xcalloc (1, sizeof (cpp_reader));
93c80368 500
c740cee2 501 set_lang (pfile, lang);
ae79697b
ZW
502 CPP_OPTION (pfile, warn_import) = 1;
503 CPP_OPTION (pfile, discard_comments) = 1;
504 CPP_OPTION (pfile, show_column) = 1;
6ab3e7dd 505 CPP_OPTION (pfile, tabstop) = 8;
be768055 506 CPP_OPTION (pfile, operator_names) = 1;
ae79697b
ZW
507
508 CPP_OPTION (pfile, pending) =
509 (struct cpp_pending *) xcalloc (1, sizeof (struct cpp_pending));
510
f7114e17
NB
511 /* It's simplest to just create this struct whether or not it will
512 be needed. */
513 pfile->deps = deps_init ();
514
4a58aab6 515 /* Initialize lexer state. */
93c80368
NB
516 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
517
518 /* Indicate date and time not yet calculated. */
519 pfile->date.type = CPP_EOF;
520
521 /* Initialise the base context. */
522 pfile->context = &pfile->base_context;
523 pfile->base_context.macro = 0;
524 pfile->base_context.prev = pfile->base_context.next = 0;
525
526 /* Identifier pool initially 8K. Unaligned, permanent pool. */
527 _cpp_init_pool (&pfile->ident_pool, 8 * 1024, 1, 0);
528
93c80368
NB
529 /* Argument pool initially 8K. Aligned, temporary pool. */
530 _cpp_init_pool (&pfile->argument_pool, 8 * 1024, 0, 1);
531
532 /* Macro pool initially 8K. Aligned, permanent pool. */
533 _cpp_init_pool (&pfile->macro_pool, 8 * 1024, 0, 0);
3cb553b4 534
93c80368 535 _cpp_init_hashtable (pfile);
bfb9dc7f 536 _cpp_init_stacks (pfile);
c71f835b 537 _cpp_init_includes (pfile);
58fea6af 538 _cpp_init_internal_pragmas (pfile);
6de1e2a9 539
93c80368
NB
540 /* Initialize the special nodes. */
541 s = &pfile->spec_nodes;
542 s->n_L = cpp_lookup (pfile, DSC("L"));
543 s->n_defined = cpp_lookup (pfile, DSC("defined"));
7d4918a2
ZW
544 s->n_true = cpp_lookup (pfile, DSC("true"));
545 s->n_false = cpp_lookup (pfile, DSC("false"));
a5c3cccd 546 s->n__Pragma = cpp_lookup (pfile, DSC("_Pragma"));
93c80368
NB
547 s->n__STRICT_ANSI__ = cpp_lookup (pfile, DSC("__STRICT_ANSI__"));
548 s->n__CHAR_UNSIGNED__ = cpp_lookup (pfile, DSC("__CHAR_UNSIGNED__"));
549 s->n__VA_ARGS__ = cpp_lookup (pfile, DSC("__VA_ARGS__"));
550 s->n__VA_ARGS__->flags |= NODE_DIAGNOSTIC;
cf44ea52
NB
551
552 return pfile;
f2d5f0cc
ZW
553}
554
400023a3
NB
555/* Free resources used by PFILE. Accessing PFILE after this function
556 returns leads to undefined behaviour. */
557int
558cpp_destroy (pfile)
6de1e2a9
ZW
559 cpp_reader *pfile;
560{
400023a3 561 int result;
93c80368
NB
562 struct file_name_list *dir, *dirn;
563 cpp_context *context, *contextn;
709e9e50 564
38b24ee2 565 while (CPP_BUFFER (pfile) != NULL)
6de1e2a9
ZW
566 cpp_pop_buffer (pfile);
567
93c80368 568 if (pfile->macro_buffer)
4b49c365
AO
569 {
570 free ((PTR) pfile->macro_buffer);
571 pfile->macro_buffer = NULL;
572 pfile->macro_buffer_len = 0;
573 }
93c80368 574
f7114e17 575 deps_free (pfile->deps);
49e6c08e 576
bfb9dc7f 577 _cpp_cleanup_includes (pfile);
c71f835b 578 _cpp_cleanup_stacks (pfile);
93c80368
NB
579 _cpp_cleanup_hashtable (pfile);
580
581 _cpp_free_lookaheads (pfile);
709e9e50 582
93c80368 583 _cpp_free_pool (&pfile->ident_pool);
93c80368
NB
584 _cpp_free_pool (&pfile->macro_pool);
585 _cpp_free_pool (&pfile->argument_pool);
586
587 for (dir = CPP_OPTION (pfile, quote_include); dir; dir = dirn)
709e9e50 588 {
93c80368 589 dirn = dir->next;
709e9e50
NB
590 free (dir->name);
591 free (dir);
592 }
93c80368
NB
593
594 for (context = pfile->base_context.next; context; context = contextn)
595 {
596 contextn = context->next;
597 free (context);
598 }
400023a3
NB
599
600 result = pfile->errors;
601 free (pfile);
602
603 return result;
6de1e2a9
ZW
604}
605
606
93c80368
NB
607/* This structure defines one built-in identifier. A node will be
608 entered in the hash table under the name NAME, with value VALUE (if
609 any). If flags has OPERATOR, the node's operator field is used; if
610 flags has BUILTIN the node's builtin field is used.
92936ecf
ZW
611
612 Two values are not compile time constants, so we tag
041c3194 613 them in the FLAGS field instead:
8c389f84
ZW
614 VERS value is the global version_string, quoted
615 ULP value is the global user_label_prefix
92936ecf 616
93c80368 617 Also, macros with CPLUS set in the flags field are entered only for C++. */
a9ae4483
ZW
618
619struct builtin
620{
12cf91fe 621 const U_CHAR *name;
041c3194 622 const char *value;
93c80368
NB
623 unsigned char builtin;
624 unsigned char operator;
a9ae4483 625 unsigned short flags;
93c80368 626 unsigned short len;
a9ae4483 627};
93c80368
NB
628#define VERS 0x01
629#define ULP 0x02
630#define CPLUS 0x04
631#define BUILTIN 0x08
632#define OPERATOR 0x10
633
634#define B(n, t) { U n, 0, t, 0, BUILTIN, sizeof n - 1 }
1ca894a0 635#define BC(n, t) { U n, 0, t, 0, BUILTIN | CPLUS, sizeof n - 1 }
93c80368
NB
636#define C(n, v) { U n, v, 0, 0, 0, sizeof n - 1 }
637#define X(n, f) { U n, 0, 0, 0, f, sizeof n - 1 }
638#define O(n, c, f) { U n, 0, 0, c, OPERATOR | f, sizeof n - 1 }
a9ae4483 639static const struct builtin builtin_array[] =
6de1e2a9 640{
93c80368
NB
641 B("__TIME__", BT_TIME),
642 B("__DATE__", BT_DATE),
643 B("__FILE__", BT_FILE),
644 B("__BASE_FILE__", BT_BASE_FILE),
645 B("__LINE__", BT_SPECLINE),
646 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL),
647 B("__STDC__", BT_STDC),
1ca894a0 648 BC("__GXX_WEAK__", BT_WEAK),
12cf91fe 649
041c3194
ZW
650 X("__VERSION__", VERS),
651 X("__USER_LABEL_PREFIX__", ULP),
12cf91fe
ZW
652 C("__REGISTER_PREFIX__", REGISTER_PREFIX),
653 C("__HAVE_BUILTIN_SETJMP__", "1"),
6de1e2a9 654#ifndef NO_BUILTIN_SIZE_TYPE
12cf91fe 655 C("__SIZE_TYPE__", SIZE_TYPE),
6de1e2a9
ZW
656#endif
657#ifndef NO_BUILTIN_PTRDIFF_TYPE
12cf91fe 658 C("__PTRDIFF_TYPE__", PTRDIFF_TYPE),
6de1e2a9 659#endif
0209c340 660#ifndef NO_BUILTIN_WCHAR_TYPE
12cf91fe 661 C("__WCHAR_TYPE__", WCHAR_TYPE),
0209c340 662#endif
d6777972
JM
663#ifndef NO_BUILTIN_WINT_TYPE
664 C("__WINT_TYPE__", WINT_TYPE),
665#endif
92936ecf
ZW
666
667 /* Named operators known to the preprocessor. These cannot be #defined
668 and always have their stated meaning. They are treated like normal
93c80368 669 identifiers except for the type code and the meaning. Most of them
92936ecf 670 are only for C++ (but see iso646.h). */
92936ecf
ZW
671 O("and", CPP_AND_AND, CPLUS),
672 O("and_eq", CPP_AND_EQ, CPLUS),
673 O("bitand", CPP_AND, CPLUS),
674 O("bitor", CPP_OR, CPLUS),
675 O("compl", CPP_COMPL, CPLUS),
676 O("not", CPP_NOT, CPLUS),
677 O("not_eq", CPP_NOT_EQ, CPLUS),
678 O("or", CPP_OR_OR, CPLUS),
679 O("or_eq", CPP_OR_EQ, CPLUS),
680 O("xor", CPP_XOR, CPLUS),
93c80368 681 O("xor_eq", CPP_XOR_EQ, CPLUS)
a9ae4483 682};
12cf91fe
ZW
683#undef B
684#undef C
685#undef X
be768055 686#undef O
8c389f84
ZW
687#define builtin_array_end \
688 builtin_array + sizeof(builtin_array)/sizeof(struct builtin)
a9ae4483
ZW
689
690/* Subroutine of cpp_start_read; reads the builtins table above and
691 enters the macros into the hash table. */
a9ae4483 692static void
7ca3d2b1 693init_builtins (pfile)
a9ae4483
ZW
694 cpp_reader *pfile;
695{
a9ae4483 696 const struct builtin *b;
771c4df3 697
8c389f84 698 for(b = builtin_array; b < builtin_array_end; b++)
6de1e2a9 699 {
93c80368 700 if ((b->flags & CPLUS) && ! CPP_OPTION (pfile, cplusplus))
92936ecf
ZW
701 continue;
702
be768055
JJ
703 if ((b->flags & OPERATOR) && ! CPP_OPTION (pfile, operator_names))
704 continue;
705
93c80368
NB
706 if (b->flags & (OPERATOR | BUILTIN))
707 {
708 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
709 if (b->flags & OPERATOR)
710 {
711 hp->flags |= NODE_OPERATOR;
712 hp->value.operator = b->operator;
713 }
714 else
715 {
716 hp->type = NT_MACRO;
717 hp->flags |= NODE_BUILTIN;
718 hp->value.builtin = b->builtin;
719 }
720 }
721 else /* A standard macro of some kind. */
8c389f84 722 {
041c3194
ZW
723 const char *val;
724 char *str;
725
726 if (b->flags & VERS)
727 {
2c8f0515
ZW
728 /* Allocate enough space for 'name "value"\n\0'. */
729 str = alloca (b->len + strlen (version_string) + 5);
730 sprintf (str, "%s \"%s\"\n", b->name, version_string);
041c3194
ZW
731 }
732 else
733 {
734 if (b->flags & ULP)
771c4df3 735 val = CPP_OPTION (pfile, user_label_prefix);
041c3194
ZW
736 else
737 val = b->value;
738
2c8f0515
ZW
739 /* Allocate enough space for "name value\n\0". */
740 str = alloca (b->len + strlen (val) + 3);
741 sprintf(str, "%s %s\n", b->name, val);
041c3194 742 }
c154ba66 743
2c8f0515 744 _cpp_define_builtin (pfile, str);
8c389f84 745 }
6de1e2a9 746 }
c740cee2
NB
747
748 if (CPP_OPTION (pfile, cplusplus))
749 _cpp_define_builtin (pfile, "__cplusplus 1");
750 if (CPP_OPTION (pfile, objc))
751 _cpp_define_builtin (pfile, "__OBJC__ 1");
752
753 if (CPP_OPTION (pfile, lang) == CLK_STDC94)
754 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
755 else if (CPP_OPTION (pfile, c99))
756 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
757
758 if (CPP_OPTION (pfile, lang) == CLK_STDC89
759 || CPP_OPTION (pfile, lang) == CLK_STDC94
760 || CPP_OPTION (pfile, lang) == CLK_STDC99)
761 _cpp_define_builtin (pfile, "__STRICT_ANSI__ 1");
762 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
763 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
6de1e2a9 764}
93c80368
NB
765#undef BUILTIN
766#undef OPERATOR
6feb7728 767#undef VERS
a9ae4483 768#undef ULP
93c80368 769#undef CPLUS
041c3194 770#undef builtin_array_end
6de1e2a9 771
c45da1ca
ZW
772/* And another subroutine. This one sets up the standard include path. */
773static void
7ca3d2b1 774init_standard_includes (pfile)
c45da1ca
ZW
775 cpp_reader *pfile;
776{
c45da1ca 777 char *path;
455d2586 778 const struct default_include *p;
ae79697b 779 const char *specd_prefix = CPP_OPTION (pfile, include_prefix);
c45da1ca
ZW
780
781 /* Several environment variables may add to the include search path.
782 CPATH specifies an additional list of directories to be searched
783 as if specified with -I, while C_INCLUDE_PATH, CPLUS_INCLUDE_PATH,
784 etc. specify an additional list of directories to be searched as
785 if specified with -isystem, for the language indicated. */
786
787 GET_ENV_PATH_LIST (path, "CPATH");
788 if (path != 0 && *path != 0)
e33f6253 789 path_include (pfile, path, BRACKET);
c45da1ca 790
ae79697b 791 switch ((CPP_OPTION (pfile, objc) << 1) + CPP_OPTION (pfile, cplusplus))
c45da1ca
ZW
792 {
793 case 0:
794 GET_ENV_PATH_LIST (path, "C_INCLUDE_PATH");
795 break;
796 case 1:
797 GET_ENV_PATH_LIST (path, "CPLUS_INCLUDE_PATH");
798 break;
799 case 2:
800 GET_ENV_PATH_LIST (path, "OBJC_INCLUDE_PATH");
801 break;
802 case 3:
803 GET_ENV_PATH_LIST (path, "OBJCPLUS_INCLUDE_PATH");
804 break;
805 }
806 if (path != 0 && *path != 0)
e33f6253 807 path_include (pfile, path, SYSTEM);
c45da1ca
ZW
808
809 /* Search "translated" versions of GNU directories.
810 These have /usr/local/lib/gcc... replaced by specd_prefix. */
60893f43 811 if (specd_prefix != 0 && cpp_GCC_INCLUDE_DIR_len)
c45da1ca 812 {
c45da1ca
ZW
813 /* Remove the `include' from /usr/local/lib/gcc.../include.
814 GCC_INCLUDE_DIR will always end in /include. */
60893f43
ZW
815 int default_len = cpp_GCC_INCLUDE_DIR_len;
816 char *default_prefix = (char *) alloca (default_len + 1);
c45da1ca
ZW
817 int specd_len = strlen (specd_prefix);
818
60893f43 819 memcpy (default_prefix, cpp_GCC_INCLUDE_DIR, default_len);
c45da1ca
ZW
820 default_prefix[default_len] = '\0';
821
60893f43 822 for (p = cpp_include_defaults; p->fname; p++)
c45da1ca
ZW
823 {
824 /* Some standard dirs are only for C++. */
825 if (!p->cplusplus
ae79697b
ZW
826 || (CPP_OPTION (pfile, cplusplus)
827 && !CPP_OPTION (pfile, no_standard_cplusplus_includes)))
c45da1ca
ZW
828 {
829 /* Does this dir start with the prefix? */
61d0346d 830 if (!memcmp (p->fname, default_prefix, default_len))
c45da1ca
ZW
831 {
832 /* Yes; change prefix and add to search list. */
833 int flen = strlen (p->fname);
834 int this_len = specd_len + flen - default_len;
835 char *str = (char *) xmalloc (this_len + 1);
836 memcpy (str, specd_prefix, specd_len);
837 memcpy (str + specd_len,
838 p->fname + default_len,
839 flen - default_len + 1);
840
e33f6253 841 append_include_chain (pfile, str, SYSTEM, p->cxx_aware);
c45da1ca
ZW
842 }
843 }
844 }
845 }
846
847 /* Search ordinary names for GNU include directories. */
60893f43 848 for (p = cpp_include_defaults; p->fname; p++)
c45da1ca
ZW
849 {
850 /* Some standard dirs are only for C++. */
851 if (!p->cplusplus
ae79697b
ZW
852 || (CPP_OPTION (pfile, cplusplus)
853 && !CPP_OPTION (pfile, no_standard_cplusplus_includes)))
c45da1ca 854 {
c45da1ca 855 char *str = xstrdup (update_path (p->fname, p->component));
e33f6253 856 append_include_chain (pfile, str, SYSTEM, p->cxx_aware);
c45da1ca
ZW
857 }
858 }
859}
860
4a58aab6
NB
861/* Handles -imacro and -include from the command line. */
862static void
863do_includes (pfile, p, scan)
864 cpp_reader *pfile;
865 struct pending_option *p;
866 int scan;
867{
868 while (p)
869 {
4a58aab6
NB
870 struct pending_option *q;
871
05e81724
NB
872 /* Don't handle if -fpreprocessed. Later: maybe update this to
873 use the #include "" search path if cpp_read_file fails. */
a4299d07 874 if (CPP_OPTION (pfile, preprocessed))
05e81724
NB
875 cpp_error (pfile, "-include and -imacros cannot be used with -fpreprocessed");
876 else if (_cpp_read_file (pfile, p->arg) && scan)
8dc4676d 877 cpp_scan_buffer_nooutput (pfile, 0);
4a58aab6
NB
878 q = p->next;
879 free (p);
880 p = q;
881 }
882}
883
05e81724
NB
884/* This is called after options have been processed. Setup for
885 processing input from the file named FNAME. (Use standard input if
886 FNAME == NULL.) Return 1 on success, 0 on failure. */
6de1e2a9
ZW
887
888int
93c80368 889cpp_start_read (pfile, fname)
6de1e2a9 890 cpp_reader *pfile;
7ceb3598 891 const char *fname;
6de1e2a9 892{
0b22d65c 893 struct pending_option *p, *q;
6de1e2a9 894
c45da1ca 895 /* Set up the include search path now. */
ae79697b 896 if (! CPP_OPTION (pfile, no_standard_includes))
7ca3d2b1 897 init_standard_includes (pfile);
c45da1ca 898
ae79697b 899 merge_include_chains (pfile);
c45da1ca
ZW
900
901 /* With -v, print the list of dirs to search. */
ae79697b 902 if (CPP_OPTION (pfile, verbose))
c45da1ca
ZW
903 {
904 struct file_name_list *l;
905 fprintf (stderr, _("#include \"...\" search starts here:\n"));
ae79697b 906 for (l = CPP_OPTION (pfile, quote_include); l; l = l->next)
c45da1ca 907 {
ae79697b 908 if (l == CPP_OPTION (pfile, bracket_include))
c45da1ca
ZW
909 fprintf (stderr, _("#include <...> search starts here:\n"));
910 fprintf (stderr, " %s\n", l->name);
911 }
912 fprintf (stderr, _("End of search list.\n"));
913 }
914
ae79697b
ZW
915 if (CPP_OPTION (pfile, in_fname) == NULL
916 || *CPP_OPTION (pfile, in_fname) == 0)
6de1e2a9 917 {
ae79697b
ZW
918 CPP_OPTION (pfile, in_fname) = fname;
919 if (CPP_OPTION (pfile, in_fname) == NULL)
920 CPP_OPTION (pfile, in_fname) = "";
6de1e2a9 921 }
ae79697b
ZW
922 if (CPP_OPTION (pfile, out_fname) == NULL)
923 CPP_OPTION (pfile, out_fname) = "";
6de1e2a9 924
96302433 925 if (CPP_OPTION (pfile, print_deps))
7855db7c
JJ
926 /* Set the default target (if there is none already). */
927 deps_add_default_target (pfile->deps, CPP_OPTION (pfile, in_fname));
96302433
NB
928
929 /* Open the main input file. This must be done early, so we have a
930 buffer to stand on. */
614c7d37 931 if (!_cpp_read_file (pfile, fname))
c45da1ca
ZW
932 return 0;
933
05e81724
NB
934 /* If already preprocessed, don't install __LINE__, etc., and ignore
935 command line definitions and assertions. Handle -U's, -D's and
936 -A's in the order they were seen. */
937 if (! CPP_OPTION (pfile, preprocessed))
938 init_builtins (pfile);
6de1e2a9 939
ae79697b 940 p = CPP_OPTION (pfile, pending)->directive_head;
0b22d65c 941 while (p)
6de1e2a9 942 {
05e81724
NB
943 if (! CPP_OPTION (pfile, preprocessed))
944 (*p->handler) (pfile, p->arg);
0b22d65c
ZW
945 q = p->next;
946 free (p);
947 p = q;
6de1e2a9 948 }
05e81724 949
ae79697b 950 pfile->done_initializing = 1;
041c3194 951
6de1e2a9 952 /* The -imacros files can be scanned now, but the -include files
4a58aab6
NB
953 have to be pushed onto the buffer stack and processed later,
954 otherwise cppmain.c won't see the tokens. include_head was built
955 up as a stack, and popping this stack onto the buffer stack means
956 we preserve the order of the command line. */
957 do_includes (pfile, CPP_OPTION (pfile, pending)->imacros_head, 1);
958 do_includes (pfile, CPP_OPTION (pfile, pending)->include_head, 0);
6de1e2a9 959
ae79697b
ZW
960 free (CPP_OPTION (pfile, pending));
961 CPP_OPTION (pfile, pending) = NULL;
6de1e2a9
ZW
962
963 return 1;
964}
965
2f638f96 966/* Use mkdeps.c to output dependency information. */
7ca3d2b1
NB
967static void
968output_deps (pfile)
969 cpp_reader *pfile;
970{
971 /* Stream on which to print the dependency information. */
972 FILE *deps_stream = 0;
973 const char *deps_mode = CPP_OPTION (pfile, print_deps_append) ? "a" : "w";
974
975 if (CPP_OPTION (pfile, deps_file) == 0)
976 deps_stream = stdout;
977 else
978 {
979 deps_stream = fopen (CPP_OPTION (pfile, deps_file), deps_mode);
980 if (deps_stream == 0)
981 {
982 cpp_notice_from_errno (pfile, CPP_OPTION (pfile, deps_file));
983 return;
984 }
985 }
986
987 deps_write (pfile->deps, deps_stream, 72);
988
989 if (CPP_OPTION (pfile, deps_phony_targets))
990 deps_phony_targets (pfile->deps, deps_stream);
991
992 /* Don't close stdout. */
993 if (CPP_OPTION (pfile, deps_file))
994 {
995 if (ferror (deps_stream) || fclose (deps_stream) != 0)
996 cpp_fatal (pfile, "I/O error on output");
997 }
998}
999
6de1e2a9
ZW
1000/* This is called at the end of preprocessing. It pops the
1001 last buffer and writes dependency output. It should also
1002 clear macro definitions, such that you could call cpp_start_read
4a58aab6 1003 with a new filename to restart processing. */
6de1e2a9 1004void
93c80368 1005cpp_finish (pfile)
6de1e2a9
ZW
1006 cpp_reader *pfile;
1007{
f2d5f0cc
ZW
1008 if (CPP_BUFFER (pfile))
1009 {
1010 cpp_ice (pfile, "buffers still stacked in cpp_finish");
1011 while (CPP_BUFFER (pfile))
1012 cpp_pop_buffer (pfile);
1013 }
c1212d2f 1014
49e6c08e 1015 /* Don't write the deps file if preprocessing has failed. */
ae79697b 1016 if (CPP_OPTION (pfile, print_deps) && pfile->errors == 0)
7ca3d2b1 1017 output_deps (pfile);
3caee4a8 1018
d4506961
ZW
1019 /* Report on headers that could use multiple include guards. */
1020 if (CPP_OPTION (pfile, print_include_names))
c71f835b 1021 _cpp_report_missing_guards (pfile);
6de1e2a9
ZW
1022}
1023
223dca6a 1024static void
ae79697b
ZW
1025new_pending_directive (pend, text, handler)
1026 struct cpp_pending *pend;
223dca6a 1027 const char *text;
40eac643 1028 cl_directive_handler handler;
223dca6a
RH
1029{
1030 struct pending_option *o = (struct pending_option *)
1031 xmalloc (sizeof (struct pending_option));
1032
7ceb3598 1033 o->arg = text;
223dca6a 1034 o->next = NULL;
40eac643 1035 o->handler = handler;
ae79697b 1036 APPEND (pend, directive, o);
223dca6a
RH
1037}
1038
ae79697b
ZW
1039/* Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string");
1040 I.e. a const string initializer with parens around it. That is
1041 what N_("string") resolves to, so we make no_* be macros instead. */
1042#define no_arg N_("Argument missing after %s")
1043#define no_ass N_("Assertion missing after %s")
1044#define no_dir N_("Directory name missing after %s")
1045#define no_fil N_("File name missing after %s")
1046#define no_mac N_("Macro name missing after %s")
1047#define no_pth N_("Path name missing after %s")
6ab3e7dd 1048#define no_num N_("Number missing after %s")
03b9ab42 1049#define no_tgt N_("Target missing after %s")
ae79697b
ZW
1050
1051/* This is the list of all command line options, with the leading
1052 "-" removed. It must be sorted in ASCII collating order. */
1053#define COMMAND_LINE_OPTIONS \
1054 DEF_OPT("", 0, OPT_stdin_stdout) \
1055 DEF_OPT("$", 0, OPT_dollar) \
1056 DEF_OPT("+", 0, OPT_plus) \
1057 DEF_OPT("-help", 0, OPT__help) \
91606ce2 1058 DEF_OPT("-target-help", 0, OPT_target__help) \
ae79697b
ZW
1059 DEF_OPT("-version", 0, OPT__version) \
1060 DEF_OPT("A", no_ass, OPT_A) \
1061 DEF_OPT("C", 0, OPT_C) \
1062 DEF_OPT("D", no_mac, OPT_D) \
1063 DEF_OPT("H", 0, OPT_H) \
1064 DEF_OPT("I", no_dir, OPT_I) \
1065 DEF_OPT("M", 0, OPT_M) \
e582248c 1066 DEF_OPT("MD", no_fil, OPT_MD) \
96302433 1067 DEF_OPT("MF", no_fil, OPT_MF) \
ae79697b
ZW
1068 DEF_OPT("MG", 0, OPT_MG) \
1069 DEF_OPT("MM", 0, OPT_MM) \
e582248c 1070 DEF_OPT("MMD", no_fil, OPT_MMD) \
a5a4ce3c 1071 DEF_OPT("MP", 0, OPT_MP) \
f7114e17 1072 DEF_OPT("MQ", no_tgt, OPT_MQ) \
03b9ab42 1073 DEF_OPT("MT", no_tgt, OPT_MT) \
ae79697b
ZW
1074 DEF_OPT("P", 0, OPT_P) \
1075 DEF_OPT("U", no_mac, OPT_U) \
1076 DEF_OPT("W", no_arg, OPT_W) /* arg optional */ \
1077 DEF_OPT("d", no_arg, OPT_d) \
1078 DEF_OPT("fleading-underscore", 0, OPT_fleading_underscore) \
1079 DEF_OPT("fno-leading-underscore", 0, OPT_fno_leading_underscore) \
be768055 1080 DEF_OPT("fno-operator-names", 0, OPT_fno_operator_names) \
ae79697b
ZW
1081 DEF_OPT("fno-preprocessed", 0, OPT_fno_preprocessed) \
1082 DEF_OPT("fno-show-column", 0, OPT_fno_show_column) \
1083 DEF_OPT("fpreprocessed", 0, OPT_fpreprocessed) \
1084 DEF_OPT("fshow-column", 0, OPT_fshow_column) \
6ab3e7dd 1085 DEF_OPT("ftabstop=", no_num, OPT_ftabstop) \
ae79697b
ZW
1086 DEF_OPT("h", 0, OPT_h) \
1087 DEF_OPT("idirafter", no_dir, OPT_idirafter) \
1088 DEF_OPT("imacros", no_fil, OPT_imacros) \
1089 DEF_OPT("include", no_fil, OPT_include) \
1090 DEF_OPT("iprefix", no_pth, OPT_iprefix) \
1091 DEF_OPT("isystem", no_dir, OPT_isystem) \
1092 DEF_OPT("iwithprefix", no_dir, OPT_iwithprefix) \
1093 DEF_OPT("iwithprefixbefore", no_dir, OPT_iwithprefixbefore) \
1094 DEF_OPT("lang-asm", 0, OPT_lang_asm) \
1095 DEF_OPT("lang-c", 0, OPT_lang_c) \
1096 DEF_OPT("lang-c++", 0, OPT_lang_cplusplus) \
1097 DEF_OPT("lang-c89", 0, OPT_lang_c89) \
ae79697b
ZW
1098 DEF_OPT("lang-objc", 0, OPT_lang_objc) \
1099 DEF_OPT("lang-objc++", 0, OPT_lang_objcplusplus) \
1100 DEF_OPT("nostdinc", 0, OPT_nostdinc) \
1101 DEF_OPT("nostdinc++", 0, OPT_nostdincplusplus) \
1102 DEF_OPT("o", no_fil, OPT_o) \
1103 DEF_OPT("pedantic", 0, OPT_pedantic) \
1104 DEF_OPT("pedantic-errors", 0, OPT_pedantic_errors) \
1105 DEF_OPT("remap", 0, OPT_remap) \
dd07b884 1106 DEF_OPT("std=c++98", 0, OPT_std_cplusplus98) \
ae79697b
ZW
1107 DEF_OPT("std=c89", 0, OPT_std_c89) \
1108 DEF_OPT("std=c99", 0, OPT_std_c99) \
1109 DEF_OPT("std=c9x", 0, OPT_std_c9x) \
1110 DEF_OPT("std=gnu89", 0, OPT_std_gnu89) \
1111 DEF_OPT("std=gnu99", 0, OPT_std_gnu99) \
1112 DEF_OPT("std=gnu9x", 0, OPT_std_gnu9x) \
1113 DEF_OPT("std=iso9899:1990", 0, OPT_std_iso9899_1990) \
1114 DEF_OPT("std=iso9899:199409", 0, OPT_std_iso9899_199409) \
1115 DEF_OPT("std=iso9899:1999", 0, OPT_std_iso9899_1999) \
1116 DEF_OPT("std=iso9899:199x", 0, OPT_std_iso9899_199x) \
ae79697b
ZW
1117 DEF_OPT("trigraphs", 0, OPT_trigraphs) \
1118 DEF_OPT("v", 0, OPT_v) \
f4cdc368 1119 DEF_OPT("version", 0, OPT_version) \
ae79697b
ZW
1120 DEF_OPT("w", 0, OPT_w)
1121
1122#define DEF_OPT(text, msg, code) code,
e23c0ba3
ZW
1123enum opt_code
1124{
ae79697b 1125 COMMAND_LINE_OPTIONS
e23c0ba3
ZW
1126 N_OPTS
1127};
ae79697b 1128#undef DEF_OPT
e23c0ba3
ZW
1129
1130struct cl_option
1131{
1132 const char *opt_text;
1133 const char *msg;
1134 size_t opt_len;
1135 enum opt_code opt_code;
1136};
1137
ae79697b 1138#define DEF_OPT(text, msg, code) { text, msg, sizeof(text) - 1, code },
e23c0ba3
ZW
1139#ifdef HOST_EBCDIC
1140static struct cl_option cl_options[] =
1141#else
1142static const struct cl_option cl_options[] =
1143#endif
1144{
ae79697b 1145 COMMAND_LINE_OPTIONS
e23c0ba3
ZW
1146};
1147#undef DEF_OPT
ae79697b 1148#undef COMMAND_LINE_OPTIONS
e23c0ba3
ZW
1149
1150/* Perform a binary search to find which, if any, option the given
1151 command-line matches. Returns its index in the option array,
1152 negative on failure. Complications arise since some options can be
1153 suffixed with an argument, and multiple complete matches can occur,
05e81724
NB
1154 e.g. -iwithprefix and -iwithprefixbefore. Moreover, we need to
1155 accept options beginning with -W that we do not recognise, but not
1156 to swallow any subsequent command line argument; this is handled as
1157 special cases in cpp_handle_option. */
e23c0ba3
ZW
1158static int
1159parse_option (input)
1160 const char *input;
1161{
1162 unsigned int md, mn, mx;
1163 size_t opt_len;
1164 int comp;
1165
1166 mn = 0;
1167 mx = N_OPTS;
1168
1169 while (mx > mn)
1170 {
1171 md = (mn + mx) / 2;
ae79697b 1172
e23c0ba3 1173 opt_len = cl_options[md].opt_len;
61d0346d 1174 comp = memcmp (input, cl_options[md].opt_text, opt_len);
ae79697b 1175
e23c0ba3
ZW
1176 if (comp > 0)
1177 mn = md + 1;
1178 else if (comp < 0)
1179 mx = md;
1180 else
1181 {
1182 if (input[opt_len] == '\0')
1183 return md;
1184 /* We were passed more text. If the option takes an argument,
1185 we may match a later option or we may have been passed the
1186 argument. The longest possible option match succeeds.
1187 If the option takes no arguments we have not matched and
4a58aab6 1188 continue the search (e.g. input="stdc++" match was "stdc"). */
e23c0ba3
ZW
1189 mn = md + 1;
1190 if (cl_options[md].msg)
1191 {
1192 /* Scan forwards. If we get an exact match, return it.
1193 Otherwise, return the longest option-accepting match.
4a58aab6 1194 This loops no more than twice with current options. */
e23c0ba3
ZW
1195 mx = md;
1196 for (; mn < N_OPTS; mn++)
1197 {
1198 opt_len = cl_options[mn].opt_len;
61d0346d 1199 if (memcmp (input, cl_options[mn].opt_text, opt_len))
e23c0ba3
ZW
1200 break;
1201 if (input[opt_len] == '\0')
1202 return mn;
1203 if (cl_options[mn].msg)
1204 mx = mn;
1205 }
1206 return mx;
1207 }
1208 }
1209 }
1210
1211 return -1;
1212}
1213
6de1e2a9
ZW
1214/* Handle one command-line option in (argc, argv).
1215 Can be called multiple times, to handle multiple sets of options.
1216 Returns number of strings consumed. */
c8d8ed65 1217
2c0accc9
ZW
1218int
1219cpp_handle_option (pfile, argc, argv)
6de1e2a9
ZW
1220 cpp_reader *pfile;
1221 int argc;
1222 char **argv;
1223{
6de1e2a9 1224 int i = 0;
f8f769ea 1225 struct cpp_pending *pend = CPP_OPTION (pfile, pending);
6de1e2a9 1226
0b22d65c
ZW
1227 if (argv[i][0] != '-')
1228 {
ae79697b
ZW
1229 if (CPP_OPTION (pfile, out_fname) != NULL)
1230 cpp_fatal (pfile, "Too many arguments. Type %s --help for usage info",
1231 progname);
1232 else if (CPP_OPTION (pfile, in_fname) != NULL)
1233 CPP_OPTION (pfile, out_fname) = argv[i];
0b22d65c 1234 else
ae79697b 1235 CPP_OPTION (pfile, in_fname) = argv[i];
0b22d65c
ZW
1236 }
1237 else
e23c0ba3
ZW
1238 {
1239 enum opt_code opt_code;
1240 int opt_index;
7ceb3598 1241 const char *arg = 0;
e23c0ba3 1242
4a58aab6 1243 /* Skip over '-'. */
e23c0ba3
ZW
1244 opt_index = parse_option (&argv[i][1]);
1245 if (opt_index < 0)
1246 return i;
1247
1248 opt_code = cl_options[opt_index].opt_code;
1249 if (cl_options[opt_index].msg)
1250 {
1251 arg = &argv[i][cl_options[opt_index].opt_len + 1];
1252
5c5d1ea0 1253 /* Yuk. Special case for -W as it must not swallow
e23c0ba3 1254 up any following argument. If this becomes common, add
4a58aab6 1255 another field to the cl_options table. */
5c5d1ea0 1256 if (arg[0] == '\0' && opt_code != OPT_W)
e23c0ba3
ZW
1257 {
1258 arg = argv[++i];
1259 if (!arg)
1260 {
d88b89e5 1261 cpp_fatal (pfile, cl_options[opt_index].msg, argv[i - 1]);
e23c0ba3
ZW
1262 return argc;
1263 }
1264 }
1265 }
ae79697b 1266
e23c0ba3
ZW
1267 switch (opt_code)
1268 {
4a58aab6 1269 case N_OPTS: /* Shut GCC up. */
e23c0ba3
ZW
1270 break;
1271 case OPT_fleading_underscore:
771c4df3 1272 CPP_OPTION (pfile, user_label_prefix) = "_";
e23c0ba3
ZW
1273 break;
1274 case OPT_fno_leading_underscore:
771c4df3 1275 CPP_OPTION (pfile, user_label_prefix) = "";
e23c0ba3 1276 break;
be768055
JJ
1277 case OPT_fno_operator_names:
1278 CPP_OPTION (pfile, operator_names) = 0;
1279 break;
e23c0ba3 1280 case OPT_fpreprocessed:
ae79697b 1281 CPP_OPTION (pfile, preprocessed) = 1;
e23c0ba3
ZW
1282 break;
1283 case OPT_fno_preprocessed:
ae79697b
ZW
1284 CPP_OPTION (pfile, preprocessed) = 0;
1285 break;
1286 case OPT_fshow_column:
1287 CPP_OPTION (pfile, show_column) = 1;
1288 break;
1289 case OPT_fno_show_column:
1290 CPP_OPTION (pfile, show_column) = 0;
e23c0ba3 1291 break;
6ab3e7dd
NB
1292 case OPT_ftabstop:
1293 /* Silently ignore empty string, non-longs and silly values. */
1294 if (arg[0] != '\0')
1295 {
1296 char *endptr;
1297 long tabstop = strtol (arg, &endptr, 10);
1298 if (*endptr == '\0' && tabstop >= 1 && tabstop <= 100)
1299 CPP_OPTION (pfile, tabstop) = tabstop;
1300 }
1301 break;
e23c0ba3 1302 case OPT_w:
ae79697b 1303 CPP_OPTION (pfile, inhibit_warnings) = 1;
e23c0ba3 1304 break;
e23c0ba3
ZW
1305 case OPT_h:
1306 case OPT__help:
1307 print_help ();
7e96d768 1308 CPP_OPTION (pfile, help_only) = 1;
e23c0ba3 1309 break;
91606ce2 1310 case OPT_target__help:
f4cdc368
ZW
1311 /* Print if any target specific options. cpplib has none, but
1312 make sure help_only gets set. */
7e96d768 1313 CPP_OPTION (pfile, help_only) = 1;
91606ce2 1314 break;
f4cdc368
ZW
1315
1316 /* --version inhibits compilation, -version doesn't. -v means
1317 verbose and -version. Historical reasons, don't ask. */
e23c0ba3 1318 case OPT__version:
7e96d768 1319 CPP_OPTION (pfile, help_only) = 1;
f4cdc368
ZW
1320 goto version;
1321 case OPT_v:
1322 CPP_OPTION (pfile, verbose) = 1;
1323 goto version;
1324
1325 case OPT_version:
1326 version:
1327 fprintf (stderr, _("GNU CPP version %s (cpplib)"), version_string);
1328#ifdef TARGET_VERSION
1329 TARGET_VERSION;
1330#endif
1331 fputc ('\n', stderr);
e23c0ba3 1332 break;
f4cdc368 1333
e23c0ba3 1334 case OPT_C:
ae79697b 1335 CPP_OPTION (pfile, discard_comments) = 0;
e23c0ba3
ZW
1336 break;
1337 case OPT_P:
ae79697b 1338 CPP_OPTION (pfile, no_line_commands) = 1;
e23c0ba3 1339 break;
4a58aab6 1340 case OPT_dollar: /* Don't include $ in identifiers. */
ae79697b 1341 CPP_OPTION (pfile, dollars_in_ident) = 0;
e23c0ba3
ZW
1342 break;
1343 case OPT_H:
ae79697b 1344 CPP_OPTION (pfile, print_include_names) = 1;
e23c0ba3
ZW
1345 break;
1346 case OPT_D:
f8f769ea 1347 new_pending_directive (pend, arg, cpp_define);
e23c0ba3
ZW
1348 break;
1349 case OPT_pedantic_errors:
ae79697b 1350 CPP_OPTION (pfile, pedantic_errors) = 1;
e23c0ba3
ZW
1351 /* fall through */
1352 case OPT_pedantic:
ae79697b 1353 CPP_OPTION (pfile, pedantic) = 1;
e23c0ba3 1354 break;
e23c0ba3 1355 case OPT_trigraphs:
ae79697b 1356 CPP_OPTION (pfile, trigraphs) = 1;
e23c0ba3
ZW
1357 break;
1358 case OPT_plus:
ae79697b
ZW
1359 CPP_OPTION (pfile, cplusplus) = 1;
1360 CPP_OPTION (pfile, cplusplus_comments) = 1;
e23c0ba3
ZW
1361 break;
1362 case OPT_remap:
ae79697b 1363 CPP_OPTION (pfile, remap) = 1;
e23c0ba3
ZW
1364 break;
1365 case OPT_iprefix:
ae79697b
ZW
1366 CPP_OPTION (pfile, include_prefix) = arg;
1367 CPP_OPTION (pfile, include_prefix_len) = strlen (arg);
e23c0ba3
ZW
1368 break;
1369 case OPT_lang_c:
dd07b884 1370 set_lang (pfile, CLK_GNUC89);
e23c0ba3 1371 break;
e23c0ba3 1372 case OPT_lang_cplusplus:
dd07b884 1373 set_lang (pfile, CLK_GNUCXX);
e23c0ba3 1374 break;
f8f769ea 1375 case OPT_lang_objc:
dd07b884 1376 set_lang (pfile, CLK_OBJC);
e23c0ba3 1377 break;
dd07b884
NB
1378 case OPT_lang_objcplusplus:
1379 set_lang (pfile, CLK_OBJCXX);
e23c0ba3 1380 break;
dd07b884
NB
1381 case OPT_lang_asm:
1382 set_lang (pfile, CLK_ASM);
e23c0ba3 1383 break;
dd07b884
NB
1384 case OPT_std_cplusplus98:
1385 set_lang (pfile, CLK_CXX98);
e23c0ba3
ZW
1386 break;
1387 case OPT_std_gnu89:
dd07b884 1388 set_lang (pfile, CLK_GNUC89);
e23c0ba3
ZW
1389 break;
1390 case OPT_std_gnu9x:
1391 case OPT_std_gnu99:
dd07b884 1392 set_lang (pfile, CLK_GNUC99);
e23c0ba3
ZW
1393 break;
1394 case OPT_std_iso9899_199409:
dd07b884
NB
1395 set_lang (pfile, CLK_STDC94);
1396 break;
e23c0ba3
ZW
1397 case OPT_std_iso9899_1990:
1398 case OPT_std_c89:
9b55f29a 1399 case OPT_lang_c89:
dd07b884 1400 set_lang (pfile, CLK_STDC89);
e23c0ba3
ZW
1401 break;
1402 case OPT_std_iso9899_199x:
1403 case OPT_std_iso9899_1999:
1404 case OPT_std_c9x:
1405 case OPT_std_c99:
dd07b884
NB
1406 set_lang (pfile, CLK_STDC99);
1407 break;
1408 case OPT_nostdinc:
1409 /* -nostdinc causes no default include directories.
1410 You must specify all include-file directories with -I. */
1411 CPP_OPTION (pfile, no_standard_includes) = 1;
1412 break;
1413 case OPT_nostdincplusplus:
1414 /* -nostdinc++ causes no default C++-specific include directories. */
1415 CPP_OPTION (pfile, no_standard_cplusplus_includes) = 1;
e23c0ba3
ZW
1416 break;
1417 case OPT_o:
ae79697b 1418 if (CPP_OPTION (pfile, out_fname) != NULL)
0b22d65c 1419 {
e23c0ba3
ZW
1420 cpp_fatal (pfile, "Output filename specified twice");
1421 return argc;
1422 }
ae79697b
ZW
1423 CPP_OPTION (pfile, out_fname) = arg;
1424 if (!strcmp (CPP_OPTION (pfile, out_fname), "-"))
1425 CPP_OPTION (pfile, out_fname) = "";
e23c0ba3 1426 break;
e23c0ba3 1427 case OPT_stdin_stdout:
4a58aab6 1428 /* JF handle '-' as file name meaning stdin or stdout. */
ae79697b
ZW
1429 if (CPP_OPTION (pfile, in_fname) == NULL)
1430 CPP_OPTION (pfile, in_fname) = "";
1431 else if (CPP_OPTION (pfile, out_fname) == NULL)
1432 CPP_OPTION (pfile, out_fname) = "";
e23c0ba3
ZW
1433 break;
1434 case OPT_d:
1435 /* Args to -d specify what parts of macros to dump.
1436 Silently ignore unrecognised options; they may
4a58aab6 1437 be aimed at the compiler proper. */
e23c0ba3
ZW
1438 {
1439 char c;
ae79697b 1440
e23c0ba3
ZW
1441 while ((c = *arg++) != '\0')
1442 switch (c)
1443 {
1444 case 'M':
ae79697b
ZW
1445 CPP_OPTION (pfile, dump_macros) = dump_only;
1446 CPP_OPTION (pfile, no_output) = 1;
0b22d65c
ZW
1447 break;
1448 case 'N':
ae79697b 1449 CPP_OPTION (pfile, dump_macros) = dump_names;
0b22d65c
ZW
1450 break;
1451 case 'D':
ae79697b 1452 CPP_OPTION (pfile, dump_macros) = dump_definitions;
0b22d65c
ZW
1453 break;
1454 case 'I':
ae79697b 1455 CPP_OPTION (pfile, dump_includes) = 1;
0b22d65c
ZW
1456 break;
1457 }
e23c0ba3
ZW
1458 }
1459 break;
96302433 1460
e23c0ba3 1461 case OPT_MG:
ae79697b 1462 CPP_OPTION (pfile, print_deps_missing_files) = 1;
e23c0ba3
ZW
1463 break;
1464 case OPT_M:
96302433
NB
1465 CPP_OPTION (pfile, print_deps) = 2;
1466 break;
e23c0ba3 1467 case OPT_MM:
96302433 1468 CPP_OPTION (pfile, print_deps) = 1;
e23c0ba3 1469 break;
96302433
NB
1470 case OPT_MF:
1471 CPP_OPTION (pfile, deps_file) = arg;
1472 break;
1473 case OPT_MP:
a5a4ce3c
NB
1474 CPP_OPTION (pfile, deps_phony_targets) = 1;
1475 break;
f7114e17 1476 case OPT_MQ:
03b9ab42 1477 case OPT_MT:
f7114e17
NB
1478 /* Add a target. -MQ quotes for Make. */
1479 deps_add_target (pfile->deps, arg, opt_code == OPT_MQ);
03b9ab42
NB
1480 break;
1481
e582248c
NB
1482 /* -MD and -MMD for cpp0 are deprecated and undocumented
1483 (use -M or -MM with -MF instead), and probably should be
1484 removed with the next major GCC version. For the moment
1485 we allow these for the benefit of Automake 1.4, which
1486 uses these when dependency tracking is enabled. Automake
1487 1.5 will fix this. */
1488 case OPT_MD:
1489 CPP_OPTION (pfile, print_deps) = 2;
1490 CPP_OPTION (pfile, deps_file) = arg;
1491 break;
1492 case OPT_MMD:
1493 CPP_OPTION (pfile, print_deps) = 1;
1494 CPP_OPTION (pfile, deps_file) = arg;
1495 break;
1496
e23c0ba3 1497 case OPT_A:
e1e97c4f 1498 if (arg[0] == '-')
0b22d65c 1499 {
e1e97c4f
NB
1500 /* -A with an argument beginning with '-' acts as
1501 #unassert on whatever immediately follows the '-'.
1502 If "-" is the whole argument, we eliminate all
1503 predefined macros and assertions, including those
1504 that were specified earlier on the command line.
1505 That way we can get rid of any that were passed
1506 automatically in from GCC. */
1507
1508 if (arg[1] == '\0')
0b22d65c 1509 {
e1e97c4f
NB
1510 struct pending_option *o1, *o2;
1511
e33f6253 1512 o1 = pend->directive_head;
e1e97c4f
NB
1513 while (o1)
1514 {
1515 o2 = o1->next;
1516 free (o1);
1517 o1 = o2;
1518 }
e33f6253
NB
1519 pend->directive_head = NULL;
1520 pend->directive_tail = NULL;
0b22d65c 1521 }
e1e97c4f 1522 else
e33f6253 1523 new_pending_directive (pend, arg + 1, cpp_unassert);
6de1e2a9 1524 }
e1e97c4f 1525 else
e33f6253 1526 new_pending_directive (pend, arg, cpp_assert);
e23c0ba3
ZW
1527 break;
1528 case OPT_U:
e33f6253 1529 new_pending_directive (pend, arg, cpp_undef);
e23c0ba3
ZW
1530 break;
1531 case OPT_I: /* Add directory to path for includes. */
1532 if (!strcmp (arg, "-"))
1533 {
1534 /* -I- means:
1535 Use the preceding -I directories for #include "..."
1536 but not #include <...>.
1537 Don't search the directory of the present file
1538 for #include "...". (Note that -I. -I- is not the same as
1539 the default setup; -I. uses the compiler's working dir.) */
ae79697b 1540 if (! CPP_OPTION (pfile, ignore_srcdir))
e23c0ba3 1541 {
ae79697b
ZW
1542 pend->quote_head = pend->brack_head;
1543 pend->quote_tail = pend->brack_tail;
1544 pend->brack_head = 0;
1545 pend->brack_tail = 0;
1546 CPP_OPTION (pfile, ignore_srcdir) = 1;
e23c0ba3
ZW
1547 }
1548 else
1549 {
1550 cpp_fatal (pfile, "-I- specified twice");
1551 return argc;
1552 }
1553 }
1554 else
e33f6253 1555 append_include_chain (pfile, xstrdup (arg), BRACKET, 0);
e23c0ba3
ZW
1556 break;
1557 case OPT_isystem:
1558 /* Add directory to beginning of system include path, as a system
4a58aab6 1559 include directory. */
e33f6253 1560 append_include_chain (pfile, xstrdup (arg), SYSTEM, 0);
e23c0ba3
ZW
1561 break;
1562 case OPT_include:
1563 {
1564 struct pending_option *o = (struct pending_option *)
1565 xmalloc (sizeof (struct pending_option));
1566 o->arg = arg;
1567
1568 /* This list has to be built in reverse order so that
1569 when cpp_start_read pushes all the -include files onto
1570 the buffer stack, they will be scanned in forward order. */
e33f6253
NB
1571 o->next = pend->include_head;
1572 pend->include_head = o;
e23c0ba3
ZW
1573 }
1574 break;
1575 case OPT_imacros:
1576 {
1577 struct pending_option *o = (struct pending_option *)
1578 xmalloc (sizeof (struct pending_option));
1579 o->arg = arg;
1580 o->next = NULL;
ae79697b 1581
e33f6253 1582 APPEND (pend, imacros, o);
e23c0ba3
ZW
1583 }
1584 break;
1585 case OPT_iwithprefix:
1586 /* Add directory to end of path for includes,
1587 with the default prefix at the front of its name. */
1588 /* fall through */
1589 case OPT_iwithprefixbefore:
1590 /* Add directory to main path for includes,
1591 with the default prefix at the front of its name. */
1592 {
1593 char *fname;
1594 int len;
ae79697b 1595
e23c0ba3 1596 len = strlen (arg);
ae79697b
ZW
1597
1598 if (CPP_OPTION (pfile, include_prefix) != 0)
e23c0ba3 1599 {
ae79697b
ZW
1600 size_t ipl = CPP_OPTION (pfile, include_prefix_len);
1601 fname = xmalloc (ipl + len + 1);
1602 memcpy (fname, CPP_OPTION (pfile, include_prefix), ipl);
1603 memcpy (fname + ipl, arg, len + 1);
e23c0ba3 1604 }
60893f43 1605 else if (cpp_GCC_INCLUDE_DIR_len)
e23c0ba3 1606 {
60893f43
ZW
1607 fname = xmalloc (cpp_GCC_INCLUDE_DIR_len + len + 1);
1608 memcpy (fname, cpp_GCC_INCLUDE_DIR, cpp_GCC_INCLUDE_DIR_len);
1609 memcpy (fname + cpp_GCC_INCLUDE_DIR_len, arg, len + 1);
e23c0ba3 1610 }
60893f43
ZW
1611 else
1612 fname = xstrdup (arg);
ae79697b 1613
e33f6253 1614 append_include_chain (pfile, fname,
e23c0ba3
ZW
1615 opt_code == OPT_iwithprefix ? SYSTEM: BRACKET, 0);
1616 }
1617 break;
1618 case OPT_idirafter:
1619 /* Add directory to end of path for includes. */
e33f6253 1620 append_include_chain (pfile, xstrdup (arg), AFTER, 0);
e23c0ba3
ZW
1621 break;
1622 case OPT_W:
4a58aab6 1623 /* Silently ignore unrecognised options. */
e23c0ba3 1624 if (!strcmp (argv[i], "-Wall"))
0b22d65c 1625 {
ae79697b
ZW
1626 CPP_OPTION (pfile, warn_trigraphs) = 1;
1627 CPP_OPTION (pfile, warn_comments) = 1;
0b22d65c 1628 }
e23c0ba3 1629 else if (!strcmp (argv[i], "-Wtraditional"))
07aa0b04 1630 CPP_OPTION (pfile, warn_traditional) = 1;
e23c0ba3 1631 else if (!strcmp (argv[i], "-Wtrigraphs"))
ae79697b 1632 CPP_OPTION (pfile, warn_trigraphs) = 1;
e23c0ba3 1633 else if (!strcmp (argv[i], "-Wcomment"))
ae79697b 1634 CPP_OPTION (pfile, warn_comments) = 1;
e23c0ba3 1635 else if (!strcmp (argv[i], "-Wcomments"))
ae79697b 1636 CPP_OPTION (pfile, warn_comments) = 1;
e23c0ba3 1637 else if (!strcmp (argv[i], "-Wundef"))
ae79697b 1638 CPP_OPTION (pfile, warn_undef) = 1;
e23c0ba3 1639 else if (!strcmp (argv[i], "-Wimport"))
ae79697b 1640 CPP_OPTION (pfile, warn_import) = 1;
e23c0ba3 1641 else if (!strcmp (argv[i], "-Werror"))
ae79697b 1642 CPP_OPTION (pfile, warnings_are_errors) = 1;
317639a8
BC
1643 else if (!strcmp (argv[i], "-Wsystem-headers"))
1644 CPP_OPTION (pfile, warn_system_headers) = 1;
e23c0ba3 1645 else if (!strcmp (argv[i], "-Wno-traditional"))
07aa0b04 1646 CPP_OPTION (pfile, warn_traditional) = 0;
e23c0ba3 1647 else if (!strcmp (argv[i], "-Wno-trigraphs"))
ae79697b 1648 CPP_OPTION (pfile, warn_trigraphs) = 0;
e23c0ba3 1649 else if (!strcmp (argv[i], "-Wno-comment"))
ae79697b 1650 CPP_OPTION (pfile, warn_comments) = 0;
e23c0ba3 1651 else if (!strcmp (argv[i], "-Wno-comments"))
ae79697b 1652 CPP_OPTION (pfile, warn_comments) = 0;
e23c0ba3 1653 else if (!strcmp (argv[i], "-Wno-undef"))
ae79697b 1654 CPP_OPTION (pfile, warn_undef) = 0;
e23c0ba3 1655 else if (!strcmp (argv[i], "-Wno-import"))
ae79697b 1656 CPP_OPTION (pfile, warn_import) = 0;
e23c0ba3 1657 else if (!strcmp (argv[i], "-Wno-error"))
ae79697b 1658 CPP_OPTION (pfile, warnings_are_errors) = 0;
317639a8
BC
1659 else if (!strcmp (argv[i], "-Wno-system-headers"))
1660 CPP_OPTION (pfile, warn_system_headers) = 0;
e23c0ba3
ZW
1661 break;
1662 }
1663 }
6de1e2a9 1664 return i + 1;
e23c0ba3 1665}
0b22d65c 1666
6de1e2a9
ZW
1667/* Handle command-line options in (argc, argv).
1668 Can be called multiple times, to handle multiple sets of options.
1669 Returns if an unrecognized option is seen.
1670 Returns number of strings consumed. */
6de1e2a9
ZW
1671int
1672cpp_handle_options (pfile, argc, argv)
1673 cpp_reader *pfile;
1674 int argc;
1675 char **argv;
1676{
1677 int i;
1678 int strings_processed;
e23c0ba3 1679
6de1e2a9
ZW
1680 for (i = 0; i < argc; i += strings_processed)
1681 {
2c0accc9 1682 strings_processed = cpp_handle_option (pfile, argc - i, argv + i);
6de1e2a9
ZW
1683 if (strings_processed == 0)
1684 break;
1685 }
96302433 1686
6de1e2a9
ZW
1687 return i;
1688}
1689
96302433
NB
1690/* Extra processing when all options are parsed, after all calls to
1691 cpp_handle_option[s]. Consistency checks etc. */
1692void
1693cpp_post_options (pfile)
1694 cpp_reader *pfile;
1695{
1696 /* -Wtraditional is not useful in C++ mode. */
1697 if (CPP_OPTION (pfile, cplusplus))
1698 CPP_OPTION (pfile, warn_traditional) = 0;
1699
1700 /* Set this if it hasn't been set already. */
1701 if (CPP_OPTION (pfile, user_label_prefix) == NULL)
1702 CPP_OPTION (pfile, user_label_prefix) = USER_LABEL_PREFIX;
1703
1704 /* We need to do this after option processing and before
1705 cpp_start_read, as cppmain.c relies on the options->no_output to
1706 set its callbacks correctly before calling cpp_start_read. */
1707 init_dependency_output (pfile);
1708
e582248c
NB
1709 /* After checking the environment variables, check if -M or -MM has
1710 not been specified, but other -M options have. */
1711 if (CPP_OPTION (pfile, print_deps) == 0 &&
1712 (CPP_OPTION (pfile, print_deps_missing_files)
1713 || CPP_OPTION (pfile, deps_file)
1714 || CPP_OPTION (pfile, deps_phony_targets)))
1715 cpp_fatal (pfile, "you must additionally specify either -M or -MM");
96302433
NB
1716}
1717
7ca3d2b1
NB
1718/* Set up dependency-file output. */
1719static void
1720init_dependency_output (pfile)
1721 cpp_reader *pfile;
1722{
1723 char *spec, *s, *output_file;
1724
1725 /* Either of two environment variables can specify output of deps.
1726 Its value is either "OUTPUT_FILE" or "OUTPUT_FILE DEPS_TARGET",
1727 where OUTPUT_FILE is the file to write deps info to
1728 and DEPS_TARGET is the target to mention in the deps. */
1729
1730 if (CPP_OPTION (pfile, print_deps) == 0)
1731 {
1732 spec = getenv ("DEPENDENCIES_OUTPUT");
1733 if (spec)
1734 CPP_OPTION (pfile, print_deps) = 1;
1735 else
1736 {
1737 spec = getenv ("SUNPRO_DEPENDENCIES");
1738 if (spec)
1739 CPP_OPTION (pfile, print_deps) = 2;
1740 else
1741 return;
1742 }
1743
1744 /* Find the space before the DEPS_TARGET, if there is one. */
1745 s = strchr (spec, ' ');
1746 if (s)
1747 {
1748 /* Let the caller perform MAKE quoting. */
1749 deps_add_target (pfile->deps, s + 1, 0);
1750 output_file = (char *) xmalloc (s - spec + 1);
1751 memcpy (output_file, spec, s - spec);
1752 output_file[s - spec] = 0;
1753 }
1754 else
1755 output_file = spec;
1756
96302433
NB
1757 /* Command line overrides environment variables. */
1758 if (CPP_OPTION (pfile, deps_file) == 0)
1759 CPP_OPTION (pfile, deps_file) = output_file;
7ca3d2b1
NB
1760 CPP_OPTION (pfile, print_deps_append) = 1;
1761 }
1762
e582248c
NB
1763 /* If dependencies go to standard output, or -MG is used, we should
1764 suppress output. The user may be requesting other stuff to
1765 stdout, with -dM, -v etc. We let them shoot themselves in the
1766 foot. */
1767 if (CPP_OPTION (pfile, deps_file) == 0
1768 || CPP_OPTION (pfile, print_deps_missing_files))
96302433 1769 CPP_OPTION (pfile, no_output) = 1;
7ca3d2b1
NB
1770}
1771
6de1e2a9
ZW
1772static void
1773print_help ()
1774{
c1212d2f 1775 fprintf (stderr, _("Usage: %s [switches] input output\n"), progname);
aaaf7848
DT
1776 /* To keep the lines from getting too long for some compilers, limit
1777 to about 500 characters (6 lines) per chunk. */
6de1e2a9
ZW
1778 fputs (_("\
1779Switches:\n\
1780 -include <file> Include the contents of <file> before other files\n\
1781 -imacros <file> Accept definition of macros in <file>\n\
1782 -iprefix <path> Specify <path> as a prefix for next two options\n\
1783 -iwithprefix <dir> Add <dir> to the end of the system include path\n\
1784 -iwithprefixbefore <dir> Add <dir> to the end of the main include path\n\
1785 -isystem <dir> Add <dir> to the start of the system include path\n\
aaaf7848
DT
1786"), stdout);
1787 fputs (_("\
6de1e2a9
ZW
1788 -idirafter <dir> Add <dir> to the end of the system include path\n\
1789 -I <dir> Add <dir> to the end of the main include path\n\
e23c0ba3 1790 -I- Fine-grained include path control; see info docs\n\
6de1e2a9
ZW
1791 -nostdinc Do not search system include directories\n\
1792 (dirs specified with -isystem will still be used)\n\
1793 -nostdinc++ Do not search system include directories for C++\n\
1794 -o <file> Put output into <file>\n\
aaaf7848
DT
1795"), stdout);
1796 fputs (_("\
041c3194 1797 -pedantic Issue all warnings demanded by strict ISO C\n\
e23c0ba3 1798 -pedantic-errors Issue -pedantic warnings as errors instead\n\
041c3194 1799 -trigraphs Support ISO C trigraphs\n\
6de1e2a9
ZW
1800 -lang-c Assume that the input sources are in C\n\
1801 -lang-c89 Assume that the input sources are in C89\n\
aaaf7848
DT
1802"), stdout);
1803 fputs (_("\
f9a0e96c 1804 -lang-c++ Assume that the input sources are in C++\n\
6de1e2a9
ZW
1805 -lang-objc Assume that the input sources are in ObjectiveC\n\
1806 -lang-objc++ Assume that the input sources are in ObjectiveC++\n\
1807 -lang-asm Assume that the input sources are in assembler\n\
aaaf7848
DT
1808"), stdout);
1809 fputs (_("\
6de1e2a9 1810 -std=<std name> Specify the conformance standard; one of:\n\
916269ab
UD
1811 gnu89, gnu99, c89, c99, iso9899:1990,\n\
1812 iso9899:199409, iso9899:1999\n\
6de1e2a9
ZW
1813 -+ Allow parsing of C++ style features\n\
1814 -w Inhibit warning messages\n\
1815 -Wtrigraphs Warn if trigraphs are encountered\n\
1816 -Wno-trigraphs Do not warn about trigraphs\n\
1817 -Wcomment{s} Warn if one comment starts inside another\n\
aaaf7848
DT
1818"), stdout);
1819 fputs (_("\
6de1e2a9 1820 -Wno-comment{s} Do not warn about comments\n\
f9a0e96c
ZW
1821 -Wtraditional Warn about features not present in traditional C\n\
1822 -Wno-traditional Do not warn about traditional C\n\
6de1e2a9
ZW
1823 -Wundef Warn if an undefined macro is used by #if\n\
1824 -Wno-undef Do not warn about testing undefined macros\n\
1825 -Wimport Warn about the use of the #import directive\n\
aaaf7848
DT
1826"), stdout);
1827 fputs (_("\
6de1e2a9
ZW
1828 -Wno-import Do not warn about the use of #import\n\
1829 -Werror Treat all warnings as errors\n\
1830 -Wno-error Do not treat warnings as errors\n\
317639a8
BC
1831 -Wsystem-headers Do not suppress warnings from system headers\n\
1832 -Wno-system-headers Suppress warnings from system headers\n\
6de1e2a9 1833 -Wall Enable all preprocessor warnings\n\
aaaf7848
DT
1834"), stdout);
1835 fputs (_("\
317639a8
BC
1836 -M Generate make dependencies\n\
1837 -MM As -M, but ignore system header files\n\
96302433 1838 -MF <file> Write dependency output to the given file\n\
6de1e2a9 1839 -MG Treat missing header file as generated files\n\
96302433
NB
1840"), stdout);
1841 fputs (_("\
1842 -MP Generate phony targets for all headers\n\
1843 -MQ <target> Add a MAKE-quoted target\n\
1844 -MT <target> Add an unquoted target\n\
aaaf7848
DT
1845"), stdout);
1846 fputs (_("\
317639a8
BC
1847 -D<macro> Define a <macro> with string '1' as its value\n\
1848 -D<macro>=<val> Define a <macro> with <val> as its value\n\
6de1e2a9 1849 -A<question> (<answer>) Assert the <answer> to <question>\n\
e1e97c4f 1850 -A-<question> (<answer>) Disable the <answer> to <question>\n\
6de1e2a9 1851 -U<macro> Undefine <macro> \n\
6de1e2a9 1852 -v Display the version number\n\
aaaf7848
DT
1853"), stdout);
1854 fputs (_("\
317639a8
BC
1855 -H Print the name of header files as they are used\n\
1856 -C Do not discard comments\n\
6de1e2a9
ZW
1857 -dM Display a list of macro definitions active at end\n\
1858 -dD Preserve macro definitions in output\n\
1859 -dN As -dD except that only the names are preserved\n\
1860 -dI Include #include directives in the output\n\
317639a8
BC
1861"), stdout);
1862 fputs (_("\
6ab3e7dd 1863 -ftabstop=<number> Distance between tab stops for column reporting\n\
6de1e2a9
ZW
1864 -P Do not generate #line directives\n\
1865 -$ Do not allow '$' in identifiers\n\
1866 -remap Remap file names when including files.\n\
e23c0ba3 1867 --version Display version information\n\
6de1e2a9
ZW
1868 -h or --help Display this information\n\
1869"), stdout);
1870}