xref: /linux-6.15/scripts/package/mkspec (revision 4e3feaad)
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
15	MAKE="$MAKE -f $srctree/Makefile"
16else
17	S=
18fi
19
20if grep -q CONFIG_MODULES=y .config; then
21	M=
22else
23	M=DEL
24fi
25
26if grep -q CONFIG_DRM=y .config; then
27	PROVIDES=kernel-drm
28fi
29
30PROVIDES="$PROVIDES kernel-$KERNELRELEASE"
31__KERNELRELEASE=$(echo $KERNELRELEASE | sed -e "s/-/_/g")
32EXCLUDES="$RCS_TAR_IGNORE --exclude=*vmlinux* --exclude=*.mod \
33--exclude=*.o --exclude=*.ko --exclude=*.cmd --exclude=Documentation \
34--exclude=.config.old --exclude=.missing-syscalls.d --exclude=*.s"
35
36# We can label the here-doc lines for conditional output to the spec file
37#
38# Labels:
39#  $S: this line is enabled only when building source package
40#  $M: this line is enabled only when CONFIG_MODULES is enabled
41sed -e '/^DEL/d' -e 's/^\t*//' <<EOF
42	Name: kernel
43	Summary: The Linux Kernel
44	Version: $__KERNELRELEASE
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	Source: kernel-$__KERNELRELEASE.tar.gz
51	Provides: $PROVIDES
52$S	BuildRequires: bc binutils bison dwarves
53$S	BuildRequires: (elfutils-libelf-devel or libelf-devel) flex
54$S	BuildRequires: gcc make openssl openssl-devel perl python3 rsync
55
56	# $UTS_MACHINE as a fallback of _arch in case
57	# /usr/lib/rpm/platform/*/macros was not included.
58	%define _arch %{?_arch:$UTS_MACHINE}
59	%define __spec_install_post /usr/lib/rpm/brp-compress || :
60	%define debug_package %{nil}
61
62	%description
63	The Linux Kernel, the operating system core itself
64
65	%package headers
66	Summary: Header files for the Linux kernel for use by glibc
67	Group: Development/System
68	Obsoletes: kernel-headers
69	Provides: kernel-headers = %{version}
70	%description headers
71	Kernel-headers includes the C header files that specify the interface
72	between the Linux kernel and userspace libraries and programs.  The
73	header files define structures and constants that are needed for
74	building most standard programs and are also needed for rebuilding the
75	glibc package.
76
77$S$M	%package devel
78$S$M	Summary: Development package for building kernel modules to match the $__KERNELRELEASE kernel
79$S$M	Group: System Environment/Kernel
80$S$M	AutoReqProv: no
81$S$M	%description -n kernel-devel
82$S$M	This package provides kernel headers and makefiles sufficient to build modules
83$S$M	against the $__KERNELRELEASE kernel package.
84$S$M
85$S	%prep
86$S	%setup -q
87$S	rm -f scripts/basic/fixdep scripts/kconfig/conf
88$S	rm -f tools/objtool/{fixdep,objtool}
89$S
90$S	%build
91$S	$MAKE %{?_smp_mflags} KERNELRELEASE=$KERNELRELEASE KBUILD_BUILD_VERSION=%{release}
92$S
93	%install
94	mkdir -p %{buildroot}/boot
95	%ifarch ia64
96	mkdir -p %{buildroot}/boot/efi
97	cp \$($MAKE -s image_name) %{buildroot}/boot/efi/vmlinuz-$KERNELRELEASE
98	ln -s efi/vmlinuz-$KERNELRELEASE %{buildroot}/boot/
99	%else
100	cp \$($MAKE -s image_name) %{buildroot}/boot/vmlinuz-$KERNELRELEASE
101	%endif
102$M	$MAKE %{?_smp_mflags} KERNELRELEASE=$KERNELRELEASE INSTALL_MOD_PATH=%{buildroot} modules_install
103	$MAKE %{?_smp_mflags} KERNELRELEASE=$KERNELRELEASE INSTALL_HDR_PATH=%{buildroot}/usr headers_install
104	cp System.map %{buildroot}/boot/System.map-$KERNELRELEASE
105	cp .config %{buildroot}/boot/config-$KERNELRELEASE
106$S$M	rm -f %{buildroot}/lib/modules/$KERNELRELEASE/build
107$S$M	rm -f %{buildroot}/lib/modules/$KERNELRELEASE/source
108$S$M	mkdir -p %{buildroot}/usr/src/kernels/$KERNELRELEASE
109$S$M	tar cf - $EXCLUDES . | tar xf - -C %{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