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

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

  ViewVC Help
Powered by ViewVC 1.1.20