/[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.12 Revision 1.151
1# Copyright 1999-2005 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/kernel-2.eclass,v 1.151 2005/11/02 00:01:05 vapier Exp $
4
1# kernel.eclass rewrite for a clean base regarding the 2.6 series of kernel 5# Description: kernel.eclass rewrite for a clean base regarding the 2.6
2# with back-compatibility for 2.4 6# series of kernel with back-compatibility for 2.4
3# 7#
4# Author: John Mylchreest <johnm@gentoo.org> 8# Maintainer: John Mylchreest <johnm@gentoo.org>
5# Copyright 2004 Gentoo Linux
6# 9#
7# Please direct your bugs to the current eclass maintainer :) 10# Please direct your bugs to the current eclass maintainer :)
8# thatll be: johnm
9 11
10# added functionality: 12# added functionality:
11# unipatch - a flexible, singular method to extract, add and remove patches. 13# unipatch - a flexible, singular method to extract, add and remove patches.
12 14
13# A Couple of env vars are available to effect usage of this eclass 15# A Couple of env vars are available to effect usage of this eclass
14# These are as follows: 16# These are as follows:
15# 17#
18# K_USEPV - When setting the EXTRAVERSION variable, it should
19# add PV to the end.
20# this is useful for thigns like wolk. IE:
21# EXTRAVERSION would be something like : -wolk-4.19-r1
16# K_NOSETEXTRAVERSION - if this is set then EXTRAVERSION will not be automatically set within the kernel Makefile 22# K_NOSETEXTRAVERSION - if this is set then EXTRAVERSION will not be
23# automatically set within the kernel Makefile
17# K_NOUSENAME - if this is set then EXTRAVERSION will not include the first part of ${PN} in EXTRAVERSION 24# K_NOUSENAME - if this is set then EXTRAVERSION will not include the
18# K_PREPATCHED - if the patchset is prepatched (ie: mm-sources, ck-sources, ac-sources) it will use PR (ie: -r5) as the patchset version for EXTRAVERSION 25# first part of ${PN} in EXTRAVERSION
26# K_PREPATCHED - if the patchset is prepatched (ie: mm-sources,
27# ck-sources, ac-sources) it will use PR (ie: -r5) as
28# the patchset version for
19# - and not use it as a true package revision 29# and not use it as a true package revision
20# K_EXTRAEINFO - this is a new-line seperated list of einfo displays in postinst and can be used to carry additional postinst messages 30# K_EXTRAEINFO - this is a new-line seperated list of einfo displays in
31# postinst and can be used to carry additional postinst
32# messages
21# K_EXTRAEWARN - same as K_EXTRAEINFO except ewarn's instead of einfo's 33# K_EXTRAEWARN - same as K_EXTRAEINFO except ewarn's instead of einfo's
34# K_SYMLINK - if this is set, then forcably create symlink anyway
35#
36# K_DEFCONFIG - Allow specifying a different defconfig target.
37# If length zero, defaults to "defconfig".
38# K_WANT_GENPATCHES - Apply genpatches to kernel source. Provide any
39# combination of "base" and "extras"
40# 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
42# my-sources-2.6.12.ebuild
22 43
23# H_SUPPORTEDARCH - this should be a space separated list of ARCH's which can be supported by the headers ebuild 44# H_SUPPORTEDARCH - this should be a space separated list of ARCH's which
45# can be supported by the headers ebuild
24 46
25# UNIPATCH_LIST - space delimetered list of patches to be applied to the kernel 47# UNIPATCH_LIST - space delimetered list of patches to be applied to the
48# kernel
49# UNIPATCH_EXCLUDE - an addition var to support exlusion based completely
50# on "<passedstring>*" and not "<passedno#>_*"
51# - this should _NOT_ be used from the ebuild as this is
52# reserved for end users passing excludes from the cli
26# UNIPATCH_DOCS - space delimemeted list of docs to be installed to the doc dir 53# UNIPATCH_DOCS - space delimemeted list of docs to be installed to
54# the doc dir
55# UNIPATCH_STRICTORDER - if this is set places patches into directories of
56# order, so they are applied in the order passed
27 57
28ECLASS="kernel-2" 58inherit toolchain-funcs versionator multilib
29EXPORT_FUNCTIONS src_unpack src_compile src_install pkg_preinst pkg_postinst 59EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install \
60 pkg_preinst pkg_postinst
30 61
62# 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.
64# I will remove it when I come up with something more reasonable.
65[[ ${PROFILE_ARCH} == 'ppc64' ]] && CHOST='powerpc64-unknown-linux-gnu'
66
67export CTARGET=${CTARGET:-${CHOST}}
68if [[ ${CTARGET} == ${CHOST} && ${CATEGORY/cross-} != ${CATEGORY} ]]; then
69 export CTARGET=${CATEGORY/cross-}
70fi
71
31HOMEPAGE="http://www.kernel.org/ http://www.gentoo.org/" 72HOMEPAGE="http://www.kernel.org/ http://www.gentoo.org/"
32LICENSE="GPL-2" 73LICENSE="GPL-2"
33IUSE="${IUSE} build"
34SLOT="${KV}"
35 74
75# set LINUX_HOSTCFLAGS if not already set
76[[ -z ${LINUX_HOSTCFLAGS} ]] && \
77 LINUX_HOSTCFLAGS="-Wall -Wstrict-prototypes -Os -fomit-frame-pointer -I${S}/include"
78
79#Eclass functions only from here onwards ...
80#==============================================================
81handle_genpatches() {
82 local tarball
83 [[ -z ${K_WANT_GENPATCHES} || -z ${K_GENPATCHES_VER} ]] && return -1
84
85 for i in ${K_WANT_GENPATCHES} ; do
86 tarball="genpatches-${OKV}-${K_GENPATCHES_VER}.${i}.tar.bz2"
87 GENPATCHES_URI="${GENPATCHES_URI} mirror://gentoo/${tarball}"
88 UNIPATCH_LIST_GENPATCHES="${UNIPATCH_LIST_GENPATCHES} ${DISTDIR}/${tarball}"
89 done
90}
91
92detect_version() {
93 # this function will detect and set
94 # - OKV: Original Kernel Version (2.6.0/2.6.0-test11)
95 # - KV: Kernel Version (2.6.0-gentoo/2.6.0-test11-gentoo-r1)
96 # - EXTRAVERSION: The additional version appended to OKV (-gentoo/-gentoo-r1)
97
98 if [[ -n ${KV_FULL} ]]; then
99 # we will set this for backwards compatibility.
100 KV=${KV_FULL}
101
102 # we know KV_FULL so lets stop here. but not without resetting S
103 S=${WORKDIR}/linux-${KV_FULL}
104 return
105 fi
106
107 # CKV is used as a comparison kernel version, which is used when
108 # PV doesnt reflect the genuine kernel version.
109 # this gets set to the portage style versioning. ie:
110 # CKV=2.6.11_rc4
111 CKV=${CKV:-${PV}}
112 OKV=${OKV:-${CKV}}
113 OKV=${OKV/_beta/-test}
114 OKV=${OKV/_rc/-rc}
115 OKV=${OKV/-r*}
116 OKV=${OKV/_p*}
117
118 KV_MAJOR=$(get_version_component_range 1 ${OKV})
119 KV_MINOR=$(get_version_component_range 2 ${OKV})
120 KV_PATCH=$(get_version_component_range 3 ${OKV})
121
122 if [[ ${KV_MAJOR}${KV_MINOR}${KV_PATCH} -ge 269 ]]; then
123 KV_EXTRA=$(get_version_component_range 4- ${OKV})
124 KV_EXTRA=${KV_EXTRA/[-_]*}
125 else
126 KV_PATCH=$(get_version_component_range 3- ${OKV})
127 fi
128 KV_PATCH=${KV_PATCH/[-_]*}
129
130 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
131
132 RELEASE=${CKV/${OKV}}
133 RELEASE=${RELEASE/_beta}
134 RELEASE=${RELEASE/_rc/-rc}
135 RELEASE=${RELEASE/_pre/-pre}
136 kernel_is ge 2 6 && RELEASE=${RELEASE/-pre/-bk}
137 RELEASETYPE=${RELEASE//[0-9]}
138
139 # Now we know that RELEASE is the -rc/-bk
140 # and RELEASETYPE is the same but with its numerics stripped
141 # we can work on better sorting EXTRAVERSION.
142 # first of all, we add the release
143 EXTRAVERSION="${RELEASE}"
144 [[ -n ${KV_EXTRA} ]] && EXTRAVERSION=".${KV_EXTRA}${EXTRAVERSION}"
145
146 if [[ -n ${K_PREPATCHED} ]]; then
147 EXTRAVERSION="${EXTRAVERSION}-${PN/-*}${PR/r}"
148 elif [[ "${ETYPE}" = "sources" ]]; then
149 # For some sources we want to use the PV in the extra version
150 # This is because upstream releases with a completely different
151 # versioning scheme.
152 case ${PN/-*} in
153 wolk) K_USEPV=1;;
154 vserver) K_USEPV=1;;
155 esac
156
157 [[ -z ${K_NOUSENAME} ]] && EXTRAVERSION="${EXTRAVERSION}-${PN/-*}"
158 [[ -n ${K_USEPV} ]] && EXTRAVERSION="${EXTRAVERSION}-${PV//_/-}"
159 [[ -n ${PR//r0} ]] && EXTRAVERSION="${EXTRAVERSION}-${PR}"
160 fi
161
162 # 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
164 # KV_FULL evaluates to MAJ.MIN.PAT.EXT.EXT after EXTRAVERSION
165 if [[ -n ${KV_EXTRA} ]]; then
166 OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
167 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/patch-${CKV}.bz2
168 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}.tar.bz2"
169 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV}.bz2"
170 fi
171
172 # We need to set this using OKV, but we need to set it before we do any
173 # messing around with OKV based on RELEASETYPE
174 KV_FULL=${OKV}${EXTRAVERSION}
175
176 # we will set this for backwards compatibility.
177 S=${WORKDIR}/linux-${KV_FULL}
178 KV=${KV_FULL}
179
180 # -rc-bk pulls can be achieved by specifying CKV
181 # for example:
182 # CKV="2.6.11_rc3_pre2"
183 # will pull:
184 # linux-2.6.10.tar.bz2 & patch-2.6.11-rc3.bz2 & patch-2.6.11-rc3-bk2.bz2
185
186 if [[ ${RELEASETYPE} == -rc ]] || [[ ${RELEASETYPE} == -pre ]]; then
187 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))"
188 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${CKV//_/-}.bz2
189 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
190 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV//_/-}.bz2"
191 fi
192
193 if [[ ${RELEASETYPE} == -bk ]]; then
194 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${OKV}${RELEASE}.bz2
195 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
196 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${OKV}${RELEASE}.bz2"
197 fi
198
199 if [[ ${RELEASETYPE} == -rc-bk ]]; then
200 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))"
201 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2
202 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-bk*}.bz2
203 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/-bk*}.bz2 ${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2"
205 fi
206
207 handle_genpatches
208}
209
210kernel_is() {
211 [[ -z ${OKV} ]] && detect_version
212 local operator test value x=0 y=0 z=0
213
214 case ${1} in
215 lt) operator="-lt"; shift;;
216 gt) operator="-gt"; shift;;
217 le) operator="-le"; shift;;
218 ge) operator="-ge"; shift;;
219 eq) operator="-eq"; shift;;
220 *) operator="-eq";;
221 esac
222
223 for x in ${@}; do
224 for((y=0; y<$((3 - ${#x})); y++)); do value="${value}0"; done
225 value="${value}${x}"
226 z=$((${z} + 1))
227
228 case ${z} in
229 1) for((y=0; y<$((3 - ${#KV_MAJOR})); y++)); do test="${test}0"; done;
230 test="${test}${KV_MAJOR}";;
231 2) for((y=0; y<$((3 - ${#KV_MINOR})); y++)); do test="${test}0"; done;
232 test="${test}${KV_MINOR}";;
233 3) for((y=0; y<$((3 - ${#KV_PATCH})); y++)); do test="${test}0"; done;
234 test="${test}${KV_PATCH}";;
235 *) die "Error in kernel-2_kernel_is(): Too many parameters.";;
236 esac
237 done
238
239 [ ${test} ${operator} ${value} ] && return 0 || return 1
240}
241
242kernel_is_2_4() {
243 kernel_is 2 4
244}
245
246kernel_is_2_6() {
247 kernel_is 2 6 || kernel_is 2 5
248}
249
250kernel_header_destdir() {
251 [[ ${CTARGET} == ${CHOST} ]] \
252 && echo /usr/include \
253 || echo /usr/${CTARGET}/include
254}
255
36# capture the sources type and set depends 256# Capture the sources type and set DEPENDs
37if [ "${ETYPE}" == "sources" ] 257if [[ ${ETYPE} == sources ]]; then
38then
39 #console-tools is needed to solve the loadkeys fiasco; binutils version needed to avoid Athlon/PIII/SSE assembler bugs.
40 DEPEND="!build? ( sys-apps/sed 258 DEPEND="!build? ( sys-apps/sed
41 >=sys-devel/binutils-2.11.90.0.31 )" 259 >=sys-devel/binutils-2.11.90.0.31 )
42 260 doc? ( app-text/docbook-sgml-utils
43 RDEPEND="${DEPEND} 261 app-text/xmlto )"
44 !build? ( >=sys-libs/ncurses-5.2 262 RDEPEND="!build? ( >=sys-libs/ncurses-5.2
45 dev-lang/perl 263 sys-devel/make )
46 sys-apps/module-init-tools 264 virtual/dev-manager"
47 sys-devel/make )"
48 265
49 PROVIDE="virtual/linux-sources virtual/alsa" 266 PROVIDE="virtual/linux-sources"
267 kernel_is gt 2 4 && PROVIDE="${PROVIDE} virtual/alsa"
50 268
269 SLOT="${PVR}"
270 DESCRIPTION="Sources for the ${KV_MAJOR}.${KV_MINOR} linux kernel"
271 IUSE="symlink build doc"
51elif [ "${ETYPE}" == "headers" ] 272elif [[ ${ETYPE} == headers ]]; then
52then 273 DESCRIPTION="Linux system headers"
274 IUSE=""
275
276 if [[ ${CTARGET} = ${CHOST} ]]; then
277 DEPEND="!virtual/os-headers"
53 PROVIDE="virtual/kernel virtual/os-headers" 278 PROVIDE="virtual/os-headers"
279 SLOT="0"
280 else
281 SLOT="${CTARGET}"
282 fi
54else 283else
55 eerror "Unknown ETYPE=\"${ETYPE}\", must be either \"sources\" or \"headers\"" 284 eerror "Unknown ETYPE=\"${ETYPE}\", must be \"sources\" or \"headers\""
56 die 285 die "Unknown ETYPE=\"${ETYPE}\", must be \"sources\" or \"headers\""
57fi 286fi
58
59# Grab kernel version from KV
60KV_MAJOR=$(echo ${KV} | cut -d. -f1)
61KV_MINOR=$(echo ${KV} | cut -d. -f2)
62KV_PATCH=$(echo ${KV} | cut -d. -f3)
63KV_PATCH=${KV_PATCH/[-_]*/}
64
65# set LINUX_HOSTCFLAGS if not already set
66[ -z "$LINUX_HOSTCFLAGS" ] && LINUX_HOSTCFLAGS="-Wall -Wstrict-prototypes -Os -fomit-frame-pointer -I${S}/include"
67
68
69#eclass functions only from here onwards.
70#==============================================================
71kernel_is_2_4() {
72 [ ${KV_MAJOR} -eq 2 -a ${KV_MINOR} -eq 4 ] && return 0 || return 1
73}
74
75kernel_is_2_6() {
76 [ ${KV_MAJOR} -eq 2 -a ${KV_MINOR} -eq 5 -o ${KV_MINOR} -eq 6 ] && return 0 || return 1
77}
78
79 287
80# Unpack functions 288# Unpack functions
81#============================================================== 289#==============================================================
82unpack_2_4() { 290unpack_2_4() {
291 # Kernel ARCH != portage ARCH
292 local KARCH=$(tc-arch-kernel)
293
294 # When cross-compiling, we need to set the ARCH/CROSS_COMPILE
295 # variables properly or bad things happen !
296 local xmakeopts="ARCH=${KARCH}"
297 if [[ ${CTARGET} != ${CHOST} ]] ; then
298 xmakeopts="${xmakeopts} CROSS_COMPILE=${CTARGET}-"
299 elif type -p ${CHOST}-ar > /dev/null ; then
300 xmakeopts="${xmakeopts} CROSS_COMPILE=${CHOST}-"
301 fi
302
83 cd ${S} 303 cd "${S}"
84 # this file is required for other things to build properly, 304 # this file is required for other things to build properly,
85 # so we autogenerate it 305 # so we autogenerate it
86 make mrproper || die "make mrproper died" 306 make -s mrproper ${xmakeopts} || die "make mrproper failed"
307 make -s symlinks ${xmakeopts} || die "make symlinks failed"
87 make include/linux/version.h || die "make include/linux/version.h failed" 308 make -s include/linux/version.h ${xmakeopts} || die "make include/linux/version.h failed"
88 echo ">>> version.h compiled successfully." 309 echo ">>> version.h compiled successfully."
89} 310}
90 311
91universal_unpack() { 312universal_unpack() {
313 cd ${WORKDIR}
314 unpack linux-${OKV}.tar.bz2
315 if [[ "${OKV}" != "${KV_FULL}" ]]; then
316 mv linux-${OKV} linux-${KV_FULL} \
317 || die "Unable to move source tree to ${KV_FULL}."
318 fi
319 cd "${S}"
320
92 # remove all backup files 321 # remove all backup files
93 find . -iname "*~" -exec rm {} \; 2> /dev/null 322 find . -iname "*~" -exec rm {} \; 2> /dev/null
94 323
95 if [ -d "${S}/Documentation/DocBook" ] 324 # fix a problem on ppc where TOUT writes to /usr/src/linux breaking sandbox
96 then 325 use ppc && \
97 cd ${S}/Documentation/DocBook 326 sed -ie 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
98 sed -e "s:db2:docbook2:g" Makefile > Makefile.new \ 327 "${S}"/arch/ppc/Makefile
99 && mv Makefile.new Makefile
100 cd ${S}
101 fi
102} 328}
103 329
104unpack_set_extraversion() { 330unpack_set_extraversion() {
105 # Gentoo Linux uses /boot, so fix 'make install' to work properly and fix EXTRAVERSION
106 cd ${S} 331 cd "${S}"
107 mv Makefile Makefile.orig 332 sed -i -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile
333 cd ${OLDPWD}
334}
335
336# Should be done after patches have been applied
337# Otherwise patches that modify the same area of Makefile will fail
338unpack_fix_install_path() {
339 cd "${S}"
108 sed -e 's:#export\tINSTALL_PATH:export\tINSTALL_PATH:' \ 340 sed -i -e 's:#export\tINSTALL_PATH:export\tINSTALL_PATH:' Makefile
109 -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" \ 341}
110 Makefile.orig > Makefile 342
111 rm Makefile.orig 343unpack_fix_docbook() {
344 if [[ -d ${S}/Documentation/DocBook ]]; then
345 cd "${S}"/Documentation/DocBook
346 sed -ie "s:db2:docbook2:g" Makefile
347 cd ${OLDPWD}
348 fi
112} 349}
113 350
114# Compile Functions 351# Compile Functions
115#============================================================== 352#==============================================================
116compile_headers() { 353compile_headers() {
117 local MY_ARCH 354 # Since KBUILD_OUTPUT shouldnt be used when compiling headers, lets unset it
118 355 # if it exists.
119 MY_ARCH=${ARCH} 356 [[ -n ${KBUILD_OUTPUT} ]] && unset KBUILD_OUTPUT
120 unset ${ARCH} 357
358 # if we couldnt obtain HOSTCFLAGS from the Makefile,
359 # then set it to something sane
360 local HOSTCFLAGS=$(getfilevar HOSTCFLAGS "${S}"/Makefile)
361 HOSTCFLAGS=${HOSTCFLAGS:--Wall -Wstrict-prototypes -O2 -fomit-frame-pointer}
362
363 # Kernel ARCH != portage ARCH
364 local KARCH=$(tc-arch-kernel)
365
366 # When cross-compiling, we need to set the ARCH/CROSS_COMPILE
367 # variables properly or bad things happen !
368 local xmakeopts="ARCH=${KARCH}"
369 if [[ ${CTARGET} != ${CHOST} ]]; then
370 xmakeopts="${xmakeopts} CROSS_COMPILE=${CTARGET}-"
371 elif type -p ${CHOST}-ar; then
372 xmakeopts="${xmakeopts} CROSS_COMPILE=${CHOST}-"
373 fi
374
375 if kernel_is 2 4; then
121 yes "" | make oldconfig 376 yes "" | make oldconfig ${xmakeopts}
122 echo ">>> make oldconfig complete" 377 echo ">>> make oldconfig complete"
123 ARCH=${MY_ARCH} 378 use sparc && make dep ${xmakeopts}
379 elif kernel_is 2 6; then
380 # autoconf.h isnt generated unless it already exists. plus, we have
381 # no guarantee that any headers are installed on the system...
382 [[ -f ${ROOT}/usr/include/linux/autoconf.h ]] \
383 || touch include/linux/autoconf.h
384
385 # if K_DEFCONFIG isn't set, force to "defconfig"
386 # needed by mips
387 if [[ -z ${K_DEFCONFIG} ]]; then
388 K_DEFCONFIG="defconfig"
389 fi
390
391 # if there arent any installed headers, then there also isnt an asm
392 # symlink in /usr/include/, and make defconfig will fail, so we have
393 # to force an include path with $S.
394 HOSTCFLAGS="${HOSTCFLAGS} -I${S}/include/"
395 ln -sf asm-${KARCH} "${S}"/include/asm
396 make ${K_DEFCONFIG} HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "defconfig failed"
397 make prepare HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed"
398 make prepare-all HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed"
399 fi
400}
401
402compile_manpages() {
403 einfo "Making manpages ..."
404 env -u ARCH make mandocs
124} 405}
125 406
126# install functions 407# install functions
127#============================================================== 408#==============================================================
128install_universal() { 409install_universal() {
129 #fix silly permissions in tarball 410 #fix silly permissions in tarball
130 cd ${WORKDIR} 411 cd ${WORKDIR}
131 chown -R root:root * 412 chown -R root:root *
132 chmod -R a+r-w+X,u+w * 413 chmod -R a+r-w+X,u+w *
414 cd ${OLDPWD}
133} 415}
134 416
135install_headers() { 417install_headers() {
136 [ $(kernel_is_2_4) $? == 0 ] && unpack_2_4 418 local ddir=$(kernel_header_destdir)
137 [ $(kernel_is_2_6) $? == 0 ] && ln -sf ${S}/include/asm-${ARCH} ${S}/include/asm
138 419
139 cd ${S} 420 cd "${S}"
140 dodir /usr/include/linux 421 dodir ${ddir}/linux
141 cp -ax ${S}/include/linux/* ${D}/usr/include/linux 422 cp -ax "${S}"/include/linux/* ${D}/${ddir}/linux
142 rm -rf ${D}/usr/include/linux/modules 423 rm -rf ${D}/${ddir}/linux/modules
143 dodir /usr/include/asm 424
425 # Handle multilib headers and crap
426 local multi_dirs="" multi_defs=""
427 case $(tc-arch-kernel) in
428 sparc64)
429 multi_dirs="sparc sparc64"
430 multi_defs="!__arch64__ __arch64__"
431 ;;
432 x86_64)
433 multi_dirs="i386 x86_64"
434 multi_defs="__i386__ __x86_64__"
435 ;;
436 ppc64)
437 multi_dirs="ppc ppc64"
438 multi_defs="!__powerpc64__ __powerpc64__"
439 ;;
440 s390x)
441 multi_dirs="s390 s390x"
442 multi_defs="!__s390x__ __s390x__"
443 ;;
444 arm)
445 dodir ${ddir}/asm
446 cp -ax "${S}"/include/asm/* "${D}"/${ddir}/asm
447 [[ ! -e ${D}/${ddir}/asm/arch ]] && ln -sf arch-ebsa285 "${D}"/${ddir}/asm/arch
448 [[ ! -e ${D}/${ddir}/asm/proc ]] && ln -sf proc-armv "${D}"/${ddir}/asm/proc
449 ;;
450 *)
451 dodir ${ddir}/asm
144 cp -ax ${S}/include/asm/* ${D}/usr/include/asm 452 cp -ax "${S}"/include/asm/* ${D}/${ddir}/asm
145 453 ;;
146 if [ $(kernel_is_2_6) $? == 0 ] 454 esac
147 then 455 if [[ -n ${multi_dirs} ]] ; then
148 dodir /usr/include/asm-generic 456 local d ml_inc=""
457 for d in ${multi_dirs} ; do
458 dodir ${ddir}/asm-${d}
459 cp -ax "${S}"/include/asm-${d}/* ${D}/${ddir}/asm-${d}/ || die "cp asm-${d} failed"
460
461 ml_inc="${ml_inc} ${multi_defs%% *}:${ddir}/asm-${d}"
462 multi_defs=${multi_defs#* }
463 done
464 create_ml_includes ${ddir}/asm ${ml_inc}
465 fi
466
467 if kernel_is 2 6; then
468 dodir ${ddir}/asm-generic
149 cp -ax ${S}/include/asm-generic/* ${D}/usr/include/asm-generic 469 cp -ax "${S}"/include/asm-generic/* ${D}/${ddir}/asm-generic
150 fi 470 fi
471
472 # clean up
473 find "${D}" -name '*.orig' -exec rm -f {} \;
474
475 cd ${OLDPWD}
151} 476}
152 477
153install_sources() { 478install_sources() {
154 local doc 479 local doc docs file
155 local docs
156 480
157 cd ${S} 481 cd "${S}"
158 dodir /usr/src 482 dodir /usr/src
159 echo ">>> Copying sources..." 483 echo ">>> Copying sources ..."
160 if [ -d "${WORKDIR}/${KV}/docs/" ] 484
161 then 485 file="$(find ${WORKDIR} -iname "docs" -type d)"
162 for file in $(ls -1 ${WORKDIR}/${KV}/docs/) 486 if [[ -n ${file} ]]; then
163 do 487 for file in $(find ${file} -type f); do
164 echo "XX_${file}*" >> ${S}/patches.txt 488 echo "${file//*docs\/}" >> "${S}"/patches.txt
165 cat ${WORKDIR}/${KV}/docs/${file} >> ${S}/patches.txt 489 echo "===================================================" >> "${S}"/patches.txt
490 cat ${file} >> "${S}"/patches.txt
491 echo "===================================================" >> "${S}"/patches.txt
166 echo "" >> ${S}/patches.txt 492 echo "" >> "${S}"/patches.txt
167 done 493 done
168 fi 494 fi
169 495
170 if [ ! -f ${S}/patches.txt ] 496 if [[ ! -f ${S}/patches.txt ]]; then
171 then
172 # patches.txt is empty so lets use our ChangeLog 497 # patches.txt is empty so lets use our ChangeLog
173 [ -f ${FILESDIR}/../ChangeLog ] && echo "Please check the ebuild ChangeLog for more details." > ${S}/patches.txt 498 [[ -f ${FILESDIR}/../ChangeLog ]] && \
499 echo "Please check the ebuild ChangeLog for more details." \
500 > "${S}"/patches.txt
174 fi 501 fi
175 502
176 for doc in ${UNIPATCH_DOCS} 503 if use doc ; then
177 do 504 install_manpages
178 [ -f ${doc} ] && docs="${docs} ${doc}"
179 done
180 505
181 if [ -f ${S}/patches.txt ]; then 506 for doc in ${UNIPATCH_DOCS}; do [[ -f ${doc} ]] && docs="${docs} ${doc}"; done
182 docs="${docs} ${S}/patches.txt" 507 if [[ -f ${S}/patches.txt ]]; then docs="${docs} ${S}/patches.txt"; fi
508 [[ -n ${docs} ]] && dodoc ${docs}
183 fi 509 fi
184 dodoc ${docs} 510
185 mv ${WORKDIR}/linux* ${D}/usr/src 511 mv ${WORKDIR}/linux* ${D}/usr/src
512}
513
514install_manpages() {
515 kernel_is lt 2 5 && return
516
517 local myfiles="Documentation/DocBook/Makefile"
518 kernel_is lt 2 6 12 && myfiles="scripts/makeman ${myfiles}"
519
520 sed -ie "s#/usr/local/man#${D}/usr/share/man#g" ${myfiles}
521 ebegin "Installing manpages"
522 env -u ARCH make installmandocs
523 eend $?
524 sed -ie "s#${D}/usr/share/man#/usr/local/man#g" ${myfiles}
186} 525}
187 526
188# pkg_preinst functions 527# pkg_preinst functions
189#============================================================== 528#==============================================================
190preinst_headers() { 529preinst_headers() {
191 [ -L ${ROOT}usr/include/linux ] && rm ${ROOT}usr/include/linux 530 local ddir=$(kernel_header_destdir)
192 [ -L ${ROOT}usr/include/asm ] && rm ${ROOT}usr/include/asm 531 [[ -L ${ddir}/linux ]] && rm ${ddir}/linux
532 [[ -L ${ddir}/asm ]] && rm ${ddir}/asm
193} 533}
194 534
195# pkg_postinst functions 535# pkg_postinst functions
196#============================================================== 536#==============================================================
197postinst_sources() { 537postinst_sources() {
198 if [ ! -h ${ROOT}usr/src/linux ] 538 local MAKELINK=0
199 then 539
540 # if we have USE=symlink, then force K_SYMLINK=1
541 use symlink && K_SYMLINK=1
542
543 # if we are to forcably symlink, delete it if it already exists first.
544 if [[ -n ${K_SYMLINK} ]]; then
200 ln -sf ${ROOT}usr/src/linux-${KV} ${ROOT}usr/src/linux 545 [[ -h ${ROOT}usr/src/linux ]] && rm ${ROOT}usr/src/linux
546 MAKELINK=1
547 fi
548
549 # if the link doesnt exist, lets create it
550 [[ ! -h ${ROOT}usr/src/linux ]] && MAKELINK=1
551
552 if [[ ${MAKELINK} == 1 ]]; then
553 cd ${ROOT}usr/src
554 ln -sf linux-${KV_FULL} linux
555 cd ${OLDPWD}
201 fi 556 fi
202 557
203 # Don't forget to make directory for sysfs 558 # Don't forget to make directory for sysfs
204 [ ! -d "${ROOT}/sys" -a $(kernel_is_2_6) $? == 0 ] && mkdir /sys 559 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys
205 560
206 echo 561 echo
207 einfo "After installing a new kernel of any version, it is important" 562 einfo "After installing a new kernel of any version, it is important"
208 einfo "that you have the appropriate /etc/modules.autoload.d/kernel-X.Y" 563 einfo "that you have the appropriate /etc/modules.autoload.d/kernel-X.Y"
209 einfo "created (X.Y is the first 2 parts of your new kernel version)" 564 einfo "created (X.Y is the first 2 parts of your new kernel version)"
210 echo 565 echo
211 einfo "For example, this kernel will require:" 566 einfo "For example, this kernel will require:"
212 einfo "/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}" 567 einfo "/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}"
213 echo 568 echo
214 569 einfo "If you are upgrading from a previous kernel, you may be interested"
570 einfo "in the following documents:"
571 einfo " - General upgrade guide: http://www.gentoo.org/doc/en/kernel-upgrade.xml"
572 kernel_is_2_6 && einfo " - 2.4 to 2.6 migration guide: http://www.gentoo.org/doc/en/migration-to-2.6.xml"
573 if kernel_is ge 2 6 13; then
574 ewarn "As of 2.6.13 the support for devfs has been removed."
575 ewarn "You will be required to either manage a static /dev"
576 ewarn "or to ensure that udev is starting on boot."
577 fi
578 echo
579
215 # if K_EXTRAEINFO is set then lets display it now 580 # if K_EXTRAEINFO is set then lets display it now
216 if [ -n "${K_EXTRAEINFO}" ] 581 if [[ -n ${K_EXTRAEINFO} ]]; then
217 then
218 echo ${K_EXTRAEINFO} | fmt | 582 echo ${K_EXTRAEINFO} | fmt |
219 while read -s ELINE 583 while read -s ELINE; do einfo "${ELINE}"; done
220 do
221 einfo "${ELINE}"
222 done
223
224 echo
225 fi 584 fi
226 585
227 # if K_EXTRAEWARN is set then lets display it now 586 # if K_EXTRAEWARN is set then lets display it now
228 if [ -n "${K_EXTRAEWARN}" ] 587 if [[ -n ${K_EXTRAEWARN} ]]; then
229 then
230 echo ${K_EXTRAEWARN} | fmt | 588 echo ${K_EXTRAEWARN} | fmt |
231 while read -s ELINE 589 while read -s ELINE; do ewarn "${ELINE}"; done
232 do
233 ewarn "${ELINE}"
234 done
235
236 echo
237 fi 590 fi
238} 591}
239 592
240postinst_headers() { 593postinst_headers() {
241 echo
242 einfo "Kernel headers are usually only used when recompiling glibc." 594 einfo "Kernel headers are usually only used when recompiling glibc, as such, following the installation"
243 einfo "Following the installation of newer headers it is advised that" 595 einfo "of newer headers, it is advised that you re-merge glibc as follows:"
244 einfo "you re-merge glibc as follows:"
245 einfo "# emerge glibc" 596 einfo "emerge glibc"
246 einfo "Failure to do so will cause glibc to not make use of newer" 597 einfo "Failure to do so will cause glibc to not make use of newer features present in the updated kernel"
247 einfo "features present in the updated kernelheaders." 598 einfo "headers."
248 echo
249} 599}
250 600
251# pkg_setup functions 601# pkg_setup functions
252#============================================================== 602#==============================================================
253setup_headers() { 603setup_headers() {
254 ARCH=$(uname -m | sed -e s/[i].86/i386/ -e s/x86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/ -e s/amd64/x86_64/)
255 [ "$ARCH" == "sparc" -a "$PROFILE_ARCH" == "sparc64" ] && ARCH="sparc64"
256
257 [ -z "${H_SUPPORTEDARCH}" ] && H_SUPPORTEDARCH="${PN/-*/}" 604 [[ -z ${H_SUPPORTEDARCH} ]] && H_SUPPORTEDARCH=${PN/-*/}
258 for i in ${H_SUPPORTEDARCH} 605 for i in ${H_SUPPORTEDARCH}; do
259 do
260 [ "${ARCH}" == "${i}" ] && H_ACCEPT_ARCH="yes" 606 [[ $(tc-arch) == "${i}" ]] && H_ACCEPT_ARCH="yes"
261 done 607 done
262 608
263 if [ "${H_ACCEPT_ARCH}" != "yes" ] 609 if [[ ${H_ACCEPT_ARCH} != "yes" ]]; then
264 then
265 echo 610 echo
266 eerror "This version of ${PN} does not support ${ARCH}." 611 eerror "This version of ${PN} does not support $(tc-arch)."
267 eerror "Please merge the appropriate sources, in most cases" 612 eerror "Please merge the appropriate sources, in most cases"
268 eerror "this will be ${ARCH}-headers." 613 eerror "(but not all) this will be called $(tc-arch)-headers."
269 die "incorrect headers" 614 die "Package unsupported for $(tc-arch)"
270 fi 615 fi
271} 616}
272 617
273# unipatch 618# unipatch
274#============================================================== 619#==============================================================
275unipatch() { 620unipatch() {
276 local i 621 local i x y z extention PIPE_CMD UNIPATCH_DROP KPATCH_DIR PATCH_DEPTH ELINE
277 local x 622 local STRICT_COUNT PATCH_LEVEL myLC_ALL myLANG
278 local extention 623
279 local PIPE_CMD 624 # set to a standard locale to ensure sorts are ordered properly.
280 local UNIPATCH_EXCLUDE 625 myLC_ALL="${LC_ALL}"
281 local KPATCH_DIR 626 myLANG="${LANG}"
282 local PATCH_DEPTH 627 LC_ALL="C"
283 local ELINE 628 LANG=""
284 629
285 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/" 630 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/"
286 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR} 631 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR}
287 632
633 # We're gonna need it when doing patches with a predefined patchlevel
634 shopt -s extglob
635
288 # This function will unpack all passed tarballs, add any passed patches, and remove any passed patchnumbers 636 # This function will unpack all passed tarballs, add any passed patches, and remove any passed patchnumbers
289 # usage can be either via an env var or by params 637 # usage can be either via an env var or by params
638 # although due to the nature we pass this within this eclass
639 # it shall be by param only.
290 [ -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}" 640 # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}"
641 UNIPATCH_LIST="${@}"
291 642
292 #unpack any passed tarballs 643 #unpack any passed tarballs
293 for i in ${UNIPATCH_LIST} 644 for i in ${UNIPATCH_LIST}; do
294 do
295 if [ -n "$(echo ${i} | grep -e "\.tar" -e "\.tbz" -e "\.tgz")" ] 645 if [ -n "$(echo ${i} | grep -e "\.tar" -e "\.tbz" -e "\.tgz")" ]; then
296 then
297 extention=${i/*./} 646 extention=${i/*./}
647 extention=${extention/:*/}
298 case ${extention} in 648 case ${extention} in
299 tbz2) PIPE_CMD="tar -xvjf";; 649 tbz2) PIPE_CMD="tar -xvjf";;
300 bz2) PIPE_CMD="tar -xvjf";; 650 bz2) PIPE_CMD="tar -xvjf";;
301 tgz) PIPE_CMD="tar -xvzf";; 651 tgz) PIPE_CMD="tar -xvzf";;
302 gz) PIPE_CMD="tar -xvzf";; 652 gz) PIPE_CMD="tar -xvzf";;
303 *) eerror "Unrecognized tarball compression" 653 *) eerror "Unrecognized tarball compression"
304 die "Unrecognized tarball compression";; 654 die "Unrecognized tarball compression";;
305 esac 655 esac
306 656
657 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
658 unset z
659 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
660 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
661 do z="${z}0";
662 done
663 PATCH_ORDER="${z}${STRICT_COUNT}"
664
665 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/
666 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR}/${PATCH_ORDER}/ 1>/dev/null
667 else
307 ${PIPE_CMD} ${i} -C ${KPATCH_DIR} 1>/dev/null 668 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR} 1>/dev/null
669 fi
670
308 if [ $? == 0 ] 671 if [ $? == 0 ]; then
309 then
310 einfo "${i/*\//} unpacked" 672 einfo "${i/*\//} unpacked"
673 [ -n "$(echo ${i} | grep ':')" ] && echo ">>> Strict patch levels not currently supported for tarballed patchsets"
311 else 674 else
312 eerror "Failed to unpack ${i}" 675 eerror "Failed to unpack ${i/:*/}"
313 die "unable to unpack patch tarball" 676 die "unable to unpack patch tarball"
314 fi 677 fi
678 else
679 extention=${i/*./}
680 extention=${extention/:*/}
681 PIPE_CMD=""
682 case ${extention} in
683 bz2) PIPE_CMD="bzip2 -dc";;
684 patch) PIPE_CMD="cat";;
685 diff) PIPE_CMD="cat";;
686 gz|Z|z) PIPE_CMD="gzip -dc";;
687 ZIP|zip) PIPE_CMD="unzip -p";;
688 *) UNIPATCH_DROP="${UNIPATCH_DROP} ${i/:*/}";;
689 esac
315 690
316 UNIPATCH_LIST="${UNIPATCH_LIST/${i}/}" 691 PATCH_LEVEL=${i/*([^:])?(:)}
692 i=${i/:*/}
693 x=${i/*\//}
694 x=${x/\.${extention}/}
695
696 if [ -n "${PIPE_CMD}" ]; then
697 if [ ! -r "${i}" ]; then
698 echo
699 eerror "FATAL: unable to locate:"
700 eerror "${i}"
701 eerror "for read-only. The file either has incorrect permissions"
702 eerror "or does not exist."
703 die Unable to locate ${i}
704 fi
705
706 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
707 unset z
708 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
709 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
710 do z="${z}0";
711 done
712 PATCH_ORDER="${z}${STRICT_COUNT}"
713
714 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/
715 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${PATCH_ORDER}/${x}.patch${PATCH_LEVEL})
716 else
717 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL})
718 fi
719 fi
317 fi 720 fi
318 done
319
320 #so now everything is unpacked, lets work out whats to be dropped and whats to be included.
321 for i in ${UNIPATCH_LIST}
322 do
323 extention=${i/*./}
324 PIPE_CMD=""
325 case ${extention} in
326 bz2) PIPE_CMD="bzip2 -dc";;
327 patch) PIPE_CMD="cat";;
328 diff) PIPE_CMD="cat";;
329 gz|Z|z) PIPE_CMD="gzip -dc";;
330 ZIP|zip) PIPE_CMD="unzip -p";;
331 *) UNIPATCH_EXCLUDE="${UNIPATCH_EXCLUDE} ${i}";;
332 esac
333 x=${i/*\//}
334 x=${x/\.${extention}/}
335 [ -n "${PIPE_CMD}" ] && ${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch
336 done 721 done
337 722
338 #populate KPATCH_DIRS so we know where to look to remove the excludes 723 #populate KPATCH_DIRS so we know where to look to remove the excludes
339 x=${KPATCH_DIR} 724 x=${KPATCH_DIR}
340 KPATCH_DIR="" 725 KPATCH_DIR=""
341 for i in $(find ${x} -type d) 726 for i in $(find ${x} -type d | sort -n); do
342 do
343 KPATCH_DIR="${KPATCH_DIR} ${i}" 727 KPATCH_DIR="${KPATCH_DIR} ${i}"
344 done 728 done
345 729
346 #so now lets get rid of the patchno's we want to exclude 730 #so now lets get rid of the patchno's we want to exclude
731 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}"
347 for i in ${UNIPATCH_EXCLUDE} 732 for i in ${UNIPATCH_DROP}; do
348 do
349 for x in ${KPATCH_DIR}
350 do
351 rm ${x}/${i}_* 2>/dev/null
352 if [ $? == 0 ]
353 then
354 einfo "Excluding Patch #${i}" 733 ebegin "Excluding Patch #${i}"
355 einfo "From: ${x/${WORKDIR}/}" 734 for x in ${KPATCH_DIR}; do rm -f ${x}/${i}* 2>/dev/null; done
356 fi 735 eend $?
357 done
358 done 736 done
359 737
360 # and now, finally, we patch it :) 738 # and now, finally, we patch it :)
361 for x in ${KPATCH_DIR} 739 for x in ${KPATCH_DIR}; do
362 do
363 for i in $(find ${x} -maxdepth 1 -iname "*.patch" -or -iname "*.diff" | sort -u) 740 for i in $(find ${x} -maxdepth 1 -iname "*.patch*" -or -iname "*.diff*" | sort -n); do
364 do 741 STDERR_T="${T}/${i/*\//}"
742 STDERR_T="${STDERR_T/.patch*/.err}"
365 743
744 [ -z ${i/*.patch*/} ] && PATCH_DEPTH=${i/*.patch/}
745 #[ -z ${i/*.diff*/} ] && PATCH_DEPTH=${i/*.diff/}
366 746
367 PATCH_DEPTH=0 747 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi
748
368 ebegin "Applying ${i/*\//}" 749 ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)"
369 while [ ${PATCH_DEPTH} -lt 5 ] 750 while [ ${PATCH_DEPTH} -lt 5 ]; do
370 do 751 echo "Attempting Dry-run:" >> ${STDERR_T}
371 if (patch -p${PATCH_DEPTH} --dry-run -f < ${i} >/dev/null) 752 echo "cmd: patch -p${PATCH_DEPTH} --dry-run -f < ${i}" >> ${STDERR_T}
372 then 753 echo "=======================================================" >> ${STDERR_T}
373 $(patch -p${PATCH_DEPTH} -f < ${i} >/dev/null) 754 if [ $(patch -p${PATCH_DEPTH} --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then
374 if [ "$?" -eq 0 ] 755 echo "Attempting patch:" > ${STDERR_T}
375 then 756 echo "cmd: patch -p${PATCH_DEPTH} -f < ${i}" >> ${STDERR_T}
757 echo "=======================================================" >> ${STDERR_T}
758 if [ $(patch -p${PATCH_DEPTH} -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then
376 eend 0 759 eend 0
760 rm ${STDERR_T}
377 break 761 break
378 else 762 else
379 eend 1 763 eend 1
380 eerror "Failed to apply patch ${i/*\//}" 764 eerror "Failed to apply patch ${i/*\//}"
765 eerror "Please attach ${STDERR_T} to any bug you may post."
381 die "Failed to apply ${i/*\//}" 766 die "Failed to apply ${i/*\//}"
382 fi 767 fi
383 else 768 else
384 PATCH_DEPTH=$((${PATCH_DEPTH} + 1)) 769 PATCH_DEPTH=$((${PATCH_DEPTH} + 1))
385 fi 770 fi
386 done 771 done
387 if [ ${PATCH_DEPTH} -eq 5 ] 772 if [ ${PATCH_DEPTH} -eq 5 ]; then
388 then
389 eend 1 773 eend 1
774 eerror "Please attach ${STDERR_T} to any bug you may post."
390 die "Unable to dry-run patch." 775 die "Unable to dry-run patch."
391 fi 776 fi
392
393
394 done 777 done
395 done 778 done
396}
397 779
398# custom functions 780 # This is a quick, and kind of nasty hack to deal with UNIPATCH_DOCS which
781 # sit in KPATCH_DIR's. This is handled properly in the unipatch rewrite,
782 # which is why I'm not taking too much time over this.
783 local tmp
784 for i in ${UNIPATCH_DOCS}; do
785 tmp="${tmp} ${i//*\/}"
786 cp -f ${i} ${T}/
787 done
788 UNIPATCH_DOCS="${tmp}"
789
790 # clean up KPATCH_DIR's - fixes bug #53610
791 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done
792
793 LC_ALL="${myLC_ALL}"
794 LANG="${myLANG}"
795}
796
797# getfilevar accepts 2 vars as follows:
798# getfilevar <VARIABLE> <CONFIGFILE>
799# pulled from linux-info
800
801getfilevar() {
802 local workingdir basefname basedname xarch=$(tc-arch-kernel)
803
804 if [[ -z ${1} ]] && [[ ! -f ${2} ]]; then
805 echo -e "\n"
806 eerror "getfilevar requires 2 variables, with the second a valid file."
807 eerror " getfilevar <VARIABLE> <CONFIGFILE>"
808 else
809 workingdir=${PWD}
810 basefname=$(basename ${2})
811 basedname=$(dirname ${2})
812 unset ARCH
813
814 cd ${basedname}
815 echo -e "include ${basefname}\ne:\n\t@echo \$(${1})" | \
816 make ${BUILD_FIXES} -s -f - e 2>/dev/null
817 cd ${workingdir}
818
819 ARCH=${xarch}
820 fi
821}
822
823detect_arch() {
824 # This function sets ARCH_URI and ARCH_PATCH
825 # with the neccessary info for the arch sepecific compatibility
826 # patchsets.
827
828 local ALL_ARCH LOOP_ARCH COMPAT_URI i
829
830 # COMPAT_URI is the contents of ${ARCH}_URI
831 # ARCH_URI is the URI for all the ${ARCH}_URI patches
832 # ARCH_PATCH is ARCH_URI broken into files for UNIPATCH
833
834 ARCH_URI=""
835 ARCH_PATCH=""
836 ALL_ARCH="ALPHA AMD64 ARM HPPA IA64 M68K MIPS PPC PPC64 S390 SH SPARC X86"
837
838 for LOOP_ARCH in ${ALL_ARCH}; do
839 COMPAT_URI="${LOOP_ARCH}_URI"
840 COMPAT_URI="${!COMPAT_URI}"
841
842 [[ -n ${COMPAT_URI} ]] && \
843 ARCH_URI="${ARCH_URI} $(echo ${LOOP_ARCH} | tr '[:upper:]' '[:lower:]')? ( ${COMPAT_URI} )"
844
845 if [[ ${LOOP_ARCH} == "$(echo $(tc-arch-kernel) | tr '[:lower:]' '[:upper:]')" ]]; then
846 for i in ${COMPAT_URI}; do
847 ARCH_PATCH="${ARCH_PATCH} ${DISTDIR}/${i/*\//}"
848 done
849 fi
850 done
851}
852
853# sparc nastiness
399#============================================================== 854#==============================================================
400detect_version() { 855# This script generates the files in /usr/include/asm for sparc systems
401 # this function will detect and set 856# during installation of sys-kernel/linux-headers.
402 # - OKV: Original Kernel Version (2.6.0/2.6.0-test11) 857# Will no longer be needed when full 64 bit support is used on sparc64
403 # - KV: Kernel Version (2.6.0-gentoo/2.6.0-test11-gentoo-r1) 858# systems.
404 # - EXTRAVERSION: The additional version appended to OKV (-gentoo/-gentoo-r1) 859#
405 860# Shamefully ripped from Debian
406 OKV=${PV/_beta/-test} 861# ----------------------------------------------------------------------
407 OKV=${OKV/_rc/-rc} 862
408 OKV=${OKV/_pre*/} 863# Idea borrowed from RedHat's kernel package
409 OKV=${OKV/-r*/} 864
410 865# This is gonna get replaced by something in multilib.eclass soon...
411 KV_MAJOR=$(echo ${OKV} | cut -d. -f1) 866# --eradicator
412 KV_MINOR=$(echo ${OKV} | cut -d. -f2) 867generate_sparc_asm() {
413 KV_PATCH=$(echo ${OKV} | cut -d. -f3) 868 local name
414 KV_PATCH=${KV_PATCH/[-_]*/} 869
415 870 cd $1 || die
416 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2" 871 mkdir asm
417 872
418 RELEASE=${PV/${OKV}/} 873 for h in `( ls asm-sparc; ls asm-sparc64 ) | grep '\.h$' | sort -u`; do
419 RELEASE=${RELEASE/_beta/} 874 name="$(echo $h | tr a-z. A-Z_)"
420 RELEASE=${RELEASE/_rc/-rc} 875 # common header
421 RELEASE=${RELEASE/_pre/-bk} 876 echo "/* All asm/ files are generated and point to the corresponding
422 RELEASETYPE=${RELEASE//[0-9]/} 877 * file in asm-sparc or asm-sparc64.
423 878 */
424 EXTRAVERSION="${RELEASE}" 879
425 880#ifndef __SPARCSTUB__${name}__
426 if [ -n "${K_PREPATCHED}" ] 881#define __SPARCSTUB__${name}__
427 then 882" > asm/${h}
428 KV="${OKV}-${PN/-*/}${PR/r/}" 883
884 # common for sparc and sparc64
885 if [ -f asm-sparc/$h -a -f asm-sparc64/$h ]; then
886 echo "#ifdef __arch64__
887#include <asm-sparc64/$h>
888#else
889#include <asm-sparc/$h>
890#endif
891" >> asm/${h}
892
893 # sparc only
894 elif [ -f asm-sparc/$h ]; then
895echo "#ifndef __arch64__
896#include <asm-sparc/$h>
897#endif
898" >> asm/${h}
899
900 # sparc64 only
429 else 901 else
430 [ -z "${K_NOUSENAME}" ] && EXTRAVERSION="${EXTRAVERSION}-${PN/-*/}" 902echo "#ifdef __arch64__
431 [ ! "${PR}" == "r0" ] && EXTRAVERSION="${EXTRAVERSION}-${PR}" 903#include <asm-sparc64/$h>
432 904#endif
433 KV=${OKV}${EXTRAVERSION} 905" >> asm/${h}
434 fi 906 fi
435
436 # -rcXX-bkXX pulls are *IMPOSSIBLE* to support within the portage naming convention
437 # these cannot be supported, but the code here can handle it up until this point
438 # and theoretically thereafter.
439
440 if [ "${RELEASETYPE}" == "-rc" ]
441 then
442 OKV="${KV_MAJOR}.${KV_MINOR}.$([ $((${KV_PATCH} - 1)) -lt 0 ] && echo ${KV_PATCH} || echo $((${KV_PATCH} - 1)))"
443 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${PV//_/-}.bz2
444 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
445 UNIPATCH_LIST="${DISTDIR}/patch-${PV//_/-}.bz2 ${UNIPATCH_LIST}"
446 [ -n "${K_PREPATCHED}" ] && KV="${PV/[-_]*/}${EXTRAVERSION}-${PN/-*/}${PR/r/}" || KV=${PV/[-_]*/}${EXTRAVERSION}
447 fi
448
449 if [ "${RELEASETYPE}" == "-bk" ]
450 then
451 OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
452 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2
453 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
454 UNIPATCH_LIST="${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2 ${UNIPATCH_LIST}"
455 [ -n "${K_PREPATCHED}" ] && KV="${PV/[-_]*/}${EXTRAVERSION}-${PN/-*/}${PR/r/}" || KV=${PV/[-_]*/}${EXTRAVERSION}
456 fi
457
458 if [ "${RELEASETYPE}" == "-rc-bk" ]
459 then
460 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))-${RELEASE/-bk*}"
461 EXTRAVERSION="$([ -n "${RELEASE}" ] && echo ${RELEASE/*-bk/-bk})$([ -n "${K_USENAME}" ] && echo -${PN/-*/})$([ ! "${PR}" == "r0" ] && echo -${PR})"
462
463 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2
464 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
465 UNIPATCH_LIST="${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2 ${UNIPATCH_LIST}"
466 [ -n "${K_PREPATCHED}" ] && KV="${PV/[-_]*/}${EXTRAVERSION}-${PN/-*/}${PR/r/}" || KV=${PV/[-_]*/}${EXTRAVERSION}
467 fi
468
469 S=${WORKDIR}/linux-${KV}
470}
471 907
908 # common footer
909 echo "#endif /* !__SPARCSTUB__${name}__ */" >> asm/${h}
910 done
911 return 0
912}
913
914headers___fix() {
915 # Voodoo to partially fix broken upstream headers.
916 # Issues with this function should go to plasmaroo.
917 sed -i \
918 -e "s/\([ "$'\t'"]\)\(u\|s\)\(8\|16\|32\|64\)\([ "$'\t'"]\)/\1__\2\3\4/g;" \
919 -e 's/ \(u\|s\)\(8\|16\|32\|64\)$/ __\1\2/g' \
920 -e 's/\([(, ]\)\(u\|s\)64\([, )]\)/\1__\264\3/g' \
921 -e "s/^\(u\|s\)\(8\|16\|32\|64\)\([ "$'\t'"]\)/__\1\2\3/g;" \
922 "$@"
923}
472 924
473# common functions 925# common functions
474#============================================================== 926#==============================================================
475src_unpack() { 927kernel-2_src_unpack() {
476 [ -z "${OKV}" ] && OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
477
478 cd ${WORKDIR}
479 unpack linux-${OKV}.tar.bz2
480 if [ "${OKV}" != "${KV}" ]
481 then
482 mv linux-${OKV} linux-${KV} || die "Unable to move source tree to ${KV}."
483 fi
484 cd ${S}
485
486 universal_unpack 928 universal_unpack
487 [ -n "${UNIPATCH_LIST}" ] && unipatch ${UNIPATCH_LIST} 929
930 [[ -n ${UNIPATCH_LIST} || -n ${UNIPATCH_LIST_DEFAULT} || -n ${UNIPATCH_LIST_GENPATCHES} ]] && \
931 unipatch "${UNIPATCH_LIST_DEFAULT} ${UNIPATCH_LIST_GENPATCHES} ${UNIPATCH_LIST}"
932
488 [ -z "${K_NOSETEXTRAVERSION}" ] && unpack_set_extraversion 933 [[ -z ${K_NOSETEXTRAVERSION} ]] && unpack_set_extraversion
934 unpack_fix_docbook
935 unpack_fix_install_path
489 936
490 [ $(kernel_is_2_4) $? == 0 ] && unpack_2_4 937 kernel_is 2 4 && unpack_2_4
491} 938}
492 939
493src_compile() { 940kernel-2_src_compile() {
941 cd "${S}"
494 [ "${ETYPE}" == "headers" ] && compile_headers 942 [[ ${ETYPE} == headers ]] && compile_headers
943 [[ ${ETYPE} == sources ]] && \
944 use doc && compile_manpages
495} 945}
496 946
497pkg_preinst() { 947kernel-2_pkg_preinst() {
498 [ "${ETYPE}" == "headers" ] && preinst_headers 948 [[ ${ETYPE} == headers ]] && preinst_headers
499} 949}
500 950
501src_install() { 951kernel-2_src_install() {
502 install_universal 952 install_universal
503 [ "${ETYPE}" == "headers" ] && install_headers 953 [[ ${ETYPE} == headers ]] && install_headers
504 [ "${ETYPE}" == "sources" ] && install_sources 954 [[ ${ETYPE} == sources ]] && install_sources
505} 955}
506 956
507pkg_postinst() { 957kernel-2_pkg_postinst() {
508 [ "${ETYPE}" == "headers" ] && postinst_headers 958 [[ ${ETYPE} == headers ]] && postinst_headers
509 [ "${ETYPE}" == "sources" ] && postinst_sources 959 [[ ${ETYPE} == sources ]] && postinst_sources
510} 960}
511 961
512pkg_setup() { 962kernel-2_pkg_setup() {
513 [ "${ETYPE}" == "headers" ] && setup_headers 963 [[ ${ETYPE} == headers ]] && setup_headers
964 [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..."
514} 965}

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.151

  ViewVC Help
Powered by ViewVC 1.1.20