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

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

  ViewVC Help
Powered by ViewVC 1.1.20