# Sample GRUB script to autodetect operating systems
#
# Copyright (C) 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/>.

set saved_root=$root

function freebsd_ufs_variants {
    set device=$1
    set fstype=$2
    set uuid=$3

    menuentry "FreeBSD (on $fstype $device)" $device $uuid {
	set root=$2
	set uuid=$3

	freebsd /boot/kernel/kernel
	set FreeBSD.acpi_load=YES
	set FreeBSD.hint.acpi.0.disabled=0
	set FreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid
	frebsd_loadenv /boot/device.hints
    }

    menuentry "FreeBSD (on $fstype $device) (single)" $device $uuid {
	set root=$2
	set uuid=$3

	freebsd /boot/kernel/kernel --single
	set FreeBSD.acpi_load=YES
	set FreeBSD.hint.acpi.0.disabled=0
	set FreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid
	frebsd_loadenv /boot/device.hints
    }

    menuentry "FreeBSD (on $fstype $device) (verbose)" $device $uuid {
	set root=$2
	set uuid=$3

	freebsd /boot/kernel/kernel --verbose
	set FreeBSD.acpi_load=YES
	set FreeBSD.hint.acpi.0.disabled=0
	set FreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid
	frebsd_loadenv /boot/device.hints
    }

    menuentry "FreeBSD (on $fstype $device) (without ACPI)" $device $uuid {
	set root=$2
	set uuid=$3

	freebsd /boot/kernel/kernel --verbose
	unset FreeBSD.acpi_load
	set FreeBSD.hint.acpi.0.disabled=1
	set FreeBSD.loader.acpi_disabled_by_user=1
	set FreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid
	frebsd_loadenv /boot/device.hints
    }

    menuentry "FreeBSD (on $fstype $device) (safe mode)" $device $uuid {
	set root=$2
	set uuid=$3

	freebsd /boot/kernel/kernel --verbose
	unset FreeBSD.acpi_load
	set FreeBSD.hint.acpi.0.disabled=1
	set FreeBSD.loader.acpi_disabled_by_user=1
	set FreeBSD.hint.apic.0.disabled=1
	set FreeBSD.hw.ata.ata_dma=0
	set FreeBSD.hw.ata.atapi_dma=0
	set FreeBSD.hw.ata.wc=0
	set FreeBSD.hw.eisa_slots=0
	set FreeBSD.hint.kbdmux.0.disabled=1
	set FreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid
	frebsd_loadenv /boot/device.hints
    }
}

function freebsd_zfs_variants {
    set device=$1
    set fstype=zfs

    menuentry "FreeBSD (on $fstype $device)" $device {
	set root=$2

	freebsd /@/boot/kernel/kernel
	set FreeBSD.acpi_load=YES
	set FreeBSD.hint.acpi.0.disabled=0
	freebsd_module_elf /@/boot/kernel/opensolaris.ko
	freebsd_module_elf /@/boot/kernel/zfs.ko
	freebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
	probe -l -s name $root
	set FreeBSD.vfs.root.mountfrom=zfs:$name
	freebsd_loadenv /@/boot/device.hints
    }

    menuentry "FreeBSD (on $fstype $device) (single)" $device {
	set root=$2

	freebsd /@/boot/kernel/kernel --single
	set FreeBSD.acpi_load=YES
	set FreeBSD.hint.acpi.0.disabled=0
	freebsd_module_elf /@/boot/kernel/opensolaris.ko
	freebsd_module_elf /@/boot/kernel/zfs.ko
	freebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
	probe -l -s name $root
	set FreeBSD.vfs.root.mountfrom=zfs:$name
	freebsd_loadenv /@/boot/device.hints
    }

    menuentry "FreeBSD (on $fstype $device) (verbose)" $device {
	set root=$2

	freebsd /@/boot/kernel/kernel --verbose
	set FreeBSD.acpi_load=YES
	set FreeBSD.hint.acpi.0.disabled=0
	freebsd_module_elf /@/boot/kernel/opensolaris.ko
	freebsd_module_elf /@/boot/kernel/zfs.ko
	freebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
	probe -l -s name $root
	set FreeBSD.vfs.root.mountfrom=zfs:$name
	freebsd_loadenv /@/boot/device.hints
    }

    menuentry "FreeBSD (on $fstype $device) (without ACPI)" $device {
	set root=$2

	freebsd /@/boot/kernel/kernel --verbose
	unset FreeBSD.acpi_load
	set FreeBSD.hint.acpi.0.disabled=1
	set FreeBSD.loader.acpi_disabled_by_user=1
	freebsd_module_elf /@/boot/kernel/opensolaris.ko
	freebsd_module_elf /@/boot/kernel/zfs.ko
	freebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
	probe -l -s name $root
	set FreeBSD.vfs.root.mountfrom=zfs:$name
	freebsd_loadenv /@/boot/device.hints
    }

    menuentry "FreeBSD (on $fstype $device) (safe mode)" $device {
	set root=$2

	freebsd /@/boot/kernel/kernel --verbose
	unset FreeBSD.acpi_load
	set FreeBSD.hint.acpi.0.disabled=1
	set FreeBSD.loader.acpi_disabled_by_user=1
	set FreeBSD.hint.apic.0.disabled=1
	set FreeBSD.hw.ata.ata_dma=0
	set FreeBSD.hw.ata.atapi_dma=0
	set FreeBSD.hw.ata.wc=0
	set FreeBSD.hw.eisa_slots=0
	set FreeBSD.hint.kbdmux.0.disabled=1
	freebsd_module_elf /@/boot/kernel/opensolaris.ko
	freebsd_module_elf /@/boot/kernel/zfs.ko
	freebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
	probe -l -s name $root
	set FreeBSD.vfs.root.mountfrom=zfs:$name
	freebsd_loadenv /@/boot/device.hints
    }
}

