Whamcloud - gitweb
b=12599
[fs/lustre-release.git] / build / lustre-kernel-2.4.spec.in
1 Summary: The Linux kernel (the core of the Linux operating system)
2
3 # Versions of various parts
4
5 #
6 # Polite request for people who spin their own kernel rpms:
7 # please modify the "release" field in a way that identifies
8 # that the kernel isn't the stock RHL kernel, for example by
9 # adding some text to the end of the version number.
10 #
11 %define kversion @KERNEL_VERSION@
12 %define kextraver @KERNEL_EXTRA_VERSION@
13 %define release @KERNEL_RELEASE@
14 # /usr/src/%{kslnk} -> /usr/src/linux-%{KVERREL}
15 %define kslnk linux-2.4
16
17 # groups of related archs
18 %define all_x86 i386 i686 i586 athlon
19 #define all_x86 i686 i386 i586 athlon
20
21 %define nptlarchs %{all_x86}
22 #define nptlarchs noarch
23 %define rhbuild @RHBUILD@
24 %define susebuild @SUSEBUILD@
25 %define linux26 @LINUX26@
26
27 # disable build root strip policy
28 %define __spec_install_post /usr/lib/rpm/brp-compress || :
29 #
30 # RPM foo magic
31 %define _missing_doc_files_terminate_build 0
32 %define _unpackaged_files_terminate_build 0
33 %define debug_package %{nil}
34
35 # Enable this to build a board-specific kernel configuration 
36 # some architectures have LOTS of different setups and this 
37 # is a way to deal with that cleanly.
38 #
39 #define targetboard assabet
40 %define dashtargetboard %{?targetboard:-%{targetboard}}
41 %define withtargetboard 0
42 %{?targetboard: %{expand: %%define withtargetboard 1}}
43         
44 # Override generic defaults with per-arch defaults (which can
45 # themselves be overridden with --with/--without).  These must
46 # ONLY be "0", never "1"
47
48 %define buildbase 0
49 %define buildbigmem 0
50 %define buildBOOT 0
51 %define buildjensen 0
52 %define buildsmp 0
53 %define buildbigsmp 0
54 %define buildpseries64 0
55 %define buildup 0
56 %define buildsrc 0
57
58 %ifarch @BASE_ARCHS@
59 %define buildbase 1
60 %endif
61
62 %ifarch @BIGMEM_ARCHS@
63 %define buildbigmem 1
64 %endif
65
66 %ifarch @BOOT_ARCHS@
67 %define buildBOOT 1
68 %endif
69
70 %ifarch @JENSEN_ARCHS@
71 %define buildjensen 1
72 %endif
73
74 %ifarch @SMP_ARCHS@
75 %define buildsmp 1
76 %endif
77
78 %ifarch @BIGSMP_ARCHS@
79 %define buildbigsmp 1
80 %endif
81
82 %ifarch @PSERIES64_ARCHS@
83 %define buildpseries64 1
84 %endif
85
86 %ifarch @UP_ARCHS@
87 %define buildup 1
88 %endif
89
90 # For board-specific kernels, build only the normal kernel (which may actually be smp, not up).
91 %if %{withtargetboard}
92 %define buildsmp 0
93 %define buildbigsmp 0
94 %define buildBOOT 0
95 %define buildbigmem 0
96 %define buildpseries64 0
97 %define buildjensen 0
98 %endif
99
100 %if 0
101 Second, per-architecture exclusions (ifarch)
102 %ifarch i386
103 %define buildsmp 0
104 %endif
105 %ifarch ia64
106 %define buildBOOT 0
107 %endif
108 %endif
109
110 # we can't test values inline, only whether a macro exists
111 %{expand: %%define buildup_%{buildup} yadda}
112 %{expand: %%define buildsmp_%{buildsmp} yadda}
113 %{expand: %%define buildbigsmp_%{buildbigsmp} yadda}
114 %{expand: %%define buildpseries64_%{buildpseries64} yadda}
115 %{expand: %%define buildBOOT_%{buildBOOT} yadda}
116 %{expand: %%define buildbigmem_%{buildbigmem} yadda}
117 %{expand: %%define buildjensen_%{buildjensen} yadda}
118 %{expand: %%define ikd_%{ikd} yadda}
119 %{expand: %%define ibcs_%{ibcs} yadda}
120 %{expand: %%define debuglevel_%{debugging} yadda}
121
122 %{expand: %%define kernel_conflicts  ppp <= 2.3.15, pcmcia-cs <= 3.1.20, isdn4k-utils <= 3.0, mount < 2.10r-5, nfs-utils < 0.3.1, cipe < 1.4.5, tux < 2.1.0, kudzu <= 0.92, e2fsprogs < 1.22, initscripts < 5.84, dev < 3.2-7, iptables < 1.2.5-3, bcm5820 < 1.81, nvidia-rh72 <= 1.0, oprofile < 0.4}
123
124 %if %{rhbuild}
125 %define BOOT_kernel_prereq fileutils, modutils >=  2.4.18
126 %define kernel_prereq %{BOOT_kernel_prereq}, initscripts >= 5.83, mkinitrd >= 3.2.6
127 %endif
128
129 %ifarch ia64
130 %define initrd_dir /boot/efi/redhat
131 %else
132 %define initrd_dir /boot
133 %endif
134
135 %ifarch %{all_x86} x86_64
136 %define kernel_glob vmlinu?-%{KVERREL}
137 %endif
138 %ifarch ia64
139 # <sigh>, no GLOB_BRACE for filelists, efi needs to be done separately
140 %define kernel_glob vmlinuz-%{KVERREL}
141 %endif
142 %ifarch alpha
143 %define kernel_glob vmlinu?-%{KVERREL}
144 %endif
145 %ifarch ppc ppc64
146 %define kernel_glob vmlinu?-%{KVERREL}
147 %endif
148
149 Name: kernel-lustre
150 Version: %{kversion}
151 Release: %{release}%{?targetboard:%{targetboard}}%{?debuglevel_1:.dbg}
152 %define KVERREL %{PACKAGE_VERSION}-%{kextraver}%{?targetboard:%{targetboard}}%{?debuglevel_1:.dbg}
153 License: GPL
154 Group: System Environment/Kernel
155 ExclusiveArch: %{all_x86} x86_64 ia64 ppc
156 ExclusiveOS: Linux
157 Obsoletes: kernel-modules, kernel-sparc
158 Provides: kernel = %{version}
159 BuildConflicts: rhbuildsys(DiscFree) < 500Mb
160 %ifarch %{all_x86} ia64 x86_64
161 Provides: kernel-drm = 4.1.0, kernel-drm = 4.2.0, kernel-drm = 4.3.0, kernel-drm = 4.2.99.3
162 %endif
163 Autoreqprov: no
164 %if %{rhbuild}
165 Prereq: %{kernel_prereq}
166 Conflicts: %{kernel_conflicts}
167
168 BuildPreReq: patch >= 2.5.4, bash >= 2.03, sh-utils, gnupg, tar
169 BuildPreReq: bzip2, findutils, dev, gzip, m4
170 %endif
171
172 Vendor: Cluster File Systems, Inc.
173 URL: http://www.kernel.org/
174 Buildroot: %{_tmppath}/%{name}-%{version}-root
175
176 Source0: @LUSTRE_SOURCE@
177 Source1: @KERNEL_SOURCE@
178 Source2: external-patches.tar.gz
179
180 Source15: linux-rhconfig.h
181 Source16: linux-merge-config.awk
182 Source17: linux-merge-modules.awk
183
184 Source25: suse-functions.sh
185 Source26: suse-post.sh
186 Source27: suse-postun.sh
187 Source28: suse-trigger-script.sh.in
188 Source29: sles8-post.sh
189 Source30: sles8-postun.sh
190 Source31: sles8-pre.sh
191 Source32: sles8-update_INITRD_MODULES.sh
192 Source33: sles8-update_rcfile_setting.sh
193
194 %package source
195 Summary: The source code for the Linux kernel.
196 Group: Development/System
197 Prereq: fileutils
198 Requires: gawk
199 Requires: gcc >= 2.96-98
200 Autoreqprov: 0
201
202 %package doc
203 Summary: Various documentation bits found in the kernel source.
204 Group: Documentation
205
206 %description
207 The kernel package contains the Linux kernel (vmlinuz), the core of a
208 Linux operating system.  The kernel handles the basic functions of the
209 operating system: memory allocation, process allocation, device input
210 and output, etc.
211
212 %description source
213 The kernel-source package contains the source code files for the Linux
214 kernel. These source files are needed to build custom/third party device
215 drivers. The source files can also be used to build a custom kernel that is
216 better tuned to your particular hardware, if you are so inclined (and you
217 know what you're doing).
218
219 %description doc
220 This package contains documentation files form the kernel
221 source. Various bits of information about the Linux kernel and the
222 device drivers shipped with it are documented in these files. 
223
224 You'll want to install this package if you need a reference to the
225 options that can be passed to Linux kernel modules at load time.
226
227 %package smp
228 Summary: The Linux kernel compiled for SMP machines.
229 Group: System Environment/Kernel
230 Provides: module-info, kernel = %{version}
231 %ifarch %{all_x86} ia64 x86_64
232 Provides: kernel-drm = 4.1.0, kernel-drm = 4.2.0, kernel-drm = 4.3.0, kernel-drm = 4.2.99.3
233 %endif
234 %if %{rhbuild}
235 Prereq: %{kernel_prereq}
236 Conflicts: %{kernel_conflicts}
237 %endif
238
239 %description smp
240 This package includes a SMP version of the Linux kernel. It is
241 required only on machines with two or more CPUs, although it should
242 work fine on single-CPU boxes.
243
244 Install the kernel-smp package if your machine uses two or more CPUs.
245
246 %package bigsmp
247 Summary: The Linux kernel compiled for SMP machines.
248 Group: System/Kernel
249 Provides: module-info, kernel = %{version}, k_smp4G
250 Obsoletes: k_smp4G
251 %ifarch %{all_x86} ia64 x86_64
252 Provides: kernel-drm = 4.1.0, kernel-drm = 4.2.0, kernel-drm = 4.3.0, kernel-drm = 4.2.99.3
253 %endif
254 %if %{rhbuild}
255 Prereq: %{kernel_prereq}
256 Conflicts: %{kernel_conflicts}
257 %endif
258
259 %description bigsmp
260 This package includes a SMP version of the Linux kernel. It is
261 required only on machines with two or more CPUs, although it should
262 work fine on single-CPU boxes.
263
264 Install the kernel-bigsmp package if your machine uses two or more CPUs.
265
266 %package pseries64
267 Summary: Standard Kernel for 64-bit Power based SMP and LPAR Machines
268 Group: System/Kernel
269 Provides: module-info, kernel = %{version}, k_smp4G
270 %ifarch %{all_x86} ia64 x86_64
271 Provides: kernel-drm = 4.1.0, kernel-drm = 4.2.0, kernel-drm = 4.3.0, kernel-drm = 4.2.99.3
272 %endif
273 %if %{rhbuild}
274 Prereq: %{kernel_prereq}
275 Conflicts: %{kernel_conflicts}
276 %endif
277
278 %description pseries64
279 The standard kernel for Power3, Power4 and PowerPC 970 64-bit SMP
280 machines.
281
282 This kernel can be used for all 64bit RS/6000, pSeries and JS20
283 machines.
284
285 %package bigmem
286 Summary: The Linux Kernel for machines with more than 4 Gigabyte of memory.
287 Group: System Environment/Kernel
288 Provides: module-info, kernel = %{version}
289 %ifarch %{all_x86} ia64 x86_64
290 Provides: kernel-drm = 4.1.0, kernel-drm = 4.2.0, kernel-drm = 4.3.0, kernel-drm = 4.2.99.3
291 %endif
292 %if %{rhbuild}
293 Prereq: %{kernel_prereq}
294 Conflicts: %{kernel_conflicts}
295 Obsoletes: kernel-enterprise <= 2.4.10
296 %endif
297
298 %description bigmem
299 This package includes a kernel that has appropriate configuration options
300 enabled for Pentium III machines with 4 Gigabyte of memory or more.
301
302 %package BOOT
303 Summary: The version of the Linux kernel used on installation boot disks.
304 Group: System Environment/Kernel
305 Provides: kernel = %{version}
306 %if %{rhbuild}
307 Prereq: %{BOOT_kernel_prereq}
308 Conflicts: %{kernel_conflicts}
309 %endif
310
311 %description BOOT
312 This package includes a trimmed down version of the Linux kernel.
313 This kernel is used on the installation boot disks only and should not
314 be used for an installed system, as many features in this kernel are
315 turned off because of the size constraints.
316
317 %package BOOTsmp
318 Summary: The Linux kernel used on installation boot disks for SMP machines.
319 Group: System Environment/Kernel
320 Provides: kernel = %{version}
321 %if %{rhbuild}
322 Prereq: %{BOOT_kernel_prereq}
323 Conflicts: %{kernel_conflicts}
324 %endif
325
326 %description BOOTsmp
327 This package includes a trimmed down version of the Linux kernel. This
328 kernel is used on the installation boot disks only and should not be used
329 for an installed system, as many features in this kernel are turned off
330 because of the size constraints. This kernel is used when booting SMP
331 machines that have trouble coming up to life with the uniprocessor kernel.
332
333 %package jensen
334 Summary: The Linux Kernel compiled for the Alpha Jensen platform.
335 Group: System Environment/Kernel
336 Provides: kernel = %{version}
337 %if %{rhbuild}
338 Prereq: %{kernel_prereq}
339 Conflicts: %{kernel_conflicts}
340 %endif
341
342 %description jensen
343 This package includes a kernel that has appropriate configuration
344 options enabled for use on the Alpha Jensen platform.  The Jensen
345 platform is not supported in the normal generic alpha kernel support.
346
347 %package -n lustre-lite-utils
348 Summary: Lustre utils for Linux
349 Group: Applications/System
350
351 %description -n lustre-lite-utils
352 The Lustre Lite file system utilities.  This includes the tools needed
353 to configure, mount, and administer a Lustre filesystem.  This package
354 is necessary if you want to access a Lustre filesystem.
355
356 # the lustre-doc files are just included as %doc with
357 # lustre-lite-utils
358
359 #%package -n lustre-doc
360 #Summary: Sample Lustre configurations and documentation
361 #Group: Documentation
362
363 #%description -n lustre-doc
364 #The Lustre book, sample configurations, and other documentation for
365 #Lustre.
366
367 # This is required in rpm >= 4.4.? and _should_ be set by the %setup macro
368 # but isn't, at least for 4.4.2.  Yay RPM.
369 %define buildsubdir lustre-kernel-%{version}
370 %define _buildsubdir lustre-kernel-%{version}
371
372 %prep
373 %setup -n lustre-kernel-%{version} -q -c
374 if [ ! -d lustre ] ; then
375     ln -sf lustre* lustre
376 fi
377 pushd lustre >/dev/null
378 if [ -s "%{SOURCE2}" ] ; then
379        tar zxf "%{SOURCE2}" -C lustre/kernel_patches
380 fi
381 sh -x ./build/lmake \
382         --unpack-kernel \
383         --target @LUSTRE_TARGET@ \
384         --target-arch %{_target_cpu} \
385         --kerneldir $RPM_SOURCE_DIR
386 popd >/dev/null
387
388 # handle both SuSE and Red Hat's new-kernel-pkg bits
389 for flavor in "" smp bigmem bigsmp pseries64 BOOT jensen ; do
390         for when in pre preun post postun ; do
391                 script="${when}${flavor}.sh"
392                 cat %{SOURCE25} %{SOURCE32} %{SOURCE33} > ${script}
393                 echo "if [ -d /etc/susehelp.d ] ; then" >> ${script}
394                 sed -e "s/@when@/$when/g" -e "s^%ver_str^%{KVERREL}${flavor}^g" %{SOURCE28} >> ${script}
395                 case $when in
396                         pre)
397                                 echo "if [ ! -f /etc/modprobe.conf ] ; then" >> ${script}
398                                 cat %{SOURCE31} >> ${script}
399                                 echo "fi" >> ${script}
400                                 ;;
401                         post)
402                                 # /sbin/update-modules.dep compares when the modules were built, rather
403                                 # than installed, so force modules.dep to be recreated
404                                 echo "rm -f /lib/modules/%{KVERREL}${flavor}/modules.dep" >> ${script}
405                                 echo "if [ -f /etc/modprobe.conf ] ; then" >> ${script}                 
406                                 sed -e "s^%ver_str^%{KVERREL}${flavor}^g" %{SOURCE26} >> ${script}
407
408                                 echo "else" >> ${script}
409                                 sed -e "s^%ver_str^%{KVERREL}${flavor}^g" -e "s^%%{cfg_name}^${flavor}^g" %{SOURCE29} >> ${script}
410                                 echo "fi" >> ${script}
411                                 ;;
412                         postun)
413                                 echo "if [ -f /etc/modprobe.conf ] ; then" >> ${script}                 
414                                 sed -e "s^%ver_str^%{KVERREL}${flavor}^g" %{SOURCE27} >> ${script}
415
416                                 echo "else" >> ${script}                        
417                                 sed -e "s^%ver_str^%{KVERREL}${flavor}^g" %{SOURCE30} >> ${script}
418                                 echo "fi" >> ${script}
419                                 ;;
420                 esac
421                 echo "exit 0; fi" >> ${script}
422                 case $when in
423                         post)
424                                 if [ -z "${flavor}" ] ; then
425                                         cat >> ${script} <<EOF
426 cd /boot
427 %ifnarch ia64 
428 ln -sf vmlinuz-%{KVERREL} vmlinuz
429 %endif
430 ln -sf System.map-%{KVERREL} System.map
431 ln -sf module-info-%{KVERREL} module-info
432 EOF
433                                 fi
434                                 cat >> ${script} <<EOF
435 [ -x /usr/sbin/module_upgrade ] && /usr/sbin/module_upgrade
436 [ -x /sbin/mkkerneldoth ] && /sbin/mkkerneldoth
437 if [ -x /sbin/new-kernel-pkg ] ; then
438         if /sbin/new-kernel-pkg 2>&1 | grep package >/dev/null ; then
439                 PACKAGE_ARG="--package kernel-${flavor}"
440         fi
441         /sbin/new-kernel-pkg $PACKAGE_ARG --mkinitrd --depmod \
442                 --install %{KVERREL}${flavor}
443 fi
444 EOF
445                                 ;;
446                         postun)
447                                 ;;
448                         pre)
449                                 cat >> ${script} <<EOF
450 /sbin/modprobe loop 2>/dev/null >/dev/null || :
451 exit 0
452 EOF
453                                 ;;
454                         preun)
455                                 cat >> ${script} <<EOF
456 /sbin/modprobe loop 2> /dev/null > /dev/null  || :
457 rm -f /lib/modules/%{KVERREL}${flavor}/modules.*
458 if [ -x /sbin/new-kernel-pkg ] ; then
459  /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{KVERREL}${flavor}
460 fi
461 EOF
462                                 ;;
463                 esac
464         done
465
466         cat > "kernel$flavor.files" <<EOF
467 %%defattr(-, root, root)
468 /boot/%{kernel_glob}${flavor}
469 /boot/System.map-%{KVERREL}${flavor}
470 /boot/config-%{KVERREL}${flavor}
471 %%dir /lib/modules
472 %%dir /dev/shm
473 /lib/modules/%{KVERREL}${flavor}
474 %ifarch ia64
475 /boot/efi/redhat/%{kernel_glob}${flavor}
476 %endif
477 %if %{linux26}
478 %if %{susebuild}
479 /boot/Kerntypes-%{KVERREL}${flavor}
480 %endif
481 /boot/symvers-%{KVERREL}-%{_target_cpu}${flavor}.gz
482 %endif
483 EOF
484
485 done
486
487 cat > kernel-source.files <<EOF
488 %%defattr(-,root,root)
489 %%dir /usr/src/linux-%{KVERREL}
490 /usr/src/linux-%{KVERREL}/*
491 %if %{linux26}
492 %%dir /usr/src/linux-%{KVERREL}-obj
493 /usr/src/linux-%{KVERREL}-obj/*
494 %endif
495 EOF
496
497 %build
498 # if RPM_BUILD_NCPUS unset, set it
499 if [ -z "$RPM_BUILD_NCPUS" ] ; then
500     RPM_BUILD_NCPUS=$(egrep -c "^cpu[0-9]+" /proc/stat || :)
501     if [ $RPM_BUILD_NCPUS -eq 0 ] ; then
502         RPM_BUILD_NCPUS=1
503     fi
504     if [ $RPM_BUILD_NCPUS -gt 8 ] ; then
505         RPM_BUILD_NCPUS=8
506     fi
507 fi
508
509 rm -rf $RPM_BUILD_ROOT
510 mkdir -p $RPM_BUILD_ROOT
511
512 DependKernel()
513 {
514   target_config=${1:+--target-config $1}
515   sh -x ./build/lmake \
516         --depend-kernel \
517         --target @LUSTRE_TARGET@ \
518         --target-arch %{_target_cpu} \
519         ${target_config} \
520         --extraversion %{kextraver} \
521         -j $RPM_BUILD_NCPUS
522 }
523
524 BuildKernel()
525 {
526   target_config=${1:+--target-config $1}
527   sh -x ./build/lmake \
528         --build-kernel --build-lustre \
529         --install \
530         --save-headers \
531         --target @LUSTRE_TARGET@ \
532         --target-arch %{_target_cpu} \
533         ${target_config} \
534         --extraversion %{kextraver} \
535         --kerneldir $RPM_SOURCE_DIR \
536         -j $RPM_BUILD_NCPUS \
537         --destdir $RPM_BUILD_ROOT \
538         -- --enable-tests \
539         @CONFIGURE_FLAGS@
540 }
541
542 BuildLustre()
543 {
544   target_config=${1:+--target-config $1}
545   sh -x ./build/lmake \
546         --build-lustre \
547         --install-lustre \
548         --target @LUSTRE_TARGET@ \
549         --target-arch %{_target_cpu} \
550         ${target_config} \
551         --extraversion %{kextraver} \
552         --kerneldir $RPM_SOURCE_DIR \
553         -j $RPM_BUILD_NCPUS \
554         --destdir $RPM_BUILD_ROOT \
555         -- --enable-utils \
556         --disable-doc --disable-tests \
557         --disable-modules --disable-liblustre \
558         --sysconfdir=%{_sysconfdir} \
559         --mandir=%{_mandir} \
560         @CONFIGURE_FLAGS@
561 }
562
563 SaveHeaders()
564 {
565   sh -x ./build/lmake \
566         --save-headers \
567         --target @LUSTRE_TARGET@ \
568         --target-arch %{_target_cpu} \
569         --extraversion %{kextraver} \
570         --destdir $RPM_BUILD_ROOT
571 }
572
573 pushd lustre >/dev/null
574
575 %if %{buildbigmem}
576 BuildKernel bigmem
577 %endif
578
579 %if %{buildBOOT}
580 BuildKernel BOOT
581 %endif
582
583 %if %{buildjensen}
584 BuildKernel jensen
585 %endif
586
587 %if %{buildsmp}
588 BuildKernel smp
589 %endif
590
591 %if %{buildbigsmp}
592 BuildKernel bigsmp
593 %endif
594
595 %if %{buildpseries64}
596 BuildKernel pseries64
597 %endif
598
599 %if %{buildup}
600 BuildKernel
601 %endif
602
603 %if %{buildbase}
604 # BuildLustre
605 %endif
606
607 popd >/dev/null
608
609 %install
610 pushd lustre >/dev/null
611 # it's already installed, so just clean up some things that are rpm
612 # specific
613 for i in $RPM_BUILD_ROOT/lib/modules/* ; do
614   rm -f $i/modules.*
615 %ifarch %{ntplarchs}
616   # remove legacy pcmcia symlink that's no longer useful
617   rm -rf $i/pcmcia
618 %endif
619 done
620
621 # mark the vmlinux* non-executable to fool strip-to-file
622 chmod a-x $RPM_BUILD_ROOT/boot/vmlinux*
623
624 BuildObj ()
625 {
626         flavor=$1
627         if [ $flavor = "up" ] ; then
628                 flavext=""
629                 flavtgt=""
630         else
631                 flavext="-$flavor"
632                 flavtgt="$flavor"
633         fi
634         perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -%{kextraver}${flavtgt}/" $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/Makefile
635         c="$RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}"
636         o="${c}-obj/%{_target_cpu}/$flavor"
637         mkdir -p $o
638         # use the one we just built
639         #cp ../lustre/kernel_patches/kernel_configs/kernel-%{kversion}-@LUSTRE_TARGET@-%{_target_cpu}%{dashtargetboard}${flavext}.config \
640         cp .config $o/.config
641         for oc in oldconfig_nonint silentoldconfig oldconfig ; do
642             if grep -q "$oc" Makefile ; then
643                 OLDCONFIG="$oc"
644                 break
645             fi
646         done
647         MAKE="make -s O=$o -C ${c}"
648         if [ "$CC" ] ; then
649             MAKE_CC="CC=$CC"
650         fi
651         $MAKE "$MAKE_CC" $OLDCONFIG
652         $MAKE "$MAKE_CC" prepare-all
653         $MAKE clean
654         rm -rf $o/.config.old $o/include/config
655         # Replace the Makefile in the object directory with a version
656         # that has relative path names.  This is done by fixing the Makefile
657         # after the fact to work with 2.6.17 and newer mkmakefile.
658         read VERSION PATCHLEVEL SUBLEVEL <<-EOF
659 $(set -- 2.6.5 ; echo ${*//./ })
660 EOF
661         rm -f $o/Makefile
662         source scripts/mkmakefile \
663             ../../../linux-%{KVERREL} \
664             $o \
665             $VERSION \
666             $PATCHLEVEL \
667             > $o/Makefile.in
668         if [ -f $o/Makefile ] ; then
669                 # will exist only for 2.6.17 and newer because mkmakefile
670                 # now writes the makefile to $o instead of stdout
671                 mv -f $o/Makefile $o/Makefile.in
672         fi
673         sed -e "s^$o^../linux-%{KVERREL}-obj/%{_target_cpu}/$flavor^" \
674                 $o/Makefile.in > $o/Makefile
675         zcat "$RPM_BUILD_ROOT/boot/symvers-%{KVERREL}-%{_target_cpu}${flavtgt}.gz" \
676             > $o/Module.symvers
677 }
678
679 ##
680 ## do -source package cleanup/install
681 ##
682 if [ "%{buildbase}" -ne 0 ] ; then
683     pushd linux >/dev/null
684     mkdir -p $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}
685     rm -f drivers/net/hamradio/soundmodem/gentbl scripts/mkdep
686     tar cf - . | tar xf - -C $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}
687     ln -sf linux-%{KVERREL} $RPM_BUILD_ROOT/usr/src/linux
688     # install -m 644 %{SOURCE10}  $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}
689
690     #clean up the destination
691     make -s mrproper -C $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}
692     rm -rf $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/configs
693     mkdir -p $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/configs
694     cp ../lustre/kernel_patches/kernel_configs/kernel-%{kversion}-@LUSTRE_TARGET@*.config $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/configs
695     if [ "%{linux26}" -ne 0 ] ; then
696         # this only works because CFS only builds one kernel per target/arch per kernel-source rpm
697         objdir=$RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}-obj
698         mkdir -p $objdir
699         if [ "%{buildbigmem}" -ne 0 ] ; then
700             BuildObj bigmem
701         fi
702         if [ "%{buildBOOT}" -ne 0 ] ; then
703             BuildObj BOOT
704         fi
705         if [ "%{buildjensen}" -ne 0 ] ; then
706             BuildObj jensen
707         fi
708         if [ "%{buildsmp}" -ne 0 ] ; then
709             BuildObj smp
710         fi
711         if [ "%{buildbigsmp}" -ne 0 ] ; then
712             BuildObj bigsmp
713         fi
714         if [ "%{buildpseries64}" -ne 0 ] ; then
715             BuildObj pseries64
716         fi
717         if [ "%{buildup}" -ne 0 ] ; then
718             BuildObj up
719         fi
720         perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -%{kextraver}custom/" $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/Makefile
721         # Remove $RPM_BUILD_ROOT prefix from symlinks.
722         for link in $(find $objdir -type l); do
723             target=$(readlink $link)
724             rm -f $link
725             ln -s ${target/$RPM_BUILD_ROOT/} $link
726         done
727     else # 2.4 rh-style
728         perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -%{kextraver}custom/" $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/Makefile
729         # get the one from the build we just completed as it might have picked
730         # up new options
731         #cp ../lustre/kernel_patches/kernel_configs/kernel-%{kversion}-@LUSTRE_TARGET@-%{_target_cpu}%{dashtargetboard}.config $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/.config
732         cp .config $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/.config
733         for oc in oldconfig_nonint silentoldconfig oldconfig ; do
734             if grep -q "$oc" $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/Makefile ; then
735                 OLDCONFIG="$oc"
736                 break
737             fi
738         done
739         if [ "$CC" ] ; then
740             MAKE_CC="CC=$CC"
741         fi
742         make "$MAKE_CC" -s $OLDCONFIG -C $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}
743         make "$MAKE_CC" -s symlinks -C $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}
744         make "$MAKE_CC" -s include/linux/version.h -C $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}
745
746         #this generates modversions info which we want to include and we may as
747         #well include the depends stuff as well, after we fix the paths
748         make -s depend -C $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}
749         find $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL} -name ".*depend" | \
750         while read file ; do
751             mv $file $file.old
752             sed -e "s|[^ ]*\(/usr/src/linux\)|\1|g" < $file.old > $file
753             rm -f $file.old
754         done
755
756         # Try to put some smarter autoconf.h and version.h files in place
757         pushd $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/include/linux ; {
758         rm -rf modules modversions.h autoconf.h version.h
759         cat > modversions.h <<EOF
760 #ifndef _LINUX_MODVERSIONS_H
761 #define _LINUX_MODVERSIONS_H
762 #include <linux/rhconfig.h>
763 #include <linux/modsetver.h>
764 EOF
765         echo '#include <linux/rhconfig.h>' > autoconf.h
766         list=`find ../../savedheaders/* -name '*.ver' -exec basename '{}' \; | sort`
767         mkdir modules
768         for l in $list; do
769             sed 's,$,modules/'$l, ../../savedheaders/list | awk -f %{SOURCE17} > modules/$l
770             touch -r modules/$l modules/`basename $l .ver`.stamp
771             echo '#include <linux/modules/'$l'>' >> modversions.h
772         done
773         echo '#endif' >> modversions.h
774         sed 's,$,autoconf.h,' ../../savedheaders/list | awk -f %{SOURCE16} >> autoconf.h
775         install -m 644 %{SOURCE15} rhconfig.h
776         echo "#include <linux/rhconfig.h>" >> version.h
777         keyword=if
778         for i in smp BOOT BOOTsmp bigmem bigsmp pseries64 up ; do
779             # When we build in an i386, we don't have an bigmem header directory
780             # in savedheaders/i386/bigmem.  We also don't have a BOOT directory
781             # anywhere except in savedheaders/i386.  So, we need to use this method
782             # of determining if a kernel version string needs to be included in the
783             # version.h file
784             verh=`echo ../../savedheaders/*/$i/version.h | awk ' { print $1 } '`
785             if [ -n "$verh" -a -f "$verh" ]; then
786                 if [ "$i" = up ]; then
787                     if [ "$keyword" = if ]; then
788                         echo "#if 0" >> version.h
789                     fi
790                     echo "#else" >> version.h
791                 else
792                     echo "#$keyword defined(__module__$i)" >> version.h
793                     keyword=elif
794                 fi
795                 grep UTS_RELEASE $verh >> version.h
796             fi
797             done
798         echo "#endif" >> version.h
799         if [ -f ../../savedheaders/%{_target_cpu}/up/version.h ] ; then
800             # keep to a standard normally
801             HEADER_FILE=../../savedheaders/%{_target_cpu}/up/version.h
802         else
803             # test build not including uniprocessor, must get info from somewhere
804             HEADER_FILE=$(ls ../../savedheaders/*/*/version.h | head -n 1)
805         fi
806         grep -v UTS_RELEASE $HEADER_FILE >> version.h
807         rm -rf ../../savedheaders
808         } ; popd
809         touch $RPM_BUILD_ROOT/boot/kernel.h-%{kversion}
810         
811         # rm -f $RPM_BUILD_ROOT/usr/include/linux
812         
813         rm -rf $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/savedheaders
814         
815         if [ "%{rhbuild}" -ne 0 ] ; then
816             # fix up the tmp_include_depends file wrt the buildroot
817             perl -p -i -e "s|$RPM_BUILD_ROOT||g" $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/tmp_include_depends
818         fi
819     fi # linux26
820     popd >/dev/null
821 fi # buildbase
822
823 popd >/dev/null
824
825 %clean
826 rm -rf $RPM_BUILD_ROOT
827
828 ###
829 ### scripts
830 ###
831
832 # do this for upgrades...in case the old modules get removed we have
833 # loopback in the kernel so that mkinitrd will work.
834 %pre -f pre.sh
835
836 %pre smp -f presmp.sh
837
838 %pre bigsmp -f prebigsmp.sh
839
840 %pre pseries64 -f prepseries64.sh
841
842 %pre bigmem -f prebigmem.sh
843
844 %post -f post.sh
845
846 %post pseries64 -f postpseries64.sh
847
848 %post smp -f postsmp.sh
849
850 %post bigsmp -f postbigsmp.sh
851
852 %post bigmem -f postbigmem.sh
853
854 %post jensen -f postjensen.sh
855
856 %ifnarch ia64
857 %post BOOT -f postBOOT.sh
858
859 %endif
860
861 %post -n lustre-lite-utils
862 if [ -f /etc/init.d/lustre ] ; then
863         /sbin/chkconfig --add lustre
864         /sbin/chkconfig --add lustrefs
865 fi
866
867 # Allow clean removal of modules directory
868 %preun -f preun.sh
869
870 %preun pseries64 -f preunpseries64.sh
871
872 %preun smp -f preunsmp.sh
873
874 %preun bigsmp -f preunbigsmp.sh
875
876 %preun bigmem -f preunbigmem.sh
877
878 %preun BOOT -f preunBOOT.sh
879
880 %preun jensen -f preunjensen.sh
881
882 # suse needs these i guess
883 %postun -f postun.sh
884
885 %postun pseries64 -f postunpseries64.sh
886
887 %postun smp -f postunsmp.sh
888
889 %postun bigsmp -f postunbigsmp.sh
890
891 %postun bigmem -f postunbigmem.sh
892
893 %postun BOOT -f postunBOOT.sh
894
895 %postun jensen -f postunjensen.sh
896
897 # We need this here because we don't prereq kudzu; it could be
898 # installed after the kernel
899 %triggerin -- kudzu
900 [ -x /usr/sbin/module_upgrade ] && /usr/sbin/module_upgrade || :
901
902 %triggerin smp -- kudzu
903 [ -x /usr/sbin/module_upgrade ] && /usr/sbin/module_upgrade || :
904
905 %triggerin bigsmp -- kudzu
906 [ -x /usr/sbin/module_upgrade ] && /usr/sbin/module_upgrade || :
907
908 %triggerin pseries64 -- kudzu
909 [ -x /usr/sbin/module_upgrade ] && /usr/sbin/module_upgrade || :
910
911 %triggerin bigmem -- kudzu
912 [ -x /usr/sbin/module_upgrade ] && /usr/sbin/module_upgrade || :
913
914 %triggerin BOOT -- kudzu
915 [ -x /usr/sbin/module_upgrade ] && /usr/sbin/module_upgrade || :
916
917 %triggerin jensen -- kudzu
918 [ -x /usr/sbin/module_upgrade ] && /usr/sbin/module_upgrade || :
919
920
921 # Old kernel-headers packages owned include symlinks; new
922 # ones just make them so that we can have multiple kernel-headers
923 # packages installed.
924
925 %triggerpostun source -- kernel-headers < 2.2.16
926 cd /usr/src
927 rm -f %{kslnk}
928 ln -snf linux-%{KVERREL} %{kslnk}
929 exit 0
930
931 %post source
932 cd /usr/src
933 rm -f %{kslnk}
934 ln -snf linux-%{KVERREL} %{kslnk}
935
936 %postun source
937 if [ -L /usr/src/%{kslnk} ]; then 
938     if [ -L /usr/src/%{kslnk} -a `ls -ld /usr/src/%{kslnk} 2>/dev/null| awk '{ print $11 }'` = "linux-%{KVERREL}" ]; then
939         [ $1 = 0 ] && rm -f /usr/src/%{kslnk}
940     fi
941 fi
942 exit 0
943
944 %preun -n lustre-lite-utils
945 if [ $1 = 0 -a -f /etc/init.d/lustre ]; then
946         /sbin/chkconfig --del lustre
947         /sbin/chkconfig --del lustrefs
948 fi
949
950 ###
951 ### file lists
952 ###
953
954 %if %{buildup}
955 %files -f kernel.files
956 %endif
957
958 %if %{buildsmp}
959 %files smp -f kernelsmp.files
960 %endif
961
962 %if %{buildbigsmp}
963 %files bigsmp -f kernelbigsmp.files
964 %endif
965
966 %if %{buildpseries64}
967 %files pseries64 -f kernelpseries64.files
968 %endif
969
970 %if %{buildbigmem}
971 %files bigmem -f kernelbigmem.files
972 %endif
973
974 %if %{buildBOOT}
975 %files BOOT -f kernelBOOT.files
976 %endif
977
978 %if %{buildbase}
979 %files source -f kernel-source.files
980 %endif