Whamcloud - gitweb
- checks for CRYPTO should not be depend on GSS, capa uses crypto as well.
[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 %prep
368 %setup -n lustre-kernel-%{version} -q -c
369 if [ ! -d lustre ] ; then
370     ln -sf lustre* lustre
371 fi
372 pushd lustre >/dev/null
373 if [ -s "%{SOURCE2}" ] ; then
374        tar zxf "%{SOURCE2}" -C lustre/kernel_patches
375 fi
376 sh -x ./build/lmake \
377         --unpack-kernel \
378         --target @LUSTRE_TARGET@ \
379         --target-arch %{_target_cpu} \
380         --kerneldir $RPM_SOURCE_DIR
381 popd >/dev/null
382
383 # handle both SuSE and Red Hat's new-kernel-pkg bits
384 for flavor in "" smp bigmem bigsmp pseries64 BOOT jensen ; do
385         for when in pre preun post postun ; do
386                 script="${when}${flavor}.sh"
387                 cat %{SOURCE25} %{SOURCE32} %{SOURCE33} > ${script}
388                 echo "if [ -d /etc/susehelp.d ] ; then" >> ${script}
389                 sed -e "s/@when@/$when/g" -e "s^%ver_str^%{KVERREL}${flavor}^g" %{SOURCE28} >> ${script}
390                 case $when in
391                         pre)
392                                 echo "if [ ! -f /etc/modprobe.conf ] ; then" >> ${script}
393                                 cat %{SOURCE31} >> ${script}
394                                 echo "fi" >> ${script}
395                                 ;;
396                         post)
397                                 # /sbin/update-modules.dep compares when the modules were built, rather
398                                 # than installed, so force modules.dep to be recreated
399                                 echo "rm -f /lib/modules/%{KVERREL}${flavor}/modules.dep" >> ${script}
400                                 echo "if [ -f /etc/modprobe.conf ] ; then" >> ${script}                 
401                                 sed -e "s^%ver_str^%{KVERREL}${flavor}^g" %{SOURCE26} >> ${script}
402
403                                 echo "else" >> ${script}
404                                 sed -e "s^%ver_str^%{KVERREL}${flavor}^g" -e "s^%%{cfg_name}^${flavor}^g" %{SOURCE29} >> ${script}
405                                 echo "fi" >> ${script}
406                                 ;;
407                         postun)
408                                 echo "if [ -f /etc/modprobe.conf ] ; then" >> ${script}                 
409                                 sed -e "s^%ver_str^%{KVERREL}${flavor}^g" %{SOURCE27} >> ${script}
410
411                                 echo "else" >> ${script}                        
412                                 sed -e "s^%ver_str^%{KVERREL}${flavor}^g" %{SOURCE30} >> ${script}
413                                 echo "fi" >> ${script}
414                                 ;;
415                 esac
416                 echo "exit 0; fi" >> ${script}
417                 case $when in
418                         post)
419                                 if [ -z "${flavor}" ] ; then
420                                         cat >> ${script} <<EOF
421 cd /boot
422 %ifnarch ia64 
423 ln -sf vmlinuz-%{KVERREL} vmlinuz
424 %endif
425 ln -sf System.map-%{KVERREL} System.map
426 ln -sf module-info-%{KVERREL} module-info
427 EOF
428                                 fi
429                                 cat >> ${script} <<EOF
430 [ -x /usr/sbin/module_upgrade ] && /usr/sbin/module_upgrade
431 [ -x /sbin/mkkerneldoth ] && /sbin/mkkerneldoth
432 if [ -x /sbin/new-kernel-pkg ] ; then
433         if /sbin/new-kernel-pkg 2>&1 | grep package >/dev/null ; then
434                 PACKAGE_ARG="--package kernel-${flavor}"
435         fi
436         /sbin/new-kernel-pkg $PACKAGE_ARG --mkinitrd --depmod \
437                 --install %{KVERREL}${flavor}
438 fi
439 EOF
440                                 ;;
441                         postun)
442                                 ;;
443                         pre)
444                                 cat >> ${script} <<EOF
445 /sbin/modprobe loop 2>/dev/null >/dev/null || :
446 exit 0
447 EOF
448                                 ;;
449                         preun)
450                                 cat >> ${script} <<EOF
451 /sbin/modprobe loop 2> /dev/null > /dev/null  || :
452 rm -f /lib/modules/%{KVERREL}${flavor}/modules.*
453 if [ -x /sbin/new-kernel-pkg ] ; then
454  /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{KVERREL}${flavor}
455 fi
456 EOF
457                                 ;;
458                 esac
459         done
460
461         cat > "kernel$flavor.files" <<EOF
462 %%defattr(-, root, root)
463 /boot/%{kernel_glob}${flavor}
464 /boot/System.map-%{KVERREL}${flavor}
465 /boot/config-%{KVERREL}${flavor}
466 %%dir /lib/modules
467 %%dir /dev/shm
468 /lib/modules/%{KVERREL}${flavor}
469 %ifarch ia64
470 /boot/efi/redhat/%{kernel_glob}${flavor}
471 %endif
472 %if %{linux26}
473 %if %{susebuild}
474 /boot/Kerntypes-%{KVERREL}${flavor}
475 %endif
476 /boot/symvers-%{KVERREL}-%{_target_cpu}${flavor}.gz
477 %endif
478 EOF
479
480 done
481
482 cat > kernel-source.files <<EOF
483 %%defattr(-,root,root)
484 %%dir /usr/src/linux-%{KVERREL}
485 /usr/src/linux-%{KVERREL}/*
486 %if %{linux26}
487 %%dir /usr/src/linux-%{KVERREL}-obj
488 /usr/src/linux-%{KVERREL}-obj/*
489 %endif
490 EOF
491
492 %build
493 # if RPM_BUILD_NCPUS unset, set it
494 if [ -z "$RPM_BUILD_NCPUS" ] ; then
495     RPM_BUILD_NCPUS=$(egrep -c "^cpu[0-9]+" /proc/stat || :)
496     if [ $RPM_BUILD_NCPUS -eq 0 ] ; then
497         RPM_BUILD_NCPUS=1
498     fi
499     if [ $RPM_BUILD_NCPUS -gt 8 ] ; then
500         RPM_BUILD_NCPUS=8
501     fi
502 fi
503
504 rm -rf $RPM_BUILD_ROOT
505 mkdir -p $RPM_BUILD_ROOT
506
507 DependKernel()
508 {
509   target_config=${1:+--target-config $1}
510   sh -x ./build/lmake \
511         --depend-kernel \
512         --target @LUSTRE_TARGET@ \
513         --target-arch %{_target_cpu} \
514         ${target_config} \
515         --extraversion %{kextraver} \
516         -j $RPM_BUILD_NCPUS
517 }
518
519 BuildKernel()
520 {
521   target_config=${1:+--target-config $1}
522   sh -x ./build/lmake \
523         --build-kernel --build-lustre \
524         --install \
525         --save-headers \
526         --target @LUSTRE_TARGET@ \
527         --target-arch %{_target_cpu} \
528         ${target_config} \
529         --extraversion %{kextraver} \
530         --kerneldir $RPM_SOURCE_DIR \
531         -j $RPM_BUILD_NCPUS \
532         --destdir $RPM_BUILD_ROOT \
533         -- --disable-tests \
534         @CONFIGURE_FLAGS@
535 }
536
537 BuildLustre()
538 {
539   target_config=${1:+--target-config $1}
540   sh -x ./build/lmake \
541         --build-lustre \
542         --install-lustre \
543         --target @LUSTRE_TARGET@ \
544         --target-arch %{_target_cpu} \
545         ${target_config} \
546         --extraversion %{kextraver} \
547         --kerneldir $RPM_SOURCE_DIR \
548         -j $RPM_BUILD_NCPUS \
549         --destdir $RPM_BUILD_ROOT \
550         -- --enable-utils \
551         --disable-doc --disable-tests \
552         --disable-modules --disable-liblustre \
553         --sysconfdir=%{_sysconfdir} \
554         --mandir=%{_mandir} \
555         @CONFIGURE_FLAGS@
556 }
557
558 SaveHeaders()
559 {
560   sh -x ./build/lmake \
561         --save-headers \
562         --target @LUSTRE_TARGET@ \
563         --target-arch %{_target_cpu} \
564         --extraversion %{kextraver} \
565         --destdir $RPM_BUILD_ROOT
566 }
567
568 pushd lustre >/dev/null
569
570 %if %{buildbigmem}
571 BuildKernel bigmem
572 %endif
573
574 %if %{buildBOOT}
575 BuildKernel BOOT
576 %endif
577
578 %if %{buildjensen}
579 BuildKernel jensen
580 %endif
581
582 %if %{buildsmp}
583 BuildKernel smp
584 %endif
585
586 %if %{buildbigsmp}
587 BuildKernel bigsmp
588 %endif
589
590 %if %{buildpseries64}
591 BuildKernel pseries64
592 %endif
593
594 %if %{buildup}
595 BuildKernel
596 %endif
597
598 %if %{buildbase}
599 # BuildLustre
600 %endif
601
602 popd >/dev/null
603
604 %install
605 pushd lustre >/dev/null
606 # it's already installed, so just clean up some things that are rpm
607 # specific
608 for i in $RPM_BUILD_ROOT/lib/modules/* ; do
609   rm -f $i/modules.*
610 %ifarch %{ntplarchs}
611   # remove legacy pcmcia symlink that's no longer useful
612   rm -rf $i/pcmcia
613 %endif
614 done
615
616 # mark the vmlinux* non-executable to fool strip-to-file
617 chmod a-x $RPM_BUILD_ROOT/boot/vmlinux*
618
619 BuildObj ()
620 {
621         flavor=$1
622         if [ $flavor = "up" ] ; then
623                 flavext=""
624                 flavtgt=""
625         else
626                 flavext="-$flavor"
627                 flavtgt="$flavor"
628         fi
629         perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -%{kextraver}${flavtgt}/" $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/Makefile
630         c="$RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}"
631         o="${c}-obj/%{_target_cpu}/$flavor"
632         mkdir -p $o
633         # use the one we just built
634         #cp ../lustre/kernel_patches/kernel_configs/kernel-%{kversion}-@LUSTRE_TARGET@-%{_target_cpu}%{dashtargetboard}${flavext}.config \
635         cp .config $o/.config
636         for oc in oldconfig_nonint silentoldconfig oldconfig ; do
637             if grep -q "$oc" Makefile ; then
638                 OLDCONFIG="$oc"
639                 break
640             fi
641         done
642         MAKE="make -s O=$o -C ${c}"
643         if [ "$CC" ] ; then
644             MAKE_CC="CC=$CC"
645         fi
646         $MAKE "$MAKE_CC" $OLDCONFIG
647         $MAKE "$MAKE_CC" prepare-all
648         $MAKE clean
649         rm -rf $o/.config.old $o/include/config
650         # Replace the Makefile in the object directory with a version
651         # that has relative path names.
652         read VERSION PATCHLEVEL SUBLEVEL <<-EOF
653 $(set -- 2.6.5 ; echo ${*//./ })
654 EOF
655         source scripts/mkmakefile \
656             ../../../linux-%{KVERREL} \
657             ../linux-%{KVERREL}-obj/%{_target_cpu}/$flavor \
658             $VERSION \
659             $PATCHLEVEL \
660             > $o/Makefile
661         zcat "$RPM_BUILD_ROOT/boot/symvers-%{KVERREL}-%{_target_cpu}${flavtgt}.gz" \
662             > $o/Module.symvers
663 }
664
665 ##
666 ## do -source package cleanup/install
667 ##
668 if [ "%{buildbase}" -ne 0 ] ; then
669     pushd linux >/dev/null
670     mkdir -p $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}
671     rm -f drivers/net/hamradio/soundmodem/gentbl scripts/mkdep
672     tar cf - . | tar xf - -C $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}
673     ln -sf linux-%{KVERREL} $RPM_BUILD_ROOT/usr/src/linux
674     # install -m 644 %{SOURCE10}  $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}
675
676     #clean up the destination
677     make -s mrproper -C $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}
678     rm -rf $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/configs
679     mkdir -p $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/configs
680     cp ../lustre/kernel_patches/kernel_configs/kernel-%{kversion}-@LUSTRE_TARGET@*.config $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/configs
681     if [ "%{linux26}" -ne 0 ] ; then
682         # this only works because CFS only builds one kernel per target/arch per kernel-source rpm
683         objdir=$RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}-obj
684         mkdir -p $objdir
685         if [ "%{buildbigmem}" -ne 0 ] ; then
686             BuildObj bigmem
687         fi
688         if [ "%{buildBOOT}" -ne 0 ] ; then
689             BuildObj BOOT
690         fi
691         if [ "%{buildjensen}" -ne 0 ] ; then
692             BuildObj jensen
693         fi
694         if [ "%{buildsmp}" -ne 0 ] ; then
695             BuildObj smp
696         fi
697         if [ "%{buildbigsmp}" -ne 0 ] ; then
698             BuildObj bigsmp
699         fi
700         if [ "%{buildpseries64}" -ne 0 ] ; then
701             BuildObj pseries64
702         fi
703         if [ "%{buildup}" -ne 0 ] ; then
704             BuildObj up
705         fi
706         perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -%{kextraver}custom/" $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/Makefile
707         # Remove $RPM_BUILD_ROOT prefix from symlinks.
708         for link in $(find $objdir -type l); do
709             target=$(readlink $link)
710             rm -f $link
711             ln -s ${target/$RPM_BUILD_ROOT/} $link
712         done
713     else # 2.4 rh-style
714         perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -%{kextraver}custom/" $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/Makefile
715         # get the one from the build we just completed as it might have picked
716         # up new options
717         #cp ../lustre/kernel_patches/kernel_configs/kernel-%{kversion}-@LUSTRE_TARGET@-%{_target_cpu}%{dashtargetboard}.config $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/.config
718         cp .config $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/.config
719         for oc in oldconfig_nonint silentoldconfig oldconfig ; do
720             if grep -q "$oc" $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/Makefile ; then
721                 OLDCONFIG="$oc"
722                 break
723             fi
724         done
725         if [ "$CC" ] ; then
726             MAKE_CC="CC=$CC"
727         fi
728         make "$MAKE_CC" -s $OLDCONFIG -C $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}
729         make "$MAKE_CC" -s symlinks -C $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}
730         make "$MAKE_CC" -s include/linux/version.h -C $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}
731
732         #this generates modversions info which we want to include and we may as
733         #well include the depends stuff as well, after we fix the paths
734         make -s depend -C $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}
735         find $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL} -name ".*depend" | \
736         while read file ; do
737             mv $file $file.old
738             sed -e "s|[^ ]*\(/usr/src/linux\)|\1|g" < $file.old > $file
739             rm -f $file.old
740         done
741
742         # Try to put some smarter autoconf.h and version.h files in place
743         pushd $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/include/linux ; {
744         rm -rf modules modversions.h autoconf.h version.h
745         cat > modversions.h <<EOF
746 #ifndef _LINUX_MODVERSIONS_H
747 #define _LINUX_MODVERSIONS_H
748 #include <linux/rhconfig.h>
749 #include <linux/modsetver.h>
750 EOF
751         echo '#include <linux/rhconfig.h>' > autoconf.h
752         list=`find ../../savedheaders/* -name '*.ver' -exec basename '{}' \; | sort`
753         mkdir modules
754         for l in $list; do
755             sed 's,$,modules/'$l, ../../savedheaders/list | awk -f %{SOURCE17} > modules/$l
756             touch -r modules/$l modules/`basename $l .ver`.stamp
757             echo '#include <linux/modules/'$l'>' >> modversions.h
758         done
759         echo '#endif' >> modversions.h
760         sed 's,$,autoconf.h,' ../../savedheaders/list | awk -f %{SOURCE16} >> autoconf.h
761         install -m 644 %{SOURCE15} rhconfig.h
762         echo "#include <linux/rhconfig.h>" >> version.h
763         keyword=if
764         for i in smp BOOT BOOTsmp bigmem bigsmp pseries64 up ; do
765             # When we build in an i386, we don't have an bigmem header directory
766             # in savedheaders/i386/bigmem.  We also don't have a BOOT directory
767             # anywhere except in savedheaders/i386.  So, we need to use this method
768             # of determining if a kernel version string needs to be included in the
769             # version.h file
770             verh=`echo ../../savedheaders/*/$i/version.h | awk ' { print $1 } '`
771             if [ -n "$verh" -a -f "$verh" ]; then
772                 if [ "$i" = up ]; then
773                     if [ "$keyword" = if ]; then
774                         echo "#if 0" >> version.h
775                     fi
776                     echo "#else" >> version.h
777                 else
778                     echo "#$keyword defined(__module__$i)" >> version.h
779                     keyword=elif
780                 fi
781                 grep UTS_RELEASE $verh >> version.h
782             fi
783             done
784         echo "#endif" >> version.h
785         if [ -f ../../savedheaders/%{_target_cpu}/up/version.h ] ; then
786             # keep to a standard normally
787             HEADER_FILE=../../savedheaders/%{_target_cpu}/up/version.h
788         else
789             # test build not including uniprocessor, must get info from somewhere
790             HEADER_FILE=$(ls ../../savedheaders/*/*/version.h | head -n 1)
791         fi
792         grep -v UTS_RELEASE $HEADER_FILE >> version.h
793         rm -rf ../../savedheaders
794         } ; popd
795         touch $RPM_BUILD_ROOT/boot/kernel.h-%{kversion}
796         
797         # rm -f $RPM_BUILD_ROOT/usr/include/linux
798         
799         rm -rf $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/savedheaders
800         
801         if [ "%{rhbuild}" -ne 0 ] ; then
802             # fix up the tmp_include_depends file wrt the buildroot
803             perl -p -i -e "s|$RPM_BUILD_ROOT||g" $RPM_BUILD_ROOT/usr/src/linux-%{KVERREL}/tmp_include_depends
804         fi
805     fi # linux26
806     popd >/dev/null
807 fi # buildbase
808
809 popd >/dev/null
810
811 %clean
812 rm -rf $RPM_BUILD_ROOT
813
814 ###
815 ### scripts
816 ###
817
818 # do this for upgrades...in case the old modules get removed we have
819 # loopback in the kernel so that mkinitrd will work.
820 %pre -f pre.sh
821
822 %pre smp -f presmp.sh
823
824 %pre bigsmp -f prebigsmp.sh
825
826 %pre pseries64 -f prepseries64.sh
827
828 %pre bigmem -f prebigmem.sh
829
830 %post -f post.sh
831
832 %post pseries64 -f postpseries64.sh
833
834 %post smp -f postsmp.sh
835
836 %post bigsmp -f postbigsmp.sh
837
838 %post bigmem -f postbigmem.sh
839
840 %post jensen -f postjensen.sh
841
842 %ifnarch ia64
843 %post BOOT -f postBOOT.sh
844
845 %endif
846
847 %post -n lustre-lite-utils
848 if [ -f /etc/init.d/lustre ] ; then
849         /sbin/chkconfig --add lustre
850         /sbin/chkconfig --add lustrefs
851 fi
852
853 # Allow clean removal of modules directory
854 %preun -f preun.sh
855
856 %preun pseries64 -f preunpseries64.sh
857
858 %preun smp -f preunsmp.sh
859
860 %preun bigsmp -f preunbigsmp.sh
861
862 %preun bigmem -f preunbigmem.sh
863
864 %preun BOOT -f preunBOOT.sh
865
866 %preun jensen -f preunjensen.sh
867
868 # suse needs these i guess
869 %postun -f postun.sh
870
871 %postun pseries64 -f postunpseries64.sh
872
873 %postun smp -f postunsmp.sh
874
875 %postun bigsmp -f postunbigsmp.sh
876
877 %postun bigmem -f postunbigmem.sh
878
879 %postun BOOT -f postunBOOT.sh
880
881 %postun jensen -f postunjensen.sh
882
883 # We need this here because we don't prereq kudzu; it could be
884 # installed after the kernel
885 %triggerin -- kudzu
886 [ -x /usr/sbin/module_upgrade ] && /usr/sbin/module_upgrade || :
887
888 %triggerin smp -- kudzu
889 [ -x /usr/sbin/module_upgrade ] && /usr/sbin/module_upgrade || :
890
891 %triggerin bigsmp -- kudzu
892 [ -x /usr/sbin/module_upgrade ] && /usr/sbin/module_upgrade || :
893
894 %triggerin pseries64 -- kudzu
895 [ -x /usr/sbin/module_upgrade ] && /usr/sbin/module_upgrade || :
896
897 %triggerin bigmem -- kudzu
898 [ -x /usr/sbin/module_upgrade ] && /usr/sbin/module_upgrade || :
899
900 %triggerin BOOT -- kudzu
901 [ -x /usr/sbin/module_upgrade ] && /usr/sbin/module_upgrade || :
902
903 %triggerin jensen -- kudzu
904 [ -x /usr/sbin/module_upgrade ] && /usr/sbin/module_upgrade || :
905
906
907 # Old kernel-headers packages owned include symlinks; new
908 # ones just make them so that we can have multiple kernel-headers
909 # packages installed.
910
911 %triggerpostun source -- kernel-headers < 2.2.16
912 cd /usr/src
913 rm -f %{kslnk}
914 ln -snf linux-%{KVERREL} %{kslnk}
915 exit 0
916
917 %post source
918 cd /usr/src
919 rm -f %{kslnk}
920 ln -snf linux-%{KVERREL} %{kslnk}
921
922 %postun source
923 if [ -L /usr/src/%{kslnk} ]; then 
924     if [ -L /usr/src/%{kslnk} -a `ls -ld /usr/src/%{kslnk} 2>/dev/null| awk '{ print $11 }'` = "linux-%{KVERREL}" ]; then
925         [ $1 = 0 ] && rm -f /usr/src/%{kslnk}
926     fi
927 fi
928 exit 0
929
930 %preun -n lustre-lite-utils
931 if [ $1 = 0 -a -f /etc/init.d/lustre ]; then
932         /sbin/chkconfig --del lustre
933         /sbin/chkconfig --del lustrefs
934 fi
935
936 ###
937 ### file lists
938 ###
939
940 %if %{buildup}
941 %files -f kernel.files
942 %endif
943
944 %if %{buildsmp}
945 %files smp -f kernelsmp.files
946 %endif
947
948 %if %{buildbigsmp}
949 %files bigsmp -f kernelbigsmp.files
950 %endif
951
952 %if %{buildpseries64}
953 %files pseries64 -f kernelpseries64.files
954 %endif
955
956 %if %{buildbigmem}
957 %files bigmem -f kernelbigmem.files
958 %endif
959
960 %if %{buildBOOT}
961 %files BOOT -f kernelBOOT.files
962 %endif
963
964 %if %{buildbase}
965 %files source -f kernel-source.files
966 %endif