From f4ff5a691f18d9f0fe106e76c99f1f9e77de368a Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Mon, 12 Aug 2002 22:44:30 +0000 Subject: [PATCH] c-opts.c (deps_seen, [...]): New. * c-opts.c (deps_seen, deps_file, deferred_count, deferred_size, handle_deferred_opts, sanitize_cpp_opts, defer_opt, struct deferred_opt): New. (COMMAND_LINE_OPTIONS): Add -M*. (missing_arg): Update. (c_common_decode_option): Handle -M*. (c_common_post_options): Handle -M*. Use sanitize_cpp_opts; don't call cpp_post_options. (c_common_finish, check_deps_environment_vars): Update. * cppfiles.c (stack_include_file, handle_missing_header): Update. * cpphash.h (CPP_PRINT_DEPS): Remove. * cppinit.c: Don't include version.h. (cpp_create_reader): Don't call deps_init. Initialize warn_long_long. (cpp_read_main_file): Init deps if necessary. (cpp_destroy): Conditionally free deps. (cpp_finish): Update. (no_tgt): Remove. (COMMAND_LINE_OPTIONS, cpp_handle_option): Remove -M*. (cpp_post_options): Rename post_options. * cpplib.h (struct cpp_options): Remove some dependency options; move others to a new structure. (cpp_post_options): Remove. (cpp_finish): Comment. * fix-header.c (read_scan_file): Don't call cpp_post_options. treelang: * treelang.c: Remove cpp_post_options. From-SVN: r56239 --- gcc/ChangeLog | 28 +++++ gcc/Makefile.in | 2 +- gcc/c-opts.c | 247 +++++++++++++++++++++++++++++++--------- gcc/cppfiles.c | 11 +- gcc/cpphash.h | 3 +- gcc/cppinit.c | 108 ++++-------------- gcc/cpplib.h | 49 ++++---- gcc/fix-header.c | 1 - gcc/treelang/ChangeLog | 4 + gcc/treelang/treetree.c | 8 -- 10 files changed, 281 insertions(+), 180 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 53b0806533a1..143cef948c86 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,31 @@ +2002-08-13 Neil Booth + + * c-opts.c (deps_seen, deps_file, deferred_count, deferred_size, + handle_deferred_opts, sanitize_cpp_opts, defer_opt, + struct deferred_opt): New. + (COMMAND_LINE_OPTIONS): Add -M*. + (missing_arg): Update. + (c_common_decode_option): Handle -M*. + (c_common_post_options): Handle -M*. Use sanitize_cpp_opts; + don't call cpp_post_options. + (c_common_finish, check_deps_environment_vars): Update. + * cppfiles.c (stack_include_file, handle_missing_header): Update. + * cpphash.h (CPP_PRINT_DEPS): Remove. + * cppinit.c: Don't include version.h. + (cpp_create_reader): Don't call deps_init. Initialize + warn_long_long. + (cpp_read_main_file): Init deps if necessary. + (cpp_destroy): Conditionally free deps. + (cpp_finish): Update. + (no_tgt): Remove. + (COMMAND_LINE_OPTIONS, cpp_handle_option): Remove -M*. + (cpp_post_options): Rename post_options. + * cpplib.h (struct cpp_options): Remove some dependency options; + move others to a new structure. + (cpp_post_options): Remove. + (cpp_finish): Comment. + * fix-header.c (read_scan_file): Don't call cpp_post_options. + 2002-08-12 Hans-Peter Nilsson * config/mmix/mmix.md (define_constants): Add MMIX_rR_REGNUM. diff --git a/gcc/Makefile.in b/gcc/Makefile.in index d221b547ea0c..28f1638e97a1 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -2211,7 +2211,7 @@ cpphash.o: cpphash.c $(CONFIG_H) $(LIBCPP_DEPS) cpptrad.o: cpptrad.c $(CONFIG_H) $(LIBCPP_DEPS) cppfiles.o: cppfiles.c $(CONFIG_H) $(LIBCPP_DEPS) $(SPLAY_TREE_H) mkdeps.h cppinit.o: cppinit.c $(CONFIG_H) $(LIBCPP_DEPS) cppdefault.h \ - mkdeps.h prefix.h version.h + mkdeps.h prefix.h cppdefault.o: cppdefault.c $(CONFIG_H) $(SYSTEM_H) cppdefault.h Makefile $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ diff --git a/gcc/c-opts.c b/gcc/c-opts.c index 4f6bb5db817f..189cb1ba9e1f 100644 --- a/gcc/c-opts.c +++ b/gcc/c-opts.c @@ -31,6 +31,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "diagnostic.h" #include "intl.h" +/* CPP's options. */ static cpp_options *cpp_opts; /* Input filename. */ @@ -43,6 +44,15 @@ static FILE *out_stream; /* Append dependencies to deps_file. */ static bool deps_append; +/* If dependency switches (-MF etc.) have been given. */ +static bool deps_seen; + +/* Dependency output file. */ +static const char *deps_file; + +/* Number of deferred options, deferred options array size. */ +static size_t deferred_count, deferred_size; + static void missing_arg PARAMS ((size_t)); static size_t find_opt PARAMS ((const char *, int)); static void set_Wimplicit PARAMS ((int)); @@ -55,6 +65,8 @@ static void set_std_c89 PARAMS ((int, int)); static void set_std_c99 PARAMS ((int)); static void check_deps_environment_vars PARAMS ((void)); static void preprocess_file PARAMS ((void)); +static void handle_deferred_opts PARAMS ((void)); +static void sanitize_cpp_opts PARAMS ((void)); #ifndef STDC_0_IN_SYSTEM_HEADERS #define STDC_0_IN_SYSTEM_HEADERS 0 @@ -102,6 +114,15 @@ static void preprocess_file PARAMS ((void)); OPT("CC", CL_ALL, OPT_CC) \ OPT("E", CL_ALL, OPT_E) \ OPT("H", CL_ALL, OPT_H) \ + OPT("M", CL_ALL, OPT_M) \ + OPT("MD", CL_ALL | CL_SEPARATE, OPT_MD) \ + OPT("MF", CL_ALL | CL_ARG, OPT_MF) \ + OPT("MG", CL_ALL, OPT_MG) \ + OPT("MM", CL_ALL, OPT_MM) \ + OPT("MMD", CL_ALL | CL_SEPARATE, OPT_MMD) \ + OPT("MP", CL_ALL, OPT_MP) \ + OPT("MQ", CL_ALL | CL_ARG, OPT_MQ) \ + OPT("MT", CL_ALL | CL_ARG, OPT_MT) \ OPT("P", CL_ALL, OPT_P) \ OPT("Wall", CL_ALL, OPT_Wall) \ OPT("Wbad-function-cast", CL_C, OPT_Wbad_function_cast) \ @@ -284,6 +305,16 @@ static const struct cl_option cl_options[] = #undef OPT #undef COMMAND_LINE_OPTIONS +/* Holds switches parsed by c_common_decode_option (), but whose + handling is deffered to c_common_post_options (). */ +static void defer_opt PARAMS ((enum opt_code, const char *)); +static struct deferred_opt +{ + enum opt_code code; + const char *arg; +} *deferred_opts; + + #ifdef HOST_EBCDIC static int opt_comp PARAMS ((const void *, const void *)); @@ -303,6 +334,8 @@ static void missing_arg (opt_index) size_t opt_index; { + const char *opt_text = cl_options[opt_index].opt_text; + switch (opt_index) { case OPT_Wformat_eq: @@ -313,15 +346,23 @@ missing_arg (opt_index) case OPT_ftabstop: case OPT_ftemplate_depth: default: - error ("missing argument to \"-%s\"", cl_options[opt_index].opt_text); + error ("missing argument to \"-%s\"", opt_text); break; case OPT_fconstant_string_class: - error ("no class name specified with -fconstant-string-class="); + error ("no class name specified with \"-%s\"", opt_text); break; + case OPT_MF: + case OPT_MD: + case OPT_MMD: case OPT_o: - error ("missing filename after \"-%s\"", cl_options[opt_index].opt_text); + error ("missing filename after \"-%s\"", opt_text); + break; + + case OPT_MQ: + case OPT_MT: + error ("missing target after \"-%s\"", opt_text); break; } } @@ -420,6 +461,30 @@ find_opt (input, lang_flag) return N_OPTS; } +/* Defer option CODE with argument ARG. */ +static void +defer_opt (code, arg) + enum opt_code code; + const char *arg; +{ + /* FIXME: this should be in c_common_init_options, which should take + argc and argv. */ + if (!deferred_opts) + { + extern int save_argc; + deferred_size = save_argc; + deferred_opts = (struct deferred_opt *) + xmalloc (deferred_size * sizeof (struct deferred_opt)); + } + + if (deferred_count == deferred_size) + abort (); + + deferred_opts[deferred_count].code = code; + deferred_opts[deferred_count].arg = arg; + deferred_count++; +} + /* Common initialization before parsing options. */ void c_common_init_options (lang) @@ -432,10 +497,8 @@ c_common_init_options (lang) #endif c_language = lang; - parse_in = cpp_create_reader (lang == clk_c - ? CLK_GNUC89 : CLK_GNUCXX); + parse_in = cpp_create_reader (lang == clk_c ? CLK_GNUC89 : CLK_GNUCXX); cpp_opts = cpp_get_options (parse_in); - if (flag_objc) cpp_opts->objc = 1; @@ -563,6 +626,44 @@ c_common_decode_option (argc, argv) cpp_opts->print_include_names = 1; break; + case OPT_M: + case OPT_MM: + /* When doing dependencies with -M or -MM, suppress normal + preprocessed output, but still do -dM etc. as software + depends on this. Preprocessed output does occur if -MD, -MMD + or environment var dependency generation is used. */ + cpp_opts->deps.style = (code == OPT_M ? DEPS_SYSTEM: DEPS_USER); + cpp_opts->no_output = 1; + cpp_opts->inhibit_warnings = 1; + break; + + case OPT_MD: + case OPT_MMD: + cpp_opts->deps.style = (code == OPT_MD ? DEPS_SYSTEM: DEPS_USER); + deps_file = arg; + break; + + case OPT_MF: + deps_seen = true; + deps_file = arg; + break; + + case OPT_MG: + deps_seen = true; + cpp_opts->deps.missing_files = true; + break; + + case OPT_MP: + deps_seen = true; + cpp_opts->deps.phony_targets = true; + break; + + case OPT_MQ: + case OPT_MT: + deps_seen = true; + defer_opt (code, arg); + break; + case OPT_P: cpp_opts->no_line_commands = 1; break; @@ -1219,26 +1320,12 @@ c_common_post_options () if (out_fname == NULL || !strcmp (out_fname, "-")) out_fname = ""; - if (cpp_opts->print_deps == 0) + if (cpp_opts->deps.style != DEPS_NONE) check_deps_environment_vars (); - /* If we're not outputting dependencies, complain if other -M - options have been given. */ - if (!cpp_opts->print_deps - && (cpp_opts->print_deps_missing_files - || cpp_opts->deps_file - || cpp_opts->deps_phony_targets)) - error ("you must additionally specify either -M or -MM"); + handle_deferred_opts (); - cpp_post_options (parse_in); - - cpp_opts->unsigned_char = !flag_signed_char; - cpp_opts->stdc_0_in_system_headers = STDC_0_IN_SYSTEM_HEADERS; - - /* We want -Wno-long-long to override -pedantic -std=non-c99 - and/or -Wtraditional, whatever the ordering. */ - cpp_opts->warn_long_long - = warn_long_long && ((!flag_isoc99 && pedantic) || warn_traditional); + sanitize_cpp_opts (); flag_inline_trees = 1; @@ -1339,17 +1426,17 @@ c_common_finish () { FILE *deps_stream = NULL; - if (cpp_opts->print_deps) + if (cpp_opts->deps.style != DEPS_NONE) { /* If -M or -MM was seen without -MF, default output to the output stream. */ - if (!cpp_opts->deps_file) + if (!deps_file) deps_stream = out_stream; else { - deps_stream = fopen (cpp_opts->deps_file, deps_append ? "a": "w"); + deps_stream = fopen (deps_file, deps_append ? "a": "w"); if (!deps_stream) - fatal_io_error ("opening dependency file %s", cpp_opts->deps_file); + fatal_io_error ("opening dependency file %s", deps_file); } } @@ -1359,29 +1446,12 @@ c_common_finish () if (deps_stream && deps_stream != out_stream && (ferror (deps_stream) || fclose (deps_stream))) - fatal_io_error ("closing dependency file %s", cpp_opts->deps_file); + fatal_io_error ("closing dependency file %s", deps_file); if (out_stream && (ferror (out_stream) || fclose (out_stream))) fatal_io_error ("when writing output to %s", out_fname); } -/* Set the C 89 standard (with 1994 amendments if C94, without GNU - extensions if ISO). There is no concept of gnu94. */ -static void -set_std_c89 (c94, iso) - int c94, iso; -{ - cpp_set_lang (parse_in, c94 ? CLK_STDC94: iso ? CLK_STDC89: CLK_GNUC89); - flag_iso = iso; - flag_no_asm = iso; - flag_no_gnu_keywords = iso; - flag_no_nonansi_builtin = iso; - flag_noniso_default_format_attributes = !iso; - flag_isoc94 = c94; - flag_isoc99 = 0; - flag_writable_strings = 0; -} - /* Either of two environment variables can specify output of dependencies. Their value is either "OUTPUT_FILE" or "OUTPUT_FILE DEPS_TARGET", where OUTPUT_FILE is the file to write deps info to @@ -1395,12 +1465,12 @@ check_deps_environment_vars () GET_ENVIRONMENT (spec, "DEPENDENCIES_OUTPUT"); if (spec) - cpp_opts->print_deps = 1; + cpp_opts->deps.style = DEPS_USER; else { GET_ENVIRONMENT (spec, "SUNPRO_DEPENDENCIES"); if (spec) - cpp_opts->print_deps = 2; + cpp_opts->deps.style = DEPS_SYSTEM; } if (spec) @@ -1410,16 +1480,91 @@ check_deps_environment_vars () if (s) { /* Let the caller perform MAKE quoting. */ - cpp_add_dependency_target (parse_in, s + 1, 0); + defer_opt (OPT_MT, s + 1); *s = '\0'; } /* Command line -MF overrides environment variables and default. */ - if (!cpp_opts->deps_file) - cpp_opts->deps_file = spec; + if (!deps_file) + deps_file = spec; + + deps_append = 1; + } +} + +/* Handle deferred command line switches. */ +static void +handle_deferred_opts () +{ + size_t i; - cpp_opts->print_deps_append = 1; + for (i = 0; i < deferred_count; i++) + { + struct deferred_opt *opt = &deferred_opts[i]; + + switch (opt->code) + { + case OPT_MT: + case OPT_MQ: + cpp_add_dependency_target (parse_in, opt->arg, opt->code == OPT_MQ); + break; + + default: + abort (); + } + } + + free (deferred_opts); +} + +/* These settings are appropriate for GCC, but not necessarily so for + cpplib as a library. */ +static void +sanitize_cpp_opts () +{ + /* If we don't know what style of dependencies to output, complain + if any other dependency switches have been given. */ + if (deps_seen && cpp_opts->deps.style == DEPS_NONE) + error ("to generate dependencies you must specify either -M or -MM"); + + /* -dM and dependencies suppress normal output; do it here so that + the last -d[MDN] switch overrides earlier ones. */ + if (cpp_opts->dump_macros == dump_only) + cpp_opts->no_output = 1; + + /* Disable -dD, -dN and -dI if normal output is suppressed. Allow + -dM since at least glibc relies on -M -dM to work. */ + if (cpp_opts->no_output) + { + if (cpp_opts->dump_macros != dump_only) + cpp_opts->dump_macros = dump_none; + cpp_opts->dump_includes = 0; } + + cpp_opts->unsigned_char = !flag_signed_char; + cpp_opts->stdc_0_in_system_headers = STDC_0_IN_SYSTEM_HEADERS; + + /* We want -Wno-long-long to override -pedantic -std=non-c99 + and/or -Wtraditional, whatever the ordering. */ + cpp_opts->warn_long_long + = warn_long_long && ((!flag_isoc99 && pedantic) || warn_traditional); +} + +/* Set the C 89 standard (with 1994 amendments if C94, without GNU + extensions if ISO). There is no concept of gnu94. */ +static void +set_std_c89 (c94, iso) + int c94, iso; +{ + cpp_set_lang (parse_in, c94 ? CLK_STDC94: iso ? CLK_STDC89: CLK_GNUC89); + flag_iso = iso; + flag_no_asm = iso; + flag_no_gnu_keywords = iso; + flag_no_nonansi_builtin = iso; + flag_noniso_default_format_attributes = !iso; + flag_isoc94 = c94; + flag_isoc99 = 0; + flag_writable_strings = 0; } /* Set the C 99 standard (without GNU extensions if ISO). */ diff --git a/gcc/cppfiles.c b/gcc/cppfiles.c index 653b33e283c5..63e6f750ecb1 100644 --- a/gcc/cppfiles.c +++ b/gcc/cppfiles.c @@ -319,7 +319,7 @@ stack_include_file (pfile, inc) (inc->foundhere ? inc->foundhere->sysp : 0)); /* For -M, add the file to the dependencies on its first inclusion. */ - if (CPP_OPTION (pfile, print_deps) > !!sysp && !inc->include_count) + if (CPP_OPTION (pfile, deps.style) > !!sysp && !inc->include_count) deps_add_dep (pfile->deps, inc->name); /* Not in cache? */ @@ -663,9 +663,10 @@ handle_missing_header (pfile, fname, angle_brackets) const char *fname; int angle_brackets; { - int print_dep = CPP_PRINT_DEPS(pfile) > (angle_brackets || pfile->map->sysp); - - if (CPP_OPTION (pfile, print_deps_missing_files) && print_dep) + bool print_dep + = CPP_OPTION (pfile, deps.style) > (angle_brackets || pfile->map->sysp); + + if (CPP_OPTION (pfile, deps.missing_files) && print_dep) deps_add_dep (pfile->deps, fname); /* If -M was specified, then don't count this as an error, because we can still produce correct output. Otherwise, we can't produce @@ -673,7 +674,7 @@ handle_missing_header (pfile, fname, angle_brackets) the missing file, and we don't know what directory this missing file exists in. */ else - cpp_errno (pfile, CPP_PRINT_DEPS (pfile) && ! print_dep + cpp_errno (pfile, CPP_OPTION (pfile, deps.style) && ! print_dep ? DL_WARNING: DL_ERROR, fname); } diff --git a/gcc/cpphash.h b/gcc/cpphash.h index 547a70c2c600..5b0f0e832679 100644 --- a/gcc/cpphash.h +++ b/gcc/cpphash.h @@ -400,7 +400,7 @@ struct cpp_reader cpp_token avoid_paste; cpp_token eof; - /* Opaque handle to the dependencies of mkdeps.c. Used by -M etc. */ + /* Opaque handle to the dependencies of mkdeps.c. */ struct deps *deps; /* Obstack holding all macro hash nodes. This never shrinks. @@ -480,7 +480,6 @@ extern unsigned char _cpp_trigraph_map[UCHAR_MAX + 1]; /* Macros. */ -#define CPP_PRINT_DEPS(PFILE) CPP_OPTION (PFILE, print_deps) #define CPP_IN_SYSTEM_HEADER(PFILE) ((PFILE)->map && (PFILE)->map->sysp) #define CPP_PEDANTIC(PF) CPP_OPTION (PF, pedantic) #define CPP_WTRADITIONAL(PF) CPP_OPTION (PF, warn_traditional) diff --git a/gcc/cppinit.c b/gcc/cppinit.c index 2792ebfb672d..5b3aab2ac0df 100644 --- a/gcc/cppinit.c +++ b/gcc/cppinit.c @@ -25,7 +25,6 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "cpphash.h" #include "prefix.h" #include "intl.h" -#include "version.h" #include "mkdeps.h" #include "cppdefault.h" @@ -108,6 +107,7 @@ static void new_pending_directive PARAMS ((struct cpp_pending *, const char *, cl_directive_handler)); static int parse_option PARAMS ((const char *)); +static void post_options PARAMS ((cpp_reader *)); /* Fourth argument to append_include_chain: chain to use. Note it's never asked to append to the quote chain. */ @@ -477,6 +477,7 @@ cpp_create_reader (lang) CPP_OPTION (pfile, tabstop) = 8; CPP_OPTION (pfile, operator_names) = 1; CPP_OPTION (pfile, warn_endif_labels) = 1; + CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99); CPP_OPTION (pfile, pending) = (struct cpp_pending *) xcalloc (1, sizeof (struct cpp_pending)); @@ -490,10 +491,6 @@ cpp_create_reader (lang) CPP_OPTION (pfile, unsigned_char) = 0; CPP_OPTION (pfile, unsigned_wchar) = 1; - /* It's simplest to just create this struct whether or not it will - be needed. */ - pfile->deps = deps_init (); - /* Initialise the line map. Start at logical line 1, so we can use a line number of zero for special states. */ init_line_maps (&pfile->line_maps); @@ -560,7 +557,8 @@ cpp_destroy (pfile) pfile->macro_buffer_len = 0; } - deps_free (pfile->deps); + if (pfile->deps) + deps_free (pfile->deps); obstack_free (&pfile->buffer_ob, 0); _cpp_destroy_hashtable (pfile); @@ -902,6 +900,8 @@ cpp_read_main_file (pfile, fname, table) { sanity_checks (pfile); + post_options (pfile); + /* The front ends don't set up the hash table until they have finished processing the command line options, so initializing the hashtable is deferred until now. */ @@ -927,17 +927,22 @@ cpp_read_main_file (pfile, fname, table) fprintf (stderr, _("End of search list.\n")); } - if (CPP_OPTION (pfile, print_deps)) - /* Set the default target (if there is none already). */ - deps_add_default_target (pfile->deps, fname); + if (CPP_OPTION (pfile, deps.style) != DEPS_NONE) + { + if (!pfile->deps) + pfile->deps = deps_init (); + + /* Set the default target (if there is none already). */ + deps_add_default_target (pfile->deps, fname); + } /* Open the main input file. */ if (!_cpp_read_file (pfile, fname)) return NULL; - /* Set this after cpp_post_options so the client can change the - option if it wishes, and after stacking the main file so we don't - trace the main file. */ + /* Set this here so the client can change the option if it wishes, + and after stacking the main file so we don't trace the main + file. */ pfile->line_maps.trace_includes = CPP_OPTION (pfile, print_include_names); /* For foo.i, read the original filename foo.c now, for the benefit @@ -1067,11 +1072,12 @@ cpp_finish (pfile, deps_stream) _cpp_pop_buffer (pfile); /* Don't write the deps file if there are errors. */ - if (deps_stream && CPP_OPTION (pfile, print_deps) && !pfile->errors) + if (CPP_OPTION (pfile, deps.style) != DEPS_NONE + && deps_stream && pfile->errors == 0) { deps_write (pfile->deps, deps_stream, 72); - if (CPP_OPTION (pfile, deps_phony_targets)) + if (CPP_OPTION (pfile, deps.phony_targets)) deps_phony_targets (pfile->deps, deps_stream); } @@ -1106,7 +1112,6 @@ new_pending_directive (pend, text, handler) #define no_fil N_("file name missing after %s") #define no_mac N_("macro name missing after %s") #define no_pth N_("path name missing after %s") -#define no_tgt N_("target missing after %s") /* This is the list of all command line options, with the leading "-" removed. It must be sorted in ASCII collating order. */ @@ -1114,15 +1119,6 @@ new_pending_directive (pend, text, handler) DEF_OPT("A", no_ass, OPT_A) \ DEF_OPT("D", no_mac, OPT_D) \ DEF_OPT("I", no_dir, OPT_I) \ - DEF_OPT("M", 0, OPT_M) \ - DEF_OPT("MD", no_fil, OPT_MD) \ - DEF_OPT("MF", no_fil, OPT_MF) \ - DEF_OPT("MG", 0, OPT_MG) \ - DEF_OPT("MM", 0, OPT_MM) \ - DEF_OPT("MMD", no_fil, OPT_MMD) \ - DEF_OPT("MP", 0, OPT_MP) \ - DEF_OPT("MQ", no_tgt, OPT_MQ) \ - DEF_OPT("MT", no_tgt, OPT_MT) \ DEF_OPT("U", no_mac, OPT_U) \ DEF_OPT("idirafter", no_dir, OPT_idirafter) \ DEF_OPT("imacros", no_fil, OPT_imacros) \ @@ -1272,44 +1268,6 @@ cpp_handle_option (pfile, argc, argv) CPP_OPTION (pfile, include_prefix_len) = strlen (arg); break; - case OPT_MG: - CPP_OPTION (pfile, print_deps_missing_files) = 1; - break; - case OPT_M: - /* When doing dependencies with -M or -MM, suppress normal - preprocessed output, but still do -dM etc. as software - depends on this. Preprocessed output occurs if -MD, -MMD - or environment var dependency generation is used. */ - CPP_OPTION (pfile, print_deps) = 2; - CPP_OPTION (pfile, no_output) = 1; - CPP_OPTION (pfile, inhibit_warnings) = 1; - break; - case OPT_MM: - CPP_OPTION (pfile, print_deps) = 1; - CPP_OPTION (pfile, no_output) = 1; - CPP_OPTION (pfile, inhibit_warnings) = 1; - break; - case OPT_MF: - CPP_OPTION (pfile, deps_file) = arg; - break; - case OPT_MP: - CPP_OPTION (pfile, deps_phony_targets) = 1; - break; - case OPT_MQ: - case OPT_MT: - /* Add a target. -MQ quotes for Make. */ - deps_add_target (pfile->deps, arg, opt_code == OPT_MQ); - break; - - case OPT_MD: - CPP_OPTION (pfile, print_deps) = 2; - CPP_OPTION (pfile, deps_file) = arg; - break; - case OPT_MMD: - CPP_OPTION (pfile, print_deps) = 1; - CPP_OPTION (pfile, deps_file) = arg; - break; - case OPT_A: if (arg[0] == '-') { @@ -1446,22 +1404,14 @@ cpp_handle_options (pfile, argc, argv) return i; } -/* Extra processing when all options are parsed, after all calls to - cpp_handle_option[s]. Consistency checks etc. */ -void -cpp_post_options (pfile) +static void +post_options (pfile) cpp_reader *pfile; { /* -Wtraditional is not useful in C++ mode. */ if (CPP_OPTION (pfile, cplusplus)) CPP_OPTION (pfile, warn_traditional) = 0; - /* The compiler front ends override this, but I think this is the - appropriate setting for the library. */ - CPP_OPTION (pfile, warn_long_long) - = ((CPP_OPTION (pfile, pedantic) && !CPP_OPTION (pfile, c99)) - || CPP_OPTION (pfile, warn_traditional)); - /* Permanently disable macro expansion if we are rescanning preprocessed text. Read preprocesed source in ISO mode. */ if (CPP_OPTION (pfile, preprocessed)) @@ -1473,18 +1423,4 @@ cpp_post_options (pfile) /* Traditional CPP does not accurately track column information. */ if (CPP_OPTION (pfile, traditional)) CPP_OPTION (pfile, show_column) = 0; - - /* -dM and dependencies suppress normal output; do it here so that - the last -d[MDN] switch overrides earlier ones. */ - if (CPP_OPTION (pfile, dump_macros) == dump_only) - CPP_OPTION (pfile, no_output) = 1; - - /* Disable -dD, -dN and -dI if normal output is suppressed. Allow - -dM since at least glibc relies on -M -dM to work. */ - if (CPP_OPTION (pfile, no_output)) - { - if (CPP_OPTION (pfile, dump_macros) != dump_only) - CPP_OPTION (pfile, dump_macros) = dump_none; - CPP_OPTION (pfile, dump_includes) = 0; - } } diff --git a/gcc/cpplib.h b/gcc/cpplib.h index 7df6ce274812..3640d44605a1 100644 --- a/gcc/cpplib.h +++ b/gcc/cpplib.h @@ -227,10 +227,6 @@ struct cpp_options /* Pending options - -D, -U, -A, -I, -ixxx. */ struct cpp_pending *pending; - /* File name which deps are being written to. This is 0 if deps are - being written to stdout. */ - const char *deps_file; - /* Search paths for include files. */ struct search_path *quote_include; /* "" */ struct search_path *bracket_include; /* <> */ @@ -276,21 +272,6 @@ struct cpp_options /* Nonzero means to allow hexadecimal floats and LL suffixes. */ unsigned char extended_numbers; - /* Nonzero means print the names of included files rather than the - preprocessed output. 1 means just the #include "...", 2 means - #include <...> as well. */ - unsigned char print_deps; - - /* Nonzero if phony targets are created for each header. */ - unsigned char deps_phony_targets; - - /* Nonzero if missing .h files in -M output are assumed to be - generated files and not errors. */ - unsigned char print_deps_missing_files; - - /* If true, fopen (deps_file, "a") else fopen (deps_file, "w"). */ - unsigned char print_deps_append; - /* Nonzero means print names of header files (-H). */ unsigned char print_include_names; @@ -394,6 +375,20 @@ struct cpp_options /* True for traditional preprocessing. */ unsigned char traditional; + /* Dependency generation. */ + struct + { + /* Style of header dependencies to generate. */ + enum {DEPS_NONE = 0, DEPS_USER, DEPS_SYSTEM } style; + + /* Assume missing files are generated files. */ + bool missing_files; + + /* Generate phony targets for each dependency apart from the first + one. */ + bool phony_targets; + } deps; + /* Target-specific features set by the front end or client. */ /* Precision for target CPP arithmetic, target characters, target @@ -522,14 +517,10 @@ extern void cpp_set_callbacks PARAMS ((cpp_reader *, cpp_callbacks *)); /* Now call cpp_handle_option[s] to handle 1[or more] switches. The return value is the number of arguments used. If cpp_handle_options returns without using all arguments, it couldn't - understand the next switch. When there are no switches left, you - must call cpp_post_options before calling cpp_read_main_file. Only - after cpp_post_options are the contents of the cpp_options - structure reliable. Options processing is not completed until you - call cpp_finish_options. */ + understand the next switch. Options processing is not completed + until you call cpp_finish_options. */ extern int cpp_handle_options PARAMS ((cpp_reader *, int, char **)); extern int cpp_handle_option PARAMS ((cpp_reader *, int, char **)); -extern void cpp_post_options PARAMS ((cpp_reader *)); /* This function reads the file, but does not start preprocessing. It returns the name of the original file; this is the same as the @@ -551,6 +542,13 @@ extern const char *cpp_read_main_file PARAMS ((cpp_reader *, const char *, from cpp_read_main_file, before they get debug callbacks. */ extern void cpp_finish_options PARAMS ((cpp_reader *)); +/* Call this to finish preprocessing. If you requested dependency + generation, pass an open stream to write the information to, + otherwise NULL. It is your responsibility to close the stream. + + Returns cpp_errors (pfile). */ +extern int cpp_finish PARAMS ((cpp_reader *, FILE *deps_stream)); + /* Call this to release the handle at the end of preprocessing. Any use of the handle after this function returns is invalid. Returns cpp_errors (pfile). */ @@ -568,7 +566,6 @@ extern void cpp_register_pragma PARAMS ((cpp_reader *, const char *, const char *, void (*) PARAMS ((cpp_reader *)))); -extern int cpp_finish PARAMS ((cpp_reader *, FILE *)); extern int cpp_avoid_paste PARAMS ((cpp_reader *, const cpp_token *, const cpp_token *)); extern const cpp_token *cpp_get_token PARAMS ((cpp_reader *)); diff --git a/gcc/fix-header.c b/gcc/fix-header.c index 24c2070d61fe..bce334dee038 100644 --- a/gcc/fix-header.c +++ b/gcc/fix-header.c @@ -632,7 +632,6 @@ read_scan_file (in_fname, argc, argv) i = cpp_handle_options (scan_in, argc, argv); if (i < argc) cpp_error (scan_in, DL_ERROR, "invalid option `%s'", argv[i]); - cpp_post_options (scan_in); if (cpp_errors (scan_in)) exit (FATAL_EXIT_CODE); diff --git a/gcc/treelang/ChangeLog b/gcc/treelang/ChangeLog index 655cc7575ccc..ab7d5804e102 100644 --- a/gcc/treelang/ChangeLog +++ b/gcc/treelang/ChangeLog @@ -1,3 +1,7 @@ +2002-08-13 Neil Booth + + * treelang.c: Remove cpp_post_options. + 2002-08-08 Nathan Sidwell * treelang/Make-lang.in (treelang.mostlyclean): Remove coverage files. diff --git a/gcc/treelang/treetree.c b/gcc/treelang/treetree.c index 5c8295600485..573c273481b1 100644 --- a/gcc/treelang/treetree.c +++ b/gcc/treelang/treetree.c @@ -954,14 +954,6 @@ cpp_create_reader (enum c_lang lang ATTRIBUTE_UNUSED) /* Should not be called for treelang. */ -void -cpp_post_options (cpp_reader *pfile ATTRIBUTE_UNUSED) -{ - abort (); -} - -/* Should not be called for treelang. */ - void cpp_preprocess_file (cpp_reader *pfile ATTRIBUTE_UNUSED) { -- 2.43.5