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