gold/
authorCary Coutant <ccoutant@google.com>
Mon, 29 Oct 2012 23:01:51 +0000 (23:01 +0000)
committerCary Coutant <ccoutant@google.com>
Mon, 29 Oct 2012 23:01:51 +0000 (23:01 +0000)
* dwp.cc (usage): Add file and exit status parameters;
add --help and --version options.
(print_version): New function.
(main): Add --help and --version options.

gold/ChangeLog
gold/dwp.cc

index e892ef8dbe261992368135af16e49ca1a5a4fae4..57c7cc3cff76708c9158211ad05183a03aba912e 100644 (file)
@@ -1,3 +1,10 @@
+2012-10-29  Cary Coutant  <ccoutant@google.com>
+
+       * dwp.cc (usage): Add file and exit status parameters;
+       add --help and --version options.
+       (print_version): New function.
+       (main): Add --help and --version options.
+
 2012-10-25  H.J. Lu  <hongjiu.lu@intel.com>
 
        * testsuite/Makefile.am (MOSTLYCLEANFILES): Add
index 92e3b6b84a32500954791a51d84dcfaa30a79051..3f7d7bb8d599b369a73d31298de0b1f8256fd934 100644 (file)
@@ -34,6 +34,7 @@
 
 #include "getopt.h"
 #include "libiberty.h"
+#include "../bfd/bfdver.h"
 
 #include "elfcpp.h"
 #include "elfcpp_file.h"
 #include "dwarf_reader.h"
 
 static void
-usage() ATTRIBUTE_NORETURN;
+usage(FILE* fd, int) ATTRIBUTE_NORETURN;
+
+static void
+print_version() ATTRIBUTE_NORETURN;
 
 namespace gold {
 
@@ -1983,21 +1987,45 @@ using namespace gold;
 
 struct option dwp_options[] =
   {
-    { "verbose", no_argument, NULL, 'v' },
+    { "help", no_argument, NULL, 'h' },
     { "output", required_argument, NULL, 'o' },
+    { "verbose", no_argument, NULL, 'v' },
+    { "version", no_argument, NULL, 'V' },
     { NULL, 0, NULL, 0 }
   };
 
 // Print usage message and exit.
 
 static void
-usage()
+usage(FILE* fd, int exit_status)
 {
-  fprintf(stderr, _("Usage: %s [options] file...\n"), program_name);
-  fprintf(stderr, _("  -v, --verbose            Verbose output\n"));
-  fprintf(stderr, _("  -o FILE, --output FILE   Set output dwp file name"
+  fprintf(fd, _("Usage: %s [options] file...\n"), program_name);
+  fprintf(fd, _("  -h, --help               Print this help message\n"));
+  fprintf(fd, _("  -o FILE, --output FILE   Set output dwp file name"
                    " (required)\n"));
-  exit(1);
+  fprintf(fd, _("  -v, --verbose            Verbose output\n"));
+  fprintf(fd, _("  -V, --version            Print version number\n"));
+
+  // REPORT_BUGS_TO is defined in bfd/bfdver.h.
+  const char* report = REPORT_BUGS_TO;
+  if (*report != '\0')
+    fprintf(fd, _("\nReport bugs to %s\n"), report);
+  exit(exit_status);
+}
+
+// Report version information.
+
+static void
+print_version()
+{
+  // This output is intended to follow the GNU standards.
+  printf("GNU dwp %s\n", BFD_VERSION_STRING);
+  printf(_("Copyright 2012 Free Software Foundation, Inc.\n"));
+  printf(_("\
+This program is free software; you may redistribute it under the terms of\n\
+the GNU General Public License version 3 or (at your option) any later version.\n\
+This program has absolutely no warranty.\n"));
+  exit(EXIT_SUCCESS);
 }
 
 // Main program.
@@ -2036,19 +2064,23 @@ main(int argc, char** argv)
   const char* output_filename = NULL;
   bool verbose = false;
   int c;
-  while ((c = getopt_long(argc, argv, "vo:", dwp_options, NULL)) != -1)
+  while ((c = getopt_long(argc, argv, "ho:vV", dwp_options, NULL)) != -1)
     {
       switch (c)
         {
-         case 'v':
-           verbose = true;
-           break;
+         case 'h':
+           usage(stdout, EXIT_SUCCESS);
          case 'o':
            output_filename = optarg;
            break;
+         case 'v':
+           verbose = true;
+           break;
+         case 'V':
+           print_version();
          case '?':
          default:
-           usage();
+           usage(stderr, EXIT_FAILURE);
        }
     }
   for (int i = optind; i < argc; ++i)