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

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

  ViewVC Help
Powered by ViewVC 1.1.20