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

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

  ViewVC Help
Powered by ViewVC 1.1.20