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