]> gcc.gnu.org Git - gcc.git/blob - gcc/cppinit.c
Makefile.in (resource.o): Depend on except.h.
[gcc.git] / gcc / cppinit.c
1 /* CPP Library.
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
7
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
11 later version.
12
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.
17
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. */
21
22 #include "config.h"
23 #include "system.h"
24 #include "hashtab.h"
25 #include "cpplib.h"
26 #include "cpphash.h"
27 #include "output.h"
28 #include "prefix.h"
29 #include "intl.h"
30 #include "version.h"
31 #include "mkdeps.h"
32
33 /* Predefined symbols, built-in macros, and the default include path. */
34
35 #ifndef GET_ENV_PATH_LIST
36 #define GET_ENV_PATH_LIST(VAR,NAME) do { (VAR) = getenv (NAME); } while (0)
37 #endif
38
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
43 #define INO_T_EQ(a, b) (!memcmp (&(a), &(b), sizeof (a)))
44 #elif (defined _WIN32 && ! defined (_UWIN)) || defined __MSDOS__
45 #define INO_T_EQ(a, b) 0
46 #else
47 #define INO_T_EQ(a, b) ((a) == (b))
48 #endif
49
50 #ifndef STANDARD_INCLUDE_DIR
51 #define STANDARD_INCLUDE_DIR "/usr/include"
52 #endif
53
54 /* We let tm.h override the types used here, to handle trivial differences
55 such as the choice of unsigned int or long unsigned int for size_t.
56 When machines start needing nontrivial differences in the size type,
57 it would be best to do something here to figure out automatically
58 from other information what type to use. */
59
60 /* The string value for __SIZE_TYPE__. */
61
62 #ifndef SIZE_TYPE
63 #define SIZE_TYPE "long unsigned int"
64 #endif
65
66 /* The string value for __PTRDIFF_TYPE__. */
67
68 #ifndef PTRDIFF_TYPE
69 #define PTRDIFF_TYPE "long int"
70 #endif
71
72 /* The string value for __WCHAR_TYPE__. */
73
74 #ifndef WCHAR_TYPE
75 #define WCHAR_TYPE "int"
76 #endif
77
78 /* The string value for __USER_LABEL_PREFIX__ */
79
80 #ifndef USER_LABEL_PREFIX
81 #define USER_LABEL_PREFIX ""
82 #endif
83
84 /* The string value for __REGISTER_PREFIX__ */
85
86 #ifndef REGISTER_PREFIX
87 #define REGISTER_PREFIX ""
88 #endif
89
90 /* This is the default list of directories to search for include files.
91 It may be overridden by the various -I and -ixxx options.
92
93 #include "file" looks in the same directory as the current file,
94 then this list.
95 #include <file> just looks in this list.
96
97 All these directories are treated as `system' include directories
98 (they are not subject to pedantic warnings in some cases). */
99
100 struct default_include
101 {
102 const char *fname; /* The name of the directory. */
103 const char *component; /* The component containing the directory
104 (see update_path in prefix.c) */
105 int cplusplus; /* Only look here if we're compiling C++. */
106 int cxx_aware; /* Includes in this directory don't need to
107 be wrapped in extern "C" when compiling
108 C++. */
109 };
110
111 #ifndef STANDARD_INCLUDE_COMPONENT
112 #define STANDARD_INCLUDE_COMPONENT 0
113 #endif
114
115 #ifdef CROSS_COMPILE
116 #undef LOCAL_INCLUDE_DIR
117 #undef SYSTEM_INCLUDE_DIR
118 #undef STANDARD_INCLUDE_DIR
119 #else
120 #undef CROSS_INCLUDE_DIR
121 #endif
122
123 static const struct default_include include_defaults_array[]
124 #ifdef INCLUDE_DEFAULTS
125 = INCLUDE_DEFAULTS;
126 #else
127 = {
128 #ifdef GPLUSPLUS_INCLUDE_DIR
129 /* Pick up GNU C++ specific include files. */
130 { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 },
131 #endif
132 #ifdef LOCAL_INCLUDE_DIR
133 /* /usr/local/include comes before the fixincluded header files. */
134 { LOCAL_INCLUDE_DIR, 0, 0, 1 },
135 #endif
136 #ifdef GCC_INCLUDE_DIR
137 /* This is the dir for fixincludes and for gcc's private headers. */
138 { GCC_INCLUDE_DIR, "GCC", 0, 0 },
139 #endif
140 #ifdef CROSS_INCLUDE_DIR
141 /* One place the target system's headers might be. */
142 { CROSS_INCLUDE_DIR, "GCC", 0, 0 },
143 #endif
144 #ifdef TOOL_INCLUDE_DIR
145 /* Another place the target system's headers might be. */
146 { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1 },
147 #endif
148 #ifdef SYSTEM_INCLUDE_DIR
149 /* Some systems have an extra dir of include files. */
150 { SYSTEM_INCLUDE_DIR, 0, 0, 0 },
151 #endif
152 #ifdef STANDARD_INCLUDE_DIR
153 /* /usr/include comes dead last. */
154 { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0 },
155 #endif
156 { 0, 0, 0, 0 }
157 };
158 #endif /* no INCLUDE_DEFAULTS */
159
160 /* Internal structures and prototypes. */
161
162 /* A `struct pending_option' remembers one -D, -A, -U, -include, or -imacros
163 switch. There are four lists: one for -D and -U, one for -A, one
164 for -include, one for -imacros. `undef' is set for -U, clear for
165 -D, ignored for the others.
166 (Future: add an equivalent of -U for -A) */
167
168 typedef void (* cl_directive_handler) PARAMS ((cpp_reader *, const char *));
169 struct pending_option
170 {
171 struct pending_option *next;
172 const char *arg;
173 cl_directive_handler handler;
174 };
175
176 /* The `pending' structure accumulates all the options that are not
177 actually processed until we hit cpp_start_read. It consists of
178 several lists, one for each type of option. We keep both head and
179 tail pointers for quick insertion. */
180 struct cpp_pending
181 {
182 struct pending_option *directive_head, *directive_tail;
183
184 struct file_name_list *quote_head, *quote_tail;
185 struct file_name_list *brack_head, *brack_tail;
186 struct file_name_list *systm_head, *systm_tail;
187 struct file_name_list *after_head, *after_tail;
188
189 struct pending_option *imacros_head, *imacros_tail;
190 struct pending_option *include_head, *include_tail;
191 };
192
193 #ifdef __STDC__
194 #define APPEND(pend, list, elt) \
195 do { if (!(pend)->list##_head) (pend)->list##_head = (elt); \
196 else (pend)->list##_tail->next = (elt); \
197 (pend)->list##_tail = (elt); \
198 } while (0)
199 #else
200 #define APPEND(pend, list, elt) \
201 do { if (!(pend)->list/**/_head) (pend)->list/**/_head = (elt); \
202 else (pend)->list/**/_tail->next = (elt); \
203 (pend)->list/**/_tail = (elt); \
204 } while (0)
205 #endif
206
207 static void print_help PARAMS ((void));
208 static void path_include PARAMS ((cpp_reader *,
209 struct cpp_pending *,
210 char *, int));
211 static void initialize_builtins PARAMS ((cpp_reader *));
212 static void append_include_chain PARAMS ((cpp_reader *,
213 struct cpp_pending *,
214 char *, int, int));
215 static void merge_include_chains PARAMS ((cpp_reader *));
216
217 static void dump_special_to_buffer PARAMS ((cpp_reader *, const U_CHAR *,
218 size_t));
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_pending *,
222 const char *,
223 cl_directive_handler));
224 #ifdef HOST_EBCDIC
225 static int opt_comp PARAMS ((const void *, const void *));
226 #endif
227 static int parse_option PARAMS ((const char *));
228 static int handle_option PARAMS ((cpp_reader *, int, char **));
229
230 /* Fourth argument to append_include_chain: chain to use */
231 enum { QUOTE = 0, BRACKET, SYSTEM, AFTER };
232
233 /* If we have designated initializers (GCC >2.7) this table can be
234 initialized, constant data. Otherwise, it has to be filled in at
235 runtime. */
236
237 #if (GCC_VERSION >= 2007)
238 #define init_IStable() /* nothing */
239 #define ISTABLE __extension__ const unsigned char _cpp_IStable[256] = {
240 #define END };
241 #define s(p, v) [p] = v,
242 #else
243 #define ISTABLE unsigned char _cpp_IStable[256] = { 0 }; \
244 static void init_IStable PARAMS ((void)) { \
245 unsigned char *x = _cpp_IStable;
246 #define END }
247 #define s(p, v) x[p] = v;
248 #endif
249
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)
254
255 ISTABLE
256 A('_')
257
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')
261
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')
265
266 N('1') N('2') N('3') N('4') N('5') N('6') N('7') N('8') N('9') N('0')
267
268 H('\0') H(' ') H('\t') H('\v') H('\f')
269
270 S('\n')
271 END
272
273 #undef A
274 #undef N
275 #undef H
276 #undef S
277 #undef s
278 #undef ISTABLE
279 #undef END
280
281 /* Given a colon-separated list of file names PATH,
282 add all the names to the search path for include files. */
283
284 static void
285 path_include (pfile, pend, list, path)
286 cpp_reader *pfile;
287 struct cpp_pending *pend;
288 char *list;
289 int path;
290 {
291 char *p, *q, *name;
292
293 p = list;
294
295 do
296 {
297 /* Find the end of this name. */
298 q = p;
299 while (*q != 0 && *q != PATH_SEPARATOR) q++;
300 if (q == p)
301 {
302 /* An empty name in the path stands for the current directory. */
303 name = (char *) xmalloc (2);
304 name[0] = '.';
305 name[1] = 0;
306 }
307 else
308 {
309 /* Otherwise use the directory that is named. */
310 name = (char *) xmalloc (q - p + 1);
311 memcpy (name, p, q - p);
312 name[q - p] = 0;
313 }
314
315 append_include_chain (pfile, pend, name, path, 0);
316
317 /* Advance past this name. */
318 if (*q == 0)
319 break;
320 p = q + 1;
321 }
322 while (1);
323 }
324
325 /* Append DIR to include path PATH. DIR must be permanently allocated
326 and writable. */
327 static void
328 append_include_chain (pfile, pend, dir, path, cxx_aware)
329 cpp_reader *pfile;
330 struct cpp_pending *pend;
331 char *dir;
332 int path;
333 int cxx_aware;
334 {
335 struct file_name_list *new;
336 struct stat st;
337 unsigned int len;
338
339 _cpp_simplify_pathname (dir);
340 if (stat (dir, &st))
341 {
342 /* Dirs that don't exist are silently ignored. */
343 if (errno != ENOENT)
344 cpp_notice_from_errno (pfile, dir);
345 else if (CPP_OPTION (pfile, verbose))
346 fprintf (stderr, _("ignoring nonexistent directory `%s'\n"), dir);
347 return;
348 }
349
350 if (!S_ISDIR (st.st_mode))
351 {
352 cpp_notice (pfile, "%s: Not a directory", dir);
353 return;
354 }
355
356 len = strlen (dir);
357 if (len > pfile->max_include_len)
358 pfile->max_include_len = len;
359
360 new = (struct file_name_list *) xmalloc (sizeof (struct file_name_list));
361 new->name = dir;
362 new->nlen = len;
363 new->ino = st.st_ino;
364 new->dev = st.st_dev;
365 if (path == SYSTEM)
366 new->sysp = cxx_aware ? 1 : 2;
367 else
368 new->sysp = 0;
369 new->name_map = NULL;
370 new->next = NULL;
371 new->alloc = NULL;
372
373 switch (path)
374 {
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;
379 }
380 }
381
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.
387
388 For the future: Check if the directory is empty (but
389 how?) and possibly preload the include hash. */
390
391 static void
392 merge_include_chains (pfile)
393 cpp_reader *pfile;
394 {
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;
398
399 struct cpp_pending *pend = CPP_OPTION (pfile, pending);
400
401 qtail = pend->quote_tail;
402 btail = pend->brack_tail;
403 stail = pend->systm_tail;
404 atail = pend->after_tail;
405
406 quote = pend->quote_head;
407 brack = pend->brack_head;
408 systm = pend->systm_head;
409 after = pend->after_head;
410
411 /* Paste together bracket, system, and after include chains. */
412 if (stail)
413 stail->next = after;
414 else
415 systm = after;
416 if (btail)
417 btail->next = systm;
418 else
419 brack = systm;
420
421 /* This is a bit tricky.
422 First we drop dupes from the quote-include list.
423 Then we drop dupes from the bracket-include list.
424 Finally, if qtail and brack are the same directory,
425 we cut out qtail.
426
427 We can't just merge the lists and then uniquify them because
428 then we may lose directories from the <> search path that should
429 be there; consider -Ifoo -Ibar -I- -Ifoo -Iquux. It is however
430 safe to treat -Ibar -Ifoo -I- -Ifoo -Iquux as if written
431 -Ibar -I- -Ifoo -Iquux.
432
433 Note that this algorithm is quadratic in the number of -I switches,
434 which is acceptable since there aren't usually that many of them. */
435
436 for (cur = quote, prev = NULL; cur; cur = cur->next)
437 {
438 for (other = quote; other != cur; other = other->next)
439 if (INO_T_EQ (cur->ino, other->ino)
440 && cur->dev == other->dev)
441 {
442 if (CPP_OPTION (pfile, verbose))
443 fprintf (stderr, _("ignoring duplicate directory `%s'\n"),
444 cur->name);
445
446 prev->next = cur->next;
447 free (cur->name);
448 free (cur);
449 cur = prev;
450 break;
451 }
452 prev = cur;
453 }
454 qtail = prev;
455
456 for (cur = brack; cur; cur = cur->next)
457 {
458 for (other = brack; other != cur; other = other->next)
459 if (INO_T_EQ (cur->ino, other->ino)
460 && cur->dev == other->dev)
461 {
462 if (CPP_OPTION (pfile, verbose))
463 fprintf (stderr, _("ignoring duplicate directory `%s'\n"),
464 cur->name);
465
466 prev->next = cur->next;
467 free (cur->name);
468 free (cur);
469 cur = prev;
470 break;
471 }
472 prev = cur;
473 }
474
475 if (quote)
476 {
477 if (INO_T_EQ (qtail->ino, brack->ino) && qtail->dev == brack->dev)
478 {
479 if (quote == qtail)
480 {
481 if (CPP_OPTION (pfile, verbose))
482 fprintf (stderr, _("ignoring duplicate directory `%s'\n"),
483 quote->name);
484
485 free (quote->name);
486 free (quote);
487 quote = brack;
488 }
489 else
490 {
491 cur = quote;
492 while (cur->next != qtail)
493 cur = cur->next;
494 cur->next = brack;
495 if (CPP_OPTION (pfile, verbose))
496 fprintf (stderr, _("ignoring duplicate directory `%s'\n"),
497 qtail->name);
498
499 free (qtail->name);
500 free (qtail);
501 }
502 }
503 else
504 qtail->next = brack;
505 }
506 else
507 quote = brack;
508
509 CPP_OPTION (pfile, quote_include) = quote;
510 CPP_OPTION (pfile, bracket_include) = brack;
511 }
512
513
514 /* Write out a #define command for the special named MACRO_NAME
515 to PFILE's token_buffer. */
516
517 static void
518 dump_special_to_buffer (pfile, macro_name, macro_len)
519 cpp_reader *pfile;
520 const U_CHAR *macro_name;
521 size_t macro_len;
522 {
523 static const char define_directive[] = "#define ";
524 CPP_RESERVE (pfile, sizeof(define_directive) + macro_len);
525 CPP_PUTS_Q (pfile, define_directive, sizeof(define_directive)-1);
526 CPP_PUTS_Q (pfile, macro_name, macro_len);
527 CPP_PUTC_Q (pfile, ' ');
528 _cpp_expand_to_buffer (pfile, macro_name, macro_len);
529 CPP_PUTC (pfile, '\n');
530 }
531
532 /* Initialize a cpp_reader structure. */
533 void
534 cpp_reader_init (pfile)
535 cpp_reader *pfile;
536 {
537 memset ((char *) pfile, 0, sizeof (cpp_reader));
538
539 pfile->token_buffer_size = 200;
540 pfile->token_buffer = (U_CHAR *) xmalloc (pfile->token_buffer_size);
541 CPP_SET_WRITTEN (pfile, 0);
542
543 CPP_OPTION (pfile, dollars_in_ident) = 1;
544 CPP_OPTION (pfile, cplusplus_comments) = 1;
545 CPP_OPTION (pfile, warn_import) = 1;
546 CPP_OPTION (pfile, discard_comments) = 1;
547 CPP_OPTION (pfile, show_column) = 1;
548 CPP_OPTION (pfile, tabstop) = 8;
549
550 CPP_OPTION (pfile, pending) =
551 (struct cpp_pending *) xcalloc (1, sizeof (struct cpp_pending));
552
553 _cpp_init_macro_hash (pfile);
554 _cpp_init_include_hash (pfile);
555 }
556
557 /* Initialize a cpp_printer structure. As a side effect, open the
558 output file. */
559 cpp_printer *
560 cpp_printer_init (pfile, print)
561 cpp_reader *pfile;
562 cpp_printer *print;
563 {
564 memset (print, '\0', sizeof (cpp_printer));
565 if (CPP_OPTION (pfile, out_fname) == NULL)
566 CPP_OPTION (pfile, out_fname) = "";
567
568 if (CPP_OPTION (pfile, out_fname)[0] == '\0')
569 print->outf = stdout;
570 else
571 {
572 print->outf = fopen (CPP_OPTION (pfile, out_fname), "w");
573 if (! print->outf)
574 {
575 cpp_notice_from_errno (pfile, CPP_OPTION (pfile, out_fname));
576 return NULL;
577 }
578 }
579 return print;
580 }
581
582 /* Free resources used by PFILE.
583 This is the cpp_reader 'finalizer' or 'destructor' (in C++ terminology). */
584 void
585 cpp_cleanup (pfile)
586 cpp_reader *pfile;
587 {
588 while (CPP_BUFFER (pfile) != NULL)
589 cpp_pop_buffer (pfile);
590
591 if (pfile->token_buffer)
592 {
593 free (pfile->token_buffer);
594 pfile->token_buffer = NULL;
595 }
596
597 if (pfile->input_buffer)
598 {
599 free (pfile->input_buffer);
600 pfile->input_buffer = NULL;
601 pfile->input_buffer_len = 0;
602 }
603
604 if (pfile->deps)
605 deps_free (pfile->deps);
606
607 htab_delete (pfile->hashtab);
608 htab_delete (pfile->all_include_files);
609 }
610
611
612 /* This structure defines one built-in macro. A node of type TYPE will
613 be entered in the macro hash table under the name NAME, with value
614 VALUE (if any). FLAGS tweaks the behavior a little:
615 DUMP write debug info for this macro
616 VERS value is the global version_string, quoted
617 ULP value is the global user_label_prefix
618 */
619
620 struct builtin
621 {
622 const U_CHAR *name;
623 const U_CHAR *value;
624 unsigned short type;
625 unsigned short flags;
626 unsigned int len;
627 };
628 #define DUMP 0x01
629 #define VERS 0x02
630 #define ULP 0x04
631
632 #define B(n, t) { U n, 0, t, 0, sizeof n - 1 }
633 #define C(n, v) { U n, U v, T_CONST, DUMP, sizeof n - 1 }
634 #define X(n, v, t, f) { U n, U v, t, DUMP|f, sizeof n - 1 }
635 static const struct builtin builtin_array[] =
636 {
637 B("__TIME__", T_TIME),
638 B("__DATE__", T_DATE),
639 B("__FILE__", T_FILE),
640 B("__BASE_FILE__", T_BASE_FILE),
641 B("__LINE__", T_SPECLINE),
642 B("__INCLUDE_LEVEL__", T_INCLUDE_LEVEL),
643
644 X("__VERSION__", 0, T_XCONST, VERS),
645 X("__USER_LABEL_PREFIX__", 0, T_CONST, ULP),
646 X("__STDC__", "1", T_STDC, 0),
647 C("__REGISTER_PREFIX__", REGISTER_PREFIX),
648 C("__HAVE_BUILTIN_SETJMP__", "1"),
649 #ifndef NO_BUILTIN_SIZE_TYPE
650 C("__SIZE_TYPE__", SIZE_TYPE),
651 #endif
652 #ifndef NO_BUILTIN_PTRDIFF_TYPE
653 C("__PTRDIFF_TYPE__", PTRDIFF_TYPE),
654 #endif
655 #ifndef NO_BUILTIN_WCHAR_TYPE
656 C("__WCHAR_TYPE__", WCHAR_TYPE),
657 #endif
658 };
659 #undef B
660 #undef C
661 #undef X
662 #define builtin_array_end \
663 builtin_array + sizeof(builtin_array)/sizeof(struct builtin)
664
665 /* Subroutine of cpp_start_read; reads the builtins table above and
666 enters the macros into the hash table. */
667 static void
668 initialize_builtins (pfile)
669 cpp_reader *pfile;
670 {
671 const struct builtin *b;
672 const U_CHAR *val;
673 HASHNODE *hp;
674 for(b = builtin_array; b < builtin_array_end; b++)
675 {
676 if (b->type == T_STDC && CPP_TRADITIONAL (pfile))
677 continue;
678
679 if (b->flags & ULP)
680 val = (const U_CHAR *) user_label_prefix;
681 else if (b->flags & VERS)
682 {
683 val = (const U_CHAR *) xmalloc (strlen (version_string) + 3);
684 sprintf ((char *)val, "\"%s\"", version_string);
685 }
686 else
687 val = b->value;
688
689 hp = _cpp_lookup (pfile, b->name, b->len);
690 hp->value.cpval = val;
691 hp->type = b->type;
692
693 if ((b->flags & DUMP) && CPP_OPTION (pfile, debug_output))
694 dump_special_to_buffer (pfile, b->name, b->len);
695 }
696 }
697 #undef DUMP
698 #undef STDC
699 #undef VERS
700 #undef ULP
701
702 /* Another subroutine of cpp_start_read. This one sets up to do
703 dependency-file output. */
704 static void
705 initialize_dependency_output (pfile)
706 cpp_reader *pfile;
707 {
708 char *spec, *s, *output_file;
709
710 /* Either of two environment variables can specify output of deps.
711 Its value is either "OUTPUT_FILE" or "OUTPUT_FILE DEPS_TARGET",
712 where OUTPUT_FILE is the file to write deps info to
713 and DEPS_TARGET is the target to mention in the deps. */
714
715 if (CPP_OPTION (pfile, print_deps) == 0)
716 {
717 spec = getenv ("DEPENDENCIES_OUTPUT");
718 if (spec)
719 CPP_OPTION (pfile, print_deps) = 1;
720 else
721 {
722 spec = getenv ("SUNPRO_DEPENDENCIES");
723 if (spec)
724 CPP_OPTION (pfile, print_deps) = 2;
725 else
726 return;
727 }
728
729 /* Find the space before the DEPS_TARGET, if there is one. */
730 s = strchr (spec, ' ');
731 if (s)
732 {
733 CPP_OPTION (pfile, deps_target) = s + 1;
734 output_file = (char *) xmalloc (s - spec + 1);
735 memcpy (output_file, spec, s - spec);
736 output_file[s - spec] = 0;
737 }
738 else
739 {
740 CPP_OPTION (pfile, deps_target) = 0;
741 output_file = spec;
742 }
743
744 CPP_OPTION (pfile, deps_file) = output_file;
745 CPP_OPTION (pfile, print_deps_append) = 1;
746 }
747
748 pfile->deps = deps_init ();
749
750 /* Print the expected object file name as the target of this Make-rule. */
751 if (CPP_OPTION (pfile, deps_target))
752 deps_add_target (pfile->deps, CPP_OPTION (pfile, deps_target));
753 else if (*CPP_OPTION (pfile, in_fname) == 0)
754 deps_add_target (pfile->deps, "-");
755 else
756 deps_calc_target (pfile->deps, CPP_OPTION (pfile, in_fname));
757
758 if (CPP_OPTION (pfile, in_fname))
759 deps_add_dep (pfile->deps, CPP_OPTION (pfile, in_fname));
760 }
761
762 /* And another subroutine. This one sets up the standard include path. */
763 static void
764 initialize_standard_includes (pfile)
765 cpp_reader *pfile;
766 {
767 char *path;
768 const struct default_include *p;
769 const char *specd_prefix = CPP_OPTION (pfile, include_prefix);
770
771 /* Several environment variables may add to the include search path.
772 CPATH specifies an additional list of directories to be searched
773 as if specified with -I, while C_INCLUDE_PATH, CPLUS_INCLUDE_PATH,
774 etc. specify an additional list of directories to be searched as
775 if specified with -isystem, for the language indicated. */
776
777 GET_ENV_PATH_LIST (path, "CPATH");
778 if (path != 0 && *path != 0)
779 path_include (pfile, CPP_OPTION (pfile, pending), path, BRACKET);
780
781 switch ((CPP_OPTION (pfile, objc) << 1) + CPP_OPTION (pfile, cplusplus))
782 {
783 case 0:
784 GET_ENV_PATH_LIST (path, "C_INCLUDE_PATH");
785 break;
786 case 1:
787 GET_ENV_PATH_LIST (path, "CPLUS_INCLUDE_PATH");
788 break;
789 case 2:
790 GET_ENV_PATH_LIST (path, "OBJC_INCLUDE_PATH");
791 break;
792 case 3:
793 GET_ENV_PATH_LIST (path, "OBJCPLUS_INCLUDE_PATH");
794 break;
795 }
796 if (path != 0 && *path != 0)
797 path_include (pfile, CPP_OPTION (pfile, pending), path, SYSTEM);
798
799 /* Search "translated" versions of GNU directories.
800 These have /usr/local/lib/gcc... replaced by specd_prefix. */
801 if (specd_prefix != 0)
802 {
803 char *default_prefix = (char *) alloca (sizeof GCC_INCLUDE_DIR - 7);
804 /* Remove the `include' from /usr/local/lib/gcc.../include.
805 GCC_INCLUDE_DIR will always end in /include. */
806 int default_len = sizeof GCC_INCLUDE_DIR - 8;
807 int specd_len = strlen (specd_prefix);
808
809 memcpy (default_prefix, GCC_INCLUDE_DIR, default_len);
810 default_prefix[default_len] = '\0';
811
812 for (p = include_defaults_array; p->fname; p++)
813 {
814 /* Some standard dirs are only for C++. */
815 if (!p->cplusplus
816 || (CPP_OPTION (pfile, cplusplus)
817 && !CPP_OPTION (pfile, no_standard_cplusplus_includes)))
818 {
819 /* Does this dir start with the prefix? */
820 if (!strncmp (p->fname, default_prefix, default_len))
821 {
822 /* Yes; change prefix and add to search list. */
823 int flen = strlen (p->fname);
824 int this_len = specd_len + flen - default_len;
825 char *str = (char *) xmalloc (this_len + 1);
826 memcpy (str, specd_prefix, specd_len);
827 memcpy (str + specd_len,
828 p->fname + default_len,
829 flen - default_len + 1);
830
831 append_include_chain (pfile, CPP_OPTION (pfile, pending),
832 str, SYSTEM, p->cxx_aware);
833 }
834 }
835 }
836 }
837
838 /* Search ordinary names for GNU include directories. */
839 for (p = include_defaults_array; p->fname; p++)
840 {
841 /* Some standard dirs are only for C++. */
842 if (!p->cplusplus
843 || (CPP_OPTION (pfile, cplusplus)
844 && !CPP_OPTION (pfile, no_standard_cplusplus_includes)))
845 {
846 /* XXX Potential memory leak! */
847 char *str = xstrdup (update_path (p->fname, p->component));
848 append_include_chain (pfile, CPP_OPTION (pfile, pending),
849 str, SYSTEM, p->cxx_aware);
850 }
851 }
852 }
853
854 /* This is called after options have been processed.
855 * Check options for consistency, and setup for processing input
856 * from the file named FNAME. (Use standard input if FNAME==NULL.)
857 * Return 1 on success, 0 on failure.
858 */
859
860 int
861 cpp_start_read (pfile, print, fname)
862 cpp_reader *pfile;
863 cpp_printer *print;
864 const char *fname;
865 {
866 struct pending_option *p, *q;
867
868 /* -MG doesn't select the form of output and must be specified with one of
869 -M or -MM. -MG doesn't make sense with -MD or -MMD since they don't
870 inhibit compilation. */
871 if (CPP_OPTION (pfile, print_deps_missing_files)
872 && (CPP_OPTION (pfile, print_deps) == 0
873 || !CPP_OPTION (pfile, no_output)))
874 {
875 cpp_fatal (pfile, "-MG must be specified with one of -M or -MM");
876 return 0;
877 }
878
879 /* Chill should not be used with -trigraphs. */
880 if (CPP_OPTION (pfile, chill) && CPP_OPTION (pfile, trigraphs))
881 {
882 cpp_warning (pfile, "-lang-chill and -trigraphs are mutually exclusive");
883 CPP_OPTION (pfile, trigraphs) = 0;
884 }
885
886 /* -Wtraditional is not useful in C++ mode. */
887 if (CPP_OPTION (pfile, cplusplus))
888 CPP_OPTION (pfile, warn_traditional) = 0;
889
890 /* Set this if it hasn't been set already. */
891 if (user_label_prefix == NULL)
892 user_label_prefix = USER_LABEL_PREFIX;
893
894 /* Don't bother trying to do macro expansion if we've already done
895 preprocessing. */
896 if (CPP_OPTION (pfile, preprocessed))
897 pfile->no_macro_expand++;
898
899 /* Set up the IStable. This doesn't do anything if we were compiled
900 with a compiler that supports C99 designated initializers. */
901 init_IStable ();
902
903 /* Set up the tables used by read_and_prescan. */
904 _cpp_init_input_buffer (pfile);
905
906 /* Set up the include search path now. */
907 if (! CPP_OPTION (pfile, no_standard_includes))
908 initialize_standard_includes (pfile);
909
910 merge_include_chains (pfile);
911
912 /* With -v, print the list of dirs to search. */
913 if (CPP_OPTION (pfile, verbose))
914 {
915 struct file_name_list *l;
916 fprintf (stderr, _("#include \"...\" search starts here:\n"));
917 for (l = CPP_OPTION (pfile, quote_include); l; l = l->next)
918 {
919 if (l == CPP_OPTION (pfile, bracket_include))
920 fprintf (stderr, _("#include <...> search starts here:\n"));
921 fprintf (stderr, " %s\n", l->name);
922 }
923 fprintf (stderr, _("End of search list.\n"));
924 }
925
926 /* Open the main input file. This must be done early, so we have a
927 buffer to stand on. */
928 if (CPP_OPTION (pfile, in_fname) == NULL
929 || *CPP_OPTION (pfile, in_fname) == 0)
930 {
931 CPP_OPTION (pfile, in_fname) = fname;
932 if (CPP_OPTION (pfile, in_fname) == NULL)
933 CPP_OPTION (pfile, in_fname) = "";
934 }
935 if (CPP_OPTION (pfile, out_fname) == NULL)
936 CPP_OPTION (pfile, out_fname) = "";
937
938 if (!cpp_read_file (pfile, fname))
939 return 0;
940
941 initialize_dependency_output (pfile);
942
943 /* -D and friends may produce output, which should be identified
944 as line 0. */
945
946 CPP_BUFFER (pfile)->lineno = 0;
947
948 if (print)
949 {
950 print->lineno = 0;
951 print->last_fname = CPP_BUFFER (pfile)->nominal_fname;
952 print->last_bsd = pfile->buffer_stack_depth;
953 print->written = CPP_WRITTEN (pfile);
954 }
955
956 /* Install __LINE__, etc. */
957 initialize_builtins (pfile);
958
959 /* Do -U's, -D's and -A's in the order they were seen. */
960 p = CPP_OPTION (pfile, pending)->directive_head;
961 while (p)
962 {
963 (*p->handler) (pfile, p->arg);
964 q = p->next;
965 free (p);
966 p = q;
967 }
968 pfile->done_initializing = 1;
969 pfile->only_seen_white = 2;
970 CPP_BUFFER (pfile)->lineno = 1;
971 if (print && ! CPP_OPTION (pfile, no_output))
972 cpp_output_tokens (pfile, print);
973
974 /* The -imacros files can be scanned now, but the -include files
975 have to be pushed onto the include stack and processed later,
976 in the main loop calling cpp_get_token. */
977
978 p = CPP_OPTION (pfile, pending)->imacros_head;
979 while (p)
980 {
981 if (cpp_read_file (pfile, p->arg))
982 cpp_scan_buffer_nooutput (pfile);
983 q = p->next;
984 free (p);
985 p = q;
986 }
987
988 p = CPP_OPTION (pfile, pending)->include_head;
989 while (p)
990 {
991 if (cpp_read_file (pfile, p->arg)
992 && print && ! CPP_OPTION (pfile, no_output))
993 cpp_output_tokens (pfile, print);
994 q = p->next;
995 free (p);
996 p = q;
997 }
998
999 free (CPP_OPTION (pfile, pending));
1000 CPP_OPTION (pfile, pending) = NULL;
1001
1002 return 1;
1003 }
1004
1005 /* This is called at the end of preprocessing. It pops the
1006 last buffer and writes dependency output. It should also
1007 clear macro definitions, such that you could call cpp_start_read
1008 with a new filename to restart processing. */
1009 void
1010 cpp_finish (pfile, print)
1011 cpp_reader *pfile;
1012 cpp_printer *print;
1013 {
1014 if (CPP_BUFFER (pfile))
1015 {
1016 cpp_ice (pfile, "buffers still stacked in cpp_finish");
1017 while (CPP_BUFFER (pfile))
1018 cpp_pop_buffer (pfile);
1019 }
1020
1021 /* Don't write the deps file if preprocessing has failed. */
1022 if (CPP_OPTION (pfile, print_deps) && pfile->errors == 0)
1023 {
1024 /* Stream on which to print the dependency information. */
1025 FILE *deps_stream = 0;
1026 const char *deps_mode
1027 = CPP_OPTION (pfile, print_deps_append) ? "a" : "w";
1028 if (CPP_OPTION (pfile, deps_file) == 0)
1029 deps_stream = stdout;
1030 else
1031 {
1032 deps_stream = fopen (CPP_OPTION (pfile, deps_file), deps_mode);
1033 if (deps_stream == 0)
1034 cpp_notice_from_errno (pfile, CPP_OPTION (pfile, deps_file));
1035 }
1036 if (deps_stream)
1037 {
1038 deps_write (pfile->deps, deps_stream, 72);
1039 if (CPP_OPTION (pfile, deps_file))
1040 {
1041 if (ferror (deps_stream) || fclose (deps_stream) != 0)
1042 cpp_fatal (pfile, "I/O error on output");
1043 }
1044 }
1045 }
1046
1047 if (CPP_OPTION (pfile, dump_macros) == dump_only)
1048 _cpp_dump_macro_hash (pfile);
1049
1050 /* Flush any pending output. */
1051 if (print)
1052 {
1053 cpp_output_tokens (pfile, print);
1054 if (ferror (print->outf) || fclose (print->outf))
1055 cpp_notice_from_errno (pfile, CPP_OPTION (pfile, out_fname));
1056 }
1057 }
1058
1059 static void
1060 new_pending_directive (pend, text, handler)
1061 struct cpp_pending *pend;
1062 const char *text;
1063 cl_directive_handler handler;
1064 {
1065 struct pending_option *o = (struct pending_option *)
1066 xmalloc (sizeof (struct pending_option));
1067
1068 o->arg = text;
1069 o->next = NULL;
1070 o->handler = handler;
1071 APPEND (pend, directive, o);
1072 }
1073
1074 /* Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string");
1075 I.e. a const string initializer with parens around it. That is
1076 what N_("string") resolves to, so we make no_* be macros instead. */
1077 #define no_arg N_("Argument missing after %s")
1078 #define no_ass N_("Assertion missing after %s")
1079 #define no_dir N_("Directory name missing after %s")
1080 #define no_fil N_("File name missing after %s")
1081 #define no_mac N_("Macro name missing after %s")
1082 #define no_pth N_("Path name missing after %s")
1083 #define no_num N_("Number missing after %s")
1084
1085 /* This is the list of all command line options, with the leading
1086 "-" removed. It must be sorted in ASCII collating order. */
1087 #define COMMAND_LINE_OPTIONS \
1088 DEF_OPT("", 0, OPT_stdin_stdout) \
1089 DEF_OPT("$", 0, OPT_dollar) \
1090 DEF_OPT("+", 0, OPT_plus) \
1091 DEF_OPT("-help", 0, OPT__help) \
1092 DEF_OPT("-version", 0, OPT__version) \
1093 DEF_OPT("A", no_ass, OPT_A) \
1094 DEF_OPT("C", 0, OPT_C) \
1095 DEF_OPT("D", no_mac, OPT_D) \
1096 DEF_OPT("H", 0, OPT_H) \
1097 DEF_OPT("I", no_dir, OPT_I) \
1098 DEF_OPT("M", 0, OPT_M) \
1099 DEF_OPT("MD", no_fil, OPT_MD) \
1100 DEF_OPT("MG", 0, OPT_MG) \
1101 DEF_OPT("MM", 0, OPT_MM) \
1102 DEF_OPT("MMD", no_fil, OPT_MMD) \
1103 DEF_OPT("P", 0, OPT_P) \
1104 DEF_OPT("U", no_mac, OPT_U) \
1105 DEF_OPT("W", no_arg, OPT_W) /* arg optional */ \
1106 DEF_OPT("d", no_arg, OPT_d) \
1107 DEF_OPT("fleading-underscore", 0, OPT_fleading_underscore) \
1108 DEF_OPT("fno-leading-underscore", 0, OPT_fno_leading_underscore) \
1109 DEF_OPT("fno-preprocessed", 0, OPT_fno_preprocessed) \
1110 DEF_OPT("fno-show-column", 0, OPT_fno_show_column) \
1111 DEF_OPT("fpreprocessed", 0, OPT_fpreprocessed) \
1112 DEF_OPT("fshow-column", 0, OPT_fshow_column) \
1113 DEF_OPT("ftabstop=", no_num, OPT_ftabstop) \
1114 DEF_OPT("g", no_arg, OPT_g) /* arg optional */ \
1115 DEF_OPT("h", 0, OPT_h) \
1116 DEF_OPT("idirafter", no_dir, OPT_idirafter) \
1117 DEF_OPT("imacros", no_fil, OPT_imacros) \
1118 DEF_OPT("include", no_fil, OPT_include) \
1119 DEF_OPT("iprefix", no_pth, OPT_iprefix) \
1120 DEF_OPT("isystem", no_dir, OPT_isystem) \
1121 DEF_OPT("iwithprefix", no_dir, OPT_iwithprefix) \
1122 DEF_OPT("iwithprefixbefore", no_dir, OPT_iwithprefixbefore) \
1123 DEF_OPT("lang-asm", 0, OPT_lang_asm) \
1124 DEF_OPT("lang-c", 0, OPT_lang_c) \
1125 DEF_OPT("lang-c++", 0, OPT_lang_cplusplus) \
1126 DEF_OPT("lang-c89", 0, OPT_lang_c89) \
1127 DEF_OPT("lang-chill", 0, OPT_lang_chill) \
1128 DEF_OPT("lang-fortran", 0, OPT_lang_fortran) \
1129 DEF_OPT("lang-objc", 0, OPT_lang_objc) \
1130 DEF_OPT("lang-objc++", 0, OPT_lang_objcplusplus) \
1131 DEF_OPT("nostdinc", 0, OPT_nostdinc) \
1132 DEF_OPT("nostdinc++", 0, OPT_nostdincplusplus) \
1133 DEF_OPT("o", no_fil, OPT_o) \
1134 DEF_OPT("pedantic", 0, OPT_pedantic) \
1135 DEF_OPT("pedantic-errors", 0, OPT_pedantic_errors) \
1136 DEF_OPT("remap", 0, OPT_remap) \
1137 DEF_OPT("std=c89", 0, OPT_std_c89) \
1138 DEF_OPT("std=c99", 0, OPT_std_c99) \
1139 DEF_OPT("std=c9x", 0, OPT_std_c9x) \
1140 DEF_OPT("std=gnu89", 0, OPT_std_gnu89) \
1141 DEF_OPT("std=gnu99", 0, OPT_std_gnu99) \
1142 DEF_OPT("std=gnu9x", 0, OPT_std_gnu9x) \
1143 DEF_OPT("std=iso9899:1990", 0, OPT_std_iso9899_1990) \
1144 DEF_OPT("std=iso9899:199409", 0, OPT_std_iso9899_199409) \
1145 DEF_OPT("std=iso9899:1999", 0, OPT_std_iso9899_1999) \
1146 DEF_OPT("std=iso9899:199x", 0, OPT_std_iso9899_199x) \
1147 DEF_OPT("traditional", 0, OPT_traditional) \
1148 DEF_OPT("trigraphs", 0, OPT_trigraphs) \
1149 DEF_OPT("v", 0, OPT_v) \
1150 DEF_OPT("w", 0, OPT_w)
1151
1152 #define DEF_OPT(text, msg, code) code,
1153 enum opt_code
1154 {
1155 COMMAND_LINE_OPTIONS
1156 N_OPTS
1157 };
1158 #undef DEF_OPT
1159
1160 struct cl_option
1161 {
1162 const char *opt_text;
1163 const char *msg;
1164 size_t opt_len;
1165 enum opt_code opt_code;
1166 };
1167
1168 #define DEF_OPT(text, msg, code) { text, msg, sizeof(text) - 1, code },
1169 #ifdef HOST_EBCDIC
1170 static struct cl_option cl_options[] =
1171 #else
1172 static const struct cl_option cl_options[] =
1173 #endif
1174 {
1175 COMMAND_LINE_OPTIONS
1176 };
1177 #undef DEF_OPT
1178 #undef COMMAND_LINE_OPTIONS
1179
1180 /* Perform a binary search to find which, if any, option the given
1181 command-line matches. Returns its index in the option array,
1182 negative on failure. Complications arise since some options can be
1183 suffixed with an argument, and multiple complete matches can occur,
1184 e.g. -iwithprefix and -iwithprefixbefore. Moreover, we want to
1185 accept options beginning with -g and -W that we do not recognise,
1186 but not to swallow any subsequent command line argument; these are
1187 handled as special cases in cpp_handle_option */
1188 static int
1189 parse_option (input)
1190 const char *input;
1191 {
1192 unsigned int md, mn, mx;
1193 size_t opt_len;
1194 int comp;
1195
1196 mn = 0;
1197 mx = N_OPTS;
1198
1199 while (mx > mn)
1200 {
1201 md = (mn + mx) / 2;
1202
1203 opt_len = cl_options[md].opt_len;
1204 comp = strncmp (input, cl_options[md].opt_text, opt_len);
1205
1206 if (comp > 0)
1207 mn = md + 1;
1208 else if (comp < 0)
1209 mx = md;
1210 else
1211 {
1212 if (input[opt_len] == '\0')
1213 return md;
1214 /* We were passed more text. If the option takes an argument,
1215 we may match a later option or we may have been passed the
1216 argument. The longest possible option match succeeds.
1217 If the option takes no arguments we have not matched and
1218 continue the search (e.g. input="stdc++" match was "stdc") */
1219 mn = md + 1;
1220 if (cl_options[md].msg)
1221 {
1222 /* Scan forwards. If we get an exact match, return it.
1223 Otherwise, return the longest option-accepting match.
1224 This loops no more than twice with current options */
1225 mx = md;
1226 for (; mn < N_OPTS; mn++)
1227 {
1228 opt_len = cl_options[mn].opt_len;
1229 if (strncmp (input, cl_options[mn].opt_text, opt_len))
1230 break;
1231 if (input[opt_len] == '\0')
1232 return mn;
1233 if (cl_options[mn].msg)
1234 mx = mn;
1235 }
1236 return mx;
1237 }
1238 }
1239 }
1240
1241 return -1;
1242 }
1243
1244 /* Handle one command-line option in (argc, argv).
1245 Can be called multiple times, to handle multiple sets of options.
1246 Returns number of strings consumed. */
1247
1248 static int
1249 handle_option (pfile, argc, argv)
1250 cpp_reader *pfile;
1251 int argc;
1252 char **argv;
1253 {
1254 int i = 0;
1255
1256 if (argv[i][0] != '-')
1257 {
1258 if (CPP_OPTION (pfile, out_fname) != NULL)
1259 cpp_fatal (pfile, "Too many arguments. Type %s --help for usage info",
1260 progname);
1261 else if (CPP_OPTION (pfile, in_fname) != NULL)
1262 CPP_OPTION (pfile, out_fname) = argv[i];
1263 else
1264 CPP_OPTION (pfile, in_fname) = argv[i];
1265 }
1266 else
1267 {
1268 enum opt_code opt_code;
1269 int opt_index;
1270 const char *arg = 0;
1271
1272 /* Skip over '-' */
1273 opt_index = parse_option (&argv[i][1]);
1274 if (opt_index < 0)
1275 return i;
1276
1277 opt_code = cl_options[opt_index].opt_code;
1278 if (cl_options[opt_index].msg)
1279 {
1280 arg = &argv[i][cl_options[opt_index].opt_len + 1];
1281
1282 /* Yuk. Special case for -g and -W as they must not swallow
1283 up any following argument. If this becomes common, add
1284 another field to the cl_options table */
1285 if (arg[0] == '\0' && !(opt_code == OPT_g || opt_code == OPT_W))
1286 {
1287 arg = argv[++i];
1288 if (!arg)
1289 {
1290 cpp_fatal (pfile, cl_options[opt_index].msg, argv[i - 1]);
1291 return argc;
1292 }
1293 }
1294 }
1295
1296 switch (opt_code)
1297 {
1298 case N_OPTS: /* shut GCC up */
1299 break;
1300 case OPT_fleading_underscore:
1301 user_label_prefix = "_";
1302 break;
1303 case OPT_fno_leading_underscore:
1304 user_label_prefix = "";
1305 break;
1306 case OPT_fpreprocessed:
1307 CPP_OPTION (pfile, preprocessed) = 1;
1308 break;
1309 case OPT_fno_preprocessed:
1310 CPP_OPTION (pfile, preprocessed) = 0;
1311 break;
1312 case OPT_fshow_column:
1313 CPP_OPTION (pfile, show_column) = 1;
1314 break;
1315 case OPT_fno_show_column:
1316 CPP_OPTION (pfile, show_column) = 0;
1317 break;
1318 case OPT_ftabstop:
1319 /* Silently ignore empty string, non-longs and silly values. */
1320 if (arg[0] != '\0')
1321 {
1322 char *endptr;
1323 long tabstop = strtol (arg, &endptr, 10);
1324 if (*endptr == '\0' && tabstop >= 1 && tabstop <= 100)
1325 CPP_OPTION (pfile, tabstop) = tabstop;
1326 }
1327 break;
1328 case OPT_w:
1329 CPP_OPTION (pfile, inhibit_warnings) = 1;
1330 break;
1331 case OPT_g: /* Silently ignore anything but -g3 */
1332 if (!strcmp(&argv[i][2], "3"))
1333 CPP_OPTION (pfile, debug_output) = 1;
1334 break;
1335 case OPT_h:
1336 case OPT__help:
1337 print_help ();
1338 exit (0); /* XXX */
1339 break;
1340 case OPT__version:
1341 fprintf (stderr, _("GNU CPP version %s (cpplib)\n"), version_string);
1342 exit (0); /* XXX */
1343 break;
1344 case OPT_C:
1345 CPP_OPTION (pfile, discard_comments) = 0;
1346 break;
1347 case OPT_P:
1348 CPP_OPTION (pfile, no_line_commands) = 1;
1349 break;
1350 case OPT_dollar: /* Don't include $ in identifiers. */
1351 CPP_OPTION (pfile, dollars_in_ident) = 0;
1352 break;
1353 case OPT_H:
1354 CPP_OPTION (pfile, print_include_names) = 1;
1355 break;
1356 case OPT_D:
1357 new_pending_directive (CPP_OPTION (pfile, pending), arg, cpp_define);
1358 break;
1359 case OPT_pedantic_errors:
1360 CPP_OPTION (pfile, pedantic_errors) = 1;
1361 /* fall through */
1362 case OPT_pedantic:
1363 CPP_OPTION (pfile, pedantic) = 1;
1364 break;
1365 case OPT_traditional:
1366 CPP_OPTION (pfile, traditional) = 1;
1367 CPP_OPTION (pfile, cplusplus_comments) = 0;
1368 CPP_OPTION (pfile, trigraphs) = 0;
1369 CPP_OPTION (pfile, warn_trigraphs) = 0;
1370 break;
1371 case OPT_trigraphs:
1372 CPP_OPTION (pfile, trigraphs) = 1;
1373 break;
1374 case OPT_plus:
1375 CPP_OPTION (pfile, cplusplus) = 1;
1376 CPP_OPTION (pfile, cplusplus_comments) = 1;
1377 break;
1378 case OPT_remap:
1379 CPP_OPTION (pfile, remap) = 1;
1380 break;
1381 case OPT_iprefix:
1382 CPP_OPTION (pfile, include_prefix) = arg;
1383 CPP_OPTION (pfile, include_prefix_len) = strlen (arg);
1384 break;
1385 case OPT_lang_c:
1386 CPP_OPTION (pfile, cplusplus) = 0;
1387 CPP_OPTION (pfile, cplusplus_comments) = 1;
1388 CPP_OPTION (pfile, c89) = 0;
1389 CPP_OPTION (pfile, c99) = 1;
1390 CPP_OPTION (pfile, objc) = 0;
1391 break;
1392 case OPT_lang_c89:
1393 CPP_OPTION (pfile, cplusplus) = 0;
1394 CPP_OPTION (pfile, cplusplus_comments) = 0;
1395 CPP_OPTION (pfile, c89) = 1;
1396 CPP_OPTION (pfile, c99) = 0;
1397 CPP_OPTION (pfile, objc) = 0;
1398 CPP_OPTION (pfile, trigraphs) = 1;
1399 new_pending_directive (CPP_OPTION (pfile, pending),
1400 "__STRICT_ANSI__", cpp_define);
1401 break;
1402 case OPT_lang_cplusplus:
1403 CPP_OPTION (pfile, cplusplus) = 1;
1404 CPP_OPTION (pfile, cplusplus_comments) = 1;
1405 CPP_OPTION (pfile, c89) = 0;
1406 CPP_OPTION (pfile, c99) = 0;
1407 CPP_OPTION (pfile, objc) = 0;
1408 break;
1409 case OPT_lang_objc:
1410 case OPT_lang_objcplusplus:
1411 CPP_OPTION (pfile, cplusplus) = opt_code == OPT_lang_objcplusplus;
1412 CPP_OPTION (pfile, cplusplus_comments) = 1;
1413 CPP_OPTION (pfile, c89) = 0;
1414 CPP_OPTION (pfile, c99) = 0;
1415 CPP_OPTION (pfile, objc) = 1;
1416 break;
1417 case OPT_lang_asm:
1418 CPP_OPTION (pfile, lang_asm) = 1;
1419 break;
1420 case OPT_lang_fortran:
1421 CPP_OPTION (pfile, lang_fortran) = 1;
1422 CPP_OPTION (pfile, cplusplus_comments) = 0;
1423 break;
1424 case OPT_lang_chill:
1425 CPP_OPTION (pfile, objc) = 0;
1426 CPP_OPTION (pfile, cplusplus) = 0;
1427 CPP_OPTION (pfile, chill) = 1;
1428 CPP_OPTION (pfile, traditional) = 1;
1429 break;
1430 case OPT_nostdinc:
1431 /* -nostdinc causes no default include directories.
1432 You must specify all include-file directories with -I. */
1433 CPP_OPTION (pfile, no_standard_includes) = 1;
1434 break;
1435 case OPT_nostdincplusplus:
1436 /* -nostdinc++ causes no default C++-specific include directories. */
1437 CPP_OPTION (pfile, no_standard_cplusplus_includes) = 1;
1438 break;
1439 case OPT_std_gnu89:
1440 CPP_OPTION (pfile, cplusplus) = 0;
1441 CPP_OPTION (pfile, cplusplus_comments) = 1;
1442 CPP_OPTION (pfile, c89) = 1;
1443 CPP_OPTION (pfile, c99) = 0;
1444 CPP_OPTION (pfile, objc) = 0;
1445 break;
1446 case OPT_std_gnu9x:
1447 case OPT_std_gnu99:
1448 CPP_OPTION (pfile, cplusplus) = 0;
1449 CPP_OPTION (pfile, cplusplus_comments) = 1;
1450 CPP_OPTION (pfile, c89) = 0;
1451 CPP_OPTION (pfile, c99) = 1;
1452 CPP_OPTION (pfile, objc) = 0;
1453 new_pending_directive (CPP_OPTION (pfile, pending),
1454 "__STDC_VERSION__=199901L", cpp_define);
1455 break;
1456 case OPT_std_iso9899_199409:
1457 new_pending_directive (CPP_OPTION (pfile, pending),
1458 "__STDC_VERSION__=199409L", cpp_define);
1459 /* Fall through */
1460 case OPT_std_iso9899_1990:
1461 case OPT_std_c89:
1462 CPP_OPTION (pfile, cplusplus) = 0;
1463 CPP_OPTION (pfile, cplusplus_comments) = 0;
1464 CPP_OPTION (pfile, c89) = 1;
1465 CPP_OPTION (pfile, c99) = 0;
1466 CPP_OPTION (pfile, objc) = 0;
1467 CPP_OPTION (pfile, trigraphs) = 1;
1468 new_pending_directive (CPP_OPTION (pfile, pending),
1469 "__STRICT_ANSI__", cpp_define);
1470 break;
1471 case OPT_std_iso9899_199x:
1472 case OPT_std_iso9899_1999:
1473 case OPT_std_c9x:
1474 case OPT_std_c99:
1475 CPP_OPTION (pfile, cplusplus) = 0;
1476 CPP_OPTION (pfile, cplusplus_comments) = 1;
1477 CPP_OPTION (pfile, c89) = 0;
1478 CPP_OPTION (pfile, c99) = 1;
1479 CPP_OPTION (pfile, objc) = 0;
1480 CPP_OPTION (pfile, trigraphs) = 1;
1481 new_pending_directive (CPP_OPTION (pfile, pending),
1482 "__STRICT_ANSI__", cpp_define);
1483 new_pending_directive (CPP_OPTION (pfile, pending),
1484 "__STDC_VERSION__=199901L", cpp_define);
1485 break;
1486 case OPT_o:
1487 if (CPP_OPTION (pfile, out_fname) != NULL)
1488 {
1489 cpp_fatal (pfile, "Output filename specified twice");
1490 return argc;
1491 }
1492 CPP_OPTION (pfile, out_fname) = arg;
1493 if (!strcmp (CPP_OPTION (pfile, out_fname), "-"))
1494 CPP_OPTION (pfile, out_fname) = "";
1495 break;
1496 case OPT_v:
1497 fprintf (stderr, _("GNU CPP version %s (cpplib)\n"), version_string);
1498 #ifdef TARGET_VERSION
1499 TARGET_VERSION;
1500 #endif
1501 fputc ('\n', stderr);
1502 CPP_OPTION (pfile, verbose) = 1;
1503 break;
1504 case OPT_stdin_stdout:
1505 /* JF handle '-' as file name meaning stdin or stdout */
1506 if (CPP_OPTION (pfile, in_fname) == NULL)
1507 CPP_OPTION (pfile, in_fname) = "";
1508 else if (CPP_OPTION (pfile, out_fname) == NULL)
1509 CPP_OPTION (pfile, out_fname) = "";
1510 break;
1511 case OPT_d:
1512 /* Args to -d specify what parts of macros to dump.
1513 Silently ignore unrecognised options; they may
1514 be aimed at the compiler proper. */
1515 {
1516 char c;
1517
1518 while ((c = *arg++) != '\0')
1519 switch (c)
1520 {
1521 case 'M':
1522 CPP_OPTION (pfile, dump_macros) = dump_only;
1523 CPP_OPTION (pfile, no_output) = 1;
1524 break;
1525 case 'N':
1526 CPP_OPTION (pfile, dump_macros) = dump_names;
1527 break;
1528 case 'D':
1529 CPP_OPTION (pfile, dump_macros) = dump_definitions;
1530 break;
1531 case 'I':
1532 CPP_OPTION (pfile, dump_includes) = 1;
1533 break;
1534 }
1535 }
1536 break;
1537 /* The style of the choices here is a bit mixed.
1538 The chosen scheme is a hybrid of keeping all options in one string
1539 and specifying each option in a separate argument:
1540 -M|-MM|-MD file|-MMD file [-MG]. An alternative is:
1541 -M|-MM|-MD file|-MMD file|-MG|-MMG; or more concisely:
1542 -M[M][G][D file]. This is awkward to handle in specs, and is not
1543 as extensible. */
1544 /* ??? -MG must be specified in addition to one of -M or -MM.
1545 This can be relaxed in the future without breaking anything.
1546 The converse isn't true. */
1547
1548 /* -MG isn't valid with -MD or -MMD. This is checked for later. */
1549 case OPT_MG:
1550 CPP_OPTION (pfile, print_deps_missing_files) = 1;
1551 break;
1552 case OPT_M:
1553 case OPT_MD:
1554 case OPT_MM:
1555 case OPT_MMD:
1556 if (opt_code == OPT_M || opt_code == OPT_MD)
1557 CPP_OPTION (pfile, print_deps) = 2;
1558 else
1559 CPP_OPTION (pfile, print_deps) = 1;
1560
1561 /* For -MD and -MMD options, write deps on file named by next arg */
1562 /* For -M and -MM, write deps on standard output
1563 and suppress the usual output. */
1564 if (opt_code == OPT_MD || opt_code == OPT_MMD)
1565 CPP_OPTION (pfile, deps_file) = arg;
1566 else
1567 CPP_OPTION (pfile, no_output) = 1;
1568 break;
1569 case OPT_A:
1570 if (arg[0] == '-')
1571 {
1572 /* -A with an argument beginning with '-' acts as
1573 #unassert on whatever immediately follows the '-'.
1574 If "-" is the whole argument, we eliminate all
1575 predefined macros and assertions, including those
1576 that were specified earlier on the command line.
1577 That way we can get rid of any that were passed
1578 automatically in from GCC. */
1579
1580 if (arg[1] == '\0')
1581 {
1582 struct pending_option *o1, *o2;
1583
1584 o1 = CPP_OPTION (pfile, pending)->directive_head;
1585 while (o1)
1586 {
1587 o2 = o1->next;
1588 free (o1);
1589 o1 = o2;
1590 }
1591 CPP_OPTION (pfile, pending)->directive_head = NULL;
1592 CPP_OPTION (pfile, pending)->directive_tail = NULL;
1593 }
1594 else
1595 new_pending_directive (CPP_OPTION (pfile, pending),
1596 arg + 1, cpp_unassert);
1597 }
1598 else
1599 new_pending_directive (CPP_OPTION (pfile, pending),
1600 arg, cpp_assert);
1601 break;
1602 case OPT_U:
1603 new_pending_directive (CPP_OPTION (pfile, pending), arg, cpp_undef);
1604 break;
1605 case OPT_I: /* Add directory to path for includes. */
1606 if (!strcmp (arg, "-"))
1607 {
1608 /* -I- means:
1609 Use the preceding -I directories for #include "..."
1610 but not #include <...>.
1611 Don't search the directory of the present file
1612 for #include "...". (Note that -I. -I- is not the same as
1613 the default setup; -I. uses the compiler's working dir.) */
1614 if (! CPP_OPTION (pfile, ignore_srcdir))
1615 {
1616 struct cpp_pending *pend = CPP_OPTION (pfile, pending);
1617 pend->quote_head = pend->brack_head;
1618 pend->quote_tail = pend->brack_tail;
1619 pend->brack_head = 0;
1620 pend->brack_tail = 0;
1621 CPP_OPTION (pfile, ignore_srcdir) = 1;
1622 }
1623 else
1624 {
1625 cpp_fatal (pfile, "-I- specified twice");
1626 return argc;
1627 }
1628 }
1629 else
1630 append_include_chain (pfile, CPP_OPTION (pfile, pending),
1631 xstrdup (arg), BRACKET, 0);
1632 break;
1633 case OPT_isystem:
1634 /* Add directory to beginning of system include path, as a system
1635 include directory. */
1636 append_include_chain (pfile, CPP_OPTION (pfile, pending),
1637 xstrdup (arg), SYSTEM, 0);
1638 break;
1639 case OPT_include:
1640 {
1641 struct pending_option *o = (struct pending_option *)
1642 xmalloc (sizeof (struct pending_option));
1643 o->arg = arg;
1644
1645 /* This list has to be built in reverse order so that
1646 when cpp_start_read pushes all the -include files onto
1647 the buffer stack, they will be scanned in forward order. */
1648 o->next = CPP_OPTION (pfile, pending)->include_head;
1649 CPP_OPTION (pfile, pending)->include_head = o;
1650 }
1651 break;
1652 case OPT_imacros:
1653 {
1654 struct pending_option *o = (struct pending_option *)
1655 xmalloc (sizeof (struct pending_option));
1656 o->arg = arg;
1657 o->next = NULL;
1658
1659 APPEND (CPP_OPTION (pfile, pending), imacros, o);
1660 }
1661 break;
1662 case OPT_iwithprefix:
1663 /* Add directory to end of path for includes,
1664 with the default prefix at the front of its name. */
1665 /* fall through */
1666 case OPT_iwithprefixbefore:
1667 /* Add directory to main path for includes,
1668 with the default prefix at the front of its name. */
1669 {
1670 char *fname;
1671 int len;
1672
1673 len = strlen (arg);
1674
1675 if (CPP_OPTION (pfile, include_prefix) != 0)
1676 {
1677 size_t ipl = CPP_OPTION (pfile, include_prefix_len);
1678 fname = xmalloc (ipl + len + 1);
1679 memcpy (fname, CPP_OPTION (pfile, include_prefix), ipl);
1680 memcpy (fname + ipl, arg, len + 1);
1681 }
1682 else
1683 {
1684 fname = xmalloc (sizeof GCC_INCLUDE_DIR - 8 + len);
1685 memcpy (fname, GCC_INCLUDE_DIR, sizeof GCC_INCLUDE_DIR - 9);
1686 memcpy (fname + sizeof GCC_INCLUDE_DIR - 9, arg, len + 1);
1687 }
1688
1689 append_include_chain (pfile, CPP_OPTION (pfile, pending), fname,
1690 opt_code == OPT_iwithprefix ? SYSTEM: BRACKET, 0);
1691 }
1692 break;
1693 case OPT_idirafter:
1694 /* Add directory to end of path for includes. */
1695 append_include_chain (pfile, CPP_OPTION (pfile, pending),
1696 xstrdup (arg), AFTER, 0);
1697 break;
1698 case OPT_W:
1699 /* Silently ignore unrecognised options */
1700 if (!strcmp (argv[i], "-Wall"))
1701 {
1702 CPP_OPTION (pfile, warn_trigraphs) = 1;
1703 CPP_OPTION (pfile, warn_comments) = 1;
1704 }
1705 else if (!strcmp (argv[i], "-Wtraditional"))
1706 CPP_OPTION (pfile, warn_traditional) = 1;
1707 else if (!strcmp (argv[i], "-Wtrigraphs"))
1708 CPP_OPTION (pfile, warn_trigraphs) = 1;
1709 else if (!strcmp (argv[i], "-Wcomment"))
1710 CPP_OPTION (pfile, warn_comments) = 1;
1711 else if (!strcmp (argv[i], "-Wcomments"))
1712 CPP_OPTION (pfile, warn_comments) = 1;
1713 else if (!strcmp (argv[i], "-Wundef"))
1714 CPP_OPTION (pfile, warn_undef) = 1;
1715 else if (!strcmp (argv[i], "-Wimport"))
1716 CPP_OPTION (pfile, warn_import) = 1;
1717 else if (!strcmp (argv[i], "-Werror"))
1718 CPP_OPTION (pfile, warnings_are_errors) = 1;
1719 else if (!strcmp (argv[i], "-Wno-traditional"))
1720 CPP_OPTION (pfile, warn_traditional) = 0;
1721 else if (!strcmp (argv[i], "-Wno-trigraphs"))
1722 CPP_OPTION (pfile, warn_trigraphs) = 0;
1723 else if (!strcmp (argv[i], "-Wno-comment"))
1724 CPP_OPTION (pfile, warn_comments) = 0;
1725 else if (!strcmp (argv[i], "-Wno-comments"))
1726 CPP_OPTION (pfile, warn_comments) = 0;
1727 else if (!strcmp (argv[i], "-Wno-undef"))
1728 CPP_OPTION (pfile, warn_undef) = 0;
1729 else if (!strcmp (argv[i], "-Wno-import"))
1730 CPP_OPTION (pfile, warn_import) = 0;
1731 else if (!strcmp (argv[i], "-Wno-error"))
1732 CPP_OPTION (pfile, warnings_are_errors) = 0;
1733 break;
1734 }
1735 }
1736 return i + 1;
1737 }
1738
1739 #ifdef HOST_EBCDIC
1740 static int
1741 opt_comp (const void *p1, const void *p2)
1742 {
1743 return strcmp (((struct cl_option *)p1)->opt_text,
1744 ((struct cl_option *)p2)->opt_text);
1745 }
1746 #endif
1747
1748 /* Handle command-line options in (argc, argv).
1749 Can be called multiple times, to handle multiple sets of options.
1750 Returns if an unrecognized option is seen.
1751 Returns number of strings consumed. */
1752 int
1753 cpp_handle_options (pfile, argc, argv)
1754 cpp_reader *pfile;
1755 int argc;
1756 char **argv;
1757 {
1758 int i;
1759 int strings_processed;
1760
1761 #ifdef HOST_EBCDIC
1762 static int opts_sorted = 0;
1763
1764 if (!opts_sorted)
1765 {
1766 opts_sorted = 1;
1767 /* For non-ASCII hosts, the array needs to be sorted at runtime */
1768 qsort (cl_options, N_OPTS, sizeof (struct cl_option), opt_comp);
1769 }
1770 #endif
1771
1772 for (i = 0; i < argc; i += strings_processed)
1773 {
1774 strings_processed = handle_option (pfile, argc - i, argv + i);
1775 if (strings_processed == 0)
1776 break;
1777 }
1778 return i;
1779 }
1780
1781 static void
1782 print_help ()
1783 {
1784 fprintf (stderr, _("Usage: %s [switches] input output\n"), progname);
1785 fputs (_("\
1786 Switches:\n\
1787 -include <file> Include the contents of <file> before other files\n\
1788 -imacros <file> Accept definition of macros in <file>\n\
1789 -iprefix <path> Specify <path> as a prefix for next two options\n\
1790 -iwithprefix <dir> Add <dir> to the end of the system include path\n\
1791 -iwithprefixbefore <dir> Add <dir> to the end of the main include path\n\
1792 -isystem <dir> Add <dir> to the start of the system include path\n\
1793 -idirafter <dir> Add <dir> to the end of the system include path\n\
1794 -I <dir> Add <dir> to the end of the main include path\n\
1795 -I- Fine-grained include path control; see info docs\n\
1796 -nostdinc Do not search system include directories\n\
1797 (dirs specified with -isystem will still be used)\n\
1798 -nostdinc++ Do not search system include directories for C++\n\
1799 -o <file> Put output into <file>\n\
1800 -pedantic Issue all warnings demanded by strict ANSI C\n\
1801 -pedantic-errors Issue -pedantic warnings as errors instead\n\
1802 -traditional Follow K&R pre-processor behaviour\n\
1803 -trigraphs Support ANSI C trigraphs\n\
1804 -lang-c Assume that the input sources are in C\n\
1805 -lang-c89 Assume that the input sources are in C89\n\
1806 -lang-c++ Assume that the input sources are in C++\n\
1807 -lang-objc Assume that the input sources are in ObjectiveC\n\
1808 -lang-objc++ Assume that the input sources are in ObjectiveC++\n\
1809 -lang-asm Assume that the input sources are in assembler\n\
1810 -lang-fortran Assume that the input sources are in Fortran\n\
1811 -lang-chill Assume that the input sources are in Chill\n\
1812 -std=<std name> Specify the conformance standard; one of:\n\
1813 gnu89, gnu99, c89, c99, iso9899:1990,\n\
1814 iso9899:199409, iso9899:1999\n\
1815 -+ Allow parsing of C++ style features\n\
1816 -w Inhibit warning messages\n\
1817 -Wtrigraphs Warn if trigraphs are encountered\n\
1818 -Wno-trigraphs Do not warn about trigraphs\n\
1819 -Wcomment{s} Warn if one comment starts inside another\n\
1820 -Wno-comment{s} Do not warn about comments\n\
1821 -Wtraditional Warn if a macro argument is/would be turned into\n\
1822 a string if -traditional is specified\n\
1823 -Wno-traditional Do not warn about stringification\n\
1824 -Wundef Warn if an undefined macro is used by #if\n\
1825 -Wno-undef Do not warn about testing undefined macros\n\
1826 -Wimport Warn about the use of the #import directive\n\
1827 -Wno-import Do not warn about the use of #import\n\
1828 -Werror Treat all warnings as errors\n\
1829 -Wno-error Do not treat warnings as errors\n\
1830 -Wall Enable all preprocessor warnings\n\
1831 -M Generate make dependencies\n\
1832 -MM As -M, but ignore system header files\n\
1833 -MD As -M, but put output in a .d file\n\
1834 -MMD As -MD, but ignore system header files\n\
1835 -MG Treat missing header file as generated files\n\
1836 -g3 Include #define and #undef directives in the output\n\
1837 -D<macro> Define a <macro> with string '1' as its value\n\
1838 -D<macro>=<val> Define a <macro> with <val> as its value\n\
1839 -A<question> (<answer>) Assert the <answer> to <question>\n\
1840 -A-<question> (<answer>) Disable the <answer> to <question>\n\
1841 -U<macro> Undefine <macro> \n\
1842 -v Display the version number\n\
1843 -H Print the name of header files as they are used\n\
1844 -C Do not discard comments\n\
1845 -dM Display a list of macro definitions active at end\n\
1846 -dD Preserve macro definitions in output\n\
1847 -dN As -dD except that only the names are preserved\n\
1848 -dI Include #include directives in the output\n\
1849 -ftabstop=<number> Distance between tab stops for column reporting\n\
1850 -P Do not generate #line directives\n\
1851 -$ Do not allow '$' in identifiers\n\
1852 -remap Remap file names when including files.\n\
1853 --version Display version information\n\
1854 -h or --help Display this information\n\
1855 "), stdout);
1856 }
This page took 0.123694 seconds and 5 git commands to generate.