xref: /linux-6.15/scripts/package/mkspec (revision d5d2d4cc)
1#!/bin/sh
2#
3#	Output a simple RPM spec file.
4#	This version assumes a minimum of RPM 4.13
5#
6#	The only gothic bit here is redefining install_post to avoid
7#	stripping the symbols from files in the kernel which we want
8#
9#	Patched for non-x86 by Opencon (L) 2002 <[email protected]>
10#
11
12# how we were called determines which rpms we build and how we build them
13if [ "$1" = prebuilt ]; then
14	S=DEL
15else
16	S=
17
18	mkdir -p rpmbuild/SOURCES
19	cp linux.tar.gz rpmbuild/SOURCES
20	cp "${KCONFIG_CONFIG}" rpmbuild/SOURCES/config
21	"${srctree}/scripts/package/gen-diff-patch" rpmbuild/SOURCES/diff.patch
22fi
23
24if grep -q CONFIG_MODULES=y include/config/auto.conf; then
25	M=
26else
27	M=DEL
28fi
29
30# We can label the here-doc lines for conditional output to the spec file
31#
32# Labels:
33#  $S: this line is enabled only when building source package
34#  $M: this line is enabled only when CONFIG_MODULES is enabled
35sed -e '/^DEL/d' -e 's/^\t*//' <<EOF
36%define ARCH ${ARCH}
37%define KERNELRELEASE ${KERNELRELEASE}
38
39%{!?make: %define make make}
40%define makeflags %{?_smp_mflags} ARCH=%{ARCH}
41
42	Name: kernel
43	Summary: The Linux Kernel
44	Version: %(echo %{KERNELRELEASE} | sed -e 's/-/_/g')
45	Release: $(cat .version 2>/dev/null || echo 1)
46	License: GPL
47	Group: System Environment/Kernel
48	Vendor: The Linux Community
49	URL: https://www.kernel.org
50$S	Source0: linux.tar.gz
51$S	Source1: config
52$S	Source2: diff.patch
53	Provides: kernel-%{KERNELRELEASE}
54$S	BuildRequires: bc binutils bison dwarves
55$S	BuildRequires: (elfutils-libelf-devel or libelf-devel) flex
56$S	BuildRequires: gcc make openssl openssl-devel perl python3 rsync
57
58	# $UTS_MACHINE as a fallback of _arch in case
59	# /usr/lib/rpm/platform/*/macros was not included.
60	%{!?_arch: %define _arch $UTS_MACHINE}
61	%define __spec_install_post /usr/lib/rpm/brp-compress || :
62	%define debug_package %{nil}
63
64	%description
65	The Linux Kernel, the operating system core itself
66
67	%package headers
68	Summary: Header files for the Linux kernel for use by glibc
69	Group: Development/System
70	Obsoletes: kernel-headers
71	Provides: kernel-headers = %{version}
72	%description headers
73	Kernel-headers includes the C header files that specify the interface
74	between the Linux kernel and userspace libraries and programs.  The
75	header files define structures and constants that are needed for
76	building most standard programs and are also needed for rebuilding the
77	glibc package.
78
79$S$M	%package devel
80$S$M	Summary: Development package for building kernel modules to match the %{version} kernel
81$S$M	Group: System Environment/Kernel
82$S$M	AutoReqProv: no
83$S$M	%description -n kernel-devel
84$S$M	This package provides kernel headers and makefiles sufficient to build modules
85$S$M	against the %{version} kernel package.
86$S$M
87$S	%prep
88$S	%setup -q -n linux
89$S	cp %{SOURCE1} .config
90$S	patch -p1 < %{SOURCE2}
91$S
92$S	%build
93$S	%{make} %{makeflags} KERNELRELEASE=%{KERNELRELEASE} KBUILD_BUILD_VERSION=%{release}
94$S
95	%install
96	mkdir -p %{buildroot}/boot
97	%ifarch ia64
98	mkdir -p %{buildroot}/boot/efi
99	cp \$(%{make} %{makeflags} -s image_name) %{buildroot}/boot/efi/vmlinuz-%{KERNELRELEASE}
100	ln -s efi/vmlinuz-%{KERNELRELEASE} %{buildroot}/boot/
101	%else
102	cp \$(%{make} %{makeflags} -s image_name) %{buildroot}/boot/vmlinuz-%{KERNELRELEASE}
103	%endif
104$M	%{make} %{makeflags} INSTALL_MOD_PATH=%{buildroot} modules_install
105	%{make} %{makeflags} INSTALL_HDR_PATH=%{buildroot}/usr headers_install
106	cp System.map %{buildroot}/boot/System.map-%{KERNELRELEASE}
107	cp .config %{buildroot}/boot/config-%{KERNELRELEASE}
108$S$M	rm -f %{buildroot}/lib/modules/%{KERNELRELEASE}/build
109$S$M	rm -f %{buildroot}/lib/modules/%{KERNELRELEASE}/source
110$S$M	%{make} %{makeflags} run-command KBUILD_RUN_COMMAND='\${srctree}/scripts/package/install-extmod-build %{buildroot}/usr/src/kernels/%{KERNELRELEASE}'
111$S$M	cd %{buildroot}/lib/modules/%{KERNELRELEASE}
112$S$M	ln -sf /usr/src/kernels/%{KERNELRELEASE} build
113$S$M	ln -sf /usr/src/kernels/%{KERNELRELEASE} source
114
115	%clean
116	rm -rf %{buildroot}
117
118	%post
119	if [ -x /sbin/installkernel -a -r /boot/vmlinuz-%{KERNELRELEASE} -a -r /boot/System.map-%{KERNELRELEASE} ]; then
120	cp /boot/vmlinuz-%{KERNELRELEASE} /boot/.vmlinuz-%{KERNELRELEASE}-rpm
121	cp /boot/System.map-%{KERNELRELEASE} /boot/.System.map-%{KERNELRELEASE}-rpm
122	rm -f /boot/vmlinuz-%{KERNELRELEASE} /boot/System.map-%{KERNELRELEASE}
123	/sbin/installkernel %{KERNELRELEASE} /boot/.vmlinuz-%{KERNELRELEASE}-rpm /boot/.System.map-%{KERNELRELEASE}-rpm
124	rm -f /boot/.vmlinuz-%{KERNELRELEASE}-rpm /boot/.System.map-%{KERNELRELEASE}-rpm
125	fi
126
127	%preun
128	if [ -x /sbin/new-kernel-pkg ]; then
129	new-kernel-pkg --remove %{KERNELRELEASE} --rminitrd --initrdfile=/boot/initramfs-%{KERNELRELEASE}.img
130	elif [ -x /usr/bin/kernel-install ]; then
131	kernel-install remove %{KERNELRELEASE}
132	fi
133
134	%postun
135	if [ -x /sbin/update-bootloader ]; then
136	/sbin/update-bootloader --remove %{KERNELRELEASE}
137	fi
138
139	%files
140	%defattr (-, root, root)
141$M	/lib/modules/%{KERNELRELEASE}
142$M	%exclude /lib/modules/%{KERNELRELEASE}/build
143$M	%exclude /lib/modules/%{KERNELRELEASE}/source
144	/boot/*
145
146	%files headers
147	%defattr (-, root, root)
148	/usr/include
149$S$M
150$S$M	%files devel
151$S$M	%defattr (-, root, root)
152$S$M	/usr/src/kernels/%{KERNELRELEASE}
153$S$M	/lib/modules/%{KERNELRELEASE}/build
154$S$M	/lib/modules/%{KERNELRELEASE}/source
155EOF
156