versioner: improve usage messages.

Don't spew all of usage when called improperly, and add a -h option
that exits cleanly.

Change-Id: I1a4517edce75afe0f9a80bc8d6c81353d6c12e99
diff --git a/tools/versioner/src/versioner.cpp b/tools/versioner/src/versioner.cpp
index 1612ed0..5068a4e 100644
--- a/tools/versioner/src/versioner.cpp
+++ b/tools/versioner/src/versioner.cpp
@@ -470,21 +470,28 @@
   return !failed;
 }
 
-static void usage() {
-  fprintf(stderr, "Usage: versioner [OPTION]... HEADER_PATH [DEPS_PATH]\n");
-  fprintf(stderr, "Version headers at HEADER_PATH, with DEPS_PATH/ARCH/* on the include path\n");
-  fprintf(stderr, "\n");
-  fprintf(stderr, "Target specification (defaults to all):\n");
-  fprintf(stderr, "  -a API_LEVEL\tbuild with specified API level (can be repeated)\n");
-  fprintf(stderr, "    \t\tvalid levels are %s\n", Join(supported_levels).c_str());
-  fprintf(stderr, "  -r ARCH\tbuild with specified architecture (can be repeated)\n");
-  fprintf(stderr, "    \t\tvalid architectures are %s\n", Join(supported_archs).c_str());
-  fprintf(stderr, "\n");
-  fprintf(stderr, "Validation:\n");
-  fprintf(stderr, "  -p PATH\tcompare against NDK platform at PATH\n");
-  fprintf(stderr, "  -d\t\tdump symbol availability in libraries\n");
-  fprintf(stderr, "  -v\t\tenable verbose warnings\n");
-  exit(1);
+static void usage(bool help = false) {
+  fprintf(stderr, "Usage: versioner [OPTION]... [HEADER_PATH] [DEPS_PATH]\n");
+  if (!help) {
+    printf("Try 'versioner -h' for more information.\n");
+    exit(1);
+  } else {
+    fprintf(stderr, "Version headers at HEADER_PATH, with DEPS_PATH/ARCH/* on the include path\n");
+    fprintf(stderr, "\n");
+    fprintf(stderr, "Target specification (defaults to all):\n");
+    fprintf(stderr, "  -a API_LEVEL\tbuild with specified API level (can be repeated)\n");
+    fprintf(stderr, "    \t\tvalid levels are %s\n", Join(supported_levels).c_str());
+    fprintf(stderr, "  -r ARCH\tbuild with specified architecture (can be repeated)\n");
+    fprintf(stderr, "    \t\tvalid architectures are %s\n", Join(supported_archs).c_str());
+    fprintf(stderr, "\n");
+    fprintf(stderr, "Validation:\n");
+    fprintf(stderr, "  -p PATH\tcompare against NDK platform at PATH\n");
+    fprintf(stderr, "  -v\t\tenable verbose warnings\n");
+    fprintf(stderr, "\n");
+    fprintf(stderr, "Miscellaneous:\n");
+    fprintf(stderr, "  -h\t\tdisplay this message\n");
+    exit(0);
+  }
 }
 
 int main(int argc, char** argv) {
@@ -495,7 +502,7 @@
   std::set<int> selected_levels;
 
   int c;
-  while ((c = getopt(argc, argv, "a:r:p:n:duv")) != -1) {
+  while ((c = getopt(argc, argv, "a:r:p:vh")) != -1) {
     default_args = false;
     switch (c) {
       case 'a': {
@@ -542,6 +549,10 @@
         verbose = true;
         break;
 
+      case 'h':
+        usage(true);
+        break;
+
       default:
         usage();
         break;