Use submenus in grub-mkconfig.
* util/grub-mkconfig.in: Define GRUB_ACTUAL_DEFAULT. * util/grub-mkconfig_lib.in (grub_quote): New function. (gettext_printf): Use gettext and not gettext_quoted to fix several messages. * util/grub.d/10_hurd.in: Use submenus. * util/grub.d/10_kfreebsd.in: Likewise. * util/grub.d/10_linux.in: Likewise. * util/grub.d/10_netbsd.in: Likewise. * util/grub.d/20_linux_xen.in: Likewise. * util/grub.d/30_os-prober.in: Likewise. * util/grub.d/10_illumos.in: Add missing quoting. * util/grub.d/10_windows.in: Likewise.
This commit is contained in:
parent
d9bef9bc43
commit
0cdc126ca2
11 changed files with 424 additions and 154 deletions
|
@ -79,56 +79,100 @@ if ${all_of_them} && test -e /lib/ld.so.1 ; then : ; else
|
|||
exit 1
|
||||
fi
|
||||
|
||||
title_correction_code=
|
||||
|
||||
hurd_entry () {
|
||||
kernel="$1"
|
||||
type="$2"
|
||||
kernel_base="`basename "${kernel}"`"
|
||||
|
||||
if [ x$type != xsimple ] ; then
|
||||
if [ x$type = xrecovery ] ; then
|
||||
title="$(gettext_printf "%s, with Hurd %s (recovery mode)" "${OS}" "${kernel_base}")"
|
||||
oldtitle="$OS using $kernel_base (recovery mode)"
|
||||
else
|
||||
title="$(gettext_printf "%s, with Hurd %s" "${OS}" "${kernel_base}")"
|
||||
oldtitle="$OS using $kernel_base"
|
||||
fi
|
||||
if [ x"$oldtitle" = x"$GRUB_ACTUAL_DEFAULT" ]; then
|
||||
quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)"
|
||||
title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;"
|
||||
grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnuhurd-advanced-$boot_device_id>'gnuhurd-$kernel-$type-$(grub_get_device_id "${GRUB_DEVICE_BOOT}")'")"
|
||||
fi
|
||||
sed "s/^/$submenu_indentation/" << EOF
|
||||
menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnuhurd-$kernel-$type-$(grub_get_device_id "${GRUB_DEVICE_BOOT}")' {
|
||||
EOF
|
||||
else
|
||||
sed "s/^/$submenu_indentation/" << EOF
|
||||
menuentry '$(echo "$OS" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnuhurd-simple-$(grub_get_device_id "${GRUB_DEVICE_BOOT}")' {
|
||||
EOF
|
||||
fi
|
||||
|
||||
prepare_grub_to_access_device "${GRUB_DEVICE_BOOT}" | sed -e "s/^/\t/"|sed "s/^/$submenu_indentation/"
|
||||
message="$(gettext_printf "Loading GNU Mach ...")"
|
||||
|
||||
if [ x$type = xrecovery ] ; then
|
||||
opts="-s"
|
||||
else
|
||||
opts=
|
||||
fi
|
||||
sed "s/^/$submenu_indentation/" << EOF
|
||||
echo '$message'
|
||||
multiboot ${kernel} root=device:${GRUB_DEVICE#/dev/} $opts ${GRUB_CMDLINE_GNUMACH}
|
||||
EOF
|
||||
|
||||
if [ x$type != xrecovery ] ; then
|
||||
save_default_entry | sed -e "s/^/\t/"| sed "s/^/$submenu_indentation/"
|
||||
fi
|
||||
prepare_grub_to_access_device "${GRUB_DEVICE}" | sed -e "s/^/\t/"| sed "s/^/$submenu_indentation/"
|
||||
message="$(gettext_printf "Loading the Hurd ...")"
|
||||
if [ x$type = xrecovery ] ; then
|
||||
opts=
|
||||
else
|
||||
opts="--readonly"
|
||||
fi
|
||||
|
||||
sed "s/^/$submenu_indentation/" << EOF
|
||||
echo '$message'
|
||||
module /hurd/${hurd_fs}.static ${hurd_fs} $opts \\
|
||||
--multiboot-command-line='\${kernel-command-line}' \\
|
||||
--host-priv-port='\${host-port}' \\
|
||||
--device-master-port='\${device-port}' \\
|
||||
--exec-server-task='\${exec-task}' -T typed '\${root}' \\
|
||||
'\$(task-create)' '\$(task-resume)'
|
||||
module /lib/ld.so.1 exec /hurd/exec '\$(exec-task=task-create)'
|
||||
}
|
||||
EOF
|
||||
|
||||
}
|
||||
|
||||
title_correction_code=
|
||||
|
||||
# Extra indentation to add to menu entries in a submenu. We're not in a submenu
|
||||
# yet, so it's empty. In a submenu it will be equal to '\t' (one tab).
|
||||
submenu_indentation=""
|
||||
is_first_entry=true
|
||||
|
||||
for kernel in ${kernels}
|
||||
do
|
||||
kernel_base="`basename "${kernel}"`"
|
||||
KERNEL="using ${kernel_base}"
|
||||
|
||||
cat << EOF
|
||||
menuentry "${OS} ${KERNEL}" ${CLASS} \$menuentry_id_option 'gnuhurd-$kernel-false-$(grub_get_device_id "${GRUB_DEVICE_BOOT}")' {
|
||||
EOF
|
||||
prepare_grub_to_access_device "${GRUB_DEVICE_BOOT}" | sed -e "s/^/\t/"
|
||||
message="$(gettext_printf "Loading GNU Mach ...")"
|
||||
cat << EOF
|
||||
echo '$message'
|
||||
multiboot ${kernel} root=device:${GRUB_DEVICE#/dev/} ${GRUB_CMDLINE_GNUMACH}
|
||||
EOF
|
||||
save_default_entry | sed -e "s/^/\t/"
|
||||
prepare_grub_to_access_device ${GRUB_DEVICE} | sed -e "s/^/\t/"
|
||||
message="$(gettext_printf "Loading the Hurd ...")"
|
||||
cat << EOF
|
||||
echo '$message'
|
||||
module /hurd/${hurd_fs}.static ${hurd_fs} --readonly \\
|
||||
--multiboot-command-line='\${kernel-command-line}' \\
|
||||
--host-priv-port='\${host-port}' \\
|
||||
--device-master-port='\${device-port}' \\
|
||||
--exec-server-task='\${exec-task}' -T typed '\${root}' \\
|
||||
'\$(task-create)' '\$(task-resume)'
|
||||
module /lib/ld.so.1 exec /hurd/exec '\$(exec-task=task-create)'
|
||||
}
|
||||
EOF
|
||||
|
||||
cat << EOF
|
||||
menuentry "${OS} ${KERNEL} (recovery mode)" ${CLASS} {
|
||||
EOF
|
||||
prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e "s/^/\t/"
|
||||
message="$(gettext_printf "Loading GNU Mach ...")"
|
||||
cat << EOF
|
||||
echo '$message'
|
||||
multiboot ${kernel} root=device:${GRUB_DEVICE#/dev/} -s ${GRUB_CMDLINE_GNUMACH}
|
||||
EOF
|
||||
prepare_grub_to_access_device ${GRUB_DEVICE} | sed -e "s/^/\t/"
|
||||
message="$(gettext_printf "Loading the Hurd ...")"
|
||||
cat << EOF
|
||||
echo '$message'
|
||||
module /hurd/${hurd_fs}.static ${hurd_fs} \\
|
||||
--multiboot-command-line='\${kernel-command-line}' \\
|
||||
--host-priv-port='\${host-port}' \\
|
||||
--device-master-port='\${device-port}' \\
|
||||
--exec-server-task='\${exec-task}' -T typed '\${root}' \\
|
||||
'\$(task-create)' '\$(task-resume)'
|
||||
module /lib/ld.so.1 exec /hurd/exec '\$(exec-task=task-create)'
|
||||
}
|
||||
EOF
|
||||
if [ "x$is_first_entry" = xtrue ]; then
|
||||
hurd_entry "$kernel" simple
|
||||
submenu_indentation="\t"
|
||||
|
||||
# TRANSLATORS: %s is replaced with an OS name
|
||||
echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnuhurd-advanced-$(grub_get_device_id "${GRUB_DEVICE_BOOT}")' {"
|
||||
fi
|
||||
|
||||
hurd_entry "$kernel" advanced
|
||||
hurd_entry "$kernel" recovery
|
||||
is_first_entry=false
|
||||
done
|
||||
|
||||
# If at least one kernel was found, then we need to
|
||||
# add a closing '}' for the submenu command.
|
||||
if [ x"$is_first_entry" != xtrue ]; then
|
||||
echo '}'
|
||||
fi
|
||||
|
||||
echo "$title_correction_code"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue