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