make the linux-ppc packags be in synch with other platforms
[tangerine.git] / arch / common / boot / grub2 / util / update-grub_lib.in
blob628714084b697de760d9bd0e43ddc5be671e0067
1 # Helper library for update-grub
2 # Copyright (C) 2007,2008  Free Software Foundation, Inc.
4 # GRUB is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
9 # GRUB is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License
15 # along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
17 transform="@program_transform_name@"
19 prefix=@prefix@
20 exec_prefix=@exec_prefix@
21 datarootdir=@datarootdir@
22 datadir=@datadir@
23 sbindir=@sbindir@
24 pkgdatadir=${datadir}/`echo @PACKAGE_TARNAME@ | sed "${transform}"`
26 grub_probe=${sbindir}/`echo grub-probe | sed ${transform}`
28 make_system_path_relative_to_its_root ()
30   path=$1
31   # abort if file doesn't exist
32   if test -e $path ; then : ;else
33     return 1
34   fi
36   # canonicalize
37   if path=`readlink -f $path` ; then : ; else
38     return 1
39   fi
41   # if not a directory, climb up to the directory containing it
42   if test -d $path ; then
43     dir=$path
44   else
45     dir=`echo $path | sed -e "s,/[^/]*$,,g"`
46   fi
48   num=`stat -c %d $dir`
50   # this loop sets $dir to the root directory of the filesystem we're inspecting
51   while : ; do
52     parent=`readlink -f $dir/..`
53     if [ "x`stat -c %d $parent`" = "x$num" ] ; then : ; else
54       # $parent is another filesystem; we found it.
55       break
56     fi
57     if [ "x$dir" = "x/" ] ; then
58       # / is our root.
59       break
60     fi
61     dir=$parent
62   done
64   echo $path | sed -e "s,^$dir,/,g" -e "s,//,/,g"
67 convert_system_path_to_grub_path ()
69   path=$1
71   # abort if file doesn't exist
72   if test -e $path ; then : ;else
73     return 1
74   fi
76   # abort if file is in a filesystem we can't read
77   if ${grub_probe} -t fs $path > /dev/null 2>&1 ; then : ; else
78     return 1
79   fi
81   if drive=`${grub_probe} -t drive $path` ; then : ; else
82     return 1
83   fi
85   if relative_path=`make_system_path_relative_to_its_root $path` ; then : ; else
86     return 1
87   fi
89   # remove any trailing slash, even if that slash is everything we have
90   relative_path=`echo ${relative_path} | sed -e "s,/*$,,g"`
92   echo ${drive}${relative_path}
95 font_path ()
97   # Prefer system path for space reasons (/boot/grub might be a very small
98   # partition in case of OpenFirmware, etc).
99   for dir in ${pkgdatadir} /usr/share/grub /boot/grub ; do
100     # Prefer complete fonts over incomplete ones.
101     for basename in unicode unifont ascii ; do
102       path="${dir}/${basename}.pff"
103       if convert_system_path_to_grub_path ${path} > /dev/null ; then
104         echo "${path}"
105         return 0
106       fi
107     done
108   done
110   return 1
113 grub_file_is_not_garbage ()
115   if test -f "$1" ; then
116     case "$1" in
117       *.dpkg-dist|*.dpkg-old|*.dpkg-tmp) return 1 ;; # debian dpkg
118     esac
119   else
120     return 1
121   fi
122   return 0