From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1OGZ9e-0007Ht-SX for mharc-grub-devel@gnu.org; Mon, 24 May 2010 11:01:22 -0400 Received: from [140.186.70.92] (port=48825 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OGZ9Y-0007HP-Jy for grub-devel@gnu.org; Mon, 24 May 2010 11:01:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OGZ9S-0006IU-FS for grub-devel@gnu.org; Mon, 24 May 2010 11:01:16 -0400 Received: from mail-ww0-f41.google.com ([74.125.82.41]:38716) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OGZ9R-0006IN-W1 for grub-devel@gnu.org; Mon, 24 May 2010 11:01:10 -0400 Received: by wwi14 with SMTP id 14so2665336wwi.0 for ; Mon, 24 May 2010 08:01:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:subject:content-type; bh=eK6INDZ0AeNzQ/3nvFFOCy3YVlZeIKSfHWPiuy8XV5k=; b=IjkRfhLTFa0qKImXRtbtMLDA+mSUsfPC1eil1TjRNqvSOrl74eN8UgeJnalWe0r0E9 ZG1nIFYd0m0ilAe92Jh/mH8bskkOMRbf8WijlSj0sCeOfRDHfHQmEi8ir9ZgqpqVDywX fgDH59MYJGjqnjE3O2SgMiOrZzFX8O2Zntmvk= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject :content-type; b=q8hMioNsHveLtSl5zH75n9WIhAI944KwTA5ibfrmYOIsfudDQl+IdhJho6nwWGW2rd XvE0kBU3P4PfsiYI/i5NEravkAGNRV7RpxfnAxw99zD+jUXHnApbThuOD8FFl7/qZZjq 6BbT8b50NzYvM/a7ZAVylsz0aEP/w+2BSmlR8= Received: by 10.227.136.10 with SMTP id p10mr5558140wbt.7.1274713268953; Mon, 24 May 2010 08:01:08 -0700 (PDT) Received: from [192.168.1.50] (c2433-1-88-160-112-182.fbx.proxad.net [88.160.112.182]) by mx.google.com with ESMTPS id f8sm32108741wbe.17.2010.05.24.08.01.05 (version=TLSv1/SSLv3 cipher=RC4-MD5); Mon, 24 May 2010 08:01:08 -0700 (PDT) Message-ID: <4BFA94A8.6030407@gmail.com> Date: Mon, 24 May 2010 17:00:56 +0200 From: =?ISO-8859-1?Q?Gr=E9goire_Sutre?= User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100411 Icedove/3.0.4 MIME-Version: 1.0 To: The development of GNU GRUB Content-Type: multipart/mixed; boundary="------------020701050707010008040504" X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) Subject: [Patch] File name transformations & grub-mkconfig --root-directory X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 24 May 2010 15:01:20 -0000 This is a multi-part message in MIME format. --------------020701050707010008040504 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit Hi, The attached patch fixes problems with file name transformations, which are partly broken in trunk. With this patch, several installations of grub can coexist with no conflict (at least they should), sharing however the same configuration directory (etc/grub.d). It also adds --root-directory support to grub-mkconfig, and makes grub-mkconfig_lib's prepare_grub_to_access_device load partmap modules. The main changes in the patch are: - configure defines three new variables, accounting for transformations: . pkgdatadir (${datadir}/grub) . pkglibrootdir (${libdir}/grub) . defaultbootdir (/boot/grub, or /grub if OS is NetBSD or OpenBSD) - these variables are used in Makefile and in util/... scripts - output of --help and of --version in scripts uses `basename $0` and the same format as the one in binaries. - in Makefile, the help2man, .info, and .mo rules also account for file name transformations. - grub-mkconfig exports GRUB_DIR, which is used by grub-mkconfig_lib and by 00_header. - prepare_grub_to_access_device also loads necessary part_* modules, which is required when e.g. only part_msdos is included in core.img but the file to be accessed is in (hd0,msdos1,bsd5). The other changes are cosmetic (with no intended functional change). Note: this patch also contains my small Unifont search patch previously sent to the list. Grégoire p.s. This corresponds to my branch gsutre/fixes, where the modifications are split into small commits. --------------020701050707010008040504 Content-Type: text/x-patch; name="file-name-trans.diff" Content-Transfer-Encoding: 8bit Content-Disposition: attachment; filename="file-name-trans.diff" === added file 'ChangeLog.fixes' --- ChangeLog.fixes 1970-01-01 00:00:00 +0000 +++ ChangeLog.fixes 2010-05-23 14:40:00 +0000 @@ -0,0 +1,69 @@ +2010-05-23 GrĂ©goire Sutre + + * util/grub-install.in: Save the basename of $0 in $self, and use the + latter in informational messages. Use the same format for --version + as the binary programs. + * util/grub-mkconfig.in: Likewise. + * util/grub-mkrescue.in: Likewise. + * util/grub-reboot.in: Likewise. + * util/grub-set-default.in: Likewise. + * util/i386/efi/grub-install.in: Likewise. + * util/ieee1275/grub-install.in: Likewise. + * util/powerpc/ieee1275/grub-mkrescue.in: Likewise. + +2010-05-22 GrĂ©goire Sutre + + * configure.ac: Add `.' to the directories searched for unifont. + * util/grub-mkconfig_lib.in (prepare_grub_to_access_device): Load + partmap modules. + * util/grub.d/00_header.in: Extra sanity checks for locale support. + * util/grub.d/10_netbsd.in: Added a comment. + +2010-05-22 GrĂ©goire Sutre + + * Makefile.in: apply file name transformation to .mo files. + * util/grub-install.in: Likewise. + * util/i386/efi/grub-install.in: Likewise. + +2010-05-21 GrĂ©goire Sutre + + * util/grub-install.in: Remove the dependency on grub-mkconfig_lib. + * util/grub-mkconfig.in: New option --root-directory=DIR. + (GRUB_DIR): Export new variable. + * util/grub-mkconfig_lib.in: Let grub-probe use ${GRUB_DIR}/device.map. + * util/grub.d/00_header.in: Use GRUB_DIR passed by grub-mkconfig. + +2010-05-21 GrĂ©goire Sutre + + * Makefile.in: Apply program name transformation to generated info file. + +2010-05-21 GrĂ©goire Sutre + + * configure.ac: Set and subsitute pkgdatadir, pkglibrootdir and + defaultbootdir. + * Makefile.in: Use pkgdatadir, pkglibrootdir and defaultbootdir. + * util/grub-install.in: Likewise. + * util/grub-mkconfig.in: Likewise. + * util/grub-mkconfig_lib.in: Likewise. + * util/grub-mkrescue.in: Likewise. + * util/grub-reboot.in: Likewise. + * util/grub-set-default.in: Likewise. + * util/grub.d/00_header.in: Likewise. + * util/grub.d/10_hurd.in: Likewise. + * util/grub.d/10_kfreebsd.in: Likewise. + * util/grub.d/10_linux.in: Likewise. + * util/grub.d/10_netbsd.in: Likewise. + * util/grub.d/10_windows.in: Likewise. + * util/grub.d/30_os-prober.in: Likewise. + * util/i386/efi/grub-install.in: Likewise. + * util/ieee1275/grub-install.in: Likewise. + * util/powerpc/ieee1275/grub-mkrescue.in: Likewise. + * util/update-grub_lib.in: Likewise. + +2010-05-19 GrĂ©goire Sutre + + * Makefile.in: Use installed files on help2man command line. + * util/grub-mkimage.c (main): Use `program_name' instead of + hardcoded string. + * util/i386/pc/grub-setup.c (main): Likewise. + * util/sparc64/ieee1275/grub-setup.c (parse_options): Likewise. === modified file 'Makefile.in' --- Makefile.in 2010-05-18 11:55:26 +0000 +++ Makefile.in 2010-05-22 00:31:13 +0000 @@ -39,8 +39,9 @@ localedir = @localedir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ -pkgdatadir = $(datadir)/`echo @PACKAGE_TARNAME@ | sed '$(transform)'` -pkglibdir = $(libdir)/`echo @PACKAGE_TARNAME@/$(target_cpu)-$(platform) | sed '$(transform)'` +pkgdatadir = @pkgdatadir@ +pkglibrootdir = @pkglibrootdir@ +pkglibdir = $(pkglibrootdir)/$(target_cpu)-$(platform) # Internationalization library. LIBINTL = @LIBINTL@ @@ -90,7 +91,7 @@ GNULIB_CFLAGS = $(GNULIB_UTIL_CFLAGS) $( ASFLAGS = @ASFLAGS@ LDFLAGS = @LDFLAGS@ $(LIBS) CPPFLAGS = @CPPFLAGS@ -I$(builddir) -I$(builddir)/include -I$(srcdir)/gnulib -I$(srcdir)/include -Wall -W \ - -DGRUB_PKGLIBROOTDIR=\"$(libdir)/`echo @PACKAGE_TARNAME@ | sed '$(transform)'`\" -DLOCALEDIR=\"$(localedir)\" + -DGRUB_PKGLIBROOTDIR=\"$(pkglibrootdir)\" -DLOCALEDIR=\"$(localedir)\" TARGET_CC = @TARGET_CC@ TARGET_CFLAGS = -ffreestanding @TARGET_CFLAGS@ TARGET_ASFLAGS = -nostdinc -fno-builtin @TARGET_ASFLAGS@ @@ -323,26 +324,26 @@ install-local: all if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ $(INSTALL_PROGRAM) $$dir$$file $(DESTDIR)$(bindir)/$$dest; \ - $(HELP2MAN) --section=1 -o $(DESTDIR)$(mandir)/man1/$$dest.1 $(builddir)/$$file; \ + $(HELP2MAN) --section=1 -o $(DESTDIR)$(mandir)/man1/$$dest.1 $(DESTDIR)$(bindir)/$$dest; \ done $(SHELL) $(mkinstalldirs) $(DESTDIR)$(sbindir) $(DESTDIR)$(mandir)/man8 @list='$(sbin_UTILITIES)'; for file in $$list; do \ if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ $(INSTALL_PROGRAM) $$dir$$file $(DESTDIR)$(sbindir)/$$dest; \ - $(HELP2MAN) --section=8 -o $(DESTDIR)$(mandir)/man8/$$dest.8 $(builddir)/$$file; \ + $(HELP2MAN) --section=8 -o $(DESTDIR)$(mandir)/man8/$$dest.8 $(DESTDIR)$(sbindir)/$$dest; \ done @list='$(bin_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)$(bindir)/$$dest; \ - $(HELP2MAN) --section=1 -o $(DESTDIR)$(mandir)/man1/$$dest.1 $(builddir)/$$file; \ + $(HELP2MAN) --section=1 -o $(DESTDIR)$(mandir)/man1/$$dest.1 $(DESTDIR)$(bindir)/$$dest; \ done @list='$(sbin_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)$(sbindir)/$$dest; \ - $(HELP2MAN) --section=8 -o $(DESTDIR)$(mandir)/man8/$$dest.8 $(builddir)/$$file; \ + $(HELP2MAN) --section=8 -o $(DESTDIR)$(mandir)/man8/$$dest.8 $(DESTDIR)$(sbindir)/$$dest; \ done $(SHELL) $(mkinstalldirs) $(DESTDIR)$(sysconfdir)/grub.d @list='$(grub-mkconfig_SCRIPTS)'; for file in $$list; do \ @@ -355,26 +356,27 @@ install-local: all dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ $(INSTALL_DATA) $$dir$$file $(DESTDIR)$(sysconfdir)/grub.d/$$dest; \ done - $(SHELL) $(mkinstalldirs) $(DESTDIR)$(libdir)/grub + $(SHELL) $(mkinstalldirs) $(DESTDIR)$(pkglibrootdir) @list='$(lib_SCRIPTS)'; \ for file in $$list; do \ if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ dest="`echo $$file | sed 's,.*/,,'`"; \ - $(INSTALL_DATA) $$dir$$file $(DESTDIR)$(libdir)/grub/$$dest; \ + $(INSTALL_DATA) $$dir$$file $(DESTDIR)$(pkglibrootdir)/$$dest; \ done @langs='$(LINGUAS)'; \ for lang in $$langs; do \ - $(SHELL) $(mkinstalldirs) $(DESTDIR)/$(datadir)/locale/$$lang/LC_MESSAGES; \ + $(SHELL) $(mkinstalldirs) $(DESTDIR)$(datadir)/locale/$$lang/LC_MESSAGES; \ file="po/$$lang.mo"; \ if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ - $(INSTALL_DATA) $$dir$$file $(DESTDIR)/$(datadir)/locale/$$lang/LC_MESSAGES/$(PACKAGE).mo; \ + dest="`echo $(PACKAGE).mo | sed 's,.*/,,' | sed '$(transform)'`"; \ + $(INSTALL_DATA) $$dir$$file $(DESTDIR)$(datadir)/locale/$$lang/LC_MESSAGES/$$dest; \ done $(SHELL) $(mkinstalldirs) $(DESTDIR)$(infodir) @list='$(info_INFOS)'; \ for file in $$list; do \ if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ - dest="`echo $$file | sed 's,.*/,,'`"; \ - $(INSTALL_DATA) $$dir$$file $(DESTDIR)$(infodir); \ + dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ + $(INSTALL_DATA) $$dir$$file $(DESTDIR)$(infodir)/$$dest; \ if (install-info --version && \ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$dest" || :; \ @@ -412,11 +414,11 @@ uninstall: @list='$(lib_SCRIPTS)'; \ for file in $$list; do \ dest="`echo $$file | sed 's,.*/,,'`"; \ - rm -f $(DESTDIR)$(libdir)/grub/$$dest; \ + rm -f $(DESTDIR)$(pkglibrootdir)/$$dest; \ done @list='$(info_INFOS)'; \ for file in $$list; do \ - dest="`echo $$file | sed 's,.*/,,'`"; \ + dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ if (install-info --version && \ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$dest"; then \ === modified file 'configure.ac' --- configure.ac 2010-05-18 11:33:35 +0000 +++ configure.ac 2010-05-22 14:16:39 +0000 @@ -179,11 +179,13 @@ if test "x$YACC" = x; then AC_MSG_ERROR([bison is not found]) fi -for file in /usr/src/unifont.bdf /usr/share/fonts/X11/misc/unifont.pcf.gz /usr/share/fonts/unifont/unifont.pcf.gz; do - if test -e $file ; then - AC_SUBST([FONT_SOURCE], [$file]) - break - fi +for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do + for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/unifont; do + if test -f "$dir/unifont.$ext"; then + AC_SUBST([FONT_SOURCE], [$dir/unifont.$ext]) + break 2 + fi + done done AC_PROG_INSTALL @@ -798,6 +800,27 @@ fi AC_SUBST(ASFLAGS) +# Additional names and paths to be substituted in makefiles and scripts. +pkgdatadir=${datadir}/`echo ${PACKAGE_TARNAME} | sed "${program_transform_name}"` +pkglibrootdir=${libdir}/`echo ${PACKAGE_TARNAME} | sed "${program_transform_name}"` + +case "$host_os" in +netbsd* | openbsd*) + # Because /boot is used for the boot block in NetBSD and OpenBSD, use /grub + # instead of /boot/grub. + defaultbootdir= + ;; +*) + # Use /boot/grub by default. + defaultbootdir=/boot + ;; +esac +defaultbootdir=${defaultbootdir}/`echo ${PACKAGE_TARNAME} | sed "${program_transform_name}"` + +AC_SUBST([pkgdatadir]) +AC_SUBST([pkglibrootdir]) +AC_SUBST([defaultbootdir]) + # Output files. grub_CHECK_LINK_DIR if test x"$link_dir" = xyes ; then === added directory 'util/elf' === modified file 'util/grub-install.in' --- util/grub-install.in 2010-05-18 11:45:25 +0000 +++ util/grub-install.in 2010-05-24 13:58:09 +0000 @@ -24,23 +24,28 @@ exec_prefix=@exec_prefix@ sbindir=@sbindir@ bindir=@bindir@ libdir=@libdir@ +PACKAGE=@PACKAGE@ PACKAGE_NAME=@PACKAGE_NAME@ PACKAGE_TARNAME=@PACKAGE_TARNAME@ PACKAGE_VERSION=@PACKAGE_VERSION@ target_cpu=@target_cpu@ platform=@platform@ -host_os=@host_os@ font=@datadir@/@PACKAGE_TARNAME@/ascii.pf2 -pkglibdir=${libdir}/`echo ${PACKAGE_TARNAME}/${target_cpu}-${platform} | sed ${transform}` +pkglibrootdir=@pkglibrootdir@ +pkglibdir=${pkglibrootdir}/${target_cpu}-${platform} localedir=@datadir@/locale +defaultbootdir=@defaultbootdir@ + +self=`basename $0` grub_setup=${sbindir}/`echo grub-setup | sed ${transform}` grub_mkimage=${bindir}/`echo grub-mkimage | sed ${transform}` grub_mkdevicemap=${sbindir}/`echo grub-mkdevicemap | sed ${transform}` +grub_mkrelpath=${bindir}/`echo grub-mkrelpath | sed ${transform}` grub_probe=${sbindir}/`echo grub-probe | sed ${transform}` grub_editenv=${bindir}/`echo grub-editenv | sed ${transform}` +grub_mofile=`echo ${PACKAGE}.mo | sed ${transform}` rootdir= -grub_prefix=`echo /boot/grub | sed ${transform}` modules= install_device= @@ -61,7 +66,7 @@ fi # Print the usage. usage () { cat <. EOF @@ -108,7 +111,7 @@ for option in "$@"; do usage exit 0 ;; -v | --version) - echo "grub-install (GNU GRUB ${PACKAGE_VERSION})" + echo "$self (${PACKAGE_NAME}) ${PACKAGE_VERSION}" exit 0 ;; --modules=*) modules=`echo "$option" | sed 's/--modules=//'` ;; @@ -152,9 +155,6 @@ for option in "$@"; do esac done -# for make_system_path_relative_to_its_root() -. ${libdir}/grub/grub-mkconfig_lib - if test "x$install_device" = x && test "${target_cpu}-${platform}" != "mips-yeeloong"; then echo "install_device not specified." 1>&2 usage @@ -169,20 +169,7 @@ if test $debug = yes; then fi # Initialize these directories here, since ROOTDIR was initialized. -case "$host_os" in -netbsd* | openbsd*) - # Because /boot is used for the boot block in NetBSD and OpenBSD, use /grub - # instead of /boot/grub. - grub_prefix=`echo /grub | sed ${transform}` - bootdir=${rootdir} - ;; -*) - # Use /boot/grub by default. - bootdir=${rootdir}/boot - ;; -esac - -grubdir=${bootdir}/`echo grub | sed ${transform}` +grubdir=${rootdir}${defaultbootdir} device_map=${grubdir}/device.map grub_probe="${grub_probe} --device-map=${device_map}" @@ -190,7 +177,7 @@ grub_probe="${grub_probe} --device-map=$ # Check if GRUB is installed. if [ "${target_cpu}-${platform}" = "i386-pc" ] || [ "${target_cpu}-${platform}" = "sparc64-ieee1275" ] ; then set $grub_setup dummy - if test -f "$1"; then + if test -x "$1"; then : else echo "$1: Not found." 1>&2 @@ -198,21 +185,15 @@ if [ "${target_cpu}-${platform}" = "i386 fi fi -set $grub_mkimage dummy -if test -f "$1"; then - : -else - echo "$1: Not found." 1>&2 - exit 1 -fi - -set $grub_mkdevicemap dummy -if test -f "$1"; then - : -else - echo "$1: Not found." 1>&2 - exit 1 -fi +for prog in mkimage mkdevicemap mkrelpath probe; do + eval set \$grub_$prog dummy + if test -x "$1"; then + : + else + echo "$1: Not found." 1>&2 + exit 1 + fi +done # Create the GRUB directory if it is not present. mkdir -p "$grubdir" || exit 1 @@ -260,8 +241,8 @@ fi # Copy gettext files mkdir -p ${grubdir}/locale/ for dir in ${localedir}/*; do - if test -f "$dir/LC_MESSAGES/grub.mo"; then - cp -f "$dir/LC_MESSAGES/grub.mo" "${grubdir}/locale/${dir##*/}.mo" + if test -f "$dir/LC_MESSAGES/${grub_mofile}"; then + cp -f "$dir/LC_MESSAGES/${grub_mofile}" "${grubdir}/locale/${dir##*/}.mo" fi done @@ -295,7 +276,7 @@ devabstraction_module=`$grub_probe --tar modules="$modules $disk_module" modules="$modules $fs_module $partmap_module $devabstraction_module" -relative_grubdir=`make_system_path_relative_to_its_root ${grubdir}` || exit 1 +relative_grubdir=`$grub_mkrelpath ${grubdir}` || exit 1 if [ "x${relative_grubdir}" = "x" ] ; then relative_grubdir=/ fi @@ -356,8 +337,10 @@ if [ "${target_cpu}-${platform}" = "i386 $grub_setup ${setup_verbose} ${setup_force} --directory=${grubdir} --device-map=${device_map} \ ${install_device} || exit 1 elif [ "${target_cpu}-${platform}" = "mips-yeeloong" ] ; then + # XXX hard-coded /boot (use ${grubdir} or ${defaultbootdir} ?) $grub_mkimage ${config_opt} -f ${font} -d ${pkglibdir} -O ${mkimage_target} --output=/boot/grub.elf --prefix=${prefix_drive}${relative_grubdir} $modules || exit 1 else + # XXX hard-coded /boot (use ${grubdir} or ${defaultbootdir} ?) $grub_mkimage -O ${mkimage_target} ${config_opt} -d ${pkglibdir} --output=/boot/multiboot.img --prefix=${prefix_drive}${relative_grubdir} $modules || exit 1 fi === modified file 'util/grub-mkconfig.in' --- util/grub-mkconfig.in 2010-05-23 12:11:11 +0000 +++ util/grub-mkconfig.in 2010-05-24 13:58:00 +0000 @@ -23,27 +23,34 @@ exec_prefix=@exec_prefix@ sbindir=@sbindir@ libdir=@libdir@ sysconfdir=@sysconfdir@ -package_version=@PACKAGE_VERSION@ -host_os=@host_os@ +PACKAGE_NAME=@PACKAGE_NAME@ +PACKAGE_VERSION=@PACKAGE_VERSION@ datarootdir=@datarootdir@ datadir=@datadir@ -pkgdatadir=${datadir}/`echo @PACKAGE_TARNAME@ | sed "${transform}"` +pkgdatadir=@pkgdatadir@ +pkglibrootdir=@pkglibrootdir@ +defaultbootdir=@defaultbootdir@ grub_cfg="" grub_mkconfig_dir=${sysconfdir}/grub.d +self=`basename $0` + grub_mkdevicemap=${sbindir}/`echo grub-mkdevicemap | sed ${transform}` grub_probe=${sbindir}/`echo grub-probe | sed ${transform}` +rootdir= # Usage: usage # Print the usage. usage () { cat <. EOF @@ -62,8 +69,10 @@ for option in "$@"; do usage exit 0 ;; -v | --version) - echo "$0 (GNU GRUB ${package_version})" + echo "$self (${PACKAGE_NAME}) ${PACKAGE_VERSION}" exit 0 ;; + --root-directory=*) + rootdir=`echo "$option" | sed 's/--root-directory=//'` ;; -o) next_grub_cfg=: ;; @@ -83,19 +92,28 @@ if $next_grub_cfg; then exit 1 fi -. ${libdir}/grub/grub-mkconfig_lib +# Check if GRUB is installed. +for prog in mkdevicemap probe; do + eval set \$grub_$prog dummy + if test -x "$1"; then + : + else + echo "$1: Not found." 1>&2 + exit 1 + fi +done + +GRUB_DIR=${rootdir}${defaultbootdir} -case "$host_os" in -netbsd* | openbsd*) - # Because /boot is used for the boot block in NetBSD and OpenBSD, use /grub - # instead of /boot/grub. - grub_prefix=`echo /grub | sed ${transform}` - ;; -*) - # Use /boot/grub by default. - grub_prefix=`echo /boot/grub | sed ${transform}` - ;; -esac +# Create the GRUB directory if it is not present. +mkdir -p ${GRUB_DIR} || exit 1 + +# This must be done before sourcing grub-mkconfig_lib. +if test -e ${GRUB_DIR}/device.map ; then : ; else + ${grub_mkdevicemap} --device-map=${GRUB_DIR}/device.map +fi + +. ${pkglibrootdir}/grub-mkconfig_lib if [ "x$EUID" = "x" ] ; then EUID=`id -u` @@ -113,33 +131,11 @@ if [ "$EUID" != 0 ] ; then done ;; esac if [ $root != t ] ; then - echo "$0: You must run this as root" >&2 + echo "$self: You must run this as root" >&2 exit 1 fi fi -set $grub_mkdevicemap dummy -if test -f "$1"; then - : -else - echo "$1: Not found." 1>&2 - exit 1 -fi - -set $grub_probe dummy -if test -f "$1"; then - : -else - echo "$1: Not found." 1>&2 - exit 1 -fi - -mkdir -p ${grub_prefix} - -if test -e ${grub_prefix}/device.map ; then : ; else - ${grub_mkdevicemap} -fi - # Device containing our userland. Typically used for root= parameter. GRUB_DEVICE="`${grub_probe} --target=device /`" GRUB_DEVICE_UUID="`${grub_probe} --device ${GRUB_DEVICE} --target=fs_uuid 2> /dev/null`" || true @@ -171,7 +167,7 @@ fi for x in ${GRUB_TERMINAL_OUTPUT}; do if [ "x${x}" = "xgfxterm" ]; then # If this platform supports gfxterm, try to use it. - if ! test -e ${grub_prefix}/gfxterm.mod ; then + if ! test -e ${GRUB_DIR}/gfxterm.mod ; then if [ "x$termoutdefault" != "x1" ]; then echo "gfxterm isn't available on your platform" >&2 ; exit 1 fi @@ -180,7 +176,7 @@ for x in ${GRUB_TERMINAL_OUTPUT}; do fi # FIXME: this should do something smarter than just loading first # video backend. - GRUB_VIDEO_BACKEND=$(head -n 1 ${grub_prefix}/video.lst || true) + GRUB_VIDEO_BACKEND=$(head -n 1 ${GRUB_DIR}/video.lst || true) if [ -z "${GRUB_VIDEO_BACKEND}" ] ; then if [ "x$termoutdefault" != "x1" ]; then echo "No suitable backend could be found for gfxterm." >&2 ; exit 1 @@ -195,7 +191,7 @@ for x in ${GRUB_TERMINAL_OUTPUT}; do exit 1 fi else - for dir in ${pkgdatadir} /boot/grub /usr/share/grub ; do + for dir in ${GRUB_DIR} ${pkgdatadir} /boot/grub /usr/share/grub ; do for basename in unicode unifont ascii; do path="${dir}/${basename}.pf2" if is_path_readable_by_grub ${path} > /dev/null ; then @@ -236,6 +232,7 @@ export GRUB_DEVICE \ GRUB_DEVICE_UUID \ GRUB_DEVICE_BOOT \ GRUB_DEVICE_BOOT_UUID \ + GRUB_DIR \ GRUB_FS \ GRUB_FONT_PATH \ GRUB_PRELOAD_MODULES \ @@ -278,13 +275,13 @@ if test "x${grub_cfg}" != "x"; then chmod 400 ${grub_cfg}.new || grub_warn "Could not make ${grub_cfg}.new readable by only root.\ This means that if the generated config contains a password it is readable by everyone" fi -echo "Generating grub.cfg ..." >&2 +echo "Generating grub configuration ..." >&2 cat << EOF # # DO NOT EDIT THIS FILE # -# It is automatically generated by $0 using templates +# It is automatically generated by $self using templates # from ${grub_mkconfig_dir} and settings from ${sysconfdir}/default/grub # EOF === modified file 'util/grub-mkconfig_lib.in' --- util/grub-mkconfig_lib.in 2010-05-01 19:39:32 +0000 +++ util/grub-mkconfig_lib.in 2010-05-22 23:16:57 +0000 @@ -22,7 +22,7 @@ datarootdir=@datarootdir@ datadir=@datadir@ bindir=@bindir@ sbindir=@sbindir@ -pkgdatadir=${datadir}/`echo @PACKAGE_TARNAME@ | sed "${transform}"` +pkgdatadir=@pkgdatadir@ if test "x$grub_probe" = x; then grub_probe=${sbindir}/`echo grub-probe | sed ${transform}` @@ -31,6 +31,13 @@ if test "x$grub_mkrelpath" = x; then grub_mkrelpath=${bindir}/`echo grub-mkrelpath | sed ${transform}` fi +# GRUB_DIR should be set before sourcing this file, but let's be safe. +if test "x${GRUB_DIR}" != "x"; then + if test -e "${GRUB_DIR}/device.map"; then + grub_probe="${grub_probe} --device-map=${GRUB_DIR}/device.map" + fi +fi + if $(which gettext >/dev/null 2>/dev/null) ; then gettext="gettext" else @@ -105,6 +112,11 @@ prepare_grub_to_access_device () echo "insmod ${module}" done + partmap="`${grub_probe} --device ${device} --target=partmap`" + for module in ${partmap} ; do + echo "insmod part_${module}" + done + fs="`${grub_probe} --device ${device} --target=fs`" for module in ${fs} ; do echo "insmod ${module}" === modified file 'util/grub-mkimage.c' --- util/grub-mkimage.c 2010-05-18 11:55:26 +0000 +++ util/grub-mkimage.c 2010-05-19 21:06:18 +0000 @@ -1307,7 +1307,7 @@ main (int argc, char *argv[]) break; case 'V': - printf ("grub-mkimage (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION); + printf ("%s (%s) %s\n", program_name, PACKAGE_NAME, PACKAGE_VERSION); return 0; case 'v': === modified file 'util/grub-mkrescue.in' --- util/grub-mkrescue.in 2010-05-18 12:21:15 +0000 +++ util/grub-mkrescue.in 2010-05-24 12:03:08 +0000 @@ -28,14 +28,17 @@ PACKAGE_TARNAME=@PACKAGE_TARNAME@ PACKAGE_VERSION=@PACKAGE_VERSION@ target_cpu=@target_cpu@ native_platform=@platform@ +pkglibrootdir=@pkglibrootdir@ pkglib_DATA="@pkglib_DATA@" -multiboot_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/i386-multiboot -coreboot_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/i386-coreboot -qemu_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/i386-qemu -pc_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/i386-pc -efi32_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/i386-efi -efi64_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/x86_64-efi +self=`basename $0` + +multiboot_dir=${pkglibrootdir}/i386-multiboot +coreboot_dir=${pkglibrootdir}/i386-coreboot +qemu_dir=${pkglibrootdir}/i386-qemu +pc_dir=${pkglibrootdir}/i386-pc +efi32_dir=${pkglibrootdir}/i386-efi +efi64_dir=${pkglibrootdir}/x86_64-efi rom_directory= grub_mkimage=${bindir}/`echo grub-mkimage | sed ${transform}` @@ -43,7 +46,7 @@ grub_mkimage=${bindir}/`echo grub-mkimag # Print the usage. usage () { cat <. EOF @@ -66,7 +69,7 @@ for option in "$@"; do usage exit 0 ;; -v | --version) - echo "$0 (GNU GRUB ${PACKAGE_VERSION})" + echo "$self (${PACKAGE_NAME}) ${PACKAGE_VERSION}" exit 0 ;; --modules=*) modules=`echo "$option" | sed 's/--modules=//'` ;; @@ -99,7 +102,7 @@ if [ "x${output_image}" = x ] ; then fi set $grub_mkimage dummy -if test -f "$1"; then +if test -x "$1"; then : else echo "$1: Not found." 1>&2 === modified file 'util/grub-reboot.in' --- util/grub-reboot.in 2010-01-05 11:16:42 +0000 +++ util/grub-reboot.in 2010-05-23 14:36:37 +0000 @@ -22,6 +22,11 @@ transform="@program_transform_name@" prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ +PACKAGE_NAME=@PACKAGE_NAME@ +PACKAGE_VERSION=@PACKAGE_VERSION@ +defaultbootdir=@defaultbootdir@ + +self=`basename $0` grub_editenv=${bindir}/`echo grub-editenv | sed ${transform}` rootdir= @@ -30,7 +35,7 @@ rootdir= # Print the usage. usage () { cat <&2 ; exit 1 fi @@ -195,7 +195,7 @@ EOF esac # Gettext variables and module -if [ "x${LANG}" != "xC" ] ; then +if [ "x${LANG}" != "x" ] && [ "x${LANG}" != "xC" ] && [ -d "${locale_dir}" ] ; then prepare_grub_to_access_device $(${grub_probe} --target=device ${locale_dir}) cat << EOF set locale_dir=(\$root)$(make_system_path_relative_to_its_root ${locale_dir}) === modified file 'util/grub.d/10_hurd.in' --- util/grub.d/10_hurd.in 2010-05-18 18:10:37 +0000 +++ util/grub.d/10_hurd.in 2010-05-21 13:44:06 +0000 @@ -18,8 +18,9 @@ prefix=@prefix@ exec_prefix=@exec_prefix@ -libdir=@libdir@ -. ${libdir}/grub/grub-mkconfig_lib +pkglibrootdir=@pkglibrootdir@ + +. ${pkglibrootdir}/grub-mkconfig_lib CLASS="--class gnu --class os" === modified file 'util/grub.d/10_kfreebsd.in' --- util/grub.d/10_kfreebsd.in 2010-04-14 12:59:58 +0000 +++ util/grub.d/10_kfreebsd.in 2010-05-21 13:43:53 +0000 @@ -19,8 +19,9 @@ prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ -libdir=@libdir@ -. ${libdir}/grub/grub-mkconfig_lib +pkglibrootdir=@pkglibrootdir@ + +. ${pkglibrootdir}/grub-mkconfig_lib export TEXTDOMAIN=@PACKAGE@ export TEXTDOMAINDIR=@localedir@ === modified file 'util/grub.d/10_linux.in' --- util/grub.d/10_linux.in 2010-04-14 12:59:58 +0000 +++ util/grub.d/10_linux.in 2010-05-21 13:43:42 +0000 @@ -19,8 +19,9 @@ prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ -libdir=@libdir@ -. ${libdir}/grub/grub-mkconfig_lib +pkglibrootdir=@pkglibrootdir@ + +. ${pkglibrootdir}/grub-mkconfig_lib export TEXTDOMAIN=@PACKAGE@ export TEXTDOMAINDIR=@localedir@ === modified file 'util/grub.d/10_netbsd.in' --- util/grub.d/10_netbsd.in 2010-04-19 19:25:41 +0000 +++ util/grub.d/10_netbsd.in 2010-05-22 23:18:51 +0000 @@ -19,8 +19,9 @@ prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ -libdir=@libdir@ -. ${libdir}/grub/grub-mkconfig_lib +pkglibrootdir=@pkglibrootdir@ + +. ${pkglibrootdir}/grub-mkconfig_lib export TEXTDOMAIN=@PACKAGE@ export TEXTDOMAINDIR=@localedir@ @@ -61,6 +62,7 @@ netbsd_entry () printf "}\n" } +# Cache the sequence of commands to access / (whose device is ${GRUB_DEVICE}). prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE} | sed -e 's,^, ,')" # We look for NetBSD kernels in / but not in subdirectories. We simply === modified file 'util/grub.d/10_windows.in' --- util/grub.d/10_windows.in 2010-05-18 19:58:49 +0000 +++ util/grub.d/10_windows.in 2010-05-21 13:43:14 +0000 @@ -18,8 +18,9 @@ prefix=@prefix@ exec_prefix=@exec_prefix@ -libdir=@libdir@ -. ${libdir}/grub/grub-mkconfig_lib +pkglibrootdir=@pkglibrootdir@ + +. ${pkglibrootdir}/grub-mkconfig_lib case "`uname 2>/dev/null`" in CYGWIN*) ;; === modified file 'util/grub.d/30_os-prober.in' --- util/grub.d/30_os-prober.in 2010-02-03 00:24:07 +0000 +++ util/grub.d/30_os-prober.in 2010-05-23 13:42:20 +0000 @@ -18,9 +18,9 @@ prefix=@prefix@ exec_prefix=@exec_prefix@ -libdir=@libdir@ +pkglibrootdir=@pkglibrootdir@ -. ${libdir}/grub/grub-mkconfig_lib +. ${pkglibrootdir}/grub-mkconfig_lib if [ "x${GRUB_DISABLE_OS_PROBER}" = "xtrue" ]; then exit 0 === modified file 'util/i386/efi/grub-install.in' --- util/i386/efi/grub-install.in 2010-04-26 19:27:41 +0000 +++ util/i386/efi/grub-install.in 2010-05-23 14:34:05 +0000 @@ -24,21 +24,25 @@ exec_prefix=@exec_prefix@ sbindir=@sbindir@ bindir=@bindir@ libdir=@libdir@ +PACKAGE=@PACKAGE@ PACKAGE_NAME=@PACKAGE_NAME@ PACKAGE_TARNAME=@PACKAGE_TARNAME@ PACKAGE_VERSION=@PACKAGE_VERSION@ target_cpu=@target_cpu@ platform=@platform@ -host_os=@host_os@ -pkglibdir=${libdir}/`echo ${PACKAGE_TARNAME}/${target_cpu}-${platform} | sed ${transform}` +pkglibrootdir=@pkglibrootdir@ +pkglibdir=${pkglibrootdir}/${target_cpu}-${platform} localedir=@datadir@/locale +defaultbootdir=@defaultbootdir@ + +self=`basename $0` grub_mkimage=${bindir}/`echo grub-mkimage | sed ${transform}` grub_mkdevicemap=${sbindir}/`echo grub-mkdevicemap | sed ${transform}` grub_probe=${sbindir}/`echo grub-probe | sed ${transform}` grub_editenv=${bindir}/`echo grub-editenv | sed ${transform}` +grub_mofile=`echo ${PACKAGE}.mo | sed ${transform}` rootdir= -grub_prefix=`echo /boot/grub | sed ${transform}` modules= no_floppy= @@ -50,7 +54,7 @@ debug=no # Print the usage. usage () { cat <. @@ -78,7 +82,7 @@ for option in "$@"; do usage exit 0 ;; -v | --version) - echo "grub-install (GNU GRUB ${PACKAGE_VERSION})" + echo "$self (${PACKAGE_NAME}) ${PACKAGE_VERSION}" exit 0 ;; --modules=*) modules=`echo "$option" | sed 's/--modules=//'` ;; @@ -111,38 +115,19 @@ if test $debug = yes; then fi # Initialize these directories here, since ROOTDIR was initialized. -case "$host_os" in -netbsd* | openbsd*) - # Because /boot is used for the boot block in NetBSD and OpenBSD, use /grub - # instead of /boot/grub. - grub_prefix=`echo /grub | sed ${transform}` - bootdir=${rootdir} - ;; -*) - # Use /boot/grub by default. - bootdir=${rootdir}/boot - ;; -esac - -grubdir=${bootdir}/`echo grub | sed ${transform}` +grubdir=${rootdir}${defaultbootdir} device_map=${grubdir}/device.map # Check if GRUB is installed. -set $grub_mkimage dummy -if test -f "$1"; then - : -else - echo "$1: Not found." 1>&2 - exit 1 -fi - -set $grub_mkdevicemap dummy -if test -f "$1"; then - : -else - echo "$1: Not found." 1>&2 - exit 1 -fi +for prog in mkimage mkdevicemap probe; do + eval set \$grub_$prog dummy + if test -x "$1"; then + : + else + echo "$1: Not found." 1>&2 + exit 1 + fi +done # Create the GRUB directory if it is not present. mkdir -p "$grubdir" || exit 1 @@ -183,8 +168,8 @@ done # Copy gettext files mkdir -p ${grubdir}/locale/ for dir in ${localedir}/*; do - if test -f "$dir/LC_MESSAGES/grub.mo"; then - cp -f "$dir/LC_MESSAGES/grub.mo" "${grubdir}/locale/${dir##*/}.mo" + if test -f "$dir/LC_MESSAGES/${grub_mofile}"; then + cp -f "$dir/LC_MESSAGES/${grub_mofile}" "${grubdir}/locale/${dir##*/}.mo" fi done @@ -219,7 +204,7 @@ $grub_mkimage -O ${target_cpu}-efi --out echo "Installation finished. No error reported." echo "This is the contents of the device map $device_map." echo "Check if this is correct or not. If any of the lines is incorrect," -echo "fix it and re-run the script \`grub-install'." +echo "fix it and re-run the script \`$self'." echo cat $device_map === modified file 'util/i386/pc/grub-setup.c' --- util/i386/pc/grub-setup.c 2010-05-17 19:26:16 +0000 +++ util/i386/pc/grub-setup.c 2010-05-19 21:03:21 +0000 @@ -702,7 +702,7 @@ main (int argc, char *argv[]) break; case 'V': - printf ("grub-setup (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION); + printf ("%s (%s) %s\n", program_name, PACKAGE_NAME, PACKAGE_VERSION); return 0; case 'v': === modified file 'util/ieee1275/grub-install.in' --- util/ieee1275/grub-install.in 2010-04-26 19:27:41 +0000 +++ util/ieee1275/grub-install.in 2010-05-24 12:02:20 +0000 @@ -32,14 +32,17 @@ PACKAGE_TARNAME=@PACKAGE_TARNAME@ PACKAGE_VERSION=@PACKAGE_VERSION@ target_cpu=@target_cpu@ platform=@platform@ -pkglibdir=${libdir}/`echo ${PACKAGE_TARNAME}/${target_cpu}-${platform} | sed ${transform}` +pkglibrootdir=@pkglibrootdir@ +pkglibdir=${pkglibrootdir}/${target_cpu}-${platform} +defaultbootdir=@defaultbootdir@ + +self=`basename $0` grub_mkimage=${bindir}/`echo grub-mkimage | sed ${transform}` grub_mkdevicemap=${sbindir}/`echo grub-mkdevicemap | sed ${transform}` grub_probe=${sbindir}/`echo grub-probe | sed ${transform}` grub_editenv=${bindir}/`echo grub-editenv | sed ${transform}` rootdir= -grub_prefix=`echo /boot/grub | sed ${transform}` modules= install_device= @@ -53,7 +56,7 @@ nvsetenv=`which nvsetenv` # Print the usage. usage () { cat <&2 - exit 1 -fi +# Check if GRUB is installed. +for prog in mkimage mkdevicemap probe; do + eval set \$grub_$prog dummy + if test -x "$1"; then + : + else + echo "$1: Not found." 1>&2 + exit 1 + fi +done # Find the partition at the right mount point. install_device=`$grub_mkdevicemap --device-map=/dev/stdout | $grub_probe --target=device --device-map=/dev/stdin ${grubdir}` -if test "x$install_device" = "x`$grub_mkdevicemap --device-map=/dev/stdout | $grub_probe --target=device --device-map=/dev/stdin ${bootdir}`"; then +if test "x$install_device" = "x`$grub_mkdevicemap --device-map=/dev/stdout | $grub_probe --target=device --device-map=/dev/stdin ${grubdir}/..`"; then echo "$grubdir must be a mount point." exit 1 fi @@ -193,7 +198,7 @@ modules="$modules $fs_module $partmap_mo if test $update_nvram = yes; then set $ofpathname dummy - if test -f "$1"; then + if test -x "$1"; then : else echo "$1: Not found." 1>&2 @@ -201,7 +206,7 @@ if test $update_nvram = yes; then fi set $nvsetenv dummy - if test -f "$1"; then + if test -x "$1"; then : else echo "$1: Not found." 1>&2 @@ -231,7 +236,7 @@ fi echo "Installation finished. No error reported." echo "This is the contents of the device map $device_map." echo "Check if this is correct or not. If any of the lines is incorrect," -echo "fix it and re-run the script \`grub-install'." +echo "fix it and re-run the script \`$self'." echo cat $device_map === modified file 'util/powerpc/ieee1275/grub-mkrescue.in' --- util/powerpc/ieee1275/grub-mkrescue.in 2010-04-26 19:27:41 +0000 +++ util/powerpc/ieee1275/grub-mkrescue.in 2010-05-23 14:35:04 +0000 @@ -28,7 +28,10 @@ PACKAGE_TARNAME=@PACKAGE_TARNAME@ PACKAGE_VERSION=@PACKAGE_VERSION@ target_cpu=@target_cpu@ platform=@platform@ -pkglibdir=${libdir}/`echo ${PACKAGE_TARNAME}/${target_cpu}-${platform} | sed ${transform}` +pkglibrootdir=@pkglibrootdir@ +pkglibdir=${pkglibrootdir}/${target_cpu}-${platform} + +self=`basename $0` grub_mkimage=${bindir}/`echo grub-mkimage | sed ${transform}` @@ -36,7 +39,7 @@ grub_mkimage=${bindir}/`echo grub-mkimag # Print the usage. usage () { cat <