]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* util/grub-install.c: List available targets.
authorVladimir Serbinenko <phcoder@gmail.com>
Fri, 24 Jan 2014 17:09:25 +0000 (18:09 +0100)
committerVladimir Serbinenko <phcoder@gmail.com>
Fri, 24 Jan 2014 17:09:25 +0000 (18:09 +0100)
ChangeLog
include/grub/util/install.h
util/grub-install-common.c
util/grub-install.c

index eee8e78a726f2e602361015ef789b951f080ee62..20e8baaa23e8c77eed0c5c6dc8bb5bc3ecaab7cf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2014-01-24  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * util/grub-install.c: List available targets.
+
 2014-01-23  Colin Watson  <cjwatson@ubuntu.com>
 
        * util/grub-install.c (write_to_disk): Add an info message.
index bc987aadc165bfdd85bf39ed1fad603f0d95b1eb..aedcd29f905ad4abb89489f9a3d0b142c7894367 100644 (file)
@@ -138,6 +138,8 @@ grub_install_get_platform_cpu (enum grub_install_plat platid);
 const char *
 grub_install_get_platform_platform (enum grub_install_plat platid);
 
+char *
+grub_install_get_platforms_string (void);
 
 typedef enum {
   GRUB_COMPRESSION_AUTO,
index 6ea0a8e17955ed8152a79e4322f05e091d9eea9a..c8bedcb2e593e14c703206bb46ce3168fb43d073 100644 (file)
@@ -667,6 +667,36 @@ static struct
     [GRUB_INSTALL_PLATFORM_ARM_UBOOT] =        { "arm",     "uboot"     },
   }; 
 
+char *
+grub_install_get_platforms_string (void)
+{
+  char **arr = xmalloc (sizeof (char *) * ARRAY_SIZE (platforms));
+  int platform_strins_len = 0;
+  char *platforms_string;
+  char *ptr;
+  unsigned i;
+  for (i = 0; i < ARRAY_SIZE (platforms); i++)
+    {
+      arr[i] = xasprintf ("%s-%s", platforms[i].cpu,
+                         platforms[i].platform);
+      platform_strins_len += strlen (arr[i]) + 2;
+    }
+  ptr = platforms_string = xmalloc (platform_strins_len);
+  qsort (arr, ARRAY_SIZE (platforms), sizeof (char *), grub_qsort_strcmp);
+  for (i = 0; i < ARRAY_SIZE (platforms); i++)
+    {
+      strcpy (ptr, arr[i]);
+      ptr += strlen (arr[i]);
+      *ptr++ = ',';
+      *ptr++ = ' ';
+      free (arr[i]);
+    }
+  ptr[-2] = 0;
+  free (arr);
+  return platforms_string;
+}
+
 char *
 grub_install_get_platform_name (enum grub_install_plat platid)
 {
index 787dc90fce5bbe916703b612bd53b496ab3fccd0..2e6226a371629713522b2eeca76603ddf5fd5630 100644 (file)
@@ -256,7 +256,7 @@ static struct argp_option options[] = {
    OPTION_HIDDEN, 0, 2},
   {"target", OPTION_TARGET, N_("TARGET"),
    /* TRANSLATORS: "TARGET" as in "target platform".  */
-   0, N_("install GRUB for TARGET platform [default=%s]"), 2},
+   0, N_("install GRUB for TARGET platform [default=%s]; available targets: %s"), 2},
   {"grub-setup", OPTION_SETUP, "FILE", OPTION_HIDDEN, 0, 2},
   {"grub-mkrelpath", OPTION_MKRELPATH, "FILE", OPTION_HIDDEN, 0, 2},
   {"grub-mkdevicemap", OPTION_MKDEVICEMAP, "FILE", OPTION_HIDDEN, 0, 2},
@@ -340,7 +340,13 @@ help_filter (int key, const char *text, void *input __attribute__ ((unused)))
     case OPTION_BOOT_DIRECTORY:
       return xasprintf (text, GRUB_DIR_NAME, GRUB_BOOT_DIR_NAME "/" GRUB_DIR_NAME);
     case OPTION_TARGET:
-      return xasprintf (text, get_default_platform ());
+      {
+       char *plats = grub_install_get_platforms_string ();
+       char *ret;
+       ret = xasprintf (text, get_default_platform (), plats);
+       free (plats);
+       return ret;
+      }
     case ARGP_KEY_HELP_POST_DOC:
       return xasprintf (text, program_name, GRUB_BOOT_DIR_NAME "/" GRUB_DIR_NAME);
     default: