You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
calculate-overlay/sys-boot/grub/files/grub-1.99-latest_version_ba...

124 lines
3.7 KiB

commit 59e1b06096de9ec9443fa15951e1dd816ecd7dde
Author: Хирецкий Михаил <mh@calculate.ru>
Date: Fri Apr 6 10:20:13 2012 +0400
Add support -install initramfs using.
Backport get latest version from grub-2.0.
diff --git a/util/grub-mkconfig_lib.in b/util/grub-mkconfig_lib.in
index a2dcd20..ddfbf70 100644
--- a/util/grub-mkconfig_lib.in
+++ b/util/grub-mkconfig_lib.in
@@ -157,23 +157,41 @@ grub_file_is_not_garbage ()
return 0
}
+version_sort ()
+{
+ case $version_sort_sort_has_v in
+ yes)
+ LC_ALL=C sort -V;;
+ no)
+ LC_ALL=C sort -n;;
+ *)
+ if sort -V </dev/null > /dev/null 2>&1; then
+ version_sort_sort_has_v=yes
+ LC_ALL=C sort -V
+ else
+ version_sort_sort_has_v=no
+ LC_ALL=C sort -n
+ fi;;
+ esac
+}
+
version_test_numeric ()
{
- local a="$1"
- local cmp="$2"
- local b="$3"
- if [ "$a" = "$b" ] ; then
- case "$cmp" in
+ version_test_numeric_a="$1"
+ version_test_numeric_cmp="$2"
+ version_test_numeric_b="$3"
+ if [ "$version_test_numeric_a" = "$version_test_numeric_b" ] ; then
+ case "$version_test_numeric_cmp" in
ge|eq|le) return 0 ;;
gt|lt) return 1 ;;
esac
fi
- if [ "$cmp" = "lt" ] ; then
- c="$a"
- a="$b"
- b="$c"
+ if [ "$version_test_numeric_cmp" = "lt" ] ; then
+ version_test_numeric_c="$version_test_numeric_a"
+ version_test_numeric_a="$version_test_numeric_b"
+ version_test_numeric_b="$version_test_numeric_c"
fi
- if (echo "$a" ; echo "$b") | sort -n | head -n 1 | grep -qx "$b" ; then
+ if (echo "$version_test_numeric_a" ; echo "$version_test_numeric_b") | version_sort | head -n 1 | grep -qx "$version_test_numeric_b" ; then
return 0
else
return 1
@@ -182,32 +200,31 @@ version_test_numeric ()
version_test_gt ()
{
- local a="`echo "$1" | sed -e "s/[^-]*-//"`"
- local b="`echo "$2" | sed -e "s/[^-]*-//"`"
- local cmp=gt
- if [ "x$b" = "x" ] ; then
+ version_test_gt_a="`echo "$1" | sed -e "s/[^-]*-//"`"
+ version_test_gt_b="`echo "$2" | sed -e "s/[^-]*-//"`"
+ version_test_gt_cmp=gt
+ if [ "x$version_test_gt_b" = "x" ] ; then
return 0
fi
- case "$a:$b" in
+ case "$version_test_gt_a:$version_test_gt_b" in
*.old:*.old) ;;
- *.old:*) a="`echo -n "$a" | sed -e 's/\.old$//'`" ; cmp=gt ;;
- *:*.old) b="`echo -n "$b" | sed -e 's/\.old$//'`" ; cmp=ge ;;
+ *.old:*) version_test_gt_a="`echo -n "$version_test_gt_a" | sed -e 's/\.old$//'`" ; version_test_gt_cmp=gt ;;
+ *:*.old) version_test_gt_b="`echo -n "$version_test_gt_b" | sed -e 's/\.old$//'`" ; version_test_gt_cmp=ge ;;
esac
- version_test_numeric "$a" "$cmp" "$b"
+ version_test_numeric "$version_test_gt_a" "$version_test_gt_cmp" "$version_test_gt_b"
return "$?"
}
version_find_latest ()
{
- local a=""
+ version_find_latest_a=""
for i in "$@" ; do
- if version_test_gt "$i" "$a" ; then
- a="$i"
+ if version_test_gt "$i" "$version_find_latest_a" ; then
+ version_find_latest_a="$i"
fi
done
- echo "$a"
+ echo "$version_find_latest_a"
}
-
# One layer of quotation is eaten by "", the second by sed, and the third by
# printf; so this turns ' into \'. Note that you must use the output of
# this function in a printf format string.
diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
index 505aac6..9aa7270 100644
--- a/util/grub.d/10_linux.in
+++ b/util/grub.d/10_linux.in
@@ -168,7 +168,8 @@ while [ "x$list" != "x" ] ; do
"initrd-${alt_version}" "initramfs-${alt_version}.img" \
"initramfs-genkernel-${version}" \
"initramfs-genkernel-${alt_version}" \
- "initramfs-${version}"; do
+ "initramfs-${version}" \
+ "initramfs-${version}-install"; do
if test -e "${dirname}/${i}" ; then
initrd="$i"
break