diff --git a/ChangeLog b/ChangeLog index c8795b5b5..c61fa00e9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-06-11 Robert Millan + + * util/i386/pc/grub-mkrescue.in: New file. + * conf/i386-pc.rmk: Add its build declarations. Put it in bin_SCRIPTS. + * Makefile.in: Handle bin_SCRIPTS. + 2007-06-10 Vesa Jaaskelainen * term/gfxterm.c (grub_gfxterm_init): Added support for specifying diff --git a/Makefile.in b/Makefile.in index 34c94b05c..352e52793 100644 --- a/Makefile.in +++ b/Makefile.in @@ -88,7 +88,7 @@ MKFILES = $(patsubst %.rmk,%.mk,$(RMKFILES)) DATA = $(pkgdata_IMAGES) $(pkgdata_MODULES) $(pkgdata_PROGRAMS) \ $(pkgdata_DATA) $(lib_DATA) PROGRAMS = $(bin_UTILITIES) $(sbin_UTILITIES) -SCRIPTS = $(sbin_SCRIPTS) $(update-grub_SCRIPTS) +SCRIPTS = $(bin_SCRIPTS) $(sbin_SCRIPTS) $(update-grub_SCRIPTS) CLEANFILES = MOSTLYCLEANFILES = @@ -149,6 +149,11 @@ install-local: all dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ $(INSTALL_PROGRAM) $$dir$$file $(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; \ + 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)'`"; \ @@ -182,7 +187,7 @@ uninstall: dest="`echo $$file | sed 's,.*/,,'`"; \ rm -f $(DESTDIR)$(pkglibdir)/$$dest; \ done - @list='$(bin_UTILITIES)'; for file in $$list; do \ + @list='$(bin_UTILITIES) $(bin_SCRIPTS)'; for file in $$list; do \ dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \ rm -f $(DESTDIR)$(bindir)/$$dest; \ done diff --git a/conf/i386-pc.mk b/conf/i386-pc.mk index c912c0225..ef4291158 100644 --- a/conf/i386-pc.mk +++ b/conf/i386-pc.mk @@ -804,6 +804,7 @@ grub_emu_LDFLAGS = $(LIBCURSES) # Scripts. sbin_SCRIPTS = grub-install +bin_SCRIPTS = grub-mkrescue # For grub-install. grub_install_SOURCES = util/i386/pc/grub-install.in @@ -814,6 +815,20 @@ grub-install: util/i386/pc/grub-install.in config.status chmod +x $@ +# For grub-mkrescue. +grub_mkrescue_SOURCES = util/i386/pc/grub-mkrescue.in +CLEANFILES += grub-mkrescue + +grub-mkrescue: util/i386/pc/grub-mkrescue.in config.status + ./config.status --file=grub-mkrescue:util/i386/pc/grub-mkrescue.in + chmod +x $@ + +CLEANFILES += grub-mkrescue + +grub-mkrescue: util/i386/pc/grub-mkrescue.in config.status + ./config.status --file=grub-mkrescue:util/i386/pc/grub-mkrescue.in + chmod +x $@ + # Modules. pkgdata_MODULES = _chain.mod _linux.mod linux.mod normal.mod \ _multiboot.mod chain.mod multiboot.mod reboot.mod halt.mod \ diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk index 136332f17..5854ff0ae 100644 --- a/conf/i386-pc.rmk +++ b/conf/i386-pc.rmk @@ -114,10 +114,19 @@ grub_emu_LDFLAGS = $(LIBCURSES) # Scripts. sbin_SCRIPTS = grub-install +bin_SCRIPTS = grub-mkrescue # For grub-install. grub_install_SOURCES = util/i386/pc/grub-install.in +# For grub-mkrescue. +grub_mkrescue_SOURCES = util/i386/pc/grub-mkrescue.in +CLEANFILES += grub-mkrescue + +grub-mkrescue: util/i386/pc/grub-mkrescue.in config.status + ./config.status --file=grub-mkrescue:util/i386/pc/grub-mkrescue.in + chmod +x $@ + # Modules. pkgdata_MODULES = _chain.mod _linux.mod linux.mod normal.mod \ _multiboot.mod chain.mod multiboot.mod reboot.mod halt.mod \ diff --git a/util/i386/pc/grub-mkrescue.in b/util/i386/pc/grub-mkrescue.in new file mode 100644 index 000000000..087819913 --- /dev/null +++ b/util/i386/pc/grub-mkrescue.in @@ -0,0 +1,119 @@ +#! /bin/sh + +# Make GRUB rescue image +# Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007 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. +transform="@program_transform_name@" + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +bindir=@bindir@ +libdir=@libdir@ +PACKAGE_NAME=@PACKAGE_NAME@ +PACKAGE_TARNAME=@PACKAGE_TARNAME@ +PACKAGE_VERSION=@PACKAGE_VERSION@ +target_cpu=@target_cpu@ +platform=@platform@ +pkglibdir=${libdir}/`echo ${PACKAGE_TARNAME}/${target_cpu}-${platform} | sed ${transform}` + +grub_mkimage=${bindir}/`echo grub-mkimage | sed ${transform}` + +# Usage: usage +# Print the usage. +usage () { + cat <. +EOF +} + +image_type=cdrom + +# 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=//'` ;; + --grub-mkimage=*) + grub_mkimage=`echo "$option" | sed 's/--grub-mkimage=//'` ;; + --image-type=*) + image_type=`echo "$option" | sed 's/--image-type=//'` + case "$image_type" in + floppy|cdrom) ;; + *) + echo "Unknown image type \`$image_type'" 1>&2 + exit 1 ;; + esac ;; + -*) + echo "Unrecognized option \`$option'" 1>&2 + usage + exit 1 + ;; + *) + if test "x$output_image" != x; then + echo "Unrecognized option \`$option'" 1>&2 + usage + exit 1 + fi + output_image="${option}" ;; + esac +done + +if [ "x${modules}" = "x" ] ; then + modules=`cd ${pkglibdir}/ && ls *.mod` +fi + +if [ "x${image_type}" = "xfloppy" ] ; then + floppy_image=${output_image} +else + floppy_image=`mktemp` +fi + +cp ${pkglibdir}/boot.img $floppy_image +core_img=`mktemp` +grub-mkimage -d ${pkglibdir}/ -o ${core_img} ${modules} +cat ${core_img} >> $floppy_image +rm -f ${core_img} + +if [ "x${image_type}" = "xfloppy" ] ; then + exit 0 +fi + +iso_dir=`mktemp -d` +cat ${floppy_image} /dev/zero | dd bs=1024 count=1440 > ${iso_dir}/floppy.img +genisoimage -b floppy.img -o ${output_image} -r ${iso_dir} +rm -rf ${iso_dir} + +rm -f ${floppy_image} + +exit 0