[packages/grub2] EFI support added

jajcus jajcus at pld-linux.org
Sat Oct 27 20:07:54 CEST 2012


commit 1536aaf2ef81965c6f99c0dcf508a3629451e402
Author: Jacek Konieczny <jajcus at jajcus.net>
Date:   Sat Oct 27 20:03:28 2012 +0200

    EFI support added
    
    BIOS is going to die…
    
    - grub-install.in.patch patch dropped:
      – no need for all this files on the /boot partition whenever the grub
        package is installed
      - /boot is populated by 'grub-install' as neccessary
      – we need separate directories for separate platforms
    – multiple platforms may be built from the spec at once
    – 'pc' and 'efi' subpackages added, each for one platform

 grub-install.in.patch |  39 ----------
 grub2.spec            | 198 ++++++++++++++++++++++++++++++++++----------------
 pld-mkconfigdir.patch |   2 +-
 3 files changed, 136 insertions(+), 103 deletions(-)
---
diff --git a/grub2.spec b/grub2.spec
index 740b681..9ece453 100644
--- a/grub2.spec
+++ b/grub2.spec
@@ -1,7 +1,4 @@
 # TODO
-# - grub-install: source_dir doesn't exist. Please specify --target or --directory
-# - multiple targets. This functionality is reaped by our patches,
-#   but is needed e.g. for reasonable EFI support
 # - reap out which in probe scripts and drop R: which
 # - subpackages? e.g. modules and utils
 # - check where is that locale path: /boot/grub/locale and fix it or change it
@@ -10,6 +7,9 @@
 #   - to build and install the `grub-emu' debugging utility we need to re-run build with --target=emu
 #   - put grub-emu to subpackage if it is fixed
 # - warning: Installed (but unpackaged) file(s) found:
+#   /sbin/grub-sparc64-setup
+#   /usr/share/man/man8/grub-sparc64-setup.8.gz
+
 #   /boot/grub/config.h
 #   /etc/bash_completion.d/grub
 #   /sbin/grub-sparc64-setup
@@ -18,8 +18,10 @@
 #   /sbin/grub-sparc64-setup
 #
 # Conditional build:
-%bcond_with		grubemu	# build grub-emu debugging utility
+%bcond_with	grubemu	# build grub-emu debugging utility
 %bcond_without	efiemu	# build efiemu runtimes
+%bcond_without	pc	# do not build for PC BIOS platform
+%bcond_without	efi	# do not build for EFI platform
 
 %if "%{cc_version}" < "3.4"
 # cc does not support:
@@ -32,6 +34,16 @@
 %undefine	with_efiemu
 %endif
 
+%ifarch %{ix86}
+%define		target_cpu i386
+%endif
+%ifarch %{x8664}
+%define		target_cpu x86_64
+%endif
+
+# the 'most natural' platform should go last
+%define		platforms %{?with_efi:efi} %{?with_pc:pc}
+
 Summary:	GRand Unified Bootloader
 Summary(de.UTF-8):	GRUB2 - ein Bootloader für x86 und ppc
 Summary(hu.UTF-8):	GRUB2 - rendszerbetöltő x86 és ppc gépekhez
@@ -53,14 +65,13 @@ Patch0:		pld-initrd.patch
 Patch1:		pld-sysconfdir.patch
 Patch2:		grub-garbage.patch
 Patch3:		grub-shelllib.patch
-Patch4:		grub-install.in.patch
-Patch5:		grub-lvmdevice.patch
-Patch6:		pld-mkconfigdir.patch
-Patch7:		grub-mkconfig-diagnostics.patch
-Patch8:		ppc.patch
-Patch9:		%{name}-awk.patch
-Patch10:	posix.patch
-Patch11:	%{name}-gets.patch
+Patch4:		grub-lvmdevice.patch
+Patch5:		pld-mkconfigdir.patch
+Patch6:		grub-mkconfig-diagnostics.patch
+Patch7:		ppc.patch
+Patch8:		%{name}-awk.patch
+Patch9:		posix.patch
+Patch10:	%{name}-gets.patch
 BuildRequires:	autoconf >= 2.53
 BuildRequires:	automake >= 1:1.11.1-1
 BuildRequires:	bison
@@ -89,13 +100,16 @@ Suggests:	cdrkit-mkisofs
 Suggests:	os-prober
 Provides:	bootloader
 Conflicts:	grub
+Suggests:	%{name}-pc
+Suggests:	%{name}-efi
 ExclusiveArch:	%{ix86} %{x8664} ppc sparc64
 BuildRoot:	%{tmpdir}/%{name}-%{version}-root-%(id -u -n)
 
 %define		_sbindir	/sbin
 %define		_bindir		%{_sbindir}
