]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2008-09-29 Felix Zielcke <fzielcke@z-51.de>
authorfzielcke <fzielcke@localhost>
Mon, 29 Sep 2008 14:57:05 +0000 (14:57 +0000)
committerfzielcke <fzielcke@localhost>
Mon, 29 Sep 2008 14:57:05 +0000 (14:57 +0000)
* util/update-grub_lib.in: Copy to ...
* util/grub-mkconfig_lib.in: ... this.  Update all users.
* util/update-grub_lib.in: Make it a stub to `grub-mkconfigig_lib.in'.
* util/update-grub.in: Rename to ...
* util/grub-mkconfig.in: ... this.  Update all users.  Remove `-y'
option. Add `--output' option to allow users to specify the generated
configuration file.  Default to stdout.
(update_grub_dir): Rename to ...
(grub_mkconfig_dir): ... this.
(grub_cfg): Default to an empty string.
* conf/common.rmk (update-grub): Rename to ...
(grub-mkconfig): ... this.
(update-grub_lib): Copy to ...
(grub-mkconfig_lib): ... this.
(update-grub_SCRIPTS): Copy to ...
(grub-mkconfig_SCRIPTS): ... this. Update all users.
(update-grub_DATA): Rename to ...
(grub-mkconfig_DATA): ... this.

13 files changed:
ChangeLog
DISTLIST
Makefile.in
conf/common.mk
conf/common.rmk
util/grub-mkconfig.in [moved from util/update-grub.in with 85% similarity]
util/grub-mkconfig_lib.in [new file with mode: 0644]
util/grub.d/00_header.in
util/grub.d/10_hurd.in
util/grub.d/10_linux.in
util/grub.d/10_windows.in
util/grub.d/30_os-prober.in
util/update-grub_lib.in

index cf66038abfdb46008445a71d9e20f75ecdd4f4a7..b0d03515e347c25a586000942b596ddee5a93250 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,24 @@
+2008-09-29  Felix Zielcke  <fzielcke@z-51.de>
+
+       * util/update-grub_lib.in: Copy to ...
+       * util/grub-mkconfig_lib.in: ... this.  Update all users.
+       * util/update-grub_lib.in: Make it a stub to `grub-mkconfigig_lib.in'.
+       * util/update-grub.in: Rename to ...
+       * util/grub-mkconfig.in: ... this.  Update all users.  Remove `-y'
+       option. Add `--output' option to allow users to specify the generated
+       configuration file.  Default to stdout.
+       (update_grub_dir): Rename to ...
+       (grub_mkconfig_dir): ... this.
+       (grub_cfg): Default to an empty string.
+       * conf/common.rmk (update-grub): Rename to ...
+       (grub-mkconfig): ... this.
+       (update-grub_lib): Copy to ...
+       (grub-mkconfig_lib): ... this.
+       (update-grub_SCRIPTS): Copy to ...
+       (grub-mkconfig_SCRIPTS): ... this. Update all users.
+       (update-grub_DATA): Rename to ...
+       (grub-mkconfig_DATA): ... this.
+
 2008-09-28  Robert Millan  <rmh@aybabtu.com>
 
        * fs/iso9660.c (struct grub_iso9660_primary_voldesc): Rename `created'
index 21cbbfe953769843de37f8d553dbe546515910aa..502773f7bb636234b9cd892512bb5185f9611b12 100644 (file)
--- a/DISTLIST
+++ b/DISTLIST
@@ -414,6 +414,8 @@ util/getroot.c
 util/grub-editenv.c
 util/grub-emu.c
 util/grub-fstest.c
+util/grub-mkconfig.in
+util/grub-mkconfig_lib.in
 util/grub-mkdevicemap.c
 util/grub-pe2elf.c
 util/grub-probe.c
@@ -424,7 +426,6 @@ util/misc.c
 util/raid.c
 util/resolve.c
 util/unifont2pff.rb
-util/update-grub.in
 util/update-grub_lib.in
 util/elf/grub-mkimage.c
 util/grub.d/00_header.in
index 57a1f0a3f6320fc273aefd745012df61037da143..b137b8765132235eb20ada14567615abeda4e532 100644 (file)
@@ -108,7 +108,7 @@ PKGLIB = $(pkglib_IMAGES) $(pkglib_MODULES) $(pkglib_PROGRAMS) \
        $(pkglib_DATA) $(lib_DATA)
 PKGDATA = $(pkgdata_DATA)
 PROGRAMS = $(bin_UTILITIES) $(sbin_UTILITIES)
-SCRIPTS = $(bin_SCRIPTS) $(sbin_SCRIPTS) $(update-grub_SCRIPTS)
+SCRIPTS = $(bin_SCRIPTS) $(sbin_SCRIPTS) $(grub-mkconfig_SCRIPTS)
 
 CLEANFILES =
 MOSTLYCLEANFILES = 
@@ -209,12 +209,12 @@ install-local: all
          $(HELP2MAN) --section=8 $(builddir)/$$file > $(DESTDIR)$(mandir)/man8/$$dest.8; \
        done
        $(mkinstalldirs) $(DESTDIR)$(sysconfdir)/grub.d
-       @list='$(update-grub_SCRIPTS)'; for file in $$list; do \
+       @list='$(grub-mkconfig_SCRIPTS)'; for file in $$list; do \
          if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \
          dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \
          $(INSTALL_SCRIPT) $$dir$$file $(DESTDIR)$(sysconfdir)/grub.d/$$dest; \
        done
-       @list='$(update-grub_DATA)'; for file in $$list; do \
+       @list='$(grub-mkconfig_DATA)'; for file in $$list; do \
          if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \
          dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \
          $(INSTALL_DATA) $$dir$$file $(DESTDIR)$(sysconfdir)/grub.d/$$dest; \
@@ -249,7 +249,7 @@ uninstall:
          dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \
          rm -f $(DESTDIR)$(sbindir)/$$dest; \
        done
-       @list='$(update-grub_SCRIPTS) $(update-grub_DATA)'; for file in $$list; do \
+       @list='$(grub-mkconfig_SCRIPTS) $(grub-mkconfig_DATA)'; for file in $$list; do \
          dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \
          rm -f $(DESTDIR)$(sysconfdir)/grub.d/$$dest; \
        done
index 444bd8350f8b2b132cb3793d536775a9acc40f9c..925eac16a0f909f4511621c426ee53ddedeebef1 100644 (file)
@@ -526,12 +526,18 @@ grub_pe2elf-util_misc.o: util/misc.c $(util/misc.c_DEPENDENCIES)
 
 CLEANFILES += grub-pe2elf
 
-# For update-grub
-update-grub: util/update-grub.in config.status
+# For grub-mkconfig
+grub-mkconfig: util/grub-mkconfig.in config.status
        ./config.status --file=$@:$<
        chmod +x $@
-sbin_SCRIPTS += update-grub
-CLEANFILES += update-grub
+sbin_SCRIPTS += grub-mkconfig
+CLEANFILES += grub-mkconfig
+
+grub-mkconfig_lib: util/grub-mkconfig_lib.in config.status
+       ./config.status --file=$@:$<
+       chmod +x $@
+lib_DATA += grub-mkconfig_lib
+CLEANFILES += grub-mkconfig_lib
 
 update-grub_lib: util/update-grub_lib.in config.status
        ./config.status --file=$@:$<
@@ -542,14 +548,14 @@ CLEANFILES += update-grub_lib
 %: util/grub.d/%.in config.status
        ./config.status --file=$@:$<
        chmod +x $@
-update-grub_SCRIPTS = 00_header 10_linux 10_hurd 30_os-prober 40_custom
+grub-mkconfig_SCRIPTS = 00_header 10_linux 10_hurd 30_os-prober 40_custom
 ifeq ($(target_os), cygwin)
-update-grub_SCRIPTS += 10_windows
+grub-mkconfig_SCRIPTS += 10_windows
 endif
 
-CLEANFILES += $(update-grub_SCRIPTS)
+CLEANFILES += $(grub-mkconfig_SCRIPTS)
 
-update-grub_DATA += util/grub.d/README
+grub-mkconfig_DATA += util/grub.d/README
 
 
 # Filing systems.
index 109fb7a1091489aedda485e9d426db1dad9affe2..b8e19a3dc313f733a43326878b21ed7b744c7444 100644 (file)
@@ -115,12 +115,18 @@ endif
 grub_pe2elf_SOURCES = util/grub-pe2elf.c util/misc.c
 CLEANFILES += grub-pe2elf
 
-# For update-grub
-update-grub: util/update-grub.in config.status
+# For grub-mkconfig
+grub-mkconfig: util/grub-mkconfig.in config.status
        ./config.status --file=$@:$<
        chmod +x $@
-sbin_SCRIPTS += update-grub
-CLEANFILES += update-grub
+sbin_SCRIPTS += grub-mkconfig
+CLEANFILES += grub-mkconfig
+
+grub-mkconfig_lib: util/grub-mkconfig_lib.in config.status
+       ./config.status --file=$@:$<
+       chmod +x $@
+lib_DATA += grub-mkconfig_lib
+CLEANFILES += grub-mkconfig_lib
 
 update-grub_lib: util/update-grub_lib.in config.status
        ./config.status --file=$@:$<
@@ -131,14 +137,14 @@ CLEANFILES += update-grub_lib
 %: util/grub.d/%.in config.status
        ./config.status --file=$@:$<
        chmod +x $@
-update-grub_SCRIPTS = 00_header 10_linux 10_hurd 30_os-prober 40_custom
+grub-mkconfig_SCRIPTS = 00_header 10_linux 10_hurd 30_os-prober 40_custom
 ifeq ($(target_os), cygwin)
-update-grub_SCRIPTS += 10_windows
+grub-mkconfig_SCRIPTS += 10_windows
 endif
 
-CLEANFILES += $(update-grub_SCRIPTS)
+CLEANFILES += $(grub-mkconfig_SCRIPTS)
 
-update-grub_DATA += util/grub.d/README
+grub-mkconfig_DATA += util/grub.d/README
 
 
 # Filing systems.
similarity index 85%
rename from util/update-grub.in
rename to util/grub-mkconfig.in
index 75780acb27c3b24c25b9636801be853b893fc1d3..f7cf0d1f09cec2557722c6bea45403353a335c8d 100644 (file)
@@ -24,8 +24,8 @@ sbindir=@sbindir@
 libdir=@libdir@
 sysconfdir=@sysconfdir@
 grub_prefix=`echo /boot/grub | sed ${transform}`
-grub_cfg=${grub_prefix}/grub.cfg
-update_grub_dir=${sysconfdir}/grub.d
+grub_cfg=""
+grub_mkconfig_dir=${sysconfdir}/grub.d
 
 grub_mkdevicemap=${sbindir}/`echo grub-mkdevicemap | sed ${transform}`
 grub_probe=${sbindir}/`echo grub-probe | sed ${transform}`
@@ -35,11 +35,11 @@ grub_probe=${sbindir}/`echo grub-probe | sed ${transform}`
 usage () {
     cat <<EOF
 Usage: $0 [OPTION]
-Generate /boot/grub/grub.cfg
+Generate a grub config file
 
+  -o, --output=FILE       output generated config to FILE [default=stdout]
   -h, --help              print this message and exit
   -v, --version           print the version information and exit
-  -y                      ignored for compatibility
 
 Report bugs to <bug-grub@gnu.org>.
 EOF
@@ -54,9 +54,13 @@ for option in "$@"; do
     -v | --version)
        echo "$0 (GNU GRUB ${PACKAGE_VERSION})"
        exit 0 ;;
-    -y)
-        echo "$0: warning: Ignoring -y option (no longer needed)." >&2
-        ;;
+    -o)
+       shift
+       grub_cfg=$1
+       ;;
+    --output=)
+       grub_cfg=`echo "$option" | sed 's/--output=//'`
+       ;;      
     -*)
        echo "Unrecognized option \`$option'" 1>&2
        usage
@@ -65,7 +69,7 @@ for option in "$@"; do
     esac
 done
 
-. ${libdir}/grub/update-grub_lib
+. ${libdir}/grub/grub-mkconfig_lib
 
 if [ "x$EUID" = "x" ] ; then
   EUID=`id -u`
@@ -165,14 +169,15 @@ export GRUB_DEVICE GRUB_DEVICE_UUID GRUB_DEVICE_BOOT GRUB_DEVICE_BOOT_UUID GRUB_
 # These are optional, user-defined variables.
 export GRUB_DEFAULT GRUB_TIMEOUT GRUB_DISTRIBUTOR GRUB_CMDLINE_LINUX GRUB_CMDLINE_LINUX_DEFAULT GRUB_TERMINAL GRUB_SERIAL_COMMAND GRUB_DISABLE_LINUX_UUID GRUB_GFXMODE
 
-rm -f ${grub_cfg}.new
-exec > ${grub_cfg}.new
-
-# Allow this to fail, since /boot/grub/ might need to be fatfs to support some
-# firmware implementations (e.g. OFW or EFI).
-chmod 444 ${grub_cfg}.new || true
+if test "x${grub_cfg}" != "x"; then
+  rm -f ${grub_cfg}.new
+  exec > ${grub_cfg}.new
 
-echo "Updating ${grub_cfg} ..." >&2
+  # Allow this to fail, since /boot/grub/ might need to be fatfs to support some
+  # firmware implementations (e.g. OFW or EFI).
+  chmod 444 ${grub_cfg}.new || true
+fi
+echo "Generating grub.cfg ..." >&2
 
 cat << EOF
 #
@@ -183,7 +188,7 @@ cat << EOF
 #
 EOF
 
-for i in ${update_grub_dir}/* ; do
+for i in ${grub_mkconfig_dir}/* ; do
   case "$i" in
     # emacsen backup files. FIXME: support other editors
     *~) ;;
@@ -198,7 +203,9 @@ for i in ${update_grub_dir}/* ; do
   esac
 done
 
-# none of the children aborted with error, install the new grub.cfg
-mv -f ${grub_cfg}.new ${grub_cfg}
+if test "x${grub_cfg}" != "x" ; then
+  # none of the children aborted with error, install the new grub.cfg
+  mv -f ${grub_cfg}.new ${grub_cfg}
+fi
 
 echo "done" >&2
diff --git a/util/grub-mkconfig_lib.in b/util/grub-mkconfig_lib.in
new file mode 100644 (file)
index 0000000..83eb3b8
--- /dev/null
@@ -0,0 +1,173 @@
+# Helper library for grub-mkconfig
+# Copyright (C) 2007,2008  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/>.
+
+transform="@program_transform_name@"
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+datarootdir=@datarootdir@
+datadir=@datadir@
+sbindir=@sbindir@
+pkgdatadir=${datadir}/`echo @PACKAGE_TARNAME@ | sed "${transform}"`
+
+grub_probe=${sbindir}/`echo grub-probe | sed ${transform}`
+
+make_system_path_relative_to_its_root ()
+{
+  path=$1
+  # abort if file doesn't exist
+  if test -e $path ; then : ;else
+    return 1
+  fi
+
+  # canonicalize
+  if path=`readlink -f $path` ; then : ; else
+    return 1
+  fi
+
+  # if not a directory, climb up to the directory containing it
+  if test -d $path ; then
+    dir=$path
+  else
+    dir=`echo $path | sed -e "s,/[^/]*$,,g"`
+  fi
+
+  num=`stat -c %d $dir`
+
+  # this loop sets $dir to the root directory of the filesystem we're inspecting
+  while : ; do
+    parent=`readlink -f $dir/..`
+    if [ "x`stat -c %d $parent`" = "x$num" ] ; then : ; else
+      # $parent is another filesystem; we found it.
+      break
+    fi
+    if [ "x$dir" = "x/" ] ; then
+      # / is our root.
+      break
+    fi
+    dir=$parent
+  done
+
+  # This function never prints trailing slashes (so that its output can be
+  # appended a slash unconditionally).  Each slash in $dir is considered a
+  # preceding slash, and therefore the root directory is an empty string.
+  if [ "$dir" = "/" ] ; then
+    dir=""
+  fi
+
+  # XXX: This fails if $dir contains ','.
+  path=`echo "$path" | sed -e "s,^$dir,,g"` || return 1
+
+  case "`uname 2>/dev/null`" in
+    CYGWIN*)
+      # Cygwin: Check if regular or emulated mount.
+      if [ -z "$dir" ] || [ "`stat -c %D "$dir/.."`" != 620000 ] ; then
+        # Reached some mount point not below /cygdrive.
+        # GRUB does not know Cygwin's emulated mounts,
+        # convert to Win32 path and remove drive letter.
+        path=`cygpath -m "$path" | sed -n 's,^[A-Za-z]:,,p'`
+        test ! -z "$path" || return 1
+      fi ;;
+  esac
+
+  echo "$path"
+}
+
+is_path_readable_by_grub ()
+{
+  path=$1
+
+  # abort if path doesn't exist
+  if test -e $path ; then : ;else
+    return 1
+  fi
+
+  # abort if file is in a filesystem we can't read
+  if ${grub_probe} -t fs $path > /dev/null 2>&1 ; then : ; else
+    return 1
+  fi
+
+  return 0
+}
+
+convert_system_path_to_grub_path ()
+{
+  path=$1
+
+  echo "Warning: convert_system_path_to_grub_path() is deprecated.  Use prepare_grub_to_access_device() instead." >&2
+
+  # abort if GRUB can't access the path
+  if is_path_readable_by_grub ${path} ; then : ; else
+    return 1
+  fi
+
+  if drive=`${grub_probe} -t drive $path` ; then : ; else
+    return 1
+  fi
+
+  if relative_path=`make_system_path_relative_to_its_root $path` ; then : ; else
+    return 1
+  fi
+
+  echo ${drive}${relative_path}
+}
+
+prepare_grub_to_access_device ()
+{
+  device=$1
+
+  # Abstraction modules aren't auto-loaded.
+  abstraction="`${grub_probe} --device ${device} --target=abstraction`"
+  if [ "x${abstraction}" = "x" ] ; then : ; else
+    echo "insmod ${abstraction}"
+  fi
+
+  # If there's a filesystem UUID that GRUB is capable of identifying, use it;
+  # otherwise set root as per value in device.map.
+  echo "set root=`${grub_probe} --device ${device} --target=drive`"
+  if fs_uuid="`${grub_probe} --device ${device} --target=fs_uuid 2> /dev/null`" ; then
+    echo "search --fs-uuid --set ${fs_uuid}"
+  fi
+}
+
+font_path ()
+{
+  for dir in ${pkgdatadir} /boot/grub /usr/share/grub ; do
+    # FIXME: We prefer ascii because loading complete fonts is too slow (and
+    # we don't yet provide the gettext magic that would make unicode useful).
+    for basename in ascii unicode unifont ; do
+      path="${dir}/${basename}.pff"
+      if is_path_readable_by_grub ${path} > /dev/null ; then
+        echo "${path}"
+        return 0
+      fi
+    done
+  done
+
+  return 1
+}
+
+grub_file_is_not_garbage ()
+{
+  if test -f "$1" ; then
+    case "$1" in
+      *.dpkg-dist|*.dpkg-old|*.dpkg-tmp) return 1 ;; # debian dpkg
+    esac
+  else
+    return 1
+  fi
+  return 0
+}
index 9ef25cfd75aa2458705bf59fa8481a1e1db584d3..a8e2902b1d5cf33080763eed44dda7eaf3059124 100644 (file)
@@ -23,7 +23,7 @@ exec_prefix=@exec_prefix@
 libdir=@libdir@
 grub_prefix=`echo /boot/grub | sed ${transform}`
 
-. ${libdir}/grub/update-grub_lib
+. ${libdir}/grub/grub-mkconfig_lib
 
 # Do this as early as possible, since other commands might depend on it.
 # (e.g. the `font' command might need lvm or raid modules)
