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
This commit is contained in:
Neil Booth 2001-12-04 22:26:16 +00:00 committed by Neil Booth
parent e288604a6a
commit 69927b59f2
3 changed files with 55 additions and 36 deletions

View File

@ -1,3 +1,10 @@
2001-12-04 Neil Booth <neil@daikokuya.demon.co.uk>
* 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.
2001-12-04 David Edelsohn <edelsohn@gnu.org>
* config/elfos.h (ASM_OUTPUT_INTERNAL_LABEL): Display count unsigned.
@ -140,7 +147,7 @@
2001-12-03 Neil Booth <neil@daikokuya.demon.co.uk>
PR c/4988
* (process_command): Don't add a preprocessor option for
* gcc.c (process_command): Don't add a preprocessor option for
--help and --target-help; cc1 is enough.
2001-12-03 Neil Booth <neil@daikokuya.demon.co.uk>

View File

@ -103,6 +103,9 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries)
int i, j, quote = 0;
const char **new_argv;
int new_argc;
extern int is_cpp_driver;
is_cpp_driver = 1;
/* First pass. If we see an -S or -c, barf. If we see an input file,
turn off read_stdin. If we see a second input file, it is actually

View File

@ -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;
}