cpplib.h (struct cpp_reader): Add help_only field.
authorZack Weinberg <zack@wolery.stanford.edu>
Fri, 5 Jan 2001 23:41:00 +0000 (23:41 +0000)
committerZack Weinberg <zack@gcc.gnu.org>
Fri, 5 Jan 2001 23:41:00 +0000 (23:41 +0000)
* 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

gcc/ChangeLog
gcc/cppinit.c
gcc/cpplib.h
gcc/cppmain.c
gcc/toplev.c

index 77de02328dceb6089b9cbd3ff9ae689a8c74a9c3..580133ce0bbbad6af9717080c54af1249fee0300 100644 (file)
@@ -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
index 310fc04edba6adcb5004f0f7b31df740ed9f0cfb..7454b6f67337ef48a27dd6059c1079f6a632ebc8 100644 (file)
@@ -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)
index c2049d787abae2e09f018975a6853429510286c6..7b53d0959c7aa97ff472c1e825bca332cac322e6 100644 (file)
@@ -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
index ace260ca8cae3a3d28db7eaa05ec89353dfcde29..6fa158d284d5ae6a69ddfc87fc8499e8e95e4069 100644 (file)
@@ -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).  */
index 9e101860d8aed4f0e15454d5bbc5bfe85c63bd15..671ce2cd5d666a3304aa61027a1f751e750d2820 100644 (file)
@@ -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.