/[gentoo-x86]/eclass/kernel-2.eclass
Gentoo

Contents of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.226 - (show annotations) (download)
Mon Apr 26 06:44:38 2010 UTC (9 years, 1 month ago) by robbat2
Branch: MAIN
Changes since 1.225: +9 -2 lines
While working on the libre-sources bug, I noticed that some of the kernel sources ebuilds out there have OKV set, but NOT KV_*, leading kernel_is to always return false. Check all of the variables we need for safety instead.

1 # Copyright 1999-2009 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /var/cvsroot/gentoo-x86/eclass/kernel-2.eclass,v 1.225 2010/04/01 21:12:20 robbat2 Exp $
4
5 # Description: kernel.eclass rewrite for a clean base regarding the 2.6
6 # series of kernel with back-compatibility for 2.4
7 #
8 # Original author: John Mylchreest <johnm@gentoo.org>
9 # Maintainer: kernel-misc@gentoo.org
10 #
11 # Please direct your bugs to the current eclass maintainer :)
12
13 # added functionality:
14 # unipatch - a flexible, singular method to extract, add and remove patches.
15
16 # A Couple of env vars are available to effect usage of this eclass
17 # These are as follows:
18 #
19 # K_USEPV - When setting the EXTRAVERSION variable, it should
20 # add PV to the end.
21 # this is useful for thigns like wolk. IE:
22 # EXTRAVERSION would be something like : -wolk-4.19-r1
23 # K_NOSETEXTRAVERSION - if this is set then EXTRAVERSION will not be
24 # automatically set within the kernel Makefile
25 # K_NOUSENAME - if this is set then EXTRAVERSION will not include the
26 # first part of ${PN} in EXTRAVERSION
27 # K_NOUSEPR - if this is set then EXTRAVERSION will not include the
28 # anything based on ${PR}.
29 # K_PREPATCHED - if the patchset is prepatched (ie: mm-sources,
30 # ck-sources, ac-sources) it will use PR (ie: -r5) as
31 # the patchset version for
32 # and not use it as a true package revision
33 # K_EXTRAEINFO - this is a new-line seperated list of einfo displays in
34 # postinst and can be used to carry additional postinst
35 # messages
36 # K_EXTRAELOG - same as K_EXTRAEINFO except using elog instead of einfo
37 # K_EXTRAEWARN - same as K_EXTRAEINFO except using ewarn instead of einfo
38 # K_SYMLINK - if this is set, then forcably create symlink anyway
39 #
40 # K_DEFCONFIG - Allow specifying a different defconfig target.
41 # If length zero, defaults to "defconfig".
42 # K_WANT_GENPATCHES - Apply genpatches to kernel source. Provide any
43 # combination of "base" and "extras"
44 # K_GENPATCHES_VER - The version of the genpatches tarball(s) to apply.
45 # A value of "5" would apply genpatches-2.6.12-5 to
46 # my-sources-2.6.12.ebuild
47 # K_SECURITY_UNSUPPORTED- If set, this kernel is unsupported by Gentoo Security
48
49 # H_SUPPORTEDARCH - this should be a space separated list of ARCH's which
50 # can be supported by the headers ebuild
51
52 # UNIPATCH_LIST - space delimetered list of patches to be applied to the
53 # kernel
54 # UNIPATCH_EXCLUDE - an addition var to support exlusion based completely
55 # on "<passedstring>*" and not "<passedno#>_*"
56 # - this should _NOT_ be used from the ebuild as this is
57 # reserved for end users passing excludes from the cli
58 # UNIPATCH_DOCS - space delimemeted list of docs to be installed to
59 # the doc dir
60 # UNIPATCH_STRICTORDER - if this is set places patches into directories of
61 # order, so they are applied in the order passed
62
63 inherit eutils toolchain-funcs versionator multilib
64 EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst pkg_postinst
65
66 # Added by Daniel Ostrow <dostrow@gentoo.org>
67 # This is an ugly hack to get around an issue with a 32-bit userland on ppc64.
68 # I will remove it when I come up with something more reasonable.
69 [[ ${PROFILE_ARCH} == "ppc64" ]] && CHOST="powerpc64-${CHOST#*-}"
70
71 export CTARGET=${CTARGET:-${CHOST}}
72 if [[ ${CTARGET} == ${CHOST} && ${CATEGORY/cross-} != ${CATEGORY} ]]; then
73 export CTARGET=${CATEGORY/cross-}
74 fi
75
76 HOMEPAGE="http://www.kernel.org/ http://www.gentoo.org/ ${HOMEPAGE}"
77 # Reflect that kernels contain firmware blobs unless otherwise stripped
78 [[ -z ${LICENSE} ]] && \
79 LICENSE="GPL-2 freedist"
80
81 # No need to run scanelf/strip on kernel sources/headers (bug #134453).
82 RESTRICT="binchecks strip"
83
84 # set LINUX_HOSTCFLAGS if not already set
85 [[ -z ${LINUX_HOSTCFLAGS} ]] && \
86 LINUX_HOSTCFLAGS="-Wall -Wstrict-prototypes -Os -fomit-frame-pointer -I${S}/include"
87
88 # debugging functions
89 #==============================================================
90 # this function exists only to help debug kernel-2.eclass
91 # if you are adding new functionality in, put a call to it
92 # at the start of src_unpack, or during SRC_URI/dep generation.
93 debug-print-kernel2-variables() {
94 debug-print "PVR: ${PVR}"
95 debug-print "CKV: ${CKV}"
96 debug-print "OKV: ${OKV}"
97 debug-print "KV: ${KV}"
98 debug-print "KV_FULL: ${KV_FULL}"
99 debug-print "RELEASETYPE: ${RELEASETYPE}"
100 debug-print "RELEASE: ${RELEASE}"
101 debug-print "UNIPATCH_LIST_DEFAULT: ${UNIPATCH_LIST_DEFAULT} "
102 debug-print "UNIPATCH_LIST_GENPATCHES: ${UNIPATCH_LIST_GENPATCHES} "
103 debug-print "UNIPATCH_LIST: ${UNIPATCH_LIST}"
104 debug-print "S: ${S}"
105 debug-print "KERNEL_URI: ${KERNEL_URI}"
106 }
107
108 #Eclass functions only from here onwards ...
109 #==============================================================
110 handle_genpatches() {
111 local tarball
112 [[ -z ${K_WANT_GENPATCHES} || -z ${K_GENPATCHES_VER} ]] && return 1
113
114 for i in ${K_WANT_GENPATCHES} ; do
115 tarball="genpatches-${OKV}-${K_GENPATCHES_VER}.${i}.tar.bz2"
116 GENPATCHES_URI="${GENPATCHES_URI} mirror://gentoo/${tarball}"
117 UNIPATCH_LIST_GENPATCHES="${UNIPATCH_LIST_GENPATCHES} ${DISTDIR}/${tarball}"
118 done
119 }
120
121 detect_version() {
122 # this function will detect and set
123 # - OKV: Original Kernel Version (2.6.0/2.6.0-test11)
124 # - KV: Kernel Version (2.6.0-gentoo/2.6.0-test11-gentoo-r1)
125 # - EXTRAVERSION: The additional version appended to OKV (-gentoo/-gentoo-r1)
126
127 if [[ -n ${KV_FULL} ]]; then
128 # we will set this for backwards compatibility.
129 KV=${KV_FULL}
130
131 # we know KV_FULL so lets stop here. but not without resetting S
132 S=${WORKDIR}/linux-${KV_FULL}
133 return
134 fi
135
136 # CKV is used as a comparison kernel version, which is used when
137 # PV doesnt reflect the genuine kernel version.
138 # this gets set to the portage style versioning. ie:
139 # CKV=2.6.11_rc4
140 CKV=${CKV:-${PV}}
141 OKV=${OKV:-${CKV}}
142 OKV=${OKV/_beta/-test}
143 OKV=${OKV/_rc/-rc}
144 OKV=${OKV/-r*}
145 OKV=${OKV/_p*}
146
147 KV_MAJOR=$(get_version_component_range 1 ${OKV})
148 KV_MINOR=$(get_version_component_range 2 ${OKV})
149 KV_PATCH=$(get_version_component_range 3 ${OKV})
150
151 if [[ ${KV_MAJOR}${KV_MINOR}${KV_PATCH} -ge 269 ]]; then
152 KV_EXTRA=$(get_version_component_range 4- ${OKV})
153 KV_EXTRA=${KV_EXTRA/[-_]*}
154 else
155 KV_PATCH=$(get_version_component_range 3- ${OKV})
156 fi
157 KV_PATCH=${KV_PATCH/[-_]*}
158
159 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
160
161 RELEASE=${CKV/${OKV}}
162 RELEASE=${RELEASE/_beta}
163 RELEASE=${RELEASE/_rc/-rc}
164 RELEASE=${RELEASE/_pre/-pre}
165 kernel_is ge 2 6 && RELEASE=${RELEASE/-pre/-git}
166 RELEASETYPE=${RELEASE//[0-9]}
167
168 # Now we know that RELEASE is the -rc/-git
169 # and RELEASETYPE is the same but with its numerics stripped
170 # we can work on better sorting EXTRAVERSION.
171 # first of all, we add the release
172 EXTRAVERSION="${RELEASE}"
173 debug-print "0 EXTRAVERSION:${EXTRAVERSION}"
174 [[ -n ${KV_EXTRA} ]] && EXTRAVERSION=".${KV_EXTRA}${EXTRAVERSION}"
175
176 debug-print "1 EXTRAVERSION:${EXTRAVERSION}"
177 if [[ -n "${K_NOUSEPR}" ]]; then
178 # Don't add anything based on PR to EXTRAVERSION
179 debug-print "1.0 EXTRAVERSION:${EXTRAVERSION}"
180 elif [[ -n ${K_PREPATCHED} ]]; then
181 debug-print "1.1 EXTRAVERSION:${EXTRAVERSION}"
182 EXTRAVERSION="${EXTRAVERSION}-${PN/-*}${PR/r}"
183 elif [[ "${ETYPE}" = "sources" ]]; then
184 debug-print "1.2 EXTRAVERSION:${EXTRAVERSION}"
185 # For some sources we want to use the PV in the extra version
186 # This is because upstream releases with a completely different
187 # versioning scheme.
188 case ${PN/-*} in
189 wolk) K_USEPV=1;;
190 vserver) K_USEPV=1;;
191 esac
192
193 [[ -z "${K_NOUSENAME}" ]] && EXTRAVERSION="${EXTRAVERSION}-${PN/-*}"
194 [[ -n "${K_USEPV}" ]] && EXTRAVERSION="${EXTRAVERSION}-${PV//_/-}"
195 [[ -n "${PR//r0}" ]] && EXTRAVERSION="${EXTRAVERSION}-${PR}"
196 fi
197 debug-print "2 EXTRAVERSION:${EXTRAVERSION}"
198
199 # The only messing around which should actually effect this is for KV_EXTRA
200 # since this has to limit OKV to MAJ.MIN.PAT and strip EXTRA off else
201 # KV_FULL evaluates to MAJ.MIN.PAT.EXT.EXT after EXTRAVERSION
202 if [[ -n ${KV_EXTRA} ]]; then
203 OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
204 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/patch-${CKV}.bz2
205 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}.tar.bz2"
206 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV}.bz2"
207 fi
208
209 # We need to set this using OKV, but we need to set it before we do any
210 # messing around with OKV based on RELEASETYPE
211 KV_FULL=${OKV}${EXTRAVERSION}
212
213 # we will set this for backwards compatibility.
214 S=${WORKDIR}/linux-${KV_FULL}
215 KV=${KV_FULL}
216
217 # -rc-git pulls can be achieved by specifying CKV
218 # for example:
219 # CKV="2.6.11_rc3_pre2"
220 # will pull:
221 # linux-2.6.10.tar.bz2 & patch-2.6.11-rc3.bz2 & patch-2.6.11-rc3-git2.bz2
222
223 if [[ ${RELEASETYPE} == -rc ]] || [[ ${RELEASETYPE} == -pre ]]; then
224 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))"
225 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${CKV//_/-}.bz2
226 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
227 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV//_/-}.bz2"
228 fi
229
230 if [[ ${RELEASETYPE} == -git ]]; then
231 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${OKV}${RELEASE}.bz2
232 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
233 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${OKV}${RELEASE}.bz2"
234 fi
235
236 if [[ ${RELEASETYPE} == -rc-git ]]; then
237 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))"
238 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2
239 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.bz2
240 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
241 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.bz2 ${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2"
242 fi
243
244 debug-print-kernel2-variables
245
246 handle_genpatches
247 }
248
249 kernel_is() {
250 # ALL of these should be set before we can safely continue this function.
251 # some of the sources have in the past had only one set.
252 local v n=0
253 for v in OKV KV_{MAJOR,MINOR,PATCH} ; do [[ -z ${!v} ]] && n=1 ; done
254 [[ $n -eq 1 ]] && detect_version
255 unset v n
256
257 # Now we can continue
258 local operator test value x=0 y=0 z=0
259
260 case ${1} in
261 lt) operator="-lt"; shift;;
262 gt) operator="-gt"; shift;;
263 le) operator="-le"; shift;;
264 ge) operator="-ge"; shift;;
265 eq) operator="-eq"; shift;;
266 *) operator="-eq";;
267 esac
268
269 for x in ${@}; do
270 for((y=0; y<$((3 - ${#x})); y++)); do value="${value}0"; done
271 value="${value}${x}"
272 z=$((${z} + 1))
273
274 case ${z} in
275 1) for((y=0; y<$((3 - ${#KV_MAJOR})); y++)); do test="${test}0"; done;
276 test="${test}${KV_MAJOR}";;
277 2) for((y=0; y<$((3 - ${#KV_MINOR})); y++)); do test="${test}0"; done;
278 test="${test}${KV_MINOR}";;
279 3) for((y=0; y<$((3 - ${#KV_PATCH})); y++)); do test="${test}0"; done;
280 test="${test}${KV_PATCH}";;
281 *) die "Error in kernel-2_kernel_is(): Too many parameters.";;
282 esac
283 done
284
285 [ ${test} ${operator} ${value} ] && return 0 || return 1
286 }
287
288 kernel_is_2_4() {
289 kernel_is 2 4
290 }
291
292 kernel_is_2_6() {
293 kernel_is 2 6 || kernel_is 2 5
294 }
295
296 # Capture the sources type and set DEPENDs
297 if [[ ${ETYPE} == sources ]]; then
298 DEPEND="!build? ( sys-apps/sed
299 >=sys-devel/binutils-2.11.90.0.31 )"
300 RDEPEND="!build? ( >=sys-libs/ncurses-5.2
301 sys-devel/make )"
302 PDEPEND="!build? ( virtual/dev-manager )"
303
304 PROVIDE="virtual/linux-sources"
305 kernel_is gt 2 4 && PROVIDE="${PROVIDE} virtual/alsa"
306
307 SLOT="${PVR}"
308 DESCRIPTION="Sources for the ${KV_MAJOR}.${KV_MINOR} linux kernel"
309 IUSE="symlink build"
310 elif [[ ${ETYPE} == headers ]]; then
311 DESCRIPTION="Linux system headers"
312
313 # Since we should NOT honour KBUILD_OUTPUT in headers
314 # lets unset it here.
315 unset KBUILD_OUTPUT
316
317 if [[ ${CTARGET} = ${CHOST} ]]; then
318 DEPEND="!virtual/os-headers"
319 PROVIDE="virtual/os-headers"
320 SLOT="0"
321 else
322 SLOT="${CTARGET}"
323 fi
324 else
325 eerror "Unknown ETYPE=\"${ETYPE}\", must be \"sources\" or \"headers\""
326 die "Unknown ETYPE=\"${ETYPE}\", must be \"sources\" or \"headers\""
327 fi
328
329 # Cross-compile support functions
330 #==============================================================
331 kernel_header_destdir() {
332 [[ ${CTARGET} == ${CHOST} ]] \
333 && echo /usr/include \
334 || echo /usr/${CTARGET}/usr/include
335 }
336
337 cross_pre_c_headers() {
338 use crosscompile_opts_headers-only && [[ ${CHOST} != ${CTARGET} ]]
339 }
340
341 env_setup_xmakeopts() {
342 # Kernel ARCH != portage ARCH
343 export KARCH=$(tc-arch-kernel)
344
345 # When cross-compiling, we need to set the ARCH/CROSS_COMPILE
346 # variables properly or bad things happen !
347 xmakeopts="ARCH=${KARCH}"
348 if [[ ${CTARGET} != ${CHOST} ]] && ! cross_pre_c_headers ; then
349 xmakeopts="${xmakeopts} CROSS_COMPILE=${CTARGET}-"
350 elif type -p ${CHOST}-ar > /dev/null ; then
351 xmakeopts="${xmakeopts} CROSS_COMPILE=${CHOST}-"
352 fi
353 export xmakeopts
354 }
355
356 # Unpack functions
357 #==============================================================
358 unpack_2_4() {
359 # this file is required for other things to build properly,
360 # so we autogenerate it
361 make -s mrproper ${xmakeopts} || die "make mrproper failed"
362 make -s symlinks ${xmakeopts} || die "make symlinks failed"
363 make -s include/linux/version.h ${xmakeopts} || die "make include/linux/version.h failed"
364 echo ">>> version.h compiled successfully."
365 }
366
367 unpack_2_6() {
368 # this file is required for other things to build properly, so we
369 # autogenerate it ... generate a .config to keep version.h build from
370 # spitting out an annoying warning
371 make -s mrproper ${xmakeopts} 2>/dev/null \
372 || die "make mrproper failed"
373
374 # quick fix for bug #132152 which triggers when it cannot include linux
375 # headers (ie, we have not installed it yet)
376 if ! make -s defconfig ${xmakeopts} &>/dev/null 2>&1 ; then
377 touch .config
378 eerror "make defconfig failed."
379 eerror "assuming you dont have any headers installed yet and continuing"
380 epause 5
381 fi
382
383 make -s include/linux/version.h ${xmakeopts} 2>/dev/null \
384 || die "make include/linux/version.h failed"
385 rm -f .config >/dev/null
386 }
387
388 universal_unpack() {
389 cd "${WORKDIR}"
390 unpack linux-${OKV}.tar.bz2
391 if [[ -d "linux" ]]; then
392 mv linux linux-${KV_FULL} \
393 || die "Unable to move source tree to ${KV_FULL}."
394 elif [[ "${OKV}" != "${KV_FULL}" ]]; then
395 mv linux-${OKV} linux-${KV_FULL} \
396 || die "Unable to move source tree to ${KV_FULL}."
397 fi
398 cd "${S}"
399
400 # remove all backup files
401 find . -iname "*~" -exec rm {} \; 2> /dev/null
402
403 # fix a problem on ppc where TOUT writes to /usr/src/linux breaking sandbox
404 # only do this for kernel < 2.6.27 since this file does not exist in later
405 # kernels
406 if [[ ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} < 2.6.27 ]]
407 then
408 sed -i \
409 -e 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
410 "${S}"/arch/ppc/Makefile
411 else
412 sed -i \
413 -e 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
414 "${S}"/arch/powerpc/Makefile
415 fi
416 }
417
418 unpack_set_extraversion() {
419 cd "${S}"
420 sed -i -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile
421 cd "${OLDPWD}"
422 }
423
424 # Should be done after patches have been applied
425 # Otherwise patches that modify the same area of Makefile will fail
426 unpack_fix_install_path() {
427 cd "${S}"
428 sed -i -e 's:#export\tINSTALL_PATH:export\tINSTALL_PATH:' Makefile
429 }
430
431 # Compile Functions
432 #==============================================================
433 compile_headers() {
434 env_setup_xmakeopts
435
436 # if we couldnt obtain HOSTCFLAGS from the Makefile,
437 # then set it to something sane
438 local HOSTCFLAGS=$(getfilevar HOSTCFLAGS "${S}"/Makefile)
439 HOSTCFLAGS=${HOSTCFLAGS:--Wall -Wstrict-prototypes -O2 -fomit-frame-pointer}
440
441 if kernel_is 2 4; then
442 yes "" | make oldconfig ${xmakeopts}
443 echo ">>> make oldconfig complete"
444 make dep ${xmakeopts}
445 elif kernel_is 2 6; then
446 # 2.6.18 introduces headers_install which means we dont need any
447 # of this crap anymore :D
448 kernel_is ge 2 6 18 && return 0
449
450 # autoconf.h isnt generated unless it already exists. plus, we have
451 # no guarantee that any headers are installed on the system...
452 [[ -f ${ROOT}/usr/include/linux/autoconf.h ]] \
453 || touch include/linux/autoconf.h
454
455 # if K_DEFCONFIG isn't set, force to "defconfig"
456 # needed by mips
457 if [[ -z ${K_DEFCONFIG} ]]; then
458 if [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.16) ]]; then
459 case ${CTARGET} in
460 powerpc64*) K_DEFCONFIG="ppc64_defconfig";;
461 powerpc*) K_DEFCONFIG="pmac32_defconfig";;
462 *) K_DEFCONFIG="defconfig";;
463 esac
464 else
465 K_DEFCONFIG="defconfig"
466 fi
467 fi
468
469 # if there arent any installed headers, then there also isnt an asm
470 # symlink in /usr/include/, and make defconfig will fail, so we have
471 # to force an include path with $S.
472 HOSTCFLAGS="${HOSTCFLAGS} -I${S}/include/"
473 ln -sf asm-${KARCH} "${S}"/include/asm
474 cross_pre_c_headers && return 0
475
476 make ${K_DEFCONFIG} HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "defconfig failed (${K_DEFCONFIG})"
477 if compile_headers_tweak_config ; then
478 yes "" | make oldconfig HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "2nd oldconfig failed"
479 fi
480 make prepare HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed"
481 make prepare-all HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed"
482 fi
483 }
484
485 compile_headers_tweak_config() {
486 # some targets can be very very picky, so let's finesse the
487 # .config based upon any info we may have
488 case ${CTARGET} in
489 sh*)
490 sed -i '/CONFIG_CPU_SH/d' .config
491 echo "CONFIG_CPU_SH${CTARGET:2:1}=y" >> .config
492 return 0;;
493 esac
494
495 # no changes, so lets do nothing
496 return 1
497 }
498
499 # install functions
500 #==============================================================
501 install_universal() {
502 #fix silly permissions in tarball
503 cd "${WORKDIR}"
504 chown -R root:0 * >& /dev/null
505 chmod -R a+r-w+X,u+w *
506 cd ${OLDPWD}
507 }
508
509 install_headers() {
510 local ddir=$(kernel_header_destdir)
511
512 # 2.6.18 introduces headers_install which means we dont need any
513 # of this crap anymore :D
514 if kernel_is ge 2 6 18 ; then
515 env_setup_xmakeopts
516 emake headers_install INSTALL_HDR_PATH="${D}"/${ddir}/.. ${xmakeopts} || die
517
518 # let other packages install some of these headers
519 rm -rf "${D}"/${ddir}/sound #alsa-headers
520 rm -rf "${D}"/${ddir}/scsi #glibc/uclibc/etc...
521 return 0
522 fi
523
524 # Do not use "linux/*" as that can cause problems with very long
525 # $S values where the cmdline to cp is too long
526 cd "${S}"
527 dodir ${ddir}/linux
528 cp -pPR "${S}"/include/linux "${D}"/${ddir}/ || die
529 rm -rf "${D}"/${ddir}/linux/modules
530
531 # Handle multilib headers and crap
532 local multi_dirs="" multi_defs=""
533 case $(tc-arch-kernel) in
534 sparc64)
535 multi_dirs="sparc sparc64"
536 multi_defs="!__arch64__ __arch64__"
537 ;;
538 x86_64)
539 multi_dirs="i386 x86_64"
540 multi_defs="__i386__ __x86_64__"
541 ;;
542 ppc64)
543 multi_dirs="ppc ppc64"
544 multi_defs="!__powerpc64__ __powerpc64__"
545 ;;
546 s390x)
547 multi_dirs="s390 s390x"
548 multi_defs="!__s390x__ __s390x__"
549 ;;
550 arm)
551 dodir ${ddir}/asm
552 cp -pPR "${S}"/include/asm/* "${D}"/${ddir}/asm
553 [[ ! -e ${D}/${ddir}/asm/arch ]] && ln -sf arch-ebsa285 "${D}"/${ddir}/asm/arch
554 [[ ! -e ${D}/${ddir}/asm/proc ]] && ln -sf proc-armv "${D}"/${ddir}/asm/proc
555 ;;
556 powerpc)
557 dodir ${ddir}/asm
558 cp -pPR "${S}"/include/asm/* "${D}"/${ddir}/asm
559 if [[ -e "${S}"/include/asm-ppc ]] ; then
560 dodir ${ddir}/asm-ppc
561 cp -pPR "${S}"/include/asm-ppc/* "${D}"/${ddir}/asm-ppc
562 fi
563 ;;
564 *)
565 dodir ${ddir}/asm
566 cp -pPR "${S}"/include/asm/* "${D}"/${ddir}/asm
567 ;;
568 esac
569 if [[ -n ${multi_dirs} ]] ; then
570 local d ml_inc=""
571 for d in ${multi_dirs} ; do
572 dodir ${ddir}/asm-${d}
573 cp -pPR "${S}"/include/asm-${d}/* "${D}"/${ddir}/asm-${d}/ || die "cp asm-${d} failed"
574
575 ml_inc="${ml_inc} ${multi_defs%% *}:${ddir}/asm-${d}"
576 multi_defs=${multi_defs#* }
577 done
578 create_ml_includes ${ddir}/asm ${ml_inc}
579 fi
580
581 if kernel_is 2 6; then
582 dodir ${ddir}/asm-generic
583 cp -pPR "${S}"/include/asm-generic/* "${D}"/${ddir}/asm-generic
584 fi
585
586 # clean up
587 find "${D}" -name '*.orig' -exec rm -f {} \;
588
589 cd ${OLDPWD}
590 }
591
592 install_sources() {
593 local file
594
595 cd "${S}"
596 dodir /usr/src
597 echo ">>> Copying sources ..."
598
599 file="$(find ${WORKDIR} -iname "docs" -type d)"
600 if [[ -n ${file} ]]; then
601 for file in $(find ${file} -type f); do
602 echo "${file//*docs\/}" >> "${S}"/patches.txt
603 echo "===================================================" >> "${S}"/patches.txt
604 cat ${file} >> "${S}"/patches.txt
605 echo "===================================================" >> "${S}"/patches.txt
606 echo "" >> "${S}"/patches.txt
607 done
608 fi
609
610 if [[ ! -f ${S}/patches.txt ]]; then
611 # patches.txt is empty so lets use our ChangeLog
612 [[ -f ${FILESDIR}/../ChangeLog ]] && \
613 echo "Please check the ebuild ChangeLog for more details." \
614 > "${S}"/patches.txt
615 fi
616
617 mv ${WORKDIR}/linux* "${D}"/usr/src
618 }
619
620 # pkg_preinst functions
621 #==============================================================
622 preinst_headers() {
623 local ddir=$(kernel_header_destdir)
624 [[ -L ${ddir}/linux ]] && rm ${ddir}/linux
625 [[ -L ${ddir}/asm ]] && rm ${ddir}/asm
626 }
627
628 # pkg_postinst functions
629 #==============================================================
630 postinst_sources() {
631 local MAKELINK=0
632
633 # if we have USE=symlink, then force K_SYMLINK=1
634 use symlink && K_SYMLINK=1
635
636 # if we are to forcably symlink, delete it if it already exists first.
637 if [[ ${K_SYMLINK} > 0 ]]; then
638 [[ -h ${ROOT}usr/src/linux ]] && rm ${ROOT}usr/src/linux
639 MAKELINK=1
640 fi
641
642 # if the link doesnt exist, lets create it
643 [[ ! -h ${ROOT}usr/src/linux ]] && MAKELINK=1
644
645 if [[ ${MAKELINK} == 1 ]]; then
646 cd "${ROOT}"usr/src
647 ln -sf linux-${KV_FULL} linux
648 cd ${OLDPWD}
649 fi
650
651 # Don't forget to make directory for sysfs
652 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys
653
654 echo
655 elog "If you are upgrading from a previous kernel, you may be interested"
656 elog "in the following document:"
657 elog " - General upgrade guide: http://www.gentoo.org/doc/en/kernel-upgrade.xml"
658 echo
659
660 # if K_EXTRAEINFO is set then lets display it now
661 if [[ -n ${K_EXTRAEINFO} ]]; then
662 echo ${K_EXTRAEINFO} | fmt |
663 while read -s ELINE; do einfo "${ELINE}"; done
664 fi
665
666 # if K_EXTRAELOG is set then lets display it now
667 if [[ -n ${K_EXTRAELOG} ]]; then
668 echo ${K_EXTRAELOG} | fmt |
669 while read -s ELINE; do elog "${ELINE}"; done
670 fi
671
672 # if K_EXTRAEWARN is set then lets display it now
673 if [[ -n ${K_EXTRAEWARN} ]]; then
674 echo ${K_EXTRAEWARN} | fmt |
675 while read -s ELINE; do ewarn "${ELINE}"; done
676 fi
677
678 # optionally display security unsupported message
679 if [[ -n ${K_SECURITY_UNSUPPORTED} ]]; then
680 echo
681 ewarn "${PN} is UNSUPPORTED by Gentoo Security."
682 ewarn "This means that it is likely to be vulnerable to recent security issues."
683 ewarn "For specific information on why this kernel is unsupported, please read:"
684 ewarn "http://www.gentoo.org/proj/en/security/kernel.xml"
685 fi
686
687 # warn sparc users that they need to do cross-compiling with >= 2.6.25(bug #214765)
688 KV_MAJOR=$(get_version_component_range 1 ${OKV})
689 KV_MINOR=$(get_version_component_range 2 ${OKV})
690 KV_PATCH=$(get_version_component_range 3 ${OKV})
691 if [[ "$(tc-arch)" = "sparc" ]] \
692 && [[ ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} > 2.6.24 ]]
693 then
694 echo
695 elog "NOTE: Since 2.6.25 the kernel Makefile has changed in a way that"
696 elog "you now need to do"
697 elog " make CROSS_COMPILE=sparc64-unknown-linux-gnu-"
698 elog "instead of just"
699 elog " make"
700 elog "to compile the kernel. For more information please browse to"
701 elog "https://bugs.gentoo.org/show_bug.cgi?id=214765"
702 echo
703 fi
704 }
705
706 postinst_headers() {
707 elog "Kernel headers are usually only used when recompiling your system libc, as"
708 elog "such, following the installation of newer headers, it is advised that you"
709 elog "re-merge your system libc."
710 elog "Failure to do so will cause your system libc to not make use of newer"
711 elog "features present in the updated kernel headers."
712 }
713
714 # pkg_setup functions
715 #==============================================================
716 setup_headers() {
717 [[ -z ${H_SUPPORTEDARCH} ]] && H_SUPPORTEDARCH=${PN/-*/}
718 for i in ${H_SUPPORTEDARCH}; do
719 [[ $(tc-arch) == "${i}" ]] && H_ACCEPT_ARCH="yes"
720 done
721
722 if [[ ${H_ACCEPT_ARCH} != "yes" ]]; then
723 echo
724 eerror "This version of ${PN} does not support $(tc-arch)."
725 eerror "Please merge the appropriate sources, in most cases"
726 eerror "(but not all) this will be called $(tc-arch)-headers."
727 die "Package unsupported for $(tc-arch)"
728 fi
729 }
730
731 # unipatch
732 #==============================================================
733 unipatch() {
734 local i x y z extention PIPE_CMD UNIPATCH_DROP KPATCH_DIR PATCH_DEPTH ELINE
735 local STRICT_COUNT PATCH_LEVEL myLC_ALL myLANG extglob_bak
736
737 # set to a standard locale to ensure sorts are ordered properly.
738 myLC_ALL="${LC_ALL}"
739 myLANG="${LANG}"
740 LC_ALL="C"
741 LANG=""
742
743 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/"
744 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR}
745
746 # We're gonna need it when doing patches with a predefined patchlevel
747 extglob_bak=$(shopt -p extglob)
748 shopt -s extglob
749
750 # This function will unpack all passed tarballs, add any passed patches, and remove any passed patchnumbers
751 # usage can be either via an env var or by params
752 # although due to the nature we pass this within this eclass
753 # it shall be by param only.
754 # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}"
755 UNIPATCH_LIST="${@}"
756
757 #unpack any passed tarballs
758 for i in ${UNIPATCH_LIST}; do
759 if echo ${i} | grep -qs -e "\.tar" -e "\.tbz" -e "\.tgz" ; then
760 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
761 unset z
762 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
763 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
764 do z="${z}0";
765 done
766 PATCH_ORDER="${z}${STRICT_COUNT}"
767
768 mkdir -p "${KPATCH_DIR}/${PATCH_ORDER}"
769 pushd "${KPATCH_DIR}/${PATCH_ORDER}" >/dev/null
770 unpack ${i##*/}
771 popd >/dev/null
772 else
773 pushd "${KPATCH_DIR}" >/dev/null
774 unpack ${i##*/}
775 popd >/dev/null
776 fi
777
778 [[ ${i} == *:* ]] && echo ">>> Strict patch levels not currently supported for tarballed patchsets"
779 else
780 extention=${i/*./}
781 extention=${extention/:*/}
782 PIPE_CMD=""
783 case ${extention} in
784 bz2) PIPE_CMD="bzip2 -dc";;
785 patch) PIPE_CMD="cat";;
786 diff) PIPE_CMD="cat";;
787 gz|Z|z) PIPE_CMD="gzip -dc";;
788 ZIP|zip) PIPE_CMD="unzip -p";;
789 *) UNIPATCH_DROP="${UNIPATCH_DROP} ${i/:*/}";;
790 esac
791
792 PATCH_LEVEL=${i/*([^:])?(:)}
793 i=${i/:*/}
794 x=${i/*\//}
795 x=${x/\.${extention}/}
796
797 if [ -n "${PIPE_CMD}" ]; then
798 if [ ! -r "${i}" ]; then
799 echo
800 eerror "FATAL: unable to locate:"
801 eerror "${i}"
802 eerror "for read-only. The file either has incorrect permissions"
803 eerror "or does not exist."
804 die Unable to locate ${i}
805 fi
806
807 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
808 unset z
809 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
810 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
811 do z="${z}0";
812 done
813 PATCH_ORDER="${z}${STRICT_COUNT}"
814
815 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/
816 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${PATCH_ORDER}/${x}.patch${PATCH_LEVEL})
817 else
818 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL})
819 fi
820 fi
821 fi
822 done
823
824 #populate KPATCH_DIRS so we know where to look to remove the excludes
825 x=${KPATCH_DIR}
826 KPATCH_DIR=""
827 for i in $(find ${x} -type d | sort -n); do
828 KPATCH_DIR="${KPATCH_DIR} ${i}"
829 done
830
831 # do not apply fbcondecor patch to sparc/sparc64 as it breaks boot
832 # bug #272676
833 if [[ "$(tc-arch)" = "sparc" || "$(tc-arch)" = "sparc64" ]]; then
834 if [[ ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} > 2.6.28 ]]; then
835 UNIPATCH_DROP="${UNIPATCH_DROP} *_fbcondecor-0.9.6.patch"
836 echo
837 ewarn "fbcondecor currently prevents sparc/sparc64 from booting"
838 ewarn "for kernel versions >= 2.6.29. Removing fbcondecor patch."
839 ewarn "See https://bugs.gentoo.org/show_bug.cgi?id=272676 for details"
840 echo
841 fi
842 fi
843
844 #so now lets get rid of the patchno's we want to exclude
845 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}"
846 for i in ${UNIPATCH_DROP}; do
847 ebegin "Excluding Patch #${i}"
848 for x in ${KPATCH_DIR}; do rm -f ${x}/${i}* 2>/dev/null; done
849 eend $?
850 done
851
852 # and now, finally, we patch it :)
853 for x in ${KPATCH_DIR}; do
854 for i in $(find ${x} -maxdepth 1 -iname "*.patch*" -or -iname "*.diff*" | sort -n); do
855 STDERR_T="${T}/${i/*\//}"
856 STDERR_T="${STDERR_T/.patch*/.err}"
857
858 [ -z ${i/*.patch*/} ] && PATCH_DEPTH=${i/*.patch/}
859 #[ -z ${i/*.diff*/} ] && PATCH_DEPTH=${i/*.diff/}
860
861 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi
862
863 ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)"
864 while [ ${PATCH_DEPTH} -lt 5 ]; do
865 echo "Attempting Dry-run:" >> ${STDERR_T}
866 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i}" >> ${STDERR_T}
867 echo "=======================================================" >> ${STDERR_T}
868 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then
869 echo "Attempting patch:" > ${STDERR_T}
870 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i}" >> ${STDERR_T}
871 echo "=======================================================" >> ${STDERR_T}
872 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then
873 eend 0
874 rm ${STDERR_T}
875 break
876 else
877 eend 1
878 eerror "Failed to apply patch ${i/*\//}"
879 eerror "Please attach ${STDERR_T} to any bug you may post."
880 die "Failed to apply ${i/*\//}"
881 fi
882 else
883 PATCH_DEPTH=$((${PATCH_DEPTH} + 1))
884 fi
885 done
886 if [ ${PATCH_DEPTH} -eq 5 ]; then
887 eend 1
888 eerror "Please attach ${STDERR_T} to any bug you may post."
889 die "Unable to dry-run patch."
890 fi
891 done
892 done
893
894 # This is a quick, and kind of nasty hack to deal with UNIPATCH_DOCS which
895 # sit in KPATCH_DIR's. This is handled properly in the unipatch rewrite,
896 # which is why I'm not taking too much time over this.
897 local tmp
898 for i in ${UNIPATCH_DOCS}; do
899 tmp="${tmp} ${i//*\/}"
900 cp -f ${i} "${T}"/
901 done
902 UNIPATCH_DOCS="${tmp}"
903
904 # clean up KPATCH_DIR's - fixes bug #53610
905 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done
906
907 LC_ALL="${myLC_ALL}"
908 LANG="${myLANG}"
909 eval ${extglob_bak}
910 }
911
912 # getfilevar accepts 2 vars as follows:
913 # getfilevar <VARIABLE> <CONFIGFILE>
914 # pulled from linux-info
915
916 getfilevar() {
917 local workingdir basefname basedname xarch=$(tc-arch-kernel)
918
919 if [[ -z ${1} ]] && [[ ! -f ${2} ]]; then
920 echo -e "\n"
921 eerror "getfilevar requires 2 variables, with the second a valid file."
922 eerror " getfilevar <VARIABLE> <CONFIGFILE>"
923 else
924 workingdir=${PWD}
925 basefname=$(basename ${2})
926 basedname=$(dirname ${2})
927 unset ARCH
928
929 cd ${basedname}
930 echo -e "include ${basefname}\ne:\n\t@echo \$(${1})" | \
931 make ${BUILD_FIXES} -s -f - e 2>/dev/null
932 cd ${workingdir}
933
934 ARCH=${xarch}
935 fi
936 }
937
938 detect_arch() {
939 # This function sets ARCH_URI and ARCH_PATCH
940 # with the neccessary info for the arch sepecific compatibility
941 # patchsets.
942
943 local ALL_ARCH LOOP_ARCH COMPAT_URI i
944
945 # COMPAT_URI is the contents of ${ARCH}_URI
946 # ARCH_URI is the URI for all the ${ARCH}_URI patches
947 # ARCH_PATCH is ARCH_URI broken into files for UNIPATCH
948
949 ARCH_URI=""
950 ARCH_PATCH=""
951 ALL_ARCH="ALPHA AMD64 ARM HPPA IA64 M68K MIPS PPC PPC64 S390 SH SPARC X86"
952
953 for LOOP_ARCH in ${ALL_ARCH}; do
954 COMPAT_URI="${LOOP_ARCH}_URI"
955 COMPAT_URI="${!COMPAT_URI}"
956
957 [[ -n ${COMPAT_URI} ]] && \
958 ARCH_URI="${ARCH_URI} $(echo ${LOOP_ARCH} | tr '[:upper:]' '[:lower:]')? ( ${COMPAT_URI} )"
959
960 if [[ ${LOOP_ARCH} == "$(echo $(tc-arch-kernel) | tr '[:lower:]' '[:upper:]')" ]]; then
961 for i in ${COMPAT_URI}; do
962 ARCH_PATCH="${ARCH_PATCH} ${DISTDIR}/${i/*\//}"
963 done
964 fi
965 done
966 }
967
968 # sparc nastiness
969 #==============================================================
970 # This script generates the files in /usr/include/asm for sparc systems
971 # during installation of sys-kernel/linux-headers.
972 # Will no longer be needed when full 64 bit support is used on sparc64
973 # systems.
974 #
975 # Shamefully ripped from Debian
976 # ----------------------------------------------------------------------
977
978 # Idea borrowed from RedHat's kernel package
979
980 # This is gonna get replaced by something in multilib.eclass soon...
981 # --eradicator
982 generate_sparc_asm() {
983 local name
984
985 cd $1 || die
986 mkdir asm
987
988 for h in `( ls asm-sparc; ls asm-sparc64 ) | grep '\.h$' | sort -u`; do
989 name="$(echo $h | tr a-z. A-Z_)"
990 # common header
991 echo "/* All asm/ files are generated and point to the corresponding
992 * file in asm-sparc or asm-sparc64.
993 */
994
995 #ifndef __SPARCSTUB__${name}__
996 #define __SPARCSTUB__${name}__
997 " > asm/${h}
998
999 # common for sparc and sparc64
1000 if [ -f asm-sparc/$h -a -f asm-sparc64/$h ]; then
1001 echo "#ifdef __arch64__
1002 #include <asm-sparc64/$h>
1003 #else
1004 #include <asm-sparc/$h>
1005 #endif
1006 " >> asm/${h}
1007
1008 # sparc only
1009 elif [ -f asm-sparc/$h ]; then
1010 echo "#ifndef __arch64__
1011 #include <asm-sparc/$h>
1012 #endif
1013 " >> asm/${h}
1014
1015 # sparc64 only
1016 else
1017 echo "#ifdef __arch64__
1018 #include <asm-sparc64/$h>
1019 #endif
1020 " >> asm/${h}
1021 fi
1022
1023 # common footer
1024 echo "#endif /* !__SPARCSTUB__${name}__ */" >> asm/${h}
1025 done
1026 return 0
1027 }
1028
1029 headers___fix() {
1030 # Voodoo to partially fix broken upstream headers.
1031 # note: do not put inline/asm/volatile together (breaks "inline asm volatile")
1032 sed -i \
1033 -e '/^\#define.*_TYPES_H/{:loop n; bloop}' \
1034 -e 's:\<\([us]\(8\|16\|32\|64\)\)\>:__\1:g' \
1035 -e "s/\([[:space:]]\)inline\([[:space:](]\)/\1__inline__\2/g" \
1036 -e "s/\([[:space:]]\)asm\([[:space:](]\)/\1__asm__\2/g" \
1037 -e "s/\([[:space:]]\)volatile\([[:space:](]\)/\1__volatile__\2/g" \
1038 "$@"
1039 }
1040
1041 # common functions
1042 #==============================================================
1043 kernel-2_src_unpack() {
1044 universal_unpack
1045 debug-print "Doing unipatch"
1046
1047 [[ -n ${UNIPATCH_LIST} || -n ${UNIPATCH_LIST_DEFAULT} || -n ${UNIPATCH_LIST_GENPATCHES} ]] && \
1048 unipatch "${UNIPATCH_LIST_DEFAULT} ${UNIPATCH_LIST_GENPATCHES} ${UNIPATCH_LIST}"
1049
1050 debug-print "Doing premake"
1051
1052 # allow ebuilds to massage the source tree after patching but before
1053 # we run misc `make` functions below
1054 [[ $(type -t kernel-2_hook_premake) == "function" ]] && kernel-2_hook_premake
1055
1056 debug-print "Doing epatch_user"
1057 epatch_user
1058
1059 debug-print "Doing unpack_set_extraversion"
1060
1061 [[ -z ${K_NOSETEXTRAVERSION} ]] && unpack_set_extraversion
1062 unpack_fix_install_path
1063
1064 # Setup xmakeopts and cd into sourcetree.
1065 env_setup_xmakeopts
1066 cd "${S}"
1067
1068 # We dont need a version.h for anything other than headers
1069 # at least, I should hope we dont. If this causes problems
1070 # take out the if/fi block and inform me please.
1071 # unpack_2_6 should now be 2.6.17 safe anyways
1072 if [[ ${ETYPE} == headers ]]; then
1073 kernel_is 2 4 && unpack_2_4
1074 kernel_is 2 6 && unpack_2_6
1075 fi
1076 }
1077
1078 kernel-2_src_compile() {
1079 cd "${S}"
1080 [[ ${ETYPE} == headers ]] && compile_headers
1081 }
1082
1083 kernel-2_pkg_preinst() {
1084 [[ ${ETYPE} == headers ]] && preinst_headers
1085 }
1086
1087 kernel-2_src_install() {
1088 install_universal
1089 [[ ${ETYPE} == headers ]] && install_headers
1090 [[ ${ETYPE} == sources ]] && install_sources
1091 }
1092
1093 kernel-2_pkg_postinst() {
1094 [[ ${ETYPE} == headers ]] && postinst_headers
1095 [[ ${ETYPE} == sources ]] && postinst_sources
1096 }
1097
1098 kernel-2_pkg_setup() {
1099 if kernel_is 2 4; then
1100 if [ "$( gcc-major-version )" -eq "4" ] ; then
1101 echo
1102 ewarn "Be warned !! >=sys-devel/gcc-4.0.0 isn't supported with linux-2.4!"
1103 ewarn "Either switch to another gcc-version (via gcc-config) or use a"
1104 ewarn "newer kernel that supports gcc-4."
1105 echo
1106 ewarn "Also be aware that bugreports about gcc-4 not working"
1107 ewarn "with linux-2.4 based ebuilds will be closed as INVALID!"
1108 echo
1109 epause 10
1110 fi
1111 fi
1112
1113 ABI="${KERNEL_ABI}"
1114 [[ ${ETYPE} == headers ]] && setup_headers
1115 [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..."
1116 }

  ViewVC Help
Powered by ViewVC 1.1.20