]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Autodetect platform in grub-install but allow override.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 27 Feb 2012 15:06:18 +0000 (16:06 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 27 Feb 2012 15:06:18 +0000 (16:06 +0100)
* util/grub-install.in: Autodetect platform. Support --target and
--directory. Read platform from modinfo.sh.

ChangeLog
util/grub-install.in

index 211fa7aed8d881175eec4c6eab687ddd1f1a7ab2..86dabfd9e9e435840a98838407736fe985a8d31c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2012-02-27  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       Autodetect platform in grub-install but allow override.
+
+       * util/grub-install.in: Autodetect platform. Support --target and
+       --directory. Read platform from modinfo.sh.
+
 2012-02-27  Vladimir Serbinenko  <phcoder@gmail.com>
 
        Support btrfs multi-volume probe.
index 1ee41d163cf8b710cf1b6be455cb26c1392eba4c..047993d9c27536e75ffc0994fadf05f585523e0e 100644 (file)
@@ -29,10 +29,9 @@ sysconfdir="@sysconfdir@"
 PACKAGE_NAME=@PACKAGE_NAME@
 PACKAGE_TARNAME=@PACKAGE_TARNAME@
 PACKAGE_VERSION=@PACKAGE_VERSION@
-target_cpu=@target_cpu@
-platform=@platform@
 host_os=@host_os@
-pkglibdir="${libdir}/@PACKAGE@/${target_cpu}-${platform}"
+source_dir=
+target=
 datadir="@datadir@"
 if [ "x$pkgdatadir" = x ]; then
     pkgdatadir="${datadir}/@PACKAGE@"
@@ -71,33 +70,24 @@ if test -z "$bootloader_id"; then
     bootloader_id=grub
 fi
 
-if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
-    disk_module=biosdisk
-elif [ "${platform}" = "ieee1275" ] || [ "${platform}" = "efi" ] ; then
-    disk_module=
-else
-    disk_module=native
-fi
+disk_module=unspecified
 
 . "${pkgdatadir}/grub-mkconfig_lib"
 
 # Usage: usage
 # Print the usage.
 usage () {
-    if [ "${target_cpu}-${platform}" = "i386-pc" ] \
-       || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ]; then
-       gettext_printf "Usage: %s [OPTION] INSTALL_DEVICE" "$self"
-    else
-       gettext_printf "Usage: %s [OPTION] [INSTALL_DEVICE]" "$self"
-    fi
+    gettext_printf "Usage: %s [OPTION] [INSTALL_DEVICE]" "$self"
     echo
     gettext "Install GRUB on your drive." ; echo
     echo
     printf "  -h, --help              %s\n" "$(gettext "print this message and exit")"
     printf "  -v, --version           %s\n" "$(gettext "print the version information and exit")"
     printf "  --modules=%-14s%s\n" "$(gettext "MODULES")" "$(gettext "pre-load specified modules MODULES")"
-    dirmsg="$(printf "install GRUB images under the directory DIR/%s instead of the %s directory" "@grubdirname@" "$grubdir")"
+    dirmsg="$(gettext_printf "install GRUB images under the directory DIR/%s instead of the %s directory" "@grubdirname@" "$grubdir")"
     printf "  --boot-directory=%-7s%s\n" "$(gettext "DIR")" "$dirmsg"
+    printf "  --target=%-15s%s\n" "$(gettext "TARGET")" "$(gettext "install GRUB for TARGET platform [default=current]")"
+    printf "  --directory=%-12s%s\n" "$(gettext "DIR")" "$(gettext "use GRUB images from DIR. Takes precedence over target")"
     printf "  --grub-setup=%-11s%s\n" "$(gettext "FILE")" "$(gettext "use FILE as grub-setup")"
     printf "  --grub-mkimage=%-9s%s\n" "$(gettext "FILE")" "$(gettext "use FILE as grub-mkimage")"
     printf "  --grub-mkrelpath=%-7s%s\n" "$(gettext "FILE")" "$(gettext "use FILE as grub-mkrelpath")"
@@ -106,17 +96,10 @@ usage () {
     printf "  --recheck               %s\n" "$(gettext "delete device map if it already exists")"
     printf "  --force                 %s\n" "$(gettext "install even if problems are detected")"
     printf "  --force-file-id         %s\n" "$(gettext "use ID file even if UUID is available")"
-if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
-    printf "  --disk-module=%-10s%s\n" "$(gettext "MODULE")" "$(gettext "disk module to use (biosdisk or native)")"
-fi
-if [ "${target_cpu}-${platform}" = "i386-ieee1275" ] || [ "${target_cpu}-${platform}" = "powerpc-ieee1275" ] ; then
-    printf "  --no-nvram              %s\n" "$(gettext "don't update the \`boot-device' NVRAM variable")"
-fi
-if [ "${platform}" = "efi" ]; then
-
-    printf "   --removable             %s\n" "$(gettext "the installation device is removable")"
-    printf "   --bootloader-id=%-8s%s\n" "$(gettext "ID")" "$(gettext "the ID of bootloader.")"
-fi
+    printf "  --disk-module=%-10s%s\n" "$(gettext "MODULE")" "$(gettext "disk module to use (biosdisk or native). Only available on BIOS target")"
+    printf "  --no-nvram              %s\n" "$(gettext "don't update the \`boot-device' NVRAM variable. Only available on IEEE1275 targets.")"
+    printf "  --removable             %s\n" "$(gettext "the installation device is removable. Only available on EFI.")"
+    printf "  --bootloader-id=%-8s%s\n" "$(gettext "ID")" "$(gettext "the ID of bootloader. Only available on EFI.")"
 echo
 gettext "INSTALL_DEVICE must be system device filename.";echo
 echo
@@ -180,6 +163,16 @@ do
     --boot-directory=*)
        bootdir="`echo "$option" | sed 's/--boot-directory=//'`" ;;
 
+    --directory | -d)
+       source_dir="`argument $option "$@"`"; shift;;
+    --directory=*)
+       source_dir="`echo "$option" | sed 's/--directory=//'`" ;;
+
+    --target)
+       target="`argument $option "$@"`"; shift;;
+    --target=*)
+       target="`echo "$option" | sed 's/--target=//'`" ;;
+
     --grub-setup)
        grub_setup="`argument "$option" "$@"`"; shift;;
     --grub-setup=*)