index 833b24fc6065c2db3d9f7ed0511b29097ef35eb7..12d61b03908f97475f3f07c23797eb7fc9484c9b 100644 (file)
@@ -19,7 +19,7 @@
 prefix=@prefix@
 exec_prefix=@exec_prefix@
 libdir=@libdir@
-. ${libdir}/grub/update-grub_lib
+. ${libdir}/grub/grub-mkconfig_lib
 
 if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
   OS=GNU
index 9045904cbfc5ce426223606706a7b91ecc4ee285..7cd5a9ed25f729492024bb6534cccfd70ff8f496 100644 (file)
@@ -19,7 +19,7 @@
 prefix=@prefix@
 exec_prefix=@exec_prefix@
 libdir=@libdir@
-. ${libdir}/grub/update-grub_lib
+. ${libdir}/grub/grub-mkconfig_lib
 
 if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
   OS=GNU/Linux
index e8f3c3e1490901994f957316d3e7402b9b573787..8877b15d533a0710fbf418a43b012a652ee5230c 100644 (file)
@@ -19,7 +19,7 @@
 prefix=@prefix@
 exec_prefix=@exec_prefix@
 libdir=@libdir@
-. ${libdir}/grub/update-grub_lib
+. ${libdir}/grub/grub-mkconfig_lib
 
 case "`uname 2>/dev/null`" in
   CYGWIN*)  ;;
