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

Diff of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.176 Revision 1.221
1# Copyright 1999-2005 Gentoo Foundation 1# Copyright 1999-2009 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/kernel-2.eclass,v 1.176 2006/05/06 17:57:16 flameeyes Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/kernel-2.eclass,v 1.221 2009/10/20 19:17:59 zmedico Exp $
4 4
5# Description: kernel.eclass rewrite for a clean base regarding the 2.6 5# Description: kernel.eclass rewrite for a clean base regarding the 2.6
6# series of kernel with back-compatibility for 2.4 6# series of kernel with back-compatibility for 2.4
7# 7#
8# Maintainer: John Mylchreest <johnm@gentoo.org> 8# Original author: John Mylchreest <johnm@gentoo.org>
9# Maintainer: kernel-misc@gentoo.org
9# 10#
10# Please direct your bugs to the current eclass maintainer :) 11# Please direct your bugs to the current eclass maintainer :)
11 12
12# added functionality: 13# added functionality:
13# unipatch - a flexible, singular method to extract, add and remove patches. 14# unipatch - a flexible, singular method to extract, add and remove patches.
30# the patchset version for 31# the patchset version for
31# and not use it as a true package revision 32# and not use it as a true package revision
32# K_EXTRAEINFO - this is a new-line seperated list of einfo displays in 33# K_EXTRAEINFO - this is a new-line seperated list of einfo displays in
33# postinst and can be used to carry additional postinst 34# postinst and can be used to carry additional postinst
34# messages 35# messages
36# K_EXTRAELOG - same as K_EXTRAEINFO except using elog instead of einfo
35# K_EXTRAEWARN - same as K_EXTRAEINFO except ewarn's instead of einfo's 37# K_EXTRAEWARN - same as K_EXTRAEINFO except using ewarn instead of einfo
36# K_SYMLINK - if this is set, then forcably create symlink anyway 38# K_SYMLINK - if this is set, then forcably create symlink anyway
37# 39#
38# K_DEFCONFIG - Allow specifying a different defconfig target. 40# K_DEFCONFIG - Allow specifying a different defconfig target.
39# If length zero, defaults to "defconfig". 41# If length zero, defaults to "defconfig".
40# K_WANT_GENPATCHES - Apply genpatches to kernel source. Provide any 42# K_WANT_GENPATCHES - Apply genpatches to kernel source. Provide any
41# combination of "base" and "extras" 43# combination of "base" and "extras"
42# K_GENPATCHES_VER - The version of the genpatches tarball(s) to apply. 44# K_GENPATCHES_VER - The version of the genpatches tarball(s) to apply.
43# A value of "5" would apply genpatches-2.6.12-5 to 45# A value of "5" would apply genpatches-2.6.12-5 to
44# my-sources-2.6.12.ebuild 46# my-sources-2.6.12.ebuild
47# K_SECURITY_UNSUPPORTED- If set, this kernel is unsupported by Gentoo Security
45 48
46# H_SUPPORTEDARCH - this should be a space separated list of ARCH's which 49# H_SUPPORTEDARCH - this should be a space separated list of ARCH's which
47# can be supported by the headers ebuild 50# can be supported by the headers ebuild
48 51
49# UNIPATCH_LIST - space delimetered list of patches to be applied to the 52# UNIPATCH_LIST - space delimetered list of patches to be applied to the
55# UNIPATCH_DOCS - space delimemeted list of docs to be installed to 58# UNIPATCH_DOCS - space delimemeted list of docs to be installed to
56# the doc dir 59# the doc dir
57# UNIPATCH_STRICTORDER - if this is set places patches into directories of 60# UNIPATCH_STRICTORDER - if this is set places patches into directories of
58# order, so they are applied in the order passed 61# order, so they are applied in the order passed
59 62
60inherit toolchain-funcs versionator multilib 63inherit eutils toolchain-funcs versionator multilib
61EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst pkg_postinst 64EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst pkg_postinst
62 65
63# Added by Daniel Ostrow <dostrow@gentoo.org> 66# Added by Daniel Ostrow <dostrow@gentoo.org>
64# This is an ugly hack to get around an issue with a 32-bit userland on ppc64. 67# This is an ugly hack to get around an issue with a 32-bit userland on ppc64.
65# I will remove it when I come up with something more reasonable. 68# I will remove it when I come up with something more reasonable.
66[[ ${PROFILE_ARCH} == 'ppc64' ]] && CHOST='powerpc64-unknown-linux-gnu' 69[[ ${PROFILE_ARCH} == "ppc64" ]] && CHOST="powerpc64-${CHOST#*-}"
67 70
68export CTARGET=${CTARGET:-${CHOST}} 71export CTARGET=${CTARGET:-${CHOST}}
69if [[ ${CTARGET} == ${CHOST} && ${CATEGORY/cross-} != ${CATEGORY} ]]; then 72if [[ ${CTARGET} == ${CHOST} && ${CATEGORY/cross-} != ${CATEGORY} ]]; then
70 export CTARGET=${CATEGORY/cross-} 73 export CTARGET=${CATEGORY/cross-}
71fi 74fi
72 75
73HOMEPAGE="http://www.kernel.org/ http://www.gentoo.org/" 76HOMEPAGE="http://www.kernel.org/ http://www.gentoo.org/ ${HOMEPAGE}"
74LICENSE="GPL-2" 77LICENSE="GPL-2"
78
79# No need to run scanelf/strip on kernel sources/headers (bug #134453).
80RESTRICT="binchecks strip"
75 81
76# set LINUX_HOSTCFLAGS if not already set 82# set LINUX_HOSTCFLAGS if not already set
77[[ -z ${LINUX_HOSTCFLAGS} ]] && \ 83[[ -z ${LINUX_HOSTCFLAGS} ]] && \
78 LINUX_HOSTCFLAGS="-Wall -Wstrict-prototypes -Os -fomit-frame-pointer -I${S}/include" 84 LINUX_HOSTCFLAGS="-Wall -Wstrict-prototypes -Os -fomit-frame-pointer -I${S}/include"
79 85
99 105
100#Eclass functions only from here onwards ... 106#Eclass functions only from here onwards ...
101#============================================================== 107#==============================================================
102handle_genpatches() { 108handle_genpatches() {
103 local tarball 109 local tarball
104 [[ -z ${K_WANT_GENPATCHES} || -z ${K_GENPATCHES_VER} ]] && return -1 110 [[ -z ${K_WANT_GENPATCHES} || -z ${K_GENPATCHES_VER} ]] && return 1
105 111
106 for i in ${K_WANT_GENPATCHES} ; do 112 for i in ${K_WANT_GENPATCHES} ; do
107 tarball="genpatches-${OKV}-${K_GENPATCHES_VER}.${i}.tar.bz2" 113 tarball="genpatches-${OKV}-${K_GENPATCHES_VER}.${i}.tar.bz2"
108 GENPATCHES_URI="${GENPATCHES_URI} mirror://gentoo/${tarball}" 114 GENPATCHES_URI="${GENPATCHES_URI} mirror://gentoo/${tarball}"
109 UNIPATCH_LIST_GENPATCHES="${UNIPATCH_LIST_GENPATCHES} ${DISTDIR}/${tarball}" 115 UNIPATCH_LIST_GENPATCHES="${UNIPATCH_LIST_GENPATCHES} ${DISTDIR}/${tarball}"
279} 285}
280 286
281# Capture the sources type and set DEPENDs 287# Capture the sources type and set DEPENDs
282if [[ ${ETYPE} == sources ]]; then 288if [[ ${ETYPE} == sources ]]; then
283 DEPEND="!build? ( sys-apps/sed 289 DEPEND="!build? ( sys-apps/sed
284 >=sys-devel/binutils-2.11.90.0.31 ) 290 >=sys-devel/binutils-2.11.90.0.31 )"
285 doc? ( app-text/docbook-sgml-utils
286 app-text/xmlto )"
287 RDEPEND="!build? ( >=sys-libs/ncurses-5.2 291 RDEPEND="!build? ( >=sys-libs/ncurses-5.2
288 sys-devel/make ) 292 sys-devel/make )"
289 virtual/dev-manager" 293 PDEPEND="virtual/dev-manager"
290 294
291 PROVIDE="virtual/linux-sources" 295 PROVIDE="virtual/linux-sources"
292 kernel_is gt 2 4 && PROVIDE="${PROVIDE} virtual/alsa" 296 kernel_is gt 2 4 && PROVIDE="${PROVIDE} virtual/alsa"
293 297
294 SLOT="${PVR}" 298 SLOT="${PVR}"
295 DESCRIPTION="Sources for the ${KV_MAJOR}.${KV_MINOR} linux kernel" 299 DESCRIPTION="Sources for the ${KV_MAJOR}.${KV_MINOR} linux kernel"
296 IUSE="symlink build doc" 300 IUSE="symlink build"
297elif [[ ${ETYPE} == headers ]]; then 301elif [[ ${ETYPE} == headers ]]; then
298 DESCRIPTION="Linux system headers" 302 DESCRIPTION="Linux system headers"
299 IUSE=""
300 303
301 # Since we should NOT honour KBUILD_OUTPUT in headers 304 # Since we should NOT honour KBUILD_OUTPUT in headers
302 # lets unset it here. 305 # lets unset it here.
303 unset KBUILD_OUTPUT 306 unset KBUILD_OUTPUT
304 307
321 && echo /usr/include \ 324 && echo /usr/include \
322 || echo /usr/${CTARGET}/usr/include 325 || echo /usr/${CTARGET}/usr/include
323} 326}
324 327
325cross_pre_c_headers() { 328cross_pre_c_headers() {
326 has _E_CROSS_HEADERS_ONLY ${USE} && [[ ${CHOST} != ${CTARGET} ]] 329 use crosscompile_opts_headers-only && [[ ${CHOST} != ${CTARGET} ]]
327} 330}
328 331
329env_setup_xmakeopts() { 332env_setup_xmakeopts() {
330 # Kernel ARCH != portage ARCH 333 # Kernel ARCH != portage ARCH
331 export KARCH=$(tc-arch-kernel) 334 export KARCH=$(tc-arch-kernel)
354 357
355unpack_2_6() { 358unpack_2_6() {
356 # this file is required for other things to build properly, so we 359 # this file is required for other things to build properly, so we
357 # autogenerate it ... generate a .config to keep version.h build from 360 # autogenerate it ... generate a .config to keep version.h build from
358 # spitting out an annoying warning 361 # spitting out an annoying warning
359 make -s mrproper ${xmakeopts} 2>/dev/null || die "make mrproper failed" 362 make -s mrproper ${xmakeopts} 2>/dev/null \
360 make -s defconfig ${xmakeopts} &>/dev/null 2>&1 || die "make defconfig failed" 363 || die "make mrproper failed"
361 make -s include/linux/version.h ${xmakeopts} || die "make include/linux/version.h failed" 364
362 rm -f .config 365 # quick fix for bug #132152 which triggers when it cannot include linux
366 # headers (ie, we have not installed it yet)
367 if ! make -s defconfig ${xmakeopts} &>/dev/null 2>&1 ; then
368 touch .config
369 eerror "make defconfig failed."
370 eerror "assuming you dont have any headers installed yet and continuing"
371 epause 5
372 fi
373
374 make -s include/linux/version.h ${xmakeopts} 2>/dev/null \
375 || die "make include/linux/version.h failed"
376 rm -f .config >/dev/null
363} 377}
364 378
365universal_unpack() { 379universal_unpack() {
366 cd ${WORKDIR} 380 cd ${WORKDIR}
367 unpack linux-${OKV}.tar.bz2 381 unpack linux-${OKV}.tar.bz2
376 390
377 # remove all backup files 391 # remove all backup files
378 find . -iname "*~" -exec rm {} \; 2> /dev/null 392 find . -iname "*~" -exec rm {} \; 2> /dev/null
379 393
380 # fix a problem on ppc where TOUT writes to /usr/src/linux breaking sandbox 394 # fix a problem on ppc where TOUT writes to /usr/src/linux breaking sandbox
381 use ppc && \ 395 # only do this for kernel < 2.6.27 since this file does not exist in later
396 # kernels
397 if [[ ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} < 2.6.27 ]]
398 then
399 sed -i \
382 sed -ie 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \ 400 -e 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
383 "${S}"/arch/ppc/Makefile 401 "${S}"/arch/ppc/Makefile
402 else
403 sed -i \
404 -e 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
405 "${S}"/arch/powerpc/Makefile
406 fi
384} 407}
385 408
386unpack_set_extraversion() { 409unpack_set_extraversion() {
387 cd "${S}" 410 cd "${S}"
388 sed -i -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile 411 sed -i -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile
389 cd ${OLDPWD} 412 cd "${OLDPWD}"
390} 413}
391 414
392# Should be done after patches have been applied 415# Should be done after patches have been applied
393# Otherwise patches that modify the same area of Makefile will fail 416# Otherwise patches that modify the same area of Makefile will fail
394unpack_fix_install_path() { 417unpack_fix_install_path() {
395 cd "${S}" 418 cd "${S}"
396 sed -i -e 's:#export\tINSTALL_PATH:export\tINSTALL_PATH:' Makefile 419 sed -i -e 's:#export\tINSTALL_PATH:export\tINSTALL_PATH:' Makefile
397} 420}
398 421
399unpack_fix_docbook() {
400 if [[ -d ${S}/Documentation/DocBook ]]; then
401 cd "${S}"/Documentation/DocBook
402 sed -ie "s:db2:docbook2:g" Makefile
403 cd ${OLDPWD}
404 fi
405}
406
407# Compile Functions 422# Compile Functions
408#============================================================== 423#==============================================================
409compile_headers() { 424compile_headers() {
410 env_setup_xmakeopts 425 env_setup_xmakeopts
411 426
417 if kernel_is 2 4; then 432 if kernel_is 2 4; then
418 yes "" | make oldconfig ${xmakeopts} 433 yes "" | make oldconfig ${xmakeopts}
419 echo ">>> make oldconfig complete" 434 echo ">>> make oldconfig complete"
420 make dep ${xmakeopts} 435 make dep ${xmakeopts}
421 elif kernel_is 2 6; then 436 elif kernel_is 2 6; then
437 # 2.6.18 introduces headers_install which means we dont need any
438 # of this crap anymore :D
439 kernel_is ge 2 6 18 && return 0
440
422 # autoconf.h isnt generated unless it already exists. plus, we have 441 # autoconf.h isnt generated unless it already exists. plus, we have
423 # no guarantee that any headers are installed on the system... 442 # no guarantee that any headers are installed on the system...
424 [[ -f ${ROOT}/usr/include/linux/autoconf.h ]] \ 443 [[ -f ${ROOT}/usr/include/linux/autoconf.h ]] \
425 || touch include/linux/autoconf.h 444 || touch include/linux/autoconf.h
426 445
427 # if K_DEFCONFIG isn't set, force to "defconfig" 446 # if K_DEFCONFIG isn't set, force to "defconfig"
428 # needed by mips 447 # needed by mips
429 if [[ -z ${K_DEFCONFIG} ]]; then 448 if [[ -z ${K_DEFCONFIG} ]]; then
449 if [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.16) ]]; then
450 case ${CTARGET} in
451 powerpc64*) K_DEFCONFIG="ppc64_defconfig";;
452 powerpc*) K_DEFCONFIG="pmac32_defconfig";;
453 *) K_DEFCONFIG="defconfig";;
454 esac
455 else
430 K_DEFCONFIG="defconfig" 456 K_DEFCONFIG="defconfig"
457 fi
431 fi 458 fi
432 459
433 # if there arent any installed headers, then there also isnt an asm 460 # if there arent any installed headers, then there also isnt an asm
434 # symlink in /usr/include/, and make defconfig will fail, so we have 461 # symlink in /usr/include/, and make defconfig will fail, so we have
435 # to force an include path with $S. 462 # to force an include path with $S.
458 485
459 # no changes, so lets do nothing 486 # no changes, so lets do nothing
460 return 1 487 return 1
461} 488}
462 489
463compile_manpages() {
464 einfo "Making manpages ..."
465 env -u ARCH -u KBUILD_OUTPUT make mandocs
466}
467
468# install functions 490# install functions
469#============================================================== 491#==============================================================
470install_universal() { 492install_universal() {
471 #fix silly permissions in tarball 493 #fix silly permissions in tarball
472 cd ${WORKDIR} 494 cd ${WORKDIR}
473 chown -R root:0 * 495 chown -R root:0 * >& /dev/null
474 chmod -R a+r-w+X,u+w * 496 chmod -R a+r-w+X,u+w *
475 cd ${OLDPWD} 497 cd ${OLDPWD}
476} 498}
477 499
478install_headers() { 500install_headers() {
479 local ddir=$(kernel_header_destdir) 501 local ddir=$(kernel_header_destdir)
480 502
503 # 2.6.18 introduces headers_install which means we dont need any
504 # of this crap anymore :D
505 if kernel_is ge 2 6 18 ; then
506 env_setup_xmakeopts
507 emake headers_install INSTALL_HDR_PATH="${D}"/${ddir}/.. ${xmakeopts} || die
508
509 # let other packages install some of these headers
510 rm -rf "${D}"/${ddir}/sound #alsa-headers
511 rm -rf "${D}"/${ddir}/scsi #glibc/uclibc/etc...
512 return 0
513 fi
514
515 # Do not use "linux/*" as that can cause problems with very long
516 # $S values where the cmdline to cp is too long
481 cd "${S}" 517 cd "${S}"
482 dodir ${ddir}/linux 518 dodir ${ddir}/linux
483 cp -pPR "${S}"/include/linux/* ${D}/${ddir}/linux 519 cp -pPR "${S}"/include/linux "${D}"/${ddir}/ || die
484 rm -rf ${D}/${ddir}/linux/modules 520 rm -rf "${D}"/${ddir}/linux/modules
485 521
486 # Handle multilib headers and crap 522 # Handle multilib headers and crap
487 local multi_dirs="" multi_defs="" 523 local multi_dirs="" multi_defs=""
488 case $(tc-arch-kernel) in 524 case $(tc-arch-kernel) in
489 sparc64) 525 sparc64)
543 579
544 cd ${OLDPWD} 580 cd ${OLDPWD}
545} 581}
546 582
547install_sources() { 583install_sources() {
548 local doc docs file 584 local file
549 585
550 cd "${S}" 586 cd "${S}"
551 dodir /usr/src 587 dodir /usr/src
552 echo ">>> Copying sources ..." 588 echo ">>> Copying sources ..."
553 589
567 [[ -f ${FILESDIR}/../ChangeLog ]] && \ 603 [[ -f ${FILESDIR}/../ChangeLog ]] && \
568 echo "Please check the ebuild ChangeLog for more details." \ 604 echo "Please check the ebuild ChangeLog for more details." \
569 > "${S}"/patches.txt 605 > "${S}"/patches.txt
570 fi 606 fi
571 607
572 if use doc ; then
573 install_manpages
574
575 for doc in ${UNIPATCH_DOCS}; do [[ -f ${doc} ]] && docs="${docs} ${doc}"; done
576 if [[ -f ${S}/patches.txt ]]; then docs="${docs} ${S}/patches.txt"; fi
577 [[ -n ${docs} ]] && dodoc ${docs}
578 fi
579
580 mv ${WORKDIR}/linux* ${D}/usr/src 608 mv ${WORKDIR}/linux* ${D}/usr/src
581}
582
583install_manpages() {
584 kernel_is lt 2 5 && return
585
586 local myfiles="Documentation/DocBook/Makefile"
587 kernel_is lt 2 6 12 && myfiles="scripts/makeman ${myfiles}"
588
589 sed -ie "s#/usr/local/man#${D}/usr/share/man#g" ${myfiles}
590 ebegin "Installing manpages"
591 env -u ARCH make installmandocs
592 eend $?
593 sed -ie "s#${D}/usr/share/man#/usr/local/man#g" ${myfiles}
594} 609}
595 610
596# pkg_preinst functions 611# pkg_preinst functions
597#============================================================== 612#==============================================================
598preinst_headers() { 613preinst_headers() {
626 641
627 # Don't forget to make directory for sysfs 642 # Don't forget to make directory for sysfs
628 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys 643 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys
629 644
630 echo 645 echo
631 einfo "After installing a new kernel of any version, it is important"
632 einfo "that you have the appropriate /etc/modules.autoload.d/kernel-X.Y"
633 einfo "created (X.Y is the first 2 parts of your new kernel version)"
634 echo
635 einfo "For example, this kernel will require:"
636 einfo "/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}"
637 echo
638 einfo "If you are upgrading from a previous kernel, you may be interested" 646 elog "If you are upgrading from a previous kernel, you may be interested"
639 einfo "in the following documents:" 647 elog "in the following document:"
640 einfo " - General upgrade guide: http://www.gentoo.org/doc/en/kernel-upgrade.xml" 648 elog " - General upgrade guide: http://www.gentoo.org/doc/en/kernel-upgrade.xml"
641 kernel_is_2_6 && einfo " - 2.4 to 2.6 migration guide: http://www.gentoo.org/doc/en/migration-to-2.6.xml"
642 if kernel_is ge 2 6 13; then
643 ewarn "As of 2.6.13 the support for devfs has been removed."
644 ewarn "You will be required to either manage a static /dev"
645 ewarn "or to ensure that udev is starting on boot."
646 fi
647 echo 649 echo
648 650
649 # if K_EXTRAEINFO is set then lets display it now 651 # if K_EXTRAEINFO is set then lets display it now
650 if [[ -n ${K_EXTRAEINFO} ]]; then 652 if [[ -n ${K_EXTRAEINFO} ]]; then
651 echo ${K_EXTRAEINFO} | fmt | 653 echo ${K_EXTRAEINFO} | fmt |
652 while read -s ELINE; do einfo "${ELINE}"; done 654 while read -s ELINE; do einfo "${ELINE}"; done
653 fi 655 fi
654 656
657 # if K_EXTRAELOG is set then lets display it now
658 if [[ -n ${K_EXTRAELOG} ]]; then
659 echo ${K_EXTRAELOG} | fmt |
660 while read -s ELINE; do elog "${ELINE}"; done
661 fi
662
655 # if K_EXTRAEWARN is set then lets display it now 663 # if K_EXTRAEWARN is set then lets display it now
656 if [[ -n ${K_EXTRAEWARN} ]]; then 664 if [[ -n ${K_EXTRAEWARN} ]]; then
657 echo ${K_EXTRAEWARN} | fmt | 665 echo ${K_EXTRAEWARN} | fmt |
658 while read -s ELINE; do ewarn "${ELINE}"; done 666 while read -s ELINE; do ewarn "${ELINE}"; done
659 fi 667 fi
668
669 # optionally display security unsupported message
670 if [[ -n ${K_SECURITY_UNSUPPORTED} ]]; then
671 echo
672 ewarn "${PN} is UNSUPPORTED by Gentoo Security."
673 ewarn "This means that it is likely to be vulnerable to recent security issues."
674 ewarn "For specific information on why this kernel is unsupported, please read:"
675 ewarn "http://www.gentoo.org/proj/en/security/kernel.xml"
676 fi
677
678 # warn sparc users that they need to do cross-compiling with >= 2.6.25(bug #214765)
679 KV_MAJOR=$(get_version_component_range 1 ${OKV})
680 KV_MINOR=$(get_version_component_range 2 ${OKV})
681 KV_PATCH=$(get_version_component_range 3 ${OKV})
682 if [[ "$(tc-arch)" = "sparc" ]] \
683 && [[ ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} > 2.6.24 ]]
684 then
685 echo
686 elog "NOTE: Since 2.6.25 the kernel Makefile has changed in a way that"
687 elog "you now need to do"
688 elog " make CROSS_COMPILE=sparc64-unknown-linux-gnu-"
689 elog "instead of just"
690 elog " make"
691 elog "to compile the kernel. For more information please browse to"
692 elog "https://bugs.gentoo.org/show_bug.cgi?id=214765"
693 echo
694 fi
660} 695}
661 696
662postinst_headers() { 697postinst_headers() {
663 einfo "Kernel headers are usually only used when recompiling glibc, as such, following the installation" 698 elog "Kernel headers are usually only used when recompiling your system libc, as"
664 einfo "of newer headers, it is advised that you re-merge glibc as follows:" 699 elog "such, following the installation of newer headers, it is advised that you"
665 einfo "emerge glibc" 700 elog "re-merge your system libc."
666 einfo "Failure to do so will cause glibc to not make use of newer features present in the updated kernel" 701 elog "Failure to do so will cause your system libc to not make use of newer"
667 einfo "headers." 702 elog "features present in the updated kernel headers."
668} 703}
669 704
670# pkg_setup functions 705# pkg_setup functions
671#============================================================== 706#==============================================================
672setup_headers() { 707setup_headers() {
686 721
687# unipatch 722# unipatch
688#============================================================== 723#==============================================================
689unipatch() { 724unipatch() {
690 local i x y z extention PIPE_CMD UNIPATCH_DROP KPATCH_DIR PATCH_DEPTH ELINE 725 local i x y z extention PIPE_CMD UNIPATCH_DROP KPATCH_DIR PATCH_DEPTH ELINE
691 local STRICT_COUNT PATCH_LEVEL myLC_ALL myLANG 726 local STRICT_COUNT PATCH_LEVEL myLC_ALL myLANG extglob_bak
692 727
693 # set to a standard locale to ensure sorts are ordered properly. 728 # set to a standard locale to ensure sorts are ordered properly.
694 myLC_ALL="${LC_ALL}" 729 myLC_ALL="${LC_ALL}"
695 myLANG="${LANG}" 730 myLANG="${LANG}"
696 LC_ALL="C" 731 LC_ALL="C"
698 733
699 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/" 734 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/"
700 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR} 735 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR}
701 736
702 # We're gonna need it when doing patches with a predefined patchlevel 737 # We're gonna need it when doing patches with a predefined patchlevel
738 extglob_bak=$(shopt -p extglob)
703 shopt -s extglob 739 shopt -s extglob
704 740
705 # This function will unpack all passed tarballs, add any passed patches, and remove any passed patchnumbers 741 # This function will unpack all passed tarballs, add any passed patches, and remove any passed patchnumbers
706 # usage can be either via an env var or by params 742 # usage can be either via an env var or by params
707 # although due to the nature we pass this within this eclass 743 # although due to the nature we pass this within this eclass
709 # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}" 745 # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}"
710 UNIPATCH_LIST="${@}" 746 UNIPATCH_LIST="${@}"
711 747
712 #unpack any passed tarballs 748 #unpack any passed tarballs
713 for i in ${UNIPATCH_LIST}; do 749 for i in ${UNIPATCH_LIST}; do
714 if [ -n "$(echo ${i} | grep -e "\.tar" -e "\.tbz" -e "\.tgz")" ]; then 750 if echo ${i} | grep -qs -e "\.tar" -e "\.tbz" -e "\.tgz" ; then
715 extention=${i/*./}
716 extention=${extention/:*/}
717 case ${extention} in
718 tbz2) PIPE_CMD="tar -xvjf";;
719 bz2) PIPE_CMD="tar -xvjf";;
720 tgz) PIPE_CMD="tar -xvzf";;
721 gz) PIPE_CMD="tar -xvzf";;
722 *) eerror "Unrecognized tarball compression"
723 die "Unrecognized tarball compression";;
724 esac
725
726 if [ -n "${UNIPATCH_STRICTORDER}" ]; then 751 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
727 unset z 752 unset z
728 STRICT_COUNT=$((10#${STRICT_COUNT} + 1)) 753 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
729 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++)); 754 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
730 do z="${z}0"; 755 do z="${z}0";
731 done 756 done
732 PATCH_ORDER="${z}${STRICT_COUNT}" 757 PATCH_ORDER="${z}${STRICT_COUNT}"
733 758
734 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/ 759 mkdir -p "${KPATCH_DIR}/${PATCH_ORDER}"
735 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR}/${PATCH_ORDER}/ 1>/dev/null 760 pushd "${KPATCH_DIR}/${PATCH_ORDER}" >/dev/null
761 unpack ${i##*/}
762 popd >/dev/null
736 else 763 else
737 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR} 1>/dev/null 764 pushd "${KPATCH_DIR}" >/dev/null
765 unpack ${i##*/}
766 popd >/dev/null
738 fi 767 fi
739 768
740 if [ $? == 0 ]; then
741 einfo "${i/*\//} unpacked"
742 [ -n "$(echo ${i} | grep ':')" ] && echo ">>> Strict patch levels not currently supported for tarballed patchsets" 769 [[ ${i} == *:* ]] && echo ">>> Strict patch levels not currently supported for tarballed patchsets"
743 else
744 eerror "Failed to unpack ${i/:*/}"
745 die "unable to unpack patch tarball"
746 fi
747 else 770 else
748 extention=${i/*./} 771 extention=${i/*./}
749 extention=${extention/:*/} 772 extention=${extention/:*/}
750 PIPE_CMD="" 773 PIPE_CMD=""
751 case ${extention} in 774 case ${extention} in
794 KPATCH_DIR="" 817 KPATCH_DIR=""
795 for i in $(find ${x} -type d | sort -n); do 818 for i in $(find ${x} -type d | sort -n); do
796 KPATCH_DIR="${KPATCH_DIR} ${i}" 819 KPATCH_DIR="${KPATCH_DIR} ${i}"
797 done 820 done
798 821
822 # do not apply fbcondecor patch to sparc/sparc64 as it breaks boot
823 # bug #272676
824 if [[ "$(tc-arch)" = "sparc" || "$(tc-arch)" = "sparc64" ]]; then
825 if [[ ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} > 2.6.28 ]]; then
826 UNIPATCH_DROP="${UNIPATCH_DROP} *_fbcondecor-0.9.6.patch"
827 echo
828 ewarn "fbcondecor currently prevents sparc/sparc64 from booting"
829 ewarn "for kernel versions >= 2.6.29. Removing fbcondecor patch."
830 ewarn "See https://bugs.gentoo.org/show_bug.cgi?id=272676 for details"
831 echo
832 fi
833 fi
834
799 #so now lets get rid of the patchno's we want to exclude 835 #so now lets get rid of the patchno's we want to exclude
800 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}" 836 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}"
801 for i in ${UNIPATCH_DROP}; do 837 for i in ${UNIPATCH_DROP}; do
802 ebegin "Excluding Patch #${i}" 838 ebegin "Excluding Patch #${i}"
803 for x in ${KPATCH_DIR}; do rm -f ${x}/${i}* 2>/dev/null; done 839 for x in ${KPATCH_DIR}; do rm -f ${x}/${i}* 2>/dev/null; done
816 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi 852 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi
817 853
818 ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)" 854 ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)"
819 while [ ${PATCH_DEPTH} -lt 5 ]; do 855 while [ ${PATCH_DEPTH} -lt 5 ]; do
820 echo "Attempting Dry-run:" >> ${STDERR_T} 856 echo "Attempting Dry-run:" >> ${STDERR_T}
821 echo "cmd: patch -p${PATCH_DEPTH} --dry-run -f < ${i}" >> ${STDERR_T} 857 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i}" >> ${STDERR_T}
822 echo "=======================================================" >> ${STDERR_T} 858 echo "=======================================================" >> ${STDERR_T}
823 if [ $(patch -p${PATCH_DEPTH} --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then 859 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then
824 echo "Attempting patch:" > ${STDERR_T} 860 echo "Attempting patch:" > ${STDERR_T}
825 echo "cmd: patch -p${PATCH_DEPTH} -f < ${i}" >> ${STDERR_T} 861 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i}" >> ${STDERR_T}
826 echo "=======================================================" >> ${STDERR_T} 862 echo "=======================================================" >> ${STDERR_T}
827 if [ $(patch -p${PATCH_DEPTH} -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then 863 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then
828 eend 0 864 eend 0
829 rm ${STDERR_T} 865 rm ${STDERR_T}
830 break 866 break
831 else 867 else
832 eend 1 868 eend 1
859 # clean up KPATCH_DIR's - fixes bug #53610 895 # clean up KPATCH_DIR's - fixes bug #53610
860 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done 896 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done
861 897
862 LC_ALL="${myLC_ALL}" 898 LC_ALL="${myLC_ALL}"
863 LANG="${myLANG}" 899 LANG="${myLANG}"
900 eval ${extglob_bak}
864} 901}
865 902
866# getfilevar accepts 2 vars as follows: 903# getfilevar accepts 2 vars as follows:
867# getfilevar <VARIABLE> <CONFIGFILE> 904# getfilevar <VARIABLE> <CONFIGFILE>
868# pulled from linux-info 905# pulled from linux-info
980 return 0 1017 return 0
981} 1018}
982 1019
983headers___fix() { 1020headers___fix() {
984 # Voodoo to partially fix broken upstream headers. 1021 # Voodoo to partially fix broken upstream headers.
985 # Issues with this function should go to plasmaroo. 1022 # note: do not put inline/asm/volatile together (breaks "inline asm volatile")
986 sed -i \ 1023 sed -i \
987 -e "s/\([ "$'\t'"]\)\(u\|s\)\(8\|16\|32\|64\)\([ "$'\t'"]\)/\1__\2\3\4/g;" \ 1024 -e '/^\#define.*_TYPES_H/{:loop n; bloop}' \
988 -e 's/ \(u\|s\)\(8\|16\|32\|64\)$/ __\1\2/g' \ 1025 -e 's:\<\([us]\(8\|16\|32\|64\)\)\>:__\1:g' \
989 -e 's/\([(, ]\)\(u\|s\)64\([, )]\)/\1__\264\3/g' \ 1026 -e "s/\([[:space:]]\)inline\([[:space:](]\)/\1__inline__\2/g" \
990 -e "s/^\(u\|s\)\(8\|16\|32\|64\)\([ "$'\t'"]\)/__\1\2\3/g;" \ 1027 -e "s/\([[:space:]]\)asm\([[:space:](]\)/\1__asm__\2/g" \
991 -e "s/ inline / __inline__ /g" \ 1028 -e "s/\([[:space:]]\)volatile\([[:space:](]\)/\1__volatile__\2/g" \
992 "$@" 1029 "$@"
993} 1030}
994 1031
995# common functions 1032# common functions
996#============================================================== 1033#==============================================================
1008 [[ $(type -t kernel-2_hook_premake) == "function" ]] && kernel-2_hook_premake 1045 [[ $(type -t kernel-2_hook_premake) == "function" ]] && kernel-2_hook_premake
1009 1046
1010 debug-print "Doing unpack_set_extraversion" 1047 debug-print "Doing unpack_set_extraversion"
1011 1048
1012 [[ -z ${K_NOSETEXTRAVERSION} ]] && unpack_set_extraversion 1049 [[ -z ${K_NOSETEXTRAVERSION} ]] && unpack_set_extraversion
1013 unpack_fix_docbook
1014 unpack_fix_install_path 1050 unpack_fix_install_path
1015 1051
1016 # Setup xmakeopts and cd into sourcetree. 1052 # Setup xmakeopts and cd into sourcetree.
1017 env_setup_xmakeopts 1053 env_setup_xmakeopts
1018 cd "${S}" 1054 cd "${S}"
1028} 1064}
1029 1065
1030kernel-2_src_compile() { 1066kernel-2_src_compile() {
1031 cd "${S}" 1067 cd "${S}"
1032 [[ ${ETYPE} == headers ]] && compile_headers 1068 [[ ${ETYPE} == headers ]] && compile_headers
1033 [[ ${ETYPE} == sources ]] && \
1034 use doc && compile_manpages
1035} 1069}
1036 1070
1037kernel-2_pkg_preinst() { 1071kernel-2_pkg_preinst() {
1038 [[ ${ETYPE} == headers ]] && preinst_headers 1072 [[ ${ETYPE} == headers ]] && preinst_headers
1039} 1073}
1048 [[ ${ETYPE} == headers ]] && postinst_headers 1082 [[ ${ETYPE} == headers ]] && postinst_headers
1049 [[ ${ETYPE} == sources ]] && postinst_sources 1083 [[ ${ETYPE} == sources ]] && postinst_sources
1050} 1084}
1051 1085
1052kernel-2_pkg_setup() { 1086kernel-2_pkg_setup() {
1087 if kernel_is 2 4; then
1088 if [ "$( gcc-major-version )" -eq "4" ] ; then
1089 echo
1090 ewarn "Be warned !! >=sys-devel/gcc-4.0.0 isn't supported with linux-2.4!"
1091 ewarn "Either switch to another gcc-version (via gcc-config) or use a"
1092 ewarn "newer kernel that supports gcc-4."
1093 echo
1094 ewarn "Also be aware that bugreports about gcc-4 not working"
1095 ewarn "with linux-2.4 based ebuilds will be closed as INVALID!"
1096 echo
1097 epause 10
1098 fi
1099 fi
1100
1053 ABI="${KERNEL_ABI}" 1101 ABI="${KERNEL_ABI}"
1054 [[ ${ETYPE} == headers ]] && setup_headers 1102 [[ ${ETYPE} == headers ]] && setup_headers
1055 [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..." 1103 [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..."
1056} 1104}

Legend:
Removed from v.1.176  
changed lines
  Added in v.1.221

  ViewVC Help
Powered by ViewVC 1.1.20