Merge branch 'packaging' into SLE12
[opensuse:kernel-source.git] / rpm / kernel-binary.spec.in
1 #
2 # spec file for package kernel-@FLAVOR@
3 #
4 # Copyright (c) @YEAR@ SUSE LINUX Products GmbH, Nuernberg, Germany.
5 #
6 # All modifications and additions to the file contributed by third parties
7 # remain the property of their copyright owners, unless otherwise agreed
8 # upon. The license for this file, and modifications and additions to the
9 # file, is the same license as for the pristine package itself (unless the
10 # license for the pristine package is not an Open Source License, in which
11 # case the license is the MIT License). An "Open Source License" is a
12 # license that conforms to the Open Source Definition (Version 1.9)
13 # published by the Open Source Initiative.
14
15 # Please submit bugfixes or comments via http://bugs.opensuse.org/
16 #
17
18
19 # This makes the OBS store the project cert as %_sourcedir/_projectcert.crt
20 # needssslcertforbuild
21
22 %define srcversion @SRCVERSION@
23 %define patchversion @PATCHVERSION@
24 %define variant @VARIANT@%{nil}
25 %define vanilla_only @VANILLA_ONLY@
26
27 %include %_sourcedir/kernel-spec-macros
28
29 %define build_flavor    @FLAVOR@
30 %define build_default   (%build_flavor == "default")
31 %define build_xen       (%build_flavor == "xen" || %build_flavor == "ec2")
32 %define build_vanilla   (%build_flavor == "vanilla")
33
34 %define build_src_dir %my_builddir/linux-%srcversion
35 %define src_install_dir /usr/src/linux-%kernelrelease%variant
36 %define obj_install_dir %src_install_dir-obj
37 %define rpm_install_dir %buildroot%obj_install_dir
38 %define kernel_build_dir %my_builddir/linux-obj
39
40 %(chmod +x %_sourcedir/{@SCRIPTS@})
41
42 %global cpu_arch %(%_sourcedir/arch-symbols %_target_cpu)
43 %define cpu_arch_flavor %cpu_arch/%build_flavor
44
45 # Define some CONFIG variables as rpm macros as well. (rpm cannot handle
46 # defining them all at once.)
47 %define config_vars CONFIG_MODULES CONFIG_KMSG_IDS CONFIG_SPLIT_PACKAGE CONFIG_SUSE_KERNEL_SUPPORTED CONFIG_EFI_STUB
48 %{expand:%(eval "$(test -n "%cpu_arch_flavor" && tar -xjf %_sourcedir/config.tar.bz2 --to-stdout config/%cpu_arch_flavor)"; for config in %config_vars; do echo "%%global $config ${!config:-n}"; done)}
49 %define split_base (%CONFIG_SPLIT_PACKAGE == "y")
50 %define split_extra (%CONFIG_SPLIT_PACKAGE == "y" && %CONFIG_SUSE_KERNEL_SUPPORTED == "y")
51
52 %ifarch %ix86 x86_64
53 %define install_vdso 1
54 %else
55 %define install_vdso 0
56 %endif
57
58 Name:           kernel-@FLAVOR@
59 Summary:        @SUMMARY@
60 License:        GPL-2.0
61 Group:          System/Kernel
62 Version:        @RPMVERSION@
63 %if 0%{?is_kotd}
64 Release:        <RELEASE>.g@COMMIT@
65 %else
66 Release:        @RELEASE@
67 %endif
68 Url:            http://www.kernel.org/
69 BuildRequires:  bc
70 BuildRequires:  coreutils
71 BuildRequires:  fdupes
72 %if 0%{?suse_version} > 1310
73 BuildRequires:  hmaccalc
74 %endif
75 BuildRequires:  modutils
76 # Used to sign the kernel in the buildservice
77 # Have the buildservice sign the kernel image (on x86_64), modules
78 # and firmware files
79 BuildRequires:  openssl
80 BuildRequires:  pesign-obs-integration
81 Provides:       %name = %version-%source_rel
82 Provides:       %{name}_%_target_cpu = %version-%release
83 Provides:       multiversion(kernel)
84 %if %split_base
85 Provides:       kernel-base = %version-%source_rel
86 # In SLE11, kernel-$flavor complemented kernel-$flavor-base. With SLE12,
87 # kernel-$flavor itself contains all the needed files and kernel-$flavor-base
88 # is a subset that can replace kernel-$flavor in some scenarios. We need to
89 # obsolete the -base subpackage from SLE11, so that the base files are not
90 # owned by multiple packages now. The dependency is not correct wrt openSUSE
91 # 11.2 - 11.4, but we primarily care about the supported upgrade path.
92 Obsoletes:      %name-base < 3.1
93 %endif
94 Requires(pre):  coreutils awk
95 # For /usr/lib/module-init-tools/weak-modules2
96 Requires(post): suse-module-tools
97 # For depmod (modutils is a dependency provided by both module-init-tools and
98 # kmod-compat)
99 Requires(post): modutils
100 # This Requires is wrong, because the post/postun scripts have a
101 # test -x update-bootloader, having perl-Bootloader is not a hard requirement.
102 # But, there is no way to tell rpm or yast to schedule the installation
103 # of perl-Bootloader before kernel-binary.rpm if both are in the list of
104 # packages to install/update. Likewise, this is true for mkinitrd.
105 # Need a perl-Bootloader with /usr/lib/bootloader/bootloader_entry
106 Requires(post): perl-Bootloader >= 0.4.15
107 %if %build_vanilla
108 Requires(post): mkinitrd
109 %else
110 # Require a mkinitrd that can handle usbhid/hid-generic built-in (bnc#773559)
111 Requires(post): mkinitrd >= 2.7.1
112 %endif
113 # Install the package providing /etc/SuSE-release early enough, so that
114 # the grub entry has correct title (bnc#757565)
115 Requires(post): distribution-release
116 # Do not install p-b and mkinitrd for the install check, the %post script is
117 # able to handle this
118 #!BuildIgnore: perl-Bootloader mkinitrd distribution-release
119 # Remove some packages that are installed automatically by the build system,
120 # but are not needed to build the kernel
121 #!BuildIgnore: autoconf automake gettext-runtime libtool cvs gettext-tools m4 udev insserv
122
123 %ifarch ia64
124 # arch/ia64/scripts/unwcheck.py
125 BuildRequires:  python
126 %endif
127 %ifarch s390 s390x
128 %if %build_vanilla && 0%{?suse_version} < 1130
129 BuildRequires:  dwarfextract
130 %endif
131 %endif
132 %ifarch %arm
133 BuildRequires:  u-boot-tools
134 %endif
135 %if %build_xen
136 #!BuildIgnore:  xen
137 %endif
138
139 Obsoletes:      microcode_ctl
140
141 %if %build_vanilla
142 # force bzip2 instead of lzma compression to allow install on older dist versions
143 %define _binary_payload w9.bzdio
144 %endif
145 # dead network if installed on SLES10, otherwise it will work (mostly)
146 Conflicts:      sysfsutils < 2.0
147 Conflicts:      apparmor-profiles <= 2.1
148 Conflicts:      apparmor-parser < 2.3
149 # root-lvm only works with newer udevs
150 Conflicts:      udev < 118
151 Conflicts:      lvm2 < 2.02.33
152 # Interface to hv_kvp_daemon changed
153 Conflicts:      hyper-v < 4
154 Provides:       kernel = %version-%source_rel
155 @PROVIDES_OBSOLETES@
156 @SOURCES@
157 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
158 ExclusiveArch:  @ARCHS@
159 %define kmp_target_cpu %_target_cpu
160
161 # These files are found in the kernel-source package:
162 @NOSOURCE@
163
164 # The following KMPs have been integrated into the kernel package,
165 # grouped by the last product that contained them.
166 # Usage: obsolete_kmp <basename> <upper bound of shipped versions>
167 # Note that KMPs embed the version of the kernel built against, that's why
168 # the _3 suffix for 2.6.x-based KMPs
169 %define obsolete_kmp() Obsoletes: %1-kmp-%build_flavor <= %2 \
170 Provides: %1-kmp = %2 \
171 Provides: %1-kmp-%build_flavor = %2
172 # sles10 / 10.3
173 %obsolete_kmp iwlwifi 1.3.27_3
174 %obsolete_kmp ipw3945 1.2.2_3
175 # sled10 / 11.0
176 %obsolete_kmp uvcvideo r200_3
177 # sle11-ga
178 %obsolete_kmp enic 0.0.1_3
179 %obsolete_kmp fnic 1.0.0_3
180 %obsolete_kmp brocade-bfa 1.1.0.2_3
181 %obsolete_kmp kvm 78.2.6.30.1_3
182 %obsolete_kmp perfmon 2_3
183 %obsolete_kmp iwlagn-2-6-27 1.0_3
184 %obsolete_kmp msi-wmi 1.0_3
185 # 11.1
186 %obsolete_kmp quickcam 0.6.7
187 # sle11-sp1
188 %obsolete_kmp   wacom 0.8.1_3
189 %obsolete_kmp   btrfs 0_3
190 %obsolete_kmp   brocade-bna 2.1.0.0_3
191 %obsolete_kmp   hyper-v 0_3
192 %obsolete_kmp   intel-e1000e 2.2.14
193 %obsolete_kmp   drm 3.7_3.1
194 Obsoletes:      firewire <= 3.0
195 Provides:       firewire = 3.0
196 %obsolete_kmp   firewire 3.0
197 %obsolete_kmp   iwlagn 3.0
198 Obsoletes:      compat-ath9k <= 3.0
199 Provides:       compat-ath9k = 3.0
200 %obsolete_kmp   compat-ath9k 3.0
201 %obsolete_kmp   realtek-r8192ce_pci 2.6.0005_3
202 %obsolete_kmp   realtek-r8192se_pci 2.6.0019.1207.2010_3
203 %obsolete_kmp   rt3090 2.4.0.4_3
204 %obsolete_kmp   rt3592 2.4.1.1_3
205 %obsolete_kmp   rt5390 2.4.0.4_3
206 %obsolete_kmp   ath3k 1.0_3
207 Obsoletes:      ath3k-firmware <= 1.0
208 Provides:       ath3k-firmware = 1.0
209 %obsolete_kmp   compat-wireless 3.12
210 %obsolete_kmp   rts5229 1.08
211 %obsolete_kmp   rts_pstor 1.11
212 # Obsolete kgraft patches for previous kernels. The matching Provides:
213 # dependency is intentionally omitted, as we are  not providing any kgraft
214 # patches for _this_ kernel.
215 Obsoletes:      kgraft-patch-%build_flavor < %(echo %kernelrelease | sed 'y/-/_/')
216
217 # Provide the exported symbols as "ksym(symbol) = hash"
218 %define __find_provides %_sourcedir/find-provides %name
219
220 # Will modules not listed in supported.conf abort the kernel build (0/1)?
221 %define supported_modules_check 0
222
223 %description
224 @DESCRIPTION@
225
226
227 %source_timestamp
228 %prep
229 if ! [ -e %{S:0} ]; then
230     echo "The %name-%version.nosrc.rpm package does not contain the" \
231          "complete sources. Please install kernel-source-%version.src.rpm."
232     exit 1
233 fi
234
235 SYMBOLS=
236 if test -e %_sourcedir/extra-symbols; then
237         SYMBOLS=$(cat %_sourcedir/extra-symbols)
238         echo "extra symbol(s):" $SYMBOLS
239 fi
240
241 # Unpack all sources and patches
242 %setup -q -c -T -a 0 @UNPACK_PATCHES@
243
244 mkdir -p %kernel_build_dir
245
246 # Generate a list of modules with their support status marking
247 %_sourcedir/guards --list --with-guards <%_sourcedir/supported.conf | \
248 awk '
249         /^\+(base|yes) / {
250                 print $(NF);
251                 next;
252         }
253         /^\+external / {
254                 print $(NF) " external";
255                 next;
256         }
257         /^[-+]/ {
258                 print $(NF) " no";
259                 next;
260         }
261         {
262                 print $(NF);
263         }
264 ' >%kernel_build_dir/Module.supported
265 %_sourcedir/guards --default=0 base < %_sourcedir/supported.conf | \
266         sed 's,.*/,,; s,\.ko$,,' | sort -u >%kernel_build_dir/Module.base
267
268 cd linux-%srcversion
269
270 %_sourcedir/apply-patches \
271 %if %{build_vanilla}
272         --vanilla \
273 %endif
274         %_sourcedir/series.conf .. $SYMBOLS
275
276 cd %kernel_build_dir
277
278 # Override the timestamp 'uname -v' reports with the source timestamp and
279 # the commit hash.
280 date=$(head -n 1 %_sourcedir/source-timestamp)
281 commit=$(sed -n 's/GIT Revision: //p' %_sourcedir/source-timestamp)
282 cat > .kernel-binary.spec.buildenv <<EOF
283 export KBUILD_BUILD_TIMESTAMP="$(LANG=C date -d "$date") (${commit:0:7})"
284 export KBUILD_VERBOSE=0
285 export KBUILD_SYMTYPES=1
286 export KBUILD_OVERRIDE=1
287 export KBUILD_BUILD_USER=geeko
288 export KBUILD_BUILD_HOST=buildhost
289 export HOST_EXTRACFLAGS="-include %_sourcedir/host-memcpy-hack.h"
290 EOF
291 source .kernel-binary.spec.buildenv
292
293 if [ -f %_sourcedir/localversion ] ; then
294     cat %_sourcedir/localversion > localversion
295 fi
296
297 if test -e ../config.addon/%cpu_arch_flavor; then
298         # FIXME: config.addon doesn't affect the %CONFIG_ macros defined at
299         # the top of the specfile
300         %_sourcedir/configtool.pl ../config{,.addon}/%cpu_arch_flavor >.config
301 else
302         cp ../config/%cpu_arch_flavor .config
303 fi
304 %build_src_dir/scripts/config \
305         --set-str CONFIG_LOCALVERSION -%source_rel-%build_flavor \
306         --enable  CONFIG_SUSE_KERNEL \
307 %if 0%{?__debug_package:1}
308         --enable  CONFIG_DEBUG_INFO \
309         --disable  CONFIG_DEBUG_INFO_REDUCED
310 %else
311         --disable CONFIG_DEBUG_INFO
312 %endif
313
314 MAKE_ARGS="$MAKE_ARGS -C %build_src_dir O=$PWD"
315 if test -e %_sourcedir/TOLERATE-UNKNOWN-NEW-CONFIG-OPTIONS; then
316     yes '' | make oldconfig $MAKE_ARGS
317 else
318     cp .config .config.orig
319     make silentoldconfig $MAKE_ARGS < /dev/null
320     %_sourcedir/check-for-config-changes .config.orig .config
321     rm .config.orig
322 fi
323
324 make prepare $MAKE_ARGS
325 make scripts $MAKE_ARGS
326 krel=$(make -s kernelrelease $MAKE_ARGS)
327
328 if [ "$krel" != "%kernelrelease-%build_flavor" ]; then
329     echo "Kernel release mismatch: $krel != %kernelrelease-%build_flavor" >&2
330     exit 1
331 fi
332
333 make clean $MAKE_ARGS
334
335 rm -f source
336 find . ! -type d -printf '%%P\n' > %my_builddir/obj-files
337
338 %build
339 cd %kernel_build_dir
340 source .kernel-binary.spec.buildenv
341
342 # create *.symref files in the tree
343 if test -e %my_builddir/kabi/%cpu_arch/symtypes-%build_flavor; then
344     %_sourcedir/modversions --unpack . < $_
345 fi
346
347 # copy optional module signing files:
348 # *.x509, *.crt
349 #  - certificates with pubkeys used to verify module and firmware signatures
350 #    at runtime. *.crt files assumed to be in the PEM format.
351 # signing_key.priv
352 #  - unencrypted private key used to sign modules and firmware during build
353 # x509.genkey
354 #  - openssl req config to generate a new signing_key.{x509,priv} pair for the
355 #    build
356 for f in %_sourcedir/*.x509 %_sourcedir/{signing_key.priv,x509.genkey}; do
357     if test -e "$f"; then
358         cp "$f" .
359     fi
360 done
361 for f in %_sourcedir/*.crt; do
362     out=${f##*/}
363     out=${out%.crt}.x509
364     openssl x509 -inform PEM -in "$f" -outform DER -out "$out"
365 done
366 # Convince kernel/Makefile not to generate a new keypair
367 touch x509.genkey
368 touch signing_key.x509
369
370 # The %{_smp_mflags} macro is defined to a number, make will spawn that many jobs.
371 # There are several ways how to define it:
372 # If you are using the build script:
373 #     build --jobs=N kernel-$flavor.spec
374 # With plain rpmbuild:
375 #     rpmbuild -ba --define 'jobs N' kernel-$flavor.spec
376 # To spawn as many jobs as there are cpu cores:
377 #     rpmbuild -ba --define "%_smp_mflags -j 0$(grep -Ec 'cpu[0-9]' /proc/stat)" \
378 #         kernel-$flavor.spec
379 # You can also set this permanently in ~/.rpmmacros:
380 #     %_smp_mflags -j 0%(grep -Ec 'cpu[0-9]' /proc/stat)
381 %if %CONFIG_KMSG_IDS == "y"
382     chmod +x ../linux-%srcversion/scripts/kmsg-doc
383     MAKE_ARGS="$MAKE_ARGS D=2"
384 %endif
385
386 while true; do
387     make %{?_smp_mflags} all $MAKE_ARGS CONFIG_DEBUG_SECTION_MISMATCH=y 2>&1 \
388         | tee buildlog
389     if test "${PIPESTATUS[0]}" -eq 0; then
390         break
391     fi
392     # In the linux-next and vanilla branches, we try harder to build a
393     # package.
394     if test 0%vanilla_only -gt 0 &&
395                         %_sourcedir/try-disable-staging-driver buildlog; then
396         echo "Retrying make"
397     else
398         exit 1
399     fi
400 done
401
402 %install
403
404 # sign the modules, firmware and possibly the kernel in the buildservice
405 export BRP_PESIGN_FILES="*.ko /lib/firmware"
406 %if %CONFIG_EFI_STUB == "y"
407 BRP_PESIGN_FILES="$BRP_PESIGN_FILES /boot/vmlinuz-%kernelrelease-%build_flavor"
408 %endif
409
410 # get rid of /usr/lib/rpm/brp-strip-debug
411 # strip removes too much from the vmlinux ELF binary
412 export NO_BRP_STRIP_DEBUG=true
413 export STRIP_KEEP_SYMTAB='*/vmlinux-*'
414
415 # /lib/modules/%kernelrelease-%build_flavor/build will be a stale symlink until the
416 # kernel-devel package is installed. Don't check for stale symlinks
417 # in the brp-symlink check:
418 export NO_BRP_STALE_LINK_ERROR=yes
419
420 cd %kernel_build_dir
421
422 mkdir -p %buildroot/boot
423 # (Could strip out non-public symbols.)
424 cp -p System.map %buildroot/boot/System.map-%kernelrelease-%build_flavor
425
426 add_vmlinux()
427 {
428     local vmlinux=boot/vmlinux-%kernelrelease-%build_flavor
429
430     cp vmlinux %buildroot/$vmlinux
431     # make sure that find-debuginfo.sh picks it up. In the filelist, we
432     # mark the file 0644 again
433     chmod +x %buildroot/$vmlinux
434     if test $1 == "--compressed"; then
435         # avoid using the gzip -n option to make kdump happy (bnc#880848#c20)
436         ts="$(head -n1 %_sourcedir/source-timestamp)"
437         touch -d "$ts" %buildroot/$vmlinux
438         touch %buildroot/$vmlinux.gz
439 %if 0%{?__debug_package:1}
440         # compress the vmlinux image after find-debuginfo.sh has processed it
441 %global __debug_install_post %__debug_install_post \
442 %_sourcedir/compress-vmlinux.sh %buildroot/boot/vmlinux-%kernelrelease-%build_flavor
443 %else
444         %_sourcedir/compress-vmlinux.sh %buildroot/$vmlinux
445 %endif
446         ghost_vmlinux=true
447     else
448         ghost_vmlinux=false
449     fi
450 }
451
452 # architecture specifics
453 %ifarch %ix86 x86_64
454     add_vmlinux --compressed
455     image=bzImage
456 %if %build_xen
457     test -f arch/x86/boot/$image || image=vmlinuz
458 %endif
459     cp -p arch/x86/boot/$image %buildroot/boot/vmlinuz-%kernelrelease-%build_flavor
460     image=vmlinuz
461 %endif
462 %ifarch alpha
463     add_vmlinux --compressed
464     cp -p arch/alpha/boot/vmlinux.gz %buildroot/boot/vmlinuz-%kernelrelease-%build_flavor
465     image=vmlinuz
466 %endif
467 %ifarch ppc ppc64 ppc64le
468     add_vmlinux
469     image=vmlinux
470 %endif
471 %ifarch ia64
472     add_vmlinux --compressed
473     mv %buildroot/boot/vmlinux-%kernelrelease-%build_flavor.gz \
474        %buildroot/boot/vmlinuz-%kernelrelease-%build_flavor
475     image=vmlinuz
476 %endif
477 %ifarch s390 s390x
478     add_vmlinux --compressed
479     cp -p arch/s390/boot/image %buildroot/boot/image-%kernelrelease-%build_flavor
480     image=image
481     if test -e arch/s390/boot/kerntypes.o; then
482         cp -p arch/s390/boot/kerntypes.o %buildroot/boot/Kerntypes-%kernelrelease-%build_flavor
483     elif test -x "$(which dwarfextract 2>/dev/null)"; then
484         dwarfextract vmlinux %buildroot/boot/Kerntypes-%kernelrelease-%build_flavor || echo "dwarfextract failed ($?)"
485     fi
486 %if %CONFIG_KMSG_IDS == "y"
487     mkdir -p %buildroot/usr/share/man/man9
488     find man -name '*.9' -exec install -m 644 -D '{}' %buildroot/usr/share/man/man9/ ';'
489 %endif
490 %endif
491 %ifarch sparc64
492     add_vmlinux --compressed
493     image=zImage
494     cp -p arch/sparc/boot/$image %buildroot/boot/vmlinuz-%kernelrelease-%build_flavor
495     image=vmlinux
496 %endif
497 %ifarch %arm
498     add_vmlinux --compressed
499     case "%build_flavor" in
500     default | lpae)
501         image=zImage
502         ;;
503     *)
504         # quickly compile uImage so we have something to boot from
505         make %{?_smp_mflags} uImage $MAKE_ARGS CONFIG_DEBUG_SECTION_MISMATCH=y
506         image=uImage
507         ;;
508     esac
509     cp -p arch/arm/boot/$image %buildroot/boot/$image-%kernelrelease-%build_flavor
510 %endif
511 %ifarch aarch64
512     add_vmlinux --compressed
513     image=Image
514     cp -p arch/arm64/boot/$image %buildroot/boot/$image-%kernelrelease-%build_flavor
515 %endif
516
517 if test -x /usr/lib/rpm/pesign/gen-hmac; then
518         $_ -r %buildroot /boot/$image-%kernelrelease-%build_flavor
519 fi
520
521 # Package the compiled-in certificates as DER files in /etc/uefi/certs
522 # and have mokutil enroll them when the kernel is installed
523 certs=()
524 if test %CONFIG_MODULE_SIG = "y"; then
525     for f in *.x509; do
526             if ! test -s "$f"; then
527                     continue
528             fi
529             h=$(openssl x509 -inform DER -fingerprint -noout -in "$f")
530             test -n "$h"
531             cert=/etc/uefi/certs/$(echo "$h" | \
532                 sed -rn 's/^SHA1 Fingerprint=//; T; s/://g; s/(.{8}).*/\1/p').crt
533             if test -e %buildroot/"$cert"; then
534                     continue
535             fi
536             mkdir -p %buildroot/etc/uefi/certs
537             cp "$f" %buildroot/"$cert"
538             certs=("${certs[@]}" "$cert")
539     done
540 fi
541
542 for sub in '-base' '' '-extra'; do
543     case "$sub" in
544     '-base' | '') base_package=1 ;;
545     *) base_package=0 ;;
546     esac
547     for script in preun postun pre post devel-pre devel-post; do
548         sed -e "s:@KERNELRELEASE@:%kernelrelease:g" \
549             -e "s:@IMAGE@:$image:g" \
550             -e "s:@FLAVOR""@:%build_flavor:g" \
551             -e "s:@SUBPACKAGE@:%name$sub:g" \
552             -e "s:@BASE_PACKAGE@:$base_package:g" \
553             -e "s:@RPM_VERSION_RELEASE@:%version-%release:g" \
554             -e "s:@RPM_TARGET_CPU@:%_target_cpu:g" \
555             -e "s:@CPU_ARCH_FLAVOR@:%cpu_arch_flavor:g" \
556             -e "s:@SRCVARIANT@:%variant:g" \
557             %_sourcedir/$script.sh > %my_builddir/$script$sub.sh
558         if test "$base_package" -eq 1 -a "${#certs[@]}" -gt 0; then
559             case "$script" in
560             preun | postun | post)
561                 # Copy the respective scriptlet from kernel-cert-subpackage
562                 sed "1,/^%%$script / d; /^%%[^%%]/,\$ d; s:@CERTS@:${certs[*]}:g" \
563                     %_sourcedir/kernel-cert-subpackage \
564                     >>"%my_builddir/$script$sub.sh"
565             esac
566         fi
567         # Do an exit 0 at the end of each scriptlet. If the last real command
568         # in the scriptlet (e.g. update-bootloader call, see bnc#809617)
569         # returns an error, we do not want to amplify the damage by leaving
570         # the system in an inconsistent state.
571         echo "exit 0" >>"%my_builddir/$script$sub.sh"
572     done
573 done
574
575 %if %build_xen || %build_vanilla
576 # keep this -suffix list in sync with post.sh and postun.sh
577 suffix=-%build_flavor
578 %endif
579 ln -s $image$suffix %buildroot/boot/$image$suffix
580 ln -s initrd$suffix %buildroot/boot/initrd$suffix
581
582 cp -p .config %buildroot/boot/config-%kernelrelease-%build_flavor
583 sysctl_file=%buildroot/boot/sysctl.conf-%kernelrelease-%build_flavor
584 for file in %my_builddir/sysctl/{defaults,%cpu_arch/arch-defaults,%cpu_arch_flavor}; do
585         if [ -f "$file" ]; then
586                 cat "$file"
587         fi
588 done | sed '1i # Generated file - do not edit.' >$sysctl_file
589 if [ ! -s $sysctl_file ]; then
590         rm $sysctl_file
591 fi
592
593 %if %install_vdso
594 # Install the unstripped vdso's that are linked in the kernel image
595 make vdso_install $MAKE_ARGS INSTALL_MOD_PATH=%buildroot
596 %endif
597
598 # Create a dummy initrd with roughly the size the real one will have.
599 # That way, YaST will know that this package requires some additional
600 # space in /boot.
601 dd if=/dev/zero of=%buildroot/boot/initrd-%kernelrelease-%build_flavor \
602         bs=1024 seek=2047 count=1
603 # Also reserve some space for the kdump initrd
604 cp %buildroot/boot/initrd-%kernelrelease-%build_flavor{,-kdump}
605
606 if [ %CONFIG_MODULES = y ]; then
607     mkdir -p %rpm_install_dir/%cpu_arch_flavor
608     mkdir -p %buildroot/usr/src/linux-obj/%cpu_arch
609     ln -s %build_flavor %buildroot/usr/src/linux-obj/%cpu_arch_flavor
610
611     gzip -n -c9 < Module.symvers > %buildroot/boot/symvers-%kernelrelease-%build_flavor.gz
612
613     make modules_install $MAKE_ARGS INSTALL_MOD_PATH=%buildroot
614
615 %ifarch s390 s390x
616     if test -e arch/s390/boot/kerntypes.o; then
617         :
618     elif test -x "$(which dwarfextract 2>/dev/null)" -a \
619         -f %buildroot/boot/Kerntypes-%kernelrelease-%build_flavor; then
620         find %buildroot -name "*.ko" > kofiles.list
621         dwarfextract %buildroot/boot/Kerntypes-%kernelrelease-%build_flavor -C kofiles.list || echo "dwarfextract failed ($?)"
622     fi
623 %endif
624
625     # Also put the resulting file in %rpm_install_dir/%cpu_arch/%build_flavor
626     # so that kernel-devel + kernel-%build_flavor is sufficient for building
627     # modules that have modversions as well.
628     mkdir -p %rpm_install_dir/%cpu_arch/%build_flavor
629     cp Module.symvers %rpm_install_dir/%cpu_arch/%build_flavor
630
631     # Table of types used in exported symbols (for modversion debugging).
632     %_sourcedir/modversions --pack . > %buildroot/boot/symtypes-%kernelrelease-%build_flavor
633     if [ -s %buildroot/boot/symtypes-%kernelrelease-%build_flavor ]; then
634         gzip -n -9 %buildroot/boot/symtypes-%kernelrelease-%build_flavor
635     else
636         rm -f %buildroot/boot/symtypes-%kernelrelease-%build_flavor
637     fi
638
639     # Some architecture's $(uname -m) output is different from the ARCH
640     # parameter that needs to be passed to kbuild. Create symlinks from
641     # $(uname -m) to the ARCH directory.
642     if [ ! -e %rpm_install_dir/%kmp_target_cpu ]; then
643         ln -sf %cpu_arch %rpm_install_dir/%kmp_target_cpu
644         ln -sf %cpu_arch %buildroot/usr/src/linux-obj/%kmp_target_cpu
645     fi
646
647     # We were building in %my_builddir/linux-%srcversion, but the sources will
648     # later be installed in /usr/src/linux-%srcversion-%source_rel. Fix up the
649     # build symlink.
650     rm -f %buildroot/lib/modules/%kernelrelease-%build_flavor/{source,build}
651     ln -s %src_install_dir \
652         %buildroot/lib/modules/%kernelrelease-%build_flavor/source
653     ln -s %obj_install_dir/%cpu_arch/%build_flavor \
654         %buildroot/lib/modules/%kernelrelease-%build_flavor/build
655
656     # Abort if there are any undefined symbols
657     msg="$(/sbin/depmod -F %buildroot/boot/System.map-%kernelrelease-%build_flavor \
658                         -b %buildroot -ae %kernelrelease-%build_flavor 2>&1)"
659     if [ $? -ne 0 ] || echo "$msg" | grep  'needs unknown symbol'; then
660         exit 1
661     fi
662
663 %if %split_base
664     %_sourcedir/split-modules -d %buildroot \
665         -o %my_builddir \
666         -b %kernel_build_dir/Module.base \
667 %if %CONFIG_SUSE_KERNEL_SUPPORTED == "y"
668         -e \
669 %endif
670 %if ! %supported_modules_check
671         -i
672 %endif
673 %if ! %split_extra
674     cat %my_builddir/unsupported-modules >>%my_builddir/main-modules
675 %endif
676
677     # The modules.dep file is sorted randomly which produces strange file
678     # checksums. As the file is not included in the resulting RPM, it's
679     # pointless to rely on its contents. Replacing by zeros to make the
680     # checksums always the same for several builds of the same package.
681     dd if=/dev/zero of=%buildroot/lib/modules/%kernelrelease-%build_flavor/modules.dep ibs=`stat -c%s %buildroot/lib/modules/%kernelrelease-%build_flavor/modules.dep` count=1
682
683 %else
684     (   cd %buildroot
685         find lib/modules/%kernelrelease-%build_flavor -type f -name '*.ko' -printf '/%%p\n'
686     ) > %my_builddir/base-modules
687 %endif
688
689     res=0
690     if test -e %my_builddir/kabi/%cpu_arch/symvers-%build_flavor; then
691         # check for kabi changes
692         %_sourcedir/kabi.pl --rules %my_builddir/kabi/severities \
693             %my_builddir/kabi/%cpu_arch/symvers-%build_flavor \
694             Module.symvers || res=$?
695     fi
696     if [ $res -ne 0 ]; then
697         # %ignore_kabi_badness is defined in the Kernel:* projects in the
698         # OBS to be able to build the KOTD in spite of kabi errors
699         if [ 0%{?ignore_kabi_badness} -eq 0 -a \
700              ! -e %my_builddir/kabi/%cpu_arch/ignore-%build_flavor -a \
701              ! -e %_sourcedir/IGNORE-KABI-BADNESS ]; then
702             echo "Create a file IGNORE-KABI-BADNESS in the kernel-source" \
703                  "directory to build this kernel even though its badness is" \
704                  "higher than allowed for an official kernel."
705            exit 1
706         fi
707     fi
708
709     # arch/powerpc/lib/crtsavres.o is required for building external
710     # modules on powerpc
711     if [ -f %kernel_build_dir/arch/powerpc/lib/crtsavres.o ]; then
712         echo arch/powerpc/lib/crtsavres.o >> %my_builddir/obj-files
713     fi
714
715     tar -cf - -T %my_builddir/obj-files | \
716         tar -xf - -C %rpm_install_dir/%cpu_arch_flavor
717     # bnc#507084
718     find %rpm_install_dir/%cpu_arch_flavor/scripts -type f -perm -111 | \
719         while read f; do
720             case "$(file -b "$f")" in
721             ELF\ *\ executable*)
722                 strip "$f"
723             esac
724         done
725     # Replace the absolute with a relative path
726     sed -i "s,%build_src_dir,../../../linux-%kernelrelease%variant,g" \
727         %rpm_install_dir/%cpu_arch_flavor/Makefile
728 fi
729
730 add_dirs_to_filelist() {
731     sed -rn '
732         # print file name
733         p
734         # remove filelist macros
735         s:%%[a-z]+(\([^)]+\))? ?::g
736         # add %%dir prefix
737         s:^:%%dir :
738         # print all parents
739         :a
740             # skip directories owned by other packages
741             s:^%%dir (/boot|/etc|/lib/(modules|firmware)|/usr/src)/[^/]+$::
742             s:/[^/]+$::p
743         ta
744     ' "$@" | sort -u
745 }
746
747 # Collect the file lists.
748 shopt -s nullglob dotglob
749 > %my_builddir/kernel-devel.files
750 for file in %buildroot/boot/symtypes* %buildroot/lib/modules/*/{build,source}; do
751         f=${file##%buildroot}
752         echo "$f" >> %my_builddir/kernel-devel.files
753 done
754
755 {   cd %buildroot
756     for f in boot/*; do
757         if test -L "$f"; then
758             echo "%%ghost /$f"
759             continue
760         elif test ! -f "$f"; then
761             continue
762         fi
763         case "$f" in
764         boot/initrd-*)
765             echo "%%ghost /$f"
766             continue
767             ;;
768         boot/vmlinux-*.gz)
769             ;;
770         boot/vmlinux-*)
771             if $ghost_vmlinux; then
772                 echo "%%ghost /$f"
773                 continue
774             fi
775             ;;
776         boot/symtypes*)
777             continue
778             ;;
779         esac
780         echo "%%attr(0644, root, root) /$f"
781     done
782
783     if [ %CONFIG_MODULES = y ]; then
784         find lib/modules/%kernelrelease-%build_flavor \
785             -type d -o \
786             \( -path '*/modules.*' ! -path '*/modules.order' \
787              ! -path '*/modules.builtin' \) -printf '%%%%ghost /%%p\n' \
788                -o -name '*.ko' -prune -o -type f -printf '/%%p\n'
789         cat %my_builddir/base-modules
790     fi
791     if test %CONFIG_MODULE_SIG = "y"; then
792         find etc/uefi/certs -type f -printf '/%%p\n'
793     fi
794     test -d lib/firmware/%kernelrelease-%build_flavor && \
795     find lib/firmware/%kernelrelease-%build_flavor \
796         -type d -o \
797         -printf '/%%p\n'
798     if [ -e .%_docdir/%name ]; then
799         echo "%%doc %_docdir/%name"
800     fi
801 } | sort -u | add_dirs_to_filelist >%my_builddir/kernel-base.files
802
803 %if %split_base
804     add_dirs_to_filelist %my_builddir/{kernel-base.files,main-modules} \
805         > %my_builddir/kernel-main.files
806 %endif
807 %if %split_extra
808     add_dirs_to_filelist %my_builddir/unsupported-modules > %my_builddir/kernel-extra.files
809 %endif
810
811 # Hardlink duplicate files automatically (from package fdupes): It doesn't save
812 # much, but it keeps rpmlint from breaking the package build. Note that we skip
813 # /usr/src/linux-obj intentionally, to not accidentally break timestamps there
814 %fdupes $RPM_BUILD_ROOT/lib
815
816 %preun -f preun.sh
817
818 %postun -f postun.sh
819
820 %pre -f pre.sh
821
822 %post -f post.sh
823
824 %if %split_base
825
826 %files -f kernel-main.files
827 %defattr(-, root, root)
828 %else
829
830 %files -f kernel-base.files
831 %defattr(-, root, root)
832 %endif
833
834 %package base
835 Summary:        @SUMMARY@ - base modules
836 Group:          System/Kernel
837 Url:            http://www.kernel.org/
838 Provides:       kernel-base = %version-%source_rel
839 Provides:       multiversion(kernel)
840 Conflicts:      %name = %version-%release
841 Requires(pre):  coreutils awk
842 Requires(post): modutils
843 Requires(post): perl-Bootloader
844 Requires(post): mkinitrd
845 @PROVIDES_OBSOLETES_BASE@
846
847 %description base
848 @DESCRIPTION@
849
850 This package contains only the base modules, required in all installs.
851
852
853 %source_timestamp
854 %preun base -f preun-base.sh
855
856 %postun base -f postun-base.sh
857
858 %pre base -f pre-base.sh
859
860 %post base -f post-base.sh
861
862 %if %split_base
863
864 %files base -f kernel-base.files
865 %defattr(-, root, root)
866 %endif
867
868 %package extra
869 Summary:        @SUMMARY@ - Unsupported kernel modules
870 Group:          System/Kernel
871 Url:            http://www.kernel.org/
872 Provides:       %name-extra_%_target_cpu = %version-%release
873 Provides:       kernel-extra = %version-%source_rel
874 Provides:       multiversion(kernel)
875 Requires:       %{name}_%_target_cpu = %version-%release
876 Requires(pre):  coreutils awk
877 Requires(post): modutils
878 Requires(post): perl-Bootloader
879 Requires(post): mkinitrd
880 @PROVIDES_OBSOLETES_EXTRA@
881 Supplements:    packageand(product(SUSE_SLED):%{name}_%_target_cpu)
882
883 %description extra
884 @DESCRIPTION@
885
886 This package contains additional modules not supported by Novell.
887
888
889 %source_timestamp
890 %preun extra -f preun-extra.sh
891
892 %postun extra -f postun-extra.sh
893
894 %pre extra -f pre-extra.sh
895
896 %post extra -f post-extra.sh
897
898 %if %split_extra
899
900 %files extra -f kernel-extra.files
901 %defattr(-, root, root)
902 %endif
903
904 %if %CONFIG_KMSG_IDS == "y"
905
906 %package man
907 Summary:        The collection of man pages generated by the kmsg script.
908 Group:          System/Kernel
909
910 %description man
911 This package includes the man pages that have been generated from the
912 kmsg message documentation comments.
913
914
915 %source_timestamp
916 %files man
917 %defattr(-,root,root)
918 /usr/share/man/man9/*
919 %endif
920
921 %package devel
922 Summary:        Development files necessary for building kernel modules
923 Group:          Development/Sources
924 Provides:       %name-devel = %version-%source_rel
925 Provides:       multiversion(kernel)
926 Requires:       kernel-devel%variant = %version-%source_rel
927 Supplements:    packageand(%name:kernel-devel%variant)
928 @PROVIDES_OBSOLETES_DEVEL@
929 PreReq:         coreutils
930
931 %description devel
932 This package contains files necessary for building kernel modules (and
933 kernel module packages) against the %build_flavor flavor of the kernel.
934
935
936 %source_timestamp
937 %if %CONFIG_MODULES == "y"
938
939 %pre devel -f devel-pre.sh
940
941 %post devel -f devel-post.sh
942
943 %files devel -f kernel-devel.files
944 %defattr(-,root,root)
945 %dir %obj_install_dir
946 %dir %obj_install_dir/%cpu_arch
947 %dir /usr/src/linux-obj
948 %dir /usr/src/linux-obj/%cpu_arch
949 %ghost /usr/src/linux-obj/%cpu_arch_flavor
950 %obj_install_dir/%cpu_arch_flavor
951 %if %kmp_target_cpu != %cpu_arch
952 %obj_install_dir/%kmp_target_cpu
953 /usr/src/linux-obj/%kmp_target_cpu
954 %endif
955 %endif
956
957 %changelog