/[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.228
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.228 2010/04/26 06:48:33 robbat2 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
43 48
44# 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
45# can be supported by the headers ebuild 50# can be supported by the headers ebuild
46 51
47# 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
53# UNIPATCH_DOCS - space delimemeted list of docs to be installed to 58# UNIPATCH_DOCS - space delimemeted list of docs to be installed to
54# the doc dir 59# the doc dir
55# UNIPATCH_STRICTORDER - if this is set places patches into directories of 60# UNIPATCH_STRICTORDER - if this is set places patches into directories of
56# order, so they are applied in the order passed 61# order, so they are applied in the order passed
57 62
58inherit toolchain-funcs versionator multilib 63inherit eutils toolchain-funcs versionator multilib
59EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install \ 64EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst pkg_postinst
60 pkg_preinst pkg_postinst
61 65
62# Added by Daniel Ostrow <dostrow@gentoo.org> 66# 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. 67# 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. 68# I will remove it when I come up with something more reasonable.
65[[ ${PROFILE_ARCH} == 'ppc64' ]] && CHOST='powerpc64-unknown-linux-gnu' 69[[ ${PROFILE_ARCH} == "ppc64" ]] && CHOST="powerpc64-${CHOST#*-}"
66 70
67export CTARGET=${CTARGET:-${CHOST}} 71export CTARGET=${CTARGET:-${CHOST}}
68if [[ ${CTARGET} == ${CHOST} && ${CATEGORY/cross-} != ${CATEGORY} ]]; then 72if [[ ${CTARGET} == ${CHOST} && ${CATEGORY/cross-} != ${CATEGORY} ]]; then
69 export CTARGET=${CATEGORY/cross-} 73 export CTARGET=${CATEGORY/cross-}
70fi 74fi
71 75
72HOMEPAGE="http://www.kernel.org/ http://www.gentoo.org/" 76HOMEPAGE="http://www.kernel.org/ http://www.gentoo.org/ ${HOMEPAGE}"
77# Reflect that kernels contain firmware blobs unless otherwise stripped
78[[ -z ${LICENSE} ]] && \
73LICENSE="GPL-2" 79 LICENSE="GPL-2 freedist"
80
81# No need to run scanelf/strip on kernel sources/headers (bug #134453).
82RESTRICT="binchecks strip"
74 83
75# set LINUX_HOSTCFLAGS if not already set 84# set LINUX_HOSTCFLAGS if not already set
76[[ -z ${LINUX_HOSTCFLAGS} ]] && \ 85[[ -z ${LINUX_HOSTCFLAGS} ]] && \
77 LINUX_HOSTCFLAGS="-Wall -Wstrict-prototypes -Os -fomit-frame-pointer -I${S}/include" 86 LINUX_HOSTCFLAGS="-Wall -Wstrict-prototypes -Os -fomit-frame-pointer -I${S}/include"
87
88# debugging functions
89#==============================================================
90# this function exists only to help debug kernel-2.eclass
91# if you are adding new functionality in, put a call to it
92# at the start of src_unpack, or during SRC_URI/dep generation.
93debug-print-kernel2-variables() {
94 for v in PVR CKV OKV KV KV_FULL KV_MAJOR KV_MINOR KV_PATCH RELEASETYPE \
95 RELEASE UNIPATCH_LIST_DEFAULT UNIPATCH_LIST_GENPATCHES \
96 UNIPATCH_LIST S KERNEL_URI ; do
97 debug-print "${v}: ${!v}"
98 done
99}
78 100
79#Eclass functions only from here onwards ... 101#Eclass functions only from here onwards ...
80#============================================================== 102#==============================================================
81handle_genpatches() { 103handle_genpatches() {
82 local tarball 104 local tarball
83 [[ -z ${K_WANT_GENPATCHES} || -z ${K_GENPATCHES_VER} ]] && return -1 105 [[ -z ${K_WANT_GENPATCHES} || -z ${K_GENPATCHES_VER} ]] && return 1
84 106
85 for i in ${K_WANT_GENPATCHES} ; do 107 for i in ${K_WANT_GENPATCHES} ; do
86 tarball="genpatches-${OKV}-${K_GENPATCHES_VER}.${i}.tar.bz2" 108 tarball="genpatches-${OKV}-${K_GENPATCHES_VER}.${i}.tar.bz2"
87 GENPATCHES_URI="${GENPATCHES_URI} mirror://gentoo/${tarball}" 109 GENPATCHES_URI="${GENPATCHES_URI} mirror://gentoo/${tarball}"
88 UNIPATCH_LIST_GENPATCHES="${UNIPATCH_LIST_GENPATCHES} ${DISTDIR}/${tarball}" 110 UNIPATCH_LIST_GENPATCHES="${UNIPATCH_LIST_GENPATCHES} ${DISTDIR}/${tarball}"
139 # Now we know that RELEASE is the -rc/-git 161 # Now we know that RELEASE is the -rc/-git
140 # and RELEASETYPE is the same but with its numerics stripped 162 # and RELEASETYPE is the same but with its numerics stripped
141 # we can work on better sorting EXTRAVERSION. 163 # we can work on better sorting EXTRAVERSION.
142 # first of all, we add the release 164 # first of all, we add the release
143 EXTRAVERSION="${RELEASE}" 165 EXTRAVERSION="${RELEASE}"
166 debug-print "0 EXTRAVERSION:${EXTRAVERSION}"
144 [[ -n ${KV_EXTRA} ]] && EXTRAVERSION=".${KV_EXTRA}${EXTRAVERSION}" 167 [[ -n ${KV_EXTRA} ]] && EXTRAVERSION=".${KV_EXTRA}${EXTRAVERSION}"
145 168
169 debug-print "1 EXTRAVERSION:${EXTRAVERSION}"
170 if [[ -n "${K_NOUSEPR}" ]]; then
171 # Don't add anything based on PR to EXTRAVERSION
172 debug-print "1.0 EXTRAVERSION:${EXTRAVERSION}"
146 if [[ -n ${K_PREPATCHED} ]]; then 173 elif [[ -n ${K_PREPATCHED} ]]; then
174 debug-print "1.1 EXTRAVERSION:${EXTRAVERSION}"
147 EXTRAVERSION="${EXTRAVERSION}-${PN/-*}${PR/r}" 175 EXTRAVERSION="${EXTRAVERSION}-${PN/-*}${PR/r}"
148 elif [[ "${ETYPE}" = "sources" ]]; then 176 elif [[ "${ETYPE}" = "sources" ]]; then
177 debug-print "1.2 EXTRAVERSION:${EXTRAVERSION}"
149 # For some sources we want to use the PV in the extra version 178 # For some sources we want to use the PV in the extra version
150 # This is because upstream releases with a completely different 179 # This is because upstream releases with a completely different
151 # versioning scheme. 180 # versioning scheme.
152 case ${PN/-*} in 181 case ${PN/-*} in
153 wolk) K_USEPV=1;; 182 wolk) K_USEPV=1;;
154 vserver) K_USEPV=1;; 183 vserver) K_USEPV=1;;
155 esac 184 esac
156 185
157 [[ -z ${K_NOUSENAME} ]] && EXTRAVERSION="${EXTRAVERSION}-${PN/-*}" 186 [[ -z "${K_NOUSENAME}" ]] && EXTRAVERSION="${EXTRAVERSION}-${PN/-*}"
158 [[ -n ${K_USEPV} ]] && EXTRAVERSION="${EXTRAVERSION}-${PV//_/-}" 187 [[ -n "${K_USEPV}" ]] && EXTRAVERSION="${EXTRAVERSION}-${PV//_/-}"
159 [[ -n ${PR//r0} ]] && EXTRAVERSION="${EXTRAVERSION}-${PR}" 188 [[ -n "${PR//r0}" ]] && EXTRAVERSION="${EXTRAVERSION}-${PR}"
160 fi 189 fi
190 debug-print "2 EXTRAVERSION:${EXTRAVERSION}"
161 191
162 # The only messing around which should actually effect this is for KV_EXTRA 192 # 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 193 # 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 194 # KV_FULL evaluates to MAJ.MIN.PAT.EXT.EXT after EXTRAVERSION
165 if [[ -n ${KV_EXTRA} ]]; then 195 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 232 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" 233 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" 234 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 235 fi
206 236
237 debug-print-kernel2-variables
238
207 handle_genpatches 239 handle_genpatches
208} 240}
209 241
210kernel_is() { 242kernel_is() {
243 # ALL of these should be set before we can safely continue this function.
244 # some of the sources have in the past had only one set.
245 local v n=0
246 for v in OKV KV_{MAJOR,MINOR,PATCH} ; do [[ -z ${!v} ]] && n=1 ; done
211 [[ -z ${OKV} ]] && detect_version 247 [[ $n -eq 1 ]] && detect_version
248 unset v n
249
250 # Now we can continue
212 local operator test value x=0 y=0 z=0 251 local operator test value x=0 y=0 z=0
213 252
214 case ${1} in 253 case ${1} in
215 lt) operator="-lt"; shift;; 254 lt) operator="-lt"; shift;;
216 gt) operator="-gt"; shift;; 255 gt) operator="-gt"; shift;;
248} 287}
249 288
250# Capture the sources type and set DEPENDs 289# Capture the sources type and set DEPENDs
251if [[ ${ETYPE} == sources ]]; then 290if [[ ${ETYPE} == sources ]]; then
252 DEPEND="!build? ( sys-apps/sed 291 DEPEND="!build? ( sys-apps/sed
253 >=sys-devel/binutils-2.11.90.0.31 ) 292 >=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 293 RDEPEND="!build? ( >=sys-libs/ncurses-5.2
257 sys-devel/make ) 294 sys-devel/make )"
258 virtual/dev-manager" 295 PDEPEND="!build? ( virtual/dev-manager )"
259 296
260 PROVIDE="virtual/linux-sources" 297 PROVIDE="virtual/linux-sources"
261 kernel_is gt 2 4 && PROVIDE="${PROVIDE} virtual/alsa" 298 kernel_is gt 2 4 && PROVIDE="${PROVIDE} virtual/alsa"
262 299
263 SLOT="${PVR}" 300 SLOT="${PVR}"
264 DESCRIPTION="Sources for the ${KV_MAJOR}.${KV_MINOR} linux kernel" 301 DESCRIPTION="Sources for the ${KV_MAJOR}.${KV_MINOR} linux kernel"
265 IUSE="symlink build doc" 302 IUSE="symlink build"
266elif [[ ${ETYPE} == headers ]]; then 303elif [[ ${ETYPE} == headers ]]; then
267 DESCRIPTION="Linux system headers" 304 DESCRIPTION="Linux system headers"
268 IUSE="" 305
306 # Since we should NOT honour KBUILD_OUTPUT in headers
307 # lets unset it here.
308 unset KBUILD_OUTPUT
269 309
270 if [[ ${CTARGET} = ${CHOST} ]]; then 310 if [[ ${CTARGET} = ${CHOST} ]]; then
271 DEPEND="!virtual/os-headers" 311 DEPEND="!virtual/os-headers"
272 PROVIDE="virtual/os-headers" 312 PROVIDE="virtual/os-headers"
273 SLOT="0" 313 SLOT="0"
282# Cross-compile support functions 322# Cross-compile support functions
283#============================================================== 323#==============================================================
284kernel_header_destdir() { 324kernel_header_destdir() {
285 [[ ${CTARGET} == ${CHOST} ]] \ 325 [[ ${CTARGET} == ${CHOST} ]] \
286 && echo /usr/include \ 326 && echo /usr/include \
287 || echo /usr/${CTARGET}/include 327 || echo /usr/${CTARGET}/usr/include
288} 328}
289 329
290cross_pre_c_headers() { 330cross_pre_c_headers() {
291 [[ -z ${_E_CROSS_HEADERS_ONLY} ]] && return 1 331 use crosscompile_opts_headers-only && [[ ${CHOST} != ${CTARGET} ]]
292 [[ ${CHOST} == ${CTARGET} ]] && return 1
293 return 0
294} 332}
295 333
296env_setup_xmakeopts() { 334env_setup_xmakeopts() {
297 # Kernel ARCH != portage ARCH 335 # Kernel ARCH != portage ARCH
298 export KARCH=$(tc-arch-kernel) 336 export KARCH=$(tc-arch-kernel)
309} 347}
310 348
311# Unpack functions 349# Unpack functions
312#============================================================== 350#==============================================================
313unpack_2_4() { 351unpack_2_4() {
314 env_setup_xmakeopts
315
316 cd "${S}"
317 # this file is required for other things to build properly, 352 # this file is required for other things to build properly,
318 # so we autogenerate it 353 # so we autogenerate it
319 make -s mrproper ${xmakeopts} || die "make mrproper failed" 354 make -s mrproper ${xmakeopts} || die "make mrproper failed"
320 make -s symlinks ${xmakeopts} || die "make symlinks failed" 355 make -s symlinks ${xmakeopts} || die "make symlinks failed"
321 make -s include/linux/version.h ${xmakeopts} || die "make include/linux/version.h failed" 356 make -s include/linux/version.h ${xmakeopts} || die "make include/linux/version.h failed"
322 echo ">>> version.h compiled successfully." 357 echo ">>> version.h compiled successfully."
323} 358}
324 359
325unpack_2_6() { 360unpack_2_6() {
326 env_setup_xmakeopts
327
328 cd "${S}"
329 # this file is required for other things to build properly, so we 361 # this file is required for other things to build properly, so we
330 # autogenerate it ... touch .config to keep version.h build from 362 # autogenerate it ... generate a .config to keep version.h build from
331 # spitting out an annoying warning 363 # spitting out an annoying warning
332 make -s mrproper ${xmakeopts} || die "make mrproper failed" 364 make -s mrproper ${xmakeopts} 2>/dev/null \
365 || die "make mrproper failed"
366
367 # quick fix for bug #132152 which triggers when it cannot include linux
368 # headers (ie, we have not installed it yet)
369 if ! make -s defconfig ${xmakeopts} &>/dev/null 2>&1 ; then
333 touch .config 370 touch .config
334 make -s include/linux/version.h ${xmakeopts} || die "make include/linux/version.h failed" 371 eerror "make defconfig failed."
335 rm -f .config 372 eerror "assuming you dont have any headers installed yet and continuing"
373 epause 5
374 fi
375
376 make -s include/linux/version.h ${xmakeopts} 2>/dev/null \
377 || die "make include/linux/version.h failed"
378 rm -f .config >/dev/null
336} 379}
337 380
338universal_unpack() { 381universal_unpack() {
339 cd ${WORKDIR} 382 cd "${WORKDIR}"
340 unpack linux-${OKV}.tar.bz2 383 unpack linux-${OKV}.tar.bz2
384 if [[ -d "linux" ]]; then
385 mv linux linux-${KV_FULL} \
386 || die "Unable to move source tree to ${KV_FULL}."
341 if [[ "${OKV}" != "${KV_FULL}" ]]; then 387 elif [[ "${OKV}" != "${KV_FULL}" ]]; then
342 mv linux-${OKV} linux-${KV_FULL} \ 388 mv linux-${OKV} linux-${KV_FULL} \
343 || die "Unable to move source tree to ${KV_FULL}." 389 || die "Unable to move source tree to ${KV_FULL}."
344 fi 390 fi
345 cd "${S}" 391 cd "${S}"
346 392
347 # remove all backup files 393 # remove all backup files
348 find . -iname "*~" -exec rm {} \; 2> /dev/null 394 find . -iname "*~" -exec rm {} \; 2> /dev/null
349 395
350 # fix a problem on ppc where TOUT writes to /usr/src/linux breaking sandbox 396 # fix a problem on ppc where TOUT writes to /usr/src/linux breaking sandbox
351 use ppc && \ 397 # only do this for kernel < 2.6.27 since this file does not exist in later
398 # kernels
399 if [[ ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} < 2.6.27 ]]
400 then
401 sed -i \
352 sed -ie 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \ 402 -e 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
353 "${S}"/arch/ppc/Makefile 403 "${S}"/arch/ppc/Makefile
404 else
405 sed -i \
406 -e 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
407 "${S}"/arch/powerpc/Makefile
408 fi
354} 409}
355 410
356unpack_set_extraversion() { 411unpack_set_extraversion() {
357 cd "${S}" 412 cd "${S}"
358 sed -i -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile 413 sed -i -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile
359 cd ${OLDPWD} 414 cd "${OLDPWD}"
360} 415}
361 416
362# Should be done after patches have been applied 417# Should be done after patches have been applied
363# Otherwise patches that modify the same area of Makefile will fail 418# Otherwise patches that modify the same area of Makefile will fail
364unpack_fix_install_path() { 419unpack_fix_install_path() {
365 cd "${S}" 420 cd "${S}"
366 sed -i -e 's:#export\tINSTALL_PATH:export\tINSTALL_PATH:' Makefile 421 sed -i -e 's:#export\tINSTALL_PATH:export\tINSTALL_PATH:' Makefile
367} 422}
368 423
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 424# Compile Functions
378#============================================================== 425#==============================================================
379compile_headers() { 426compile_headers() {
380 env_setup_xmakeopts 427 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 428
386 # if we couldnt obtain HOSTCFLAGS from the Makefile, 429 # if we couldnt obtain HOSTCFLAGS from the Makefile,
387 # then set it to something sane 430 # then set it to something sane
388 local HOSTCFLAGS=$(getfilevar HOSTCFLAGS "${S}"/Makefile) 431 local HOSTCFLAGS=$(getfilevar HOSTCFLAGS "${S}"/Makefile)
389 HOSTCFLAGS=${HOSTCFLAGS:--Wall -Wstrict-prototypes -O2 -fomit-frame-pointer} 432 HOSTCFLAGS=${HOSTCFLAGS:--Wall -Wstrict-prototypes -O2 -fomit-frame-pointer}
391 if kernel_is 2 4; then 434 if kernel_is 2 4; then
392 yes "" | make oldconfig ${xmakeopts} 435 yes "" | make oldconfig ${xmakeopts}
393 echo ">>> make oldconfig complete" 436 echo ">>> make oldconfig complete"
394 make dep ${xmakeopts} 437 make dep ${xmakeopts}
395 elif kernel_is 2 6; then 438 elif kernel_is 2 6; then
439 # 2.6.18 introduces headers_install which means we dont need any
440 # of this crap anymore :D
441 kernel_is ge 2 6 18 && return 0
442
396 # autoconf.h isnt generated unless it already exists. plus, we have 443 # autoconf.h isnt generated unless it already exists. plus, we have
397 # no guarantee that any headers are installed on the system... 444 # no guarantee that any headers are installed on the system...
398 [[ -f ${ROOT}/usr/include/linux/autoconf.h ]] \ 445 [[ -f ${ROOT}/usr/include/linux/autoconf.h ]] \
399 || touch include/linux/autoconf.h 446 || touch include/linux/autoconf.h
400 447
401 # if K_DEFCONFIG isn't set, force to "defconfig" 448 # if K_DEFCONFIG isn't set, force to "defconfig"
402 # needed by mips 449 # needed by mips
403 if [[ -z ${K_DEFCONFIG} ]]; then 450 if [[ -z ${K_DEFCONFIG} ]]; then
451 if [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.16) ]]; then
452 case ${CTARGET} in
453 powerpc64*) K_DEFCONFIG="ppc64_defconfig";;
454 powerpc*) K_DEFCONFIG="pmac32_defconfig";;
455 *) K_DEFCONFIG="defconfig";;
456 esac
457 else
404 K_DEFCONFIG="defconfig" 458 K_DEFCONFIG="defconfig"
459 fi
405 fi 460 fi
406 461
407 # if there arent any installed headers, then there also isnt an asm 462 # 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 463 # symlink in /usr/include/, and make defconfig will fail, so we have
409 # to force an include path with $S. 464 # to force an include path with $S.
410 HOSTCFLAGS="${HOSTCFLAGS} -I${S}/include/" 465 HOSTCFLAGS="${HOSTCFLAGS} -I${S}/include/"
411 ln -sf asm-${KARCH} "${S}"/include/asm 466 ln -sf asm-${KARCH} "${S}"/include/asm
412 cross_pre_c_headers && return 0 467 cross_pre_c_headers && return 0
413 468
414 make ${K_DEFCONFIG} HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "defconfig failed" 469 make ${K_DEFCONFIG} HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "defconfig failed (${K_DEFCONFIG})"
470 if compile_headers_tweak_config ; then
471 yes "" | make oldconfig HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "2nd oldconfig failed"
472 fi
415 make prepare HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed" 473 make prepare HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed"
416 make prepare-all HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed" 474 make prepare-all HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed"
417 fi 475 fi
418} 476}
419 477
420compile_manpages() { 478compile_headers_tweak_config() {
421 einfo "Making manpages ..." 479 # some targets can be very very picky, so let's finesse the
422 env -u ARCH make mandocs 480 # .config based upon any info we may have
481 case ${CTARGET} in
482 sh*)
483 sed -i '/CONFIG_CPU_SH/d' .config
484 echo "CONFIG_CPU_SH${CTARGET:2:1}=y" >> .config
485 return 0;;
486 esac
487
488 # no changes, so lets do nothing
489 return 1
423} 490}
424 491
425# install functions 492# install functions
426#============================================================== 493#==============================================================
427install_universal() { 494install_universal() {
428 #fix silly permissions in tarball 495 #fix silly permissions in tarball
429 cd ${WORKDIR} 496 cd "${WORKDIR}"
430 chown -R root:root * 497 chown -R root:0 * >& /dev/null
431 chmod -R a+r-w+X,u+w * 498 chmod -R a+r-w+X,u+w *
432 cd ${OLDPWD} 499 cd ${OLDPWD}
433} 500}
434 501
435install_headers() { 502install_headers() {
436 local ddir=$(kernel_header_destdir) 503 local ddir=$(kernel_header_destdir)
437 504
505 # 2.6.18 introduces headers_install which means we dont need any
506 # of this crap anymore :D
507 if kernel_is ge 2 6 18 ; then
508 env_setup_xmakeopts
509 emake headers_install INSTALL_HDR_PATH="${D}"/${ddir}/.. ${xmakeopts} || die
510
511 # let other packages install some of these headers
512 rm -rf "${D}"/${ddir}/sound #alsa-headers
513 rm -rf "${D}"/${ddir}/scsi #glibc/uclibc/etc...
514 return 0
515 fi
516
517 # Do not use "linux/*" as that can cause problems with very long
518 # $S values where the cmdline to cp is too long
438 cd "${S}" 519 cd "${S}"
439 dodir ${ddir}/linux 520 dodir ${ddir}/linux
440 cp -ax "${S}"/include/linux/* ${D}/${ddir}/linux 521 cp -pPR "${S}"/include/linux "${D}"/${ddir}/ || die
441 rm -rf ${D}/${ddir}/linux/modules 522 rm -rf "${D}"/${ddir}/linux/modules
442 523
443 # Handle multilib headers and crap 524 # Handle multilib headers and crap
444 local multi_dirs="" multi_defs="" 525 local multi_dirs="" multi_defs=""
445 case $(tc-arch-kernel) in 526 case $(tc-arch-kernel) in
446 sparc64) 527 sparc64)
459 multi_dirs="s390 s390x" 540 multi_dirs="s390 s390x"
460 multi_defs="!__s390x__ __s390x__" 541 multi_defs="!__s390x__ __s390x__"
461 ;; 542 ;;
462 arm) 543 arm)
463 dodir ${ddir}/asm 544 dodir ${ddir}/asm
464 cp -ax "${S}"/include/asm/* "${D}"/${ddir}/asm 545 cp -pPR "${S}"/include/asm/* "${D}"/${ddir}/asm
465 [[ ! -e ${D}/${ddir}/asm/arch ]] && ln -sf arch-ebsa285 "${D}"/${ddir}/asm/arch 546 [[ ! -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 547 [[ ! -e ${D}/${ddir}/asm/proc ]] && ln -sf proc-armv "${D}"/${ddir}/asm/proc
467 ;; 548 ;;
468 powerpc) 549 powerpc)
469 dodir ${ddir}/asm 550 dodir ${ddir}/asm
470 cp -ax "${S}"/include/asm/* ${D}/${ddir}/asm 551 cp -pPR "${S}"/include/asm/* "${D}"/${ddir}/asm
471 if [[ -e "${S}"/include/asm-ppc ]] ; then 552 if [[ -e "${S}"/include/asm-ppc ]] ; then
472 dodir ${ddir}/asm-ppc 553 dodir ${ddir}/asm-ppc
473 cp -ax "${S}"/include/asm-ppc/* ${D}/${ddir}/asm-ppc 554 cp -pPR "${S}"/include/asm-ppc/* "${D}"/${ddir}/asm-ppc
474 fi 555 fi
475 ;; 556 ;;
476 *) 557 *)
477 dodir ${ddir}/asm 558 dodir ${ddir}/asm
478 cp -ax "${S}"/include/asm/* ${D}/${ddir}/asm 559 cp -pPR "${S}"/include/asm/* "${D}"/${ddir}/asm
479 ;; 560 ;;
480 esac 561 esac
481 if [[ -n ${multi_dirs} ]] ; then 562 if [[ -n ${multi_dirs} ]] ; then
482 local d ml_inc="" 563 local d ml_inc=""
483 for d in ${multi_dirs} ; do 564 for d in ${multi_dirs} ; do
484 dodir ${ddir}/asm-${d} 565 dodir ${ddir}/asm-${d}
485 cp -ax "${S}"/include/asm-${d}/* ${D}/${ddir}/asm-${d}/ || die "cp asm-${d} failed" 566 cp -pPR "${S}"/include/asm-${d}/* "${D}"/${ddir}/asm-${d}/ || die "cp asm-${d} failed"
486 567
487 ml_inc="${ml_inc} ${multi_defs%% *}:${ddir}/asm-${d}" 568 ml_inc="${ml_inc} ${multi_defs%% *}:${ddir}/asm-${d}"
488 multi_defs=${multi_defs#* } 569 multi_defs=${multi_defs#* }
489 done 570 done
490 create_ml_includes ${ddir}/asm ${ml_inc} 571 create_ml_includes ${ddir}/asm ${ml_inc}
491 fi 572 fi
492 573
493 if kernel_is 2 6; then 574 if kernel_is 2 6; then
494 dodir ${ddir}/asm-generic 575 dodir ${ddir}/asm-generic
495 cp -ax "${S}"/include/asm-generic/* ${D}/${ddir}/asm-generic 576 cp -pPR "${S}"/include/asm-generic/* "${D}"/${ddir}/asm-generic
496 fi 577 fi
497 578
498 # clean up 579 # clean up
499 find "${D}" -name '*.orig' -exec rm -f {} \; 580 find "${D}" -name '*.orig' -exec rm -f {} \;
500 581
501 cd ${OLDPWD} 582 cd ${OLDPWD}
502} 583}
503 584
504install_sources() { 585install_sources() {
505 local doc docs file 586 local file
506 587
507 cd "${S}" 588 cd "${S}"
508 dodir /usr/src 589 dodir /usr/src
509 echo ">>> Copying sources ..." 590 echo ">>> Copying sources ..."
510 591
524 [[ -f ${FILESDIR}/../ChangeLog ]] && \ 605 [[ -f ${FILESDIR}/../ChangeLog ]] && \
525 echo "Please check the ebuild ChangeLog for more details." \ 606 echo "Please check the ebuild ChangeLog for more details." \
526 > "${S}"/patches.txt 607 > "${S}"/patches.txt
527 fi 608 fi
528 609
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 610 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} 611}
552 612
553# pkg_preinst functions 613# pkg_preinst functions
554#============================================================== 614#==============================================================
555preinst_headers() { 615preinst_headers() {
565 625
566 # if we have USE=symlink, then force K_SYMLINK=1 626 # if we have USE=symlink, then force K_SYMLINK=1
567 use symlink && K_SYMLINK=1 627 use symlink && K_SYMLINK=1
568 628
569 # if we are to forcably symlink, delete it if it already exists first. 629 # if we are to forcably symlink, delete it if it already exists first.
570 if [[ -n ${K_SYMLINK} ]]; then 630 if [[ ${K_SYMLINK} > 0 ]]; then
571 [[ -h ${ROOT}usr/src/linux ]] && rm ${ROOT}usr/src/linux 631 [[ -h ${ROOT}usr/src/linux ]] && rm ${ROOT}usr/src/linux
572 MAKELINK=1 632 MAKELINK=1
573 fi 633 fi
574 634
575 # if the link doesnt exist, lets create it 635 # if the link doesnt exist, lets create it
576 [[ ! -h ${ROOT}usr/src/linux ]] && MAKELINK=1 636 [[ ! -h ${ROOT}usr/src/linux ]] && MAKELINK=1
577 637
578 if [[ ${MAKELINK} == 1 ]]; then 638 if [[ ${MAKELINK} == 1 ]]; then
579 cd ${ROOT}usr/src 639 cd "${ROOT}"usr/src
580 ln -sf linux-${KV_FULL} linux 640 ln -sf linux-${KV_FULL} linux
581 cd ${OLDPWD} 641 cd ${OLDPWD}
582 fi 642 fi
583 643
584 # Don't forget to make directory for sysfs 644 # Don't forget to make directory for sysfs
585 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys 645 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys
586 646
587 echo 647 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" 648 elog "If you are upgrading from a previous kernel, you may be interested"
596 einfo "in the following documents:" 649 elog "in the following document:"
597 einfo " - General upgrade guide: http://www.gentoo.org/doc/en/kernel-upgrade.xml" 650 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 651 echo
605 652
606 # if K_EXTRAEINFO is set then lets display it now 653 # if K_EXTRAEINFO is set then lets display it now
607 if [[ -n ${K_EXTRAEINFO} ]]; then 654 if [[ -n ${K_EXTRAEINFO} ]]; then
608 echo ${K_EXTRAEINFO} | fmt | 655 echo ${K_EXTRAEINFO} | fmt |
609 while read -s ELINE; do einfo "${ELINE}"; done 656 while read -s ELINE; do einfo "${ELINE}"; done
610 fi 657 fi
611 658
659 # if K_EXTRAELOG is set then lets display it now
660 if [[ -n ${K_EXTRAELOG} ]]; then
661 echo ${K_EXTRAELOG} | fmt |
662 while read -s ELINE; do elog "${ELINE}"; done
663 fi
664
612 # if K_EXTRAEWARN is set then lets display it now 665 # if K_EXTRAEWARN is set then lets display it now
613 if [[ -n ${K_EXTRAEWARN} ]]; then 666 if [[ -n ${K_EXTRAEWARN} ]]; then
614 echo ${K_EXTRAEWARN} | fmt | 667 echo ${K_EXTRAEWARN} | fmt |
615 while read -s ELINE; do ewarn "${ELINE}"; done 668 while read -s ELINE; do ewarn "${ELINE}"; done
616 fi 669 fi
670
671 # optionally display security unsupported message
672 if [[ -n ${K_SECURITY_UNSUPPORTED} ]]; then
673 echo
674 ewarn "${PN} is UNSUPPORTED by Gentoo Security."
675 ewarn "This means that it is likely to be vulnerable to recent security issues."
676 ewarn "For specific information on why this kernel is unsupported, please read:"
677 ewarn "http://www.gentoo.org/proj/en/security/kernel.xml"
678 fi
679
680 # warn sparc users that they need to do cross-compiling with >= 2.6.25(bug #214765)
681 KV_MAJOR=$(get_version_component_range 1 ${OKV})
682 KV_MINOR=$(get_version_component_range 2 ${OKV})
683 KV_PATCH=$(get_version_component_range 3 ${OKV})
684 if [[ "$(tc-arch)" = "sparc" ]] \
685 && [[ ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} > 2.6.24 ]]
686 then
687 echo
688 elog "NOTE: Since 2.6.25 the kernel Makefile has changed in a way that"
689 elog "you now need to do"
690 elog " make CROSS_COMPILE=sparc64-unknown-linux-gnu-"
691 elog "instead of just"
692 elog " make"
693 elog "to compile the kernel. For more information please browse to"
694 elog "https://bugs.gentoo.org/show_bug.cgi?id=214765"
695 echo
696 fi
617} 697}
618 698
619postinst_headers() { 699postinst_headers() {
620 einfo "Kernel headers are usually only used when recompiling glibc, as such, following the installation" 700 elog "Kernel headers are usually only used when recompiling your system libc, as"
621 einfo "of newer headers, it is advised that you re-merge glibc as follows:" 701 elog "such, following the installation of newer headers, it is advised that you"
622 einfo "emerge glibc" 702 elog "re-merge your system libc."
623 einfo "Failure to do so will cause glibc to not make use of newer features present in the updated kernel" 703 elog "Failure to do so will cause your system libc to not make use of newer"
624 einfo "headers." 704 elog "features present in the updated kernel headers."
625} 705}
626 706
627# pkg_setup functions 707# pkg_setup functions
628#============================================================== 708#==============================================================
629setup_headers() { 709setup_headers() {
643 723
644# unipatch 724# unipatch
645#============================================================== 725#==============================================================
646unipatch() { 726unipatch() {
647 local i x y z extention PIPE_CMD UNIPATCH_DROP KPATCH_DIR PATCH_DEPTH ELINE 727 local i x y z extention PIPE_CMD UNIPATCH_DROP KPATCH_DIR PATCH_DEPTH ELINE
648 local STRICT_COUNT PATCH_LEVEL myLC_ALL myLANG 728 local STRICT_COUNT PATCH_LEVEL myLC_ALL myLANG extglob_bak
649 729
650 # set to a standard locale to ensure sorts are ordered properly. 730 # set to a standard locale to ensure sorts are ordered properly.
651 myLC_ALL="${LC_ALL}" 731 myLC_ALL="${LC_ALL}"
652 myLANG="${LANG}" 732 myLANG="${LANG}"
653 LC_ALL="C" 733 LC_ALL="C"
655 735
656 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/" 736 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/"
657 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR} 737 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR}
658 738
659 # We're gonna need it when doing patches with a predefined patchlevel 739 # We're gonna need it when doing patches with a predefined patchlevel
740 extglob_bak=$(shopt -p extglob)
660 shopt -s extglob 741 shopt -s extglob
661 742
662 # This function will unpack all passed tarballs, add any passed patches, and remove any passed patchnumbers 743 # 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 744 # usage can be either via an env var or by params
664 # although due to the nature we pass this within this eclass 745 # although due to the nature we pass this within this eclass
666 # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}" 747 # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}"
667 UNIPATCH_LIST="${@}" 748 UNIPATCH_LIST="${@}"
668 749
669 #unpack any passed tarballs 750 #unpack any passed tarballs
670 for i in ${UNIPATCH_LIST}; do 751 for i in ${UNIPATCH_LIST}; do
671 if [ -n "$(echo ${i} | grep -e "\.tar" -e "\.tbz" -e "\.tgz")" ]; then 752 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 753 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
684 unset z 754 unset z
685 STRICT_COUNT=$((10#${STRICT_COUNT} + 1)) 755 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
686 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++)); 756 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
687 do z="${z}0"; 757 do z="${z}0";
688 done 758 done
689 PATCH_ORDER="${z}${STRICT_COUNT}" 759 PATCH_ORDER="${z}${STRICT_COUNT}"
690 760
691 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/ 761 mkdir -p "${KPATCH_DIR}/${PATCH_ORDER}"
692 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR}/${PATCH_ORDER}/ 1>/dev/null 762 pushd "${KPATCH_DIR}/${PATCH_ORDER}" >/dev/null
763 unpack ${i##*/}
764 popd >/dev/null
693 else 765 else
694 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR} 1>/dev/null 766 pushd "${KPATCH_DIR}" >/dev/null
767 unpack ${i##*/}
768 popd >/dev/null
695 fi 769 fi
696 770
697 if [ $? == 0 ]; then
698 einfo "${i/*\//} unpacked"
699 [ -n "$(echo ${i} | grep ':')" ] && echo ">>> Strict patch levels not currently supported for tarballed patchsets" 771 [[ ${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 772 else
705 extention=${i/*./} 773 extention=${i/*./}
706 extention=${extention/:*/} 774 extention=${extention/:*/}
707 PIPE_CMD="" 775 PIPE_CMD=""
708 case ${extention} in 776 case ${extention} in
751 KPATCH_DIR="" 819 KPATCH_DIR=""
752 for i in $(find ${x} -type d | sort -n); do 820 for i in $(find ${x} -type d | sort -n); do
753 KPATCH_DIR="${KPATCH_DIR} ${i}" 821 KPATCH_DIR="${KPATCH_DIR} ${i}"
754 done 822 done
755 823
824 # do not apply fbcondecor patch to sparc/sparc64 as it breaks boot
825 # bug #272676
826 if [[ "$(tc-arch)" = "sparc" || "$(tc-arch)" = "sparc64" ]]; then
827 if [[ ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} > 2.6.28 ]]; then
828 UNIPATCH_DROP="${UNIPATCH_DROP} *_fbcondecor-0.9.6.patch"
829 echo
830 ewarn "fbcondecor currently prevents sparc/sparc64 from booting"
831 ewarn "for kernel versions >= 2.6.29. Removing fbcondecor patch."
832 ewarn "See https://bugs.gentoo.org/show_bug.cgi?id=272676 for details"
833 echo
834 fi
835 fi
836
756 #so now lets get rid of the patchno's we want to exclude 837 #so now lets get rid of the patchno's we want to exclude
757 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}" 838 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}"
758 for i in ${UNIPATCH_DROP}; do 839 for i in ${UNIPATCH_DROP}; do
759 ebegin "Excluding Patch #${i}" 840 ebegin "Excluding Patch #${i}"
760 for x in ${KPATCH_DIR}; do rm -f ${x}/${i}* 2>/dev/null; done 841 for x in ${KPATCH_DIR}; do rm -f ${x}/${i}* 2>/dev/null; done
773 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi 854 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi
774 855
775 ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)" 856 ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)"
776 while [ ${PATCH_DEPTH} -lt 5 ]; do 857 while [ ${PATCH_DEPTH} -lt 5 ]; do
777 echo "Attempting Dry-run:" >> ${STDERR_T} 858 echo "Attempting Dry-run:" >> ${STDERR_T}
778 echo "cmd: patch -p${PATCH_DEPTH} --dry-run -f < ${i}" >> ${STDERR_T} 859 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i}" >> ${STDERR_T}
779 echo "=======================================================" >> ${STDERR_T} 860 echo "=======================================================" >> ${STDERR_T}
780 if [ $(patch -p${PATCH_DEPTH} --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then 861 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then
781 echo "Attempting patch:" > ${STDERR_T} 862 echo "Attempting patch:" > ${STDERR_T}
782 echo "cmd: patch -p${PATCH_DEPTH} -f < ${i}" >> ${STDERR_T} 863 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i}" >> ${STDERR_T}
783 echo "=======================================================" >> ${STDERR_T} 864 echo "=======================================================" >> ${STDERR_T}
784 if [ $(patch -p${PATCH_DEPTH} -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then 865 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then
785 eend 0 866 eend 0
786 rm ${STDERR_T} 867 rm ${STDERR_T}
787 break 868 break
788 else 869 else
789 eend 1 870 eend 1
807 # sit in KPATCH_DIR's. This is handled properly in the unipatch rewrite, 888 # 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. 889 # which is why I'm not taking too much time over this.
809 local tmp 890 local tmp
810 for i in ${UNIPATCH_DOCS}; do 891 for i in ${UNIPATCH_DOCS}; do
811 tmp="${tmp} ${i//*\/}" 892 tmp="${tmp} ${i//*\/}"
812 cp -f ${i} ${T}/ 893 cp -f ${i} "${T}"/
813 done 894 done
814 UNIPATCH_DOCS="${tmp}" 895 UNIPATCH_DOCS="${tmp}"
815 896
816 # clean up KPATCH_DIR's - fixes bug #53610 897 # clean up KPATCH_DIR's - fixes bug #53610
817 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done 898 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done
818 899
819 LC_ALL="${myLC_ALL}" 900 LC_ALL="${myLC_ALL}"
820 LANG="${myLANG}" 901 LANG="${myLANG}"
902 eval ${extglob_bak}
821} 903}
822 904
823# getfilevar accepts 2 vars as follows: 905# getfilevar accepts 2 vars as follows:
824# getfilevar <VARIABLE> <CONFIGFILE> 906# getfilevar <VARIABLE> <CONFIGFILE>
825# pulled from linux-info 907# pulled from linux-info
937 return 0 1019 return 0
938} 1020}
939 1021
940headers___fix() { 1022headers___fix() {
941 # Voodoo to partially fix broken upstream headers. 1023 # Voodoo to partially fix broken upstream headers.
942 # Issues with this function should go to plasmaroo. 1024 # note: do not put inline/asm/volatile together (breaks "inline asm volatile")
943 sed -i \ 1025 sed -i \
944 -e "s/\([ "$'\t'"]\)\(u\|s\)\(8\|16\|32\|64\)\([ "$'\t'"]\)/\1__\2\3\4/g;" \ 1026 -e '/^\#define.*_TYPES_H/{:loop n; bloop}' \
945 -e 's/ \(u\|s\)\(8\|16\|32\|64\)$/ __\1\2/g' \ 1027 -e 's:\<\([us]\(8\|16\|32\|64\)\)\>:__\1:g' \
946 -e 's/\([(, ]\)\(u\|s\)64\([, )]\)/\1__\264\3/g' \ 1028 -e "s/\([[:space:]]\)inline\([[:space:](]\)/\1__inline__\2/g" \
947 -e "s/^\(u\|s\)\(8\|16\|32\|64\)\([ "$'\t'"]\)/__\1\2\3/g;" \ 1029 -e "s/\([[:space:]]\)asm\([[:space:](]\)/\1__asm__\2/g" \
948 -e "s/ inline / __inline__ /g" \ 1030 -e "s/\([[:space:]]\)volatile\([[:space:](]\)/\1__volatile__\2/g" \
949 "$@" 1031 "$@"
950} 1032}
951 1033
952# common functions 1034# common functions
953#============================================================== 1035#==============================================================
954kernel-2_src_unpack() { 1036kernel-2_src_unpack() {
955 universal_unpack 1037 universal_unpack
1038 debug-print "Doing unipatch"
956 1039
957 [[ -n ${UNIPATCH_LIST} || -n ${UNIPATCH_LIST_DEFAULT} || -n ${UNIPATCH_LIST_GENPATCHES} ]] && \ 1040 [[ -n ${UNIPATCH_LIST} || -n ${UNIPATCH_LIST_DEFAULT} || -n ${UNIPATCH_LIST_GENPATCHES} ]] && \
958 unipatch "${UNIPATCH_LIST_DEFAULT} ${UNIPATCH_LIST_GENPATCHES} ${UNIPATCH_LIST}" 1041 unipatch "${UNIPATCH_LIST_DEFAULT} ${UNIPATCH_LIST_GENPATCHES} ${UNIPATCH_LIST}"
1042
1043 debug-print "Doing premake"
959 1044
960 # allow ebuilds to massage the source tree after patching but before 1045 # allow ebuilds to massage the source tree after patching but before
961 # we run misc `make` functions below 1046 # we run misc `make` functions below
962 [[ $(type -t kernel-2_hook_premake) == "function" ]] && kernel-2_hook_premake 1047 [[ $(type -t kernel-2_hook_premake) == "function" ]] && kernel-2_hook_premake
963 1048
1049 debug-print "Doing epatch_user"
1050 epatch_user
1051
1052 debug-print "Doing unpack_set_extraversion"
1053
964 [[ -z ${K_NOSETEXTRAVERSION} ]] && unpack_set_extraversion 1054 [[ -z ${K_NOSETEXTRAVERSION} ]] && unpack_set_extraversion
965 unpack_fix_docbook
966 unpack_fix_install_path 1055 unpack_fix_install_path
967 1056
1057 # Setup xmakeopts and cd into sourcetree.
1058 env_setup_xmakeopts
1059 cd "${S}"
1060
1061 # We dont need a version.h for anything other than headers
1062 # at least, I should hope we dont. If this causes problems
1063 # take out the if/fi block and inform me please.
1064 # unpack_2_6 should now be 2.6.17 safe anyways
1065 if [[ ${ETYPE} == headers ]]; then
968 kernel_is 2 4 && unpack_2_4 1066 kernel_is 2 4 && unpack_2_4
969 kernel_is 2 6 && unpack_2_6 1067 kernel_is 2 6 && unpack_2_6
1068 fi
970} 1069}
971 1070
972kernel-2_src_compile() { 1071kernel-2_src_compile() {
973 cd "${S}" 1072 cd "${S}"
974 [[ ${ETYPE} == headers ]] && compile_headers 1073 [[ ${ETYPE} == headers ]] && compile_headers
975 [[ ${ETYPE} == sources ]] && \
976 use doc && compile_manpages
977} 1074}
978 1075
979kernel-2_pkg_preinst() { 1076kernel-2_pkg_preinst() {
980 [[ ${ETYPE} == headers ]] && preinst_headers 1077 [[ ${ETYPE} == headers ]] && preinst_headers
981} 1078}
990 [[ ${ETYPE} == headers ]] && postinst_headers 1087 [[ ${ETYPE} == headers ]] && postinst_headers
991 [[ ${ETYPE} == sources ]] && postinst_sources 1088 [[ ${ETYPE} == sources ]] && postinst_sources
992} 1089}
993 1090
994kernel-2_pkg_setup() { 1091kernel-2_pkg_setup() {
1092 if kernel_is 2 4; then
1093 if [ "$( gcc-major-version )" -eq "4" ] ; then
1094 echo
1095 ewarn "Be warned !! >=sys-devel/gcc-4.0.0 isn't supported with linux-2.4!"
1096 ewarn "Either switch to another gcc-version (via gcc-config) or use a"
1097 ewarn "newer kernel that supports gcc-4."
1098 echo
1099 ewarn "Also be aware that bugreports about gcc-4 not working"
1100 ewarn "with linux-2.4 based ebuilds will be closed as INVALID!"
1101 echo
1102 epause 10
1103 fi
1104 fi
1105
1106 ABI="${KERNEL_ABI}"
995 [[ ${ETYPE} == headers ]] && setup_headers 1107 [[ ${ETYPE} == headers ]] && setup_headers
996 [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..." 1108 [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..."
997} 1109}

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

  ViewVC Help
Powered by ViewVC 1.1.20