/[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.79 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.79 2005/01/12 21:37:11 eradicator 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
30# 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
31 43
32# 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
33# can be supported by the headers ebuild 45# can be supported by the headers ebuild
34 46
35# 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
42# the doc dir 54# the doc dir
43# UNIPATCH_STRICTORDER - if this is set places patches into directories of 55# UNIPATCH_STRICTORDER - if this is set places patches into directories of
44# order, so they are applied in the order passed 56# order, so they are applied in the order passed
45 57
46inherit toolchain-funcs versionator multilib 58inherit toolchain-funcs versionator multilib
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 kernel_is 2 6 || kernel_is 2 5 247 kernel_is 2 6 || kernel_is 2 5
137 return $?
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 300 # When cross-compiling, we need to set the ARCH/CROSS_COMPILE
161 PROVIDE="virtual/linux-sources" 301 # variables properly or bad things happen !
162 kernel_is gt 2 4 && PROVIDE="${PROVIDE} virtual/alsa" 302 xmakeopts="ARCH=${KARCH}"
163 303 if [[ ${CTARGET} != ${CHOST} ]] && ! cross_pre_c_headers ; then
164 SLOT="${PVR}" 304 xmakeopts="${xmakeopts} CROSS_COMPILE=${CTARGET}-"
165 DESCRIPTION="Sources for the Linux kernel" 305 elif type -p ${CHOST}-ar > /dev/null ; then
166 IUSE="${IUSE} build doc" 306 xmakeopts="${xmakeopts} CROSS_COMPILE=${CHOST}-"
167elif [ "${ETYPE}" == "headers" ]
168then
169 DESCRIPTION="Linux system headers"
170 IUSE="${IUSE}"
171
172 if [[ ${CTARGET} = ${CHOST} ]]
173 then
174 DEPEND="!virtual/os-headers"
175 PROVIDE="virtual/kernel virtual/os-headers"
176 SLOT="0"
177 else
178 SLOT="${CTARGET}"
179 fi
180else
181 eerror "Unknown ETYPE=\"${ETYPE}\", must be \"sources\" or \"headers\""
182 die
183fi 307 fi
308 export xmakeopts
309}
184 310
185# Unpack functions 311# Unpack functions
186#============================================================== 312#==============================================================
187unpack_2_4() { 313unpack_2_4() {
314 env_setup_xmakeopts
315
188 cd ${S} 316 cd "${S}"
189 # this file is required for other things to build properly, 317 # this file is required for other things to build properly,
190 # so we autogenerate it 318 # so we autogenerate it
191 make mrproper || die "make mrproper died" 319 make -s mrproper ${xmakeopts} || die "make mrproper failed"
320 make -s symlinks ${xmakeopts} || die "make symlinks failed"
192 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"
193 echo ">>> version.h compiled successfully." 322 echo ">>> version.h compiled successfully."
194} 323}
195 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
196universal_unpack() { 338universal_unpack() {
197 [ -z "${OKV}" ] && OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
198
199 cd ${WORKDIR} 339 cd ${WORKDIR}
200 unpack linux-${OKV}.tar.bz2 340 unpack linux-${OKV}.tar.bz2
201 if [ "${OKV}" != "${KV_FULL}" ] 341 if [[ "${OKV}" != "${KV_FULL}" ]]; then
202 then
203 mv linux-${OKV} linux-${KV_FULL} \ 342 mv linux-${OKV} linux-${KV_FULL} \
204 || die "Unable to move source tree to ${KV_FULL}." 343 || die "Unable to move source tree to ${KV_FULL}."
205 fi 344 fi
206 cd ${S} 345 cd "${S}"
207
208 # change incorrect install path
209 sed -ie 's:#export\tINSTALL_PATH:export\tINSTALL_PATH:' Makefile
210 346
211 # remove all backup files 347 # remove all backup files
212 find . -iname "*~" -exec rm {} \; 2> /dev/null 348 find . -iname "*~" -exec rm {} \; 2> /dev/null
213 349
214 if [ -d "${S}/Documentation/DocBook" ]
215 then
216 cd ${S}/Documentation/DocBook
217 sed -e "s:db2:docbook2:g" Makefile > Makefile.new \
218 && mv Makefile.new Makefile
219 cd ${S}
220 fi
221 # 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
222 use ppc && \ 351 use ppc && \
223 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|' \
224 ${S}/arch/ppc/Makefile 353 "${S}"/arch/ppc/Makefile
225} 354}
226 355
227unpack_set_extraversion() { 356unpack_set_extraversion() {
228 cd ${S} 357 cd "${S}"
229 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
230} 375}
231 376
232# Compile Functions 377# Compile Functions
233#============================================================== 378#==============================================================
234compile_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
235 # if we couldnt obtain HOSTCFLAGS from the Makefile, 386 # if we couldnt obtain HOSTCFLAGS from the Makefile,
236 # then set it to something sane 387 # then set it to something sane
237 local HOSTCFLAGS=$(getfilevar HOSTCFLAGS ${S}/Makefile) 388 local HOSTCFLAGS=$(getfilevar HOSTCFLAGS "${S}"/Makefile)
238 HOSTCFLAGS=${HOSTCFLAGS:--Wall -Wstrict-prototypes -O2 -fomit-frame-pointer} 389 HOSTCFLAGS=${HOSTCFLAGS:--Wall -Wstrict-prototypes -O2 -fomit-frame-pointer}
239 390
240 # Kernel ARCH != portage ARCH
241 local KARCH=$(tc-arch-kernel ${CTARGET})
242
243 # When cross-compiling, we need to set the ARCH/CROSS_COMPILE
244 # variables properly or bad things happen !
245 local xmakeopts="ARCH=${KARCH}"
246 if [[ ${CTARGET} != ${CHOST} ]] ; then
247 xmakeopts="${xmakeopts} CROSS_COMPILE=${CTARGET}-"
248 elif type -p ${CHOST}-ar ; then
249 xmakeopts="${xmakeopts} CROSS_COMPILE=${CHOST}-"
250 fi
251
252 if kernel_is 2 4 391 if kernel_is 2 4; then
253 then
254 yes "" | make oldconfig ${xmakeopts} 392 yes "" | make oldconfig ${xmakeopts}
255 echo ">>> make oldconfig complete" 393 echo ">>> make oldconfig complete"
256 use sparc && make dep ${xmakeopts} 394 make dep ${xmakeopts}
257
258 elif kernel_is 2_6 395 elif kernel_is 2 6; then
259 then
260 # autoconf.h isnt generated unless it already exists. plus, we have 396 # autoconf.h isnt generated unless it already exists. plus, we have
261 # no guarantee that any headers are installed on the system... 397 # no guarantee that any headers are installed on the system...
262 [[ -f ${ROOT}/usr/include/linux/autoconf.h ]] \ 398 [[ -f ${ROOT}/usr/include/linux/autoconf.h ]] \
263 || 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
264 406
265 # 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
266 # 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
267 # to force an include path with $S. 409 # to force an include path with $S.
268 HOSTCFLAGS="${HOSTCFLAGS} -I${S}/include/" 410 HOSTCFLAGS="${HOSTCFLAGS} -I${S}/include/"
269 ln -sf asm-${KARCH} "${S}"/include/asm 411 ln -sf asm-${KARCH} "${S}"/include/asm
412 cross_pre_c_headers && return 0
413
270 make defconfig HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "defconfig failed" 414 make ${K_DEFCONFIG} HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "defconfig failed"
271 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"
272 fi 417 fi
273} 418}
274 419
275compile_manpages() { 420compile_manpages() {
276 einfo "Making manpages ..." 421 einfo "Making manpages ..."
282install_universal() { 427install_universal() {
283 #fix silly permissions in tarball 428 #fix silly permissions in tarball
284 cd ${WORKDIR} 429 cd ${WORKDIR}
285 chown -R root:root * 430 chown -R root:root *
286 chmod -R a+r-w+X,u+w * 431 chmod -R a+r-w+X,u+w *
432 cd ${OLDPWD}
287} 433}
288 434
289install_headers() { 435install_headers() {
290 local ddir=$(kernel_header_destdir) 436 local ddir=$(kernel_header_destdir)
291 437
292 cd ${S} 438 cd "${S}"
293 dodir ${ddir}/linux 439 dodir ${ddir}/linux
294 cp -ax ${S}/include/linux/* ${D}/${ddir}/linux 440 cp -ax "${S}"/include/linux/* ${D}/${ddir}/linux
295 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)
296 dodir ${ddir}/asm 463 dodir ${ddir}/asm
297 464 cp -ax "${S}"/include/asm/* "${D}"/${ddir}/asm
298 if [ "${PROFILE_ARCH}" = "sparc64" -o "${PROFILE_ARCH}" = "sparc64-multilib" ] ; then 465 [[ ! -e ${D}/${ddir}/asm/arch ]] && ln -sf arch-ebsa285 "${D}"/${ddir}/asm/arch
299 rm -Rf ${D}/${ddir}/asm 466 [[ ! -e ${D}/${ddir}/asm/proc ]] && ln -sf proc-armv "${D}"/${ddir}/asm/proc
300 dodir ${ddir}/asm-sparc 467 ;;
301 dodir ${ddir}/asm-sparc64 468 powerpc)
302 cp -ax ${S}/include/asm-sparc/* ${D}/usr/include/asm-sparc
303 cp -ax ${S}/include/asm-sparc64/* ${D}/usr/include/asm-sparc64
304
305 #generate_sparc_asm ${D}/usr/include
306 create_ml_includes /usr/include/asm __sparc__:/usr/include/asm-sparc __sparc64__:/usr/include/asm-sparc64
307 elif [ "${ARCH}" = "amd64" ]; then
308 rm -Rf ${D}/${ddir}/asm
309 dodir ${ddir}/asm-i386 469 dodir ${ddir}/asm
310 dodir ${ddir}/asm-x86_64
311 cp -ax ${S}/include/asm-i386/* ${D}/usr/include/asm-i386
312 cp -ax ${S}/include/asm-x86_64/* ${D}/usr/include/asm-x86_64
313 #/bin/sh ${FILESDIR}/generate-asm-amd64 ${D}/usr/include
314 create_ml_includes /usr/include/asm __i386__:/usr/include/asm-i386 __x86_64__:/usr/include/asm-x86_64
315 else
316 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
317 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"
318 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
319 if kernel_is 2 6 493 if kernel_is 2 6; then
320 then
321 dodir ${ddir}/asm-generic 494 dodir ${ddir}/asm-generic
322 cp -ax ${S}/include/asm-generic/* ${D}/${ddir}/asm-generic 495 cp -ax "${S}"/include/asm-generic/* ${D}/${ddir}/asm-generic
323 fi 496 fi
497
498 # clean up
499 find "${D}" -name '*.orig' -exec rm -f {} \;
500
501 cd ${OLDPWD}
324} 502}
325 503
326install_sources() { 504install_sources() {
327 local doc 505 local doc docs file
328 local docs
329 local file
330 506
331 cd ${S} 507 cd "${S}"
332 dodir /usr/src 508 dodir /usr/src
333 echo ">>> Copying sources ..." 509 echo ">>> Copying sources ..."
510
334 file="$(find ${WORKDIR} -iname "docs" -type d)" 511 file="$(find ${WORKDIR} -iname "docs" -type d)"
335 if [ -n "${file}" ] 512 if [[ -n ${file} ]]; then
336 then
337 for file in $(find ${file} -type f) 513 for file in $(find ${file} -type f); do
338 do
339 echo "${file/*docs\//}" >> ${S}/patches.txt 514 echo "${file//*docs\/}" >> "${S}"/patches.txt
340 echo "===================================================" >> ${S}/patches.txt 515 echo "===================================================" >> "${S}"/patches.txt
341 cat ${file} >> ${S}/patches.txt 516 cat ${file} >> "${S}"/patches.txt
342 echo "===================================================" >> ${S}/patches.txt 517 echo "===================================================" >> "${S}"/patches.txt
343 echo "" >> ${S}/patches.txt 518 echo "" >> "${S}"/patches.txt
344 done 519 done
345 fi 520 fi
346 521
347 if [ ! -f ${S}/patches.txt ] 522 if [[ ! -f ${S}/patches.txt ]]; then
348 then
349 # patches.txt is empty so lets use our ChangeLog 523 # patches.txt is empty so lets use our ChangeLog
350 [ -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
351 fi 527 fi
352 528
353 for doc in ${UNIPATCH_DOCS} 529 if use doc ; then
354 do
355 [ -f ${doc} ] && docs="${docs} ${doc}"
356 done
357
358 if [ -f ${S}/patches.txt ]; then
359 docs="${docs} ${S}/patches.txt"
360 fi
361
362 if use doc && ! use arm && ! use s390; then
363 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}
364 fi 535 fi
365 536
366 dodoc ${docs}
367 mv ${WORKDIR}/linux* ${D}/usr/src 537 mv ${WORKDIR}/linux* ${D}/usr/src
368} 538}
369 539
370install_manpages() { 540install_manpages() {
371 env -u ARCH sed -ie "s#/usr/local/man#${D}/usr/man#g" scripts/makeman 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
546 sed -ie "s#/usr/local/man#${D}/usr/share/man#g" ${myfiles}
372 ebegin "Installing manpages" 547 ebegin "Installing manpages"
373 env -u ARCH make installmandocs 548 env -u ARCH make installmandocs
374 eend $? 549 eend $?
375 env -u ARCH 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}
376} 551}
377 552
378# pkg_preinst functions 553# pkg_preinst functions
379#============================================================== 554#==============================================================
380preinst_headers() { 555preinst_headers() {
384} 559}
385 560
386# pkg_postinst functions 561# pkg_postinst functions
387#============================================================== 562#==============================================================
388postinst_sources() { 563postinst_sources() {
389 local MAKELINK 564 local MAKELINK=0
390 565
566 # if we have USE=symlink, then force K_SYMLINK=1
567 use symlink && K_SYMLINK=1
568
391 # 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.
392 if [ -n "${K_SYMLINK}" ]; then 570 if [[ -n ${K_SYMLINK} ]]; then
393 [ -h ${ROOT}usr/src/linux ] && rm ${ROOT}usr/src/linux 571 [[ -h ${ROOT}usr/src/linux ]] && rm ${ROOT}usr/src/linux
394 MAKELINK=1 572 MAKELINK=1
395 fi 573 fi
396 574
397 # if the link doesnt exist, lets create it 575 # if the link doesnt exist, lets create it
398 [ ! -h ${ROOT}usr/src/linux ] && MAKELINK=1 576 [[ ! -h ${ROOT}usr/src/linux ]] && MAKELINK=1
399 577
400 [ ${MAKELINK} == 1 ] && \ 578 if [[ ${MAKELINK} == 1 ]]; then
401 ln -sf ${ROOT}usr/src/linux-${KV_FULL} ${ROOT}usr/src/linux 579 cd ${ROOT}usr/src
580 ln -sf linux-${KV_FULL} linux
581 cd ${OLDPWD}
582 fi
402 583
403 # Don't forget to make directory for sysfs 584 # Don't forget to make directory for sysfs
404 [ ! -d "${ROOT}/sys" -a kernel_is_2_6 ] && mkdir /sys 585 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys
405 586
406 echo 587 echo
407 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"
408 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"
409 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)"
410 echo 591 echo
411 einfo "For example, this kernel will require:" 592 einfo "For example, this kernel will require:"
412 einfo "/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}" 593 einfo "/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}"
413 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
414 605
415 # if K_EXTRAEINFO is set then lets display it now 606 # if K_EXTRAEINFO is set then lets display it now
416 if [ -n "${K_EXTRAEINFO}" ] 607 if [[ -n ${K_EXTRAEINFO} ]]; then
417 then
418 echo ${K_EXTRAEINFO} | fmt | 608 echo ${K_EXTRAEINFO} | fmt |
419 while read -s ELINE 609 while read -s ELINE; do einfo "${ELINE}"; done
420 do
421 einfo "${ELINE}"
422 done
423
424 echo
425 fi
426
427 # Show policy version, if this kernel has SELinux ...
428 local secfile
429 secfile="${ROOT}usr/src/linux-${KV_FULL}/security/selinux/include/security.h"
430 if use selinux && [ -f "$secfile" ]
431 then
432 local polver=$(awk '/POLICYDB_VERSION /{print $3}' $secfile)
433 einfo "The SELinux policy version of this kernel is $polver."
434 echo
435 fi 610 fi
436 611
437 # if K_EXTRAEWARN is set then lets display it now 612 # if K_EXTRAEWARN is set then lets display it now
438 if [ -n "${K_EXTRAEWARN}" ] 613 if [[ -n ${K_EXTRAEWARN} ]]; then
439 then
440 echo ${K_EXTRAEWARN} | fmt | 614 echo ${K_EXTRAEWARN} | fmt |
441 while read -s ELINE 615 while read -s ELINE; do ewarn "${ELINE}"; done
442 do
443 ewarn "${ELINE}"
444 done
445
446 echo
447 fi 616 fi
448} 617}
449 618
450postinst_headers() { 619postinst_headers() {
451 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"
456} 625}
457 626
458# pkg_setup functions 627# pkg_setup functions
459#============================================================== 628#==============================================================
460setup_headers() { 629setup_headers() {
461 [ -z "${H_SUPPORTEDARCH}" ] && H_SUPPORTEDARCH="${PN/-*/}" 630 [[ -z ${H_SUPPORTEDARCH} ]] && H_SUPPORTEDARCH=${PN/-*/}
462 for i in ${H_SUPPORTEDARCH} 631 for i in ${H_SUPPORTEDARCH}; do
463 do
464 [ "${ARCH}" == "${i}" ] && H_ACCEPT_ARCH="yes" 632 [[ $(tc-arch) == "${i}" ]] && H_ACCEPT_ARCH="yes"
465 done 633 done
466 634
467 if [ "${H_ACCEPT_ARCH}" != "yes" ] 635 if [[ ${H_ACCEPT_ARCH} != "yes" ]]; then
468 then
469 echo 636 echo
470 eerror "This version of ${PN} does not support ${ARCH}." 637 eerror "This version of ${PN} does not support $(tc-arch)."
471 eerror "Please merge the appropriate sources, in most cases" 638 eerror "Please merge the appropriate sources, in most cases"
472 eerror "(but not all) this will be called ${ARCH}-headers." 639 eerror "(but not all) this will be called $(tc-arch)-headers."
473 die "Package unsupported for ${ARCH}" 640 die "Package unsupported for $(tc-arch)"
474 fi 641 fi
475} 642}
476 643
477# unipatch 644# unipatch
478#============================================================== 645#==============================================================
479unipatch() { 646unipatch() {
480 local i 647 local i x y z extention PIPE_CMD UNIPATCH_DROP KPATCH_DIR PATCH_DEPTH ELINE
481 local x 648 local STRICT_COUNT PATCH_LEVEL myLC_ALL myLANG
482 local extention 649
483 local PIPE_CMD
484 local UNIPATCH_DROP
485 local KPATCH_DIR
486 local PATCH_DEPTH
487 local ELINE
488 local STRICT_COUNT
489 local PATCH_LEVEL
490 local myLC_ALL
491
492 # set to a standard locale to ensure sorts are ordered properly. 650 # set to a standard locale to ensure sorts are ordered properly.
493 myLC_ALL="${LC_ALL}" 651 myLC_ALL="${LC_ALL}"
652 myLANG="${LANG}"
494 LC_ALL="C" 653 LC_ALL="C"
654 LANG=""
495 655
496 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/" 656 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/"
497 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR} 657 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR}
498 658
499 # 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
505 # it shall be by param only. 665 # it shall be by param only.
506 # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}" 666 # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}"
507 UNIPATCH_LIST="${@}" 667 UNIPATCH_LIST="${@}"
508 668
509 #unpack any passed tarballs 669 #unpack any passed tarballs
510 for i in ${UNIPATCH_LIST} 670 for i in ${UNIPATCH_LIST}; do
511 do
512 if [ -n "$(echo ${i} | grep -e "\.tar" -e "\.tbz" -e "\.tgz")" ] 671 if [ -n "$(echo ${i} | grep -e "\.tar" -e "\.tbz" -e "\.tgz")" ]; then
513 then
514 extention=${i/*./} 672 extention=${i/*./}
515 extention=${extention/:*/} 673 extention=${extention/:*/}
516 case ${extention} in 674 case ${extention} in
517 tbz2) PIPE_CMD="tar -xvjf";; 675 tbz2) PIPE_CMD="tar -xvjf";;
518 bz2) PIPE_CMD="tar -xvjf";; 676 bz2) PIPE_CMD="tar -xvjf";;
520 gz) PIPE_CMD="tar -xvzf";; 678 gz) PIPE_CMD="tar -xvzf";;
521 *) eerror "Unrecognized tarball compression" 679 *) eerror "Unrecognized tarball compression"
522 die "Unrecognized tarball compression";; 680 die "Unrecognized tarball compression";;
523 esac 681 esac
524 682
525 if [ -n "${UNIPATCH_STRICTORDER}" ] 683 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
526 then 684 unset z
527 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
528 mkdir -p ${KPATCH_DIR}/${STRICT_COUNT}/ 691 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/
529 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR}/${STRICT_COUNT}/ 1>/dev/null 692 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR}/${PATCH_ORDER}/ 1>/dev/null
530 else 693 else
531 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR} 1>/dev/null 694 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR} 1>/dev/null
532 fi 695 fi
533 696
534 if [ $? == 0 ] 697 if [ $? == 0 ]; then
535 then
536 einfo "${i/*\//} unpacked" 698 einfo "${i/*\//} unpacked"
537 [ -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"
538 else 700 else
539 eerror "Failed to unpack ${i/:*/}" 701 eerror "Failed to unpack ${i/:*/}"
540 die "unable to unpack patch tarball" 702 die "unable to unpack patch tarball"
555 PATCH_LEVEL=${i/*([^:])?(:)} 717 PATCH_LEVEL=${i/*([^:])?(:)}
556 i=${i/:*/} 718 i=${i/:*/}
557 x=${i/*\//} 719 x=${i/*\//}
558 x=${x/\.${extention}/} 720 x=${x/\.${extention}/}
559 721
560 if [ -n "${PIPE_CMD}" ] 722 if [ -n "${PIPE_CMD}" ]; then
561 then
562 if [ ! -r "${i}" ] 723 if [ ! -r "${i}" ]; then
563 then
564 echo 724 echo
565 eerror "FATAL: unable to locate:" 725 eerror "FATAL: unable to locate:"
566 eerror "${i}" 726 eerror "${i}"
567 eerror "for read-only. The file either has incorrect permissions" 727 eerror "for read-only. The file either has incorrect permissions"
568 eerror "or does not exist." 728 eerror "or does not exist."
569 die Unable to locate ${i} 729 die Unable to locate ${i}
570 fi 730 fi
571 731
572 if [ -n "${UNIPATCH_STRICTORDER}" ] 732 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
573 then 733 unset z
574 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
575 mkdir -p ${KPATCH_DIR}/${STRICT_COUNT}/ 740 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/
576 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${STRICT_COUNT}/${x}.patch${PATCH_LEVEL}) 741 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${PATCH_ORDER}/${x}.patch${PATCH_LEVEL})
577 else 742 else
578 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL}) 743 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL})
579 fi 744 fi
580 fi 745 fi
581 fi 746 fi
582 done 747 done
583 748
584 #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
585 x=${KPATCH_DIR} 750 x=${KPATCH_DIR}
586 KPATCH_DIR="" 751 KPATCH_DIR=""
587 for i in $(find ${x} -type d | sort -n) 752 for i in $(find ${x} -type d | sort -n); do
588 do
589 KPATCH_DIR="${KPATCH_DIR} ${i}" 753 KPATCH_DIR="${KPATCH_DIR} ${i}"
590 done 754 done
591 755
592 #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
593 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}" 757 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}"
594 for i in ${UNIPATCH_DROP} 758 for i in ${UNIPATCH_DROP}; do
595 do
596 ebegin "Excluding Patch #${i}" 759 ebegin "Excluding Patch #${i}"
597 for x in ${KPATCH_DIR} 760 for x in ${KPATCH_DIR}; do rm -f ${x}/${i}* 2>/dev/null; done
598 do
599 rm -f ${x}/${i}* 2>/dev/null
600 done
601 eend $? 761 eend $?
602 done 762 done
603 763
604 # and now, finally, we patch it :) 764 # and now, finally, we patch it :)
605 for x in ${KPATCH_DIR} 765 for x in ${KPATCH_DIR}; do
606 do
607 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
608 do
609 STDERR_T="${T}/${i/*\//}" 767 STDERR_T="${T}/${i/*\//}"
610 STDERR_T="${STDERR_T/.patch*/.err}" 768 STDERR_T="${STDERR_T/.patch*/.err}"
611 769
612 [ -z ${i/*.patch*/} ] && PATCH_DEPTH=${i/*.patch/} 770 [ -z ${i/*.patch*/} ] && PATCH_DEPTH=${i/*.patch/}
613 [ -z ${i/*.diff*/} ] && PATCH_DEPTH=${i/*.diff/} 771 #[ -z ${i/*.diff*/} ] && PATCH_DEPTH=${i/*.diff/}
614 772
615 if [ -z "${PATCH_DEPTH}" ]; then 773 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi
616 PATCH_DEPTH=0
617 fi
618 774
619 ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)" 775 ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)"
620 while [ ${PATCH_DEPTH} -lt 5 ] 776 while [ ${PATCH_DEPTH} -lt 5 ]; do
621 do
622 echo "Attempting Dry-run:" >> ${STDERR_T} 777 echo "Attempting Dry-run:" >> ${STDERR_T}
623 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}
624 echo "=======================================================" >> ${STDERR_T} 779 echo "=======================================================" >> ${STDERR_T}
625 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
626 then
627 echo "Attempting patch:" > ${STDERR_T} 781 echo "Attempting patch:" > ${STDERR_T}
628 echo "cmd: patch -p${PATCH_DEPTH} -f < ${i}" >> ${STDERR_T} 782 echo "cmd: patch -p${PATCH_DEPTH} -f < ${i}" >> ${STDERR_T}
629 echo "=======================================================" >> ${STDERR_T} 783 echo "=======================================================" >> ${STDERR_T}
630 if [ $(patch -p${PATCH_DEPTH} -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ] 784 if [ $(patch -p${PATCH_DEPTH} -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then
631 then
632 eend 0 785 eend 0
633 rm ${STDERR_T} 786 rm ${STDERR_T}
634 break 787 break
635 else 788 else
636 eend 1 789 eend 1
640 fi 793 fi
641 else 794 else
642 PATCH_DEPTH=$((${PATCH_DEPTH} + 1)) 795 PATCH_DEPTH=$((${PATCH_DEPTH} + 1))
643 fi 796 fi
644 done 797 done
645 if [ ${PATCH_DEPTH} -eq 5 ] 798 if [ ${PATCH_DEPTH} -eq 5 ]; then
646 then
647 eend 1 799 eend 1
648 eerror "Please attach ${STDERR_T} to any bug you may post." 800 eerror "Please attach ${STDERR_T} to any bug you may post."
649 die "Unable to dry-run patch." 801 die "Unable to dry-run patch."
650 fi 802 fi
651 done 803 done
652 done 804 done
653 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
654 # clean up KPATCH_DIR's - fixes bug #53610 816 # clean up KPATCH_DIR's - fixes bug #53610
655 for x in ${KPATCH_DIR} 817 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done
656 do 818
657 rm -Rf ${x}
658 done
659
660 LC_ALL="${myLC_ALL}" 819 LC_ALL="${myLC_ALL}"
820 LANG="${myLANG}"
661} 821}
662 822
663# getfilevar accepts 2 vars as follows: 823# getfilevar accepts 2 vars as follows:
664# getfilevar <VARIABLE> <CONFIGFILE> 824# getfilevar <VARIABLE> <CONFIGFILE>
665# pulled from linux-info 825# pulled from linux-info
666 826
667getfilevar() { 827getfilevar() {
668local ERROR workingdir basefname basedname xarch 828 local workingdir basefname basedname xarch=$(tc-arch-kernel)
669 ERROR=0
670 829
671 [ -z "${1}" ] && ERROR=1 830 if [[ -z ${1} ]] && [[ ! -f ${2} ]]; then
672 [ ! -f "${2}" ] && ERROR=1
673
674 if [ "${ERROR}" = 1 ]
675 then
676 ebeep
677 echo -e "\n" 831 echo -e "\n"
678 eerror "getfilevar requires 2 variables, with the second a valid file." 832 eerror "getfilevar requires 2 variables, with the second a valid file."
679 eerror " getfilevar <VARIABLE> <CONFIGFILE>" 833 eerror " getfilevar <VARIABLE> <CONFIGFILE>"
680 else 834 else
681 workingdir=${PWD} 835 workingdir=${PWD}
682 basefname=$(basename ${2}) 836 basefname=$(basename ${2})
683 basedname=$(dirname ${2}) 837 basedname=$(dirname ${2})
684 xarch=${ARCH}
685 unset ARCH 838 unset ARCH
686 839
687 cd ${basedname} 840 cd ${basedname}
688 echo -e "include ${basefname}\ne:\n\t@echo \$(${1})" | \ 841 echo -e "include ${basefname}\ne:\n\t@echo \$(${1})" | \
689 make ${BUILD_FIXES} -f - e 2>/dev/null 842 make ${BUILD_FIXES} -s -f - e 2>/dev/null
690 cd ${workingdir} 843 cd ${workingdir}
691 844
692 ARCH=${xarch} 845 ARCH=${xarch}
693 fi 846 fi
694}
695
696detect_version() {
697 # this function will detect and set
698 # - OKV: Original Kernel Version (2.6.0/2.6.0-test11)
699 # - KV: Kernel Version (2.6.0-gentoo/2.6.0-test11-gentoo-r1)
700 # - EXTRAVERSION: The additional version appended to OKV (-gentoo/-gentoo-r1)
701
702 if [ -n "${KV_FULL}" ] ;
703 then
704 # we will set this for backwards compatibility.
705 KV=${KV_FULL}
706
707 # we know KV_FULL so lets stop here. but not without resetting S
708 S=${WORKDIR}/linux-${KV_FULL}
709 return
710 fi
711
712 if [ -z "${OKV}" ]
713 then
714 OKV=${PV/_beta/-test}
715 OKV=${OKV/_rc/-rc}
716 OKV=${OKV/_p*/}
717 OKV=${OKV/-r*/}
718 fi
719
720 KV_MAJOR=$(get_version_component_range 1 ${OKV})
721 KV_MINOR=$(get_version_component_range 2 ${OKV})
722 KV_PATCH=$(get_version_component_range 3- ${OKV})
723 KV_PATCH=${KV_PATCH/[-_]*/}
724
725 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
726
727 RELEASE=${PV/${OKV}/}
728 RELEASE=${RELEASE/_beta/}
729 RELEASE=${RELEASE/_rc/-rc}
730 if [ $(kernel_is_2_4) $? == 0 ]
731 then
732 RELEASE=${RELEASE/_pre/-pre}
733 else
734 RELEASE=${RELEASE/_pre/-bk}
735 fi
736 RELEASETYPE=${RELEASE//[0-9]/}
737 EXTRAVERSION="${RELEASE}"
738
739 if [ -n "${K_PREPATCHED}" ]
740 then
741 EXTRAVERSION="${EXTRAVERSION}-${PN/-*/}${PR/r/}"
742 elif [ ${ETYPE} != "headers" ]
743 then
744 [ -z "${K_NOUSENAME}" ] && EXTRAVERSION="${EXTRAVERSION}-${PN/-*/}"
745 [ "${PN/-*/}" == "wolk" ] && EXTRAVERSION="-${PN/-*/}-${PV}"
746 [ "${PR}" != "r0" ] && EXTRAVERSION="${EXTRAVERSION}-${PR}"
747 fi
748
749 KV_FULL=${OKV}${EXTRAVERSION}
750
751 # -rcXX-bkXX pulls are *IMPOSSIBLE* to support within the portage naming convention
752 # these cannot be supported, but the code here can handle it up until this point
753 # and theoretically thereafter.
754
755 if [ "${RELEASETYPE}" == "-rc" -o "${RELEASETYPE}" == "-pre" ]
756 then
757 OKV="${KV_MAJOR}.${KV_MINOR}.$([ $((${KV_PATCH} - 1)) -lt 0 ] && echo ${KV_PATCH} || echo $((${KV_PATCH} - 1)))"
758 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${PV//_/-}.bz2
759 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
760 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${PV//_/-}.bz2"
761 KV_FULL=${PV/[-_]*/}${EXTRAVERSION}
762 fi
763
764 if [ "${RELEASETYPE}" == "-bk" ]
765 then
766 OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
767 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2
768 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
769 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2"
770 KV_FULL=${PV/[-_]*/}${EXTRAVERSION}
771 fi
772
773 if [ "${RELEASETYPE}" == "-rc-bk" ]
774 then
775 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))-${RELEASE/-bk*}"
776 EXTRAVERSION="$([ -n "${RELEASE}" ] && echo ${RELEASE/*-bk/-bk})$([ -n "${K_USENAME}" ] && echo -${PN/-*/})$([ ! "${PR}" == "r0" ] && echo -${PR})"
777
778 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2
779 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
780 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2"
781 KV_FULL=${PV/[-_]*/}${EXTRAVERSION}
782 fi
783
784 S=${WORKDIR}/linux-${KV_FULL}
785 # we will set this for backwards compatibility.
786 KV=${KV_FULL}
787} 847}
788 848
789detect_arch() { 849detect_arch() {
790 # This function sets ARCH_URI and ARCH_PATCH 850 # This function sets ARCH_URI and ARCH_PATCH
791 # with the neccessary info for the arch sepecific compatibility 851 # with the neccessary info for the arch sepecific compatibility
792 # patchsets. 852 # patchsets.
793 853
794 local ALL_ARCH 854 local ALL_ARCH LOOP_ARCH COMPAT_URI i
795 local LOOP_ARCH
796 local COMPAT_URI
797 local i
798 855
799 # COMPAT_URI is the contents of ${ARCH}_URI 856 # COMPAT_URI is the contents of ${ARCH}_URI
800 # ARCH_URI is the URI for all the ${ARCH}_URI patches 857 # ARCH_URI is the URI for all the ${ARCH}_URI patches
801 # ARCH_PATCH is ARCH_URI broken into files for UNIPATCH 858 # ARCH_PATCH is ARCH_URI broken into files for UNIPATCH
802 859
803 ARCH_URI="" 860 ARCH_URI=""
804 ARCH_PATCH="" 861 ARCH_PATCH=""
805 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"
806 863
807 for LOOP_ARCH in ${ALL_ARCH} 864 for LOOP_ARCH in ${ALL_ARCH}; do
808 do
809 COMPAT_URI="${LOOP_ARCH}_URI" 865 COMPAT_URI="${LOOP_ARCH}_URI"
810 COMPAT_URI="${!COMPAT_URI}" 866 COMPAT_URI="${!COMPAT_URI}"
811 867
812 [ -n "${COMPAT_URI}" ] && \ 868 [[ -n ${COMPAT_URI} ]] && \
813 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} )"
814 870
815 if [ "${LOOP_ARCH}" == "$(echo ${ARCH} | tr '[:lower:]' '[:upper:]')" ] 871 if [[ ${LOOP_ARCH} == "$(echo $(tc-arch-kernel) | tr '[:lower:]' '[:upper:]')" ]]; then
816 then
817 for i in ${COMPAT_URI} 872 for i in ${COMPAT_URI}; do
818 do
819 ARCH_PATCH="${ARCH_PATCH} ${DISTDIR}/${i/*\//}" 873 ARCH_PATCH="${ARCH_PATCH} ${DISTDIR}/${i/*\//}"
820 done 874 done
821 fi 875 fi
822 done 876 done
823} 877}
882 done 936 done
883 return 0 937 return 0
884} 938}
885 939
886headers___fix() { 940headers___fix() {
941 # Voodoo to partially fix broken upstream headers.
942 # Issues with this function should go to plasmaroo.
887 sed -i \ 943 sed -i \
888 -e "s/\([ "$'\t'"]\)u8\([ "$'\t'"]\)/\1__u8\2/g;" \
889 -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;" \
890 -e "s/\([ "$'\t'"]\)u32\([ "$'\t'"]\)/\1__u32\2/g;" \ 945 -e 's/ \(u\|s\)\(8\|16\|32\|64\)$/ __\1\2/g' \
891 -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" \
892 "$@" 949 "$@"
893} 950}
894 951
895# common functions 952# common functions
896#============================================================== 953#==============================================================
897kernel-2_src_unpack() { 954kernel-2_src_unpack() {
898 detect_version
899 universal_unpack 955 universal_unpack
900 956
901 [ -n "${UNIPATCH_LIST}" -o -n "${UNIPATCH_LIST_DEFAULT}" ] && \ 957 [[ -n ${UNIPATCH_LIST} || -n ${UNIPATCH_LIST_DEFAULT} || -n ${UNIPATCH_LIST_GENPATCHES} ]] && \
902 unipatch "${UNIPATCH_LIST_DEFAULT} ${UNIPATCH_LIST}" 958 unipatch "${UNIPATCH_LIST_DEFAULT} ${UNIPATCH_LIST_GENPATCHES} ${UNIPATCH_LIST}"
903 959
904 [ -z "${K_NOSETEXTRAVERSION}" ] && \ 960 # allow ebuilds to massage the source tree after patching but before
905 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
906 967
907 kernel_is 2 4 && unpack_2_4 968 kernel_is 2 4 && unpack_2_4
969 kernel_is 2 6 && unpack_2_6
908} 970}
909 971
910kernel-2_src_compile() { 972kernel-2_src_compile() {
911 detect_version
912 cd ${S} 973 cd "${S}"
913 [ "${ETYPE}" == "headers" ] && compile_headers 974 [[ ${ETYPE} == headers ]] && compile_headers
914 [ "${ETYPE}" == "sources" ] && \ 975 [[ ${ETYPE} == sources ]] && \
915 use doc && ! use arm && ! use s390 && compile_manpages 976 use doc && compile_manpages
916} 977}
917 978
918kernel-2_pkg_preinst() { 979kernel-2_pkg_preinst() {
919 detect_version
920 [ "${ETYPE}" == "headers" ] && preinst_headers 980 [[ ${ETYPE} == headers ]] && preinst_headers
921} 981}
922 982
923kernel-2_src_install() { 983kernel-2_src_install() {
924 detect_version
925 install_universal 984 install_universal
926 [ "${ETYPE}" == "headers" ] && install_headers 985 [[ ${ETYPE} == headers ]] && install_headers
927 [ "${ETYPE}" == "sources" ] && install_sources 986 [[ ${ETYPE} == sources ]] && install_sources
928} 987}
929 988
930kernel-2_pkg_postinst() { 989kernel-2_pkg_postinst() {
931 detect_version
932 [ "${ETYPE}" == "headers" ] && postinst_headers 990 [[ ${ETYPE} == headers ]] && postinst_headers
933 [ "${ETYPE}" == "sources" ] && postinst_sources 991 [[ ${ETYPE} == sources ]] && postinst_sources
934} 992}
935 993
936kernel-2_pkg_setup() { 994kernel-2_pkg_setup() {
937 detect_version
938 [ "${ETYPE}" == "headers" ] && setup_headers 995 [[ ${ETYPE} == headers ]] && setup_headers
939
940 # This is to fix some weird portage bug? in stable versions of portage.
941 [ "${ETYPE}" == "sources" ] && echo ">>> Preparing to unpack ..." 996 [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..."
942} 997}
943
944

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

  ViewVC Help
Powered by ViewVC 1.1.20