@@ -222,13 +215,11 @@ do
        allow_floppy="--allow-floppy" ;;
 
     --disk-module)
-       if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
-           disk_module="`argument "$option" "$@"`"; shift;
-       fi ;;
+       disk_module="`argument "$option" "$@"`"; shift;
+       ;;
     --disk-module=*)
-       if [ "${target_cpu}-${platform}" = "i386-pc" ] ; then
-           disk_module="`echo "$option" | sed 's/--disk-module=//'`"
-        fi ;;
+        disk_module="`echo "$option" | sed 's/--disk-module=//'`"
+       ;;
 
     --no-nvram)
        update_nvram=no ;;
@@ -260,26 +251,77 @@ do
     esac
 done
 
-if test "x$grub_setup" = x && [ "${target_cpu}-${platform}" = "i386-pc" ]; then
+if [ x$source_dir = x ]; then
+    if [ x$target = x ]; then
+       case x"`uname -m`" in
+           x"powerpc"* | x"ppc"*)
+               target="powerpc-ieee1275";;
+           x"sparc"*)
+               target="sparc64-ieee1275";;
+           x"mips"*"el")
+               target="mipsel-loongson";;
+           x"mips"*)
+               target="mips-arc";;
+           x"ia64"*)
+               target="ia64-efi";;
+           x"x86_64"* | x"amd64"*)
+               if [ -d /sys/firmware/efi ]; then
+                   target="x86_64-efi"
+               fi
+               target=i386-pc;;
+           x"i"?"86"*)
+               if [ -d /sys/firmware/efi ]; then
+                   target="i386-efi"
+               fi
+               if [ -e /proc/device-tree ]; then
+                   target="i386-ieee1275"
+               fi
+               target=i386-pc;;
+           *)
+               gettext "Unable to determine your platform. Use --target." ;
+               echo    ;;
+       esac
+    fi
+    source_dir="${libdir}/@PACKAGE@/$target"
+fi
+
+if ! [ -d "source_dir" ]; then
+    gettext_printf "%s doesn't seem to exist. Please specify --target or --directory\\n" "source_dir"
+    exit 1
+fi
+
+. "${source_dir}"/modinfo.sh
+
+if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-pc" ] ; then
+    if [ x$disk_module = xunspecified ]; then
+       disk_module=biosdisk
+    fi
+elif [ "${grub_modinfo_platform}" = "ieee1275" ] || [ "${grub_modinfo_platform}" = "efi" ] ; then
+    disk_module=
+else
+    disk_module=native
+fi
+
+if test "x$grub_setup" = x && [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-pc" ]; then
     grub_setup="${sbindir}/`echo grub-bios-setup | sed ${transform}`"
 fi
 
-if test "x$grub_setup" = x && [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ]; then
+if test "x$grub_setup" = x && [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "sparc64-ieee1275" ]; then
     grub_setup="${sbindir}/`echo grub-sparc64-setup | sed ${transform}`"
 fi
 
-if test "x$install_device" = x && ([ "${target_cpu}-${platform}" = "i386-pc" ] \
-    || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ]); then
+if test "x$install_device" = x && ([ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-pc" ] \
+    || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "sparc64-ieee1275" ]); then
     gettext "Install device isn't specified." 1>&2
     echo 1>&2
     usage
     exit 1
 fi
 
-if ! ([ "${target_cpu}-${platform}" = "i386-pc" ] \
-    || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ] \
-    || [ "${target_cpu}-${platform}" = "powerpc-ieee1275" ] \
-    || [ "${target_cpu}-${platform}" = "mips-arc" ]); then
+if ! ([ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-pc" ] \
+    || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "sparc64-ieee1275" ] \
+    || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "powerpc-ieee1275" ] \
+    || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "mips-arc" ]); then
     install_device=
 fi
 
@@ -306,7 +348,7 @@ device_map="${grubdir}/device.map"
 
 
 # Check if GRUB is installed.
-if [ "${target_cpu}-${platform}" = "i386-pc" ] || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ] ; then
+if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-pc" ] || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "sparc64-ieee1275" ] ; then
     set $grub_setup dummy
     if test -f "$1"; then
         :
@@ -324,7 +366,7 @@ else
     exit 1
 fi
 
-if [ x"$platform" = xefi ]; then
+if [ x"$grub_modinfo_platform" = xefi ]; then
     # Find the EFI System Partition.
     efidir=
     if test -d "${bootdir}/efi"; then
@@ -370,7 +412,7 @@ if [ x"$platform" = xefi ]; then
           # from them.  The image must always reside under /EFI/BOOT, and it
           # must have a specific file name depending on the architecture.
            efi_distributor=BOOT
-           case "$target_cpu" in
+           case "$grub_modinfo_target_cpu" in
                i386)
                    efi_file=BOOTIA32.EFI ;;
                x86_64)
