Blob Blame History Raw
# 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}