diff options
author | Neil Booth <neil@daikokuya.demon.co.uk> | 2001-12-04 22:26:16 +0000 |
---|---|---|
committer | Neil Booth <neil@gcc.gnu.org> | 2001-12-04 22:26:16 +0000 |
commit | 69927b59f2c4b5de206b5fb336821ba8dd645e59 (patch) | |
tree | 4aec21524555a6f1865b61882e878e800162659f /gcc/gcc.c | |
parent | e288604a6a9e320c3d1434733ce5bd6609e87042 (diff) | |
download | gcc-69927b59f2c4b5de206b5fb336821ba8dd645e59.zip gcc-69927b59f2c4b5de206b5fb336821ba8dd645e59.tar.gz gcc-69927b59f2c4b5de206b5fb336821ba8dd645e59.tar.bz2 |
cppspec.c (lang_specific_driver): Set is_cpp_driver.
* cppspec.c (lang_specific_driver): Set is_cpp_driver.
* gcc.c (process_command): Ensure the cpp driver sees
--help and --target-help, and that the help is printed
exactly once.
From-SVN: r47627
Diffstat (limited to 'gcc/gcc.c')
-rw-r--r-- | gcc/gcc.c | 79 |
1 files changed, 44 insertions, 35 deletions
@@ -143,6 +143,9 @@ static const char dir_separator_str[] = { DIR_SEPARATOR, 0 }; #define MIN_FATAL_STATUS 1 +/* Flag set by cppspec.c to 1. */ +int is_cpp_driver; + /* Flag saying to pass the greatest exit code returned by a sub-process to the calling program. */ static int pass_exit_codes; @@ -3310,6 +3313,9 @@ process_command (argc, argv) n_infiles++; n_switches++; + /* CPP driver cannot obtain switch from cc1_options. */ + if (is_cpp_driver) + add_preprocessor_option ("--help", 6); add_assembler_option ("--help", 6); add_linker_option ("--help", 6); } @@ -3322,6 +3328,9 @@ process_command (argc, argv) n_infiles++; n_switches++; + /* CPP driver cannot obtain switch from cc1_options. */ + if (is_cpp_driver) + add_preprocessor_option ("--target-help", 13); add_assembler_option ("--target-help", 13); add_linker_option ("--target-help", 13); } @@ -3792,41 +3801,10 @@ process_command (argc, argv) ; else if (! strcmp (argv[i], "-print-multi-directory")) ; - else if (strcmp (argv[i], "-ftarget-help") == 0) - { - /* Create a dummy input file, so that we can pass --target-help on to - the various sub-processes. */ - infiles[n_infiles].language = "c"; - infiles[n_infiles++].name = "target-dummy"; - - /* Preserve the --target-help switch so that it can be caught by - the cc1 spec string. */ - switches[n_switches].part1 = "--target-help"; - switches[n_switches].args = 0; - switches[n_switches].live_cond = SWITCH_OK; - switches[n_switches].validated = 0; - - n_switches++; - } - else if (strcmp (argv[i], "-fhelp") == 0) - { - if (verbose_flag) - { - /* Create a dummy input file, so that we can pass --help on to - the various sub-processes. */ - infiles[n_infiles].language = "c"; - infiles[n_infiles++].name = "help-dummy"; - - /* Preserve the --help switch so that it can be caught by the - cc1 spec string. */ - switches[n_switches].part1 = "--help"; - switches[n_switches].args = 0; - switches[n_switches].live_cond = SWITCH_OK; - switches[n_switches].validated = 0; - - n_switches++; - } - } + else if (! strcmp (argv[i], "-ftarget-help")) + ; + else if (! strcmp (argv[i], "-fhelp")) + ; else if (argv[i][0] == '+' && argv[i][1] == 'e') { /* Compensate for the +e options to the C++ front-end; @@ -3989,6 +3967,37 @@ process_command (argc, argv) if (n_infiles == last_language_n_infiles && spec_lang != 0) error ("warning: `-x %s' after last input file has no effect", spec_lang); + /* Ensure we only invoke each subprocess once. */ + if (target_help_flag || print_help_list) + { + n_infiles = 1; + + /* Create a dummy input file, so that we can pass --target-help on to + the various sub-processes. */ + infiles[0].language = "c"; + infiles[0].name = "help-dummy"; + + if (target_help_flag) + { + switches[n_switches].part1 = "--target-help"; + switches[n_switches].args = 0; + switches[n_switches].live_cond = SWITCH_OK; + switches[n_switches].validated = 0; + + n_switches++; + } + + if (print_help_list) + { + switches[n_switches].part1 = "--help"; + switches[n_switches].args = 0; + switches[n_switches].live_cond = SWITCH_OK; + switches[n_switches].validated = 0; + + n_switches++; + } + } + switches[n_switches].part1 = 0; infiles[n_infiles].name = 0; } |