#! /bin/sh
set -e

# Make GRUB rescue image
# Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010  Free Software Foundation, Inc.
#
# GRUB is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# GRUB is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GRUB.  If not, see <http://www.gnu.org/licenses/>.

# Initialize some variables.

transform="@program_transform_name@"

prefix="@prefix@"
exec_prefix="@exec_prefix@"
datarootdir="@datarootdir@"
bindir="@bindir@"
libdir="@libdir@"
PACKAGE_NAME=@PACKAGE_NAME@
PACKAGE_TARNAME=@PACKAGE_TARNAME@
PACKAGE_VERSION=@PACKAGE_VERSION@
datadir="@datadir@"
if [ "x$pkgdatadir" = x ]; then
    pkgdatadir="${datadir}/@PACKAGE@"
fi
pkglib_DATA="moddep.lst command.lst fs.lst partmap.lst parttool.lst handler.lst video.lst crypto.lst terminal.lst"

self=`basename $0`

multiboot_dir="${libdir}/@PACKAGE@/i386-multiboot"
coreboot_dir="${libdir}/@PACKAGE@/i386-coreboot"
qemu_dir="${libdir}/@PACKAGE@/i386-qemu"
mipsel_qemu_dir="${libdir}/@PACKAGE@/mipsel-qemu_mips"
loongson_dir="${libdir}/@PACKAGE@/mipsel-loongson"
mips_qemu_dir="${libdir}/@PACKAGE@/mips-qemu_mips"
pc_dir="${libdir}/@PACKAGE@/i386-pc"
efi32_dir="${libdir}/@PACKAGE@/i386-efi"
efi64_dir="${libdir}/@PACKAGE@/x86_64-efi"
ia64_dir="${libdir}/@PACKAGE@/ia64-efi"
rom_directory=
override_dir=
grub_mkimage="${bindir}/`echo grub-mkimage | sed ${transform}`"

xorriso=xorriso

export TEXTDOMAIN=@PACKAGE@
export TEXTDOMAINDIR="@localedir@"

localedir="@datadir@/locale"

. "${pkgdatadir}/grub-mkconfig_lib"

# Usage: usage
# Print the usage.
usage () {
    gettext_printf "Usage: %s [OPTION] SOURCE...\n" "$self"
    # TRANSLATORS: it generates one single image which is bootable through any method.
    gettext "Make GRUB CD-ROM, disk, pendrive and floppy bootable image."; echo
    echo
    filetrans="$(gettext FILE)"
    print_option_help "-h, --help" "$(gettext "print this message and exit")"
    print_option_help "-v, --version" "$(gettext "print the version information and exit")"
    print_option_help "-o, --output=$filetrans" "$(gettext "save output in FILE [required]")"
    print_option_help "--modules=$(gettext "MODULES")" "$(gettext "pre-load specified modules MODULES")"
    print_option_help "--rom-directory=$(gettext "DIR")" "$(gettext "save ROM images in DIR [optional]")"
    # TRANSLATORS: xorriso is a program for creating ISOs and burning CDs
    print_option_help "--xorriso=$filetrans" "$(gettext "use FILE as xorriso [optional]")"
    print_option_help "--grub-mkimage=$filetrans" "$(gettext "use FILE as grub-mkimage")"
    echo
    gettext_printf "%s generates a bootable rescue image with specified source files, source directories, or mkisofs options listed by the output of \`%s'\n" "xorriso -as mkisofs -help" "$self" | grub_fmt
    echo
    gettext "Option -- switches to native xorriso command mode."; echo
    echo
    gettext "Report bugs to <bug-grub@gnu.org>."; echo
    gettext "Mail xorriso support requests to <bug-xorriso@gnu.org>."; echo
}

argument () {
  opt=$1
  shift

  if test $# -eq 0; then
      gettext_printf "%s: option requires an argument -- \`%s'\n" "$0" "$opt" 1>&2
      exit 1
  fi
  echo $1
}

