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

Legend:
Removed from v.1.94  
changed lines
  Added in v.1.159

  ViewVC Help
Powered by ViewVC 1.1.20