Merge branch 'master' into SLE11-SP1
[opensuse:kernel-source.git] / rpm / kernel-binary.spec.in
1 #
2 # spec file for package kernel-@FLAVOR@ (Version @RPMVERSION@)
3 #
4 # Copyright (c) 2009 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 # norootforbuild
19
20 %define srcversion @SRCVERSION@
21 %define patchversion @PATCHVERSION@
22 %define variant @VARIANT@%{nil}
23
24 %include %_sourcedir/kernel-spec-macros
25
26 %define build_flavor    @FLAVOR@
27 %define build_kdump     (%build_flavor == "kdump")
28 %define build_xen       (%build_flavor == "xen" || %build_flavor == "ec2")
29 %define build_vanilla   (%build_flavor == "vanilla")
30 %define build_ps3       (%build_flavor == "ps3")
31
32 %define build_src_dir %my_builddir/linux-%srcversion
33 %define src_install_dir /usr/src/linux-%kernelrelease%variant
34 %define obj_install_dir %src_install_dir-obj
35 %define rpm_install_dir %buildroot%obj_install_dir
36 %define kernel_build_dir %my_builddir/linux-obj
37
38 %(chmod +x %_sourcedir/{arch-symbols,find-provides,guards,check-for-config-changes,check-supported-list,modversions,kabi.pl,split-modules})
39
40 %global cpu_arch %(%_sourcedir/arch-symbols %_target_cpu)
41 %define cpu_arch_flavor %cpu_arch/%build_flavor
42
43 # Define some CONFIG variables as rpm macros as well. (rpm cannot handle
44 # defining them all at once.)
45 %define config_vars CONFIG_MODULES CONFIG_KMSG_IDS CONFIG_SPLIT_PACKAGE CONFIG_ENTERPRISE_SUPPORT
46 %{expand:%(eval "$(test -n "%cpu_arch_flavor" && tar xfj %_sourcedir/config.tar.bz2 --to-stdout config/%cpu_arch_flavor)"; for config in %config_vars; do echo "%%global $config ${!config:-n}"; done)}
47 %define split_base (%CONFIG_SPLIT_PACKAGE == "y")
48 %define split_extra (%CONFIG_SPLIT_PACKAGE == "y" && %CONFIG_ENTERPRISE_SUPPORT == "y")
49
50 %ifarch %ix86 x86_64
51 %define install_vdso 1
52 %else
53 %define install_vdso 0
54 %endif
55
56 Name:           kernel-@FLAVOR@
57 Summary:        @SUMMARY@
58 Version:        @RPMVERSION@
59 %if %using_buildservice
60 Release:        @RELEASE_PREFIX@<RELEASE>
61 %else
62 Release:        @RELEASE_PREFIX@0
63 %endif
64 License:        GPL v2 only
65 Group:          System/Kernel
66 Url:            http://www.kernel.org/
67 AutoReqProv:    on
68 BuildRequires:  coreutils module-init-tools sparse
69 BuildRequires:  fdupes
70 Provides:       %{name}_%_target_cpu = %version-%release
71 %if %split_base
72 Requires:       %name-base_%_target_cpu = %version-%release
73 %endif
74 Requires(pre):  coreutils awk
75 # Need a module-init-tools with /usr/lib/module-init-tools/weak-modules2
76 Requires(post): module-init-tools >= 3.4
77 # This Requires is wrong, because the post/postun scripts have a
78 # test -x update-bootloader, having perl-Bootloader is not a hard requirement.
79 # But, there is no way to tell rpm or yast to schedule the installation
80 # of perl-Bootloader before kernel-binary.rpm if both are in the list of
81 # packages to install/update. Likewise, this is true for mkinitrd.
82 # Need a perl-Bootloader with /usr/lib/bootloader/bootloader_entry
83 Requires(post): perl-Bootloader >= 0.4.15
84 Requires(post): mkinitrd
85 #!BuildIgnore:  perl-Bootloader mkinitrd
86
87 %ifarch ia64
88 # arch/ia64/scripts/unwcheck.py
89 BuildRequires:  python
90 %endif
91 %ifarch s390 s390x
92 BuildRequires:  dwarfextract
93 %endif
94 %if %build_xen
95 %ifarch %ix86
96 %if %build_flavor != "ec2"
97 Provides:       kernel-xenpae = %version
98 Obsoletes:      kernel-xenpae <= %version
99 %endif
100 %endif
101 #!BuildIgnore:  xen
102 %endif
103
104 Provides:       %name-nongpl
105 Obsoletes:      %name-nongpl
106 %if %build_vanilla
107 # force bzip2 instead of lzma compression to allow install on older dist versions
108 %define _binary_payload w9.bzdio
109 %endif
110 # dead network if installed on SLES10, otherwise it will work (mostly)
111 Conflicts:      sysfsutils < 2.0
112 %if ! %build_vanilla
113 Conflicts:      apparmor-profiles <= 2.1
114 Conflicts:      apparmor-parser < 2.3
115 # root-lvm only works with newer udevs
116 Conflicts:      udev < 118
117 Conflicts:      lvm2 < 2.02.33
118 %endif
119 %ifarch %ix86
120 Conflicts:      libc.so.6()(64bit)
121 %endif
122 Provides:       kernel = %version-%source_rel
123 @PROVIDES_OBSOLETES@
124
125 Source0:        http://www.kernel.org/pub/linux/kernel/v2.6/linux-%srcversion.tar.bz2
126 Source10:       preun.sh
127 Source11:       postun.sh
128 Source12:       pre.sh
129 Source13:       post.sh
130 Source20:       series.conf
131 Source22:       supported.conf
132 Source30:       arch-symbols
133 Source31:       guards
134 Source33:       check-for-config-changes
135 Source34:       check-supported-list
136 Source40:       source-timestamp
137 Source44:       find-provides
138 Source46:       modversions
139 Source47:       kabi.pl
140 Source48:       split-modules
141 Source49:       kernel-spec-macros
142 Source100:      config.tar.bz2
143 Source101:      patches.arch.tar.bz2
144 Source102:      patches.drivers.tar.bz2
145 Source103:      patches.fixes.tar.bz2
146 Source104:      patches.rpmify.tar.bz2
147 Source105:      patches.suse.tar.bz2
148 Source107:      patches.xen.tar.bz2
149 Source108:      patches.addon.tar.bz2
150 Source109:      patches.kernel.org.tar.bz2
151 Source110:      patches.apparmor.tar.bz2
152 Source111:      patches.rt.tar.bz2
153 Source112:      patches.trace.tar.bz2
154 Source113:      patches.kabi.tar.bz2
155 Source120:      kabi.tar.bz2
156 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
157 ExclusiveArch:  @ARCHS@
158
159 # These files are found in the kernel-source package:
160 NoSource:       0
161 NoSource:       100
162 NoSource:       101
163 NoSource:       102
164 NoSource:       103
165 NoSource:       104
166 NoSource:       105
167 NoSource:       107
168 NoSource:       108
169 NoSource:       109
170 NoSource:       110
171 NoSource:       111
172 NoSource:       120
173
174 # The following KMPs have been integrated into the kernel package.
175 # sles10 / 10.3
176 Obsoletes:      iwlwifi-kmp-%build_flavor
177 Obsoletes:      ipw3945-kmp-%build_flavor
178 # sles10 / 11.0
179 Obsoletes:      uvcvideo-kmp-%build_flavor
180 # 10.3
181 Obsoletes:      adm8211-kmp-%build_flavor
182 Obsoletes:      rt2x00-kmp-%build_flavor
183 Obsoletes:      rfswitch-kmp-%build_flavor
184 # 11.0
185 Obsoletes:      atl2-kmp-%build_flavor
186 Obsoletes:      wlan-ng-kmp-%build_flavor
187 Obsoletes:      et131x-kmp-%build_flavor
188 Obsoletes:      ivtv-kmp-%build_flavor
189 Obsoletes:      at76_usb-kmp-%build_flavor
190 Obsoletes:      pcc-acpi-kmp-%build_flavor
191 Obsoletes:      btusb-kmp-%build_flavor
192 # sle11-ga
193 Obsoletes:      enic-kmp-%build_flavor
194 Obsoletes:      fnic-kmp-%build_flavor
195 Obsoletes:      brocade-bfa-kmp-%build_flavor
196 Obsoletes:      kvm-kmp-%build_flavor
197 # 11.1
198 Obsoletes:      quickcam-kmp-%build_flavor < 0.6.7
199
200 # Provide the exported symbols as "ksym(symbol) = hash"
201 %define __find_provides %_sourcedir/find-provides %name
202
203 # Will modules not listed in supported.conf abort the kernel build (0/1)?
204 %define supported_modules_check 0
205
206 %description
207 @DESCRIPTION@
208
209 %source_timestamp
210
211 %prep
212 if ! [ -e %_sourcedir/linux-%srcversion.tar.bz2 ]; then
213     echo "The %name-%version.nosrc.rpm package does not contain the" \
214          "complete sources. Please install kernel-source-%version.src.rpm."
215     exit 1
216 fi
217
218 SYMBOLS=%name
219 if test -e %_sourcedir/extra-symbols; then
220         SYMBOLS="$SYMBOLS $(cat %_sourcedir/extra-symbols)"
221 fi
222 echo "Symbol(s):" $SYMBOLS
223
224 # Unpack all sources and patches
225 %setup -q -c -T -a 0 -a 100 -a 101 -a 102 -a 103 -a 104 -a 105 -a 107 -a 108 -a 109 -a 110 -a 111 -a 112 -a 113 -a 120
226
227 mkdir -p %kernel_build_dir
228
229 supported_conf() {
230         %_sourcedir/guards $* < %_sourcedir/supported.conf | \
231         sed 's,.*/,,; s,\.ko$,,' | sort -u
232 }
233
234 # Generate the list of modules to be marked as supported
235 {   supported_conf base
236     supported_conf --default=0 external | sed 's/$/ external/'
237 } > %kernel_build_dir/Module.supported
238 supported_conf --default=0 base >%kernel_build_dir/Module.base
239
240 cd linux-%srcversion
241
242 # Apply patches
243 echo "trap 'echo \"*** patch \$_ failed ***\"' ERR" >../apply-patches.sh
244 %_sourcedir/guards $SYMBOLS <%_sourcedir/series.conf | \
245 %if %build_vanilla
246     egrep '^patches\.(kernel\.org|rpmify)/' | \
247 %endif
248     sed 's:^:patch -s -F0 -E -p1 --no-backup-if-mismatch -i ../:' \
249     >>../apply-patches.sh
250 bash -ex ../apply-patches.sh
251
252 cd %kernel_build_dir
253
254 if [ -f %_sourcedir/localversion ] ; then
255     cat %_sourcedir/localversion > localversion
256 fi
257
258 cp ../config/%cpu_arch_flavor .config
259 %build_src_dir/scripts/config \
260         --set-str CONFIG_LOCALVERSION -%release_major-%build_flavor \
261         --enable  CONFIG_SUSE_KERNEL \
262 %if 0%{?__debug_package:1}
263         --enable  CONFIG_DEBUG_INFO
264 %else
265         --disable CONFIG_DEBUG_INFO
266 %endif
267
268 MAKE_ARGS="$MAKE_ARGS -C %build_src_dir O=$PWD"
269 if test -e %_sourcedir/TOLERATE-UNKNOWN-NEW-CONFIG-OPTIONS; then
270     yes '' | make oldconfig $MAKE_ARGS
271 else
272     cp .config .config.orig
273     make silentoldconfig $MAKE_ARGS < /dev/null
274     %_sourcedir/check-for-config-changes .config.orig .config
275     rm .config.orig
276 fi
277
278 make prepare $MAKE_ARGS
279 make scripts $MAKE_ARGS
280 krel=$(make -s kernelrelease $MAKE_ARGS)
281
282 if [ "$krel" != "%kernelrelease-%build_flavor" ]; then
283     echo "Kernel release mismatch: $krel != %kernelrelease-%build_flavor" >&2
284     exit 1
285 fi
286
287 make clean $MAKE_ARGS
288
289 rm -f source
290 find . ! -type d -printf '%%P\n' > %my_builddir/obj-files
291
292 cat > .kernel-binary.spec.buildenv <<EOF
293 # Override the timestamp 'uname -v' reports with the build
294 # timestamp.
295 export KBUILD_BUILD_VERSION="$(grep SHA1_ID %_sourcedir/source-timestamp | awk '{ print $2 }')"
296 export KBUILD_BUILD_TIMESTAMP="$(head -n 1 %_sourcedir/source-timestamp)"
297
298 # The following branch/timestamp will end up in Oopses.
299 export OOPS_TIMESTAMP="$(
300     echo -n $(sed -ne 's/^GIT Branch: \(.*\)/\1-/p' \
301                   %_sourcedir/source-timestamp)
302     head -n 1 %_sourcedir/source-timestamp \
303         | tr -dc 0-9)"
304
305 export KBUILD_VERBOSE=0
306 export KBUILD_SYMTYPES=1
307 export KBUILD_OVERRIDE=1
308 EOF
309
310 %build
311 cd %kernel_build_dir
312 source .kernel-binary.spec.buildenv
313
314 # create *.symref files in the tree
315 if test -e %my_builddir/kabi/%cpu_arch/symtypes-%build_flavor; then
316     %_sourcedir/modversions --unpack . < $_
317 fi
318
319 # If the %jobs macro is defined to a number, make will spawn that many jobs.
320 # There are several ways how to define it:
321 # If you are using the build script:
322 #     build --jobs=N kernel-$flavor.spec
323 # With plain rpmbuild:
324 #     rpmbuild -ba --define 'jobs N' kernel-$flavor.spec
325 # To spawn as many jobs as there are cpu cores:
326 #     rpmbuild -ba --define "jobs 0$(grep -c ^processor /proc/cpuinfo)" \
327 #         kernel-$flavor.spec
328 # You can also set this permanently in ~/.rpmmacros:
329 #     %jobs 0%(grep -c ^processor /proc/cpuinfo)
330 %if %CONFIG_KMSG_IDS == "y"
331     chmod +x scripts/kmsg-doc
332     make %{?jobs:-j%jobs} all $MAKE_ARGS CONFIG_DEBUG_SECTION_MISMATCH=y D=2
333 %else
334     make %{?jobs:-j%jobs} all $MAKE_ARGS CONFIG_DEBUG_SECTION_MISMATCH=y
335 %endif
336
337
338 %install
339
340 # get rid of /usr/lib/rpm/brp-strip-debug
341 # strip removes too much from the vmlinux ELF binary
342 export NO_BRP_STRIP_DEBUG=true
343
344 # /lib/modules/%kernelrelease-%build_flavor/build will be a stale symlink until the
345 # kernel-source package is installed. Don't check for stale symlinks
346 # in the brp-symlink check:
347 export NO_BRP_STALE_LINK_ERROR=yes
348
349 cd %kernel_build_dir
350
351 mkdir -p %buildroot/boot
352 # (Could strip out non-public symbols.)
353 cp -p System.map %buildroot/boot/System.map-%kernelrelease-%build_flavor
354
355 %define extract_vmlinux_debuginfo 0
356 %if 0%{?__debug_package:1}
357 %ifnarch ppc ppc64
358 %define extract_vmlinux_debuginfo 1
359 %endif
360 %endif
361
362 add_vmlinux()
363 {
364     local vmlinux=boot/vmlinux-%kernelrelease-%build_flavor
365 %if %extract_vmlinux_debuginfo
366     local vmlinux_debug=usr/lib/debug/$vmlinux.debug
367     mkdir -p $(dirname %buildroot/$vmlinux_debug)
368     cp vmlinux %buildroot/$vmlinux
369     /usr/lib/rpm/debugedit -b $RPM_BUILD_DIR -d /usr/src/debug \
370                            -l vmlinux.sourcefiles %buildroot/$vmlinux
371     # FIXME: create and package build-id symlinks
372     objcopy --only-keep-debug \
373             %buildroot/$vmlinux \
374             %buildroot/$vmlinux_debug || :
375     objcopy --add-gnu-debuglink=%buildroot/$vmlinux_debug \
376             --strip-debug \
377             %buildroot/$vmlinux || :
378     mkdir -p %buildroot/usr/src/debug
379     LANG=C sort -z -u vmlinux.sourcefiles | grep -Ezv "<(built-in|stdin)>" \
380         | ( cd %_builddir && cpio -pd0m %buildroot/usr/src/debug )
381     find %buildroot/usr/src/debug -type d -print0 | xargs -0 -r chmod 0755
382     find %buildroot/usr/src/debug -type f -print0 | xargs -0 -r chmod 0644
383     echo -e "%%defattr(-, root, root)\\n/$vmlinux_debug" >%my_builddir/vmlinux.debug.files
384 %else
385     cp vmlinux %buildroot/$vmlinux
386 %endif
387     if [ "$1" = --compressed ]; then
388         gzip -9 %buildroot/$vmlinux
389         chmod a-x %buildroot/$vmlinux.gz
390     fi
391 }
392
393 %if %build_kdump
394     add_vmlinux
395     chmod 644 %buildroot/boot/vmlinux-%kernelrelease-%build_flavor
396     image=vmlinux
397 %else
398
399 # architecture specifics
400 %ifarch %ix86 x86_64
401     add_vmlinux --compressed
402 %if %build_xen
403     image=vmlinuz
404 %else
405     image=bzImage
406 %endif
407     cp -p arch/x86/boot/$image %buildroot/boot/vmlinuz-%kernelrelease-%build_flavor
408     image=vmlinuz
409 %endif
410 %ifarch alpha
411     add_vmlinux --compressed
412     cp -p arch/alpha/boot/vmlinux.gz %buildroot/boot/vmlinuz-%kernelrelease-%build_flavor
413     image=vmlinuz
414 %endif
415 %ifarch ppc ppc64
416     add_vmlinux
417     chmod 644 %buildroot/boot/vmlinux-%kernelrelease-%build_flavor
418     image=vmlinux
419 %endif
420 %ifarch ia64
421     add_vmlinux --compressed
422     mv %buildroot/boot/vmlinux-%kernelrelease-%build_flavor.gz \
423        %buildroot/boot/vmlinuz-%kernelrelease-%build_flavor
424     image=vmlinuz
425 %endif
426 %ifarch s390 s390x
427     add_vmlinux --compressed
428     cp -p arch/s390/boot/image %buildroot/boot/image-%kernelrelease-%build_flavor
429     image=image
430     if [ -x "$(which dwarfextract 2>/dev/null)" ] ; then
431         dwarfextract vmlinux %buildroot/boot/Kerntypes-%kernelrelease-%build_flavor || echo "dwarfextract failed ($?)"
432     fi
433 %if %CONFIG_KMSG_IDS == "y"
434     mkdir -p %buildroot/usr/share/man/man9
435     find man -name '*.9' -exec install -m 644 -D '{}' %buildroot/usr/share/man/man9/ ';'
436 %endif
437 %endif
438     if [ -e init/kerntypes.o ]; then
439         cp init/kerntypes.o %buildroot/boot/Kerntypes-%kernelrelease-%build_flavor
440     fi
441
442 # end of build_kdump
443 %endif
444
445 for sub in '-base' '' '-extra'; do
446     case "$sub" in
447     '-base') base_package=1 ;;
448 %if ! %split_base
449     '') base_package=1 ;;
450 %endif
451     *) base_package=0 ;;
452     esac
453     for script in preun postun pre post devel-pre devel-post; do
454         sed -e "s:@KERNELRELEASE@:%kernelrelease:g" \
455             -e "s:@IMAGE@:$image:g" \
456             -e "s:@FLAVOR""@:%build_flavor:g" \
457             -e "s:@SUBPACKAGE@:%name$sub:g" \
458             -e "s:@BASE_PACKAGE@:$base_package:g" \
459             -e "s:@RPM_VERSION_RELEASE@:%version-%release:g" \
460             -e "s:@RPM_TARGET_CPU@:%_target_cpu:g" \
461             -e "s:@CPU_ARCH_FLAVOR@:%cpu_arch_flavor:g" \
462             -e "s:@SRCVARIANT@:%variant:g" \
463             %_sourcedir/$script.sh > %my_builddir/$script$sub.sh
464     done
465 done
466
467
468 %if %build_kdump || %build_xen || %build_vanilla || %build_ps3
469 # keep this -suffix list in sync with post.sh and postun.sh
470 suffix=-%build_flavor
471 %endif
472 ln -s $image$suffix %buildroot/boot/$image$suffix
473 ln -s initrd$suffix %buildroot/boot/initrd$suffix
474
475 cp .config %buildroot/boot/config-%kernelrelease-%build_flavor
476
477 %if %install_vdso
478 # Install the unstripped vdso's that are linked in the kernel image
479 make vdso_install $MAKE_ARGS INSTALL_MOD_PATH=%buildroot
480 %endif
481
482 # Create a dummy initrd with roughly the size the real one will have.
483 # That way, YaST will know that this package requires some additional
484 # space in /boot.
485 dd if=/dev/zero of=%buildroot/boot/initrd-%kernelrelease-%build_flavor \
486         bs=1024 seek=2047 count=1
487
488 if [ %CONFIG_MODULES = y ]; then
489     mkdir -p %rpm_install_dir/%cpu_arch_flavor
490     mkdir -p %buildroot/usr/src/linux-obj/%cpu_arch
491     ln -s %build_flavor %buildroot/usr/src/linux-obj/%cpu_arch_flavor
492
493     gzip -c9 < Module.symvers > %buildroot/boot/symvers-%kernelrelease-%build_flavor.gz
494
495     make modules_install $MAKE_ARGS INSTALL_MOD_PATH=%buildroot
496
497     if ! %_sourcedir/check-supported-list \
498             %_sourcedir %buildroot/lib/modules/%kernelrelease-%build_flavor; then
499 %if %supported_modules_check
500         exit 1
501 %endif
502         echo "Consistency check error: please update supported.conf."
503     fi
504
505 %ifarch s390 s390x
506     if [ -x "$(which dwarfextract 2>/dev/null)" -a \
507         -f %buildroot/boot/Kerntypes-%kernelrelease-%build_flavor ] ; then
508         find %buildroot -name "*.ko" > kofiles.list
509         dwarfextract %buildroot/boot/Kerntypes-%kernelrelease-%build_flavor -C kofiles.list || echo "dwarfextract failed ($?)"
510     fi
511 %endif
512
513     # Also put the resulting file in %rpm_install_dir/%cpu_arch/%build_flavor
514     # so that kernel-source + kernel-%build_flavor is sufficient for building
515     # modules that have modversions as well.
516     mkdir -p %rpm_install_dir/%cpu_arch/%build_flavor
517     cp Module.symvers %rpm_install_dir/%cpu_arch/%build_flavor
518
519     # Table of types used in exported symbols (for modversion debugging).
520     %_sourcedir/modversions --pack . > %buildroot/boot/symtypes-%kernelrelease-%build_flavor
521     if [ -s %buildroot/boot/symtypes-%kernelrelease-%build_flavor ]; then
522         gzip -9 %buildroot/boot/symtypes-%kernelrelease-%build_flavor
523     else
524         rm -f %buildroot/boot/symtypes-%kernelrelease-%build_flavor
525     fi
526
527     # Some architecture's $(uname -m) output is different from the ARCH
528     # parameter that needs to be passed to kbuild. Create symlinks from
529     # $(uname -m) to the ARCH directory.
530     if [ ! -e %rpm_install_dir/%_target_cpu ]; then
531         ln -sf %cpu_arch %rpm_install_dir/%_target_cpu
532         ln -sf %cpu_arch %buildroot/usr/src/linux-obj/%_target_cpu
533     fi
534
535     # We were building in %my_builddir/linux-%srcversion, but the sources will
536     # later be installed in /usr/src/linux-%srcversion-%source_rel. Fix up the
537     # build symlink.
538     rm -f %buildroot/lib/modules/%kernelrelease-%build_flavor/{source,build}
539     ln -s %src_install_dir \
540         %buildroot/lib/modules/%kernelrelease-%build_flavor/source
541     ln -s %obj_install_dir/%cpu_arch/%build_flavor \
542         %buildroot/lib/modules/%kernelrelease-%build_flavor/build
543
544     # Abort if there are any undefined symbols
545     msg="$(/sbin/depmod -F %buildroot/boot/System.map-%kernelrelease-%build_flavor \
546                         -b %buildroot -ae %kernelrelease-%build_flavor 2>&1)"
547     if [ $? -ne 0 ] || echo "$msg" | grep  'needs unknown symbol'; then
548         exit 1
549     fi
550
551 %if %split_base
552     %_sourcedir/split-modules -d %buildroot \
553 %if ! %supported_modules_check
554         -i \
555 %endif
556         -o %my_builddir \
557         -b %kernel_build_dir/Module.base \
558         -s %kernel_build_dir/Module.supported
559 %if ! %split_extra
560     cat %my_builddir/unsupported-modules >>%my_builddir/main-modules
561 %endif
562
563 %else
564     (   cd %buildroot
565         find lib/modules/%kernelrelease-%build_flavor -type f -name '*.ko' -printf '/%%p\n'
566     ) > %my_builddir/base-modules
567 %endif
568
569     res=0
570     if test -e %my_builddir/kabi/%cpu_arch/symvers-%build_flavor; then
571         # check for kabi changes
572         %_sourcedir/kabi.pl --rules %my_builddir/kabi/severities \
573             %my_builddir/kabi/%cpu_arch/symvers-%build_flavor \
574             Module.symvers || res=$?
575     fi
576     if [ $res -ne 0 ]; then
577         if [ ! -e %my_builddir/kabi/%cpu_arch/ignore-%build_flavor -a \
578              ! -e %_sourcedir/IGNORE-KABI-BADNESS ]; then
579             echo "Create a file IGNORE-KABI-BADNESS in the kernel-source" \
580                  "directory to build this kernel even though its badness is" \
581                  "higher than allowed for an official kernel."
582            exit 1
583         fi
584     fi
585
586     tar cf - -T %my_builddir/obj-files | \
587         tar xf - -C %rpm_install_dir/%cpu_arch_flavor
588     # bnc#507084
589     find %rpm_install_dir/%cpu_arch_flavor/scripts -type f -perm -111 | \
590         while read f; do
591             case "$(file -b "$f")" in
592             ELF\ *\ executable*)
593                 strip "$f"
594             esac
595         done
596     # Replace the absolute with a relative path
597     sed -i "s,%build_src_dir,../../../linux-%kernelrelease%variant,g" \
598         %rpm_install_dir/%cpu_arch_flavor/Makefile
599     link=%rpm_install_dir/%cpu_arch_flavor/include2/asm
600     target=$(readlink "$link")
601     target=${target#%build_src_dir/}
602     rm "$link"
603     ln -s ../../../../linux-%kernelrelease%variant/"$target" "$link"
604 fi
605
606 add_dirs_to_filelist() {
607     sed -rn '
608         # print file name
609         p
610         # remove filelist macros
611         s:%%%%[a-z]+(\([^)]+\))? ?::g
612         # add %%%%dir prefix
613         s:^:%%%%dir :
614         # print all parents
615         :a
616             # skip directories owned by other packages
617             s:^%%%%dir (/boot|/etc|/lib/(modules|firmware)|/usr/src)/[^/]+$::
618             s:/[^/]+$::p
619         ta
620     ' "$@" | sort -u
621 }
622
623 # Collect the file lists.
624 shopt -s nullglob
625 > %my_builddir/kernel-devel.files
626 for file in %buildroot/boot/vmlinux-*.gz %buildroot/boot/symtypes* \
627                                 %buildroot/lib/modules/*/{build,source}; do
628         f=${file##%buildroot}
629         echo "$f" >> %my_builddir/kernel-devel.files
630 done
631
632 {   cd %buildroot
633     find boot \
634         \( -type l -o -name 'initrd-*' \) -printf '%%%%%%%%ghost /%%p\n' -o \
635         -type f -printf '/%%p\n'
636
637     # Add the auto-generated (by mkdumprd) kdump initrd to %ghost so that
638     # the file gets removed when uninstalling the kernel.
639     echo '%%%%ghost /boot/initrd-%kernelrelease-kdump'
640     touch $RPM_BUILD_ROOT/boot/initrd-%kernelrelease-kdump
641
642     if [ %CONFIG_MODULES = y ]; then
643         find lib/modules/%kernelrelease-%build_flavor \
644             -type d -o \
645             \( -path '*/modules.*' ! -path '*/modules.order' \
646              ! -path '*/modules.builtin' \) -printf '%%%%%%%%ghost /%%p\n' \
647                -o -name '*.ko' -prune -o -printf '/%%p\n'
648         cat %my_builddir/base-modules
649     fi
650     test -d lib/firmware/%kernelrelease-%build_flavor && \
651     find lib/firmware/%kernelrelease-%build_flavor \
652         -type d -o \
653         -printf '/%%p\n'
654     if [ -e .%_docdir/%name ]; then
655         echo "%%%%doc %_docdir/%name"
656     fi
657 } | sort -u >%my_builddir/tmp
658 cat %my_builddir/tmp %my_builddir/kernel-devel.files | sort | uniq -u | \
659     add_dirs_to_filelist >%my_builddir/kernel-base.files
660 rm %my_builddir/tmp
661
662 %if %split_base
663     add_dirs_to_filelist %my_builddir/main-modules \
664         > %my_builddir/kernel-main.files
665 %endif
666 %if %split_extra
667     add_dirs_to_filelist %my_builddir/unsupported-modules > %my_builddir/kernel-extra.files
668 %endif
669
670 # Hardlink duplicate files automatically (from package fdupes): It doesn't save
671 # much, but it keeps rpmlint from breaking the package build.
672 %fdupes $RPM_BUILD_ROOT
673
674 %preun -f preun.sh
675 %postun -f postun.sh
676 %pre -f pre.sh
677 %post -f post.sh
678
679
680 %if %split_base
681 %files -f kernel-main.files
682 %else
683 %files -f kernel-base.files
684 %endif
685 %defattr(-, root, root)
686
687 %package base
688 Summary:        @SUMMARY@ - base modules
689 License:        GPL v2 only
690 Group:          System/Kernel
691 Url:            http://www.kernel.org/
692 AutoReqProv:    on
693 Provides:       %name-base_%_target_cpu = %version-%release
694 Provides:       kernel-base = %version-%source_rel
695 Requires(pre):  coreutils awk
696 Requires(post): module-init-tools
697 Requires(post): perl-Bootloader
698 Requires(post): mkinitrd
699 %ifarch %ix86
700 Conflicts:      libc.so.6()(64bit)
701 %endif
702
703 %description base
704 @DESCRIPTION@
705
706 This package contains only the base modules, required in all installs.
707
708 %source_timestamp
709
710 %preun base -f preun-base.sh
711 %postun base -f postun-base.sh
712 %pre base -f pre-base.sh
713 %post base -f post-base.sh
714
715 %if %split_base
716 %files base -f kernel-base.files
717 %defattr(-, root, root)
718 %endif
719
720 %package extra
721 Summary:        @SUMMARY@ - Unsupported kernel modules
722 License:        GPL v2 only
723 Group:          System/Kernel
724 Url:            http://www.kernel.org/
725 AutoReqProv:    on
726 Provides:       %name-extra_%_target_cpu = %version-%release
727 Provides:       kernel-extra = %version-%source_rel
728 Requires:       %{name}_%_target_cpu = %version-%release
729 Requires(pre):  coreutils awk
730 Requires(post): module-init-tools
731 Requires(post): perl-Bootloader
732 Requires(post): mkinitrd
733 Supplements:    packageand(product(SUSE_SLED):%{name}_%_target_cpu)
734 %ifarch %ix86
735 Conflicts:      libc.so.6()(64bit)
736 %endif
737
738 %description extra
739 @DESCRIPTION@
740
741 This package contains additional modules not supported by Novell.
742
743 %source_timestamp
744
745 %preun extra -f preun-extra.sh
746 %postun extra -f postun-extra.sh
747 %pre extra -f pre-extra.sh
748 %post extra -f post-extra.sh
749
750 %if %split_extra
751 %files extra -f kernel-extra.files
752 %defattr(-, root, root)
753 %endif
754
755 %if %CONFIG_KMSG_IDS == "y"
756 %package man
757 Summary:        The collection of man pages generated by the kmsg script.
758 License:        GPL v2 only
759 Group:          System/Kernel
760
761 %description man
762 This package includes the man pages that have been generated from the
763 kmsg message documentation comments.
764
765 %source_timestamp
766
767 %files man
768 %defattr(-,root,root)
769 /usr/share/man/man9/*
770 %endif
771
772 %package devel
773 Summary:        Development files necessary for building kernel modules
774 License:        GPL v2 only
775 Group:          Development/Sources
776 Provides:       %name-devel = %version-%source_rel
777 Requires:       kernel-source%variant = %version-%source_rel
778 AutoReqProv:    on
779
780 %description devel
781 This package contains files necessary for building kernel modules (and
782 kernel module packages) against the %build_flavor flavor of the kernel.
783
784 %source_timestamp
785
786 %if %CONFIG_MODULES == "y"
787 %pre devel -f devel-pre.sh
788 %post devel -f devel-post.sh
789 %files devel -f kernel-devel.files
790 %defattr(-,root,root)
791 %dir %obj_install_dir
792 %dir %obj_install_dir/%cpu_arch
793 %dir /usr/src/linux-obj
794 %dir /usr/src/linux-obj/%cpu_arch
795 %ghost /usr/src/linux-obj/%cpu_arch_flavor
796 %obj_install_dir/%cpu_arch_flavor
797 %if %_target_cpu != %cpu_arch
798 %obj_install_dir/%_target_cpu
799 /usr/src/linux-obj/%_target_cpu
800 %endif
801 %endif
802
803 %package devel-debuginfo
804 # rpm doesn't notice that vmlinux.debug belongs to the gzipped vmlinux.gz
805 Summary:        Debug information for package %name-devel
806 License:        GPL v2 only
807 Group:          Development/Debug
808
809 %description devel-debuginfo
810 Debug information for package %name-devel
811
812 %source_timestamp
813
814 %if %extract_vmlinux_debuginfo
815 %files devel-debuginfo -f vmlinux.debug.files
816 %endif
817
818 %changelog