-%define		_libdir		/boot
+%define		_libdir		/lib
 %define		_libexecdir	%{_libdir}/grub
+%define		_grubdir	/boot/grub
 
 %description
 GRUB is a GPLed bootloader intended to unify bootloading across x86
@@ -196,6 +210,22 @@ This package provides bash-completion for GRUB.
 %description -n bash-completion-%{name} -l pl.UTF-8
 Pakiet ten dostarcza bashowe uzupełnianie nazw dla GRUB.
 
+%package pc
+Summary:	PC BIOS platform support for GRUB
+Group:		Base
+Requires:	%{name} = %{version}-%{release}
+
+%description pc
+PC BIOS platform support for GRUB.
+
+%package efi
+Summary:	(U)EFI platform support for GRUB
+Group:		Base
+Requires:	%{name} = %{version}-%{release}
+
+%description efi
+(U)EFI platform support for GRUB.
+
 %package mkfont
 Summary:	GRUB font files converter
 Group:		Base
@@ -216,7 +246,6 @@ Converts common font file formats into PF2.
 %patch8 -p1
 %patch9 -p1
 %patch10 -p1
-%patch11 -p1
 
 %if "%{cc_version}" < "3.4"
 grep -rl -- -Wno-missing-field-initializers . | xargs %{__sed} -i -e 's,-Wno-missing-field-initializers,,'
@@ -237,27 +266,38 @@ echo timestamp > stamp-h.in
 %{__autoconf}
 export CFLAGS="%{rpmcflags} -Os %{?debug:-g}"
 
-# mawk stalls at ./genmoddep.awk, so force gawk
-AWK=gawk \
-%configure \
-	--disable-werror \
-%if %{with grubemu}
-	--enable-grub-emu-usb \
-	--enable-grub-emu-sdl \
-	--enable-grub-emu-pci \
-%endif
-	--%{!?with_efiemu:dis}%{?with_efiemu:en}able-efiemu \
-	TARGET_LDFLAGS=-static
-
-%{__make}
+for platform in %{platforms} ; do
+	install -d build-%{target_cpu}-${platform}
+	cd build-%{target_cpu}-${platform}
+	ln -s ../configure .
+	# mawk stalls at ./genmoddep.awk, so force gawk
+	AWK=gawk \
+	%configure \
+		--with-platform=${platform} \
+		--disable-werror \
+	%if %{with grubemu}
+		--enable-grub-emu-usb \
+		--enable-grub-emu-sdl \
+		--enable-grub-emu-pci \
+	%endif
+		--%{!?with_efiemu:dis}%{?with_efiemu:en}able-efiemu \
+		TARGET_LDFLAGS=-static
+
+	%{__make}
+	cd ..
+done
 
 %install
 rm -rf $RPM_BUILD_ROOT
 
-%{__make} install \
-	pkgdatadir=%{_libexecdir} \
-	pkglibdir=%{_libexecdir} \
-	DESTDIR=$RPM_BUILD_ROOT
+for platform in %{platforms} ; do
+	cd build-%{target_cpu}-${platform}
+	%{__make} install \
+		pkgdatadir=%{_libexecdir} \
+		pkglibdir=%{_libexecdir} \
+		DESTDIR=$RPM_BUILD_ROOT
+	cd ..
+done
 
 # not in Th (?)
 %{__rm} -r $RPM_BUILD_ROOT%{_localedir}/de at hebrew
@@ -268,9 +308,11 @@ rm -rf $RPM_BUILD_ROOT
 # this must be after 'make install'
 install -d $RPM_BUILD_ROOT%{_libexecdir}/locale
 
-cp -p docs/grub.cfg $RPM_BUILD_ROOT%{_libexecdir}
+install -d $RPM_BUILD_ROOT%{_grubdir}
+cp -p docs/grub.cfg $RPM_BUILD_ROOT%{_grubdir}
+
 # grub.d/41_custom
-cp -p %{SOURCE4} $RPM_BUILD_ROOT%{_libexecdir}/custom.cfg
+cp -p %{SOURCE4} $RPM_BUILD_ROOT%{_grubdir}/custom.cfg
 %{__rm} $RPM_BUILD_ROOT/lib/grub.d/40_custom
 
 install -p %{SOURCE1} $RPM_BUILD_ROOT%{_sbindir}/update-grub
@@ -283,12 +325,12 @@ cp -p %{SOURCE3} $RPM_BUILD_ROOT/etc/sysconfig/grub
 rm -f $RPM_BUILD_ROOT%{_infodir}/dir
 
 # core.img - bootable image generated by grub-mkimage(1) via grub-install(1)
