#!/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>
#

set -eu

output=$1

mkdir -p "$(dirname "${output}")"

exec >"${output}"

if grep -q CONFIG_MODULES=y include/config/auto.conf; then
echo '%define with_devel %{?_without_devel: 0} %{?!_without_devel: 1}'
else
echo '%define with_devel 0'
fi

# use %{debug_package} machinery to generate -debuginfo
with_debuginfo_rpm=0
# manually generate -debuginfo package
with_debuginfo_manual=0
# debuginfo package generation uses find-debuginfo.sh under the hood,
# which only works on uncompressed modules that contain debuginfo
if grep -q CONFIG_DEBUG_INFO=y include/config/auto.conf &&
   (! grep -q CONFIG_MODULE_COMPRESS=y include/config/auto.conf) &&
   (! grep -q CONFIG_DEBUG_INFO_SPLIT=y include/config/auto.conf); then
	# If module signing is enabled (which may be required to boot with
	# lockdown enabled), the find-debuginfo.sh machinery cannot be used
	# because the signatures will be stripped off the modules. However, due
	# to an rpm bug in versions prior to 4.20.0
	#
	#     https://github.com/rpm-software-management/rpm/issues/3057
	#     https://github.com/rpm-software-management/rpm/commit/49f906998f3cf1f4152162ca61ac0869251c380f
	#
	# We cannot provide our own debuginfo package because it does not listen
	# to our custom files list, failing the build due to unpackaged files.
	# Manually generate the debug info package if using rpm 4.20.0. If not
	# using rpm 4.20.0, avoid generating a -debuginfo package altogether,
	# as it is not safe.
	if grep -q CONFIG_MODULE_SIG=y include/config/auto.conf; then
		rpm_ver_str=$(rpm --version 2>/dev/null)
		# Split the version on spaces
		IFS=' '
		set -- $rpm_ver_str
		if [ "${1:-}" = RPM -a "${2:-}" = version ]; then
			IFS=.
			set -- $3
			rpm_ver=$(( 1000000 * $1 + 10000 * $2 + 100 * $3 + ${4:-0} ))
			if [ "$rpm_ver" -ge 4200000 ]; then
				with_debuginfo_manual='%{?_without_debuginfo:0}%{?!_without_debuginfo:1}'
			fi
		fi
	else
		with_debuginfo_rpm='%{?_without_debuginfo:0}%{?!_without_debuginfo:1}'
	fi
fi
echo "%define with_debuginfo_manual $with_debuginfo_manual"
echo "%define with_debuginfo_rpm $with_debuginfo_rpm"

cat<<EOF
%define ARCH ${ARCH}
%define KERNELRELEASE ${KERNELRELEASE}
%define pkg_release $("${srctree}/scripts/build-version")
EOF

cat "${srctree}/scripts/package/kernel.spec"

# collect the user's name and email address for the changelog entry
if [ "$(command -v git)" ]; then
	name=$(git config user.name) || true
	email=$(git config user.email) || true
fi

if [ ! "${name:+set}" ]; then
	name=${KBUILD_BUILD_USER:-$(id -nu)}
fi

if [ ! "${email:+set}" ]; then
	buildhost=${KBUILD_BUILD_HOST:-$(hostname -f 2>/dev/null || hostname)}
	builduser=${KBUILD_BUILD_USER:-$(id -nu)}
	email="${builduser}@${buildhost}"
fi

cat << EOF

%changelog
* $(LC_ALL=C date +'%a %b %d %Y') ${name} <${email}>
- Custom built Linux kernel.
EOF