# Check the arguments.
while test $# -gt 0
do
    option=$1
    shift

    case "$option" in
    -h | --help)
	usage
	exit 0 ;;
    -v | --version)
	echo "$self (${PACKAGE_NAME}) ${PACKAGE_VERSION}"
	exit 0 ;;

    --modules)
        modules=`argument $option "$@"`; shift ;;
    --modules=*)
	modules=`echo "$option" | sed 's/--modules=//'` ;;

    -o | --output)
	output_image=`argument $option "$@"`; shift ;;
    --output=*)
	output_image=`echo "$option" | sed 's/--output=//'` ;;

    --rom-directory)
        rom_directory=`argument $option "$@"`; shift ;;
    --rom-directory=*)
	rom_directory=`echo "$option" | sed 's/--rom-directory=//'` ;;

    # Intentionally undocumented
    --override-directory)
        override_dir=`argument $option "$@"`
	shift
	PATH=${override_dir}:$PATH
	export PATH
	;;
    --override-directory=*)
	override_dir=`echo "${option}/" | sed 's/--override-directory=//'`
	PATH=${override_dir}:$PATH
	export PATH
	;;

    --grub-mkimage)
	grub_mkimage=`argument $option "$@"`; shift ;;
    --grub-mkimage=*)
	grub_mkimage=`echo "$option" | sed 's/--grub-mkimage=//'` ;;

    --xorriso)
	xorriso=`argument $option "$@"`; shift ;;
    --xorriso=*)
        xorriso=`echo "${option}" | sed 's/--xorriso=//'` ;;

    *)
	source="${source} ${option} $@"; break ;;
    esac
done

if [ "x${output_image}" = x ] ; then
  gettext "output file must be specified" >&2
  echo >&2
  usage
  exit 1
fi

set $grub_mkimage dummy
if test -f "$1"; then
    :
else
    gettext_printf "%s: Not found.\n" "$1" 1>&2
    exit 1
fi

iso9660_dir=`mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
mkdir -p ${iso9660_dir}/boot/grub

process_input_dir ()
{
    input_dir="$1"
    platform="$2"
    mkdir -p "${iso9660_dir}/boot/grub/${platform}"
    for file in "${input_dir}/"*.mod "${input_dir}/"efiemu32.o "${input_dir}/"efiemu64.o; do
        if test -f "$file"; then
            cp -f "$file" "${iso9660_dir}/boot/grub/${platform}/"
        fi
    done
    for file in ${pkglib_DATA}; do
	if test -f "${input_dir}/${file}"; then
            cp -f "${input_dir}/${file}" "${iso9660_dir}/boot/grub/${platform}/"
	fi
    done

    mkdir -p "${iso9660_dir}/boot/grub/locale"
    for dir in "${localedir}"/*; do
	if test -f "$dir/LC_MESSAGES/grub.mo"; then
            cp -f "$dir/LC_MESSAGES/grub.mo" "${iso9660_dir}/boot/grub/locale/${dir##*/}.mo"
	fi
    done
}

make_image ()
{
    source_directory="$1"
    platform=$2
    if ! test -e "${source_directory}"; then
	return;
    fi

    gettext_printf "Enabling %s support ...\n" "$2"

    memdisk_img="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1
    memdisk_dir="`mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1
    mkdir -p "${memdisk_dir}/boot/grub"

    (cat << EOF
search --fs-uuid --set=root ${iso_uuid}
set prefix=(\${root})/boot/grub
EOF
    for i in $(cat "${source_directory}/partmap.lst") ${modules} ; do
        echo "insmod $i"
    done ; \
    echo "source \$prefix/grub.cfg") \
    > "${memdisk_dir}/boot/grub/grub.cfg"

    (cd "${memdisk_dir}"; tar -cf - boot) > "${memdisk_img}"
    rm -rf "${memdisk_dir}"
    "$grub_mkimage" -O ${platform} -d "${source_directory}" -m "${memdisk_img}" -o "$3" --prefix='(memdisk)/boot/grub' \
        search iso9660 configfile normal memdisk tar $4
    rm -rf "${memdisk_img}"
}

