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

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

  ViewVC Help
Powered by ViewVC 1.1.20