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

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

  ViewVC Help
Powered by ViewVC 1.1.20