/[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.197 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.197 2006/10/26 06:55:31 vapier 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
498 rm -rf "${D}"/${ddir}/sound #alsa-headers 510 rm -rf "${D}"/${ddir}/sound #alsa-headers
499 rm -rf "${D}"/${ddir}/scsi #glibc/uclibc/etc... 511 rm -rf "${D}"/${ddir}/scsi #glibc/uclibc/etc...
500 return 0 512 return 0
501 fi 513 fi
502 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
503 cd "${S}" 517 cd "${S}"
504 dodir ${ddir}/linux 518 dodir ${ddir}/linux
505 cp -pPR "${S}"/include/linux/* ${D}/${ddir}/linux 519 cp -pPR "${S}"/include/linux "${D}"/${ddir}/ || die
506 rm -rf ${D}/${ddir}/linux/modules 520 rm -rf "${D}"/${ddir}/linux/modules
507 521
508 # Handle multilib headers and crap 522 # Handle multilib headers and crap
509 local multi_dirs="" multi_defs="" 523 local multi_dirs="" multi_defs=""
510 case $(tc-arch-kernel) in 524 case $(tc-arch-kernel) in
511 sparc64) 525 sparc64)
627 641
628 # Don't forget to make directory for sysfs 642 # Don't forget to make directory for sysfs
629 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys 643 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys
630 644
631 echo 645 echo
632 einfo "After installing a new kernel of any version, it is important"
633 einfo "that you have the appropriate /etc/modules.autoload.d/kernel-X.Y"
634 einfo "created (X.Y is the first 2 parts of your new kernel version)"
635 echo
636 einfo "For example, this kernel will require:"
637 einfo "/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}"
638 echo
639 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"
640 einfo "in the following documents:" 647 elog "in the following document:"
641 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"
642 kernel_is_2_6 && einfo " - 2.4 to 2.6 migration guide: http://www.gentoo.org/doc/en/migration-to-2.6.xml"
643 if kernel_is ge 2 6 13; then
644 ewarn "As of 2.6.13 the support for devfs has been removed."
645 ewarn "You will be required to either manage a static /dev"
646 ewarn "or to ensure that udev is starting on boot."
647 fi
648 echo 649 echo
649 650
650 # if K_EXTRAEINFO is set then lets display it now 651 # if K_EXTRAEINFO is set then lets display it now
651 if [[ -n ${K_EXTRAEINFO} ]]; then 652 if [[ -n ${K_EXTRAEINFO} ]]; then
652 echo ${K_EXTRAEINFO} | fmt | 653 echo ${K_EXTRAEINFO} | fmt |
653 while read -s ELINE; do einfo "${ELINE}"; done 654 while read -s ELINE; do einfo "${ELINE}"; done
654 fi 655 fi
655 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
656 # if K_EXTRAEWARN is set then lets display it now 663 # if K_EXTRAEWARN is set then lets display it now
657 if [[ -n ${K_EXTRAEWARN} ]]; then 664 if [[ -n ${K_EXTRAEWARN} ]]; then
658 echo ${K_EXTRAEWARN} | fmt | 665 echo ${K_EXTRAEWARN} | fmt |
659 while read -s ELINE; do ewarn "${ELINE}"; done 666 while read -s ELINE; do ewarn "${ELINE}"; done
660 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
661} 695}
662 696
663postinst_headers() { 697postinst_headers() {
664 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"
665 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"
666 einfo "emerge glibc" 700 elog "re-merge your system libc."
667 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"
668 einfo "headers." 702 elog "features present in the updated kernel headers."
669} 703}
670 704
671# pkg_setup functions 705# pkg_setup functions
672#============================================================== 706#==============================================================
673setup_headers() { 707setup_headers() {
687 721
688# unipatch 722# unipatch
689#============================================================== 723#==============================================================
690unipatch() { 724unipatch() {
691 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
692 local STRICT_COUNT PATCH_LEVEL myLC_ALL myLANG 726 local STRICT_COUNT PATCH_LEVEL myLC_ALL myLANG extglob_bak
693 727
694 # set to a standard locale to ensure sorts are ordered properly. 728 # set to a standard locale to ensure sorts are ordered properly.
695 myLC_ALL="${LC_ALL}" 729 myLC_ALL="${LC_ALL}"
696 myLANG="${LANG}" 730 myLANG="${LANG}"
697 LC_ALL="C" 731 LC_ALL="C"
699 733
700 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/" 734 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/"
701 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR} 735 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR}
702 736
703 # 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)
704 shopt -s extglob 739 shopt -s extglob
705 740
706 # 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
707 # usage can be either via an env var or by params 742 # usage can be either via an env var or by params
708 # although due to the nature we pass this within this eclass 743 # although due to the nature we pass this within this eclass
710 # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}" 745 # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}"
711 UNIPATCH_LIST="${@}" 746 UNIPATCH_LIST="${@}"
712 747
713 #unpack any passed tarballs 748 #unpack any passed tarballs
714 for i in ${UNIPATCH_LIST}; do 749 for i in ${UNIPATCH_LIST}; do
715 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
716 extention=${i/*./}
717 extention=${extention/:*/}
718 case ${extention} in
719 tbz2) PIPE_CMD="tar -xvjf";;
720 bz2) PIPE_CMD="tar -xvjf";;
721 tgz) PIPE_CMD="tar -xvzf";;
722 gz) PIPE_CMD="tar -xvzf";;
723 *) eerror "Unrecognized tarball compression"
724 die "Unrecognized tarball compression";;
725 esac
726
727 if [ -n "${UNIPATCH_STRICTORDER}" ]; then 751 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
728 unset z 752 unset z
729 STRICT_COUNT=$((10#${STRICT_COUNT} + 1)) 753 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
730 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++)); 754 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
731 do z="${z}0"; 755 do z="${z}0";
732 done 756 done
733 PATCH_ORDER="${z}${STRICT_COUNT}" 757 PATCH_ORDER="${z}${STRICT_COUNT}"
734 758
735 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/ 759 mkdir -p "${KPATCH_DIR}/${PATCH_ORDER}"
736 ${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
737 else 763 else
738 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR} 1>/dev/null 764 pushd "${KPATCH_DIR}" >/dev/null
765 unpack ${i##*/}
766 popd >/dev/null
739 fi 767 fi
740 768
741 if [ $? == 0 ]; then
742 einfo "${i/*\//} unpacked"
743 [ -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"
744 else
745 eerror "Failed to unpack ${i/:*/}"
746 die "unable to unpack patch tarball"
747 fi
748 else 770 else
749 extention=${i/*./} 771 extention=${i/*./}
750 extention=${extention/:*/} 772 extention=${extention/:*/}
751 PIPE_CMD="" 773 PIPE_CMD=""
752 case ${extention} in 774 case ${extention} in
817 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi 839 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi
818 840
819 ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)" 841 ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)"
820 while [ ${PATCH_DEPTH} -lt 5 ]; do 842 while [ ${PATCH_DEPTH} -lt 5 ]; do
821 echo "Attempting Dry-run:" >> ${STDERR_T} 843 echo "Attempting Dry-run:" >> ${STDERR_T}
822 echo "cmd: patch -p${PATCH_DEPTH} --dry-run -f < ${i}" >> ${STDERR_T} 844 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i}" >> ${STDERR_T}
823 echo "=======================================================" >> ${STDERR_T} 845 echo "=======================================================" >> ${STDERR_T}
824 if [ $(patch -p${PATCH_DEPTH} --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then 846 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then
825 echo "Attempting patch:" > ${STDERR_T} 847 echo "Attempting patch:" > ${STDERR_T}
826 echo "cmd: patch -p${PATCH_DEPTH} -f < ${i}" >> ${STDERR_T} 848 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i}" >> ${STDERR_T}
827 echo "=======================================================" >> ${STDERR_T} 849 echo "=======================================================" >> ${STDERR_T}
828 if [ $(patch -p${PATCH_DEPTH} -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then 850 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then
829 eend 0 851 eend 0
830 rm ${STDERR_T} 852 rm ${STDERR_T}
831 break 853 break
832 else 854 else
833 eend 1 855 eend 1
860 # clean up KPATCH_DIR's - fixes bug #53610 882 # clean up KPATCH_DIR's - fixes bug #53610
861 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done 883 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done
862 884
863 LC_ALL="${myLC_ALL}" 885 LC_ALL="${myLC_ALL}"
864 LANG="${myLANG}" 886 LANG="${myLANG}"
887 eval ${extglob_bak}
865} 888}
866 889
867# getfilevar accepts 2 vars as follows: 890# getfilevar accepts 2 vars as follows:
868# getfilevar <VARIABLE> <CONFIGFILE> 891# getfilevar <VARIABLE> <CONFIGFILE>
869# pulled from linux-info 892# pulled from linux-info
981 return 0 1004 return 0
982} 1005}
983 1006
984headers___fix() { 1007headers___fix() {
985 # Voodoo to partially fix broken upstream headers. 1008 # Voodoo to partially fix broken upstream headers.
986 # Issues with this function should go to toolchain. 1009 # note: do not put inline/asm/volatile together (breaks "inline asm volatile")
987 sed -i \ 1010 sed -i \
988 -e '/^\#define.*_TYPES_H/{:loop n; bloop}' \ 1011 -e '/^\#define.*_TYPES_H/{:loop n; bloop}' \
989 -e 's:\<\([us]\(8\|16\|32\|64\)\)\>:__\1:g' \ 1012 -e 's:\<\([us]\(8\|16\|32\|64\)\)\>:__\1:g' \
990 -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" \
991 "$@" 1016 "$@"
992} 1017}
993 1018
994# common functions 1019# common functions
995#============================================================== 1020#==============================================================

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

  ViewVC Help
Powered by ViewVC 1.1.20