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