kbuild: rpm-pkg: use kernel-install as a fallback for new-kernel-pkg
[linux-2.6-block.git] / scripts / package / mkspec
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
13 if [ "$1" = prebuilt ]; then
14         S=DEL
15 else
16         S=
17 fi
18
19 if grep -q CONFIG_MODULES=y .config; then
20         M=
21 else
22         M=DEL
23 fi
24
25 if grep -q CONFIG_DRM=y .config; then
26         PROVIDES=kernel-drm
27 fi
28
29 PROVIDES="$PROVIDES kernel-$KERNELRELEASE"
30 __KERNELRELEASE=$(echo $KERNELRELEASE | sed -e "s/-/_/g")
31 EXCLUDES="$RCS_TAR_IGNORE --exclude=.tmp_versions --exclude=*vmlinux* \
32 --exclude=*.o --exclude=*.ko --exclude=*.cmd --exclude=Documentation \
33 --exclude=.config.old --exclude=.missing-syscalls.d"
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
40 sed -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: http://www.kernel.org
49 $S      Source: kernel-$__KERNELRELEASE.tar.gz
50         Provides: $PROVIDES
51         %define __spec_install_post /usr/lib/rpm/brp-compress || :
52         %define debug_package %{nil}
53
54         %description
55         The Linux Kernel, the operating system core itself
56
57         %package headers
58         Summary: Header files for the Linux kernel for use by glibc
59         Group: Development/System
60         Obsoletes: kernel-headers
61         Provides: kernel-headers = %{version}
62         %description headers
63         Kernel-headers includes the C header files that specify the interface
64         between the Linux kernel and userspace libraries and programs.  The
65         header files define structures and constants that are needed for
66         building most standard programs and are also needed for rebuilding the
67         glibc package.
68
69 $S$M    %package devel
70 $S$M    Summary: Development package for building kernel modules to match the $__KERNELRELEASE kernel
71 $S$M    Group: System Environment/Kernel
72 $S$M    AutoReqProv: no
73 $S$M    %description -n kernel-devel
74 $S$M    This package provides kernel headers and makefiles sufficient to build modules
75 $S$M    against the $__KERNELRELEASE kernel package.
76 $S$M
77 $S      %prep
78 $S      %setup -q
79 $S
80 $S      %build
81 $S      make %{?_smp_mflags} KBUILD_BUILD_VERSION=%{release}
82 $S
83         %install
84         mkdir -p %{buildroot}/boot
85         %ifarch ia64
86         mkdir -p %{buildroot}/boot/efi
87         cp \$(make image_name) %{buildroot}/boot/efi/vmlinuz-$KERNELRELEASE
88         ln -s efi/vmlinuz-$KERNELRELEASE %{buildroot}/boot/
89         %else
90         cp \$(make image_name) %{buildroot}/boot/vmlinuz-$KERNELRELEASE
91         %endif
92 $M      make %{?_smp_mflags} INSTALL_MOD_PATH=%{buildroot} KBUILD_SRC= modules_install
93         make %{?_smp_mflags} INSTALL_HDR_PATH=%{buildroot}/usr KBUILD_SRC= headers_install
94         cp System.map %{buildroot}/boot/System.map-$KERNELRELEASE
95         cp .config %{buildroot}/boot/config-$KERNELRELEASE
96         bzip2 -9 --keep vmlinux
97         mv vmlinux.bz2 %{buildroot}/boot/vmlinux-$KERNELRELEASE.bz2
98 $S$M    rm -f %{buildroot}/lib/modules/$KERNELRELEASE/build
99 $S$M    rm -f %{buildroot}/lib/modules/$KERNELRELEASE/source
100 $S$M    mkdir -p %{buildroot}/usr/src/kernels/$KERNELRELEASE
101 $S$M    tar cf - $EXCLUDES . | tar xf - -C %{buildroot}/usr/src/kernels/$KERNELRELEASE
102 $S$M    cd %{buildroot}/lib/modules/$KERNELRELEASE
103 $S$M    ln -sf /usr/src/kernels/$KERNELRELEASE build
104 $S$M    ln -sf /usr/src/kernels/$KERNELRELEASE source
105
106         %clean
107         rm -rf %{buildroot}
108
109         %post
110         if [ -x /sbin/installkernel -a -r /boot/vmlinuz-$KERNELRELEASE -a -r /boot/System.map-$KERNELRELEASE ]; then
111         cp /boot/vmlinuz-$KERNELRELEASE /boot/.vmlinuz-$KERNELRELEASE-rpm
112         cp /boot/System.map-$KERNELRELEASE /boot/.System.map-$KERNELRELEASE-rpm
113         rm -f /boot/vmlinuz-$KERNELRELEASE /boot/System.map-$KERNELRELEASE
114         /sbin/installkernel $KERNELRELEASE /boot/.vmlinuz-$KERNELRELEASE-rpm /boot/.System.map-$KERNELRELEASE-rpm
115         rm -f /boot/.vmlinuz-$KERNELRELEASE-rpm /boot/.System.map-$KERNELRELEASE-rpm
116         fi
117
118         %preun
119         if [ -x /sbin/new-kernel-pkg ]; then
120         new-kernel-pkg --remove $KERNELRELEASE --rminitrd --initrdfile=/boot/initramfs-$KERNELRELEASE.img
121         elif [ -x /usr/bin/kernel-install ]; then
122         kernel-install remove $KERNELRELEASE
123         fi
124
125         %postun
126         if [ -x /sbin/update-bootloader ]; then
127         /sbin/update-bootloader --remove $KERNELRELEASE
128         fi
129
130         %files
131         %defattr (-, root, root)
132 $M      /lib/modules/$KERNELRELEASE
133 $M      %exclude /lib/modules/$KERNELRELEASE/build
134 $M      %exclude /lib/modules/$KERNELRELEASE/source
135         /boot/*
136
137         %files headers
138         %defattr (-, root, root)
139         /usr/include
140 $S$M
141 $S$M    %files devel
142 $S$M    %defattr (-, root, root)
143 $S$M    /usr/src/kernels/$KERNELRELEASE
144 $S$M    /lib/modules/$KERNELRELEASE/build
145 $S$M    /lib/modules/$KERNELRELEASE/source
146 EOF