index 56686e7b99d43039b448223f372b0e3b17542579..429cc9582bfe301d7c639dc0eeb091e7c66f18fc 100644 (file)
@@ -83,7 +83,7 @@ EOF
       done
     ;;
     hurd|*)
-      echo "  ${LONGNAME} is not yet supported by update-grub." >&2
+      echo "  ${LONGNAME} is not yet supported by grub-mkconfig." >&2
     ;;
   esac
 done
index 9d0f0c6031ed290e20168404272a144d9972ae4c..c4f187d39a86f78fb6deeb85c12ba094caa8adb6 100644 (file)
@@ -1,4 +1,4 @@
-# Helper library for update-grub
+# stub for new grub-mkconfig_lib
 # Copyright (C) 2007,2008  Free Software Foundation, Inc.
 #
 # GRUB is free software: you can redistribute it and/or modify
 # You should have received a copy of the GNU General Public License
 # along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
 
-transform="@program_transform_name@"
-
 prefix=@prefix@
 exec_prefix=@exec_prefix@
-datarootdir=@datarootdir@
-datadir=@datadir@
-sbindir=@sbindir@
-pkgdatadir=${datadir}/`echo @PACKAGE_TARNAME@ | sed "${transform}"`
-
-grub_probe=${sbindir}/`echo grub-probe | sed ${transform}`
-
-make_system_path_relative_to_its_root ()
-{
-  path=$1
-  # abort if file doesn't exist
-  if test -e $path ; then : ;else
-    return 1
-  fi
-
-  # canonicalize
-  if path=`readlink -f $path` ; then : ; else
-    return 1
-  fi
-
-  # if not a directory, climb up to the directory containing it
-  if test -d $path ; then
-    dir=$path
-  else
-    dir=`echo $path | sed -e "s,/[^/]*$,,g"`
-  fi
-
-  num=`stat -c %d $dir`
-
-  # this loop sets $dir to the root directory of the filesystem we're inspecting
-  while : ; do
-    parent=`readlink -f $dir/..`
-    if [ "x`stat -c %d $parent`" = "x$num" ] ; then : ; else
-      # $parent is another filesystem; we found it.
-      break
-    fi
-    if [ "x$dir" = "x/" ] ; then
-      # / is our root.
-      break
-    fi
-    dir=$parent
-  done
-
-  # This function never prints trailing slashes (so that its output can be
-  # appended a slash unconditionally).  Each slash in $dir is considered a
-  # preceding slash, and therefore the root directory is an empty string.
-  if [ "$dir" = "/" ] ; then
-    dir=""
-  fi
-
-  # XXX: This fails if $dir contains ','.
-  path=`echo "$path" | sed -e "s,^$dir,,g"` || return 1
-
-  case "`uname 2>/dev/null`" in
-    CYGWIN*)
-      # Cygwin: Check if regular or emulated mount.
-      if [ -z "$dir" ] || [ "`stat -c %D "$dir/.."`" != 620000 ] ; then
-        # Reached some mount point not below /cygdrive.
-        # GRUB does not know Cygwin's emulated mounts,
-        # convert to Win32 path and remove drive letter.
-        path=`cygpath -m "$path" | sed -n 's,^[A-Za-z]:,,p'`
-        test ! -z "$path" || return 1
-      fi ;;
-  esac
-
-  echo "$path"
-}
-
-is_path_readable_by_grub ()
-{
-  path=$1
-
-  # abort if path doesn't exist
-  if test -e $path ; then : ;else
-    return 1
-  fi
-
-  # abort if file is in a filesystem we can't read
-  if ${grub_probe} -t fs $path > /dev/null 2>&1 ; then : ; else
-    return 1
-  fi
-
-  return 0
-}
-
-convert_system_path_to_grub_path ()
-{
-  path=$1
-
-  echo "Warning: convert_system_path_to_grub_path() is deprecated.  Use prepare_grub_to_access_device() instead." >&2
-
-  # abort if GRUB can't access the path
-  if is_path_readable_by_grub ${path} ; then : ; else
-    return 1
-  fi
-
-  if drive=`${grub_probe} -t drive $path` ; then : ; else
-    return 1
-  fi
-
-  if relative_path=`make_system_path_relative_to_its_root $path` ; then : ; else
-    return 1
-  fi
-
-  echo ${drive}${relative_path}
-}
-
-prepare_grub_to_access_device ()
-{
-  device=$1
-
-  # Abstraction modules aren't auto-loaded.
-  abstraction="`${grub_probe} --device ${device} --target=abstraction`"
-  if [ "x${abstraction}" = "x" ] ; then : ; else
-    echo "insmod ${abstraction}"
-  fi
-
-  # If there's a filesystem UUID that GRUB is capable of identifying, use it;
-  # otherwise set root as per value in device.map.
-  echo "set root=`${grub_probe} --device ${device} --target=drive`"
-  if fs_uuid="`${grub_probe} --device ${device} --target=fs_uuid 2> /dev/null`" ; then
-    echo "search --fs-uuid --set ${fs_uuid}"
-  fi
-}
-
-font_path ()
-{
-  for dir in ${pkgdatadir} /boot/grub /usr/share/grub ; do
-    # FIXME: We prefer ascii because loading complete fonts is too slow (and
-    # we don't yet provide the gettext magic that would make unicode useful).
-    for basename in ascii unicode unifont ; do
-      path="${dir}/${basename}.pff"
-      if is_path_readable_by_grub ${path} > /dev/null ; then
-        echo "${path}"
-        return 0
-      fi
-    done
-  done
-
-  return 1
-}
+libdir=@libdir@
 
-grub_file_is_not_garbage ()
-{
-  if test -f "$1" ; then
-    case "$1" in
-      *.dpkg-dist|*.dpkg-old|*.dpkg-tmp) return 1 ;; # debian dpkg
-    esac
-  else
-    return 1
-  fi
-  return 0
-}
+echo "warning: this file is deprecated, use grub-mkconfig_lib instead" >&2
+. ${libdir}/grub/grub-mkconfig_lib