Index: Makefile.in
===================================================================
RCS file: /cvsroot/grub/grub2/Makefile.in,v
retrieving revision 1.14
diff -u -p -r1.14 Makefile.in
--- Makefile.in	8 Aug 2005 23:15:21 -0000	1.14
+++ Makefile.in	24 Oct 2005 04:40:06 -0000
@@ -106,7 +106,7 @@ install: install-local
 
 install-local: all
 	$(mkinstalldirs) $(DESTDIR)$(pkgdatadir)
-	@list='$(pkgdata_IMAGES) $(pkgdata_MODULES) $(pkgdata_DATA)'; \
+	@list='$(DATA)'; \
 	for file in $$list; do \
 	  if test -f "$$file"; then dir=; else dir="$(srcdir)"; fi; \
 	  dest="`echo $$file | sed 's,.*/,,'`"; \
@@ -134,7 +134,7 @@ install-strip:
 	$(MAKE) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" install
 
 uninstall:
-	@list='$(pkgdata_IMAGES) $(pkgdata_MODULES) $(pkgdata_DATA)'; \
+	@list='$(DATA)'; \
 	for file in $$list; do \
 	  dest="`echo $$file | sed 's,.*/,,'`"; \
 	  rm -f $(DESTDIR)$(pkgdatadir)/$$dest; \
