summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorneil <neil@138bc75d-0d04-0410-961f-82ee72b054a4>2001-12-04 22:26:16 +0000
committerneil <neil@138bc75d-0d04-0410-961f-82ee72b054a4>2001-12-04 22:26:16 +0000
commit258d3911fa8cdf1bedf60e66226a1ad2122f440b (patch)
tree4aec21524555a6f1865b61882e878e800162659f /gcc
parent67cd941fba673a6ad5500ce5657f48c8840e8cef (diff)
downloadgcc-258d3911fa8cdf1bedf60e66226a1ad2122f440b.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47627 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/cppspec.c3
-rw-r--r--gcc/gcc.c79
3 files changed, 55 insertions, 36 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 70064a1993f..b968b3bce1a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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>
diff --git a/gcc/cppspec.c b/gcc/cppspec.c
index 27a82360105..5f787d61c8d 100644
--- a/gcc/cppspec.c
+++ b/gcc/cppspec.c
@@ -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
diff --git a/gcc/gcc.c b/gcc/gcc.c
index cb2e47bc40b..b65cbb3c388 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -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;
}