File grub2.spec of Package grub2
%if 0%{?suse_version} > 1140
%bcond_without grub2_fonts
%else
%bcond_with grub2_fonts
%endif
%define build_flavor @BUILD_FLAVOR@%nil
%define pkg grub2
%define chainloader_pfx %pkg-chainloader
%define chainloader_mountdir /chainloader
%define chainloader_buildrequires 1
%define chainloader_prefix /usr/lib64/%chainloader_pfx
%define chainloader_bindir %chainloader_prefix/bin
%define chainloader_libdir %chainloader_prefix/lib
%define chainloader_libexecdir %chainloader_prefix/lib
%define chainloader_sbindir %chainloader_prefix/sbin
%if "%build_flavor" == ""
ExclusiveArch: do-not-build
%define nsuffix %nil
%else
%define nsuffix -%build_flavor
%endif
Name: %pkg%nsuffix
Version: 0
Release: 0
Summary: Chainloader for MBR
License: GPL-3.0+
Group: System/Boot
Url: http:///www.google.com/ncr
%define grub_revision_full ee789e1a625a43b31e17f91a11d4cfb609bc4c52
%define grub_revision_short ee789e1a6
%define grub_date_unix 1757459537
%define grub_date_commit 2025-09-10 01:12:17 +0200
Patch1513152884: grub.tastaturbelegung.patch
Patch1523651671: grub.blocklists.patch
%if %suse_version > 1110
BuildRequires: python(abi) > 3.0
%endif
%define gnulib_version 9f48fb992a3d7e96610c4ce8be969cff2d61a01b
BuildRoot: %_tmppath/%name-%version-build
Source1000: grub2-xen-pv-firmware.cfg
%if "%build_flavor" == "chainloader"
ExclusiveArch: noarch ppc64le x86_64
%ifarch x86_64
Requires: %pkg-olh-i386-pc
%endif
%endif
%if "%build_flavor" == "olh-i386-pc"
ExclusiveArch: noarch x86_64
BuildArch: noarch
%endif
%if "%build_flavor" == "olh-i386-xen"
ExclusiveArch: noarch x86_64
BuildArch: noarch
%endif
%if "%build_flavor" == "olh-i386-xen_pvh"
ExclusiveArch: noarch x86_64
BuildArch: noarch
%endif
%if "%build_flavor" == "olh-powerpc-ieee1275"
ExclusiveArch: noarch ppc64le
BuildArch: noarch
%endif
%if "%build_flavor" == "olh-x86_64-efi"
ExclusiveArch: noarch x86_64
BuildArch: noarch
%endif
%if "%build_flavor" == "olh-x86_64-xen"
ExclusiveArch: noarch x86_64
BuildArch: noarch
%endif
%if "%build_flavor" == "tftpboot-i386-pc"
%define chainloader_buildrequires 0
BuildRequires: memtest86+
BuildRequires: %pkg-chainloader
BuildRequires: %pkg-olh-i386-pc
ExclusiveArch: noarch x86_64
BuildArch: noarch
%endif
%if "%build_flavor" == "tftpboot-x86_64-efi"
%define chainloader_buildrequires 0
BuildRequires: memtest86+
BuildRequires: %pkg-chainloader
BuildRequires: %pkg-olh-x86_64-efi
ExclusiveArch: noarch x86_64
BuildArch: noarch
%endif
%if "%chainloader_buildrequires" != "0"
BuildRequires: autoconf >= 2.64
BuildRequires: automake >= 1.14
BuildRequires: bison
BuildRequires: flex
BuildRequires: libtool
BuildRequires: makeinfo
BuildRequires: pkg-config
%if 0%{?suse_version} < 1500
BuildRequires: gcc7
%endif
%if %{with grub2_fonts}
BuildRequires: gnu-unifont-bitmap-fonts
BuildRequires: dejavu-fonts
%endif
BuildRequires: pkgconfig(freetype2)
%endif
%description
A chainloader from MBR.
The boot files will be installed in %chainloader_mountdir/%chainloader_pfx
%prep
rm -rf %_builddir/%name-%version
mv %_sourcedir/%pkg-%version %_builddir/%name-%version
%setup -c -T -D
pushd '.'
%patch -P 1513152884 -p1
%patch -P 1523651671 -p1
popd
rm -rf './grub-core/lib/gnulib'
mkdir -vp './grub-core/lib'
mv -v '%_sourcedir/gnulib-%gnulib_version' './grub-core/lib/gnulib'
find . -path '*/subprojects/packagefiles' | while read
do
if pushd "${REPLY}" 2>/dev/null
then
for prj in *
do
if pushd "${prj}" > /dev/null
then
for f in *
do
test -f "${f}" || continue
test -d "../../${prj}/" || continue
ln -vft "../../${prj}/" *
break
done
popd > /dev/null
fi
done
popd > /dev/null
fi
done
%build
find -name "*.lst" -ls
name='%name'
tag='%pkg'
build_flavor='%build_flavor'
target="${build_flavor%%-*}"
target="${target#*-}"
platform="${build_flavor##*-}"
build_dir='.b'
src='%version'
#
if test "${build_flavor}" = "chainloader"
then
:
%ifarch x86_64
target=i386
platform=pc
%endif
%ifarch ppc64le
target=powerpc
platform=ieee1275
%endif
fi
#
td=$PWD
cd ..
mv "${td}" "${src}"
mkdir "${td}"
mv "${src}" "${td}"
cd "${td}"
#
test -x "$(type -p gcc)" && CC="$_"
test -x "$(type -p gcc-5)" && CC="$_"
test -x "$(type -p gcc-6)" && CC="$_"
test -x "$(type -p gcc-7)" && CC="$_"
test -x "$(type -p gcc-8)" && CC="$_"
test -x "$(type -p gcc-9)" && CC="$_"
export CC="$(readlink -f ${CC})"
export TARGET_CC="${CC}"
export BUILD_CC="${CC}"
#
#
m="
acpi
all_video
at_keyboard
biosdisk
boot
cat
chain
configfile
date
echo
halt
keylayouts
linux
linux16
loadenv
ls
msdospart
multiboot
multiboot2
parttool
pxechain
reboot
search
search_fs_file
search_fs_uuid
search_label
serial
sleep
terminal
terminfo
test
true
"
CRYPTO_MODULES="
gcry_rijndael
gcry_sha1
gcry_sha256
"
DISK_MODULES="
luks
lvm
part_gpt
part_msdos
"
FS_MODULES="
btrfs
exfat
ext2
fat
iso9660
ntfs
squash4
udf
xfs
"
#
GRUB_MKIMAGE_MODULES="
${m}
${CRYPTO_MODULES}
${DISK_MODULES}
${FS_MODULES}
"
netdir_modules="
${m}
${CRYPTO_MODULES}
${DISK_MODULES}
${FS_MODULES}
http
"
#
#
tee .env.txt <<_EOS_
build_flavor="${build_flavor}"
platform="${platform}"
target="${target}"
build_dir="${build_dir}"
src="${src}"
GRUB_MKIMAGE_MODULES="${GRUB_MKIMAGE_MODULES}"
netdir_modules="${netdir_modules}"
_EOS_
. ./.env.txt
#
#
do_bootstrap() {
pushd "${src}"
sed -i~ '/^AC_INIT/s|^\(AC_INIT[^,]\+\),\([^,]\+\),\(.*\)|\1,[%version],\3|' configure.ac
if diff -u configure.ac~ configure.ac
then
: expected a match
exit 2
else
: changed
fi
bash bootstrap \
--gnulib-srcdir='./grub-core/lib/gnulib' \
--skip-po \
--no-git \
--no-bootstrap-sync
./configure --help
find -type f -exec chmod a-w '{}' +
find -type d -exec chmod go-w '{}' +
chmod u+w docs
popd
}
#
do_configure() {
mkdir "${build_dir}"
pushd "$_"
mkdir 'grub-core'
env \
CFLAGS=-Wall \
CXXFLAGS=-Wall \
FFLAGS=-Wall \
"../${src}/configure" \
--target=${target}-suse-linux \
--with-platform=${platform} \
--bindir='%chainloader_bindir' \
--libdir='%chainloader_libdir' \
--libexecdir='%chainloader_libexecdir' \
--prefix='%chainloader_prefix' \
--sbindir='%chainloader_sbindir' \
--disable-boot-time \
--disable-cache-stats \
--disable-device-mapper \
--disable-efiemu \
--disable-grub-emu-pci \
--disable-grub-emu-sdl \
--disable-grub-mkfont \
--disable-grub-mount \
--disable-grub-themes \
--disable-liblzma \
--disable-libzfs \
--disable-mm-debug \
--disable-nls \
--disable-werror \
--enable-rpath \
"$@"
%make_build \
V=1 \
all \
%nil || : make check to get deps failed as expected with exit code $?
popd
}
#
do_chainloader() {
do_configure \
--with-bootdir=%chainloader_mountdir/%chainloader_pfx \
%if %{with grub2_fonts}
--enable-grub-mkfont \
--enable-grub-themes \
%endif
--with-grubdir=%pkg \
%nil
}
#
case "${build_flavor}" in
chainloader)
do_bootstrap
do_chainloader
;;
tftpboot-*)
;;
olh-*-efi)
do_bootstrap
do_chainloader
;;
olh-*-pc)
do_bootstrap
do_chainloader
;;
olh-*-xen|olh-*-xen_pvh)
do_bootstrap
do_configure
;;
esac
%install
. ./.env.txt
mkdir -vp '%buildroot'
> 'files'
do_helpers() {
echo '%%config %%attr(544,root,root) %_sbindir/*' >> 'files'
pfx='%chainloader_pfx'
mkdir -vp %buildroot%_sbindir
pushd "$_"
# grub2-chainloader-set-default
tee "${pfx}-set-default" <<'_EOS_'
#/bin/bash
exe='grub-set-default'
args=()
set_install=
menuentry=
while test "$#" -gt 0
do
case "${1}" in
--help) args+=( "${1}" ) ;;
-h) args+=( "${1}" ) ;;
--version) args+=( "${1}" ) ;;
-V) args+=( "${1}" ) ;;
--boot-directory) args+=( "${1}" ) ;;
-i) set_install='do_install' ;;
--) break ;;
*) break ;;
esac
shift
done
# remap a blockdevice
if test -b "${1}"
then
if test -L "${1}"
then
menuentry="${1##*/}"
else
echo 2>&1 "${0}: require a /dev/disk/by-label/* symlink if a block device is given"
exit 1
fi
else
menuentry="${1}"
fi
if test -z "${menuentry}"
then
echo 2>&1 "${0}: require filesystem label from /dev/disk/by-label/* to activate a 'menuentry' in %chainloader_mountdir/%chainloader_pfx/grub2/grub.cfg"
exit 1
fi
if test -n "${set_install}"
then
args+=( "install ${menuentry}" )
else
args+=( "${menuentry}" )
fi
set -x
exec "%chainloader_sbindir/${exe}" "${args[@]}"
_EOS_
# grub2-chainloader-install
tee "${pfx}-install" <<'_EOS_'
#/bin/bash
exe='grub-install'
args=()
while test "$#" -gt 0
do
case "${1}" in
-*) args+=( "${1}" ) ;;
--) break ;;
*) break ;;
esac
shift
done
if test -b "${1}"
then
args+=( "${1}" )
set -x
exec "%chainloader_sbindir/${exe}" "${args[@]}"
fi
echo 2>&1 "${0}: requires a block device"
exit 1
_EOS_
#
popd
}
#
##
#
case "${build_flavor}" in
chainloader)
do_helpers
echo '%chainloader_prefix' >> 'files'
pushd "${build_dir}"
%make_build DESTDIR=%buildroot install-exec-am
popd
;;
tftpboot-*)
mods=
for mod in ${netdir_modules}
do
test -f "%chainloader_libdir/grub/${target}-${platform}/${mod}.mod" || continue
mods="${mods} ${mod}"
done
echo '%_datadir/%name' >> 'files'
'%chainloader_bindir/grub-mknetdir' \
--directory="%chainloader_libdir/grub/${target}-${platform}" \
--net-directory='%buildroot%_datadir/%name/tftpboot' \
--subdir=/ \
--modules="${mods}"
%if "%build_flavor" == "tftpboot-i386-pc"
cp -avLt "%buildroot%_datadir/%name/tftpboot/${target}-${platform}" \
$(ls -1d /usr/lib/memtest86/memtest.bin /boot/memtest.bin 2>/dev/null || : ls $? ) || : cp $?
%endif
%if "%build_flavor" == "tftpboot-x86_64-efi"
cp -avLt "%buildroot%_datadir/%name/tftpboot/${target}-${platform}" \
$(ls -1d /usr/lib/memtest86/memtest.efi /boot/memtest.efi 2>/dev/null || : ls $? ) || : cp $?
%endif
;;
olh-*-efi)
echo '%chainloader_prefix' >> 'files'
pushd "${build_dir}"
%make_build DESTDIR=%buildroot -C grub-core check
%make_build DESTDIR=%buildroot -C grub-core 'install-platformDATA' 'install-platformPROGRAMS'
mods=
for mod in ${GRUB_MKIMAGE_MODULES}
do
test -f "grub-core/${mod}.mod" || continue
mods="${mods} ${mod}"
done
./grub-mkimage \
--prefix= \
-o "%buildroot%chainloader_prefix/${target}-${platform}" \
-O "${target}-${platform}" \
-d grub-core/ \
${mods}
popd
;;
olh-*-pc)
echo '%chainloader_prefix' >> 'files'
pushd "${build_dir}"
%make_build DESTDIR=%buildroot -C grub-core all
%make_build DESTDIR=%buildroot -C grub-core 'install-platformDATA' 'install-platformPROGRAMS'
popd
;;
olh-*-xen|olh-*-xen_pvh)
echo '%chainloader_prefix' >> 'files'
pushd "${build_dir}"
%make_build DESTDIR=%buildroot -C grub-core check
%make_build DESTDIR=%buildroot -C grub-core 'install-platformDATA' 'install-platformPROGRAMS'
./grub-mkstandalone \
--grub-mkimage=./grub-mkimage \
-o "%buildroot%chainloader_prefix/${target}-${platform}" \
-O ${target}-${platform} \
-d grub-core/ \
"/boot/grub/grub.cfg=%{SOURCE1000}"
popd
;;
esac
head -n -0 files
#
find %buildroot -name "config.h" -print -delete
find %buildroot \( \
-name "*.module" -o \
-name "*.image" -o \
-name "*.exec" -o \
-name "*.mod" \
\) -exec chmod -v 444 '{}' +
%if "%build_flavor" == "tftpboot-i386-pc" || "%build_flavor" == "tftpboot-x86_64-efi"
%posttrans
echo start posttrans %name %version-%release
build_flavor='%build_flavor'
t="${build_flavor#*-}"
target_dir="/tftpboot/${t}"
mkdir -vp "${target_dir}"
source_files=
if pushd "%_datadir/%name/tftpboot/${t}"
then
for source_file in *
do
test -f "${source_file}" || continue
do_copy='do_copy'
target_file="${target_dir}/${source_file}"
if test -f "${target_file}"
then
if cmp -s "${target_file}" "${source_file}"
then
do_copy=
fi
fi
if test -n "${do_copy}"
then
source_files="${source_files} ${source_file}"
fi
done
fi
if test -n "${source_files}"
then
echo "update ${target_dir}: ${source_files}"
cp \
--archive \
--backup \
--remove-destination \
"--target-directory=${target_dir}" \
${source_files}
fi
popd > /dev/null
echo end posttrans %name %version-%release
%endif
%files -f files
%changelog