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