011fe81
From d25ddbcafa537525f606938df0e500c50a5e93e1 Mon Sep 17 00:00:00 2001
78a3d7d
From: Vladimir Serbinenko <phcoder@gmail.com>
78a3d7d
Date: Fri, 24 Jan 2014 18:09:25 +0100
58fe9aa
Subject: [PATCH 042/152] 	* util/grub-install.c: List available targets.
78a3d7d
78a3d7d
---
78a3d7d
 ChangeLog                   |  4 ++++
78a3d7d
 include/grub/util/install.h |  2 ++
78a3d7d
 util/grub-install-common.c  | 30 ++++++++++++++++++++++++++++++
78a3d7d
 util/grub-install.c         | 10 ++++++++--
78a3d7d
 4 files changed, 44 insertions(+), 2 deletions(-)
78a3d7d
78a3d7d
diff --git a/ChangeLog b/ChangeLog
011fe81
index eee8e78..20e8baa 100644
78a3d7d
--- a/ChangeLog
78a3d7d
+++ b/ChangeLog
78a3d7d
@@ -1,3 +1,7 @@
78a3d7d
+2014-01-24  Vladimir Serbinenko  <phcoder@gmail.com>
78a3d7d
+
78a3d7d
+	* util/grub-install.c: List available targets.
78a3d7d
+
78a3d7d
 2014-01-23  Colin Watson  <cjwatson@ubuntu.com>
78a3d7d
 
78a3d7d
 	* util/grub-install.c (write_to_disk): Add an info message.
78a3d7d
diff --git a/include/grub/util/install.h b/include/grub/util/install.h
78a3d7d
index bc987aa..aedcd29 100644
78a3d7d
--- a/include/grub/util/install.h
78a3d7d
+++ b/include/grub/util/install.h
78a3d7d
@@ -138,6 +138,8 @@ grub_install_get_platform_cpu (enum grub_install_plat platid);
78a3d7d
 const char *
78a3d7d
 grub_install_get_platform_platform (enum grub_install_plat platid);
78a3d7d
 
78a3d7d
+char *
78a3d7d
+grub_install_get_platforms_string (void);
78a3d7d
 
78a3d7d
 typedef enum {
78a3d7d
   GRUB_COMPRESSION_AUTO,
78a3d7d
diff --git a/util/grub-install-common.c b/util/grub-install-common.c
78a3d7d
index 6ea0a8e..c8bedcb 100644
78a3d7d
--- a/util/grub-install-common.c
78a3d7d
+++ b/util/grub-install-common.c
78a3d7d
@@ -668,6 +668,36 @@ static struct
78a3d7d
   }; 
78a3d7d
 
78a3d7d
 char *
78a3d7d
+grub_install_get_platforms_string (void)
78a3d7d
+{
78a3d7d
+  char **arr = xmalloc (sizeof (char *) * ARRAY_SIZE (platforms));
78a3d7d
+  int platform_strins_len = 0;
78a3d7d
+  char *platforms_string;
78a3d7d
+  char *ptr;
78a3d7d
+  unsigned i;
78a3d7d
+  for (i = 0; i < ARRAY_SIZE (platforms); i++)
78a3d7d
+    {
78a3d7d
+      arr[i] = xasprintf ("%s-%s", platforms[i].cpu,
78a3d7d
+			  platforms[i].platform);
78a3d7d
+      platform_strins_len += strlen (arr[i]) + 2;
78a3d7d
+    }
78a3d7d
+  ptr = platforms_string = xmalloc (platform_strins_len);
78a3d7d
+  qsort (arr, ARRAY_SIZE (platforms), sizeof (char *), grub_qsort_strcmp);
78a3d7d
+  for (i = 0; i < ARRAY_SIZE (platforms); i++)
78a3d7d
+    {
78a3d7d
+      strcpy (ptr, arr[i]);
78a3d7d
+      ptr += strlen (arr[i]);
78a3d7d
+      *ptr++ = ',';
78a3d7d
+      *ptr++ = ' ';
78a3d7d
+      free (arr[i]);
78a3d7d
+    }
78a3d7d
+  ptr[-2] = 0;
78a3d7d
+  free (arr);
78a3d7d
+ 
78a3d7d
+  return platforms_string;
78a3d7d
+}
78a3d7d
+
78a3d7d
+char *
78a3d7d
 grub_install_get_platform_name (enum grub_install_plat platid)
78a3d7d
 {
78a3d7d
   return xasprintf ("%s-%s", platforms[platid].cpu,
78a3d7d
diff --git a/util/grub-install.c b/util/grub-install.c
78a3d7d
index 787dc90..2e6226a 100644
78a3d7d
--- a/util/grub-install.c
78a3d7d
+++ b/util/grub-install.c
78a3d7d
@@ -256,7 +256,7 @@ static struct argp_option options[] = {
78a3d7d
    OPTION_HIDDEN, 0, 2},
78a3d7d
   {"target", OPTION_TARGET, N_("TARGET"),
78a3d7d
    /* TRANSLATORS: "TARGET" as in "target platform".  */
78a3d7d
-   0, N_("install GRUB for TARGET platform [default=%s]"), 2},
78a3d7d
+   0, N_("install GRUB for TARGET platform [default=%s]; available targets: %s"), 2},
78a3d7d
   {"grub-setup", OPTION_SETUP, "FILE", OPTION_HIDDEN, 0, 2},
78a3d7d
   {"grub-mkrelpath", OPTION_MKRELPATH, "FILE", OPTION_HIDDEN, 0, 2},
78a3d7d
   {"grub-mkdevicemap", OPTION_MKDEVICEMAP, "FILE", OPTION_HIDDEN, 0, 2},
78a3d7d
@@ -340,7 +340,13 @@ help_filter (int key, const char *text, void *input __attribute__ ((unused)))
78a3d7d
     case OPTION_BOOT_DIRECTORY:
78a3d7d
       return xasprintf (text, GRUB_DIR_NAME, GRUB_BOOT_DIR_NAME "/" GRUB_DIR_NAME);
78a3d7d
     case OPTION_TARGET:
78a3d7d
-      return xasprintf (text, get_default_platform ());
78a3d7d
+      {
78a3d7d
+	char *plats = grub_install_get_platforms_string ();
78a3d7d
+	char *ret;
78a3d7d
+	ret = xasprintf (text, get_default_platform (), plats);
78a3d7d
+	free (plats);
78a3d7d
+	return ret;
78a3d7d
+      }
78a3d7d
     case ARGP_KEY_HELP_POST_DOC:
78a3d7d
       return xasprintf (text, program_name, GRUB_BOOT_DIR_NAME "/" GRUB_DIR_NAME);
78a3d7d
     default:
78a3d7d
-- 
37b39b7
1.9.3
78a3d7d