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

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

  ViewVC Help
Powered by ViewVC 1.1.20