-touch $RPM_BUILD_ROOT%{_libexecdir}/core.img
-touch $RPM_BUILD_ROOT%{_libexecdir}/device.map
+touch $RPM_BUILD_ROOT%{_grubdir}/core.img
+touch $RPM_BUILD_ROOT%{_grubdir}/device.map
 
 # needs to be exactly 1KiB
 # but we're ghosting it. so whom are we kidding here? :P (maybe %config it in future?)
-dd bs=1024 if=/dev/zero count=1 of=$RPM_BUILD_ROOT%{_libexecdir}/grubenv
+dd bs=1024 if=/dev/zero count=1 of=$RPM_BUILD_ROOT%{_grubdir}/grubenv
 
 %clean
 rm -rf $RPM_BUILD_ROOT
@@ -311,8 +353,8 @@ echo "Grub was upgraded, trying to setup it to boot sector"
 %triggerpostun -- %{name} < 1.99-7.3
 # migrate /etc/grub.d/custom.cfg.rpmsave  -> /boot/grub/custom.cfg
 if [ -f %{_sysconfdir}/grub.d/custom.cfg.rpmsave ]; then
-	cp -f %{_libexecdir}/custom.cfg{,.rpmnew}
-	mv -f  %{_sysconfdir}/grub.d/custom.cfg.rpmsave %{_libexecdir}/custom.cfg
+	cp -f %{_grubdir}/custom.cfg{,.rpmnew}
+	mv -f  %{_sysconfdir}/grub.d/custom.cfg.rpmsave %{_grubdir}/custom.cfg
 fi
 
 %files -f grub.lang
@@ -370,37 +412,18 @@ fi
 %endif
 /lib/grub-mkconfig_lib
 
+%dir %{_grubdir}
 %dir %{_libexecdir}
 # XXX: check this locale dir location and if it is neccesaary to exist on /boot
 
 %dir %{_libexecdir}/locale
