xref: /linux-6.15/scripts/package/mkspec (revision d4f65127)
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# _arch is undefined if /usr/lib/rpm/platform/*/macros was not included.
40%{!?_arch: %define _arch dummy}
41%{!?make: %define make make}
42%define makeflags %{?_smp_mflags} ARCH=%{ARCH}
43
44	Name: kernel
45	Summary: The Linux Kernel
46	Version: %(echo %{KERNELRELEASE} | sed -e 's/-/_/g')
47	Release: $(cat .version 2>/dev/null || echo 1)
48	License: GPL
49	Group: System Environment/Kernel
50	Vendor: The Linux Community
51	URL: https://www.kernel.org
52$S	Source0: linux.tar.gz
53$S	Source1: config
54$S	Source2: diff.patch
55	Provides: kernel-%{KERNELRELEASE}
56$S	BuildRequires: bc binutils bison dwarves
57$S	BuildRequires: (elfutils-libelf-devel or libelf-devel) flex
58$S	BuildRequires: gcc make openssl openssl-devel perl python3 rsync
59
60	%define __spec_install_post /usr/lib/rpm/brp-compress || :
61	%define debug_package %{nil}
62
63	%description
64	The Linux Kernel, the operating system core itself
65
66	%package headers
67	Summary: Header files for the Linux kernel for use by glibc
68	Group: Development/System
69	Obsoletes: kernel-headers
70	Provides: kernel-headers = %{version}
71	%description headers
72	Kernel-headers includes the C header files that specify the interface
73	between the Linux kernel and userspace libraries and programs.  The
74	header files define structures and constants that are needed for
75	building most standard programs and are also needed for rebuilding the
76	glibc package.
77
78$S$M	%package devel
79$S$M	Summary: Development package for building kernel modules to match the %{version} kernel
80$S$M	Group: System Environment/Kernel
81$S$M	AutoReqProv: no
82$S$M	%description -n kernel-devel
83$S$M	This package provides kernel headers and makefiles sufficient to build modules
84$S$M	against the %{version} kernel package.
85$S$M
86$S	%prep
87$S	%setup -q -n linux
88$S	cp %{SOURCE1} .config
89$S	patch -p1 < %{SOURCE2}
90$S
91$S	%build
92$S	%{make} %{makeflags} KERNELRELEASE=%{KERNELRELEASE} KBUILD_BUILD_VERSION=%{release}
93$S
94	%install
95	mkdir -p %{buildroot}/boot
96	%ifarch ia64
97	mkdir -p %{buildroot}/boot/efi
98	cp \$(%{make} %{makeflags} -s image_name) %{buildroot}/boot/efi/vmlinuz-%{KERNELRELEASE}
99	ln -s efi/vmlinuz-%{KERNELRELEASE} %{buildroot}/boot/
100	%else
101	cp \$(%{make} %{makeflags} -s image_name) %{buildroot}/boot/vmlinuz-%{KERNELRELEASE}
102	%endif
103$M	%{make} %{makeflags} INSTALL_MOD_PATH=%{buildroot} modules_install
104	%{make} %{makeflags} INSTALL_HDR_PATH=%{buildroot}/usr headers_install
105	cp System.map %{buildroot}/boot/System.map-%{KERNELRELEASE}
106	cp .config %{buildroot}/boot/config-%{KERNELRELEASE}
107$S$M	rm -f %{buildroot}/lib/modules/%{KERNELRELEASE}/build
108$S$M	rm -f %{buildroot}/lib/modules/%{KERNELRELEASE}/source
109$S$M	%{make} %{makeflags} run-command KBUILD_RUN_COMMAND='\${srctree}/scripts/package/install-extmod-build %{buildroot}/usr/src/kernels/%{KERNELRELEASE}'
110$S$M	cd %{buildroot}/lib/modules/%{KERNELRELEASE}
111$S$M	ln -sf /usr/src/kernels/%{KERNELRELEASE} build
112$S$M	ln -sf /usr/src/kernels/%{KERNELRELEASE} source
113
114	%clean
115	rm -rf %{buildroot}
116
117	%post
118	if [ -x /sbin/installkernel -a -r /boot/vmlinuz-%{KERNELRELEASE} -a -r /boot/System.map-%{KERNELRELEASE} ]; then
119	cp /boot/vmlinuz-%{KERNELRELEASE} /boot/.vmlinuz-%{KERNELRELEASE}-rpm
120	cp /boot/System.map-%{KERNELRELEASE} /boot/.System.map-%{KERNELRELEASE}-rpm
121	rm -f /boot/vmlinuz-%{KERNELRELEASE} /boot/System.map-%{KERNELRELEASE}
122	/sbin/installkernel %{KERNELRELEASE} /boot/.vmlinuz-%{KERNELRELEASE}-rpm /boot/.System.map-%{KERNELRELEASE}-rpm
123	rm -f /boot/.vmlinuz-%{KERNELRELEASE}-rpm /boot/.System.map-%{KERNELRELEASE}-rpm
124	fi
125
126	%preun
127	if [ -x /sbin/new-kernel-pkg ]; then
128	new-kernel-pkg --remove %{KERNELRELEASE} --rminitrd --initrdfile=/boot/initramfs-%{KERNELRELEASE}.img
129	elif [ -x /usr/bin/kernel-install ]; then
130	kernel-install remove %{KERNELRELEASE}
131	fi
132
133	%postun
134	if [ -x /sbin/update-bootloader ]; then
135	/sbin/update-bootloader --remove %{KERNELRELEASE}
136	fi
137
138	%files
139	%defattr (-, root, root)
140$M	/lib/modules/%{KERNELRELEASE}
141$M	%exclude /lib/modules/%{KERNELRELEASE}/build
142$M	%exclude /lib/modules/%{KERNELRELEASE}/source
143	/boot/*
144
145	%files headers
146	%defattr (-, root, root)
147	/usr/include
148$S$M
149$S$M	%files devel
150$S$M	%defattr (-, root, root)
151$S$M	/usr/src/kernels/%{KERNELRELEASE}
152$S$M	/lib/modules/%{KERNELRELEASE}/build
153$S$M	/lib/modules/%{KERNELRELEASE}/source
154EOF
155