+2007-05-07 Robert Millan <rmh@aybabtu.com>
+
+ * util/i386/pc/grub-probe.c: Add `grub-probe -t partmap' parameter to
+ determine partition map module.
+ * util/i386/pc/grub-install.in: Use this feature to decide which
+ partition module to load, instead of hardcoding pc and gpt.
+
2007-05-07 Robert Millan <rmh@aybabtu.com>
* Makefile.in: Fix assumption that $(srcdir) has a trailing slash when
exit 1
fi
-# Typically, _chain, pc and gpt are required.
-modules="$modules $fs_module _chain pc gpt"
+# Then the partition map module.
+partmap_module=`$grub_probe --target=partmap --device-map=${device_map} ${grubdir}`
+if test "x$partmap_module" = x -a "x$modules" = x; then
+ echo "Auto-detection of a partition map module failed." 1>&2
+ echo "Please specify the module with the option \`--modules' explicitly." 1>&2
+ exit 1
+fi
+
+# _chain is often useful
+modules="$modules $fs_module $partmap_module _chain"
$grub_mkimage --output=${grubdir}/core.img $modules || exit 1
#define PRINT_FS 0
#define PRINT_DRIVE 1
#define PRINT_DEVICE 2
+#define PRINT_PARTMAP 3
int print = PRINT_FS;
if (! dev)
grub_util_error ("%s", grub_errmsg);
+ if (print == PRINT_PARTMAP)
+ {
+ if (strcmp (dev->disk->partition->partmap->name, "amiga_partition_map") == 0)
+ printf ("amiga\n");
+ else if (strcmp (dev->disk->partition->partmap->name, "apple_partition_map") == 0)
+ printf ("apple\n");
+ else if (strcmp (dev->disk->partition->partmap->name, "gpt_partition_map") == 0)
+ printf ("gpt\n");
+ else if (strcmp (dev->disk->partition->partmap->name, "pc_partition_map") == 0)
+ printf ("pc\n");
+ else if (strcmp (dev->disk->partition->partmap->name, "sun_partition_map") == 0)
+ printf ("sun\n");
+ else
+ grub_util_error ("Unknown partition map %s", dev->disk->partition->partmap->name);
+ goto end;
+ }
+
fs = grub_fs_probe (dev);
if (! fs)
grub_util_error ("%s", grub_errmsg);
Probe device information for a given path.\n\
\n\
-m, --device-map=FILE use FILE as the device map [default=%s]\n\
- -t, --target=(fs|drive|device) print filesystem module, GRUB drive or system device [default=fs]\n\
+ -t, --target=(fs|drive|device|partmap)\n\
+ print filesystem module, GRUB drive, system device or partition map module [default=fs]\n\
-h, --help display this message and exit\n\
-V, --version print version information and exit\n\
-v, --verbose print verbose messages\n\
print = PRINT_DRIVE;
else if (!strcmp (optarg, "device"))
print = PRINT_DEVICE;
+ else if (!strcmp (optarg, "partmap"))
+ print = PRINT_PARTMAP;
else
usage (1);
break;