1 /* CPP Library. 2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 3 1999, 2000, 2001, 2002 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 "cpplib.h" 25 #include "cpphash.h" 26 #include "prefix.h" 27 #include "intl.h" 28 #include "mkdeps.h" 29 #include "cppdefault.h" 30 31 /* Windows does not natively support inodes, and neither does MSDOS. 32 Cygwin's emulation can generate non-unique inodes, so don't use it. 33 VMS has non-numeric inodes. */ 34 #ifdef VMS 35 # define INO_T_EQ(A, B) (!memcmp (&(A), &(B), sizeof (A))) 36 # define INO_T_COPY(DEST, SRC) memcpy(&(DEST), &(SRC), sizeof (SRC)) 37 #else 38 # if (defined _WIN32 && ! defined (_UWIN)) || defined __MSDOS__ 39 # define INO_T_EQ(A, B) 0 40 # else 41 # define INO_T_EQ(A, B) ((A) == (B)) 42 # endif 43 # define INO_T_COPY(DEST, SRC) (DEST) = (SRC) 44 #endif 45 46 /* Internal structures and prototypes. */ 47 48 /* A `struct pending_option' remembers one -D, -A, -U, -include, or 49 -imacros switch. */ 50 typedef void (* cl_directive_handler) PARAMS ((cpp_reader *, const char *)); 51 struct pending_option 52 { 53 struct pending_option *next; 54 const char *arg; 55 cl_directive_handler handler; 56 }; 57 58 /* The `pending' structure accumulates all the options that are not 59 actually processed until we hit cpp_read_main_file. It consists of 60 several lists, one for each type of option. We keep both head and 61 tail pointers for quick insertion. */ 62 struct cpp_pending 63 { 64 struct pending_option *directive_head, *directive_tail; 65 66 struct search_path *quote_head, *quote_tail; 67 struct search_path *brack_head, *brack_tail; 68 struct search_path *systm_head, *systm_tail; 69 struct search_path *after_head, *after_tail; 70 71 struct pending_option *imacros_head, *imacros_tail; 72 struct pending_option *include_head, *include_tail; 73 }; 74 75 #ifdef __STDC__ 76 #define APPEND(pend, list, elt) \ 77 do { if (!(pend)->list##_head) (pend)->list##_head = (elt); \ 78 else (pend)->list##_tail->next = (elt); \ 79 (pend)->list##_tail = (elt); \ 80 } while (0) 81 #else 82 #define APPEND(pend, list, elt) \ 83 do { if (!(pend)->list/**/_head) (pend)->list/**/_head = (elt); \ 84 else (pend)->list/**/_tail->next = (elt); \ 85 (pend)->list/**/_tail = (elt); \ 86 } while (0) 87 #endif 88 89 static void path_include PARAMS ((cpp_reader *, 90 char *, int)); 91 static void init_library PARAMS ((void)); 92 static void init_builtins PARAMS ((cpp_reader *)); 93 static void mark_named_operators PARAMS ((cpp_reader *)); 94 static void append_include_chain PARAMS ((cpp_reader *, 95 char *, int, int)); 96 static struct search_path * remove_dup_dir PARAMS ((cpp_reader *, 97 struct search_path *, 98 struct search_path **)); 99 static struct search_path * remove_dup_nonsys_dirs PARAMS ((cpp_reader *, 100 struct search_path **, 101 struct search_path *)); 102 static struct search_path * remove_dup_dirs PARAMS ((cpp_reader *, 103 struct search_path **)); 104 static void merge_include_chains PARAMS ((cpp_reader *)); 105 static bool push_include PARAMS ((cpp_reader *, 106 struct pending_option *)); 107 static void free_chain PARAMS ((struct pending_option *)); 108 static void init_standard_includes PARAMS ((cpp_reader *)); 109 static void read_original_filename PARAMS ((cpp_reader *)); 110 static void new_pending_directive PARAMS ((struct cpp_pending *, 111 const char *, 112 cl_directive_handler)); 113 static int parse_option PARAMS ((const char *)); 114 static void post_options PARAMS ((cpp_reader *)); 115 116 /* Fourth argument to append_include_chain: chain to use. 117 Note it's never asked to append to the quote chain. */ 118 enum { BRACKET = 0, SYSTEM, AFTER }; 119 120 /* If we have designated initializers (GCC >2.7) these tables can be 121 initialized, constant data. Otherwise, they have to be filled in at 122 runtime. */ 123 #if HAVE_DESIGNATED_INITIALIZERS 124 125 #define init_trigraph_map() /* Nothing. */ 126 #define TRIGRAPH_MAP \ 127 __extension__ const uchar _cpp_trigraph_map[UCHAR_MAX + 1] = { 128 129 #define END }; 130 #define s(p, v) [p] = v, 131 132 #else 133 134 #define TRIGRAPH_MAP uchar _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \ 135 static void init_trigraph_map PARAMS ((void)) { \ 136 unsigned char *x = _cpp_trigraph_map; 137 138 #define END } 139 #define s(p, v) x[p] = v; 140 141 #endif 142 143 TRIGRAPH_MAP 144 s('=', '#') s(')', ']') s('!', '|') 145 s('(', '[') s('\'', '^') s('>', '}') 146 s('/', '\\') s('<', '{') s('-', '~') 147 END 148 149 #undef s 150 #undef END 151 #undef TRIGRAPH_MAP 152 153 /* Given a colon-separated list of file names PATH, 154 add all the names to the search path for include files. */ 155 static void 156 path_include (pfile, list, path) 157 cpp_reader *pfile; 158 char *list; 159 int path; 160 { 161 char *p, *q, *name; 162 163 p = list; 164 165 do 166 { 167 /* Find the end of this name. */ 168 q = p; 169 while (*q != 0 && *q != PATH_SEPARATOR) q++; 170 if (q == p) 171 { 172 /* An empty name in the path stands for the current directory. */ 173 name = (char *) xmalloc (2); 174 name[0] = '.'; 175 name[1] = 0; 176 } 177 else 178 { 179 /* Otherwise use the directory that is named. */ 180 name = (char *) xmalloc (q - p + 1); 181 memcpy (name, p, q - p); 182 name[q - p] = 0; 183 } 184 185 append_include_chain (pfile, name, path, path == SYSTEM); 186 187 /* Advance past this name. */ 188 if (*q == 0) 189 break; 190 p = q + 1; 191 } 192 while (1); 193 } 194 195 /* Append DIR to include path PATH. DIR must be allocated on the 196 heap; this routine takes responsibility for freeing it. CXX_AWARE 197 is nonzero if the header contains extern "C" guards for C++, 198 otherwise it is zero. */ 199 static void 200 append_include_chain (pfile, dir, path, cxx_aware) 201 cpp_reader *pfile; 202 char *dir; 203 int path; 204 int cxx_aware; 205 { 206 struct cpp_pending *pend = CPP_OPTION (pfile, pending); 207 struct search_path *new; 208 struct stat st; 209 unsigned int len; 210 211 if (*dir == '\0') 212 { 213 free (dir); 214 dir = xstrdup ("."); 215 } 216 _cpp_simplify_pathname (dir); 217 218 if (stat (dir, &st)) 219 { 220 /* Dirs that don't exist are silently ignored. */ 221 if (errno != ENOENT) 222 cpp_errno (pfile, DL_ERROR, dir); 223 else if (CPP_OPTION (pfile, verbose)) 224 fprintf (stderr, _("ignoring nonexistent directory \"%s\"\n"), dir); 225 free (dir); 226 return; 227 } 228 229 if (!S_ISDIR (st.st_mode)) 230 { 231 cpp_error_with_line (pfile, DL_ERROR, 0, 0, "%s: Not a directory", dir); 232 free (dir); 233 return; 234 } 235 236 len = strlen (dir); 237 if (len > pfile->max_include_len) 238 pfile->max_include_len = len; 239 240 new = (struct search_path *) xmalloc (sizeof (struct search_path)); 241 new->name = dir; 242 new->len = len; 243 INO_T_COPY (new->ino, st.st_ino); 244 new->dev = st.st_dev; 245 /* Both systm and after include file lists should be treated as system 246 include files since these two lists are really just a concatenation 247 of one "system" list. */ 248 if (path == SYSTEM || path == AFTER) 249 new->sysp = cxx_aware ? 1 : 2; 250 else 251 new->sysp = 0; 252 new->name_map = NULL; 253 new->next = NULL; 254 255 switch (path) 256 { 257 case BRACKET: APPEND (pend, brack, new); break; 258 case SYSTEM: APPEND (pend, systm, new); break; 259 case AFTER: APPEND (pend, after, new); break; 260 } 261 } 262 263 /* Handle a duplicated include path. PREV is the link in the chain 264 before the duplicate, or NULL if the duplicate is at the head of 265 the chain. The duplicate is removed from the chain and freed. 266 Returns PREV. */ 267 static struct search_path * 268 remove_dup_dir (pfile, prev, head_ptr) 269 cpp_reader *pfile; 270 struct search_path *prev; 271 struct search_path **head_ptr; 272 { 273 struct search_path *cur; 274 275 if (prev != NULL) 276 { 277 cur = prev->next; 278 prev->next = cur->next; 279 } 280 else 281 { 282 cur = *head_ptr; 283 *head_ptr = cur->next; 284 } 285 286 if (CPP_OPTION (pfile, verbose)) 287 fprintf (stderr, _("ignoring duplicate directory \"%s\"\n"), cur->name); 288 289 free ((PTR) cur->name); 290 free (cur); 291 292 return prev; 293 } 294 295 /* Remove duplicate non-system directories for which there is an equivalent 296 system directory latter in the chain. The range for removal is between 297 *HEAD_PTR and END. Returns the directory before END, or NULL if none. 298 This algorithm is quadratic in the number system directories, which is 299 acceptable since there aren't usually that many of them. */ 300 static struct search_path * 301 remove_dup_nonsys_dirs (pfile, head_ptr, end) 302 cpp_reader *pfile; 303 struct search_path **head_ptr; 304 struct search_path *end; 305 { 306 int sysdir = 0; 307 struct search_path *prev = NULL, *cur, *other; 308 309 for (cur = *head_ptr; cur; cur = cur->next) 310 { 311 if (cur->sysp) 312 { 313 sysdir = 1; 314 for (other = *head_ptr, prev = NULL; 315 other != end; 316 other = other ? other->next : *head_ptr) 317 { 318 if (!other->sysp 319 && INO_T_EQ (cur->ino, other->ino) 320 && cur->dev == other->dev) 321 { 322 other = remove_dup_dir (pfile, prev, head_ptr); 323 if (CPP_OPTION (pfile, verbose)) 324 fprintf (stderr, 325 _(" as it is a non-system directory that duplicates a system directory\n")); 326 } 327 prev = other; 328 } 329 } 330 } 331 332 if (!sysdir) 333 for (cur = *head_ptr; cur != end; cur = cur->next) 334 prev = cur; 335 336 return prev; 337 } 338 339 /* Remove duplicate directories from a chain. Returns the tail of the 340 chain, or NULL if the chain is empty. This algorithm is quadratic 341 in the number of -I switches, which is acceptable since there 342 aren't usually that many of them. */ 343 static struct search_path * 344 remove_dup_dirs (pfile, head_ptr) 345 cpp_reader *pfile; 346 struct search_path **head_ptr; 347 { 348 struct search_path *prev = NULL, *cur, *other; 349 350 for (cur = *head_ptr; cur; cur = cur->next) 351 { 352 for (other = *head_ptr; other != cur; other = other->next) 353 if (INO_T_EQ (cur->ino, other->ino) && cur->dev == other->dev) 354 { 355 cur = remove_dup_dir (pfile, prev, head_ptr); 356 break; 357 } 358 prev = cur; 359 } 360 361 return prev; 362 } 363 364 /* Merge the four include chains together in the order quote, bracket, 365 system, after. Remove duplicate dirs (as determined by 366 INO_T_EQ()). The system_include and after_include chains are never 367 referred to again after this function; all access is through the 368 bracket_include path. */ 369 static void 370 merge_include_chains (pfile) 371 cpp_reader *pfile; 372 { 373 struct search_path *quote, *brack, *systm, *qtail; 374 375 struct cpp_pending *pend = CPP_OPTION (pfile, pending); 376 377 quote = pend->quote_head; 378 brack = pend->brack_head; 379 systm = pend->systm_head; 380 qtail = pend->quote_tail; 381 382 /* Paste together bracket, system, and after include chains. */ 383 if (systm) 384 pend->systm_tail->next = pend->after_head; 385 else 386 systm = pend->after_head; 387 388 if (brack) 389 pend->brack_tail->next = systm; 390 else 391 brack = systm; 392 393 /* This is a bit tricky. First we drop non-system dupes of system 394 directories from the merged bracket-include list. Next we drop 395 dupes from the bracket and quote include lists. Then we drop 396 non-system dupes from the merged quote-include list. Finally, 397 if qtail and brack are the same directory, we cut out brack and 398 move brack up to point to qtail. 399 400 We can't just merge the lists and then uniquify them because 401 then we may lose directories from the <> search path that should 402 be there; consider -Ifoo -Ibar -I- -Ifoo -Iquux. It is however 403 safe to treat -Ibar -Ifoo -I- -Ifoo -Iquux as if written 404 -Ibar -I- -Ifoo -Iquux. */ 405 406 remove_dup_nonsys_dirs (pfile, &brack, systm); 407 remove_dup_dirs (pfile, &brack); 408 409 if (quote) 410 { 411 qtail = remove_dup_dirs (pfile, "e); 412 qtail->next = brack; 413 414 qtail = remove_dup_nonsys_dirs (pfile, "e, brack); 415 416 /* If brack == qtail, remove brack as it's simpler. */ 417 if (qtail && brack && INO_T_EQ (qtail->ino, brack->ino) 418 && qtail->dev == brack->dev) 419 brack = remove_dup_dir (pfile, qtail, "e); 420 } 421 else 422 quote = brack; 423 424 CPP_OPTION (pfile, quote_include) = quote; 425 CPP_OPTION (pfile, bracket_include) = brack; 426 } 427 428 /* A set of booleans indicating what CPP features each source language 429 requires. */ 430 struct lang_flags 431 { 432 char c99; 433 char cplusplus; 434 char extended_numbers; 435 char std; 436 char dollars_in_ident; 437 char cplusplus_comments; 438 char digraphs; 439 }; 440 441 /* ??? Enable $ in identifiers in assembly? */ 442 static const struct lang_flags lang_defaults[] = 443 { /* c99 c++ xnum std dollar c++comm digr */ 444 /* GNUC89 */ { 0, 0, 1, 0, 1, 1, 1 }, 445 /* GNUC99 */ { 1, 0, 1, 0, 1, 1, 1 }, 446 /* STDC89 */ { 0, 0, 0, 1, 0, 0, 0 }, 447 /* STDC94 */ { 0, 0, 0, 1, 0, 0, 1 }, 448 /* STDC99 */ { 1, 0, 1, 1, 0, 1, 1 }, 449 /* GNUCXX */ { 0, 1, 1, 0, 1, 1, 1 }, 450 /* CXX98 */ { 0, 1, 1, 1, 0, 1, 1 }, 451 /* ASM */ { 0, 0, 1, 0, 0, 1, 0 } 452 }; 453 454 /* Sets internal flags correctly for a given language. */ 455 void 456 cpp_set_lang (pfile, lang) 457 cpp_reader *pfile; 458 enum c_lang lang; 459 { 460 const struct lang_flags *l = &lang_defaults[(int) lang]; 461 462 CPP_OPTION (pfile, lang) = lang; 463 464 CPP_OPTION (pfile, c99) = l->c99; 465 CPP_OPTION (pfile, cplusplus) = l->cplusplus; 466 CPP_OPTION (pfile, extended_numbers) = l->extended_numbers; 467 CPP_OPTION (pfile, std) = l->std; 468 CPP_OPTION (pfile, trigraphs) = l->std; 469 CPP_OPTION (pfile, dollars_in_ident) = l->dollars_in_ident; 470 CPP_OPTION (pfile, cplusplus_comments) = l->cplusplus_comments; 471 CPP_OPTION (pfile, digraphs) = l->digraphs; 472 } 473 474 #ifdef HOST_EBCDIC 475 static int opt_comp PARAMS ((const void *, const void *)); 476 477 /* Run-time sorting of options array. */ 478 static int 479 opt_comp (p1, p2) 480 const void *p1, *p2; 481 { 482 return strcmp (((struct cl_option *) p1)->opt_text, 483 ((struct cl_option *) p2)->opt_text); 484 } 485 #endif 486 487 /* init initializes library global state. It might not need to 488 do anything depending on the platform and compiler. */ 489 static void 490 init_library () 491 { 492 static int initialized = 0; 493 494 if (! initialized) 495 { 496 initialized = 1; 497 498 #ifdef HOST_EBCDIC 499 /* For non-ASCII hosts, the cl_options array needs to be sorted at 500 runtime. */ 501 qsort (cl_options, N_OPTS, sizeof (struct cl_option), opt_comp); 502 #endif 503 504 /* Set up the trigraph map. This doesn't need to do anything if 505 we were compiled with a compiler that supports C99 designated 506 initializers. */ 507 init_trigraph_map (); 508 } 509 } 510 511 /* Initialize a cpp_reader structure. */ 512 cpp_reader * 513 cpp_create_reader (lang) 514 enum c_lang lang; 515 { 516 cpp_reader *pfile; 517 518 /* Initialize this instance of the library if it hasn't been already. */ 519 init_library (); 520 521 pfile = (cpp_reader *) xcalloc (1, sizeof (cpp_reader)); 522 523 cpp_set_lang (pfile, lang); 524 CPP_OPTION (pfile, warn_import) = 1; 525 CPP_OPTION (pfile, warn_multichar) = 1; 526 CPP_OPTION (pfile, discard_comments) = 1; 527 CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1; 528 CPP_OPTION (pfile, show_column) = 1; 529 CPP_OPTION (pfile, tabstop) = 8; 530 CPP_OPTION (pfile, operator_names) = 1; 531 CPP_OPTION (pfile, warn_endif_labels) = 1; 532 CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99); 533 534 CPP_OPTION (pfile, pending) = 535 (struct cpp_pending *) xcalloc (1, sizeof (struct cpp_pending)); 536 537 /* Default CPP arithmetic to something sensible for the host for the 538 benefit of dumb users like fix-header. */ 539 CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long); 540 CPP_OPTION (pfile, char_precision) = CHAR_BIT; 541 CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int); 542 CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int); 543 CPP_OPTION (pfile, unsigned_char) = 0; 544 CPP_OPTION (pfile, unsigned_wchar) = 1; 545 546 /* Initialize the line map. Start at logical line 1, so we can use 547 a line number of zero for special states. */ 548 init_line_maps (&pfile->line_maps); 549 pfile->line = 1; 550 551 /* Initialize lexer state. */ 552 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments); 553 554 /* Set up static tokens. */ 555 pfile->avoid_paste.type = CPP_PADDING; 556 pfile->avoid_paste.val.source = NULL; 557 pfile->eof.type = CPP_EOF; 558 pfile->eof.flags = 0; 559 560 /* Create a token buffer for the lexer. */ 561 _cpp_init_tokenrun (&pfile->base_run, 250); 562 pfile->cur_run = &pfile->base_run; 563 pfile->cur_token = pfile->base_run.base; 564 565 /* Initialize the base context. */ 566 pfile->context = &pfile->base_context; 567 pfile->base_context.macro = 0; 568 pfile->base_context.prev = pfile->base_context.next = 0; 569 570 /* Aligned and unaligned storage. */ 571 pfile->a_buff = _cpp_get_buff (pfile, 0); 572 pfile->u_buff = _cpp_get_buff (pfile, 0); 573 574 /* The expression parser stack. */ 575 _cpp_expand_op_stack (pfile); 576 577 /* Initialize the buffer obstack. */ 578 gcc_obstack_init (&pfile->buffer_ob); 579 580 _cpp_init_includes (pfile); 581 582 return pfile; 583 } 584 585 /* Free resources used by PFILE. Accessing PFILE after this function 586 returns leads to undefined behavior. Returns the error count. */ 587 void 588 cpp_destroy (pfile) 589 cpp_reader *pfile; 590 { 591 struct search_path *dir, *dirn; 592 cpp_context *context, *contextn; 593 tokenrun *run, *runn; 594 595 free_chain (CPP_OPTION (pfile, pending)->include_head); 596 free (CPP_OPTION (pfile, pending)); 597 free (pfile->op_stack); 598 599 while (CPP_BUFFER (pfile) != NULL) 600 _cpp_pop_buffer (pfile); 601 602 if (pfile->out.base) 603 free (pfile->out.base); 604 605 if (pfile->macro_buffer) 606 { 607 free ((PTR) pfile->macro_buffer); 608 pfile->macro_buffer = NULL; 609 pfile->macro_buffer_len = 0; 610 } 611 612 if (pfile->deps) 613 deps_free (pfile->deps); 614 obstack_free (&pfile->buffer_ob, 0); 615 616 _cpp_destroy_hashtable (pfile); 617 _cpp_cleanup_includes (pfile); 618 619 _cpp_free_buff (pfile->a_buff); 620 _cpp_free_buff (pfile->u_buff); 621 _cpp_free_buff (pfile->free_buffs); 622 623 for (run = &pfile->base_run; run; run = runn) 624 { 625 runn = run->next; 626 free (run->base); 627 if (run != &pfile->base_run) 628 free (run); 629 } 630 631 for (dir = CPP_OPTION (pfile, quote_include); dir; dir = dirn) 632 { 633 dirn = dir->next; 634 free ((PTR) dir->name); 635 free (dir); 636 } 637 638 for (context = pfile->base_context.next; context; context = contextn) 639 { 640 contextn = context->next; 641 free (context); 642 } 643 644 free_line_maps (&pfile->line_maps); 645 free (pfile); 646 } 647 648 /* This structure defines one built-in identifier. A node will be 649 entered in the hash table under the name NAME, with value VALUE. 650 651 There are two tables of these. builtin_array holds all the 652 "builtin" macros: these are handled by builtin_macro() in 653 cppmacro.c. Builtin is somewhat of a misnomer -- the property of 654 interest is that these macros require special code to compute their 655 expansions. The value is a "builtin_type" enumerator. 656 657 operator_array holds the C++ named operators. These are keywords 658 which act as aliases for punctuators. In C++, they cannot be 659 altered through #define, and #if recognizes them as operators. In 660 C, these are not entered into the hash table at all (but see 661 <iso646.h>). The value is a token-type enumerator. */ 662 struct builtin 663 { 664 const uchar *name; 665 unsigned short len; 666 unsigned short value; 667 }; 668 669 #define B(n, t) { DSC(n), t } 670 static const struct builtin builtin_array[] = 671 { 672 B("__TIME__", BT_TIME), 673 B("__DATE__", BT_DATE), 674 B("__FILE__", BT_FILE), 675 B("__BASE_FILE__", BT_BASE_FILE), 676 B("__LINE__", BT_SPECLINE), 677 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL), 678 /* Keep builtins not used for -traditional-cpp at the end, and 679 update init_builtins() if any more are added. */ 680 B("_Pragma", BT_PRAGMA), 681 B("__STDC__", BT_STDC), 682 }; 683 684 static const struct builtin operator_array[] = 685 { 686 B("and", CPP_AND_AND), 687 B("and_eq", CPP_AND_EQ), 688 B("bitand", CPP_AND), 689 B("bitor", CPP_OR), 690 B("compl", CPP_COMPL), 691 B("not", CPP_NOT), 692 B("not_eq", CPP_NOT_EQ), 693 B("or", CPP_OR_OR), 694 B("or_eq", CPP_OR_EQ), 695 B("xor", CPP_XOR), 696 B("xor_eq", CPP_XOR_EQ) 697 }; 698 #undef B 699 700 /* Mark the C++ named operators in the hash table. */ 701 static void 702 mark_named_operators (pfile) 703 cpp_reader *pfile; 704 { 705 const struct builtin *b; 706 707 for (b = operator_array; 708 b < (operator_array + ARRAY_SIZE (operator_array)); 709 b++) 710 { 711 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len); 712 hp->flags |= NODE_OPERATOR; 713 hp->value.operator = b->value; 714 } 715 } 716 717 /* Subroutine of cpp_read_main_file; reads the builtins table above and 718 enters them, and language-specific macros, into the hash table. */ 719 static void 720 init_builtins (pfile) 721 cpp_reader *pfile; 722 { 723 const struct builtin *b; 724 size_t n = ARRAY_SIZE (builtin_array); 725 726 if (CPP_OPTION (pfile, traditional)) 727 n -= 2; 728 729 for(b = builtin_array; b < builtin_array + n; b++) 730 { 731 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len); 732 hp->type = NT_MACRO; 733 hp->flags |= NODE_BUILTIN | NODE_WARN; 734 hp->value.builtin = b->value; 735 } 736 737 if (CPP_OPTION (pfile, cplusplus)) 738 _cpp_define_builtin (pfile, "__cplusplus 1"); 739 else if (CPP_OPTION (pfile, lang) == CLK_ASM) 740 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1"); 741 else if (CPP_OPTION (pfile, lang) == CLK_STDC94) 742 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L"); 743 else if (CPP_OPTION (pfile, c99)) 744 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L"); 745 746 if (CPP_OPTION (pfile, objc)) 747 _cpp_define_builtin (pfile, "__OBJC__ 1"); 748 749 if (pfile->cb.register_builtins) 750 (*pfile->cb.register_builtins) (pfile); 751 } 752 753 /* And another subroutine. This one sets up the standard include path. */ 754 static void 755 init_standard_includes (pfile) 756 cpp_reader *pfile; 757 { 758 char *path; 759 const struct default_include *p; 760 const char *specd_prefix = CPP_OPTION (pfile, include_prefix); 761 762 /* Several environment variables may add to the include search path. 763 CPATH specifies an additional list of directories to be searched 764 as if specified with -I, while C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, 765 etc. specify an additional list of directories to be searched as 766 if specified with -isystem, for the language indicated. */ 767 768 GET_ENVIRONMENT (path, "CPATH"); 769 if (path != 0 && *path != 0) 770 path_include (pfile, path, BRACKET); 771 772 switch ((CPP_OPTION (pfile, objc) << 1) + CPP_OPTION (pfile, cplusplus)) 773 { 774 case 0: 775 GET_ENVIRONMENT (path, "C_INCLUDE_PATH"); 776 break; 777 case 1: 778 GET_ENVIRONMENT (path, "CPLUS_INCLUDE_PATH"); 779 break; 780 case 2: 781 GET_ENVIRONMENT (path, "OBJC_INCLUDE_PATH"); 782 break; 783 case 3: 784 GET_ENVIRONMENT (path, "OBJCPLUS_INCLUDE_PATH"); 785 break; 786 } 787 if (path != 0 && *path != 0) 788 path_include (pfile, path, SYSTEM); 789 790 /* Search "translated" versions of GNU directories. 791 These have /usr/local/lib/gcc... replaced by specd_prefix. */ 792 if (specd_prefix != 0 && cpp_GCC_INCLUDE_DIR_len) 793 { 794 /* Remove the `include' from /usr/local/lib/gcc.../include. 795 GCC_INCLUDE_DIR will always end in /include. */ 796 int default_len = cpp_GCC_INCLUDE_DIR_len; 797 char *default_prefix = (char *) alloca (default_len + 1); 798 int specd_len = strlen (specd_prefix); 799 800 memcpy (default_prefix, cpp_GCC_INCLUDE_DIR, default_len); 801 default_prefix[default_len] = '\0'; 802 803 for (p = cpp_include_defaults; p->fname; p++) 804 { 805 /* Some standard dirs are only for C++. */ 806 if (!p->cplusplus 807 || (CPP_OPTION (pfile, cplusplus) 808 && !CPP_OPTION (pfile, no_standard_cplusplus_includes))) 809 { 810 /* Does this dir start with the prefix? */ 811 if (!strncmp (p->fname, default_prefix, default_len)) 812 { 813 /* Yes; change prefix and add to search list. */ 814 int flen = strlen (p->fname); 815 int this_len = specd_len + flen - default_len; 816 char *str = (char *) xmalloc (this_len + 1); 817 memcpy (str, specd_prefix, specd_len); 818 memcpy (str + specd_len, 819 p->fname + default_len, 820 flen - default_len + 1); 821 822 append_include_chain (pfile, str, SYSTEM, p->cxx_aware); 823 } 824 } 825 } 826 } 827 828 /* Search ordinary names for GNU include directories. */ 829 for (p = cpp_include_defaults; p->fname; p++) 830 { 831 /* Some standard dirs are only for C++. */ 832 if (!p->cplusplus 833 || (CPP_OPTION (pfile, cplusplus) 834 && !CPP_OPTION (pfile, no_standard_cplusplus_includes))) 835 { 836 char *str = update_path (p->fname, p->component); 837 append_include_chain (pfile, str, SYSTEM, p->cxx_aware); 838 } 839 } 840 } 841 842 /* Pushes a command line -imacro and -include file indicated by P onto 843 the buffer stack. Returns nonzero if successful. */ 844 static bool 845 push_include (pfile, p) 846 cpp_reader *pfile; 847 struct pending_option *p; 848 { 849 cpp_token header; 850 851 /* Later: maybe update this to use the #include "" search path 852 if cpp_read_file fails. */ 853 header.type = CPP_STRING; 854 header.val.str.text = (const unsigned char *) p->arg; 855 header.val.str.len = strlen (p->arg); 856 /* Make the command line directive take up a line. */ 857 pfile->line++; 858 859 return _cpp_execute_include (pfile, &header, IT_CMDLINE); 860 } 861 862 /* Frees a pending_option chain. */ 863 static void 864 free_chain (head) 865 struct pending_option *head; 866 { 867 struct pending_option *next; 868 869 while (head) 870 { 871 next = head->next; 872 free (head); 873 head = next; 874 } 875 } 876 877 /* Sanity-checks are dependent on command-line options, so it is 878 called as a subroutine of cpp_read_main_file (). */ 879 #if ENABLE_CHECKING 880 static void sanity_checks PARAMS ((cpp_reader *)); 881 static void sanity_checks (pfile) 882 cpp_reader *pfile; 883 { 884 cppchar_t test = 0; 885 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part); 886 887 /* Sanity checks for assumptions about CPP arithmetic and target 888 type precisions made by cpplib. */ 889 test--; 890 if (test < 1) 891 cpp_error (pfile, DL_ICE, "cppchar_t must be an unsigned type"); 892 893 if (CPP_OPTION (pfile, precision) > max_precision) 894 cpp_error (pfile, DL_ICE, 895 "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits", 896 (unsigned long) max_precision, 897 (unsigned long) CPP_OPTION (pfile, precision)); 898 899 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision)) 900 cpp_error (pfile, DL_ICE, 901 "CPP arithmetic must be at least as precise as a target int"); 902 903 if (CPP_OPTION (pfile, char_precision) < 8) 904 cpp_error (pfile, DL_ICE, "target char is less than 8 bits wide"); 905 906 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision)) 907 cpp_error (pfile, DL_ICE, 908 "target wchar_t is narrower than target char"); 909 910 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision)) 911 cpp_error (pfile, DL_ICE, 912 "target int is narrower than target char"); 913 914 /* This is assumed in eval_token() and could be fixed if necessary. */ 915 if (sizeof (cppchar_t) > sizeof (cpp_num_part)) 916 cpp_error (pfile, DL_ICE, "CPP half-integer narrower than CPP character"); 917 918 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T) 919 cpp_error (pfile, DL_ICE, 920 "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits", 921 (unsigned long) BITS_PER_CPPCHAR_T, 922 (unsigned long) CPP_OPTION (pfile, wchar_precision)); 923 } 924 #else 925 # define sanity_checks(PFILE) 926 #endif 927 928 /* Add a dependency target. Can be called any number of times before 929 cpp_read_main_file(). If no targets have been added before 930 cpp_read_main_file(), then the default target is used. */ 931 void 932 cpp_add_dependency_target (pfile, target, quote) 933 cpp_reader *pfile; 934 const char *target; 935 int quote; 936 { 937 if (!pfile->deps) 938 pfile->deps = deps_init (); 939 940 deps_add_target (pfile->deps, target, quote); 941 } 942 943 /* This is called after options have been parsed, and partially 944 processed. Setup for processing input from the file named FNAME, 945 or stdin if it is the empty string. Return the original filename 946 on success (e.g. foo.i->foo.c), or NULL on failure. */ 947 const char * 948 cpp_read_main_file (pfile, fname, table) 949 cpp_reader *pfile; 950 const char *fname; 951 hash_table *table; 952 { 953 sanity_checks (pfile); 954 955 post_options (pfile); 956 957 /* The front ends don't set up the hash table until they have 958 finished processing the command line options, so initializing the 959 hashtable is deferred until now. */ 960 _cpp_init_hashtable (pfile, table); 961 962 /* Set up the include search path now. */ 963 if (! CPP_OPTION (pfile, no_standard_includes)) 964 init_standard_includes (pfile); 965 966 merge_include_chains (pfile); 967 968 /* With -v, print the list of dirs to search. */ 969 if (CPP_OPTION (pfile, verbose)) 970 { 971 struct search_path *l; 972 fprintf (stderr, _("#include \"...\" search starts here:\n")); 973 for (l = CPP_OPTION (pfile, quote_include); l; l = l->next) 974 { 975 if (l == CPP_OPTION (pfile, bracket_include)) 976 fprintf (stderr, _("#include <...> search starts here:\n")); 977 fprintf (stderr, " %s\n", l->name); 978 } 979 fprintf (stderr, _("End of search list.\n")); 980 } 981 982 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE) 983 { 984 if (!pfile->deps) 985 pfile->deps = deps_init (); 986 987 /* Set the default target (if there is none already). */ 988 deps_add_default_target (pfile->deps, fname); 989 } 990 991 /* Open the main input file. */ 992 if (!_cpp_read_file (pfile, fname)) 993 return NULL; 994 995 /* Set this here so the client can change the option if it wishes, 996 and after stacking the main file so we don't trace the main 997 file. */ 998 pfile->line_maps.trace_includes = CPP_OPTION (pfile, print_include_names); 999 1000 /* For foo.i, read the original filename foo.c now, for the benefit 1001 of the front ends. */ 1002 if (CPP_OPTION (pfile, preprocessed)) 1003 read_original_filename (pfile); 1004 1005 return pfile->map->to_file; 1006 } 1007 1008 /* For preprocessed files, if the first tokens are of the form # NUM. 1009 handle the directive so we know the original file name. This will 1010 generate file_change callbacks, which the front ends must handle 1011 appropriately given their state of initialization. */ 1012 static void 1013 read_original_filename (pfile) 1014 cpp_reader *pfile; 1015 { 1016 const cpp_token *token, *token1; 1017 1018 /* Lex ahead; if the first tokens are of the form # NUM, then 1019 process the directive, otherwise back up. */ 1020 token = _cpp_lex_direct (pfile); 1021 if (token->type == CPP_HASH) 1022 { 1023 token1 = _cpp_lex_direct (pfile); 1024 _cpp_backup_tokens (pfile, 1); 1025 1026 /* If it's a #line directive, handle it. */ 1027 if (token1->type == CPP_NUMBER) 1028 { 1029 _cpp_handle_directive (pfile, token->flags & PREV_WHITE); 1030 return; 1031 } 1032 } 1033 1034 /* Backup as if nothing happened. */ 1035 _cpp_backup_tokens (pfile, 1); 1036 } 1037 1038 /* Handle pending command line options: -D, -U, -A, -imacros and 1039 -include. This should be called after debugging has been properly 1040 set up in the front ends. */ 1041 void 1042 cpp_finish_options (pfile) 1043 cpp_reader *pfile; 1044 { 1045 /* Mark named operators before handling command line macros. */ 1046 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names)) 1047 mark_named_operators (pfile); 1048 1049 /* Install builtins and process command line macros etc. in the order 1050 they appeared, but only if not already preprocessed. */ 1051 if (! CPP_OPTION (pfile, preprocessed)) 1052 { 1053 struct pending_option *p; 1054 1055 /* Prevent -Wunused-macros with command-line redefinitions. */ 1056 pfile->first_unused_line = (unsigned int) -1; 1057 _cpp_do_file_change (pfile, LC_RENAME, _("<built-in>"), 1, 0); 1058 init_builtins (pfile); 1059 _cpp_do_file_change (pfile, LC_RENAME, _("<command line>"), 1, 0); 1060 for (p = CPP_OPTION (pfile, pending)->directive_head; p; p = p->next) 1061 (*p->handler) (pfile, p->arg); 1062 1063 /* Scan -imacros files after -D, -U, but before -include. 1064 pfile->next_include_file is NULL, so _cpp_pop_buffer does not 1065 push -include files. */ 1066 for (p = CPP_OPTION (pfile, pending)->imacros_head; p; p = p->next) 1067 if (push_include (pfile, p)) 1068 cpp_scan_nooutput (pfile); 1069 1070 pfile->next_include_file = &CPP_OPTION (pfile, pending)->include_head; 1071 _cpp_maybe_push_include_file (pfile); 1072 } 1073 1074 pfile->first_unused_line = pfile->line; 1075 1076 free_chain (CPP_OPTION (pfile, pending)->imacros_head); 1077 free_chain (CPP_OPTION (pfile, pending)->directive_head); 1078 } 1079 1080 /* Push the next buffer on the stack given by -include, if any. */ 1081 void 1082 _cpp_maybe_push_include_file (pfile) 1083 cpp_reader *pfile; 1084 { 1085 if (pfile->next_include_file) 1086 { 1087 struct pending_option *head = *pfile->next_include_file; 1088 1089 while (head && !push_include (pfile, head)) 1090 head = head->next; 1091 1092 if (head) 1093 pfile->next_include_file = &head->next; 1094 else 1095 { 1096 /* All done; restore the line map from <command line>. */ 1097 _cpp_do_file_change (pfile, LC_RENAME, 1098 pfile->line_maps.maps[0].to_file, 1, 0); 1099 /* Don't come back here again. */ 1100 pfile->next_include_file = NULL; 1101 } 1102 } 1103 } 1104 1105 /* This is called at the end of preprocessing. It pops the last 1106 buffer and writes dependency output, and returns the number of 1107 errors. 1108 1109 Maybe it should also reset state, such that you could call 1110 cpp_start_read with a new filename to restart processing. */ 1111 int 1112 cpp_finish (pfile, deps_stream) 1113 cpp_reader *pfile; 1114 FILE *deps_stream; 1115 { 1116 /* Warn about unused macros before popping the final buffer. */ 1117 if (CPP_OPTION (pfile, warn_unused_macros)) 1118 cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL); 1119 1120 /* cpplex.c leaves the final buffer on the stack. This it so that 1121 it returns an unending stream of CPP_EOFs to the client. If we 1122 popped the buffer, we'd dereference a NULL buffer pointer and 1123 segfault. It's nice to allow the client to do worry-free excess 1124 cpp_get_token calls. */ 1125 while (pfile->buffer) 1126 _cpp_pop_buffer (pfile); 1127 1128 /* Don't write the deps file if there are errors. */ 1129 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE 1130 && deps_stream && pfile->errors == 0) 1131 { 1132 deps_write (pfile->deps, deps_stream, 72); 1133 1134 if (CPP_OPTION (pfile, deps.phony_targets)) 1135 deps_phony_targets (pfile->deps, deps_stream); 1136 } 1137 1138 /* Report on headers that could use multiple include guards. */ 1139 if (CPP_OPTION (pfile, print_include_names)) 1140 _cpp_report_missing_guards (pfile); 1141 1142 return pfile->errors; 1143 } 1144 1145 /* Add a directive to be handled later in the initialization phase. */ 1146 static void 1147 new_pending_directive (pend, text, handler) 1148 struct cpp_pending *pend; 1149 const char *text; 1150 cl_directive_handler handler; 1151 { 1152 struct pending_option *o = (struct pending_option *) 1153 xmalloc (sizeof (struct pending_option)); 1154 1155 o->arg = text; 1156 o->next = NULL; 1157 o->handler = handler; 1158 APPEND (pend, directive, o); 1159 } 1160 1161 /* Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string"); 1162 I.e. a const string initializer with parens around it. That is 1163 what N_("string") resolves to, so we make no_* be macros instead. */ 1164 #define no_ass N_("assertion missing after %s") 1165 #define no_dir N_("directory name missing after %s") 1166 #define no_fil N_("file name missing after %s") 1167 #define no_mac N_("macro name missing after %s") 1168 #define no_pth N_("path name missing after %s") 1169 1170 /* This is the list of all command line options, with the leading 1171 "-" removed. It must be sorted in ASCII collating order. */ 1172 #define COMMAND_LINE_OPTIONS \ 1173 DEF_OPT("A", no_ass, OPT_A) \ 1174 DEF_OPT("D", no_mac, OPT_D) \ 1175 DEF_OPT("I", no_dir, OPT_I) \ 1176 DEF_OPT("U", no_mac, OPT_U) \ 1177 DEF_OPT("idirafter", no_dir, OPT_idirafter) \ 1178 DEF_OPT("imacros", no_fil, OPT_imacros) \ 1179 DEF_OPT("include", no_fil, OPT_include) \ 1180 DEF_OPT("iprefix", no_pth, OPT_iprefix) \ 1181 DEF_OPT("isystem", no_dir, OPT_isystem) \ 1182 DEF_OPT("iwithprefix", no_dir, OPT_iwithprefix) \ 1183 DEF_OPT("iwithprefixbefore", no_dir, OPT_iwithprefixbefore) 1184 1185 #define DEF_OPT(text, msg, code) code, 1186 enum opt_code 1187 { 1188 COMMAND_LINE_OPTIONS 1189 N_OPTS 1190 }; 1191 #undef DEF_OPT 1192 1193 struct cl_option 1194 { 1195 const char *opt_text; 1196 const char *msg; 1197 size_t opt_len; 1198 enum opt_code opt_code; 1199 }; 1200 1201 #define DEF_OPT(text, msg, code) { text, msg, sizeof(text) - 1, code }, 1202 #ifdef HOST_EBCDIC 1203 static struct cl_option cl_options[] = 1204 #else 1205 static const struct cl_option cl_options[] = 1206 #endif 1207 { 1208 COMMAND_LINE_OPTIONS 1209 }; 1210 #undef DEF_OPT 1211 #undef COMMAND_LINE_OPTIONS 1212 1213 /* Perform a binary search to find which, if any, option the given 1214 command-line matches. Returns its index in the option array, 1215 negative on failure. Complications arise since some options can be 1216 suffixed with an argument, and multiple complete matches can occur, 1217 e.g. -pedantic and -pedantic-errors. */ 1218 static int 1219 parse_option (input) 1220 const char *input; 1221 { 1222 unsigned int md, mn, mx; 1223 size_t opt_len; 1224 int comp; 1225 1226 mn = 0; 1227 mx = N_OPTS; 1228 1229 while (mx > mn) 1230 { 1231 md = (mn + mx) / 2; 1232 1233 opt_len = cl_options[md].opt_len; 1234 comp = strncmp (input, cl_options[md].opt_text, opt_len); 1235 1236 if (comp > 0) 1237 mn = md + 1; 1238 else if (comp < 0) 1239 mx = md; 1240 else 1241 { 1242 if (input[opt_len] == '\0') 1243 return md; 1244 /* We were passed more text. If the option takes an argument, 1245 we may match a later option or we may have been passed the 1246 argument. The longest possible option match succeeds. 1247 If the option takes no arguments we have not matched and 1248 continue the search (e.g. input="stdc++" match was "stdc"). */ 1249 mn = md + 1; 1250 if (cl_options[md].msg) 1251 { 1252 /* Scan forwards. If we get an exact match, return it. 1253 Otherwise, return the longest option-accepting match. 1254 This loops no more than twice with current options. */ 1255 mx = md; 1256 for (; mn < (unsigned int) N_OPTS; mn++) 1257 { 1258 opt_len = cl_options[mn].opt_len; 1259 if (strncmp (input, cl_options[mn].opt_text, opt_len)) 1260 break; 1261 if (input[opt_len] == '\0') 1262 return mn; 1263 if (cl_options[mn].msg) 1264 mx = mn; 1265 } 1266 return mx; 1267 } 1268 } 1269 } 1270 1271 return -1; 1272 } 1273 1274 /* Handle one command-line option in (argc, argv). 1275 Can be called multiple times, to handle multiple sets of options. 1276 Returns number of strings consumed. */ 1277 int 1278 cpp_handle_option (pfile, argc, argv) 1279 cpp_reader *pfile; 1280 int argc; 1281 char **argv; 1282 { 1283 int i = 0; 1284 struct cpp_pending *pend = CPP_OPTION (pfile, pending); 1285 1286 { 1287 enum opt_code opt_code; 1288 int opt_index; 1289 const char *arg = 0; 1290 1291 /* Skip over '-'. */ 1292 opt_index = parse_option (&argv[i][1]); 1293 if (opt_index < 0) 1294 return i; 1295 1296 opt_code = cl_options[opt_index].opt_code; 1297 if (cl_options[opt_index].msg) 1298 { 1299 arg = &argv[i][cl_options[opt_index].opt_len + 1]; 1300 if (arg[0] == '\0') 1301 { 1302 arg = argv[++i]; 1303 if (!arg) 1304 { 1305 cpp_error (pfile, DL_ERROR, 1306 cl_options[opt_index].msg, argv[i - 1]); 1307 return argc; 1308 } 1309 } 1310 } 1311 1312 switch (opt_code) 1313 { 1314 case N_OPTS: /* Shut GCC up. */ 1315 break; 1316 1317 case OPT_D: 1318 new_pending_directive (pend, arg, cpp_define); 1319 break; 1320 case OPT_iprefix: 1321 CPP_OPTION (pfile, include_prefix) = arg; 1322 CPP_OPTION (pfile, include_prefix_len) = strlen (arg); 1323 break; 1324 1325 case OPT_A: 1326 if (arg[0] == '-') 1327 new_pending_directive (pend, arg + 1, cpp_unassert); 1328 else 1329 new_pending_directive (pend, arg, cpp_assert); 1330 break; 1331 case OPT_U: 1332 new_pending_directive (pend, arg, cpp_undef); 1333 break; 1334 case OPT_I: /* Add directory to path for includes. */ 1335 if (!strcmp (arg, "-")) 1336 { 1337 /* -I- means: 1338 Use the preceding -I directories for #include "..." 1339 but not #include <...>. 1340 Don't search the directory of the present file 1341 for #include "...". (Note that -I. -I- is not the same as 1342 the default setup; -I. uses the compiler's working dir.) */ 1343 if (! CPP_OPTION (pfile, ignore_srcdir)) 1344 { 1345 pend->quote_head = pend->brack_head; 1346 pend->quote_tail = pend->brack_tail; 1347 pend->brack_head = 0; 1348 pend->brack_tail = 0; 1349 CPP_OPTION (pfile, ignore_srcdir) = 1; 1350 } 1351 else 1352 { 1353 cpp_error (pfile, DL_ERROR, "-I- specified twice"); 1354 return argc; 1355 } 1356 } 1357 else 1358 append_include_chain (pfile, xstrdup (arg), BRACKET, 0); 1359 break; 1360 case OPT_isystem: 1361 /* Add directory to beginning of system include path, as a system 1362 include directory. */ 1363 append_include_chain (pfile, xstrdup (arg), SYSTEM, 0); 1364 break; 1365 case OPT_include: 1366 case OPT_imacros: 1367 { 1368 struct pending_option *o = (struct pending_option *) 1369 xmalloc (sizeof (struct pending_option)); 1370 o->arg = arg; 1371 o->next = NULL; 1372 1373 if (opt_code == OPT_include) 1374 APPEND (pend, include, o); 1375 else 1376 APPEND (pend, imacros, o); 1377 } 1378 break; 1379 case OPT_iwithprefix: 1380 /* Add directory to end of path for includes, 1381 with the default prefix at the front of its name. */ 1382 /* fall through */ 1383 case OPT_iwithprefixbefore: 1384 /* Add directory to main path for includes, 1385 with the default prefix at the front of its name. */ 1386 { 1387 char *fname; 1388 int len; 1389 1390 len = strlen (arg); 1391 1392 if (CPP_OPTION (pfile, include_prefix) != 0) 1393 { 1394 size_t ipl = CPP_OPTION (pfile, include_prefix_len); 1395 fname = xmalloc (ipl + len + 1); 1396 memcpy (fname, CPP_OPTION (pfile, include_prefix), ipl); 1397 memcpy (fname + ipl, arg, len + 1); 1398 } 1399 else if (cpp_GCC_INCLUDE_DIR_len) 1400 { 1401 fname = xmalloc (cpp_GCC_INCLUDE_DIR_len + len + 1); 1402 memcpy (fname, cpp_GCC_INCLUDE_DIR, cpp_GCC_INCLUDE_DIR_len); 1403 memcpy (fname + cpp_GCC_INCLUDE_DIR_len, arg, len + 1); 1404 } 1405 else 1406 fname = xstrdup (arg); 1407 1408 append_include_chain (pfile, fname, 1409 opt_code == OPT_iwithprefix ? SYSTEM: BRACKET, 0); 1410 } 1411 break; 1412 case OPT_idirafter: 1413 /* Add directory to end of path for includes. */ 1414 append_include_chain (pfile, xstrdup (arg), AFTER, 0); 1415 break; 1416 } 1417 } 1418 return i + 1; 1419 } 1420 1421 /* Handle command-line options in (argc, argv). 1422 Can be called multiple times, to handle multiple sets of options. 1423 Returns if an unrecognized option is seen. 1424 Returns number of strings consumed. */ 1425 int 1426 cpp_handle_options (pfile, argc, argv) 1427 cpp_reader *pfile; 1428 int argc; 1429 char **argv; 1430 { 1431 int i; 1432 int strings_processed; 1433 1434 for (i = 0; i < argc; i += strings_processed) 1435 { 1436 strings_processed = cpp_handle_option (pfile, argc - i, argv + i); 1437 if (strings_processed == 0) 1438 break; 1439 } 1440 1441 return i; 1442 } 1443 1444 static void 1445 post_options (pfile) 1446 cpp_reader *pfile; 1447 { 1448 /* -Wtraditional is not useful in C++ mode. */ 1449 if (CPP_OPTION (pfile, cplusplus)) 1450 CPP_OPTION (pfile, warn_traditional) = 0; 1451 1452 /* Permanently disable macro expansion if we are rescanning 1453 preprocessed text. Read preprocesed source in ISO mode. */ 1454 if (CPP_OPTION (pfile, preprocessed)) 1455 { 1456 pfile->state.prevent_expansion = 1; 1457 CPP_OPTION (pfile, traditional) = 0; 1458 } 1459 1460 /* Traditional CPP does not accurately track column information. */ 1461 if (CPP_OPTION (pfile, traditional)) 1462 CPP_OPTION (pfile, show_column) = 0; 1463 } 1464