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