Index: conf/powerpc-ieee1275.rmk
===================================================================
RCS file: /cvsroot/grub/grub2/conf/powerpc-ieee1275.rmk,v
retrieving revision 1.44
diff -u -p -r1.44 powerpc-ieee1275.rmk
--- conf/powerpc-ieee1275.rmk	9 Oct 2005 13:03:53 -0000	1.44
+++ conf/powerpc-ieee1275.rmk	24 Oct 2005 04:40:18 -0000
@@ -25,7 +25,8 @@ kernel_syms.lst: $(addprefix include/gru
 pkgdata_PROGRAMS = grubof
 
 # Utilities.
-bin_UTILITIES = grub-emu grub-mkimage
+bin_UTILITIES = grub-emu
+sbin_UTILITIES = grub-mkimage
 noinst_UTILITIES = genmoddep
 
 # For grub-mkimage.
@@ -70,6 +71,12 @@ grubof_LDFLAGS = -nostdlib -static-libgc
 
 # For genmoddep.
 genmoddep_SOURCES = util/genmoddep.c
+
+# Scripts.
+sbin_SCRIPTS = grub-install
+
+# For grub-install.
+grub_install_SOURCES = util/powerpc/ieee1275/grub-install.in
 
 # Modules.
 pkgdata_MODULES = _linux.mod linux.mod fat.mod ufs.mod ext2.mod minix.mod \
Index: util/powerpc/ieee1275/grub-install.in
===================================================================
RCS file: util/powerpc/ieee1275/grub-install.in
diff -N util/powerpc/ieee1275/grub-install.in
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ util/powerpc/ieee1275/grub-install.in	24 Oct 2005 04:40:18 -0000
@@ -0,0 +1,187 @@
+#! /bin/sh
+
+# Install GRUB on your drive.
+# Copyright (C) 1999,2000,2001,2002,2003,2004,2005 Free Software Foundation, Inc.
+#
+# This file 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St - Suite 330, Boston, MA 02110, USA.
+
+# Initialize some variables.
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+sbindir=@sbindir@
+datadir=@datadir@
+PACKAGE_NAME=@PACKAGE_NAME@
+PACKAGE_TARNAME=@PACKAGE_TARNAME@
+PACKAGE_VERSION=@PACKAGE_VERSION@
+host_cpu=@host_cpu@
+host_os=@host_os@
+host_vendor=@host_vendor@
+pkgdatadir=${datadir}/${PACKAGE_TARNAME}/${host_cpu}-${host_vendor}
+
+grub_mkimage=${sbindir}/grub-mkimage
+rootdir=
+grub_prefix=/boot/grub
+modules=
+
+install_device=
+debug=no
+update_nvram=yes
+
+ofpathname=/usr/sbin/ofpathname
+nvsetenv=/sbin/nvsetenv
+
+# Usage: usage
+# Print the usage.
+usage () {
+    cat <<EOF
+Usage: grub-install [OPTION] [install_device]
+Install GRUB on your drive.
+
+  -h, --help              print this message and exit
+  -v, --version           print the version information and exit
+  --modules=MODULES       pre-load specified modules MODULES
+  --root-directory=DIR    install GRUB images under the directory DIR
+                          instead of the root directory
+  --grub-mkimage=FILE     use FILE as grub-mkimage
+  --no-nvram              don't update the boot-device NVRAM variable
+
+grub-install copies GRUB images into the DIR/boot directory specfied by
+--root-directory, and uses nvsetenv to set the Open Firmware boot-device
+variable.
+
+Report bugs to <bug-grub@gnu.org>.
+EOF
+}
+
+# Check the arguments.
+for option in "$@"; do
+    case "$option" in
+    -h | --help)
+	usage
+	exit 0 ;;
+    -v | --version)
+	echo "grub-install (GNU GRUB ${PACKAGE_VERSION})"
+	exit 0 ;;
+    --modules=*)
+	modules=`echo "$option" | sed 's/--modules=//'` ;;
+    --root-directory=*)
+	rootdir=`echo "$option" | sed 's/--root-directory=//'` ;;
+    --grub-mkimage=*)
+	grub_mkimage=`echo "$option" | sed 's/--grub-mkimage=//'` ;;
+    --no-nvram)
+	update_nvram=no ;;
+    # This is an undocumented feature...
+    --debug)
+	debug=yes ;;
+    -*)
+	echo "Unrecognized option \`$option'" 1>&2
+	usage
+	exit 1
+	;;
+    *)
+	if test "x$install_device" != x; then
+	    echo "More than one install_devices?" 1>&2
+	    usage
+	    exit 1
+	fi
+	install_device="${option}" ;;
+    esac
+done
+
+# If the debugging feature is enabled, print commands.
+if test $debug = yes; then
+    set -x
+fi
+
+# Initialize these directories here, since ROOTDIR was initialized.
+bootdir=${rootdir}/boot
+grubdir=${bootdir}/grub
+
+set $grub_mkimage dummy
+if test -f "$1"; then
+    :
+else
+    echo "$1: Not found." 1>&2
+    exit 1
+fi
+
+# Create the GRUB directory if it is not present.
+test -d "$bootdir" || mkdir "$bootdir" || exit 1
+test -d "$grubdir" || mkdir "$grubdir" || exit 1
+
+# Copy the GRUB images to the GRUB directory.
+for file in ${grubdir}/*.mod ${grubdir}/*.lst ; do
+    if test -f $file; then
+	rm -f $file || exit 1
+    fi
+done
+for file in ${pkgdatadir}/*.mod ${pkgdatadir}/*.lst ; do
+    cp -f $file ${grubdir} || exit 1
+done
+
+# Create the core image with all modules, unless user specified a subset.
+# XXX probe for partition map and filesystem?
+if test "x$modules" = x; then
+    modules="$pkgdatadir"/*.mod
+fi
+
+# Now perform the installation.
+"$grub_mkimage" --output=${grubdir}/grub $modules || exit 1
+
+if test $update_nvram = yes; then
+    # Find the partition at the right mount point.
+    install_device=`awk '$2 == '"\"$grubdir\""' { print $1 }' < /proc/mounts`
+    if test "x$install_device" = x; then
+	# Uh oh... grub-mkimage installed into a plain directory somewhere.
+	echo "$grubdir is not a mount point!"
+	exit 1
+    fi
+    # XXX warn on firmware-unreadable filesystems?
+
+    set $ofpathname dummy
+    if test -f "$1"; then
+	:
+    else
+	echo "$1: Not found." 1>&2
+	exit 1
+    fi
+
+    set $nvsetenv dummy
+    if test -f "$1"; then
+	:
+    else
+	echo "$1: Not found." 1>&2
+	exit 1
+    fi
+
+    # Get the Open Firmware device tree path translation.
+    dev=`echo $install_device | sed -e 's/\/dev\///' -e 's/[0-9]\+//'`
+    partno=`echo $install_device | sed -e 's/.*\([0-9]\+\)$/\1/'`
+    ofpath=`$ofpathname $dev` || {
+	echo "Couldn't find Open Firmware device tree path for $dev."
+	echo "You will have to set boot-device manually."
+	exit 1
+    }
+
+    # Point boot-device at the new grub install
+    "$nvsetenv" boot-device "$ofpath:$partno,"'\grub' || {
+	echo "$nvsetenv failed."
+	echo "You will have to set boot-device manually."
+	exit 1
+    }
+fi
+
+# Bye.
+exit 0
Index: util/powerpc/ieee1275/grub-mkimage.c
===================================================================
RCS file: /cvsroot/grub/grub2/util/powerpc/ieee1275/grub-mkimage.c,v
retrieving revision 1.3
diff -u -p -r1.3 grub-mkimage.c
--- util/powerpc/ieee1275/grub-mkimage.c	30 Jun 2005 10:21:37 -0000	1.3
+++ util/powerpc/ieee1275/grub-mkimage.c	24 Oct 2005 04:40:19 -0000
@@ -32,8 +32,6 @@
 
 #define ALIGN_UP(addr, align) ((long)((char *)addr + align - 1) & ~(align - 1))
 
-static char *kernel_path = "grubof";
-
 #define GRUB_IEEE1275_NOTE_NAME "PowerPC"
 #define GRUB_IEEE1275_NOTE_TYPE 0x1275
 
@@ -165,10 +163,12 @@ add_segments (char *dir, FILE *out, int 
   Elf32_Phdr *phdrs = NULL;
   Elf32_Phdr *phdr;
   FILE *in;
+  char *kernel_path;
   off_t phdroff;
   int i;
 
   /* Read ELF header.  */
+  kernel_path = grub_util_get_path (dir, "grubof");
   in = fopen (kernel_path, "rb");
   if (! in)
     grub_util_error ("cannot open %s", kernel_path);
@@ -245,6 +245,7 @@ add_segments (char *dir, FILE *out, int 
   grub_util_write_image_at (&ehdr, sizeof (ehdr), 0, out);
 
   free (phdrs);
+  free (kernel_path);
 }
 
 static struct option options[] =
