]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2008-08-06 Christian Franke <franke@computer.org>
authorchrfranke <chrfranke@localhost>
Wed, 6 Aug 2008 18:45:51 +0000 (18:45 +0000)
committerchrfranke <chrfranke@localhost>
Wed, 6 Aug 2008 18:45:51 +0000 (18:45 +0000)
* conf/common.rmk: Build and install `10_windows'.
* util/grub.d/10_windows.in: New script.

.cvsignore
ChangeLog
conf/common.mk
conf/common.rmk
util/grub.d/10_windows.in [new file with mode: 0644]

index 0742a73afebe1aa2559b31ba861e2fe25acfa6d5..fdb992098388d9edce28e4c6ccf0be7f07c54c7b 100644 (file)
@@ -7,6 +7,7 @@
 00_header
 10_hurd
 10_linux
+10_windows
 30_os-prober
 40_custom
 Makefile
index 117dcf16e481a3a1c00355d057be868913f55150..d230805f0c3d1340e5b2655f9b0c72aaf7288810 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-08-06  Christian Franke  <franke@computer.org>
+
+       * conf/common.rmk: Build and install `10_windows'.
+       * util/grub.d/10_windows.in: New script.
+
 2008-08-06  Pavel Roskin  <proski@gnu.org>
 
        * kern/i386/pit.c: Include `<grub/i386/pit.h>'.
index 4a8b72cffab31085598f616df64948a8c9214e98..e287542d4f272d581e9c701316056f42e2499e9e 100644 (file)
@@ -493,7 +493,7 @@ 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
+update-grub_SCRIPTS = 00_header 10_linux 10_hurd 10_windows 30_os-prober 40_custom
 CLEANFILES += $(update-grub_SCRIPTS)
 
 update-grub_DATA += util/grub.d/README
index 3d3cd8aec17e1acba241275e59c99aaa87ce8ec0..3d674a68c5766ba123c3eda2013fe491da4a928e 100644 (file)
@@ -120,7 +120,7 @@ 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
+update-grub_SCRIPTS = 00_header 10_linux 10_hurd 10_windows 30_os-prober 40_custom
 CLEANFILES += $(update-grub_SCRIPTS)
 
 update-grub_DATA += util/grub.d/README
diff --git a/util/grub.d/10_windows.in b/util/grub.d/10_windows.in
new file mode 100644 (file)
index 0000000..e8f3c3e
--- /dev/null
@@ -0,0 +1,83 @@
+#! /bin/sh -e
+
+# update-grub helper script.
+# Copyright (C) 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/>.
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+. ${libdir}/grub/update-grub_lib
+
+case "`uname 2>/dev/null`" in
+  CYGWIN*)  ;;
+  *) exit 0 ;;
+esac
+
+# Try C: even if current system is on other partition.
+case "$SYSTEMDRIVE" in
+  [Cc]:)     dirlist="C:"              ;;
+  [D-Zd-z]:) dirlist="C: $SYSTEMDRIVE" ;;
+  *) exit 0 ;;
+esac
+
+get_os_name_from_boot_ini ()
+{
+  # Fail if no or more than one partition.
+  test "`sed -n 's,^\(\(multi\|scsi\)[^=]*\)=.*$,\1,p' "$1" 2>/dev/null | \
+    sort | uniq | wc -l`" = 1 || return 1
+
+  # Search 'default=PARTITION'
+  local part=`sed -n 's,^default=,,p' "$1" | sed 's,\\\\,/,g;s,[ \t\r]*$,,;1q'`
+  test -n "$part" || return 1
+
+  # Search 'PARTITION="NAME" ...'
+  local name=`sed -n 's,\\\\,/,g;s,^'"$part"'="\([^"]*\)".*$,\1,p' "$1" | sed 1q`
+  test -n "$name" || return 1
+
+  echo "$name"
+}
+
+
+for dir in $dirlist ; do
+
+  # Check for Vista bootmgr.
+  if [ -f "$dir"/bootmgr -a -f "$dir"/boot/bcd ] ; then
+    OS="Windows Vista bootmgr"
+
+  # Check for NTLDR.
+  elif [ -f "$dir"/ntldr -a -f "$dir"/ntdetect.com -a -f "$dir"/boot.ini ] ; then
+    OS=`get_os_name_from_boot_ini "$dir"/boot.ini` || OS="Windows NT/2000/XP loader"
+
+  else
+    continue
+  fi
+
+  # Get boot /dev/ice.
+  dev=`${grub_probe} -t device "$dir" 2>/dev/null` || continue
+
+  echo "Found $OS on $dir ($dev)" >&2
+  cat << EOF
+menuentry "$OS" {
+EOF
+
+  prepare_grub_to_access_device "$dev" | sed 's,^,\t,'
+
+  cat << EOF
+       chainloader +1
+}
+EOF
+done
+