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