/[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.201 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.201 2007/01/25 22:06:35 dsd 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
103 105
104#Eclass functions only from here onwards ... 106#Eclass functions only from here onwards ...
105#============================================================== 107#==============================================================
106handle_genpatches() { 108handle_genpatches() {
107 local tarball 109 local tarball
108 [[ -z ${K_WANT_GENPATCHES} || -z ${K_GENPATCHES_VER} ]] && return -1 110 [[ -z ${K_WANT_GENPATCHES} || -z ${K_GENPATCHES_VER} ]] && return 1
109 111
110 for i in ${K_WANT_GENPATCHES} ; do 112 for i in ${K_WANT_GENPATCHES} ; do
111 tarball="genpatches-${OKV}-${K_GENPATCHES_VER}.${i}.tar.bz2" 113 tarball="genpatches-${OKV}-${K_GENPATCHES_VER}.${i}.tar.bz2"
112 GENPATCHES_URI="${GENPATCHES_URI} mirror://gentoo/${tarball}" 114 GENPATCHES_URI="${GENPATCHES_URI} mirror://gentoo/${tarball}"
113 UNIPATCH_LIST_GENPATCHES="${UNIPATCH_LIST_GENPATCHES} ${DISTDIR}/${tarball}" 115 UNIPATCH_LIST_GENPATCHES="${UNIPATCH_LIST_GENPATCHES} ${DISTDIR}/${tarball}"
285# Capture the sources type and set DEPENDs 287# Capture the sources type and set DEPENDs
286if [[ ${ETYPE} == sources ]]; then 288if [[ ${ETYPE} == sources ]]; then
287 DEPEND="!build? ( sys-apps/sed 289 DEPEND="!build? ( sys-apps/sed
288 >=sys-devel/binutils-2.11.90.0.31 )" 290 >=sys-devel/binutils-2.11.90.0.31 )"
289 RDEPEND="!build? ( >=sys-libs/ncurses-5.2 291 RDEPEND="!build? ( >=sys-libs/ncurses-5.2
290 sys-devel/make ) 292 sys-devel/make )"
291 virtual/dev-manager" 293 PDEPEND="virtual/dev-manager"
292 294
293 PROVIDE="virtual/linux-sources" 295 PROVIDE="virtual/linux-sources"
294 kernel_is gt 2 4 && PROVIDE="${PROVIDE} virtual/alsa" 296 kernel_is gt 2 4 && PROVIDE="${PROVIDE} virtual/alsa"
295 297
296 SLOT="${PVR}" 298 SLOT="${PVR}"
388 390
389 # remove all backup files 391 # remove all backup files
390 find . -iname "*~" -exec rm {} \; 2> /dev/null 392 find . -iname "*~" -exec rm {} \; 2> /dev/null
391 393
392 # 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
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
393 sed -i \ 399 sed -i \
394 -e 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \ 400 -e 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
395 "${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
396} 407}
397 408
398unpack_set_extraversion() { 409unpack_set_extraversion() {
399 cd "${S}" 410 cd "${S}"
400 sed -i -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile 411 sed -i -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile
479# install functions 490# install functions
480#============================================================== 491#==============================================================
481install_universal() { 492install_universal() {
482 #fix silly permissions in tarball 493 #fix silly permissions in tarball
483 cd ${WORKDIR} 494 cd ${WORKDIR}
484 chown -R root:0 * 495 chown -R root:0 * >& /dev/null
485 chmod -R a+r-w+X,u+w * 496 chmod -R a+r-w+X,u+w *
486 cd ${OLDPWD} 497 cd ${OLDPWD}
487} 498}
488 499
489install_headers() { 500install_headers() {
630 641
631 # Don't forget to make directory for sysfs 642 # Don't forget to make directory for sysfs
632 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys 643 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys
633 644
634 echo 645 echo
635 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"
636 einfo "in the following documents:" 647 elog "in the following document:"
637 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"
638 kernel_is_2_6 && einfo " - 2.4 to 2.6 migration guide: http://www.gentoo.org/doc/en/migration-to-2.6.xml"
639 if kernel_is ge 2 6 13; then
640 ewarn "As of 2.6.13 the support for devfs has been removed."
641 ewarn "You will be required to either manage a static /dev"
642 ewarn "or to ensure that udev is starting on boot."
643 fi
644 echo 649 echo
645 650
646 # if K_EXTRAEINFO is set then lets display it now 651 # if K_EXTRAEINFO is set then lets display it now
647 if [[ -n ${K_EXTRAEINFO} ]]; then 652 if [[ -n ${K_EXTRAEINFO} ]]; then
648 echo ${K_EXTRAEINFO} | fmt | 653 echo ${K_EXTRAEINFO} | fmt |
649 while read -s ELINE; do einfo "${ELINE}"; done 654 while read -s ELINE; do einfo "${ELINE}"; done
655 fi
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
650 fi 661 fi
651 662
652 # if K_EXTRAEWARN is set then lets display it now 663 # if K_EXTRAEWARN is set then lets display it now
653 if [[ -n ${K_EXTRAEWARN} ]]; then 664 if [[ -n ${K_EXTRAEWARN} ]]; then
654 echo ${K_EXTRAEWARN} | fmt | 665 echo ${K_EXTRAEWARN} | fmt |
661 ewarn "${PN} is UNSUPPORTED by Gentoo Security." 672 ewarn "${PN} is UNSUPPORTED by Gentoo Security."
662 ewarn "This means that it is likely to be vulnerable to recent security issues." 673 ewarn "This means that it is likely to be vulnerable to recent security issues."
663 ewarn "For specific information on why this kernel is unsupported, please read:" 674 ewarn "For specific information on why this kernel is unsupported, please read:"
664 ewarn "http://www.gentoo.org/proj/en/security/kernel.xml" 675 ewarn "http://www.gentoo.org/proj/en/security/kernel.xml"
665 fi 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
666} 695}
667 696
668postinst_headers() { 697postinst_headers() {
669 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"
670 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"
671 einfo "emerge glibc" 700 elog "re-merge your system libc."
672 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"
673 einfo "headers." 702 elog "features present in the updated kernel headers."
674} 703}
675 704
676# pkg_setup functions 705# pkg_setup functions
677#============================================================== 706#==============================================================
678setup_headers() { 707setup_headers() {
716 # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}" 745 # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}"
717 UNIPATCH_LIST="${@}" 746 UNIPATCH_LIST="${@}"
718 747
719 #unpack any passed tarballs 748 #unpack any passed tarballs
720 for i in ${UNIPATCH_LIST}; do 749 for i in ${UNIPATCH_LIST}; do
721 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
722 extention=${i/*./}
723 extention=${extention/:*/}
724 case ${extention} in
725 tbz2) PIPE_CMD="tar -xvjf";;
726 bz2) PIPE_CMD="tar -xvjf";;
727 tgz) PIPE_CMD="tar -xvzf";;
728 gz) PIPE_CMD="tar -xvzf";;
729 *) eerror "Unrecognized tarball compression"
730 die "Unrecognized tarball compression";;
731 esac
732
733 if [ -n "${UNIPATCH_STRICTORDER}" ]; then 751 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
734 unset z 752 unset z
735 STRICT_COUNT=$((10#${STRICT_COUNT} + 1)) 753 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
736 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++)); 754 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
737 do z="${z}0"; 755 do z="${z}0";
738 done 756 done
739 PATCH_ORDER="${z}${STRICT_COUNT}" 757 PATCH_ORDER="${z}${STRICT_COUNT}"
740 758
741 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/ 759 mkdir -p "${KPATCH_DIR}/${PATCH_ORDER}"
742 ${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
743 else 763 else
744 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR} 1>/dev/null 764 pushd "${KPATCH_DIR}" >/dev/null
765 unpack ${i##*/}
766 popd >/dev/null
745 fi 767 fi
746 768
747 if [ $? == 0 ]; then
748 einfo "${i/*\//} unpacked"
749 [ -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"
750 else
751 eerror "Failed to unpack ${i/:*/}"
752 die "unable to unpack patch tarball"
753 fi
754 else 770 else
755 extention=${i/*./} 771 extention=${i/*./}
756 extention=${extention/:*/} 772 extention=${extention/:*/}
757 PIPE_CMD="" 773 PIPE_CMD=""
758 case ${extention} in 774 case ${extention} in
800 x=${KPATCH_DIR} 816 x=${KPATCH_DIR}
801 KPATCH_DIR="" 817 KPATCH_DIR=""
802 for i in $(find ${x} -type d | sort -n); do 818 for i in $(find ${x} -type d | sort -n); do
803 KPATCH_DIR="${KPATCH_DIR} ${i}" 819 KPATCH_DIR="${KPATCH_DIR} ${i}"
804 done 820 done
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
805 834
806 #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
807 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}" 836 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}"
808 for i in ${UNIPATCH_DROP}; do 837 for i in ${UNIPATCH_DROP}; do
809 ebegin "Excluding Patch #${i}" 838 ebegin "Excluding Patch #${i}"
988 return 0 1017 return 0
989} 1018}
990 1019
991headers___fix() { 1020headers___fix() {
992 # Voodoo to partially fix broken upstream headers. 1021 # Voodoo to partially fix broken upstream headers.
993 # Issues with this function should go to toolchain. 1022 # note: do not put inline/asm/volatile together (breaks "inline asm volatile")
994 sed -i \ 1023 sed -i \
995 -e '/^\#define.*_TYPES_H/{:loop n; bloop}' \ 1024 -e '/^\#define.*_TYPES_H/{:loop n; bloop}' \
996 -e 's:\<\([us]\(8\|16\|32\|64\)\)\>:__\1:g' \ 1025 -e 's:\<\([us]\(8\|16\|32\|64\)\)\>:__\1:g' \
997 -e "s/ inline / __inline__ /g" \ 1026 -e "s/\([[:space:]]\)inline\([[:space:](]\)/\1__inline__\2/g" \
1027 -e "s/\([[:space:]]\)asm\([[:space:](]\)/\1__asm__\2/g" \
1028 -e "s/\([[:space:]]\)volatile\([[:space:](]\)/\1__volatile__\2/g" \
998 "$@" 1029 "$@"
999} 1030}
1000 1031
1001# common functions 1032# common functions
1002#============================================================== 1033#==============================================================

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

  ViewVC Help
Powered by ViewVC 1.1.20