This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[gold patch] Add --help and --version options to dwp.


Thanks for the reviews so far!

I've added --help and --version options to dwp, although I wasn't
quite sure about whether to send the entire usage message to stderr
in the case of an invalid option.  I've elected to just use
the binutils version string.

-cary


gold/
	* 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/dwp.cc |   59 ++++++++++++++++++++++++++++++++++++++++++++---------------
 1 file changed, 44 insertions(+), 15 deletions(-)

diff --git a/gold/dwp.cc b/gold/dwp.cc
index 3f52325..b59e00e 100644
--- a/gold/dwp.cc
+++ b/gold/dwp.cc
@@ -34,6 +34,7 @@
 
 #include "getopt.h"
 #include "libiberty.h"
+#include "../bfd/bfdver.h"
 
 #include "elfcpp.h"
 #include "elfcpp_file.h"
@@ -45,7 +46,10 @@
 #include "dwarf_reader.h"
 
 static void
-usage() ATTRIBUTE_NORETURN;
+usage(FILE* fd, int) ATTRIBUTE_NORETURN;
+
+static void
+print_version() ATTRIBUTE_NORETURN;
 
 namespace gold {
 
@@ -1979,26 +1983,47 @@ using namespace gold;
 
 // Options.
 
-extern int optind;
-extern char* optarg;
-
 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.
@@ -2037,19 +2062,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)
-- 
1.7.9.6 (Apple Git-31.1)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]