insmod regexp
for dev in (*); do
    # $device: parenthesis removed from $dev
    regexp -s device '\((.*)\)' $dev
    # $fstype: filesystem type identified
    probe -s fstype -f $dev
    # uuid: filesystem UUID
    probe -s uuid -u $dev

    if test -f ($device)/isolinux/isolinux.cfg ; then
	menuentry "ISOLINUX config (on $device)" $device {
	    set root=$2
	    syslinux_configfile -i /isolinux/isolinux.cfg
	}
    fi
    if test -f ($device)/bootmgr -a -f ($device)/boot/bcd; then
	menuentry "Windows Vista bootmgr (on $device)" $device {
	    set root=$2
	    chainloader +1
	}
    elif test -f ($device)/ntldr -a \
	-e ($device)/ntdetect.com -a -f ($device)/boot.ini; then
	menuentry "Windows NT/2000/XP loader (on $device)" $device {
	    set root=$2
	    regexp -s devnum 'hd([0-9]+)' $root
	    if test "$devnum" != "0"; then
		drivemap -s hd0 $root
	    fi
	    chainloader +1
	}
    elif test -f ($device)/windows/win.com; then
	menuentry "Windows 98/ME (on $device)" $device {
	    set root=$2
	    regexp -s devnum 'hd([0-9]+)' $root
	    if test "$devnum" != "0"; then
		drivemap -s hd0 $root
	    fi
	    chainloader +1
	}
    elif test -f ($device)/io.sys -a -f ($device)/command.com; then
	menuentry "MS-DOS (on $device)" $device {
	    set root=$2
	    regexp -s devnum 'hd([0-9]+)' $root
	    if test "$devnum" != "0"; then
		drivemap -s hd0 $root
	    fi
	    chainloader +1
	}
    elif test -f ($device)/kernel.sys; then
	menuentry "FreeDOS (on $device)" $device {
	    set root=$2
	    regexp -s type '([fh])d[0-9]+' $root
	    regexp -s devnum '[fh]d([0-9]+)' $root
	    if test $type = 'h' -a "$devnum" != "0"; then
		drivemap -s hd0 $root
	    fi
	    chainloader +1
	}
    elif test "$fstype" = ufs1 -o "$fstype" = ufs2 -a \
	-e ($device)/boot/kernel/kernel -a \
	-e ($device)/boot/device.hints; then

	freebsd_ufs_variants $device $fstype $uuid

    elif test "$fstype" = zfs -a \
	-e ($device)/@/boot/kernel/kernel -a \
	-e ($device)/@/boot/device.hints; then

	freebsd_zfs_variants $device

    elif test "$fstype" = hfsplus -a -f ($device)/mach_kernel; then
	menuentry "Mac OS X/Darwin" $device $uuid {
	    set root=$2
	    set uuid=$3

	    insmod vbe
	    do_resume=0
	    if [ /var/vm/sleepimage -nt10 / ]; then
		if xnu_resume /var/vm/sleepimage; then
		    do_resume=1
		fi
	    fi
	    if [ $do_resume = 1 ]; then
		xnu_uuid $uuid uuid
		if [ -f /Extra/DSDT.aml ]; then
		    acpi -e /Extra/DSDT.aml
		fi
		xnu_kernel /mach_kernel boot-uuid=${uuid} rd=*uuid
		if [ /System/Library/Extensions.mkext -nt /System/Library/Extensions ]; then
		    xnu_mkext /System/Library/Extensions.mkext
		else
		    xnu_mkext /System/Library/Extensions
		fi
		if [ -f /Extra/Extensions.mkext ]; then
		    xnu_mkext /Extra/Extensions.mkext
		fi
		if [ -d /Extra/Extensions ]; then
		    xnu_kextdir /Extra/Extensions
		fi
		if [ -f /Extra/devtree.txt ]; then
		    xnu_devtree /Extra/devtree.txt
		fi
		if [ -f /Extra/splash.jpg ]; then
		    insmod jpeg
		    xnu_splash /Extra/splash.jpg
		fi
		if [ -f /Extra/splash.png ]; then
		    insmod png
		    xnu_splash /Extra/splash.png
		fi
		if [ -f /Extra/splash.tga ]; then
		    insmod tga
		    xnu_splash /Extra/splash.tga
		fi
	    fi
	}
    else
	set root=$device
	for file in /boot/vmlinuz-* /boot/linux-*; do
	    if test -f $file; then
		regexp -s version '/boot/vmlinuz-(.*)' $file
		regexp -s version '/boot/linux-(.*)' $file

		menuentry "Linux $file" $device $uuid $file $version {
		    set root=$2
		    set uuid=$3
		    set kernel=$4
		    set version=$5

		    linux $kernel root=UUID=$uuid ro
		    if test -f /boot/initrd-$version.img; then
			initrd /boot/initrd-$version.img
		    elif test -f /boot/initrd.img-$version; then
			initrd /boot/initrd.img-$version
		    elif test -f /boot/initrd-$version; then
			initrd /boot/initrd-$version
		    fi
		}

		menuentry "Linux $file (single)" $device $uuid $file $version {
		    set root=$2
		    set uuid=$3
		    set kernel=$4
		    set version=$5

		    linux $kernel root=UUID=$uuid ro single
		    if test -f /boot/initrd-$version.img; then
			initrd /boot/initrd-$version.img
		    elif test -f /boot/initrd.img-$version; then
			initrd /boot/initrd.img-$version
		    elif test -f /boot/initrd-$version; then
			initrd /boot/initrd-$version
		    fi
		}
	    fi
	done
    fi
done

set root=$saved_root