if [ "${override_dir}" = "" ] ; then
    if test -e "${multiboot_dir}" ; then
        process_input_dir "${multiboot_dir}" i386-multiboot
    fi
    if test -e "${coreboot_dir}" ; then
        process_input_dir "${coreboot_dir}" i386-coreboot
    fi
    if test -e "${qemu_dir}" ; then
        process_input_dir "${qemu_dir}" i386-qemu
    fi
    if test -e "${pc_dir}" ; then
        process_input_dir "${pc_dir}" i386-pc
    fi
    if test -e "${efi32_dir}" ; then
        process_input_dir "${efi32_dir}" i386-efi
    fi
    if test -e "${efi64_dir}" ; then
        process_input_dir "${efi64_dir}" x86_64-efi
    fi
    if test -e "${ia64_dir}" ; then
        process_input_dir "${ia64_dir}" ia64-efi
    fi
    if test -e "${mips_qemu_dir}" ; then
        process_input_dir "${mips_qemu_dir}" mips-qemu_mips
    fi
    if test -e "${mipsel_qemu_dir}" ; then
        process_input_dir "${mipsel_qemu_dir}" mipsel-qemu_mips
    fi
    if test -e "${loongson_dir}" ; then
        process_input_dir "${loongson_dir}" mipsel-loongson
    fi
else
    . "${override_dir}"/modinfo.sh
    process_input_dir "${override_dir}" ${grub_modinfo_target_cpu}-${grub_modinfo_platform}
    multiboot_dir=
    pc_dir=
    efi32_dir=
    efi64_dir=
    ia64_dir=
    coreboot_dir=
    qemu_dir=
    mipsel_qemu_dir=
    mips_qemu_dir=
    loongson_dir=
    case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
        i386-multiboot) multiboot_dir="${override_dir}" ;;
        i386-coreboot) coreboot_dir="${override_dir}" ;;
        i386-qemu) qemu_dir="${override_dir}" ;;
        i386-pc) pc_dir="${override_dir}" ;;
	i386-efi) efi32_dir="${override_dir}" ;;
	x86_64-efi) efi64_dir="${override_dir}" ;;
	ia64-efi) ia64_dir="${override_dir}" ;;
	mipsel-qemu_mips) mipsel_qemu_dir="${override_dir}" ;;
	mipsel-loongson) loongson_dir="${override_dir}" ;;
	mips-qemu_mips) mips_qemu_dir="${override_dir}" ;;
    esac
fi

# obtain date-based UUID
iso_uuid=$(date -u +%Y-%m-%d-%H-%M-%S-00)
grub_mkisofs_arguments="${grub_mkisofs_arguments} --modification-date=$(echo ${iso_uuid} | sed -e s/-//g)"

# build BIOS core.img
if test -e "${pc_dir}" ; then
    gettext_printf "Enabling %s support ...\n" "BIOS"
    load_cfg="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`"
    core_img="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1

    (for i in $(cat "${pc_dir}/partmap.lst") ${modules} ; do
        echo "insmod $i"
    done ;) > "${load_cfg}"

    "$grub_mkimage" -O i386-pc -d "${pc_dir}/" -o "${core_img}" -c "$load_cfg" --prefix=/boot/grub \
        iso9660 biosdisk
    cat "${pc_dir}/cdboot.img" "${core_img}" > "${iso9660_dir}/boot/grub/i386-pc/eltorito.img"

    embed_img="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1
    cat "${pc_dir}/boot.img" "${core_img}" > "${embed_img}"

    rm -f "${core_img}"

    grub_mkisofs_arguments="${grub_mkisofs_arguments} -b boot/grub/i386-pc/eltorito.img -no-emul-boot -boot-info-table \
		--embedded-boot ${embed_img}"
fi

# build multiboot core.img
make_image "${multiboot_dir}" i386-multiboot "${iso9660_dir}/boot/multiboot.img" "pata ahci at_keyboard"

