mirror of
https://github.com/Ponce/slackbuilds
synced 2024-12-01 01:00:03 +01:00
83 lines
2.8 KiB
Text
83 lines
2.8 KiB
Text
|
#!/bin/sh
|
||
|
set -e
|
||
|
|
||
|
prefix="/usr"
|
||
|
exec_prefix="/usr"
|
||
|
datarootdir="/usr/share"
|
||
|
|
||
|
. "$pkgdatadir/grub-mkconfig_lib"
|
||
|
|
||
|
CLASS="--class memtest86 --class gnu --class tool"
|
||
|
|
||
|
prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | grub_add_tab)"
|
||
|
|
||
|
memtest_entry ()
|
||
|
{
|
||
|
image="$1"
|
||
|
args="$2"
|
||
|
rel_image="$(make_system_path_relative_to_its_root ${image})"
|
||
|
|
||
|
# Apply some heuristics to show some images only on particular platforms.
|
||
|
basename="$(basename ${image})"
|
||
|
ftype="$(file ${image} | cut -d: -f2)"
|
||
|
if echo "${basename}" | grep -q ".elf\$" || echo "${ftype}" | grep -q "ELF"; then
|
||
|
protocol="knetbsd"
|
||
|
platform="pc"
|
||
|
#platform="" # Uncomment to show on EFI platforms; see below.
|
||
|
elif echo "${basename}" | grep -q ".efi\$" || echo "${ftype}" | grep -q "EFI"; then
|
||
|
protocol="chainloader"
|
||
|
platform="efi"
|
||
|
else # .bin, DOS/MBR boot sector
|
||
|
protocol="linux16"
|
||
|
platform="pc"
|
||
|
#platform="" # Uncomment to show on EFI platforms; see below.
|
||
|
fi
|
||
|
|
||
|
# All images listed above should boot on EFI platforms, but many (those
|
||
|
# marked with platform="pc") will likely run without graphics and appear to
|
||
|
# the casual user to not work, so are hidden by default. (Some versions
|
||
|
# beep at startup, verifying it booted, but the display will be blank.)
|
||
|
# Serial consoles may still be useful.
|
||
|
#
|
||
|
# Uncomment this to un-hide all images on EFI platforms, or selectively edit
|
||
|
# the platform lines above to un-hide particular images.
|
||
|
#if [ "$platform" = "pc" ]; then
|
||
|
# platform=""
|
||
|
#fi
|
||
|
|
||
|
if echo "${ftype}" | grep -q "Linux"; then # Linux kernel x86 boot executable
|
||
|
# .efi or .bin images may also present themselves as a Linux kernel image.
|
||
|
# When booted using the "linux" protocol, these images can be used on
|
||
|
# either "pc" or "efi" platform, and on EFI platforms they may have better
|
||
|
# or native resolution graphics.
|
||
|
protocol="linux"
|
||
|
#platform="" # Uncomment to discard platform constraint chosen above.
|
||
|
fi
|
||
|
|
||
|
# TODO: Detect multiboot images, use protocol="multiboot"
|
||
|
|
||
|
# Emit the menuentry.
|
||
|
platform_indent=""
|
||
|
if [ -n "${platform}" ]; then
|
||
|
echo "if [ x\$grub_platform = x${platform} ]; then"
|
||
|
platform_indent="${grub_tab}"
|
||
|
fi
|
||
|
echo "${platform_indent}menuentry \"Memory Tester (${basename})\" ${CLASS} {"
|
||
|
if [ "${protocol}" = "linux" -o "${protocol}" = "knetbsd" ]; then
|
||
|
echo "${platform_indent}${grub_tab}load_video"
|
||
|
fi
|
||
|
printf '%s\n' "${prepare_boot_cache}" | sed "s/^/${platform_indent}/"
|
||
|
echo "${platform_indent}${grub_tab}${protocol} ${rel_image} ${args}"
|
||
|
echo "${platform_indent}}"
|
||
|
if [ -n "${platform}" ]; then
|
||
|
echo "fi"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
for image in $(find /boot -maxdepth 1 -type f -regex '/boot/memtest86\+.*' | sort -Vr); do
|
||
|
if is_path_readable_by_grub "${image}" ; then
|
||
|
gettext_printf "Found memtest86 image: %s\n" "${image}" >&2
|
||
|
memtest_entry "${image}" "${GRUB_CMDLINE_MEMTEST86}"
|
||
|
fi
|
||
|
done
|