/[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.199 Revision 1.216
1# Copyright 1999-2005 Gentoo Foundation 1# Copyright 1999-2005 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.199 2006/12/10 18:21:54 phreak Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/kernel-2.eclass,v 1.216 2008/11/13 23:50:55 mpagano 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
387 390
388 # remove all backup files 391 # remove all backup files
389 find . -iname "*~" -exec rm {} \; 2> /dev/null 392 find . -iname "*~" -exec rm {} \; 2> /dev/null
390 393
391 # 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
392 sed -i \ 399 sed -i \
393 -e 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \ 400 -e 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
394 "${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
395} 407}
396 408
397unpack_set_extraversion() { 409unpack_set_extraversion() {
398 cd "${S}" 410 cd "${S}"
399 sed -i -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile 411 sed -i -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile
629 641
630 # Don't forget to make directory for sysfs 642 # Don't forget to make directory for sysfs
631 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys 643 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys
632 644
633 echo 645 echo
634 einfo "After installing a new kernel of any version, it is important"
635 einfo "that you have the appropriate /etc/modules.autoload.d/kernel-X.Y"
636 einfo "created (X.Y is the first 2 parts of your new kernel version)"
637 echo
638 einfo "For example, this kernel will require:"
639 einfo "/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}"
640 echo
641 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"
642 einfo "in the following documents:" 647 elog "in the following document:"
643 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"
644 kernel_is_2_6 && einfo " - 2.4 to 2.6 migration guide: http://www.gentoo.org/doc/en/migration-to-2.6.xml"
645 if kernel_is ge 2 6 13; then
646 ewarn "As of 2.6.13 the support for devfs has been removed."
647 ewarn "You will be required to either manage a static /dev"
648 ewarn "or to ensure that udev is starting on boot."
649 fi
650 echo 649 echo
651 650
652 # if K_EXTRAEINFO is set then lets display it now 651 # if K_EXTRAEINFO is set then lets display it now
653 if [[ -n ${K_EXTRAEINFO} ]]; then 652 if [[ -n ${K_EXTRAEINFO} ]]; then
654 echo ${K_EXTRAEINFO} | fmt | 653 echo ${K_EXTRAEINFO} | fmt |
655 while read -s ELINE; do einfo "${ELINE}"; done 654 while read -s ELINE; do einfo "${ELINE}"; done
656 fi 655 fi
657 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
658 # if K_EXTRAEWARN is set then lets display it now 663 # if K_EXTRAEWARN is set then lets display it now
659 if [[ -n ${K_EXTRAEWARN} ]]; then 664 if [[ -n ${K_EXTRAEWARN} ]]; then
660 echo ${K_EXTRAEWARN} | fmt | 665 echo ${K_EXTRAEWARN} | fmt |
661 while read -s ELINE; do ewarn "${ELINE}"; done 666 while read -s ELINE; do ewarn "${ELINE}"; done
662 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
663} 695}
664 696
665postinst_headers() { 697postinst_headers() {
666 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"
667 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"
668 einfo "emerge glibc" 700 elog "re-merge your system libc."
669 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"
670 einfo "headers." 702 elog "features present in the updated kernel headers."
671} 703}
672 704
673# pkg_setup functions 705# pkg_setup functions
674#============================================================== 706#==============================================================
675setup_headers() { 707setup_headers() {
689 721
690# unipatch 722# unipatch
691#============================================================== 723#==============================================================
692unipatch() { 724unipatch() {
693 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
694 local STRICT_COUNT PATCH_LEVEL myLC_ALL myLANG 726 local STRICT_COUNT PATCH_LEVEL myLC_ALL myLANG extglob_bak
695 727
696 # set to a standard locale to ensure sorts are ordered properly. 728 # set to a standard locale to ensure sorts are ordered properly.
697 myLC_ALL="${LC_ALL}" 729 myLC_ALL="${LC_ALL}"
698 myLANG="${LANG}" 730 myLANG="${LANG}"
699 LC_ALL="C" 731 LC_ALL="C"
701 733
702 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/" 734 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/"
703 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR} 735 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR}
704 736
705 # 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)
706 shopt -s extglob 739 shopt -s extglob
707 740
708 # 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
709 # usage can be either via an env var or by params 742 # usage can be either via an env var or by params
710 # although due to the nature we pass this within this eclass 743 # although due to the nature we pass this within this eclass
712 # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}" 745 # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}"
713 UNIPATCH_LIST="${@}" 746 UNIPATCH_LIST="${@}"
714 747
715 #unpack any passed tarballs 748 #unpack any passed tarballs
716 for i in ${UNIPATCH_LIST}; do 749 for i in ${UNIPATCH_LIST}; do
717 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
718 extention=${i/*./}
719 extention=${extention/:*/}
720 case ${extention} in
721 tbz2) PIPE_CMD="tar -xvjf";;
722 bz2) PIPE_CMD="tar -xvjf";;
723 tgz) PIPE_CMD="tar -xvzf";;
724 gz) PIPE_CMD="tar -xvzf";;
725 *) eerror "Unrecognized tarball compression"
726 die "Unrecognized tarball compression";;
727 esac
728
729 if [ -n "${UNIPATCH_STRICTORDER}" ]; then 751 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
730 unset z 752 unset z
731 STRICT_COUNT=$((10#${STRICT_COUNT} + 1)) 753 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
732 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++)); 754 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
733 do z="${z}0"; 755 do z="${z}0";
734 done 756 done
735 PATCH_ORDER="${z}${STRICT_COUNT}" 757 PATCH_ORDER="${z}${STRICT_COUNT}"
736 758
737 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/ 759 mkdir -p "${KPATCH_DIR}/${PATCH_ORDER}"
738 ${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
739 else 763 else
740 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR} 1>/dev/null 764 pushd "${KPATCH_DIR}" >/dev/null
765 unpack ${i##*/}
766 popd >/dev/null
741 fi 767 fi
742 768
743 if [ $? == 0 ]; then
744 einfo "${i/*\//} unpacked"
745 [ -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"
746 else
747 eerror "Failed to unpack ${i/:*/}"
748 die "unable to unpack patch tarball"
749 fi
750 else 770 else
751 extention=${i/*./} 771 extention=${i/*./}
752 extention=${extention/:*/} 772 extention=${extention/:*/}
753 PIPE_CMD="" 773 PIPE_CMD=""
754 case ${extention} in 774 case ${extention} in
862 # clean up KPATCH_DIR's - fixes bug #53610 882 # clean up KPATCH_DIR's - fixes bug #53610
863 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done 883 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done
864 884
865 LC_ALL="${myLC_ALL}" 885 LC_ALL="${myLC_ALL}"
866 LANG="${myLANG}" 886 LANG="${myLANG}"
887 eval ${extglob_bak}
867} 888}
868 889
869# getfilevar accepts 2 vars as follows: 890# getfilevar accepts 2 vars as follows:
870# getfilevar <VARIABLE> <CONFIGFILE> 891# getfilevar <VARIABLE> <CONFIGFILE>
871# pulled from linux-info 892# pulled from linux-info
983 return 0 1004 return 0
984} 1005}
985 1006
986headers___fix() { 1007headers___fix() {
987 # Voodoo to partially fix broken upstream headers. 1008 # Voodoo to partially fix broken upstream headers.
988 # Issues with this function should go to toolchain. 1009 # note: do not put inline/asm/volatile together (breaks "inline asm volatile")
989 sed -i \ 1010 sed -i \
990 -e '/^\#define.*_TYPES_H/{:loop n; bloop}' \ 1011 -e '/^\#define.*_TYPES_H/{:loop n; bloop}' \
991 -e 's:\<\([us]\(8\|16\|32\|64\)\)\>:__\1:g' \ 1012 -e 's:\<\([us]\(8\|16\|32\|64\)\)\>:__\1:g' \
992 -e "s/ inline / __inline__ /g" \ 1013 -e "s/\([[:space:]]\)inline\([[:space:](]\)/\1__inline__\2/g" \
1014 -e "s/\([[:space:]]\)asm\([[:space:](]\)/\1__asm__\2/g" \
1015 -e "s/\([[:space:]]\)volatile\([[:space:](]\)/\1__volatile__\2/g" \
993 "$@" 1016 "$@"
994} 1017}
995 1018
996# common functions 1019# common functions
997#============================================================== 1020#==============================================================

Legend:
Removed from v.1.199  
changed lines
  Added in v.1.216

  ViewVC Help
Powered by ViewVC 1.1.20