# vim:filetype=spec
# Modules always contain just 32-bit code
%global _libdir %{_exec_prefix}/lib
%global _binaries_in_noarch_packages_terminate_build 0
#%%undefine _missing_build_ids_terminate_build
%{expand:%%{!?buildsubdir:%%global buildsubdir grub-%{tarversion}}}
%{expand:%%{!?_licensedir:%%global license %%%%doc}}
%if %{?_with_ccache: 1}%{?!_with_ccache: 0}
%global cc_equals CC=/usr/%{_lib}/ccache/gcc
%else
%global cc_equals %{nil}
%endif
%global with_efi_arch 0
%global with_alt_efi_arch 0
%global with_legacy_arch 0
%global grubefiarch %{nil}
%global grublegacyarch %{nil}
# sparc is always compiled 64 bit
%ifarch %{sparc}
%global target_cpu_name sparc64
%global _target_platform %{target_cpu_name}-%{_vendor}-%{_target_os}%{?_gnu}
%global legacy_target_cpu_name %{_arch}
%global platform ieee1275
%endif
# ppc is always compiled 64 bit
%ifarch ppc ppc64 ppc64le
%global target_cpu_name %{_arch}
%global legacy_target_cpu_name %{_arch}
%global _target_platform %{target_cpu_name}-%{_vendor}-%{_target_os}%{?_gnu}
%global platform ieee1275
%endif
%global efi_only aarch64 %{arm}
%global efi_arch x86_64 ia64 %{efi_only}
%ifnarch %{efi_arch}
%global no_efi_arch %{_arch}
%else
%global no_efi_arch blah_blah_blah_this_is_not_your_arch_blah_blah_blah
%endif
### fixme
%ifarch aarch64 %{arm}
%global efi_modules " linux "
%else
%global efi_modules " backtrace usb usbserial_common usbserial_pl2303 usbserial_ftdi usbserial_usbdebug linuxefi "
%endif
%ifarch x86_64
%global efiarch x64
%global target_cpu_name %{_arch}
%global legacy_target_cpu_name i386
%global platform pc
%global alt_efi_arch ia32
%global alt_target_cpu_name i386
%global alt_platform efi
%endif
%ifarch aarch64
%global efiarch aa64
%global target_cpu_name arm64
%endif
%ifarch %{arm}
%global efiarch arm
%global target_cpu_name arm
%endif
%global _target_platform %{target_cpu_name}-%{_vendor}-%{_target_os}%{?_gnu}
%global grub2_tools_files "grub2-tools-files.list"
%global grub2_tools_debugfiles_ignore "%{expand:%%{?buildsubdir:%%{buildsubdir}/}}grub2-tools-debugfiles.list"
%global grub2_tools_debugfiles "grub2-tools-debugfiles.list"
%global grub2_files "grub2-files.list"
%global grub2_debugfiles_ignore "%{expand:%%{?buildsubdir:%%{buildsubdir}/}}grub2-other-debugfiles.list"
%global grub2_debugfiles "grub2-debugfiles.list"
%global _find_debuginfo_opts \\\
-l %{grub2_files} \\\
-o %{grub2_debugfiles} \\\
-l %{grub2_tools_files} \\\
-o %{grub2_tools_debugfiles} \\\
%{nil}
%ifarch %{efi_arch}
%global with_efi_arch 1
%global grubefiname grub%{efiarch}.efi
%global grubeficdname gcd%{efiarch}.efi
%global grubefiarch %{target_cpu_name}-efi
%endif
%if 0%{?alt_efi_arch:1}
%global with_alt_efi_arch 1
%global grubaltefiname grub%{alt_efi_arch}.efi
%global grubalteficdname gcd%{alt_efi_arch}.efi
%global grubaltefiarch %{alt_target_cpu_name}-efi
%endif
# Figure out the right file path to use
%global efidir %(eval echo $(grep ^ID= /etc/os-release | sed -e 's/^ID=//' -e 's/rhel/redhat/'))
%global grub2_efi_files "grub2-efi-files.list"
%if 0
%global grub2_efi_debugfiles_ignore "%{expand:%%{?buildsubdir:%%{buildsubdir}/}}%{name}-modules-%{grubefiarch}-debugfiles.list"
%global grub2_efi_debugfiles "%{name}-modules-%{grubefiarch}-debugfiles.list"
%global _find_debuginfo_opts %{_find_debuginfo_opts} \\\
-l %{expand:%%{grub2_efi_files}} \\\
-o %{expand:%%{grub2_efi_debugfiles}} \\\
%{nil}
%else
%global _find_debuginfo_opts %{_find_debuginfo_opts} \\\
%{nil}
%endif
%ifnarch %{efi_only}
%global with_legacy_arch 1
%global grublegacyarch %{legacy_target_cpu_name}-%{platform}
%global grub2_legacy_files "grub2-legacy-files.list"
%global grub2_legacy_debugfiles_ignore "%{expand:%%{?buildsubdir:%%{buildsubdir}/}}%{name}-modules-%{grublegacyarch}-debugfiles.list"
%global grub2_legacy_debugfiles "%{name}-modules-%{grublegacyarch}-debugfiles.list"
%global _find_debuginfo_opts %{_find_debuginfo_opts} \\\
-l %{expand:%%{grub2_legacy_files}} \\\
-o %{expand:%%{grub2_legacy_debugfiles}} \\\
-l %{expand:%%{grub2_files}} \\\
-o %{expand:%%{grub2_debugfiles}} \\\
%{nil}
%endif
%global efi_cflags %(echo %{optflags} | \\\
sed \\\
-e 's/-O./-g3/g' \\\
-e 's/-fstack-protector[[:alpha:]-]\\+//g' \\\
-e 's/-Wp,-D_FORTIFY_SOURCE=[[:digit:]]\\+//g' \\\
-e 's/--param=ssp-buffer-size=4//g' \\\
-e 's/-mregparm=3/-mregparm=4/g' \\\
-e 's/-fexceptions//g' \\\
-e 's/-fasynchronous-unwind-tables//g' \\\
-e 's/^/ -fno-strict-aliasing /' ) %{nil}
%global legacy_cflags %(echo %{efi_cflags} | \\\
sed \\\
-e 's/-m64//g' \\\
-e 's/-mcpu=power7/-mcpu=power6/g' \\\
) %{nil}
%if 0
%global debug_package %{nil}
%global __debug_package 1
%global __debug_install_post \
bash -x %{SOURCE2} %{?_missing_build_ids_terminate_build:--strict-build-id} %{?_include_minidebuginfo:-m} %{?_find_debuginfo_opts} "%{expand:%%{expand:%%%%{_builddir}/%%%%{?buildsubdir}}}"
%endif
%global debug_package %{nil}
%global __debug_package 0
%define define_legacy_variant() \
%if %{1} \
%{expand:%%package %{2}} \
Summary: Bootloader with support for Linux, Multiboot, and more \
Group: System Environment/Base \
Requires: %{name}-tools-%{1} = %{epoch}:%{version}-%{release}.%{arch}\
Requires: %{name}-modules-%{1} = %{epoch}:%{version}-%{release}.noarch\
Requires: gettext which file \
Requires(pre): dracut \
Requires(post): dracut \
Obsoletes: grub2 <= 1:2.00-20%{?dist} \
Suggests: os-prober >= 1.58-11 \
Provides: %{name} = %{epoch}:%{version}-%{release}.%{arch} \
%{expand:%%description %{2}} \
%{desc} \
This subpackage provides support for %{2} systems. \
%endif \
%{nil}
%define define_efi_variant() \
%if %{1} \
%{expand:%%package %{2}} \
Summary: GRUB for EFI systems. \
Group: System Environment/Base \
Suggests: %{name}-tools = %{epoch}:%{version}-%{release}.%{arch} \
Provides: %{name}-efi = %{epoch}:%{version}-%{release}.%{arch} \
%{expand:%%description %{2}} \
%{desc} \
This subpackage provides support for %{2} systems. \
%{expand:%%{?!buildsubdir:%%define buildsubdir grub-%{2}-%{tarversion}}}\
%{expand:%%package modules-%{2}} \
Summary: Modules used to build custom grub.efi images \
Group: System Environment/Base \
BuildArch: noarch \
Enhances: %{name}-tools-%{2} = %{epoch}:%{version}-%{release} \
%{expand:%%description modules-%{2}} \
%{desc} \
This subpackage provides support for rebuilding your own grub.efi. \
%{expand:%%package extras-%{2}} \
Summary: Extras files used with EFI grub builds \
Group: System Environment/Base \
Enhances: %{name}-%{grubefiarch} = %{epoch}:%{version}-%{release} \
%{expand:%%description extras-%{2}} \
%{desc} \
This subpackage provides extra optional components of grub on %{2} systems.\
%endif \
%{nil}
%global do_setup() \
%if %{1} \
%setup -D -q -T -a 0 -n grub-%{tarversion} \
cd grub-%{tarversion} \
cp %{SOURCE4} unifont.pcf.gz \
cp %{SOURCE6} .gitignore \
git init \
echo '![[:digit:]][[:digit:]]_*.in' > util/grub.d/.gitignore \
echo '!*.[[:digit:]]' > util/.gitignore \
git config user.email "%{name}-owner@fedoraproject.org" \
git config user.name "Fedora Ninjas" \
git config gc.auto 0 \
git add . \
git commit -a -q -m "%{tarversion} baseline." \
git am %{patches} </dev/null \
git config --unset user.email \
git config --unset user.name \
cd .. \
mv grub-%{tarversion} grub-%{2}-%{tarversion} \
%endif \
%{nil}
%global do_common_build() \
%if %{1} \
%ifarch %{2} \
cd grub-%{3}-%{tarversion} \
sed -i -e 's,(grub),(%{name}),g' \\\
-e 's,grub.info,%{name}.info,g' \\\
-e 's,\* GRUB:,* GRUB2:,g' \\\
-e 's,/boot/grub/,/boot/%{name}/,g' \\\
-e 's,\([^-]\)grub-\([a-z]\),\1%{name}-\2,g' \\\
docs/grub.info \
sed -i -e 's,grub-dev,%{name}-dev,g' docs/grub-dev.info \
makeinfo --html --no-split -I docs -o grub-dev.html \\\
docs/grub-dev.texi \
makeinfo --html --no-split -I docs -o grub.html \\\
docs/grub.texi \
sed -i -e 's,/boot/grub/,/boot/%{name}/,g' \\\
-e 's,\([^-]\)grub-\([a-z]\),\1%{name}-\2,g' \\\
grub.html \
cd .. \
%endif \
%endif \
%{nil}
%define do_efi_build() \
%if %{1} \
cd grub-%{2}-%{tarversion} \
./autogen.sh \
%configure \\\
CFLAGS="%{efi_cflags}" \\\
TARGET_LDFLAGS=-static \\\
--with-platform=efi \\\
--target=%{_target_platform} \\\
--with-grubdir=%{name} \\\
--program-transform-name=s,grub,%{name}, \\\
--disable-grub-mount \\\
--disable-werror \
make %{?_smp_mflags} \
GRUB_MODULES=" all_video boot btrfs cat chain configfile echo \\\
efifwsetup efinet ext2 fat font gfxmenu gfxterm \\\
gzio halt hfsplus iso9660 jpeg loadenv loopback \\\
lvm mdraid09 mdraid1x minicmd normal part_apple \\\
part_msdos part_gpt password_pbkdf2 png reboot \\\
search search_fs_uuid search_fs_file \\\
search_label serial sleep syslinuxcfg test tftp \\\
video xfs" \
GRUB_MODULES+=%{efi_modules} \
./grub-mkimage -O %{grubefiarch} -o %{3}.orig \\\
-p /EFI/%{efidir} -d grub-core ${GRUB_MODULES} \
./grub-mkimage -O %{grubefiarch} -o %{4}.orig \\\
-p /EFI/BOOT -d grub-core ${GRUB_MODULES} \
%{pesign -s -i %{3}.orig -o %{3}} \
%{pesign -s -i %{4}.orig -o %{4}} \
cd .. \
%endif \
%{nil}
%define do_legacy_build() \
%if %{1} \
cd grub-%{2}-%{tarversion} \
./autogen.sh \
%configure \\\
CFLAGS="%{legacy_cflags}" \\\
TARGET_LDFLAGS=-static \\\
--with-platform=%{platform} \\\
--target=%{_target_platform} \\\
--with-grubdir=%{name} \\\
--program-transform-name=s,grub,%{name}, \\\
--disable-grub-mount \\\
--disable-werror \
make %{?_smp_mflags} \
cd .. \
%endif \
%{nil}
%define do_efi_install() \
%if %{1} \
cd grub-%{2}-%{tarversion} \
make DESTDIR=$RPM_BUILD_ROOT install \
find $RPM_BUILD_ROOT -iname "*.module" -exec chmod a-x {} \; \
install -m 755 -d $RPM_BUILD_ROOT/boot/efi/EFI/%{efidir}/ \
touch $RPM_BUILD_ROOT/boot/efi/EFI/%{efidir}/grub.cfg \
ln -s ../boot/efi/EFI/%{efidir}/grub.cfg \\\
$RPM_BUILD_ROOT%{_sysconfdir}/%{name}-efi.cfg \
install -m 755 %{3} $RPM_BUILD_ROOT/boot/efi/EFI/%{efidir}/%{3} \
install -m 755 %{4} $RPM_BUILD_ROOT/boot/efi/EFI/%{efidir}/%{4} \
install -D -m 644 unicode.pf2 \\\
$RPM_BUILD_ROOT/boot/efi/EFI/%{efidir}/fonts/unicode.pf2\
cd .. \
mkdir -p $RPM_BUILD_ROOT/boot/efi/EFI/%{efidir}/ \
ln -s /boot/efi/EFI/%{efidir}/grubenv \\\
$RPM_BUILD_ROOT/boot/grub2/grubenv \
%endif \
%{nil}
%define do_legacy_install() \
%if %{1} \
cd grub-%{2}-%{tarversion} \
make DESTDIR=$RPM_BUILD_ROOT install \
# Ghost config file \
install -d $RPM_BUILD_ROOT/boot/%{name} \
touch $RPM_BUILD_ROOT/boot/%{name}/grub.cfg \
ln -s ../boot/%{name}/grub.cfg \\\
$RPM_BUILD_ROOT%{_sysconfdir}/%{name}.cfg \
cd .. \
%endif \
%{nil}
%define do_common_install() \
%if %{1} \
%ifarch %{2} \
cd grub-%{3}-%{tarversion} \
cp -a $RPM_BUILD_ROOT%{_datarootdir}/locale/en\@quot \\\
$RPM_BUILD_ROOT%{_datarootdir}/locale/en \
mv $RPM_BUILD_ROOT%{_infodir}/grub.info \\\
$RPM_BUILD_ROOT%{_infodir}/%{name}.info \
mv $RPM_BUILD_ROOT%{_infodir}/grub-dev.info \\\
$RPM_BUILD_ROOT%{_infodir}/%{name}-dev.info \
rm $RPM_BUILD_ROOT%{_infodir}/dir \
# Defaults \
mkdir ${RPM_BUILD_ROOT}%{_sysconfdir}/default \
touch ${RPM_BUILD_ROOT}%{_sysconfdir}/default/grub \
mkdir ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig \
ln -sf %{_sysconfdir}/default/grub \\\
${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig/grub \
cd .. \
%endif \
%endif \
%{nil}
%define define_legacy_variant_files() \
%if %{1} \
%{expand:%%files %{2}} \
%defattr(-,root,root,-) \
%{!?_licensedir:%global license %%doc} \
%license grub-%{tarversion}/COPYING \
%config(noreplace) %{_sysconfdir}/%{name}.cfg \
%ghost %config(noreplace) /boot/%{name}/grub.cfg \
%config(noreplace) %ghost /boot/grub2/grubenv \
%{expand:%%files modules-%{2}} \
%defattr(-,root,root) \
%{!?_licensedir:%global license %%doc} \
%license grub-%{tarversion}/COPYING \
%dir %{_libdir}/grub/%{2}/ \
%{_libdir}/grub/%{2}/* \
%endif \
%{nil}
%define define_efi_variant_files() \
%if %{1} \
%{expand:%%files %{2} -f grub.lang} \
%defattr(-,root,root,-) \
%config(noreplace) %{_sysconfdir}/%{name}-efi.cfg \
%dir %attr(0755,root,root)/boot/efi/EFI/%{efidir} \
/boot/efi/EFI/%{efidir}/%{3} \
%attr(0755,root,root)/boot/efi/EFI/%{efidir}/fonts \
%ghost %config(noreplace) /boot/efi/EFI/%{efidir}/grub.cfg \
%{!?_licensedir:%global license %%doc} \
%license grub-%{tarversion}/COPYING \
/boot/grub2/grubenv \
%config(noreplace) \\\
%ghost %attr(0700,root,root)/boot/efi/EFI/%{efidir}/grubenv \
# ewww. \
%ifarch x86_64 \
%{_sbindir}/%{name}-macbless \
%{_bindir}/%{name}-glue-efi \
%{_bindir}/%{name}-render-label \
%else \
%exclude %{_sbindir}/%{name}-macbless \
%exclude %{_bindir}/%{name}-glue-efi \
%exclude %{_bindir}/%{name}-render-label \
%endif \
%{expand:%%files modules-%{2}} \
%defattr(-,root,root,-) \
%{_libdir}/grub/%{2} \
%{expand:%%files extras-%{2}} \
%defattr(-,root,root,-) \
%attr(0755,root,root)/boot/efi/EFI/%{efidir}/%{4} \
%endif \
%{nil}