@@ -384,7 +426,7 @@ if [ x"$platform" = xefi ]; then
        else
            # It is convenient for each architecture to have a different
            # efi_file, so that different versions can be installed in parallel.
-           case "$target_cpu" in
+           case "$grub_modinfo_target_cpu" in
                i386)
                    efi_file=grubia32.efi ;;
                x86_64)
@@ -413,7 +455,7 @@ fi
 
 # Create the GRUB directory if it is not present.
 mkdir -p "$grubdir" || exit 1
-mkdir -p "$grubdir/${target_cpu}-$platform" || exit 1
+mkdir -p "$grubdir/${grub_modinfo_target_cpu}-$grub_modinfo_platform" || exit 1
 
 # If --recheck is specified, remove the device map, if present.
 if test $recheck = yes; then
@@ -434,18 +476,18 @@ else
 fi
 
 # Copy the GRUB images to the GRUB directory.
-for file in "${grubdir}"/*.mod "${grubdir}"/*.lst "${grubdir}"/*.img "${grubdir}"/efiemu??.o "${grubdir}"/${target_cpu}-$platform/*.mod "${grubdir}"/${target_cpu}-$platform/*.lst "${grubdir}"/${target_cpu}-$platform/*.img "${grubdir}"/${target_cpu}-$platform/efiemu??.o; do
+for file in "${grubdir}"/*.mod "${grubdir}"/*.lst "${grubdir}"/*.img "${grubdir}"/efiemu??.o "${grubdir}"/${grub_modinfo_target_cpu}-$grub_modinfo_platform/*.mod "${grubdir}"/${grub_modinfo_target_cpu}-$grub_modinfo_platform/*.lst "${grubdir}"/${grub_modinfo_target_cpu}-$grub_modinfo_platform/*.img "${grubdir}"/${grub_modinfo_target_cpu}-$grub_modinfo_platform/efiemu??.o; do
     if test -f "$file" && [ "`basename $file`" != menu.lst ]; then
        rm -f "$file" || exit 1
     fi
 done
-for file in "${pkglibdir}"/*.mod "${pkglibdir}"/*.lst; do
-    cp -f "$file" "${grubdir}/${target_cpu}-$platform" || exit 1
+for file in "${source_dir}"/*.mod "${source_dir}"/*.lst; do
+    cp -f "$file" "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform" || exit 1
 done
-if [ "${target_cpu}-${platform}" = "i386-pc" ] || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ] ; then
-    for file in "${pkglibdir}"/*.img "${pkglibdir}"/efiemu??.o; do
+if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-pc" ] || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "sparc64-ieee1275" ] ; then
+    for file in "${source_dir}"/*.img "${source_dir}"/efiemu??.o; do
        if test -f "$file"; then
-           cp -f "$file" "${grubdir}/${target_cpu}-$platform" || exit 1
+           cp -f "$file" "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform" || exit 1
        fi
     done
 fi
@@ -468,7 +510,7 @@ if test -f "${pkgdatadir}"/unicode.pf2; then
     cp "${pkgdatadir}"/unicode.pf2 "${grubdir}"/fonts
 fi
 
-is_path_readable_by_grub "${grubdir}/${target_cpu}-$platform" || (echo "${grubdir}" not readable 1>&2 ; exit 1)
+is_path_readable_by_grub "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform" || (echo "${grubdir}" not readable 1>&2 ; exit 1)
 
 # Write device to a variable so we don't have to traverse /dev every time.
 grub_device="`"$grub_probe" --device-map="${device_map}" --target=device "${grubdir}"`" || exit 1
@@ -510,7 +552,7 @@ fi
 
 if [ "x$disk_module" = xnative ]; then
     disk_module="pata ahci ohci"
-    if [ "x$target_cpu" = "xi386" ] || [ "x$target_cpu" = "xx86_64" ]; then
+    if [ "x$grub_modinfo_target_cpu" = "xi386" ] || [ "x$grub_modinfo_target_cpu" = "xx86_64" ]; then
        disk_module="$disk_module uhci"
     fi
     disk_module="$disk_module usbms"
@@ -528,11 +570,11 @@ fi
 prefix_drive=
 config_opt=
 
-rm -f "${grubdir}/${target_cpu}-$platform/load.cfg"
+rm -f "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg"
 
 if [ "x${debug_image}" != x ]; then
-    echo "set debug='${debug_image}'" >> "${grubdir}/${target_cpu}-$platform/load.cfg"
-    config_opt="-c ${grubdir}/${target_cpu}-$platform/load.cfg "
+    echo "set debug='${debug_image}'" >> "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg"
+    config_opt="-c ${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg "
 fi
 
 if [ "x${devabstraction_module}" = "x" ] ; then
@@ -549,7 +591,7 @@ if [ "x${devabstraction_module}" = "x" ] ; then
     # Strip partition number
     grub_partition="`echo "${grub_drive}" | sed -e 's/^(\(\([^,\\\\]\|\\\\\\\\\|\\\\,\)*\)\(\(,[a-zA-Z0-9]*\)*\))$/\3/'`"
     grub_drive="`echo "${grub_drive}" | sed -e 's/^(\(\([^,\\\\]\|\\\\\\\\\|\\\\,\)*\)\(\(,[a-zA-Z0-9]*\)*\))$/\1/'`"
-    if ([ "x$disk_module" != x ] && [ "x$disk_module" != xbiosdisk ]) || [ "x${grub_drive}" != "x${install_drive}" ] || ([ "x$platform" != xefi ] && [ "x$platform" != xpc ] && [ x"${platform}" != x"ieee1275" ]); then
+    if ([ "x$disk_module" != x ] && [ "x$disk_module" != xbiosdisk ]) || [ "x${grub_drive}" != "x${install_drive}" ] || ([ "x$grub_modinfo_platform" != xefi ] && [ "x$grub_modinfo_platform" != xpc ] && [ x"${grub_modinfo_platform}" != x"ieee1275" ]); then
         # generic method (used on coreboot and ata mod)
        uuid=
        if [ x"$force_file_id" != xy ]; then
@@ -558,31 +600,31 @@ if [ "x${devabstraction_module}" = "x" ] ; then
 
        if [ x"$disk_module" != x ] && [ x"$disk_module" != xbiosdisk ]; then
             hints="`echo "${grub_device}" | xargs "$grub_probe" --device-map="${device_map}" --target=baremetal_hints --device`"
-       elif [ x"$platform" = xpc ]; then
+       elif [ x"$grub_modinfo_platform" = xpc ]; then
             hints="`echo "${grub_device}" | xargs "$grub_probe" --device-map="${device_map}" --target=bios_hints --device`"
-       elif [ x"$platform" = xefi ]; then
+       elif [ x"$grub_modinfo_platform" = xefi ]; then
             hints="`echo "${grub_device}" | xargs "$grub_probe" --device-map="${device_map}" --target=efi_hints --device`"
-       elif [ x"$platform" = xieee1275 ]; then
+       elif [ x"$grub_modinfo_platform" = xieee1275 ]; then
             hints="`echo "${grub_device}" | xargs "$grub_probe" --device-map="${device_map}" --target=ieee1275_hints --device`"
-       elif [ x"$platform" = xloongson ] || [ x"$platform" = xqemu ] || [ x"$platform" = xcoreboot ] || [ x"$platform" = xmultiboot ] || [ x"$platform" = xqemu-mips ]; then
+       elif [ x"$grub_modinfo_platform" = xloongson ] || [ x"$grub_modinfo_platform" = xqemu ] || [ x"$grub_modinfo_platform" = xcoreboot ] || [ x"$grub_modinfo_platform" = xmultiboot ] || [ x"$grub_modinfo_platform" = xqemu-mips ]; then
             hints="`echo "${grub_device}" | xargs "$grub_probe" --device-map="${device_map}" --target=baremetal_hints --device`"
        else
-            gettext "No hints available for your platform. Expect reduced performance" 1>&2
+            gettext "No hints available for your grub_modinfo_platform. Expect reduced performance" 1>&2
            echo 1>&2
            hints=
         fi
        if [ x"$uuid" != x ]; then
-            echo "search.fs_uuid ${uuid} root $hints " >> "${grubdir}/${target_cpu}-$platform/load.cfg"
+            echo "search.fs_uuid ${uuid} root $hints " >> "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg"
            search_module=search_fs_uuid
        else
            mkdir -p "${grubdir}/uuid"
            file="`mktemp "${grubdir}/uuid/XXXXXXXXXXXXXXXXXXXXXXXXX"`"
            relfile="`${grub_mkrelpath} "$file"`"
-            echo "search.file '${relfile}' root $hints " >> "${grubdir}/${target_cpu}-$platform/load.cfg"
+            echo "search.file '${relfile}' root $hints " >> "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg"
            search_module=search_fs_file
        fi
-       echo 'set prefix=($root)'"${relative_grubdir}" >> "${grubdir}/${target_cpu}-$platform/load.cfg"
-       config_opt="-c ${grubdir}/${target_cpu}-$platform/load.cfg "
+       echo 'set prefix=($root)'"${relative_grubdir}" >> "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg"
+       config_opt="-c ${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg "
         modules="$modules $search_module"
     else
         # we need to hardcode the partition number in the core image's prefix.
@@ -596,21 +638,21 @@ if [ "x${devabstraction_module}" = "x" ] ; then
 else
     if [ x$GRUB_CRYPTODISK_ENABLE = xy ]; then
        for uuid in "`echo "${grub_device}" | xargs "${grub_probe}"  --target=cryptodisk_uuid --device`"; do
-           echo "cryptomount -u $uuid" >> "${grubdir}/${target_cpu}-$platform/load.cfg"
+           echo "cryptomount -u $uuid" >> "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg"
        done
-       config_opt="-c ${grubdir}/${target_cpu}-$platform/load.cfg "
+       config_opt="-c ${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg "
     fi
 
     prefix_drive=`"$grub_probe" --device-map="${device_map}" --target=drive --device "${grub_device}"` || exit 1
 fi
 
-case "${target_cpu}-${platform}" in
+case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
     sparc64-ieee1275) mkimage_target=sparc64-ieee1275-raw ;;
     mipsel-loongson) mkimage_target=mipsel-loongson-elf ;;
-    *) mkimage_target="${target_cpu}-${platform}" ;;
+    *) mkimage_target="${grub_modinfo_target_cpu}-${grub_modinfo_platform}" ;;
 esac
 
-case "${target_cpu}-${platform}" in
+case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
     i386-efi | x86_64-efi) imgext=efi ;;
     mipsel-loongson | i386-coreboot | i386-multiboot | i386-ieee1275 \
        | powerpc-ieee1275) imgext=elf ;;
@@ -618,24 +660,24 @@ case "${target_cpu}-${platform}" in
 esac
 
 
-"$grub_mkimage" ${config_opt} -d "${pkglibdir}" -O ${mkimage_target} --output="${grubdir}/${target_cpu}-$platform/core.${imgext}" --prefix="${prefix_drive}${relative_grubdir}" $modules || exit 1
+"$grub_mkimage" ${config_opt} -d "${source_dir}" -O ${mkimage_target} --output="${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}" --prefix="${prefix_drive}${relative_grubdir}" $modules || exit 1
 
 # Backward-compatibility kludges
-if [ "${target_cpu}-${platform}" = "mipsel-loongson" ]; then
-    cp "${grubdir}/${target_cpu}-$platform/core.${imgext}" "${bootdir}"/grub.elf
-elif [ "${target_cpu}-${platform}" = "i386-ieee1275" ] || [ "${target_cpu}-${platform}" = "powerpc-ieee1275" ]; then
-    cp "${grubdir}/${target_cpu}-$platform/core.${imgext}" "${grubdir}/grub"
-elif [ "${target_cpu}-${platform}" = "i386-efi" ] || [ "${target_cpu}-${platform}" = "x86_64-efi" ]; then
-    "$grub_mkimage" ${config_opt} -d "${pkglibdir}" -O ${mkimage_target} --output="${grubdir}/${target_cpu}-$platform/grub.efi" --prefix="" $modules || exit 1
+if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "mipsel-loongson" ]; then
+    cp "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}" "${bootdir}"/grub.elf
+elif [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-ieee1275" ] || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "powerpc-ieee1275" ]; then
+    cp "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}" "${grubdir}/grub"
+elif [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-efi" ] || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "x86_64-efi" ]; then
+    "$grub_mkimage" ${config_opt} -d "${source_dir}" -O ${mkimage_target} --output="${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/grub.efi" --prefix="" $modules || exit 1
 fi
 
 
-# Perform the platform-dependent install
-if [ "${target_cpu}-${platform}" = "i386-pc" ] || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ] ; then
+# Perform the grub_modinfo_platform-dependent install
+if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-pc" ] || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "sparc64-ieee1275" ] ; then
     # Now perform the installation.
-    "$grub_setup" ${allow_floppy} ${setup_verbose} ${setup_force} --directory="${grubdir}/${target_cpu}-$platform" \
+    "$grub_setup" ${allow_floppy} ${setup_verbose} ${setup_force} --directory="${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform" \
        --device-map="${device_map}" "${install_device}" || exit 1
-elif [ "${target_cpu}-${platform}" = "i386-ieee1275" ] || [ "${target_cpu}-${platform}" = "powerpc-ieee1275" ]; then
+elif [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-ieee1275" ] || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "powerpc-ieee1275" ]; then
     if [ x"$update_nvram" = xyes ]; then
        ofpathname="`which ofpathname`"
        nvsetenv="`which nvsetenv`"
@@ -662,10 +704,10 @@ elif [ "${target_cpu}-${platform}" = "i386-ieee1275" ] || [ "${target_cpu}-${pla
        }
 
         # Point boot-device at the new grub install
-       boot_device="$ofpath:$partno,"`"$grub_mkrelpath" "${grubdir}/${target_cpu}-$platform/core.${imgext}" | sed 's,/,\\\\,g'`
+       boot_device="$ofpath:$partno,"`"$grub_mkrelpath" "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}" | sed 's,/,\\\\,g'`
 
         # If a install device is defined, copy the core.elf to PReP partition. 
-       if  [ "${target_cpu}-${platform}" = "powerpc-ieee1275" ] \
+       if  [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "powerpc-ieee1275" ] \
            && [ -n "${install_device}" ]; then
             if [ "$("${grub_probe}" -m "${device_map}" -d "${install_device}" -t msdos_parttype)" != "41" ]; then
                gettext "The chosen partition is not a PReP partition." 1>&2
@@ -676,7 +718,7 @@ elif [ "${target_cpu}-${platform}" = "i386-ieee1275" ] || [ "${target_cpu}-${pla
             if [ "$(file -s "${install_device}" -b | awk '{ print $1 }')" = ELF ] || [ $(cmp /dev/zero "${install_device}" &>/dev/null) ]; then
             # Change boot device to the harddisk root
                boot_device="$ofpath"
-               dd if="${grubdir}/${target_cpu}-$platform/core.${imgext}" of="${install_device}" status=noxfer || {
+               dd if="${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}" of="${install_device}" status=noxfer || {
                    gettext "Failed to copy Grub to the PReP partition." 1>&2
                    echo 1>&2
                    exit 1
@@ -698,15 +740,15 @@ elif [ "${target_cpu}-${platform}" = "i386-ieee1275" ] || [ "${target_cpu}-${pla
            exit 1
        }
     fi
-elif [ x"${target_cpu}-${platform}" = xmips-arc ]; then
-    dvhtool -d "${install_device}" --unix-to-vh "{grubdir}/${target_cpu}-$platform/core.${imgext}" grub
+elif [ x"${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = xmips-arc ]; then
+    dvhtool -d "${install_device}" --unix-to-vh "{grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}" grub
     gettext "You will have to set SystemPartition and OSLoader manually." 1>&2
     echo 1>&2
-elif [ x"$platform" = xefi ]; then
-    cp "${grubdir}/${target_cpu}-$platform/core.${imgext}" "${efidir}/${efi_file}"
+elif [ x"$grub_modinfo_platform" = xefi ]; then
+    cp "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}" "${efidir}/${efi_file}"
     # For old macs. Suggested by Peter Jones.
-    if [ x$target_cpu = xi386 ]; then
-       cp "${grubdir}/${target_cpu}-$platform/core.${imgext}" "${efidir}/boot.efi"
+    if [ x$grub_modinfo_target_cpu = xi386 ]; then
+       cp "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/core.${imgext}" "${efidir}/boot.efi"
     fi
 
     # Try to make this image bootable using the EFI Boot Manager, if available.