#!/bin/sh
#
#	Output a simple RPM spec file.
#	This version assumes a minimum of RPM 4.13
#
#	The only gothic bit here is redefining install_post to avoid
#	stripping the symbols from files in the kernel which we want
#
#	Patched for non-x86 by Opencon (L) 2002 <opencon@rio.skydome.net>
#

# how we were called determines which rpms we build and how we build them
if [ "$1" = prebuilt ]; then
	S=DEL
	MAKE="$MAKE -f $srctree/Makefile"
else
	S=

	mkdir -p rpmbuild/SOURCES
	cp linux.tar.gz rpmbuild/SOURCES
	cp "${KCONFIG_CONFIG}" rpmbuild/SOURCES/config
	"${srctree}/scripts/package/gen-diff-patch" rpmbuild/SOURCES/diff.patch
fi

if grep -q CONFIG_MODULES=y include/config/auto.conf; then
	M=
else
	M=DEL
fi

if grep -q CONFIG_DRM=y include/config/auto.conf; then
	PROVIDES=kernel-drm
fi

PROVIDES="$PROVIDES kernel-$KERNELRELEASE"
__KERNELRELEASE=$(echo $KERNELRELEASE | sed -e "s/-/_/g")
EXCLUDES="$RCS_TAR_IGNORE --exclude=*vmlinux* --exclude=*.mod \
--exclude=*.o --exclude=*.ko --exclude=*.cmd --exclude=Documentation \
--exclude=.config.old --exclude=.missing-syscalls.d --exclude=*.s"

# We can label the here-doc lines for conditional output to the spec file
#
# Labels:
#  $S: this line is enabled only when building source package
#  $M: this line is enabled only when CONFIG_MODULES is enabled
sed -e '/^DEL/d' -e 's/^\t*//' <<EOF
	Name: kernel
	Summary: The Linux Kernel
	Version: $__KERNELRELEASE
	Release: $(cat .version 2>/dev/null || echo 1)
	License: GPL
	Group: System Environment/Kernel
	Vendor: The Linux Community
	URL: https://www.kernel.org
$S	Source0: linux.tar.gz
$S	Source1: config
$S	Source2: diff.patch
	Provides: $PROVIDES
$S	BuildRequires: bc binutils bison dwarves
$S	BuildRequires: (elfutils-libelf-devel or libelf-devel) flex
$S	BuildRequires: gcc make openssl openssl-devel perl python3 rsync

	# $UTS_MACHINE as a fallback of _arch in case
	# /usr/lib/rpm/platform/*/macros was not included.
	%define _arch %{?_arch:$UTS_MACHINE}
	%define __spec_install_post /usr/lib/rpm/brp-compress || :
	%define debug_package %{nil}

	%description
	The Linux Kernel, the operating system core itself

	%package headers
	Summary: Header files for the Linux kernel for use by glibc
	Group: Development/System
	Obsoletes: kernel-headers
	Provides: kernel-headers = %{version}
	%description headers
	Kernel-headers includes the C header files that specify the interface
	between the Linux kernel and userspace libraries and programs.  The
	header files define structures and constants that are needed for
	building most standard programs and are also needed for rebuilding the
	glibc package.

$S$M	%package devel
$S$M	Summary: Development package for building kernel modules to match the $__KERNELRELEASE kernel
$S$M	Group: System Environment/Kernel
$S$M	AutoReqProv: no
$S$M	%description -n kernel-devel
$S$M	This package provides kernel headers and makefiles sufficient to build modules
$S$M	against the $__KERNELRELEASE kernel package.
$S$M
$S	%prep
$S	%setup -q -n linux
$S	cp %{SOURCE1} .config
$S	patch -p1 < %{SOURCE2}
$S
$S	%build
$S	$MAKE %{?_smp_mflags} KERNELRELEASE=$KERNELRELEASE KBUILD_BUILD_VERSION=%{release}
$S
	%install
	mkdir -p %{buildroot}/boot
	%ifarch ia64
	mkdir -p %{buildroot}/boot/efi
	cp \$($MAKE -s image_name) %{buildroot}/boot/efi/vmlinuz-$KERNELRELEASE
	ln -s efi/vmlinuz-$KERNELRELEASE %{buildroot}/boot/
	%else
	cp \$($MAKE -s image_name) %{buildroot}/boot/vmlinuz-$KERNELRELEASE
	%endif
$M	$MAKE %{?_smp_mflags} INSTALL_MOD_PATH=%{buildroot} modules_install
	$MAKE %{?_smp_mflags} INSTALL_HDR_PATH=%{buildroot}/usr headers_install
	cp System.map %{buildroot}/boot/System.map-$KERNELRELEASE
	cp .config %{buildroot}/boot/config-$KERNELRELEASE
$S$M	rm -f %{buildroot}/lib/modules/$KERNELRELEASE/build
$S$M	rm -f %{buildroot}/lib/modules/$KERNELRELEASE/source
$S$M	mkdir -p %{buildroot}/usr/src/kernels/$KERNELRELEASE
$S$M	tar cf - $EXCLUDES . | tar xf - -C %{buildroot}/usr/src/kernels/$KERNELRELEASE
$S$M	cd %{buildroot}/lib/modules/$KERNELRELEASE
$S$M	ln -sf /usr/src/kernels/$KERNELRELEASE build
$S$M	ln -sf /usr/src/kernels/$KERNELRELEASE source

	%clean
	rm -rf %{buildroot}

	%post
	if [ -x /sbin/installkernel -a -r /boot/vmlinuz-$KERNELRELEASE -a -r /boot/System.map-$KERNELRELEASE ]; then
	cp /boot/vmlinuz-$KERNELRELEASE /boot/.vmlinuz-$KERNELRELEASE-rpm
	cp /boot/System.map-$KERNELRELEASE /boot/.System.map-$KERNELRELEASE-rpm
	rm -f /boot/vmlinuz-$KERNELRELEASE /boot/System.map-$KERNELRELEASE
	/sbin/installkernel $KERNELRELEASE /boot/.vmlinuz-$KERNELRELEASE-rpm /boot/.System.map-$KERNELRELEASE-rpm
	rm -f /boot/.vmlinuz-$KERNELRELEASE-rpm /boot/.System.map-$KERNELRELEASE-rpm
	fi

	%preun
	if [ -x /sbin/new-kernel-pkg ]; then
	new-kernel-pkg --remove $KERNELRELEASE --rminitrd --initrdfile=/boot/initramfs-$KERNELRELEASE.img
	elif [ -x /usr/bin/kernel-install ]; then
	kernel-install remove $KERNELRELEASE
	fi

	%postun
	if [ -x /sbin/update-bootloader ]; then
	/sbin/update-bootloader --remove $KERNELRELEASE
	fi

	%files
	%defattr (-, root, root)
$M	/lib/modules/$KERNELRELEASE
$M	%exclude /lib/modules/$KERNELRELEASE/build
$M	%exclude /lib/modules/$KERNELRELEASE/source
	/boot/*

	%files headers
	%defattr (-, root, root)
	/usr/include
$S$M
$S$M	%files devel
$S$M	%defattr (-, root, root)
$S$M	/usr/src/kernels/$KERNELRELEASE
$S$M	/lib/modules/$KERNELRELEASE/build
$S$M	/lib/modules/$KERNELRELEASE/source
EOF
