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