aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZack Weinberg <zack@wolery.stanford.edu>2001-01-05 23:41:00 +0000
committerZack Weinberg <zack@gcc.gnu.org>2001-01-05 23:41:00 +0000
commitf4cdc368349bc046cd0874408bad7fc6f2104a3a (patch)
treed4a4a93914e1c41a8f3f7e9b66d5a2e9ca0a0bac
parent3326b760b32854ee0f513b44d0be770fad8f49e6 (diff)
downloadgcc-f4cdc368349bc046cd0874408bad7fc6f2104a3a.zip
gcc-f4cdc368349bc046cd0874408bad7fc6f2104a3a.tar.gz
gcc-f4cdc368349bc046cd0874408bad7fc6f2104a3a.tar.bz2
cpplib.h (struct cpp_reader): Add help_only field.
* cpplib.h (struct cpp_reader): Add help_only field. * cppinit.c (COMMAND_LINE_OPTIONS): Add OPT_version. (cpp_handle_option): Set pfile->help_only if we see -h, --help, -target-help, or --version. Print version string but do not set help_only if we see -v or -version. Make text printed by -v match that printed by (-)-version. * cppmain.c (main): Exit after option parsing if pfile->help_only is true. * toplev.c (independent_decode_option): Call print_version, then exit, if we see --version (but not -version). (print_version): Split lengthy message into two lines. From-SVN: r38733
-rw-r--r--gcc/ChangeLog16
-rw-r--r--gcc/cppinit.c35
-rw-r--r--gcc/cpplib.h4
-rw-r--r--gcc/cppmain.c7
-rw-r--r--gcc/toplev.c11
5 files changed, 58 insertions, 15 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 77de023..580133c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,19 @@
+2001-01-05 Zack Weinberg <zack@wolery.stanford.edu>
+
+ * cpplib.h (struct cpp_reader): Add help_only field.
+ * cppinit.c (COMMAND_LINE_OPTIONS): Add OPT_version.
+ (cpp_handle_option): Set pfile->help_only if we see -h,
+ --help, -target-help, or --version. Print version string but
+ do not set help_only if we see -v or -version. Make text
+ printed by -v match that printed by (-)-version.
+
+ * cppmain.c (main): Exit after option parsing if
+ pfile->help_only is true.
+
+ * toplev.c (independent_decode_option): Call print_version,
+ then exit, if we see --version (but not -version).
+ (print_version): Split lengthy message into two lines.
+
2001-01-05 Nick Clifton <nickc@redhat.com>
* config/v850/v850.c (v850_encode_data_area): Use alloca to create
diff --git a/gcc/cppinit.c b/gcc/cppinit.c
index 310fc04..7454b6f 100644
--- a/gcc/cppinit.c
+++ b/gcc/cppinit.c
@@ -1130,6 +1130,7 @@ new_pending_directive (pend, text, handler)
DEF_OPT("std=iso9899:199x", 0, OPT_std_iso9899_199x) \
DEF_OPT("trigraphs", 0, OPT_trigraphs) \
DEF_OPT("v", 0, OPT_v) \
+ DEF_OPT("version", 0, OPT_version) \
DEF_OPT("w", 0, OPT_w)
#define DEF_OPT(text, msg, code) code,
@@ -1322,16 +1323,32 @@ cpp_handle_option (pfile, argc, argv)
case OPT_h:
case OPT__help:
print_help ();
- exit (0); /* XXX */
+ pfile->help_only = 1;
break;
case OPT_target__help:
- /* Print if any target specific options. */
- exit (0);
+ /* Print if any target specific options. cpplib has none, but
+ make sure help_only gets set. */
+ pfile->help_only = 1;
break;
+
+ /* --version inhibits compilation, -version doesn't. -v means
+ verbose and -version. Historical reasons, don't ask. */
case OPT__version:
- fprintf (stderr, _("GNU CPP version %s (cpplib)\n"), version_string);
- exit (0); /* XXX */
+ pfile->help_only = 1;
+ goto version;
+ case OPT_v:
+ CPP_OPTION (pfile, verbose) = 1;
+ goto version;
+
+ case OPT_version:
+ version:
+ fprintf (stderr, _("GNU CPP version %s (cpplib)"), version_string);
+#ifdef TARGET_VERSION
+ TARGET_VERSION;
+#endif
+ fputc ('\n', stderr);
break;
+
case OPT_C:
CPP_OPTION (pfile, discard_comments) = 0;
break;
@@ -1425,14 +1442,6 @@ cpp_handle_option (pfile, argc, argv)
if (!strcmp (CPP_OPTION (pfile, out_fname), "-"))
CPP_OPTION (pfile, out_fname) = "";
break;
- case OPT_v:
- fprintf (stderr, _("GNU CPP version %s (cpplib)"), version_string);
-#ifdef TARGET_VERSION
- TARGET_VERSION;
-#endif
- fputc ('\n', stderr);
- CPP_OPTION (pfile, verbose) = 1;
- break;
case OPT_stdin_stdout:
/* JF handle '-' as file name meaning stdin or stdout. */
if (CPP_OPTION (pfile, in_fname) == NULL)
diff --git a/gcc/cpplib.h b/gcc/cpplib.h
index c2049d7..7b53d09 100644
--- a/gcc/cpplib.h
+++ b/gcc/cpplib.h
@@ -616,6 +616,10 @@ struct cpp_reader
/* True if we are skipping a failed conditional group. */
unsigned char skipping;
+
+ /* True if --help appeared in the options. Caller should then bail
+ out after option parsing and printing its own help. See cppmain.c. */
+ unsigned char help_only;
};
#define CPP_FATAL_LIMIT 1000
diff --git a/gcc/cppmain.c b/gcc/cppmain.c
index ace260c..6fa158d 100644
--- a/gcc/cppmain.c
+++ b/gcc/cppmain.c
@@ -82,6 +82,13 @@ main (argc, argv)
if (CPP_FATAL_ERRORS (pfile))
return (FATAL_EXIT_CODE);
+ /* If cpp_handle_options saw --help or --version on the command
+ line, it will have set pfile->help_only to indicate this. Exit
+ successfully. [The library does not exit itself, because
+ e.g. cc1 needs to print its own --help message at this point.] */
+ if (pfile->help_only)
+ return (SUCCESS_EXIT_CODE);
+
/* Open the output now. We must do so even if no_output is on,
because there may be other output than from the actual
preprocessing (e.g. from -dM). */
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 9e10186..671ce2c 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -4340,6 +4340,12 @@ independent_decode_option (argc, argv)
exit (0);
}
+ if (!strcmp (arg, "-version"))
+ {
+ print_version (stderr, "");
+ exit (0);
+ }
+
if (*arg == 'Y')
arg++;
@@ -4934,12 +4940,13 @@ print_version (file, indent)
#endif
fnotice (file,
#ifdef __GNUC__
- "%s%s%s version %s (%s) compiled by GNU C version %s.\n"
+ "%s%s%s version %s (%s)\n%s\tcompiled by GNU C version %s.\n"
#else
"%s%s%s version %s (%s) compiled by CC.\n"
#endif
, indent, *indent != 0 ? " " : "",
- language_string, version_string, TARGET_NAME, __VERSION__);
+ language_string, version_string, TARGET_NAME,
+ indent, __VERSION__);
}
/* Print an option value and return the adjusted position in the line.