if test -e "${efi64_dir}" || test -e "${efi32_dir}" || test -e "${ia64_dir}"; then
    efi_dir=`mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1
    mkdir -p "${efi_dir}/efi/boot"

    # build bootia64.efi
    make_image "${ia64_dir}" ia64-efi "${efi_dir}"/efi/boot/bootia64.efi ""
    # build bootx64.efi
    make_image "${efi64_dir}" x86_64-efi "${efi_dir}"/efi/boot/bootx64.efi ""
    # build bootia32.efi
    make_image "${efi32_dir}" i386-efi "${efi_dir}"/efi/boot/bootia32.efi ""
    if [ -e "${efi_dir}"/efi/boot/bootia32.efi ]; then
        # For old macs. Suggested by Peter Jones.
	cp "${efi_dir}"/efi/boot/bootia32.efi "${efi_dir}"/efi/boot/boot.efi
    fi

    mformat -C -f 2880 -L 16 -i "${iso9660_dir}"/efi.img ::
    mcopy -s -i "${iso9660_dir}"/efi.img ${efi_dir}/efi ::/
    rm -rf ${efi_dir}
    grub_mkisofs_arguments="${grub_mkisofs_arguments} --efi-boot efi.img"
fi

make_image "${mipsel_qemu_dir}" mipsel-qemu_mips-elf "${iso9660_dir}/boot/mipsel-qemu_mips.elf" "pata"
if [ -e "${iso9660_dir}/boot/mipsel-qemu_mips.elf" ] && [ -d "${rom_directory}" ]; then
    cp "${iso9660_dir}/boot/mipsel-qemu_mips.elf" "${rom_directory}/mipsel-qemu_mips.elf"
fi

make_image "${loongson_dir}" mipsel-loongson-elf "${iso9660_dir}/boot/mipsel-loongson.elf" "pata -C xz"
if [ -e "${iso9660_dir}/boot/mipsel-loongson.elf" ] && [ -d "${rom_directory}" ]; then
    cp "${iso9660_dir}/boot/mipsel-loongson.elf" "${rom_directory}/mipsel-loongson.elf"
fi
make_image "${loongson_dir}" mipsel-yeeloong-flash "${iso9660_dir}/boot/mipsel-yeeloong.bin" "pata -C xz"
if [ -e "${iso9660_dir}/boot/mipsel-yeeloong.bin" ] && [ -d "${rom_directory}" ]; then
    cp "${iso9660_dir}/boot/mipsel-yeeloong.bin" "${rom_directory}/mipsel-yeeloong.bin"
fi

make_image "${loongson_dir}" mipsel-fuloong2f-flash "${iso9660_dir}/boot/mipsel-fuloong2f.bin" "pata -C xz"
if [ -e "${iso9660_dir}/boot/mipsel-fulong.bin" ] && [ -d "${rom_directory}" ]; then
    cp "${iso9660_dir}/boot/mipsel-fulong.bin" "${rom_directory}/mipsel-fulong.bin"
fi

make_image "${mips_qemu_dir}" mips-qemu_mips-elf "${iso9660_dir}/boot/mips-qemu_mips.elf" "pata"
if [ -e "${iso9660_dir}/boot/mips-qemu_mips.elf" ] && [ -d "${rom_directory}" ]; then
    cp "${iso9660_dir}/boot/mips-qemu_mips.elf" "${rom_directory}/mips-qemu_mips.elf"
fi
make_image "${qemu_dir}" i386-qemu "${iso9660_dir}/boot/qemu.img" "pata at_keyboard"
if [ -e "${iso9660_dir}/boot/qemu.img" ] && [ -d "${rom_directory}" ]; then
    cp "${iso9660_dir}/boot/qemu.img" "${rom_directory}/qemu.img"
fi
make_image "${coreboot_dir}" i386-coreboot "${iso9660_dir}/boot/coreboot.elf" "pata ahci at_keyboard"
if [ -e "${iso9660_dir}/boot/coreboot.elf" ] && [ -d "${rom_directory}" ]; then
    cp "${iso9660_dir}/boot/coreboot.elf" "${rom_directory}/coreboot.elf"
fi

# build iso image
"${xorriso}" -as mkisofs -graft-points ${grub_mkisofs_arguments} --protective-msdos-label -o "${output_image}" -r "${iso9660_dir}" --sort-weight 0 / --sort-weight 1 /boot ${source}
rm -rf "${iso9660_dir}"

rm -f "${embed_img}"

exit 0
