/[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.159 Revision 1.241
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.159 2006/02/17 22:18:20 swegener Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/kernel-2.eclass,v 1.241 2010/09/17 21:44:20 scarabeus 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.
21# EXTRAVERSION would be something like : -wolk-4.19-r1 22# EXTRAVERSION would be something like : -wolk-4.19-r1
22# K_NOSETEXTRAVERSION - if this is set then EXTRAVERSION will not be 23# K_NOSETEXTRAVERSION - if this is set then EXTRAVERSION will not be
23# automatically set within the kernel Makefile 24# automatically set within the kernel Makefile
24# K_NOUSENAME - if this is set then EXTRAVERSION will not include the 25# K_NOUSENAME - if this is set then EXTRAVERSION will not include the
25# first part of ${PN} in EXTRAVERSION 26# first part of ${PN} in EXTRAVERSION
27# K_NOUSEPR - if this is set then EXTRAVERSION will not include the
28# anything based on ${PR}.
26# K_PREPATCHED - if the patchset is prepatched (ie: mm-sources, 29# K_PREPATCHED - if the patchset is prepatched (ie: mm-sources,
27# ck-sources, ac-sources) it will use PR (ie: -r5) as 30# ck-sources, ac-sources) it will use PR (ie: -r5) as
28# the patchset version for 31# the patchset version for
29# and not use it as a true package revision 32# and not use it as a true package revision
30# 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
31# postinst and can be used to carry additional postinst 34# postinst and can be used to carry additional postinst
32# messages 35# messages
36# K_EXTRAELOG - same as K_EXTRAEINFO except using elog instead of einfo
33# 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
34# K_SYMLINK - if this is set, then forcably create symlink anyway 38# K_SYMLINK - if this is set, then forcably create symlink anyway
35# 39#
36# K_DEFCONFIG - Allow specifying a different defconfig target. 40# K_DEFCONFIG - Allow specifying a different defconfig target.
37# If length zero, defaults to "defconfig". 41# If length zero, defaults to "defconfig".
38# K_WANT_GENPATCHES - Apply genpatches to kernel source. Provide any 42# K_WANT_GENPATCHES - Apply genpatches to kernel source. Provide any
39# combination of "base" and "extras" 43# combination of "base" and "extras"
40# 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.
41# 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
42# 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
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.
43 55
44# H_SUPPORTEDARCH - this should be a space separated list of ARCH's which 56# H_SUPPORTEDARCH - this should be a space separated list of ARCH's which
45# can be supported by the headers ebuild 57# can be supported by the headers ebuild
46 58
47# UNIPATCH_LIST - space delimetered list of patches to be applied to the 59# UNIPATCH_LIST - space delimetered list of patches to be applied to the
53# UNIPATCH_DOCS - space delimemeted list of docs to be installed to 65# UNIPATCH_DOCS - space delimemeted list of docs to be installed to
54# the doc dir 66# the doc dir
55# UNIPATCH_STRICTORDER - if this is set places patches into directories of 67# UNIPATCH_STRICTORDER - if this is set places patches into directories of
56# order, so they are applied in the order passed 68# order, so they are applied in the order passed
57 69
58inherit toolchain-funcs versionator multilib 70inherit eutils toolchain-funcs versionator multilib
59EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install \ 71EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_test src_install pkg_preinst pkg_postinst
60 pkg_preinst pkg_postinst
61 72
62# Added by Daniel Ostrow <dostrow@gentoo.org> 73# Added by Daniel Ostrow <dostrow@gentoo.org>
63# This is an ugly hack to get around an issue with a 32-bit userland on ppc64. 74# This is an ugly hack to get around an issue with a 32-bit userland on ppc64.
64# I will remove it when I come up with something more reasonable. 75# I will remove it when I come up with something more reasonable.
65[[ ${PROFILE_ARCH} == 'ppc64' ]] && CHOST='powerpc64-unknown-linux-gnu' 76[[ ${PROFILE_ARCH} == "ppc64" ]] && CHOST="powerpc64-${CHOST#*-}"
66 77
67export CTARGET=${CTARGET:-${CHOST}} 78export CTARGET=${CTARGET:-${CHOST}}
68if [[ ${CTARGET} == ${CHOST} && ${CATEGORY/cross-} != ${CATEGORY} ]]; then 79if [[ ${CTARGET} == ${CHOST} && ${CATEGORY/cross-} != ${CATEGORY} ]]; then
69 export CTARGET=${CATEGORY/cross-} 80 export CTARGET=${CATEGORY/cross-}
70fi 81fi
71 82
72HOMEPAGE="http://www.kernel.org/ http://www.gentoo.org/" 83HOMEPAGE="http://www.kernel.org/ http://www.gentoo.org/ ${HOMEPAGE}"
84[[ -z ${LICENSE} ]] && \
73LICENSE="GPL-2" 85 LICENSE="GPL-2"
86
87# This is the latest KV_PATCH of the deblob tool available from the
88# libre-sources upstream.
89[[ -z ${DEBLOB_MAX_VERSION} ]] && DEBLOB_MAX_VERSION=35
90
91# No need to run scanelf/strip on kernel sources/headers (bug #134453).
92RESTRICT="binchecks strip"
74 93
75# set LINUX_HOSTCFLAGS if not already set 94# set LINUX_HOSTCFLAGS if not already set
76[[ -z ${LINUX_HOSTCFLAGS} ]] && \ 95[[ -z ${LINUX_HOSTCFLAGS} ]] && \
77 LINUX_HOSTCFLAGS="-Wall -Wstrict-prototypes -Os -fomit-frame-pointer -I${S}/include" 96 LINUX_HOSTCFLAGS="-Wall -Wstrict-prototypes -Os -fomit-frame-pointer -I${S}/include"
97
98# debugging functions
99#==============================================================
100# this function exists only to help debug kernel-2.eclass
101# if you are adding new functionality in, put a call to it
102# at the start of src_unpack, or during SRC_URI/dep generation.
103debug-print-kernel2-variables() {
104 for v in PVR CKV OKV KV KV_FULL KV_MAJOR KV_MINOR KV_PATCH RELEASETYPE \
105 RELEASE UNIPATCH_LIST_DEFAULT UNIPATCH_LIST_GENPATCHES \
106 UNIPATCH_LIST S KERNEL_URI ; do
107 debug-print "${v}: ${!v}"
108 done
109}
78 110
79#Eclass functions only from here onwards ... 111#Eclass functions only from here onwards ...
80#============================================================== 112#==============================================================
81handle_genpatches() { 113handle_genpatches() {
82 local tarball 114 local tarball
83 [[ -z ${K_WANT_GENPATCHES} || -z ${K_GENPATCHES_VER} ]] && return -1 115 [[ -z ${K_WANT_GENPATCHES} || -z ${K_GENPATCHES_VER} ]] && return 1
84 116
85 for i in ${K_WANT_GENPATCHES} ; do 117 for i in ${K_WANT_GENPATCHES} ; do
86 tarball="genpatches-${OKV}-${K_GENPATCHES_VER}.${i}.tar.bz2" 118 tarball="genpatches-${OKV}-${K_GENPATCHES_VER}.${i}.tar.bz2"
87 GENPATCHES_URI="${GENPATCHES_URI} mirror://gentoo/${tarball}" 119 GENPATCHES_URI="${GENPATCHES_URI} mirror://gentoo/${tarball}"
88 UNIPATCH_LIST_GENPATCHES="${UNIPATCH_LIST_GENPATCHES} ${DISTDIR}/${tarball}" 120 UNIPATCH_LIST_GENPATCHES="${UNIPATCH_LIST_GENPATCHES} ${DISTDIR}/${tarball}"
124 KV_EXTRA=${KV_EXTRA/[-_]*} 156 KV_EXTRA=${KV_EXTRA/[-_]*}
125 else 157 else
126 KV_PATCH=$(get_version_component_range 3- ${OKV}) 158 KV_PATCH=$(get_version_component_range 3- ${OKV})
127 fi 159 fi
128 KV_PATCH=${KV_PATCH/[-_]*} 160 KV_PATCH=${KV_PATCH/[-_]*}
161
162 local v n=0 missing
163 for v in CKV OKV KV_{MAJOR,MINOR,PATCH} ; do
164 [[ -z ${!v} ]] && n=1 && missing="${missing}${v} ";
165 done
166 [[ $n -eq 1 ]] && \
167 eerror "Missing variables: ${missing}" && \
168 die "Failed to extract kernel version (try explicit CKV in ebuild)!"
169 unset v n missing
129 170
130 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2" 171 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
131 172
132 RELEASE=${CKV/${OKV}} 173 RELEASE=${CKV/${OKV}}
133 RELEASE=${RELEASE/_beta} 174 RELEASE=${RELEASE/_beta}
134 RELEASE=${RELEASE/_rc/-rc} 175 RELEASE=${RELEASE/_rc/-rc}
135 RELEASE=${RELEASE/_pre/-pre} 176 RELEASE=${RELEASE/_pre/-pre}
177 # We cannot trivally call kernel_is here, because it calls us to detect the
178 # version
136 kernel_is ge 2 6 && RELEASE=${RELEASE/-pre/-git} 179 #kernel_is ge 2 6 && RELEASE=${RELEASE/-pre/-git}
180 [ $(($KV_MAJOR * 1000 + $KV_MINOR)) -ge 2006 ] && RELEASE=${RELEASE/-pre/-git}
137 RELEASETYPE=${RELEASE//[0-9]} 181 RELEASETYPE=${RELEASE//[0-9]}
138 182
139 # Now we know that RELEASE is the -rc/-git 183 # Now we know that RELEASE is the -rc/-git
140 # and RELEASETYPE is the same but with its numerics stripped 184 # and RELEASETYPE is the same but with its numerics stripped
141 # we can work on better sorting EXTRAVERSION. 185 # we can work on better sorting EXTRAVERSION.
142 # first of all, we add the release 186 # first of all, we add the release
143 EXTRAVERSION="${RELEASE}" 187 EXTRAVERSION="${RELEASE}"
188 debug-print "0 EXTRAVERSION:${EXTRAVERSION}"
144 [[ -n ${KV_EXTRA} ]] && EXTRAVERSION=".${KV_EXTRA}${EXTRAVERSION}" 189 [[ -n ${KV_EXTRA} ]] && EXTRAVERSION=".${KV_EXTRA}${EXTRAVERSION}"
145 190
191 debug-print "1 EXTRAVERSION:${EXTRAVERSION}"
192 if [[ -n "${K_NOUSEPR}" ]]; then
193 # Don't add anything based on PR to EXTRAVERSION
194 debug-print "1.0 EXTRAVERSION:${EXTRAVERSION}"
146 if [[ -n ${K_PREPATCHED} ]]; then 195 elif [[ -n ${K_PREPATCHED} ]]; then
196 debug-print "1.1 EXTRAVERSION:${EXTRAVERSION}"
147 EXTRAVERSION="${EXTRAVERSION}-${PN/-*}${PR/r}" 197 EXTRAVERSION="${EXTRAVERSION}-${PN/-*}${PR/r}"
148 elif [[ "${ETYPE}" = "sources" ]]; then 198 elif [[ "${ETYPE}" = "sources" ]]; then
199 debug-print "1.2 EXTRAVERSION:${EXTRAVERSION}"
149 # For some sources we want to use the PV in the extra version 200 # For some sources we want to use the PV in the extra version
150 # This is because upstream releases with a completely different 201 # This is because upstream releases with a completely different
151 # versioning scheme. 202 # versioning scheme.
152 case ${PN/-*} in 203 case ${PN/-*} in
153 wolk) K_USEPV=1;; 204 wolk) K_USEPV=1;;
154 vserver) K_USEPV=1;; 205 vserver) K_USEPV=1;;
155 esac 206 esac
156 207
157 [[ -z ${K_NOUSENAME} ]] && EXTRAVERSION="${EXTRAVERSION}-${PN/-*}" 208 [[ -z "${K_NOUSENAME}" ]] && EXTRAVERSION="${EXTRAVERSION}-${PN/-*}"
158 [[ -n ${K_USEPV} ]] && EXTRAVERSION="${EXTRAVERSION}-${PV//_/-}" 209 [[ -n "${K_USEPV}" ]] && EXTRAVERSION="${EXTRAVERSION}-${PV//_/-}"
159 [[ -n ${PR//r0} ]] && EXTRAVERSION="${EXTRAVERSION}-${PR}" 210 [[ -n "${PR//r0}" ]] && EXTRAVERSION="${EXTRAVERSION}-${PR}"
160 fi 211 fi
212 debug-print "2 EXTRAVERSION:${EXTRAVERSION}"
161 213
162 # The only messing around which should actually effect this is for KV_EXTRA 214 # The only messing around which should actually effect this is for KV_EXTRA
163 # since this has to limit OKV to MAJ.MIN.PAT and strip EXTRA off else 215 # since this has to limit OKV to MAJ.MIN.PAT and strip EXTRA off else
164 # KV_FULL evaluates to MAJ.MIN.PAT.EXT.EXT after EXTRAVERSION 216 # KV_FULL evaluates to MAJ.MIN.PAT.EXT.EXT after EXTRAVERSION
165 if [[ -n ${KV_EXTRA} ]]; then 217 if [[ -n ${KV_EXTRA} ]]; then
202 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.bz2 254 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.bz2
203 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2" 255 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
204 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.bz2 ${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2" 256 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.bz2 ${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2"
205 fi 257 fi
206 258
259 debug-print-kernel2-variables
260
207 handle_genpatches 261 handle_genpatches
208} 262}
209 263
210kernel_is() { 264kernel_is() {
265 # ALL of these should be set before we can safely continue this function.
266 # some of the sources have in the past had only one set.
267 local v n=0
268 for v in OKV KV_{MAJOR,MINOR,PATCH} ; do [[ -z ${!v} ]] && n=1 ; done
211 [[ -z ${OKV} ]] && detect_version 269 [[ $n -eq 1 ]] && detect_version
270 unset v n
271
272 # Now we can continue
212 local operator test value x=0 y=0 z=0 273 local operator test value x=0 y=0 z=0
213 274
214 case ${1} in 275 case ${1} in
215 lt) operator="-lt"; shift;; 276 lt) operator="-lt"; shift;;
216 gt) operator="-gt"; shift;; 277 gt) operator="-gt"; shift;;
248} 309}
249 310
250# Capture the sources type and set DEPENDs 311# Capture the sources type and set DEPENDs
251if [[ ${ETYPE} == sources ]]; then 312if [[ ${ETYPE} == sources ]]; then
252 DEPEND="!build? ( sys-apps/sed 313 DEPEND="!build? ( sys-apps/sed
253 >=sys-devel/binutils-2.11.90.0.31 ) 314 >=sys-devel/binutils-2.11.90.0.31 )"
254 doc? ( app-text/docbook-sgml-utils
255 app-text/xmlto )"
256 RDEPEND="!build? ( >=sys-libs/ncurses-5.2 315 RDEPEND="!build? ( >=sys-libs/ncurses-5.2
257 sys-devel/make ) 316 sys-devel/make )"
258 virtual/dev-manager" 317 PDEPEND="!build? ( virtual/dev-manager )"
259 318
260 PROVIDE="virtual/linux-sources" 319 PROVIDE="virtual/linux-sources"
261 kernel_is gt 2 4 && PROVIDE="${PROVIDE} virtual/alsa" 320 kernel_is gt 2 4 && PROVIDE="${PROVIDE} virtual/alsa"
262 321
263 SLOT="${PVR}" 322 SLOT="${PVR}"
264 DESCRIPTION="Sources for the ${KV_MAJOR}.${KV_MINOR} linux kernel" 323 DESCRIPTION="Sources for the ${KV_MAJOR}.${KV_MINOR} linux kernel"
265 IUSE="symlink build doc" 324 IUSE="symlink build"
325
326 # Bug #266157, deblob for libre support
327 if [[ -z ${K_PREDEBLOBBED} ]] ; then
328 if [[ -z ${K_DEBLOB_AVAILABLE} ]] ; then
329 kernel_is ge 2 6 27 && \
330 kernel_is le 2 6 ${DEBLOB_MAX_VERSION} && \
331 K_DEBLOB_AVAILABLE=1
332 fi
333 if [[ ${K_DEBLOB_AVAILABLE} == "1" ]] ; then
334 IUSE="${IUSE} deblob"
335 # Reflect that kernels contain firmware blobs unless otherwise
336 # stripped
337 LICENSE="${LICENSE} !deblob? ( freedist )"
338
339 DEBLOB_PV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
340 DEBLOB_A="deblob-${DEBLOB_PV}"
341 DEBLOB_CHECK_A="deblob-check-${DEBLOB_PV}"
342 DEBLOB_HOMEPAGE="http://www.fsfla.org/svnwiki/selibre/linux-libre/"
343 DEBLOB_URI_PATH="download/releases/LATEST-${DEBLOB_PV}.N"
344 if ! has "${EAPI:-0}" 0 1 ; then
345 DEBLOB_CHECK_URI="${DEBLOB_HOMEPAGE}/${DEBLOB_URI_PATH}/deblob-check -> ${DEBLOB_CHECK_A}"
346 else
347 DEBLOB_CHECK_URI="mirror://gentoo/${DEBLOB_CHECK_A}"
348 fi
349 DEBLOB_URI="${DEBLOB_HOMEPAGE}/${DEBLOB_URI_PATH}/${DEBLOB_A}"
350 HOMEPAGE="${HOMEPAGE} ${DEBLOB_HOMEPAGE}"
351
352 KERNEL_URI="${KERNEL_URI}
353 deblob? (
354 ${DEBLOB_URI}
355 ${DEBLOB_CHECK_URI}
356 )"
357 else
358 # We have no way to deblob older kernels, so just mark them as
359 # tainted with non-libre materials.
360 LICENSE="${LICENSE} freedist"
361 fi
362 fi
363
266elif [[ ${ETYPE} == headers ]]; then 364elif [[ ${ETYPE} == headers ]]; then
267 DESCRIPTION="Linux system headers" 365 DESCRIPTION="Linux system headers"
268 IUSE="" 366
367 # Since we should NOT honour KBUILD_OUTPUT in headers
368 # lets unset it here.
369 unset KBUILD_OUTPUT
269 370
270 if [[ ${CTARGET} = ${CHOST} ]]; then 371 if [[ ${CTARGET} = ${CHOST} ]]; then
271 DEPEND="!virtual/os-headers" 372 DEPEND="!virtual/os-headers"
272 PROVIDE="virtual/os-headers" 373 PROVIDE="virtual/os-headers"
273 SLOT="0" 374 SLOT="0"
282# Cross-compile support functions 383# Cross-compile support functions
283#============================================================== 384#==============================================================
284kernel_header_destdir() { 385kernel_header_destdir() {
285 [[ ${CTARGET} == ${CHOST} ]] \ 386 [[ ${CTARGET} == ${CHOST} ]] \
286 && echo /usr/include \ 387 && echo /usr/include \
287 || echo /usr/${CTARGET}/include 388 || echo /usr/${CTARGET}/usr/include
288} 389}
289 390
290cross_pre_c_headers() { 391cross_pre_c_headers() {
291 [[ -z ${_E_CROSS_HEADERS_ONLY} ]] && return 1 392 use crosscompile_opts_headers-only && [[ ${CHOST} != ${CTARGET} ]]
292 [[ ${CHOST} == ${CTARGET} ]] && return 1
293 return 0
294} 393}
295 394
296env_setup_xmakeopts() { 395env_setup_xmakeopts() {
297 # Kernel ARCH != portage ARCH 396 # Kernel ARCH != portage ARCH
298 export KARCH=$(tc-arch-kernel) 397 export KARCH=$(tc-arch-kernel)
309} 408}
310 409
311# Unpack functions 410# Unpack functions
312#============================================================== 411#==============================================================
313unpack_2_4() { 412unpack_2_4() {
314 env_setup_xmakeopts
315
316 cd "${S}"
317 # this file is required for other things to build properly, 413 # this file is required for other things to build properly,
318 # so we autogenerate it 414 # so we autogenerate it
319 make -s mrproper ${xmakeopts} || die "make mrproper failed" 415 make -s mrproper ${xmakeopts} || die "make mrproper failed"
320 make -s symlinks ${xmakeopts} || die "make symlinks failed" 416 make -s symlinks ${xmakeopts} || die "make symlinks failed"
321 make -s include/linux/version.h ${xmakeopts} || die "make include/linux/version.h failed" 417 make -s include/linux/version.h ${xmakeopts} || die "make include/linux/version.h failed"
322 echo ">>> version.h compiled successfully." 418 echo ">>> version.h compiled successfully."
323} 419}
324 420
325unpack_2_6() { 421unpack_2_6() {
326 env_setup_xmakeopts
327
328 cd "${S}"
329 # this file is required for other things to build properly, so we 422 # this file is required for other things to build properly, so we
330 # autogenerate it ... touch .config to keep version.h build from 423 # autogenerate it ... generate a .config to keep version.h build from
331 # spitting out an annoying warning 424 # spitting out an annoying warning
332 make -s mrproper ${xmakeopts} || die "make mrproper failed" 425 make -s mrproper ${xmakeopts} 2>/dev/null \
426 || die "make mrproper failed"
427
428 # quick fix for bug #132152 which triggers when it cannot include linux
429 # headers (ie, we have not installed it yet)
430 if ! make -s defconfig ${xmakeopts} &>/dev/null 2>&1 ; then
333 touch .config 431 touch .config
334 make -s include/linux/version.h ${xmakeopts} || die "make include/linux/version.h failed" 432 eerror "make defconfig failed."
335 rm -f .config 433 eerror "assuming you dont have any headers installed yet and continuing"
434 epause 5
435 fi
436
437 make -s include/linux/version.h ${xmakeopts} 2>/dev/null \
438 || die "make include/linux/version.h failed"
439 rm -f .config >/dev/null
336} 440}
337 441
338universal_unpack() { 442universal_unpack() {
339 cd ${WORKDIR} 443 cd "${WORKDIR}"
340 unpack linux-${OKV}.tar.bz2 444 unpack linux-${OKV}.tar.bz2
445 if [[ -d "linux" ]]; then
446 mv linux linux-${KV_FULL} \
447 || die "Unable to move source tree to ${KV_FULL}."
341 if [[ "${OKV}" != "${KV_FULL}" ]]; then 448 elif [[ "${OKV}" != "${KV_FULL}" ]]; then
342 mv linux-${OKV} linux-${KV_FULL} \ 449 mv linux-${OKV} linux-${KV_FULL} \
343 || die "Unable to move source tree to ${KV_FULL}." 450 || die "Unable to move source tree to ${KV_FULL}."
344 fi 451 fi
345 cd "${S}" 452 cd "${S}"
346 453
347 # remove all backup files 454 # remove all backup files
348 find . -iname "*~" -exec rm {} \; 2> /dev/null 455 find . -iname "*~" -exec rm {} \; 2> /dev/null
349 456
350 # fix a problem on ppc where TOUT writes to /usr/src/linux breaking sandbox 457 # fix a problem on ppc where TOUT writes to /usr/src/linux breaking sandbox
351 use ppc && \ 458 # only do this for kernel < 2.6.27 since this file does not exist in later
459 # kernels
460 if [[ ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} < 2.6.27 ]]
461 then
462 sed -i \
352 sed -ie 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \ 463 -e 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
353 "${S}"/arch/ppc/Makefile 464 "${S}"/arch/ppc/Makefile
465 else
466 sed -i \
467 -e 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
468 "${S}"/arch/powerpc/Makefile
469 fi
354} 470}
355 471
356unpack_set_extraversion() { 472unpack_set_extraversion() {
357 cd "${S}" 473 cd "${S}"
358 sed -i -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile 474 sed -i -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile
359 cd ${OLDPWD} 475 cd "${OLDPWD}"
360} 476}
361 477
362# Should be done after patches have been applied 478# Should be done after patches have been applied
363# Otherwise patches that modify the same area of Makefile will fail 479# Otherwise patches that modify the same area of Makefile will fail
364unpack_fix_install_path() { 480unpack_fix_install_path() {
365 cd "${S}" 481 cd "${S}"
366 sed -i -e 's:#export\tINSTALL_PATH:export\tINSTALL_PATH:' Makefile 482 sed -i -e 's:#export\tINSTALL_PATH:export\tINSTALL_PATH:' Makefile
367} 483}
368 484
369unpack_fix_docbook() {
370 if [[ -d ${S}/Documentation/DocBook ]]; then
371 cd "${S}"/Documentation/DocBook
372 sed -ie "s:db2:docbook2:g" Makefile
373 cd ${OLDPWD}
374 fi
375}
376
377# Compile Functions 485# Compile Functions
378#============================================================== 486#==============================================================
379compile_headers() { 487compile_headers() {
380 env_setup_xmakeopts 488 env_setup_xmakeopts
381
382 # Since KBUILD_OUTPUT shouldnt be used when compiling headers, lets unset it
383 # if it exists.
384 [[ -n ${KBUILD_OUTPUT} ]] && unset KBUILD_OUTPUT
385 489
386 # if we couldnt obtain HOSTCFLAGS from the Makefile, 490 # if we couldnt obtain HOSTCFLAGS from the Makefile,
387 # then set it to something sane 491 # then set it to something sane
388 local HOSTCFLAGS=$(getfilevar HOSTCFLAGS "${S}"/Makefile) 492 local HOSTCFLAGS=$(getfilevar HOSTCFLAGS "${S}"/Makefile)
389 HOSTCFLAGS=${HOSTCFLAGS:--Wall -Wstrict-prototypes -O2 -fomit-frame-pointer} 493 HOSTCFLAGS=${HOSTCFLAGS:--Wall -Wstrict-prototypes -O2 -fomit-frame-pointer}
391 if kernel_is 2 4; then 495 if kernel_is 2 4; then
392 yes "" | make oldconfig ${xmakeopts} 496 yes "" | make oldconfig ${xmakeopts}
393 echo ">>> make oldconfig complete" 497 echo ">>> make oldconfig complete"
394 make dep ${xmakeopts} 498 make dep ${xmakeopts}
395 elif kernel_is 2 6; then 499 elif kernel_is 2 6; then
500 # 2.6.18 introduces headers_install which means we dont need any
501 # of this crap anymore :D
502 kernel_is ge 2 6 18 && return 0
503
396 # autoconf.h isnt generated unless it already exists. plus, we have 504 # autoconf.h isnt generated unless it already exists. plus, we have
397 # no guarantee that any headers are installed on the system... 505 # no guarantee that any headers are installed on the system...
398 [[ -f ${ROOT}/usr/include/linux/autoconf.h ]] \ 506 [[ -f ${ROOT}/usr/include/linux/autoconf.h ]] \
399 || touch include/linux/autoconf.h 507 || touch include/linux/autoconf.h
400 508
401 # if K_DEFCONFIG isn't set, force to "defconfig" 509 # if K_DEFCONFIG isn't set, force to "defconfig"
402 # needed by mips 510 # needed by mips
403 if [[ -z ${K_DEFCONFIG} ]]; then 511 if [[ -z ${K_DEFCONFIG} ]]; then
512 if [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.16) ]]; then
513 case ${CTARGET} in
514 powerpc64*) K_DEFCONFIG="ppc64_defconfig";;
515 powerpc*) K_DEFCONFIG="pmac32_defconfig";;
516 *) K_DEFCONFIG="defconfig";;
517 esac
518 else
404 K_DEFCONFIG="defconfig" 519 K_DEFCONFIG="defconfig"
520 fi
405 fi 521 fi
406 522
407 # if there arent any installed headers, then there also isnt an asm 523 # if there arent any installed headers, then there also isnt an asm
408 # symlink in /usr/include/, and make defconfig will fail, so we have 524 # symlink in /usr/include/, and make defconfig will fail, so we have
409 # to force an include path with $S. 525 # to force an include path with $S.
410 HOSTCFLAGS="${HOSTCFLAGS} -I${S}/include/" 526 HOSTCFLAGS="${HOSTCFLAGS} -I${S}/include/"
411 ln -sf asm-${KARCH} "${S}"/include/asm 527 ln -sf asm-${KARCH} "${S}"/include/asm
412 cross_pre_c_headers && return 0 528 cross_pre_c_headers && return 0
413 529
414 make ${K_DEFCONFIG} HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "defconfig failed" 530 make ${K_DEFCONFIG} HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "defconfig failed (${K_DEFCONFIG})"
531 if compile_headers_tweak_config ; then
532 yes "" | make oldconfig HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "2nd oldconfig failed"
533 fi
415 make prepare HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed" 534 make prepare HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed"
416 make prepare-all HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed" 535 make prepare-all HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed"
417 fi 536 fi
418} 537}
419 538
420compile_manpages() { 539compile_headers_tweak_config() {
421 einfo "Making manpages ..." 540 # some targets can be very very picky, so let's finesse the
422 env -u ARCH make mandocs 541 # .config based upon any info we may have
542 case ${CTARGET} in
543 sh*)
544 sed -i '/CONFIG_CPU_SH/d' .config
545 echo "CONFIG_CPU_SH${CTARGET:2:1}=y" >> .config
546 return 0;;
547 esac
548
549 # no changes, so lets do nothing
550 return 1
423} 551}
424 552
425# install functions 553# install functions
426#============================================================== 554#==============================================================
427install_universal() { 555install_universal() {
428 #fix silly permissions in tarball 556 #fix silly permissions in tarball
429 cd ${WORKDIR} 557 cd "${WORKDIR}"
430 chown -R root:root * 558 chown -R root:0 * >& /dev/null
431 chmod -R a+r-w+X,u+w * 559 chmod -R a+r-w+X,u+w *
432 cd ${OLDPWD} 560 cd ${OLDPWD}
433} 561}
434 562
435install_headers() { 563install_headers() {
436 local ddir=$(kernel_header_destdir) 564 local ddir=$(kernel_header_destdir)
437 565
566 # 2.6.18 introduces headers_install which means we dont need any
567 # of this crap anymore :D
568 if kernel_is ge 2 6 18 ; then
569 env_setup_xmakeopts
570 emake headers_install INSTALL_HDR_PATH="${D}"/${ddir}/.. ${xmakeopts} || die
571
572 # let other packages install some of these headers
573 rm -rf "${D}"/${ddir}/sound #alsa-headers
574 rm -rf "${D}"/${ddir}/scsi #glibc/uclibc/etc...
575 return 0
576 fi
577
578 # Do not use "linux/*" as that can cause problems with very long
579 # $S values where the cmdline to cp is too long
438 cd "${S}" 580 cd "${S}"
439 dodir ${ddir}/linux 581 dodir ${ddir}/linux
440 cp -ax "${S}"/include/linux/* ${D}/${ddir}/linux 582 cp -pPR "${S}"/include/linux "${D}"/${ddir}/ || die
441 rm -rf ${D}/${ddir}/linux/modules 583 rm -rf "${D}"/${ddir}/linux/modules
442 584
443 # Handle multilib headers and crap 585 # Handle multilib headers and crap
444 local multi_dirs="" multi_defs="" 586 local multi_dirs="" multi_defs=""
445 case $(tc-arch-kernel) in 587 case $(tc-arch-kernel) in
446 sparc64) 588 sparc64)
459 multi_dirs="s390 s390x" 601 multi_dirs="s390 s390x"
460 multi_defs="!__s390x__ __s390x__" 602 multi_defs="!__s390x__ __s390x__"
461 ;; 603 ;;
462 arm) 604 arm)
463 dodir ${ddir}/asm 605 dodir ${ddir}/asm
464 cp -ax "${S}"/include/asm/* "${D}"/${ddir}/asm 606 cp -pPR "${S}"/include/asm/* "${D}"/${ddir}/asm
465 [[ ! -e ${D}/${ddir}/asm/arch ]] && ln -sf arch-ebsa285 "${D}"/${ddir}/asm/arch 607 [[ ! -e ${D}/${ddir}/asm/arch ]] && ln -sf arch-ebsa285 "${D}"/${ddir}/asm/arch
466 [[ ! -e ${D}/${ddir}/asm/proc ]] && ln -sf proc-armv "${D}"/${ddir}/asm/proc 608 [[ ! -e ${D}/${ddir}/asm/proc ]] && ln -sf proc-armv "${D}"/${ddir}/asm/proc
467 ;; 609 ;;
468 powerpc) 610 powerpc)
469 dodir ${ddir}/asm 611 dodir ${ddir}/asm
470 cp -ax "${S}"/include/asm/* ${D}/${ddir}/asm 612 cp -pPR "${S}"/include/asm/* "${D}"/${ddir}/asm
471 if [[ -e "${S}"/include/asm-ppc ]] ; then 613 if [[ -e "${S}"/include/asm-ppc ]] ; then
472 dodir ${ddir}/asm-ppc 614 dodir ${ddir}/asm-ppc
473 cp -ax "${S}"/include/asm-ppc/* ${D}/${ddir}/asm-ppc 615 cp -pPR "${S}"/include/asm-ppc/* "${D}"/${ddir}/asm-ppc
474 fi 616 fi
475 ;; 617 ;;
476 *) 618 *)
477 dodir ${ddir}/asm 619 dodir ${ddir}/asm
478 cp -ax "${S}"/include/asm/* ${D}/${ddir}/asm 620 cp -pPR "${S}"/include/asm/* "${D}"/${ddir}/asm
479 ;; 621 ;;
480 esac 622 esac
481 if [[ -n ${multi_dirs} ]] ; then 623 if [[ -n ${multi_dirs} ]] ; then
482 local d ml_inc="" 624 local d ml_inc=""
483 for d in ${multi_dirs} ; do 625 for d in ${multi_dirs} ; do
484 dodir ${ddir}/asm-${d} 626 dodir ${ddir}/asm-${d}
485 cp -ax "${S}"/include/asm-${d}/* ${D}/${ddir}/asm-${d}/ || die "cp asm-${d} failed" 627 cp -pPR "${S}"/include/asm-${d}/* "${D}"/${ddir}/asm-${d}/ || die "cp asm-${d} failed"
486 628
487 ml_inc="${ml_inc} ${multi_defs%% *}:${ddir}/asm-${d}" 629 ml_inc="${ml_inc} ${multi_defs%% *}:${ddir}/asm-${d}"
488 multi_defs=${multi_defs#* } 630 multi_defs=${multi_defs#* }
489 done 631 done
490 create_ml_includes ${ddir}/asm ${ml_inc} 632 create_ml_includes ${ddir}/asm ${ml_inc}
491 fi 633 fi
492 634
493 if kernel_is 2 6; then 635 if kernel_is 2 6; then
494 dodir ${ddir}/asm-generic 636 dodir ${ddir}/asm-generic
495 cp -ax "${S}"/include/asm-generic/* ${D}/${ddir}/asm-generic 637 cp -pPR "${S}"/include/asm-generic/* "${D}"/${ddir}/asm-generic
496 fi 638 fi
497 639
498 # clean up 640 # clean up
499 find "${D}" -name '*.orig' -exec rm -f {} \; 641 find "${D}" -name '*.orig' -exec rm -f {} \;
500 642
501 cd ${OLDPWD} 643 cd ${OLDPWD}
502} 644}
503 645
504install_sources() { 646install_sources() {
505 local doc docs file 647 local file
506 648
507 cd "${S}" 649 cd "${S}"
508 dodir /usr/src 650 dodir /usr/src
509 echo ">>> Copying sources ..." 651 echo ">>> Copying sources ..."
510 652
524 [[ -f ${FILESDIR}/../ChangeLog ]] && \ 666 [[ -f ${FILESDIR}/../ChangeLog ]] && \
525 echo "Please check the ebuild ChangeLog for more details." \ 667 echo "Please check the ebuild ChangeLog for more details." \
526 > "${S}"/patches.txt 668 > "${S}"/patches.txt
527 fi 669 fi
528 670
529 if use doc ; then
530 install_manpages
531
532 for doc in ${UNIPATCH_DOCS}; do [[ -f ${doc} ]] && docs="${docs} ${doc}"; done
533 if [[ -f ${S}/patches.txt ]]; then docs="${docs} ${S}/patches.txt"; fi
534 [[ -n ${docs} ]] && dodoc ${docs}
535 fi
536
537 mv ${WORKDIR}/linux* ${D}/usr/src 671 mv ${WORKDIR}/linux* "${D}"/usr/src
538}
539
540install_manpages() {
541 kernel_is lt 2 5 && return
542
543 local myfiles="Documentation/DocBook/Makefile"
544 kernel_is lt 2 6 12 && myfiles="scripts/makeman ${myfiles}"
545
546 sed -ie "s#/usr/local/man#${D}/usr/share/man#g" ${myfiles}
547 ebegin "Installing manpages"
548 env -u ARCH make installmandocs
549 eend $?
550 sed -ie "s#${D}/usr/share/man#/usr/local/man#g" ${myfiles}
551} 672}
552 673
553# pkg_preinst functions 674# pkg_preinst functions
554#============================================================== 675#==============================================================
555preinst_headers() { 676preinst_headers() {
564 local MAKELINK=0 685 local MAKELINK=0
565 686
566 # if we have USE=symlink, then force K_SYMLINK=1 687 # if we have USE=symlink, then force K_SYMLINK=1
567 use symlink && K_SYMLINK=1 688 use symlink && K_SYMLINK=1
568 689
690 # if we're using a deblobbed kernel, it's not supported
691 [[ $K_DEBLOB_AVAILABLE == 1 ]] && \
692 use deblob && \
693 K_SECURITY_UNSUPPORTED=deblob
694
569 # if we are to forcably symlink, delete it if it already exists first. 695 # if we are to forcably symlink, delete it if it already exists first.
570 if [[ -n ${K_SYMLINK} ]]; then 696 if [[ ${K_SYMLINK} > 0 ]]; then
571 [[ -h ${ROOT}usr/src/linux ]] && rm ${ROOT}usr/src/linux 697 [[ -h ${ROOT}usr/src/linux ]] && rm ${ROOT}usr/src/linux
572 MAKELINK=1 698 MAKELINK=1
573 fi 699 fi
574 700
575 # if the link doesnt exist, lets create it 701 # if the link doesnt exist, lets create it
576 [[ ! -h ${ROOT}usr/src/linux ]] && MAKELINK=1 702 [[ ! -h ${ROOT}usr/src/linux ]] && MAKELINK=1
577 703
578 if [[ ${MAKELINK} == 1 ]]; then 704 if [[ ${MAKELINK} == 1 ]]; then
579 cd ${ROOT}usr/src 705 cd "${ROOT}"usr/src
580 ln -sf linux-${KV_FULL} linux 706 ln -sf linux-${KV_FULL} linux
581 cd ${OLDPWD} 707 cd ${OLDPWD}
582 fi 708 fi
583 709
584 # Don't forget to make directory for sysfs 710 # Don't forget to make directory for sysfs
585 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys 711 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys
586 712
587 echo 713 echo
588 einfo "After installing a new kernel of any version, it is important"
589 einfo "that you have the appropriate /etc/modules.autoload.d/kernel-X.Y"
590 einfo "created (X.Y is the first 2 parts of your new kernel version)"
591 echo
592 einfo "For example, this kernel will require:"
593 einfo "/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}"
594 echo
595 einfo "If you are upgrading from a previous kernel, you may be interested" 714 elog "If you are upgrading from a previous kernel, you may be interested"
596 einfo "in the following documents:" 715 elog "in the following document:"
597 einfo " - General upgrade guide: http://www.gentoo.org/doc/en/kernel-upgrade.xml" 716 elog " - General upgrade guide: http://www.gentoo.org/doc/en/kernel-upgrade.xml"
598 kernel_is_2_6 && einfo " - 2.4 to 2.6 migration guide: http://www.gentoo.org/doc/en/migration-to-2.6.xml"
599 if kernel_is ge 2 6 13; then
600 ewarn "As of 2.6.13 the support for devfs has been removed."
601 ewarn "You will be required to either manage a static /dev"
602 ewarn "or to ensure that udev is starting on boot."
603 fi
604 echo 717 echo
605 718
606 # if K_EXTRAEINFO is set then lets display it now 719 # if K_EXTRAEINFO is set then lets display it now
607 if [[ -n ${K_EXTRAEINFO} ]]; then 720 if [[ -n ${K_EXTRAEINFO} ]]; then
608 echo ${K_EXTRAEINFO} | fmt | 721 echo ${K_EXTRAEINFO} | fmt |
609 while read -s ELINE; do einfo "${ELINE}"; done 722 while read -s ELINE; do einfo "${ELINE}"; done
610 fi 723 fi
611 724
725 # if K_EXTRAELOG is set then lets display it now
726 if [[ -n ${K_EXTRAELOG} ]]; then
727 echo ${K_EXTRAELOG} | fmt |
728 while read -s ELINE; do elog "${ELINE}"; done
729 fi
730
612 # if K_EXTRAEWARN is set then lets display it now 731 # if K_EXTRAEWARN is set then lets display it now
613 if [[ -n ${K_EXTRAEWARN} ]]; then 732 if [[ -n ${K_EXTRAEWARN} ]]; then
614 echo ${K_EXTRAEWARN} | fmt | 733 echo ${K_EXTRAEWARN} | fmt |
615 while read -s ELINE; do ewarn "${ELINE}"; done 734 while read -s ELINE; do ewarn "${ELINE}"; done
616 fi 735 fi
617}
618 736
619postinst_headers() { 737 # optionally display security unsupported message
620 einfo "Kernel headers are usually only used when recompiling glibc, as such, following the installation" 738 # Start with why
621 einfo "of newer headers, it is advised that you re-merge glibc as follows:" 739 if [[ ${K_SECURITY_UNSUPPORTED} = deblob ]]; then
622 einfo "emerge glibc" 740 ewarn "Deblobbed kernels are UNSUPPORTED by Gentoo Security."
623 einfo "Failure to do so will cause glibc to not make use of newer features present in the updated kernel" 741 elif [[ -n ${K_SECURITY_UNSUPPORTED} ]]; then
624 einfo "headers." 742 ewarn "${PN} is UNSUPPORTED by Gentoo Security."
743 fi
744 # And now the general message.
745 if [[ -n ${K_SECURITY_UNSUPPORTED} ]]; then
746 ewarn "This means that it is likely to be vulnerable to recent security issues."
747 ewarn "For specific information on why this kernel is unsupported, please read:"
748 ewarn "http://www.gentoo.org/proj/en/security/kernel.xml"
749 fi
750
751 # warn sparc users that they need to do cross-compiling with >= 2.6.25(bug #214765)
752 KV_MAJOR=$(get_version_component_range 1 ${OKV})
753 KV_MINOR=$(get_version_component_range 2 ${OKV})
754 KV_PATCH=$(get_version_component_range 3 ${OKV})
755 if [[ "$(tc-arch)" = "sparc" ]] \
756 && [[ ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} > 2.6.24 ]]
757 then
758 echo
759 elog "NOTE: Since 2.6.25 the kernel Makefile has changed in a way that"
760 elog "you now need to do"
761 elog " make CROSS_COMPILE=sparc64-unknown-linux-gnu-"
762 elog "instead of just"
763 elog " make"
764 elog "to compile the kernel. For more information please browse to"
765 elog "https://bugs.gentoo.org/show_bug.cgi?id=214765"
766 echo
767 fi
625} 768}
626 769
627# pkg_setup functions 770# pkg_setup functions
628#============================================================== 771#==============================================================
629setup_headers() { 772setup_headers() {
655 798
656 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/" 799 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/"
657 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR} 800 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR}
658 801
659 # We're gonna need it when doing patches with a predefined patchlevel 802 # We're gonna need it when doing patches with a predefined patchlevel
660 shopt -s extglob 803 eshopts_push -s extglob
661 804
662 # This function will unpack all passed tarballs, add any passed patches, and remove any passed patchnumbers 805 # This function will unpack all passed tarballs, add any passed patches, and remove any passed patchnumbers
663 # usage can be either via an env var or by params 806 # usage can be either via an env var or by params
664 # although due to the nature we pass this within this eclass 807 # although due to the nature we pass this within this eclass
665 # it shall be by param only. 808 # it shall be by param only.
666 # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}" 809 # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}"
667 UNIPATCH_LIST="${@}" 810 UNIPATCH_LIST="${@}"
668 811
669 #unpack any passed tarballs 812 #unpack any passed tarballs
670 for i in ${UNIPATCH_LIST}; do 813 for i in ${UNIPATCH_LIST}; do
671 if [ -n "$(echo ${i} | grep -e "\.tar" -e "\.tbz" -e "\.tgz")" ]; then 814 if echo ${i} | grep -qs -e "\.tar" -e "\.tbz" -e "\.tgz" ; then
672 extention=${i/*./}
673 extention=${extention/:*/}
674 case ${extention} in
675 tbz2) PIPE_CMD="tar -xvjf";;
676 bz2) PIPE_CMD="tar -xvjf";;
677 tgz) PIPE_CMD="tar -xvzf";;
678 gz) PIPE_CMD="tar -xvzf";;
679 *) eerror "Unrecognized tarball compression"
680 die "Unrecognized tarball compression";;
681 esac
682
683 if [ -n "${UNIPATCH_STRICTORDER}" ]; then 815 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
684 unset z 816 unset z
685 STRICT_COUNT=$((10#${STRICT_COUNT} + 1)) 817 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
686 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++)); 818 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
687 do z="${z}0"; 819 do z="${z}0";
688 done 820 done
689 PATCH_ORDER="${z}${STRICT_COUNT}" 821 PATCH_ORDER="${z}${STRICT_COUNT}"
690 822
691 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/ 823 mkdir -p "${KPATCH_DIR}/${PATCH_ORDER}"
692 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR}/${PATCH_ORDER}/ 1>/dev/null 824 pushd "${KPATCH_DIR}/${PATCH_ORDER}" >/dev/null
825 unpack ${i##*/}
826 popd >/dev/null
693 else 827 else
694 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR} 1>/dev/null 828 pushd "${KPATCH_DIR}" >/dev/null
829 unpack ${i##*/}
830 popd >/dev/null
695 fi 831 fi
696 832
697 if [ $? == 0 ]; then
698 einfo "${i/*\//} unpacked"
699 [ -n "$(echo ${i} | grep ':')" ] && echo ">>> Strict patch levels not currently supported for tarballed patchsets" 833 [[ ${i} == *:* ]] && echo ">>> Strict patch levels not currently supported for tarballed patchsets"
700 else
701 eerror "Failed to unpack ${i/:*/}"
702 die "unable to unpack patch tarball"
703 fi
704 else 834 else
705 extention=${i/*./} 835 extention=${i/*./}
706 extention=${extention/:*/} 836 extention=${extention/:*/}
707 PIPE_CMD="" 837 PIPE_CMD=""
708 case ${extention} in 838 case ${extention} in
839 xz) PIPE_CMD="xz -dc";;
840 lzma) PIPE_CMD="lzma -dc";;
709 bz2) PIPE_CMD="bzip2 -dc";; 841 bz2) PIPE_CMD="bzip2 -dc";;
710 patch) PIPE_CMD="cat";; 842 patch) PIPE_CMD="cat";;
711 diff) PIPE_CMD="cat";; 843 diff) PIPE_CMD="cat";;
712 gz|Z|z) PIPE_CMD="gzip -dc";; 844 gz|Z|z) PIPE_CMD="gzip -dc";;
713 ZIP|zip) PIPE_CMD="unzip -p";; 845 ZIP|zip) PIPE_CMD="unzip -p";;
736 do z="${z}0"; 868 do z="${z}0";
737 done 869 done
738 PATCH_ORDER="${z}${STRICT_COUNT}" 870 PATCH_ORDER="${z}${STRICT_COUNT}"
739 871
740 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/ 872 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/
741 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${PATCH_ORDER}/${x}.patch${PATCH_LEVEL}) 873 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${PATCH_ORDER}/${x}.patch${PATCH_LEVEL}) || die "uncompressing patch failed"
742 else 874 else
743 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL}) 875 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL}) || die "uncompressing patch failed"
744 fi 876 fi
745 fi 877 fi
746 fi 878 fi
747 done 879 done
748 880
750 x=${KPATCH_DIR} 882 x=${KPATCH_DIR}
751 KPATCH_DIR="" 883 KPATCH_DIR=""
752 for i in $(find ${x} -type d | sort -n); do 884 for i in $(find ${x} -type d | sort -n); do
753 KPATCH_DIR="${KPATCH_DIR} ${i}" 885 KPATCH_DIR="${KPATCH_DIR} ${i}"
754 done 886 done
887
888 # do not apply fbcondecor patch to sparc/sparc64 as it breaks boot
889 # bug #272676
890 if [[ "$(tc-arch)" = "sparc" || "$(tc-arch)" = "sparc64" ]]; then
891 if [[ ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} > 2.6.28 ]]; then
892 UNIPATCH_DROP="${UNIPATCH_DROP} *_fbcondecor-0.9.6.patch"
893 echo
894 ewarn "fbcondecor currently prevents sparc/sparc64 from booting"
895 ewarn "for kernel versions >= 2.6.29. Removing fbcondecor patch."
896 ewarn "See https://bugs.gentoo.org/show_bug.cgi?id=272676 for details"
897 echo
898 fi
899 fi
755 900
756 #so now lets get rid of the patchno's we want to exclude 901 #so now lets get rid of the patchno's we want to exclude
757 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}" 902 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}"
758 for i in ${UNIPATCH_DROP}; do 903 for i in ${UNIPATCH_DROP}; do
759 ebegin "Excluding Patch #${i}" 904 ebegin "Excluding Patch #${i}"
773 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi 918 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi
774 919
775 ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)" 920 ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)"
776 while [ ${PATCH_DEPTH} -lt 5 ]; do 921 while [ ${PATCH_DEPTH} -lt 5 ]; do
777 echo "Attempting Dry-run:" >> ${STDERR_T} 922 echo "Attempting Dry-run:" >> ${STDERR_T}
778 echo "cmd: patch -p${PATCH_DEPTH} --dry-run -f < ${i}" >> ${STDERR_T} 923 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i}" >> ${STDERR_T}
779 echo "=======================================================" >> ${STDERR_T} 924 echo "=======================================================" >> ${STDERR_T}
780 if [ $(patch -p${PATCH_DEPTH} --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then 925 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then
781 echo "Attempting patch:" > ${STDERR_T} 926 echo "Attempting patch:" > ${STDERR_T}
782 echo "cmd: patch -p${PATCH_DEPTH} -f < ${i}" >> ${STDERR_T} 927 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i}" >> ${STDERR_T}
783 echo "=======================================================" >> ${STDERR_T} 928 echo "=======================================================" >> ${STDERR_T}
784 if [ $(patch -p${PATCH_DEPTH} -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then 929 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then
785 eend 0 930 eend 0
786 rm ${STDERR_T} 931 rm ${STDERR_T}
787 break 932 break
788 else 933 else
789 eend 1 934 eend 1
790 eerror "Failed to apply patch ${i/*\//}" 935 eerror "Failed to apply patch ${i/*\//}"
791 eerror "Please attach ${STDERR_T} to any bug you may post." 936 eerror "Please attach ${STDERR_T} to any bug you may post."
937 eshopts_pop
792 die "Failed to apply ${i/*\//}" 938 die "Failed to apply ${i/*\//}"
793 fi 939 fi
794 else 940 else
795 PATCH_DEPTH=$((${PATCH_DEPTH} + 1)) 941 PATCH_DEPTH=$((${PATCH_DEPTH} + 1))
796 fi 942 fi
797 done 943 done
798 if [ ${PATCH_DEPTH} -eq 5 ]; then 944 if [ ${PATCH_DEPTH} -eq 5 ]; then
799 eend 1 945 eend 1
800 eerror "Please attach ${STDERR_T} to any bug you may post." 946 eerror "Please attach ${STDERR_T} to any bug you may post."
947 eshopts_pop
801 die "Unable to dry-run patch." 948 die "Unable to dry-run patch."
802 fi 949 fi
803 done 950 done
804 done 951 done
805 952
807 # sit in KPATCH_DIR's. This is handled properly in the unipatch rewrite, 954 # sit in KPATCH_DIR's. This is handled properly in the unipatch rewrite,
808 # which is why I'm not taking too much time over this. 955 # which is why I'm not taking too much time over this.
809 local tmp 956 local tmp
810 for i in ${UNIPATCH_DOCS}; do 957 for i in ${UNIPATCH_DOCS}; do
811 tmp="${tmp} ${i//*\/}" 958 tmp="${tmp} ${i//*\/}"
812 cp -f ${i} ${T}/ 959 cp -f ${i} "${T}"/
813 done 960 done
814 UNIPATCH_DOCS="${tmp}" 961 UNIPATCH_DOCS="${tmp}"
815 962
816 # clean up KPATCH_DIR's - fixes bug #53610 963 # clean up KPATCH_DIR's - fixes bug #53610
817 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done 964 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done
818 965
819 LC_ALL="${myLC_ALL}" 966 LC_ALL="${myLC_ALL}"
820 LANG="${myLANG}" 967 LANG="${myLANG}"
968 eshopts_pop
821} 969}
822 970
823# getfilevar accepts 2 vars as follows: 971# getfilevar accepts 2 vars as follows:
824# getfilevar <VARIABLE> <CONFIGFILE> 972# getfilevar <VARIABLE> <CONFIGFILE>
825# pulled from linux-info 973# pulled from linux-info
937 return 0 1085 return 0
938} 1086}
939 1087
940headers___fix() { 1088headers___fix() {
941 # Voodoo to partially fix broken upstream headers. 1089 # Voodoo to partially fix broken upstream headers.
942 # Issues with this function should go to plasmaroo. 1090 # note: do not put inline/asm/volatile together (breaks "inline asm volatile")
943 sed -i \ 1091 sed -i \
944 -e "s/\([ "$'\t'"]\)\(u\|s\)\(8\|16\|32\|64\)\([ "$'\t'"]\)/\1__\2\3\4/g;" \ 1092 -e '/^\#define.*_TYPES_H/{:loop n; bloop}' \
945 -e 's/ \(u\|s\)\(8\|16\|32\|64\)$/ __\1\2/g' \ 1093 -e 's:\<\([us]\(8\|16\|32\|64\)\)\>:__\1:g' \
946 -e 's/\([(, ]\)\(u\|s\)64\([, )]\)/\1__\264\3/g' \ 1094 -e "s/\([[:space:]]\)inline\([[:space:](]\)/\1__inline__\2/g" \
947 -e "s/^\(u\|s\)\(8\|16\|32\|64\)\([ "$'\t'"]\)/__\1\2\3/g;" \ 1095 -e "s/\([[:space:]]\)asm\([[:space:](]\)/\1__asm__\2/g" \
948 -e "s/ inline / __inline__ /g" \ 1096 -e "s/\([[:space:]]\)volatile\([[:space:](]\)/\1__volatile__\2/g" \
949 "$@" 1097 "$@"
950} 1098}
951 1099
952# common functions 1100# common functions
953#============================================================== 1101#==============================================================
954kernel-2_src_unpack() { 1102kernel-2_src_unpack() {
955 universal_unpack 1103 universal_unpack
1104 debug-print "Doing unipatch"
956 1105
957 [[ -n ${UNIPATCH_LIST} || -n ${UNIPATCH_LIST_DEFAULT} || -n ${UNIPATCH_LIST_GENPATCHES} ]] && \ 1106 [[ -n ${UNIPATCH_LIST} || -n ${UNIPATCH_LIST_DEFAULT} || -n ${UNIPATCH_LIST_GENPATCHES} ]] && \
958 unipatch "${UNIPATCH_LIST_DEFAULT} ${UNIPATCH_LIST_GENPATCHES} ${UNIPATCH_LIST}" 1107 unipatch "${UNIPATCH_LIST_DEFAULT} ${UNIPATCH_LIST_GENPATCHES} ${UNIPATCH_LIST}"
1108
1109 debug-print "Doing premake"
959 1110
960 # allow ebuilds to massage the source tree after patching but before 1111 # allow ebuilds to massage the source tree after patching but before
961 # we run misc `make` functions below 1112 # we run misc `make` functions below
962 [[ $(type -t kernel-2_hook_premake) == "function" ]] && kernel-2_hook_premake 1113 [[ $(type -t kernel-2_hook_premake) == "function" ]] && kernel-2_hook_premake
963 1114
1115 debug-print "Doing epatch_user"
1116 epatch_user
1117
1118 debug-print "Doing unpack_set_extraversion"
1119
964 [[ -z ${K_NOSETEXTRAVERSION} ]] && unpack_set_extraversion 1120 [[ -z ${K_NOSETEXTRAVERSION} ]] && unpack_set_extraversion
965 unpack_fix_docbook
966 unpack_fix_install_path 1121 unpack_fix_install_path
967 1122
1123 # Setup xmakeopts and cd into sourcetree.
1124 env_setup_xmakeopts
1125 cd "${S}"
1126
1127 # We dont need a version.h for anything other than headers
1128 # at least, I should hope we dont. If this causes problems
1129 # take out the if/fi block and inform me please.
1130 # unpack_2_6 should now be 2.6.17 safe anyways
1131 if [[ ${ETYPE} == headers ]]; then
968 kernel_is 2 4 && unpack_2_4 1132 kernel_is 2 4 && unpack_2_4
969 kernel_is 2 6 && unpack_2_6 1133 kernel_is 2 6 && unpack_2_6
1134 fi
1135
1136 if [[ $K_DEBLOB_AVAILABLE == 1 ]] && use deblob ; then
1137 cp "${DISTDIR}/${DEBLOB_A}" "${T}" || die "cp ${DEBLOB_A} failed"
1138 cp "${DISTDIR}/${DEBLOB_CHECK_A}" "${T}/deblob-check" || die "cp ${DEBLOB_CHECK_A} failed"
1139 chmod +x "${T}/${DEBLOB_A}" "${T}/deblob-check" || die "chmod deblob scripts failed"
1140 fi
970} 1141}
971 1142
972kernel-2_src_compile() { 1143kernel-2_src_compile() {
973 cd "${S}" 1144 cd "${S}"
974 [[ ${ETYPE} == headers ]] && compile_headers 1145 [[ ${ETYPE} == headers ]] && compile_headers
975 [[ ${ETYPE} == sources ]] && \ 1146
976 use doc && compile_manpages 1147 if [[ $K_DEBLOB_AVAILABLE == 1 ]] && use deblob ; then
1148 echo ">>> Running deblob script ..."
1149 sh "${T}/${DEBLOB_A}" --force || \
1150 die "Deblob script failed to run!!!"
1151 fi
977} 1152}
1153
1154# if you leave it to the default src_test, it will run make to
1155# find whether test/check targets are present; since "make test"
1156# actually produces a few support files, they are installed even
1157# though the package is binchecks-restricted.
1158#
1159# Avoid this altogether by making the function moot.
1160kernel-2_src_test() { :; }
978 1161
979kernel-2_pkg_preinst() { 1162kernel-2_pkg_preinst() {
980 [[ ${ETYPE} == headers ]] && preinst_headers 1163 [[ ${ETYPE} == headers ]] && preinst_headers
981} 1164}
982 1165
985 [[ ${ETYPE} == headers ]] && install_headers 1168 [[ ${ETYPE} == headers ]] && install_headers
986 [[ ${ETYPE} == sources ]] && install_sources 1169 [[ ${ETYPE} == sources ]] && install_sources
987} 1170}
988 1171
989kernel-2_pkg_postinst() { 1172kernel-2_pkg_postinst() {
990 [[ ${ETYPE} == headers ]] && postinst_headers
991 [[ ${ETYPE} == sources ]] && postinst_sources 1173 [[ ${ETYPE} == sources ]] && postinst_sources
992} 1174}
993 1175
994kernel-2_pkg_setup() { 1176kernel-2_pkg_setup() {
1177 if kernel_is 2 4; then
1178 if [ "$( gcc-major-version )" -eq "4" ] ; then
1179 echo
1180 ewarn "Be warned !! >=sys-devel/gcc-4.0.0 isn't supported with linux-2.4!"
1181 ewarn "Either switch to another gcc-version (via gcc-config) or use a"
1182 ewarn "newer kernel that supports gcc-4."
1183 echo
1184 ewarn "Also be aware that bugreports about gcc-4 not working"
1185 ewarn "with linux-2.4 based ebuilds will be closed as INVALID!"
1186 echo
1187 epause 10
1188 fi
1189 fi
1190
1191 ABI="${KERNEL_ABI}"
995 [[ ${ETYPE} == headers ]] && setup_headers 1192 [[ ${ETYPE} == headers ]] && setup_headers
996 [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..." 1193 [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..."
997} 1194}

Legend:
Removed from v.1.159  
changed lines
  Added in v.1.241

  ViewVC Help
Powered by ViewVC 1.1.20