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