/[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.216 Revision 1.244
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.216 2008/11/13 23:50:55 mpagano Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/kernel-2.eclass,v 1.244 2011/02/18 20:07:18 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# Original author: John Mylchreest <johnm@gentoo.org> 8# Original author: John Mylchreest <johnm@gentoo.org>
43# combination of "base" and "extras" 43# combination of "base" and "extras"
44# 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.
45# 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
46# 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 47# K_SECURITY_UNSUPPORTED- If set, this kernel is unsupported by Gentoo Security
48 48# K_DEBLOB_AVAILABLE - A value of "0" will disable all of the optional deblob
49# code. If empty, will be set to "1" if deblobbing is
50# possible. Test ONLY for "1".
51# K_PREDEBLOBBED - This kernel was already deblobbed elsewhere.
52# If false, either optional deblobbing will be available
53# or the license will note the inclusion of freedist
54# code.
55# K_LONGTERM - If set, the eclass will search for the kernel source
56# in the long term directories on the upstream servers
57# as the location has been changed by upstream
49# H_SUPPORTEDARCH - this should be a space separated list of ARCH's which 58# H_SUPPORTEDARCH - this should be a space separated list of ARCH's which
50# can be supported by the headers ebuild 59# can be supported by the headers ebuild
51 60
52# UNIPATCH_LIST - space delimetered list of patches to be applied to the 61# UNIPATCH_LIST - space delimetered list of patches to be applied to the
53# kernel 62# kernel
59# the doc dir 68# the doc dir
60# UNIPATCH_STRICTORDER - if this is set places patches into directories of 69# UNIPATCH_STRICTORDER - if this is set places patches into directories of
61# order, so they are applied in the order passed 70# order, so they are applied in the order passed
62 71
63inherit eutils toolchain-funcs versionator multilib 72inherit eutils toolchain-funcs versionator multilib
64EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst pkg_postinst 73EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_test src_install pkg_preinst pkg_postinst
65 74
66# Added by Daniel Ostrow <dostrow@gentoo.org> 75# 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. 76# 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. 77# I will remove it when I come up with something more reasonable.
69[[ ${PROFILE_ARCH} == "ppc64" ]] && CHOST="powerpc64-${CHOST#*-}" 78[[ ${PROFILE_ARCH} == "ppc64" ]] && CHOST="powerpc64-${CHOST#*-}"
72if [[ ${CTARGET} == ${CHOST} && ${CATEGORY/cross-} != ${CATEGORY} ]]; then 81if [[ ${CTARGET} == ${CHOST} && ${CATEGORY/cross-} != ${CATEGORY} ]]; then
73 export CTARGET=${CATEGORY/cross-} 82 export CTARGET=${CATEGORY/cross-}
74fi 83fi
75 84
76HOMEPAGE="http://www.kernel.org/ http://www.gentoo.org/ ${HOMEPAGE}" 85HOMEPAGE="http://www.kernel.org/ http://www.gentoo.org/ ${HOMEPAGE}"
86[[ -z ${LICENSE} ]] && \
77LICENSE="GPL-2" 87 LICENSE="GPL-2"
88
89# This is the latest KV_PATCH of the deblob tool available from the
90# libre-sources upstream. If you bump this, you MUST regenerate the Manifests
91# for ALL kernel-2 consumer packages where deblob is available.
92[[ -z ${DEBLOB_MAX_VERSION} ]] && DEBLOB_MAX_VERSION=36
78 93
79# No need to run scanelf/strip on kernel sources/headers (bug #134453). 94# No need to run scanelf/strip on kernel sources/headers (bug #134453).
80RESTRICT="binchecks strip" 95RESTRICT="binchecks strip"
81 96
82# set LINUX_HOSTCFLAGS if not already set 97# set LINUX_HOSTCFLAGS if not already set
87#============================================================== 102#==============================================================
88# this function exists only to help debug kernel-2.eclass 103# this function exists only to help debug kernel-2.eclass
89# if you are adding new functionality in, put a call to it 104# if you are adding new functionality in, put a call to it
90# at the start of src_unpack, or during SRC_URI/dep generation. 105# at the start of src_unpack, or during SRC_URI/dep generation.
91debug-print-kernel2-variables() { 106debug-print-kernel2-variables() {
92 debug-print "PVR: ${PVR}" 107 for v in PVR CKV OKV KV KV_FULL KV_MAJOR KV_MINOR KV_PATCH RELEASETYPE \
93 debug-print "CKV: ${CKV}" 108 RELEASE UNIPATCH_LIST_DEFAULT UNIPATCH_LIST_GENPATCHES \
94 debug-print "OKV: ${OKV}" 109 UNIPATCH_LIST S KERNEL_URI ; do
95 debug-print "KV: ${KV}" 110 debug-print "${v}: ${!v}"
96 debug-print "KV_FULL: ${KV_FULL}" 111 done
97 debug-print "RELEASETYPE: ${RELEASETYPE}"
98 debug-print "RELEASE: ${RELEASE}"
99 debug-print "UNIPATCH_LIST_DEFAULT: ${UNIPATCH_LIST_DEFAULT} "
100 debug-print "UNIPATCH_LIST_GENPATCHES: ${UNIPATCH_LIST_GENPATCHES} "
101 debug-print "UNIPATCH_LIST: ${UNIPATCH_LIST}"
102 debug-print "S: ${S}"
103 debug-print "KERNEL_URI: ${KERNEL_URI}"
104} 112}
105 113
106#Eclass functions only from here onwards ... 114#Eclass functions only from here onwards ...
107#============================================================== 115#==============================================================
108handle_genpatches() { 116handle_genpatches() {
109 local tarball 117 local tarball
110 [[ -z ${K_WANT_GENPATCHES} || -z ${K_GENPATCHES_VER} ]] && return -1 118 [[ -z ${K_WANT_GENPATCHES} || -z ${K_GENPATCHES_VER} ]] && return 1
111 119
112 for i in ${K_WANT_GENPATCHES} ; do 120 for i in ${K_WANT_GENPATCHES} ; do
113 tarball="genpatches-${OKV}-${K_GENPATCHES_VER}.${i}.tar.bz2" 121 tarball="genpatches-${OKV}-${K_GENPATCHES_VER}.${i}.tar.bz2"
114 GENPATCHES_URI="${GENPATCHES_URI} mirror://gentoo/${tarball}" 122 GENPATCHES_URI="${GENPATCHES_URI} mirror://gentoo/${tarball}"
115 UNIPATCH_LIST_GENPATCHES="${UNIPATCH_LIST_GENPATCHES} ${DISTDIR}/${tarball}" 123 UNIPATCH_LIST_GENPATCHES="${UNIPATCH_LIST_GENPATCHES} ${DISTDIR}/${tarball}"
151 KV_EXTRA=${KV_EXTRA/[-_]*} 159 KV_EXTRA=${KV_EXTRA/[-_]*}
152 else 160 else
153 KV_PATCH=$(get_version_component_range 3- ${OKV}) 161 KV_PATCH=$(get_version_component_range 3- ${OKV})
154 fi 162 fi
155 KV_PATCH=${KV_PATCH/[-_]*} 163 KV_PATCH=${KV_PATCH/[-_]*}
164
165 local v n=0 missing
166 for v in CKV OKV KV_{MAJOR,MINOR,PATCH} ; do
167 [[ -z ${!v} ]] && n=1 && missing="${missing}${v} ";
168 done
169 [[ $n -eq 1 ]] && \
170 eerror "Missing variables: ${missing}" && \
171 die "Failed to extract kernel version (try explicit CKV in ebuild)!"
172 unset v n missing
156 173
157 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2" 174 KERNEL_BASE_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}"
175 [[ -n "${K_LONGTERM}" ]] &&
176 KERNEL_BASE_URI="${KERNEL_BASE_URI}/longterm/v${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
177
178 KERNEL_URI="${KERNEL_BASE_URI}/linux-${OKV}.tar.bz2"
158 179
159 RELEASE=${CKV/${OKV}} 180 RELEASE=${CKV/${OKV}}
160 RELEASE=${RELEASE/_beta} 181 RELEASE=${RELEASE/_beta}
161 RELEASE=${RELEASE/_rc/-rc} 182 RELEASE=${RELEASE/_rc/-rc}
162 RELEASE=${RELEASE/_pre/-pre} 183 RELEASE=${RELEASE/_pre/-pre}
184 # We cannot trivally call kernel_is here, because it calls us to detect the
185 # version
163 kernel_is ge 2 6 && RELEASE=${RELEASE/-pre/-git} 186 #kernel_is ge 2 6 && RELEASE=${RELEASE/-pre/-git}
187 [ $(($KV_MAJOR * 1000 + $KV_MINOR)) -ge 2006 ] && RELEASE=${RELEASE/-pre/-git}
164 RELEASETYPE=${RELEASE//[0-9]} 188 RELEASETYPE=${RELEASE//[0-9]}
165 189
166 # Now we know that RELEASE is the -rc/-git 190 # Now we know that RELEASE is the -rc/-git
167 # and RELEASETYPE is the same but with its numerics stripped 191 # and RELEASETYPE is the same but with its numerics stripped
168 # we can work on better sorting EXTRAVERSION. 192 # we can work on better sorting EXTRAVERSION.
197 # The only messing around which should actually effect this is for KV_EXTRA 221 # The only messing around which should actually effect this is for KV_EXTRA
198 # since this has to limit OKV to MAJ.MIN.PAT and strip EXTRA off else 222 # since this has to limit OKV to MAJ.MIN.PAT and strip EXTRA off else
199 # KV_FULL evaluates to MAJ.MIN.PAT.EXT.EXT after EXTRAVERSION 223 # KV_FULL evaluates to MAJ.MIN.PAT.EXT.EXT after EXTRAVERSION
200 if [[ -n ${KV_EXTRA} ]]; then 224 if [[ -n ${KV_EXTRA} ]]; then
201 OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}" 225 OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
202 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/patch-${CKV}.bz2 226 KERNEL_URI="${KERNEL_BASE_URI}/patch-${CKV}.bz2
203 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}.tar.bz2" 227 ${KERNEL_BASE_URI}/linux-${OKV}.tar.bz2"
204 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV}.bz2" 228 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV}.bz2"
205 fi 229 fi
206 230
207 # We need to set this using OKV, but we need to set it before we do any 231 # We need to set this using OKV, but we need to set it before we do any
208 # messing around with OKV based on RELEASETYPE 232 # messing around with OKV based on RELEASETYPE
218 # will pull: 242 # will pull:
219 # linux-2.6.10.tar.bz2 & patch-2.6.11-rc3.bz2 & patch-2.6.11-rc3-git2.bz2 243 # linux-2.6.10.tar.bz2 & patch-2.6.11-rc3.bz2 & patch-2.6.11-rc3-git2.bz2
220 244
221 if [[ ${RELEASETYPE} == -rc ]] || [[ ${RELEASETYPE} == -pre ]]; then 245 if [[ ${RELEASETYPE} == -rc ]] || [[ ${RELEASETYPE} == -pre ]]; then
222 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))" 246 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))"
223 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${CKV//_/-}.bz2 247 KERNEL_URI="${KERNEL_BASE_URI}/testing/patch-${CKV//_/-}.bz2
224 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2" 248 ${KERNEL_BASE_URI}/linux-${OKV}.tar.bz2"
225 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV//_/-}.bz2" 249 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV//_/-}.bz2"
226 fi 250 fi
227 251
228 if [[ ${RELEASETYPE} == -git ]]; then 252 if [[ ${RELEASETYPE} == -git ]]; then
229 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${OKV}${RELEASE}.bz2 253 KERNEL_URI="${KERNEL_BASE_URI}/snapshots/patch-${OKV}${RELEASE}.bz2
230 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2" 254 ${KERNEL_BASE_URI}/linux-${OKV}.tar.bz2"
231 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${OKV}${RELEASE}.bz2" 255 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${OKV}${RELEASE}.bz2"
232 fi 256 fi
233 257
234 if [[ ${RELEASETYPE} == -rc-git ]]; then 258 if [[ ${RELEASETYPE} == -rc-git ]]; then
235 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))" 259 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))"
236 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2 260 KERNEL_URI="${KERNEL_BASE_URI}/snapshots/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2
237 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.bz2 261 ${KERNEL_BASE_URI}/testing/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.bz2
238 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2" 262 ${KERNEL_BASE_URI}/linux-${OKV}.tar.bz2"
263
239 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.bz2 ${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2" 264 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.bz2 ${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2"
240 fi 265 fi
241 266
242 debug-print-kernel2-variables 267 debug-print-kernel2-variables
243 268
244 handle_genpatches 269 handle_genpatches
245} 270}
246 271
247kernel_is() { 272kernel_is() {
273 # ALL of these should be set before we can safely continue this function.
274 # some of the sources have in the past had only one set.
275 local v n=0
276 for v in OKV KV_{MAJOR,MINOR,PATCH} ; do [[ -z ${!v} ]] && n=1 ; done
248 [[ -z ${OKV} ]] && detect_version 277 [[ $n -eq 1 ]] && detect_version
278 unset v n
279
280 # Now we can continue
249 local operator test value x=0 y=0 z=0 281 local operator test value x=0 y=0 z=0
250 282
251 case ${1} in 283 case ${1} in
252 lt) operator="-lt"; shift;; 284 lt) operator="-lt"; shift;;
253 gt) operator="-gt"; shift;; 285 gt) operator="-gt"; shift;;
287# Capture the sources type and set DEPENDs 319# Capture the sources type and set DEPENDs
288if [[ ${ETYPE} == sources ]]; then 320if [[ ${ETYPE} == sources ]]; then
289 DEPEND="!build? ( sys-apps/sed 321 DEPEND="!build? ( sys-apps/sed
290 >=sys-devel/binutils-2.11.90.0.31 )" 322 >=sys-devel/binutils-2.11.90.0.31 )"
291 RDEPEND="!build? ( >=sys-libs/ncurses-5.2 323 RDEPEND="!build? ( >=sys-libs/ncurses-5.2
292 sys-devel/make ) 324 sys-devel/make )"
293 virtual/dev-manager" 325 PDEPEND="!build? ( virtual/dev-manager )"
294 326
295 PROVIDE="virtual/linux-sources" 327 PROVIDE="virtual/linux-sources"
296 kernel_is gt 2 4 && PROVIDE="${PROVIDE} virtual/alsa" 328 kernel_is gt 2 4 && PROVIDE="${PROVIDE} virtual/alsa"
297 329
298 SLOT="${PVR}" 330 SLOT="${PVR}"
299 DESCRIPTION="Sources for the ${KV_MAJOR}.${KV_MINOR} linux kernel" 331 DESCRIPTION="Sources for the ${KV_MAJOR}.${KV_MINOR} linux kernel"
300 IUSE="symlink build" 332 IUSE="symlink build"
333
334 # Bug #266157, deblob for libre support
335 if [[ -z ${K_PREDEBLOBBED} ]] ; then
336 if [[ -z ${K_DEBLOB_AVAILABLE} ]] ; then
337 kernel_is ge 2 6 27 && \
338 kernel_is le 2 6 ${DEBLOB_MAX_VERSION} && \
339 K_DEBLOB_AVAILABLE=1
340 fi
341 if [[ ${K_DEBLOB_AVAILABLE} == "1" ]] ; then
342 IUSE="${IUSE} deblob"
343 # Reflect that kernels contain firmware blobs unless otherwise
344 # stripped
345 LICENSE="${LICENSE} !deblob? ( freedist )"
346
347 DEBLOB_PV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
348 DEBLOB_A="deblob-${DEBLOB_PV}"
349 DEBLOB_CHECK_A="deblob-check-${DEBLOB_PV}"
350 DEBLOB_HOMEPAGE="http://www.fsfla.org/svnwiki/selibre/linux-libre/"
351 DEBLOB_URI_PATH="download/releases/LATEST-${DEBLOB_PV}.N"
352 if ! has "${EAPI:-0}" 0 1 ; then
353 DEBLOB_CHECK_URI="${DEBLOB_HOMEPAGE}/${DEBLOB_URI_PATH}/deblob-check -> ${DEBLOB_CHECK_A}"
354 else
355 DEBLOB_CHECK_URI="mirror://gentoo/${DEBLOB_CHECK_A}"
356 fi
357 DEBLOB_URI="${DEBLOB_HOMEPAGE}/${DEBLOB_URI_PATH}/${DEBLOB_A}"
358 HOMEPAGE="${HOMEPAGE} ${DEBLOB_HOMEPAGE}"
359
360 KERNEL_URI="${KERNEL_URI}
361 deblob? (
362 ${DEBLOB_URI}
363 ${DEBLOB_CHECK_URI}
364 )"
365 else
366 # We have no way to deblob older kernels, so just mark them as
367 # tainted with non-libre materials.
368 LICENSE="${LICENSE} freedist"
369 fi
370 fi
371
301elif [[ ${ETYPE} == headers ]]; then 372elif [[ ${ETYPE} == headers ]]; then
302 DESCRIPTION="Linux system headers" 373 DESCRIPTION="Linux system headers"
303 374
304 # Since we should NOT honour KBUILD_OUTPUT in headers 375 # Since we should NOT honour KBUILD_OUTPUT in headers
305 # lets unset it here. 376 # lets unset it here.
375 || die "make include/linux/version.h failed" 446 || die "make include/linux/version.h failed"
376 rm -f .config >/dev/null 447 rm -f .config >/dev/null
377} 448}
378 449
379universal_unpack() { 450universal_unpack() {
380 cd ${WORKDIR} 451 cd "${WORKDIR}"
381 unpack linux-${OKV}.tar.bz2 452 unpack linux-${OKV}.tar.bz2
382 if [[ -d "linux" ]]; then 453 if [[ -d "linux" ]]; then
383 mv linux linux-${KV_FULL} \ 454 mv linux linux-${KV_FULL} \
384 || die "Unable to move source tree to ${KV_FULL}." 455 || die "Unable to move source tree to ${KV_FULL}."
385 elif [[ "${OKV}" != "${KV_FULL}" ]]; then 456 elif [[ "${OKV}" != "${KV_FULL}" ]]; then
489 560
490# install functions 561# install functions
491#============================================================== 562#==============================================================
492install_universal() { 563install_universal() {
493 #fix silly permissions in tarball 564 #fix silly permissions in tarball
494 cd ${WORKDIR} 565 cd "${WORKDIR}"
495 chown -R root:0 * 566 chown -R root:0 * >& /dev/null
496 chmod -R a+r-w+X,u+w * 567 chmod -R a+r-w+X,u+w *
497 cd ${OLDPWD} 568 cd ${OLDPWD}
498} 569}
499 570
500install_headers() { 571install_headers() {
544 [[ ! -e ${D}/${ddir}/asm/arch ]] && ln -sf arch-ebsa285 "${D}"/${ddir}/asm/arch 615 [[ ! -e ${D}/${ddir}/asm/arch ]] && ln -sf arch-ebsa285 "${D}"/${ddir}/asm/arch
545 [[ ! -e ${D}/${ddir}/asm/proc ]] && ln -sf proc-armv "${D}"/${ddir}/asm/proc 616 [[ ! -e ${D}/${ddir}/asm/proc ]] && ln -sf proc-armv "${D}"/${ddir}/asm/proc
546 ;; 617 ;;
547 powerpc) 618 powerpc)
548 dodir ${ddir}/asm 619 dodir ${ddir}/asm
549 cp -pPR "${S}"/include/asm/* ${D}/${ddir}/asm 620 cp -pPR "${S}"/include/asm/* "${D}"/${ddir}/asm
550 if [[ -e "${S}"/include/asm-ppc ]] ; then 621 if [[ -e "${S}"/include/asm-ppc ]] ; then
551 dodir ${ddir}/asm-ppc 622 dodir ${ddir}/asm-ppc
552 cp -pPR "${S}"/include/asm-ppc/* ${D}/${ddir}/asm-ppc 623 cp -pPR "${S}"/include/asm-ppc/* "${D}"/${ddir}/asm-ppc
553 fi 624 fi
554 ;; 625 ;;
555 *) 626 *)
556 dodir ${ddir}/asm 627 dodir ${ddir}/asm
557 cp -pPR "${S}"/include/asm/* ${D}/${ddir}/asm 628 cp -pPR "${S}"/include/asm/* "${D}"/${ddir}/asm
558 ;; 629 ;;
559 esac 630 esac
560 if [[ -n ${multi_dirs} ]] ; then 631 if [[ -n ${multi_dirs} ]] ; then
561 local d ml_inc="" 632 local d ml_inc=""
562 for d in ${multi_dirs} ; do 633 for d in ${multi_dirs} ; do
563 dodir ${ddir}/asm-${d} 634 dodir ${ddir}/asm-${d}
564 cp -pPR "${S}"/include/asm-${d}/* ${D}/${ddir}/asm-${d}/ || die "cp asm-${d} failed" 635 cp -pPR "${S}"/include/asm-${d}/* "${D}"/${ddir}/asm-${d}/ || die "cp asm-${d} failed"
565 636
566 ml_inc="${ml_inc} ${multi_defs%% *}:${ddir}/asm-${d}" 637 ml_inc="${ml_inc} ${multi_defs%% *}:${ddir}/asm-${d}"
567 multi_defs=${multi_defs#* } 638 multi_defs=${multi_defs#* }
568 done 639 done
569 create_ml_includes ${ddir}/asm ${ml_inc} 640 create_ml_includes ${ddir}/asm ${ml_inc}
570 fi 641 fi
571 642
572 if kernel_is 2 6; then 643 if kernel_is 2 6; then
573 dodir ${ddir}/asm-generic 644 dodir ${ddir}/asm-generic
574 cp -pPR "${S}"/include/asm-generic/* ${D}/${ddir}/asm-generic 645 cp -pPR "${S}"/include/asm-generic/* "${D}"/${ddir}/asm-generic
575 fi 646 fi
576 647
577 # clean up 648 # clean up
578 find "${D}" -name '*.orig' -exec rm -f {} \; 649 find "${D}" -name '*.orig' -exec rm -f {} \;
579 650
603 [[ -f ${FILESDIR}/../ChangeLog ]] && \ 674 [[ -f ${FILESDIR}/../ChangeLog ]] && \
604 echo "Please check the ebuild ChangeLog for more details." \ 675 echo "Please check the ebuild ChangeLog for more details." \
605 > "${S}"/patches.txt 676 > "${S}"/patches.txt
606 fi 677 fi
607 678
608 mv ${WORKDIR}/linux* ${D}/usr/src 679 mv ${WORKDIR}/linux* "${D}"/usr/src
609} 680}
610 681
611# pkg_preinst functions 682# pkg_preinst functions
612#============================================================== 683#==============================================================
613preinst_headers() { 684preinst_headers() {
622 local MAKELINK=0 693 local MAKELINK=0
623 694
624 # if we have USE=symlink, then force K_SYMLINK=1 695 # if we have USE=symlink, then force K_SYMLINK=1
625 use symlink && K_SYMLINK=1 696 use symlink && K_SYMLINK=1
626 697
698 # if we're using a deblobbed kernel, it's not supported
699 [[ $K_DEBLOB_AVAILABLE == 1 ]] && \
700 use deblob && \
701 K_SECURITY_UNSUPPORTED=deblob
702
627 # if we are to forcably symlink, delete it if it already exists first. 703 # if we are to forcably symlink, delete it if it already exists first.
628 if [[ ${K_SYMLINK} > 0 ]]; then 704 if [[ ${K_SYMLINK} > 0 ]]; then
629 [[ -h ${ROOT}usr/src/linux ]] && rm ${ROOT}usr/src/linux 705 [[ -h ${ROOT}usr/src/linux ]] && rm ${ROOT}usr/src/linux
630 MAKELINK=1 706 MAKELINK=1
631 fi 707 fi
632 708
633 # if the link doesnt exist, lets create it 709 # if the link doesnt exist, lets create it
634 [[ ! -h ${ROOT}usr/src/linux ]] && MAKELINK=1 710 [[ ! -h ${ROOT}usr/src/linux ]] && MAKELINK=1
635 711
636 if [[ ${MAKELINK} == 1 ]]; then 712 if [[ ${MAKELINK} == 1 ]]; then
637 cd ${ROOT}usr/src 713 cd "${ROOT}"usr/src
638 ln -sf linux-${KV_FULL} linux 714 ln -sf linux-${KV_FULL} linux
639 cd ${OLDPWD} 715 cd ${OLDPWD}
640 fi 716 fi
641 717
642 # Don't forget to make directory for sysfs 718 # Don't forget to make directory for sysfs
665 echo ${K_EXTRAEWARN} | fmt | 741 echo ${K_EXTRAEWARN} | fmt |
666 while read -s ELINE; do ewarn "${ELINE}"; done 742 while read -s ELINE; do ewarn "${ELINE}"; done
667 fi 743 fi
668 744
669 # optionally display security unsupported message 745 # optionally display security unsupported message
746 # Start with why
747 if [[ ${K_SECURITY_UNSUPPORTED} = deblob ]]; then
748 ewarn "Deblobbed kernels are UNSUPPORTED by Gentoo Security."
749 elif [[ -n ${K_SECURITY_UNSUPPORTED} ]]; then
750 ewarn "${PN} is UNSUPPORTED by Gentoo Security."
751 fi
752 # And now the general message.
670 if [[ -n ${K_SECURITY_UNSUPPORTED} ]]; then 753 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." 754 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:" 755 ewarn "For specific information on why this kernel is unsupported, please read:"
675 ewarn "http://www.gentoo.org/proj/en/security/kernel.xml" 756 ewarn "http://www.gentoo.org/proj/en/security/kernel.xml"
676 fi 757 fi
677 758
692 elog "https://bugs.gentoo.org/show_bug.cgi?id=214765" 773 elog "https://bugs.gentoo.org/show_bug.cgi?id=214765"
693 echo 774 echo
694 fi 775 fi
695} 776}
696 777
697postinst_headers() {
698 elog "Kernel headers are usually only used when recompiling your system libc, as"
699 elog "such, following the installation of newer headers, it is advised that you"
700 elog "re-merge your system libc."
701 elog "Failure to do so will cause your system libc to not make use of newer"
702 elog "features present in the updated kernel headers."
703}
704
705# pkg_setup functions 778# pkg_setup functions
706#============================================================== 779#==============================================================
707setup_headers() { 780setup_headers() {
708 [[ -z ${H_SUPPORTEDARCH} ]] && H_SUPPORTEDARCH=${PN/-*/} 781 [[ -z ${H_SUPPORTEDARCH} ]] && H_SUPPORTEDARCH=${PN/-*/}
709 for i in ${H_SUPPORTEDARCH}; do 782 for i in ${H_SUPPORTEDARCH}; do
721 794
722# unipatch 795# unipatch
723#============================================================== 796#==============================================================
724unipatch() { 797unipatch() {
725 local i x y z extention PIPE_CMD UNIPATCH_DROP KPATCH_DIR PATCH_DEPTH ELINE 798 local i x y z extention PIPE_CMD UNIPATCH_DROP KPATCH_DIR PATCH_DEPTH ELINE
726 local STRICT_COUNT PATCH_LEVEL myLC_ALL myLANG extglob_bak 799 local STRICT_COUNT PATCH_LEVEL myLC_ALL myLANG
727 800
728 # set to a standard locale to ensure sorts are ordered properly. 801 # set to a standard locale to ensure sorts are ordered properly.
729 myLC_ALL="${LC_ALL}" 802 myLC_ALL="${LC_ALL}"
730 myLANG="${LANG}" 803 myLANG="${LANG}"
731 LC_ALL="C" 804 LC_ALL="C"
733 806
734 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/" 807 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/"
735 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR} 808 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR}
736 809
737 # We're gonna need it when doing patches with a predefined patchlevel 810 # We're gonna need it when doing patches with a predefined patchlevel
738 extglob_bak=$(shopt -p extglob)
739 shopt -s extglob 811 eshopts_push -s extglob
740 812
741 # This function will unpack all passed tarballs, add any passed patches, and remove any passed patchnumbers 813 # This function will unpack all passed tarballs, add any passed patches, and remove any passed patchnumbers
742 # usage can be either via an env var or by params 814 # usage can be either via an env var or by params
743 # although due to the nature we pass this within this eclass 815 # although due to the nature we pass this within this eclass
744 # it shall be by param only. 816 # it shall be by param only.
770 else 842 else
771 extention=${i/*./} 843 extention=${i/*./}
772 extention=${extention/:*/} 844 extention=${extention/:*/}
773 PIPE_CMD="" 845 PIPE_CMD=""
774 case ${extention} in 846 case ${extention} in
847 xz) PIPE_CMD="xz -dc";;
848 lzma) PIPE_CMD="lzma -dc";;
775 bz2) PIPE_CMD="bzip2 -dc";; 849 bz2) PIPE_CMD="bzip2 -dc";;
776 patch) PIPE_CMD="cat";; 850 patch) PIPE_CMD="cat";;
777 diff) PIPE_CMD="cat";; 851 diff) PIPE_CMD="cat";;
778 gz|Z|z) PIPE_CMD="gzip -dc";; 852 gz|Z|z) PIPE_CMD="gzip -dc";;
779 ZIP|zip) PIPE_CMD="unzip -p";; 853 ZIP|zip) PIPE_CMD="unzip -p";;
802 do z="${z}0"; 876 do z="${z}0";
803 done 877 done
804 PATCH_ORDER="${z}${STRICT_COUNT}" 878 PATCH_ORDER="${z}${STRICT_COUNT}"
805 879
806 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/ 880 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/
807 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${PATCH_ORDER}/${x}.patch${PATCH_LEVEL}) 881 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${PATCH_ORDER}/${x}.patch${PATCH_LEVEL}) || die "uncompressing patch failed"
808 else 882 else
809 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL}) 883 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL}) || die "uncompressing patch failed"
810 fi 884 fi
811 fi 885 fi
812 fi 886 fi
813 done 887 done
814 888
816 x=${KPATCH_DIR} 890 x=${KPATCH_DIR}
817 KPATCH_DIR="" 891 KPATCH_DIR=""
818 for i in $(find ${x} -type d | sort -n); do 892 for i in $(find ${x} -type d | sort -n); do
819 KPATCH_DIR="${KPATCH_DIR} ${i}" 893 KPATCH_DIR="${KPATCH_DIR} ${i}"
820 done 894 done
895
896 # do not apply fbcondecor patch to sparc/sparc64 as it breaks boot
897 # bug #272676
898 if [[ "$(tc-arch)" = "sparc" || "$(tc-arch)" = "sparc64" ]]; then
899 if [[ ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} > 2.6.28 ]]; then
900 UNIPATCH_DROP="${UNIPATCH_DROP} *_fbcondecor-0.9.6.patch"
901 echo
902 ewarn "fbcondecor currently prevents sparc/sparc64 from booting"
903 ewarn "for kernel versions >= 2.6.29. Removing fbcondecor patch."
904 ewarn "See https://bugs.gentoo.org/show_bug.cgi?id=272676 for details"
905 echo
906 fi
907 fi
821 908
822 #so now lets get rid of the patchno's we want to exclude 909 #so now lets get rid of the patchno's we want to exclude
823 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}" 910 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}"
824 for i in ${UNIPATCH_DROP}; do 911 for i in ${UNIPATCH_DROP}; do
825 ebegin "Excluding Patch #${i}" 912 ebegin "Excluding Patch #${i}"
853 break 940 break
854 else 941 else
855 eend 1 942 eend 1
856 eerror "Failed to apply patch ${i/*\//}" 943 eerror "Failed to apply patch ${i/*\//}"
857 eerror "Please attach ${STDERR_T} to any bug you may post." 944 eerror "Please attach ${STDERR_T} to any bug you may post."
945 eshopts_pop
858 die "Failed to apply ${i/*\//}" 946 die "Failed to apply ${i/*\//}"
859 fi 947 fi
860 else 948 else
861 PATCH_DEPTH=$((${PATCH_DEPTH} + 1)) 949 PATCH_DEPTH=$((${PATCH_DEPTH} + 1))
862 fi 950 fi
863 done 951 done
864 if [ ${PATCH_DEPTH} -eq 5 ]; then 952 if [ ${PATCH_DEPTH} -eq 5 ]; then
865 eend 1 953 eend 1
866 eerror "Please attach ${STDERR_T} to any bug you may post." 954 eerror "Please attach ${STDERR_T} to any bug you may post."
955 eshopts_pop
867 die "Unable to dry-run patch." 956 die "Unable to dry-run patch."
868 fi 957 fi
869 done 958 done
870 done 959 done
871 960
873 # sit in KPATCH_DIR's. This is handled properly in the unipatch rewrite, 962 # sit in KPATCH_DIR's. This is handled properly in the unipatch rewrite,
874 # which is why I'm not taking too much time over this. 963 # which is why I'm not taking too much time over this.
875 local tmp 964 local tmp
876 for i in ${UNIPATCH_DOCS}; do 965 for i in ${UNIPATCH_DOCS}; do
877 tmp="${tmp} ${i//*\/}" 966 tmp="${tmp} ${i//*\/}"
878 cp -f ${i} ${T}/ 967 cp -f ${i} "${T}"/
879 done 968 done
880 UNIPATCH_DOCS="${tmp}" 969 UNIPATCH_DOCS="${tmp}"
881 970
882 # clean up KPATCH_DIR's - fixes bug #53610 971 # clean up KPATCH_DIR's - fixes bug #53610
883 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done 972 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done
884 973
885 LC_ALL="${myLC_ALL}" 974 LC_ALL="${myLC_ALL}"
886 LANG="${myLANG}" 975 LANG="${myLANG}"
887 eval ${extglob_bak} 976 eshopts_pop
888} 977}
889 978
890# getfilevar accepts 2 vars as follows: 979# getfilevar accepts 2 vars as follows:
891# getfilevar <VARIABLE> <CONFIGFILE> 980# getfilevar <VARIABLE> <CONFIGFILE>
892# pulled from linux-info 981# pulled from linux-info
1029 1118
1030 # allow ebuilds to massage the source tree after patching but before 1119 # allow ebuilds to massage the source tree after patching but before
1031 # we run misc `make` functions below 1120 # we run misc `make` functions below
1032 [[ $(type -t kernel-2_hook_premake) == "function" ]] && kernel-2_hook_premake 1121 [[ $(type -t kernel-2_hook_premake) == "function" ]] && kernel-2_hook_premake
1033 1122
1123 debug-print "Doing epatch_user"
1124 epatch_user
1125
1034 debug-print "Doing unpack_set_extraversion" 1126 debug-print "Doing unpack_set_extraversion"
1035 1127
1036 [[ -z ${K_NOSETEXTRAVERSION} ]] && unpack_set_extraversion 1128 [[ -z ${K_NOSETEXTRAVERSION} ]] && unpack_set_extraversion
1037 unpack_fix_install_path 1129 unpack_fix_install_path
1038 1130
1046 # unpack_2_6 should now be 2.6.17 safe anyways 1138 # unpack_2_6 should now be 2.6.17 safe anyways
1047 if [[ ${ETYPE} == headers ]]; then 1139 if [[ ${ETYPE} == headers ]]; then
1048 kernel_is 2 4 && unpack_2_4 1140 kernel_is 2 4 && unpack_2_4
1049 kernel_is 2 6 && unpack_2_6 1141 kernel_is 2 6 && unpack_2_6
1050 fi 1142 fi
1143
1144 if [[ $K_DEBLOB_AVAILABLE == 1 ]] && use deblob ; then
1145 cp "${DISTDIR}/${DEBLOB_A}" "${T}" || die "cp ${DEBLOB_A} failed"
1146 cp "${DISTDIR}/${DEBLOB_CHECK_A}" "${T}/deblob-check" || die "cp ${DEBLOB_CHECK_A} failed"
1147 chmod +x "${T}/${DEBLOB_A}" "${T}/deblob-check" || die "chmod deblob scripts failed"
1148 fi
1051} 1149}
1052 1150
1053kernel-2_src_compile() { 1151kernel-2_src_compile() {
1054 cd "${S}" 1152 cd "${S}"
1055 [[ ${ETYPE} == headers ]] && compile_headers 1153 [[ ${ETYPE} == headers ]] && compile_headers
1154
1155 if [[ $K_DEBLOB_AVAILABLE == 1 ]] && use deblob ; then
1156 echo ">>> Running deblob script ..."
1157 sh "${T}/${DEBLOB_A}" --force || \
1158 die "Deblob script failed to run!!!"
1159 fi
1056} 1160}
1161
1162# if you leave it to the default src_test, it will run make to
1163# find whether test/check targets are present; since "make test"
1164# actually produces a few support files, they are installed even
1165# though the package is binchecks-restricted.
1166#
1167# Avoid this altogether by making the function moot.
1168kernel-2_src_test() { :; }
1057 1169
1058kernel-2_pkg_preinst() { 1170kernel-2_pkg_preinst() {
1059 [[ ${ETYPE} == headers ]] && preinst_headers 1171 [[ ${ETYPE} == headers ]] && preinst_headers
1060} 1172}
1061 1173
1064 [[ ${ETYPE} == headers ]] && install_headers 1176 [[ ${ETYPE} == headers ]] && install_headers
1065 [[ ${ETYPE} == sources ]] && install_sources 1177 [[ ${ETYPE} == sources ]] && install_sources
1066} 1178}
1067 1179
1068kernel-2_pkg_postinst() { 1180kernel-2_pkg_postinst() {
1069 [[ ${ETYPE} == headers ]] && postinst_headers
1070 [[ ${ETYPE} == sources ]] && postinst_sources 1181 [[ ${ETYPE} == sources ]] && postinst_sources
1071} 1182}
1072 1183
1073kernel-2_pkg_setup() { 1184kernel-2_pkg_setup() {
1074 if kernel_is 2 4; then 1185 if kernel_is 2 4; then

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

  ViewVC Help
Powered by ViewVC 1.1.20