xref: /linux-6.15/scripts/package/mkspec (revision fe809b82)
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%define makeflags %{?_smp_mflags}
43
44	Name: kernel
45	Summary: The Linux Kernel
46	Version: $__KERNELRELEASE
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	# $UTS_MACHINE as a fallback of _arch in case
61	# /usr/lib/rpm/platform/*/macros was not included.
62	%{!?_arch: %define _arch $UTS_MACHINE}
63	%define __spec_install_post /usr/lib/rpm/brp-compress || :
64	%define debug_package %{nil}
65
66	%description
67	The Linux Kernel, the operating system core itself
68
69	%package headers
70	Summary: Header files for the Linux kernel for use by glibc
71	Group: Development/System
72	Obsoletes: kernel-headers
73	Provides: kernel-headers = %{version}
74	%description headers
75	Kernel-headers includes the C header files that specify the interface
76	between the Linux kernel and userspace libraries and programs.  The
77	header files define structures and constants that are needed for
78	building most standard programs and are also needed for rebuilding the
79	glibc package.
80
81$S$M	%package devel
82$S$M	Summary: Development package for building kernel modules to match the $__KERNELRELEASE kernel
83$S$M	Group: System Environment/Kernel
84$S$M	AutoReqProv: no
85$S$M	%description -n kernel-devel
86$S$M	This package provides kernel headers and makefiles sufficient to build modules
87$S$M	against the $__KERNELRELEASE kernel package.
88$S$M
89$S	%prep
90$S	%setup -q -n linux
91$S	cp %{SOURCE1} .config
92$S	patch -p1 < %{SOURCE2}
93$S
94$S	%build
95$S	%{make} %{makeflags} 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} %{makeflags} -s image_name) %{buildroot}/boot/efi/vmlinuz-$KERNELRELEASE
102	ln -s efi/vmlinuz-$KERNELRELEASE %{buildroot}/boot/
103	%else
104	cp \$(%{make} %{makeflags} -s image_name) %{buildroot}/boot/vmlinuz-$KERNELRELEASE
105	%endif
106$M	%{make} %{makeflags} INSTALL_MOD_PATH=%{buildroot} modules_install
107	%{make} %{makeflags} 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