xref: /openbmc/linux/scripts/package/mkspec (revision 61eca933)
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
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	Name: kernel
42	Summary: The Linux Kernel
43	Version: $__KERNELRELEASE
44	Release: $(cat .version 2>/dev/null || echo 1)
45	License: GPL
46	Group: System Environment/Kernel
47	Vendor: The Linux Community
48	URL: https://www.kernel.org
49$S	Source0: linux.tar.gz
50$S	Source1: config
51$S	Source2: diff.patch
52	Provides: kernel-$KERNELRELEASE
53$S	BuildRequires: bc binutils bison dwarves
54$S	BuildRequires: (elfutils-libelf-devel or 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	%{!?_arch: %define _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 -n linux
88$S	cp %{SOURCE1} .config
89$S	patch -p1 < %{SOURCE2}
90$S
91$S	%build
92$S	$MAKE %{?_smp_mflags} KERNELRELEASE=$KERNELRELEASE 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