-%config(noreplace) %verify(not md5 mtime size) %{_libexecdir}/grub.cfg
-%config(noreplace) %verify(not md5 mtime size) %{_libexecdir}/custom.cfg
-%{_libexecdir}/modinfo.sh
-%{_libexecdir}/*.exec
-%{_libexecdir}/*.image
-%{_libexecdir}/*.lst
-%{_libexecdir}/*.mod
-%{_libexecdir}/*.module
-%{_libexecdir}/lzma_decompress.img
-%if %{with efiemu}
-%ifarch %{x8664}
-%{_libexecdir}/efiemu*.o
-%endif
-%endif
-%{_libexecdir}/kernel.img
-%ifarch %{ix86} %{x8664} sparc sparc64
-%{_libexecdir}/boot.img
-%{_libexecdir}/cdboot.img
-%{_libexecdir}/diskboot.img
-%{_libexecdir}/lnxboot.img
-%{_libexecdir}/pxeboot.img
-%endif
+%config(noreplace) %verify(not md5 mtime size) %{_grubdir}/grub.cfg
+%config(noreplace) %verify(not md5 mtime size) %{_grubdir}/custom.cfg
 
 # generated by grub at runtime
-%ghost %{_libexecdir}/device.map
-%ghost %{_libexecdir}/core.img
-%ghost %{_libexecdir}/grubenv
+%ghost %{_grubdir}/device.map
+%ghost %{_grubdir}/core.img
+%ghost %{_grubdir}/grubenv
 
 %dir /lib/grub.d
 %doc /lib/grub.d/README
@@ -417,6 +440,55 @@ fi
 
 %{_infodir}/grub*.info*
 
+%if %{with pc}
+%files pc
+%defattr(644,root,root,755)
+%dir %{_libexecdir}/*-pc
+%{_libexecdir}/*-pc/modinfo.sh
+%{_libexecdir}/*-pc/*.exec
+%{_libexecdir}/*-pc/*.image
+%{_libexecdir}/*-pc/*.lst
+%{_libexecdir}/*-pc/*.mod
+%{_libexecdir}/*-pc/*.module
+%{_libexecdir}/*-pc/lzma_decompress.img
+%{_libexecdir}/*-pc/config.h
+%{_libexecdir}/*-pc/gdb_grub
+%{_libexecdir}/*-pc/gmodule.pl
+%if %{with efiemu}
+%ifarch %{x8664}
+%{_libexecdir}/*-pc/efiemu*.o
+%endif
+%endif
+%{_libexecdir}/*-pc/kernel.img
+%ifarch %{ix86} %{x8664} sparc sparc64
+%{_libexecdir}/*-pc/boot.img
+%{_libexecdir}/*-pc/cdboot.img
+%{_libexecdir}/*-pc/diskboot.img
+%{_libexecdir}/*-pc/lnxboot.img
+%{_libexecdir}/*-pc/pxeboot.img
+%endif
+%endif
+
+%if %{with efi}
+%files efi
+%defattr(644,root,root,755)
+%dir %{_libexecdir}/*-efi
+%{_libexecdir}/*-efi/modinfo.sh
+%{_libexecdir}/*-efi/*.exec
+%{_libexecdir}/*-efi/*.lst
+%{_libexecdir}/*-efi/*.mod
+%{_libexecdir}/*-efi/*.module
+%{_libexecdir}/*-efi/config.h
+%{_libexecdir}/*-efi/gdb_grub
+%{_libexecdir}/*-efi/gmodule.pl
+%if %{with efiemu}
+%ifarch %{x8664}
+%{_libexecdir}/*-efi/efiemu*.o
+%endif
+%endif
+%{_libexecdir}/*-efi/kernel.img
+%endif
+
 %files mkfont
 %defattr(644,root,root,755)
 %{_mandir}/man1/grub-mkfont.1*
diff --git a/grub-install.in.patch b/grub-install.in.patch
deleted file mode 100644
index 5a03a0e..0000000
--- a/grub-install.in.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-diff -dur grub-2.00.orig/conf/Makefile.common grub-2.00/conf/Makefile.common
---- grub-2.00.orig/conf/Makefile.common	2012-05-27 18:16:05.000000000 +0200
-+++ grub-2.00/conf/Makefile.common	2012-10-27 15:00:48.537431538 +0200
-@@ -99,7 +99,7 @@
- # Other variables
- 
- grubconfdir = $(sysconfdir)/grub.d
--platformdir = $(pkglibdir)/$(target_cpu)-$(platform)
-+platformdir = $(pkglibdir)
- starfielddir = $(pkgdatadir)/themes/starfield
- 
- CFLAGS_GCRY = -Wno-error -Wno-missing-field-initializers
-diff -dur grub-2.00.orig/util/grub-install.in grub-2.00/util/grub-install.in
---- grub-2.00.orig/util/grub-install.in	2012-06-26 23:31:03.000000000 +0200
-+++ grub-2.00/util/grub-install.in	2012-10-27 15:03:21.133028965 +0200
-@@ -522,23 +522,6 @@
-     device_map=
- fi
- 
--# Copy the GRUB images to the GRUB directory.
--for file in "${grubdir}"/*.mod "${grubdir}"/*.lst "${grubdir}"/*.img "${grubdir}"/efiemu??.o "${grubdir}"/${grub_modinfo_target_cpu}-$grub_modinfo_platform/*.mod "${grubdir}"/${grub_modinfo_target_cpu}-$grub_modinfo_platform/*.lst "${grubdir}"/${grub_modinfo_target_cpu}-$grub_modinfo_platform/*.img "${grubdir}"/${grub_modinfo_target_cpu}-$grub_modinfo_platform/efiemu??.o; do
--    if test -f "$file" && [ "`basename $file`" != menu.lst ]; then
--	rm -f "$file" || exit 1
--    fi
--done
--for file in "${source_dir}"/*.mod "${source_dir}"/*.lst; do
--    cp -f "$file" "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform" || exit 1
--done
--if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "i386-pc" ] || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = "sparc64-ieee1275" ] ; then
--    for file in "${source_dir}"/*.img "${source_dir}"/efiemu??.o; do
--	if test -f "$file"; then
--	    cp -f "$file" "${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform" || exit 1
--	fi
--    done
--fi
--
- # Copy gettext files
- mkdir -p "${grubdir}"/locale/
- for dir in "${localedir}"/*; do
diff --git a/pld-mkconfigdir.patch b/pld-mkconfigdir.patch
index b80181b..5d6943e 100644
--- a/pld-mkconfigdir.patch
+++ b/pld-mkconfigdir.patch
@@ -7,7 +7,7 @@ diff -dur grub-2.00.orig/conf/Makefile.common grub-2.00/conf/Makefile.common
  
 -grubconfdir = $(sysconfdir)/grub.d
 +grubconfdir = /lib/grub.d
- platformdir = $(pkglibdir)
+ platformdir = $(pkglibdir)/$(target_cpu)-$(platform)
  starfielddir = $(pkgdatadir)/themes/starfield
  
 diff -dur grub-2.00.orig/util/grub-mkconfig.in grub-2.00/util/grub-mkconfig.in
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/grub2.git/commitdiff/1536aaf2ef81965c6f99c0dcf508a3629451e402



More information about the pld-cvs-commit mailing list