workaround a broken install target in iwlwifi
[linux-2.6.git] / kernel-2.6.spec
1 #
2 # $Id$
3 #
4 %define url $URL$
5
6 Summary: The Linux kernel (the core of the Linux operating system)
7
8 # What parts do we want to build?  We must build at least one kernel.
9 # These are the kernels that are built IF the architecture allows it.
10
11 %define buildup 1
12 %define builduml 0
13 %define buildxen 0
14 %define builddoc 0
15
16 # Versions of various parts
17
18 # for module-tag.py - sublevel is used for the version (middle) part of tag names
19 %define name linux-2.6
20 %define module_version_varname sublevel
21 %define taglevel 1
22
23 #
24 # Polite request for people who spin their own kernel rpms:
25 # please modify the "release" field in a way that identifies
26 # that the kernel isn't the stock distribution kernel, for example by
27 # adding some text to the end of the version number.
28 #
29 %define sublevel 22
30 %define patchlevel 14
31 %define kversion 2.6.%{sublevel}
32 %define rpmversion 2.6.%{sublevel}%{?patchlevel:.%{patchlevel}}
33
34 %define vsversion 2.3.0.29
35
36 # Will go away when VServer supports NetNS in mainline. Currently, it must be 
37 # updated every time the PL kernel is updated.
38 %define vini_pl_patch 561
39
40 %define release vs%{vsversion}.%{taglevel}%{?pldistro:.%{pldistro}}%{?date:.%{date}}
41
42 %{!?pldistro:%global pldistro planetlab}
43
44 %define signmodules 0
45 %define make_target bzImage
46 %define KVERREL %{PACKAGE_VERSION}-%{PACKAGE_RELEASE}
47
48 # Override generic defaults with per-arch defaults
49
50 %define image_install_path boot
51
52 #
53 # Three sets of minimum package version requirements in the form of Conflicts:
54 # to versions below the minimum
55 #
56
57 #
58 # First the general kernel 2.6 required versions as per
59 # Documentation/Changes
60 #
61 %define kernel_dot_org_conflicts  ppp <= 2.3.15, pcmcia-cs <= 3.1.20, isdn4k-utils <= 3.0, mount < 2.10r-5, nfs-utils < 1.0.3, e2fsprogs < 1.29, util-linux < 2.10, jfsutils < 1.0.14, reiserfsprogs < 3.6.3, xfsprogs < 2.1.0, procps < 2.0.9, oprofile < 0.5.3
62
63
64 # Then a series of requirements that are distribution specific, either 
65 # because we add patches for something, or the older versions have 
66 # problems with the newer kernel or lack certain things that make 
67 # integration in the distro harder than needed.
68 #
69 %define package_conflicts  cipe < 1.4.5, kudzu <= 0.92, initscripts < 7.23, dev < 3.2-7, iptables < 1.2.5-3, bcm5820 < 1.81, nvidia-rh72 <= 1.0 selinux-policy-targeted < 1.23.16-1
70
71 #
72 # Several packages had bugs in them that became obvious when the NPTL
73 # threading code got integrated.
74 #
75 %define nptl_conflicts SysVinit < 2.84-13, pam < 0.75-48, vixie-cron < 3.0.1-73, privoxy < 3.0.0-8, spamassassin < 2.44-4.8.x,  cups < 1.1.17-13
76
77 #
78 # The ld.so.conf.d file we install uses syntax older ldconfig's don't grok.
79 #
80
81 # MEF commented out
82 # %define xen_conflicts glibc < 2.3.5-1
83
84 #
85 # Packages that need to be installed before the kernel is, because the %post
86 # scripts use them.
87 #
88 %define kernel_prereq  fileutils, module-init-tools, initscripts >= 5.83, mkinitrd >= 3.5.5
89
90 Vendor: PlanetLab
91 Packager: PlanetLab Central <support@planet-lab.org>
92 Distribution: PlanetLab %{plrelease}
93 URL: %(echo %{url} | cut -d ' ' -f 2)
94
95 Name: kernel
96 Group: System Environment/Kernel
97 License: GPLv2
98 Version: %{rpmversion}
99 Release: %{release}
100 ExclusiveOS: Linux
101 Provides: kernel = %{version}
102 Provides: kernel-drm = 4.3.0
103 Provides: kernel-%{_target_cpu} = %{rpmversion}-%{release}
104 Provides: kernel-smp = %{rpmversion}-%{release}
105 Provides: kernel-smp-%{_target_cpu} = %{rpmversion}-%{release}
106 Prereq: %{kernel_prereq}
107 Conflicts: %{kernel_dot_org_conflicts}
108 Conflicts: %{package_conflicts}
109 Conflicts: %{nptl_conflicts}
110 # We can't let RPM do the dependencies automatic because it'll then pick up
111 # a correct but undesirable perl dependency from the module headers which
112 # isn't required for the kernel proper to function
113 AutoReqProv: no
114
115 #
116 # List the packages used during the kernel build
117 #
118 BuildPreReq: module-init-tools, patch >= 2.5.4, bash >= 2.03, sh-utils, tar
119 BuildPreReq: bzip2, findutils, gzip, m4, perl, make >= 3.78, gnupg, diffutils
120 BuildRequires: gcc >= 3.3.3, binutils >= 2.12, redhat-rpm-config
121 BuildConflicts: rhbuildsys(DiskFree) < 500Mb
122
123
124 Source0: ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-%{kversion}.tar.bz2
125
126 Source10: %{pldistro}-%{kversion}-i586.config
127 Source11: %{pldistro}-%{kversion}-i686.config
128 Source12: %{pldistro}-%{kversion}-x86_64.config
129 %if %{builduml}
130 Source20: %{pldistro}-%{kversion}-i686-uml.config
131 %endif
132 %if %{buildxen}
133 Source30: %{pldistro}-%{kversion}-i686-xenU.config
134 %endif
135
136 # Mainline patches
137 %if "0%{patchlevel}"
138 Patch000: ftp://ftp.kernel.org/pub/linux/kernel/v2.6/patch-%{rpmversion}.bz2
139 %endif
140
141 Patch010: linux-2.6-010-e1000e.patch
142 Patch020: linux-2.6-020-build-id.patch
143 Patch030: linux-2.6-030-netns.patch
144
145 # These are patches picked up from Fedora/RHEL
146 Patch100: linux-2.6-100-build-nonintconfig.patch
147
148 # Linux-VServer
149 Patch200: patch-%{rpmversion}-vs%{vsversion}.diff
150
151 # IP sets
152 Patch250: linux-2.6-250-ipsets.patch
153
154 # PlanetLab
155 Patch500: linux-2.6-500-vserver-filesharing.patch
156 Patch510: linux-2.6-510-ipod.patch
157 Patch520: linux-2.6-520-vnet+.patch
158 Patch530: linux-2.6-530-built-by-support.patch
159 Patch540: linux-2.6-540-oom-kill.patch
160 Patch550: linux-2.6-550-raise-default-nfile-ulimit.patch
161 Patch560: linux-2.6-560-mmconf.patch
162 Patch570: linux-2.6-570-tagxid.patch
163
164 # See also the file named 'sources' here for the related checksums
165 %define mac80211_version 10.0.4
166 Patch600: http://intellinuxwireless.org/mac80211/downloads/mac80211-%{mac80211_version}.tgz
167 %define iwlwifi_version 1.2.23
168 Patch601: http://intellinuxwireless.org/iwlwifi/downloads/iwlwifi-%{iwlwifi_version}.tgz
169
170 BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root
171
172 %description
173 The kernel package contains the Linux kernel (vmlinuz), the core of any
174 Linux operating system.  The kernel handles the basic functions
175 of the operating system:  memory allocation, process allocation, device
176 input and output, etc.
177
178 %package devel
179 Summary: Development package for building kernel modules to match the kernel.
180 Group: System Environment/Kernel
181 AutoReqProv: no
182 Provides: kernel-devel-%{_target_cpu} = %{rpmversion}-%{release}
183 Provides: kernel-smp-devel = %{rpmversion}-%{release}
184 Provides: kernel-smp-devel-%{_target_cpu} = %{rpmversion}-%{release}
185 Prereq: /usr/bin/find
186
187 %description devel
188 This package provides kernel headers and makefiles sufficient to build modules
189 against the kernel package.
190
191
192 %package doc
193 Summary: Various documentation bits found in the kernel source.
194 Group: Documentation
195
196 %description doc
197 This package contains documentation files from the kernel
198 source. Various bits of information about the Linux kernel and the
199 device drivers shipped with it are documented in these files.
200
201 You'll want to install this package if you need a reference to the
202 options that can be passed to Linux kernel modules at load time.
203
204 %package xenU
205 Summary: The Linux kernel compiled for unprivileged Xen guest VMs
206
207 Group: System Environment/Kernel
208 Provides: kernel = %{version}
209 Provides: kernel-%{_target_cpu} = %{rpmversion}-%{release}xenU
210 Prereq: %{kernel_prereq}
211 Conflicts: %{kernel_dot_org_conflicts}
212 Conflicts: %{package_conflicts}
213 Conflicts: %{nptl_conflicts}
214
215 # MEF commented out 
216 # Conflicts: %{xen_conflicts}
217
218 # We can't let RPM do the dependencies automatic because it'll then pick up
219 # a correct but undesirable perl dependency from the module headers which
220 # isn't required for the kernel proper to function
221 AutoReqProv: no
222
223 %description xenU
224 This package includes a version of the Linux kernel which
225 runs in Xen unprivileged guest VMs.  This should be installed
226 both inside the unprivileged guest (for the modules) and in
227 the guest0 domain.
228
229 %package xenU-devel
230 Summary: Development package for building kernel modules to match the kernel.
231 Group: System Environment/Kernel
232 AutoReqProv: no
233 Provides: kernel-xenU-devel-%{_target_cpu} = %{rpmversion}-%{release}
234 Provides: kernel-devel-%{_target_cpu} = %{rpmversion}-%{release}xenU
235 Provides: kernel-devel = %{rpmversion}-%{release}xenU
236 Prereq: /usr/sbin/hardlink, /usr/bin/find
237
238 %description xenU-devel
239 This package provides kernel headers and makefiles sufficient to build modules
240 against the kernel package.
241
242 %package uml
243 Summary: The Linux kernel compiled for use in user mode (User Mode Linux).
244
245 Group: System Environment/Kernel
246
247 %description uml
248 This package includes a user mode version of the Linux kernel.
249
250 %package uml-devel
251 Summary: Development package for building kernel modules to match the UML kernel.
252 Group: System Environment/Kernel
253 Provides: kernel-uml-devel-%{_target_cpu} = %{rpmversion}-%{release}
254 Provides: kernel-devel-%{_target_cpu} = %{rpmversion}-%{release}smp
255 Provides: kernel-devel = %{rpmversion}-%{release}smp
256 AutoReqProv: no
257 Prereq: /usr/sbin/hardlink, /usr/bin/find
258
259 %description uml-devel
260 This package provides kernel headers and makefiles sufficient to build modules
261 against the User Mode Linux kernel package.
262
263 %package uml-modules
264 Summary: The Linux kernel modules compiled for use in user mode (User Mode Linux).
265
266 Group: System Environment/Kernel
267
268 %description uml-modules
269 This package includes a user mode version of the Linux kernel modules.
270
271 %package vserver
272 Summary: A placeholder RPM that provides kernel and kernel-drm
273
274 Group: System Environment/Kernel
275 Provides: kernel = %{version}
276 Provides: kernel-drm = 4.3.0
277 Provides: kernel-%{_target_cpu} = %{rpmversion}-%{release}
278
279 %description vserver
280 VServers do not require and cannot use kernels, but some RPMs have
281 implicit or explicit dependencies on the "kernel" package
282 (e.g. tcpdump). This package installs no files but provides the
283 necessary dependencies to make rpm and yum happy.
284
285
286 %prep
287 # First we unpack the kernel tarball.
288 # If this isn't the first make prep, we use links to the existing clean tarball
289 # which speeds things up quite a bit.
290 if [ ! -d kernel-%{kversion}/vanilla ]; then
291   # Ok, first time we do a make prep.
292   rm -f pax_global_header
293 %setup -q -n %{name}-%{kversion} -c
294   mv linux-%{kversion} vanilla
295 else
296   # We already have a vanilla dir.
297   cd kernel-%{kversion}
298 fi
299
300 KERNEL_PREVIOUS=vanilla
301 # Dark RPM-magic to apply each patch to a hardlinked copy of the tree.
302 %define ApplyPatch() \
303   rm -fr linux-%{kversion}-%1                           \
304   cp -al $KERNEL_PREVIOUS linux-%{kversion}-%1          \
305   patchflag=-p1                                         \
306   test "%2" != "%%2" && patchflag="%2"                  \
307   PATCH="%{expand:%{PATCH%1}}"                          \
308   if test ! -e "$PATCH"; then                           \
309     echo "Patch %1 does not exist!"                     \
310     exit 1                                              \
311   fi                                                    \
312   case "$PATCH" in                                      \
313     *.bz2)  bzcat "$PATCH";;                            \
314     *.gz)   zcat "$PATCH";;                             \
315     *)      cat "$PATCH";;                              \
316   esac | patch -F1 -s -d linux-%{kversion}-%1 $patchflag \
317   KERNEL_PREVIOUS=linux-%{kversion}-%1
318
319 # This is where the patches get applied
320 %if "0%{patchlevel}"
321 %ApplyPatch 0
322 %endif
323
324 %ApplyPatch 10
325 %ApplyPatch 20
326
327 # NetNS patch for VINI
328 %if 0%{?with_netns}
329 %ApplyPatch 30
330 %endif
331
332 %ApplyPatch 100
333
334 %ApplyPatch 200
335
336 %ApplyPatch 250
337
338 %ApplyPatch 500
339 %ApplyPatch 510
340 %ApplyPatch 520
341 %ApplyPatch 530
342 %ApplyPatch 540
343 %ApplyPatch 550
344 %ApplyPatch 560
345 %ApplyPatch 570
346
347 # NetNS conflict-resolving patch for VINI. Will work with patch vini_pl_patch-1 but may
348 # break with later patches.
349
350 %if 0%{?with_netns}
351 %ApplyPatch %vini_pl_patch
352 %endif
353
354 # Run the mac80211 stuff in the kernel tree holding the last patch
355 tar -xzf %{expand:%{PATCH600}}
356 pushd mac80211-%{mac80211_version}
357 mac80211_makeflags="KSRC=../$KERNEL_PREVIOUS"
358 make $mac80211_makeflags modified
359 make $mac80211_makeflags source
360 make $mac80211_makeflags patch_kernel
361 popd
362
363 # Untar iwlwifi in the same place - needs to be compiled later
364 tar -xzf %{expand:%{PATCH601}}
365 # the install target is broken: first it does not pass the right -b flag to depmod
366 # second we do not need to invoke depmod at this stage anyway
367 # let's add our own patch/stuff in this Makefile for manual install later on
368 pushd iwlwifi-%{iwlwifi_version}
369 cat >> Makefile <<EOF
370 module-list:
371         @echo \$(addprefix \$(DIR),\$(addsuffix .ko,\$(list-m)))
372 EOF
373 popd
374
375 rm -fr linux-%{kversion}
376 ln -sf $KERNEL_PREVIOUS linux-%{kversion}
377 cd linux-%{kversion}
378
379
380 # make sure the kernel has the sublevel we know it has. This looks weird
381 # but for -pre and -rc versions we need it since we only want to use
382 # the higher version when the final kernel is released.
383 perl -p -i -e "s/^SUBLEVEL.*/SUBLEVEL = %{sublevel}/" Makefile
384 perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -prep/" Makefile
385
386 # get rid of unwanted files resulting from patch fuzz
387 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
388
389
390 ###
391 ### build
392 ###
393 %build
394
395 BuildKernel() {
396     MakeTarget=$1
397     Arch=$2
398     Flavour=$3
399
400     rm -rf linux-%{_target_cpu}-%{kversion}$Flavour
401     cp -rl linux-%{kversion}/ linux-%{_target_cpu}-%{kversion}$Flavour
402     cd linux-%{_target_cpu}-%{kversion}$Flavour
403
404     # Pick the right config file for the kernel we're building
405     if [ -n "$Flavour" ] ; then
406       Config=%{pldistro}-%{kversion}-%{_target_cpu}-$Flavour.config
407       DevelDir=/usr/src/kernels/%{KVERREL}-$Flavour-%{_target_cpu}
408       DevelLink=/usr/src/kernels/%{KVERREL}$Flavour-%{_target_cpu}
409     else
410       Config=%{pldistro}-%{kversion}-%{_target_cpu}.config
411       DevelDir=/usr/src/kernels/%{KVERREL}-%{_target_cpu}
412       DevelLink=
413     fi
414
415     KernelVer=%{version}-%{release}$Flavour
416     echo BUILDING A KERNEL FOR $Flavour %{_target_cpu}...
417
418     # make sure EXTRAVERSION says what we want it to say
419     perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = %{?patchlevel:.%{patchlevel}}-%{release}$Flavour/" Makefile
420
421     # and now to start the build process
422
423     make -s mrproper
424     cp %{_sourcedir}/$Config .config
425
426     #Arch=`head -1 .config | cut -b 3-`
427     echo USING ARCH=$Arch
428
429     make -s ARCH=$Arch nonint_oldconfig > /dev/null
430     make -s ARCH=$Arch %{?_smp_mflags} $MakeTarget
431     make -s ARCH=$Arch %{?_smp_mflags} modules || exit 1
432
433     # build the iwlwifi driver
434     make -C %{_builddir}/kernel-%{kversion}/iwlwifi-%{iwlwifi_version} ARCH=$Arch \
435          KSRC=%{_builddir}/kernel-%{kversion}/linux-%{_target_cpu}-%{kversion}$Flavour
436
437     # Start installing the results
438
439 %if "%{_enable_debug_packages}" == "1"
440     mkdir -p $RPM_BUILD_ROOT/usr/lib/debug/boot
441 %endif
442     mkdir -p $RPM_BUILD_ROOT/%{image_install_path}
443     install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer
444     install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer
445     if [ -f arch/$Arch/boot/bzImage ]; then
446       cp arch/$Arch/boot/bzImage $RPM_BUILD_ROOT/%{image_install_path}/vmlinuz-$KernelVer
447     fi
448     if [ -f arch/$Arch/boot/zImage.stub ]; then
449       cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || :
450     fi
451     if [ "$Flavour" = "uml" ] ; then
452         install -D -m 755 linux $RPM_BUILD_ROOT/%{_bindir}/linux
453     fi
454
455     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer
456     make -s ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install KERNELRELEASE=$KernelVer
457
458     # install iwlwifi
459 #    make -C %{_builddir}/kernel-%{kversion}/iwlwifi-%{iwlwifi_version} ARCH=$Arch \
460 #         KSRC=%{_builddir}/kernel-%{kversion}/linux-%{_target_cpu}-%{kversion}$Flavour \
461 #        KMISC=$RPM_BUILD_ROOT/lib/modules/$KernelVer/kernel/drivers/net/wireless install
462     pushd %{_builddir}/kernel-%{kversion}/iwlwifi-%{iwlwifi_version}
463     iwlwifi_dest=$RPM_BUILD_ROOT/lib/modules/$KernelVer/kernel/drivers/net/wireless
464     # get the list and location of modules to install - no need to pass KSRC nor anything, let's keep it simple
465     iwlwifi_modules=$(make --no-print-directory module-list)
466     install -d $iwlwifi_dest
467     install -m 644 -c $iwlwifi_modules $iwlwifi_dest
468     popd
469
470     # And save the headers/makefiles etc for building modules against
471     #
472     # This all looks scary, but the end result is supposed to be:
473     # * all arch relevant include/ files
474     # * all Makefile/Kconfig files
475     # * all script/ files
476
477     rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
478     rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source
479     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
480     (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source)
481     # dirs for additional modules per module-init-tools, kbuild/modules.txt
482     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/extra
483     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates
484     # first copy everything
485     cp --parents `find  -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build 
486         cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
487     if [ "$Flavour" = "uml" ] ; then
488       cp --parents -a `find arch/um -name include` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
489     fi
490     # then drop all but the needed Makefiles/Kconfig files
491     rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Documentation
492     rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts
493     rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
494     cp arch/%{_arch}/kernel/asm-offsets.s $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/kernel || :
495     cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
496     cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
497     if [ -d arch/%{_arch}/scripts ]; then
498       cp -a arch/%{_arch}/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || :
499     fi
500     if [ -f arch/%{_arch}/*lds ]; then
501       cp -a arch/%{_arch}/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || :
502     fi
503     rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/*.o
504     rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/*/*.o
505     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
506     cd include
507     cp -a acpi config keys linux math-emu media mtd net pcmcia rdma rxrpc scsi sound video asm asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
508     cp -a `readlink asm` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
509     if [ "$Arch" = "x86_64" ]; then
510       cp -a asm-i386 $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
511     fi
512 %if %{buildxen}
513     if [ "$Flavour" = "xenU" ]; then
514       cp -a xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
515       cp -a asm-i386 $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
516     fi
517 %endif
518 %if %{builduml}
519     if [ "$Flavour" = "uml" ] ; then
520       cp -a `readlink -f asm/arch` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
521     fi
522 %endif
523     # While arch/powerpc/include/asm is still a symlink to the old
524     # include/asm-ppc{64,} directory, include that in kernel-devel too.
525     if [ "$Arch" = "powerpc" -a -r ../arch/powerpc/include/asm ]; then
526       cp -a `readlink ../arch/powerpc/include/asm` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
527       mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/$Arch/include
528       pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/$Arch/include
529       ln -sf ../../../include/asm-ppc* asm
530       popd
531     fi
532
533     # Make sure the Makefile and version.h have a matching timestamp so that
534     # external modules can be built
535     touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/linux/version.h
536     touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/.config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/linux/autoconf.h
537     cd ..
538
539     #
540     # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm
541     #
542 %if "%{_enable_debug_packages}" == "1"
543     mkdir -p $RPM_BUILD_ROOT/usr/lib/debug/lib/modules/$KernelVer
544     cp vmlinux $RPM_BUILD_ROOT/usr/lib/debug/lib/modules/$KernelVer
545 %endif
546 %if %{buildxen}
547     if [ -f vmlinuz ]; then
548       cp vmlinuz $RPM_BUILD_ROOT/%{image_install_path}/vmlinuz-$KernelVer
549     fi
550 %endif
551
552     find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames
553
554     # mark modules executable so that strip-to-file can strip them
555     cat modnames | xargs chmod u+x
556
557     # remove files that will be auto generated by depmod at rpm -i time
558     rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.*
559
560     # Move the devel headers out of the root file system
561     mkdir -p $RPM_BUILD_ROOT/usr/src/kernels
562     mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir
563     ln -sf ../../..$DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
564     [ -z "$DevelLink" ] || ln -sf `basename $DevelDir` $RPM_BUILD_ROOT/$DevelLink
565 }
566
567 ###
568 # DO it...
569 ###
570
571 # prepare directories
572 rm -rf $RPM_BUILD_ROOT
573 mkdir -p $RPM_BUILD_ROOT/boot
574
575 %if "%{_target_cpu}" == "x86_64"
576 %define kernel_arch %{_target_cpu}
577 %endif
578 %if "%{_target_cpu}" == "i586"
579 %define kernel_arch i386
580 %endif
581 %if "%{_target_cpu}" == "i686"
582 %define kernel_arch i386
583 %endif
584
585 %if %{buildup}
586 BuildKernel %make_target %kernel_arch
587 %endif
588
589 %ifarch i686
590 %if %{builduml}
591 BuildKernel linux um uml
592 %endif
593
594 %if %{buildxen}
595 BuildKernel vmlinuz %kernel_arch xenU
596 %endif
597 %endif
598
599 ###
600 ### install
601 ###
602
603 %install
604
605 cd vanilla
606
607 %if %{buildxen} && "%{_target_cpu}" == "i686"
608 mkdir -p $RPM_BUILD_ROOT/etc/ld.so.conf.d
609 rm -f $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf
610 cat > $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf <<\EOF
611 # This directive teaches ldconfig to search in nosegneg subdirectories
612 # and cache the DSOs there with extra bit 0 set in their hwcap match
613 # fields.  In Xen guest kernels, the vDSO tells the dynamic linker to
614 # search in nosegneg subdirectories and to match this extra hwcap bit
615 # in the ld.so.cache file.
616 hwcap 0 nosegneg
617 EOF
618 chmod 444 $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf
619 %endif
620
621 %if %{builddoc}
622 mkdir -p $RPM_BUILD_ROOT/usr/share/doc/kernel-doc-%{kversion}/Documentation
623
624 # sometimes non-world-readable files sneak into the kernel source tree
625 chmod -R a+r *
626 # copy the source over
627 tar cf - Documentation | tar xf - -C $RPM_BUILD_ROOT/usr/share/doc/kernel-doc-%{kversion}
628 %endif
629
630 ###
631 ### clean
632 ###
633
634 %clean
635 rm -rf $RPM_BUILD_ROOT
636
637 ###
638 ### scripts
639 ###
640
641 # load the loop module for upgrades...in case the old modules get removed we have
642 # loopback in the kernel so that mkinitrd will work.
643 %pre
644 /sbin/modprobe loop 2> /dev/null > /dev/null  || :
645 exit 0
646
647 %post
648 if [ -f /etc/sysconfig/kernel ]; then
649   /bin/sed -i -e 's/^DEFAULTKERNEL=kernel-smp$/DEFAULTKERNEL=kernel/' /etc/sysconfig/kernel
650 fi
651
652 # trick mkinitrd in case the current environment does not have device mapper
653 rootdev=$(awk '/^[ \t]*[^#]/ { if ($2 == "/") { print $1; }}' /etc/fstab)
654 if echo $rootdev |grep -q /dev/mapper 2>/dev/null ; then
655     if [ ! -f $rootdev ]; then
656         fake_root_lvm=1
657         mkdir -p $(dirname $rootdev)
658         touch $rootdev
659     fi
660 fi
661
662 [ ! -x /usr/sbin/module_upgrade ] || /usr/sbin/module_upgrade %{rpmversion}-%{release}
663 #/sbin/new-kernel-pkg --package kernel --mkinitrd --depmod --install %{KVERREL}
664 # Older modutils do not support --package option
665 /sbin/new-kernel-pkg --mkinitrd --depmod --install %{KVERREL}
666
667 # remove fake handle
668 if [ -n "$fake_root_lvm" ]; then
669     rm -f $rootdev
670 fi
671
672 # make some useful links
673 pushd /boot > /dev/null ; {
674         ln -sf config-%{KVERREL} config
675         ln -sf config-%{KVERREL} configsmp
676         ln -sf initrd-%{KVERREL}.img initrd-boot
677         ln -sf initrd-%{KVERREL}.img initrd-bootsmp
678         ln -sf vmlinuz-%{KVERREL} kernel-boot
679         ln -sf vmlinuz-%{KVERREL} kernel-bootsmp
680 }
681 popd > /dev/null
682
683 # ask for a reboot
684 mkdir -p /etc/planetlab
685 touch /etc/planetlab/update-reboot
686
687 %post devel
688 [ -f /etc/sysconfig/kernel ] && . /etc/sysconfig/kernel
689 if [ "$HARDLINK" != "no" -a -x /usr/sbin/hardlink ] ; then
690   pushd /usr/src/kernels/%{KVERREL}-%{_target_cpu} > /dev/null
691   /usr/bin/find . -type f | while read f; do hardlink -c /usr/src/kernels/*FC*/$f $f ; done
692   popd > /dev/null
693 fi
694
695 %post xenU
696 [ ! -x /usr/sbin/module_upgrade ] || /usr/sbin/module_upgrade
697 [ ! -x /sbin/ldconfig ] || /sbin/ldconfig -X
698
699 %post xenU-devel
700 [ -f /etc/sysconfig/kernel ] && . /etc/sysconfig/kernel
701 if [ "$HARDLINK" != "no" -a -x /usr/sbin/hardlink ] ; then
702   pushd /usr/src/kernels/%{KVERREL}-xenU-%{_target_cpu} > /dev/null
703   /usr/bin/find . -type f | while read f; do hardlink -c /usr/src/kernels/*FC*/$f $f ; done
704   popd > /dev/null
705 fi
706
707 %post uml-modules
708 depmod -ae %{KVERREL}uml
709
710 %preun
711 /sbin/modprobe loop 2> /dev/null > /dev/null  || :
712 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{KVERREL}
713
714 %preun xenU
715 /sbin/modprobe loop 2> /dev/null > /dev/null  || :
716 /sbin/new-kernel-pkg --rmmoddep --remove %{KVERREL}xenU
717
718 %preun uml-modules
719 rm -f /lib/modules/%{KVERREL}uml/modules.*
720
721
722 ###
723 ### file lists
724 ###
725
726 %if %{buildup}
727 %files 
728 %defattr(-,root,root)
729 /%{image_install_path}/vmlinuz-%{KVERREL}
730 /boot/System.map-%{KVERREL}
731 /boot/config-%{KVERREL}
732 %dir /lib/modules/%{KVERREL}
733 /lib/modules/%{KVERREL}/kernel
734 /lib/modules/%{KVERREL}/build
735 /lib/modules/%{KVERREL}/source
736 /lib/modules/%{KVERREL}/extra
737 /lib/modules/%{KVERREL}/updates
738
739 %files devel
740 %defattr(-,root,root)
741 %verify(not mtime) /usr/src/kernels/%{KVERREL}-%{_target_cpu}
742 %endif
743
744 %if %{builduml} && "%{_target_cpu}" == "i686"
745 %files uml
746 %defattr(-,root,root)
747 %{_bindir}/linux
748
749 %files uml-devel
750 %defattr(-,root,root)
751 %verify(not mtime) /usr/src/kernels/%{KVERREL}-uml-%{_target_cpu}
752 /usr/src/kernels/%{KVERREL}uml-%{_target_cpu}
753
754 %files uml-modules
755 %defattr(-,root,root)
756 /boot/System.map-%{KVERREL}uml
757 /boot/config-%{KVERREL}uml
758 %dir /lib/modules/%{KVERREL}uml
759 /lib/modules/%{KVERREL}uml/kernel
760 /lib/modules/%{KVERREL}uml/build
761 /lib/modules/%{KVERREL}uml/source
762 /lib/modules/%{KVERREL}uml/extra
763 /lib/modules/%{KVERREL}uml/updates
764 %endif
765
766 %if %{buildxen} && "%{_target_cpu}" == "i686"
767 %files xenU
768 %defattr(-,root,root)
769 /%{image_install_path}/vmlinuz-%{KVERREL}xenU
770 /boot/System.map-%{KVERREL}xenU
771 /boot/config-%{KVERREL}xenU
772 %dir /lib/modules/%{KVERREL}xenU
773 /lib/modules/%{KVERREL}xenU/kernel
774 /lib/modules/%{KVERREL}xenU/build
775 /lib/modules/%{KVERREL}xenU/source
776 /lib/modules/%{KVERREL}xenU/extra
777 /lib/modules/%{KVERREL}xenU/updates
778 /etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf
779
780 %files xenU-devel
781 %defattr(-,root,root)
782 %verify(not mtime) /usr/src/kernels/%{KVERREL}-xenU-%{_target_cpu}
783 /usr/src/kernels/%{KVERREL}xenU-%{_target_cpu}
784 %endif
785
786 %files vserver
787 %defattr(-,root,root)
788 # no files
789
790 # only some architecture builds need kernel-doc
791
792 %if %{builddoc}
793 %files doc
794 %defattr(-,root,root)
795 %{_datadir}/doc/kernel-doc-%{kversion}/Documentation/*
796 %dir %{_datadir}/doc/kernel-doc-%{kversion}/Documentation
797 %dir %{_datadir}/doc/kernel-doc-%{kversion}
798 %endif
799
800 %changelog
801 * Tue Jul 11 2006 Dave Jones <davej@redhat.com> [2.6.17-1.2142_FC4]
802 - 2.6.17.4
803 - Disable split pagetable lock.
804
805 * Wed Jul  5 2006 Dave Jones <davej@redhat.com>
806 - Get rid of stack backtrace on panic, which in most
807   cases actually caused a loss of info instead of a gain.
808
809 * Fri Jun 30 2006 Dave Jones <davej@redhat.com> [2.6.17-1.2141_FC4]
810 - 2.6.17.3
811
812 * Fri Jun 30 2006 Dave Jones <davej@redhat.com> [2.6.17-1.2140_FC4]
813 - 2.6.17.2
814 - Fix up the alsa list_add bug.
815
816 * Mon Jun 26 2006 Dave Jones <davej@redhat.com>
817 - Fix up various stupidities incurred by the last big rebase.
818   - Reenable SMP x86-64 builds.
819   - Reenable SMBFS.
820 - Enable PCI fake hotplug driver.
821 - Enable gameport/joystick on i586 builds. (#196581)
822
823 * Sat Jun 24 2006 Dave Jones <davej@redhat.com>
824 - Enable profiling for 586 kernels.
825
826 * Fri Jun 23 2006 Dave Jones <davej@redhat.com> [2.6.17-1.2139_FC4]
827 - Rebuild with slab debug off.
828
829 * Tue Jun 20 2006 Dave Jones <davej@redhat.com> [2.6.17-1.2138_FC4]
830 - 2.6.17.1
831
832 * Mon Jun  5 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2115_FC4]
833 - 2.6.16.20
834
835 * Tue May 30 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2114_FC4]
836 - 2.6.16.19
837
838 * Mon May 29 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2113_FC4]
839 - Improved list_head debugging.
840
841 * Tue May 23 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2112_FC4]
842 - 2.6.16.18
843
844 * Sat May 20 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2111_FC4]
845 - 2.6.16.17
846
847 * Wed May 10 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2110_FC4]
848 - 2.6.16.16
849
850 * Tue May  9 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2109_FC4]
851 - 2.6.16.15
852 - make 16C950 UARTs work (again). (#126403)
853 - Fix exec-shield default, which should fix a few programs that
854   stopped running.
855
856 * Thu May  4 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2108_FC4]
857 - 2.6.16.14
858
859 * Tue May  2 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2107_FC4]
860 - 2.6.16.13
861
862 * Mon May  1 2006 Dave Jones <davej@redhat.com>
863 - 2.6.16.12
864
865 * Tue Apr 25 2006 Dave Jones <davej@redhat.com>
866 - Fix up SCSI errors with mymusix usb mp3 player (#186187)
867
868 * Mon Apr 24 2006 Dave Jones <davej@redhat.com>
869 - 2.6.16.11
870
871 * Wed Apr 19 2006 Dave Jones <davej@redhat.com>
872 - Enable PCI MSI support.
873
874 * Tue Apr 18 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2096_FC4]
875 - 2.6.16.9
876
877 * Tue Apr 18 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2093_FC4]
878 - 2.6.16.7
879
880 * Mon Apr 17 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2092_FC4]
881 - 2.6.16.6
882
883 * Sun Apr 16 2006 Dave Jones <davej@redhat.com>
884 - 2.6.16.5
885
886 * Fri Apr  7 2006 Dave Jones <davej@redhat.com>
887 - 2.6.16.2
888
889 * Tue Apr  4 2006 Dave Jones <davej@redhat.com>
890 - Reenable non-standard serial ports. (#187466)
891 - Reenable snd-es18xx for x86-32 (#187733)
892
893 * Thu Mar 30 2006 Dave Jones <davej@redhat.com>
894 - ship the .kernelrelease file in -devel too.
895 - Disable EDAC debug.
896
897 * Tue Mar 26 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2069_FC4]
898 - 2.6.16.1
899
900 * Mon Mar 25 2006 Dave Jones <davej@redhat.com>
901 - Include patches posted for review for inclusion in 2.6.16.1
902 - Updated new audit msg types.
903 - Reenable HDLC driver (#186257)
904 - Make acpi-cpufreq 'sticky'
905 - Fix broken x86-64 32bit vDSO (#186924)
906
907 * Tue Mar 21 2006 Dave Jones <davej@redhat.com>
908 - Improve spinlock scalability on big machines.
909
910 * Mon Mar 20 2006 Dave Jones <davej@redhat.com>
911 - Sync with FC5's 2.6.16 kernel.
912 - Update Tux & Exec-shield to latest.
913