/[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.238 Revision 1.282
1# Copyright 1999-2009 Gentoo Foundation 1# Copyright 1999-2013 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.238 2010/07/30 00:44:59 mpagano Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/kernel-2.eclass,v 1.282 2013/04/17 13:52:17 tomwij 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# Original author: John Mylchreest <johnm@gentoo.org> 8# Original author: John Mylchreest <johnm@gentoo.org>
50# possible. Test ONLY for "1". 50# possible. Test ONLY for "1".
51# K_PREDEBLOBBED - This kernel was already deblobbed elsewhere. 51# K_PREDEBLOBBED - This kernel was already deblobbed elsewhere.
52# If false, either optional deblobbing will be available 52# If false, either optional deblobbing will be available
53# or the license will note the inclusion of freedist 53# or the license will note the inclusion of freedist
54# code. 54# code.
55 55# K_LONGTERM - If set, the eclass will search for the kernel source
56# in the long term directories on the upstream servers
57# as the location has been changed by upstream
56# H_SUPPORTEDARCH - this should be a space separated list of ARCH's which 58# H_SUPPORTEDARCH - this should be a space separated list of ARCH's which
57# can be supported by the headers ebuild 59# can be supported by the headers ebuild
58 60
59# UNIPATCH_LIST - space delimetered list of patches to be applied to the 61# UNIPATCH_LIST - space delimetered list of patches to be applied to the
60# kernel 62# kernel
65# UNIPATCH_DOCS - space delimemeted list of docs to be installed to 67# UNIPATCH_DOCS - space delimemeted list of docs to be installed to
66# the doc dir 68# the doc dir
67# UNIPATCH_STRICTORDER - if this is set places patches into directories of 69# UNIPATCH_STRICTORDER - if this is set places patches into directories of
68# order, so they are applied in the order passed 70# order, so they are applied in the order passed
69 71
72# Changing any other variable in this eclass is not supported; you can request
73# for additional variables to be added by contacting the current maintainer.
74# If you do change them, there is a chance that we will not fix resulting bugs;
75# that of course does not mean we're not willing to help.
76
70inherit eutils toolchain-funcs versionator multilib 77inherit eutils toolchain-funcs versionator multilib
71EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst pkg_postinst 78EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_test src_install pkg_preinst pkg_postinst pkg_postrm
72 79
73# Added by Daniel Ostrow <dostrow@gentoo.org> 80# Added by Daniel Ostrow <dostrow@gentoo.org>
74# This is an ugly hack to get around an issue with a 32-bit userland on ppc64. 81# This is an ugly hack to get around an issue with a 32-bit userland on ppc64.
75# I will remove it when I come up with something more reasonable. 82# I will remove it when I come up with something more reasonable.
76[[ ${PROFILE_ARCH} == "ppc64" ]] && CHOST="powerpc64-${CHOST#*-}" 83[[ ${PROFILE_ARCH} == "ppc64" ]] && CHOST="powerpc64-${CHOST#*-}"
79if [[ ${CTARGET} == ${CHOST} && ${CATEGORY/cross-} != ${CATEGORY} ]]; then 86if [[ ${CTARGET} == ${CHOST} && ${CATEGORY/cross-} != ${CATEGORY} ]]; then
80 export CTARGET=${CATEGORY/cross-} 87 export CTARGET=${CATEGORY/cross-}
81fi 88fi
82 89
83HOMEPAGE="http://www.kernel.org/ http://www.gentoo.org/ ${HOMEPAGE}" 90HOMEPAGE="http://www.kernel.org/ http://www.gentoo.org/ ${HOMEPAGE}"
84[[ -z ${LICENSE} ]] && \
85 LICENSE="GPL-2" 91: ${LICENSE:="GPL-2"}
86 92
87# This is the latest KV_PATCH of the deblob tool available from the 93# This is the latest KV_PATCH of the deblob tool available from the
88# libre-sources upstream. 94# libre-sources upstream. If you bump this, you MUST regenerate the Manifests
89[[ -z ${DEBLOB_MAX_VERSION} ]] && DEBLOB_MAX_VERSION=34 95# for ALL kernel-2 consumer packages where deblob is available.
96: ${DEBLOB_MAX_VERSION:=38}
90 97
91# No need to run scanelf/strip on kernel sources/headers (bug #134453). 98# No need to run scanelf/strip on kernel sources/headers (bug #134453).
92RESTRICT="binchecks strip" 99RESTRICT="binchecks strip"
93 100
94# set LINUX_HOSTCFLAGS if not already set 101# set LINUX_HOSTCFLAGS if not already set
95[[ -z ${LINUX_HOSTCFLAGS} ]] && \
96 LINUX_HOSTCFLAGS="-Wall -Wstrict-prototypes -Os -fomit-frame-pointer -I${S}/include" 102: ${LINUX_HOSTCFLAGS:="-Wall -Wstrict-prototypes -Os -fomit-frame-pointer -I${S}/include"}
97 103
98# debugging functions 104# debugging functions
99#============================================================== 105#==============================================================
100# this function exists only to help debug kernel-2.eclass 106# this function exists only to help debug kernel-2.eclass
101# if you are adding new functionality in, put a call to it 107# if you are adding new functionality in, put a call to it
102# at the start of src_unpack, or during SRC_URI/dep generation. 108# at the start of src_unpack, or during SRC_URI/dep generation.
103debug-print-kernel2-variables() { 109debug-print-kernel2-variables() {
104 for v in PVR CKV OKV KV KV_FULL KV_MAJOR KV_MINOR KV_PATCH RELEASETYPE \ 110 for v in PVR CKV OKV KV KV_FULL KV_MAJOR KV_MINOR KV_PATCH RELEASETYPE \
105 RELEASE UNIPATCH_LIST_DEFAULT UNIPATCH_LIST_GENPATCHES \ 111 RELEASE UNIPATCH_LIST_DEFAULT UNIPATCH_LIST_GENPATCHES \
106 UNIPATCH_LIST S KERNEL_URI ; do 112 UNIPATCH_LIST S KERNEL_URI K_WANT_GENPATCHES ; do
107 debug-print "${v}: ${!v}" 113 debug-print "${v}: ${!v}"
108 done 114 done
109} 115}
110 116
111#Eclass functions only from here onwards ... 117#Eclass functions only from here onwards ...
112#============================================================== 118#==============================================================
113handle_genpatches() { 119handle_genpatches() {
114 local tarball 120 local tarball
115 [[ -z ${K_WANT_GENPATCHES} || -z ${K_GENPATCHES_VER} ]] && return 1 121 [[ -z ${K_WANT_GENPATCHES} || -z ${K_GENPATCHES_VER} ]] && return 1
116 122
123 debug-print "Inside handle_genpatches"
124 local OKV_ARRAY
125 IFS="." read -r -a OKV_ARRAY <<<"${OKV}"
126
127 # for > 3.0 kernels, handle genpatches tarball name
128 # genpatches for 3.0 and 3.0.1 might be named
129 # genpatches-3.0-1.base.tar.xz and genpatches-3.0-2.base.tar.xz
130 # respectively. Handle this.
131
117 for i in ${K_WANT_GENPATCHES} ; do 132 for i in ${K_WANT_GENPATCHES} ; do
133 if [[ ${KV_MAJOR} -ge 3 ]]; then
134 if [[ ${#OKV_ARRAY[@]} -ge 3 ]]; then
135 tarball="genpatches-${KV_MAJOR}.${KV_MINOR}-${K_GENPATCHES_VER}.${i}.tar.xz"
136 else
137 tarball="genpatches-${KV_MAJOR}.${KV_PATCH}-${K_GENPATCHES_VER}.${i}.tar.xz"
138 fi
139 else
118 tarball="genpatches-${OKV}-${K_GENPATCHES_VER}.${i}.tar.bz2" 140 tarball="genpatches-${OKV}-${K_GENPATCHES_VER}.${i}.tar.xz"
141 fi
142 debug-print "genpatches tarball: $tarball"
119 GENPATCHES_URI="${GENPATCHES_URI} mirror://gentoo/${tarball}" 143 GENPATCHES_URI="${GENPATCHES_URI} mirror://gentoo/${tarball}"
120 UNIPATCH_LIST_GENPATCHES="${UNIPATCH_LIST_GENPATCHES} ${DISTDIR}/${tarball}" 144 UNIPATCH_LIST_GENPATCHES="${UNIPATCH_LIST_GENPATCHES} ${DISTDIR}/${tarball}"
121 done 145 done
122} 146}
123 147
124detect_version() { 148detect_version() {
125 # this function will detect and set 149 # this function will detect and set
126 # - OKV: Original Kernel Version (2.6.0/2.6.0-test11) 150 # - OKV: Original Kernel Version (2.6.0/2.6.0-test11)
127 # - KV: Kernel Version (2.6.0-gentoo/2.6.0-test11-gentoo-r1) 151 # - KV: Kernel Version (2.6.0-gentoo/2.6.0-test11-gentoo-r1)
128 # - EXTRAVERSION: The additional version appended to OKV (-gentoo/-gentoo-r1) 152 # - EXTRAVERSION: The additional version appended to OKV (-gentoo/-gentoo-r1)
129 153
130 if [[ -n ${KV_FULL} ]]; then 154 # We've already run, so nothing to do here.
131 # we will set this for backwards compatibility. 155 [[ -n ${KV_FULL} ]] && return 0
132 KV=${KV_FULL}
133
134 # we know KV_FULL so lets stop here. but not without resetting S
135 S=${WORKDIR}/linux-${KV_FULL}
136 return
137 fi
138 156
139 # CKV is used as a comparison kernel version, which is used when 157 # CKV is used as a comparison kernel version, which is used when
140 # PV doesnt reflect the genuine kernel version. 158 # PV doesnt reflect the genuine kernel version.
141 # this gets set to the portage style versioning. ie: 159 # this gets set to the portage style versioning. ie:
142 # CKV=2.6.11_rc4 160 # CKV=2.6.11_rc4
146 OKV=${OKV/_rc/-rc} 164 OKV=${OKV/_rc/-rc}
147 OKV=${OKV/-r*} 165 OKV=${OKV/-r*}
148 OKV=${OKV/_p*} 166 OKV=${OKV/_p*}
149 167
150 KV_MAJOR=$(get_version_component_range 1 ${OKV}) 168 KV_MAJOR=$(get_version_component_range 1 ${OKV})
169 # handle if OKV is X.Y or X.Y.Z (e.g. 3.0 or 3.0.1)
170 local OKV_ARRAY
171 IFS="." read -r -a OKV_ARRAY <<<"${OKV}"
172
173 # if KV_MAJOR >= 3, then we have no more KV_MINOR
174 #if [[ ${KV_MAJOR} -lt 3 ]]; then
175 if [[ ${#OKV_ARRAY[@]} -ge 3 ]]; then
151 KV_MINOR=$(get_version_component_range 2 ${OKV}) 176 KV_MINOR=$(get_version_component_range 2 ${OKV})
152 KV_PATCH=$(get_version_component_range 3 ${OKV}) 177 KV_PATCH=$(get_version_component_range 3 ${OKV})
153
154 if [[ ${KV_MAJOR}${KV_MINOR}${KV_PATCH} -ge 269 ]]; then 178 if [[ ${KV_MAJOR}${KV_MINOR}${KV_PATCH} -ge 269 ]]; then
179 KV_EXTRA=$(get_version_component_range 4- ${OKV})
180 KV_EXTRA=${KV_EXTRA/[-_]*}
181 else
182 KV_PATCH=$(get_version_component_range 3- ${OKV})
183 fi
184 else
185 KV_PATCH=$(get_version_component_range 2 ${OKV})
155 KV_EXTRA=$(get_version_component_range 4- ${OKV}) 186 KV_EXTRA=$(get_version_component_range 3- ${OKV})
156 KV_EXTRA=${KV_EXTRA/[-_]*} 187 KV_EXTRA=${KV_EXTRA/[-_]*}
188 fi
189
190 debug-print "KV_EXTRA is ${KV_EXTRA}"
191
192 KV_PATCH=${KV_PATCH/[-_]*}
193
194 local v n=0 missing
195 #if [[ ${KV_MAJOR} -lt 3 ]]; then
196 if [[ ${#OKV_ARRAY[@]} -ge 3 ]]; then
197 for v in CKV OKV KV_{MAJOR,MINOR,PATCH} ; do
198 [[ -z ${!v} ]] && n=1 && missing="${missing}${v} ";
199 done
157 else 200 else
158 KV_PATCH=$(get_version_component_range 3- ${OKV})
159 fi
160 KV_PATCH=${KV_PATCH/[-_]*}
161
162 local v n=0 missing
163 for v in CKV OKV KV_{MAJOR,MINOR,PATCH} ; do 201 for v in CKV OKV KV_{MAJOR,PATCH} ; do
164 [[ -z ${!v} ]] && n=1 && missing="${missing}${v} "; 202 [[ -z ${!v} ]] && n=1 && missing="${missing}${v} ";
165 done 203 done
204 fi
205
166 [[ $n -eq 1 ]] && \ 206 [[ $n -eq 1 ]] && \
167 eerror "Missing variables: ${missing}" && \ 207 eerror "Missing variables: ${missing}" && \
168 die "Failed to extract kernel version (try explicit CKV in ebuild)!" 208 die "Failed to extract kernel version (try explicit CKV in ebuild)!"
169 unset v n missing 209 unset v n missing
170 210
211# if [[ ${KV_MAJOR} -ge 3 ]]; then
212 if [[ ${#OKV_ARRAY[@]} -lt 3 ]]; then
213 KV_PATCH_ARR=(${KV_PATCH//\./ })
214
215 # at this point 031412, Linus is putting all 3.x kernels in a
216 # 3.x directory, may need to revisit when 4.x is released
217 KERNEL_BASE_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.x"
218
219 [[ -n "${K_LONGTERM}" ]] &&
220 KERNEL_BASE_URI="${KERNEL_BASE_URI}/longterm/v${KV_MAJOR}.${KV_PATCH_ARR}"
221 else
222 #KERNEL_BASE_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.0"
171 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2" 223 #KERNEL_BASE_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}"
224 if [[ ${KV_MAJOR} -ge 3 ]]; then
225 KERNEL_BASE_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.x"
226 else
227 KERNEL_BASE_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}"
228 fi
229
230 [[ -n "${K_LONGTERM}" ]] &&
231 #KERNEL_BASE_URI="${KERNEL_BASE_URI}/longterm"
232 KERNEL_BASE_URI="${KERNEL_BASE_URI}/longterm/v${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
233 fi
234
235 debug-print "KERNEL_BASE_URI is ${KERNEL_BASE_URI}"
236
237 if [[ ${#OKV_ARRAY[@]} -ge 3 ]] && [[ ${KV_MAJOR} -ge 3 ]]; then
238 # handle non genpatch using sources correctly
239 if [[ -z ${K_WANT_GENPATCHES} && -z ${K_GENPATCHES_VER} && ${KV_PATCH} -gt 0 ]]; then
240 KERNEL_URI="${KERNEL_BASE_URI}/patch-${OKV}.xz"
241 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV}.xz"
242 fi
243 KERNEL_URI="${KERNEL_URI} ${KERNEL_BASE_URI}/linux-${KV_MAJOR}.${KV_MINOR}.tar.xz"
244 else
245 KERNEL_URI="${KERNEL_BASE_URI}/linux-${OKV}.tar.xz"
246 fi
172 247
173 RELEASE=${CKV/${OKV}} 248 RELEASE=${CKV/${OKV}}
174 RELEASE=${RELEASE/_beta} 249 RELEASE=${RELEASE/_beta}
175 RELEASE=${RELEASE/_rc/-rc} 250 RELEASE=${RELEASE/_rc/-rc}
176 RELEASE=${RELEASE/_pre/-pre} 251 RELEASE=${RELEASE/_pre/-pre}
177 # We cannot trivally call kernel_is here, because it calls us to detect the 252 # We cannot trivally call kernel_is here, because it calls us to detect the
178 # version 253 # version
179 #kernel_is ge 2 6 && RELEASE=${RELEASE/-pre/-git} 254 #kernel_is ge 2 6 && RELEASE=${RELEASE/-pre/-git}
180 [ $(($KV_MAJOR * 1000 + $KV_MINOR)) -ge 2006 ] && RELEASE=${RELEASE/-pre/-git} 255 [ $(($KV_MAJOR * 1000 + ${KV_MINOR:-0})) -ge 2006 ] && RELEASE=${RELEASE/-pre/-git}
181 RELEASETYPE=${RELEASE//[0-9]} 256 RELEASETYPE=${RELEASE//[0-9]}
182 257
183 # Now we know that RELEASE is the -rc/-git 258 # Now we know that RELEASE is the -rc/-git
184 # and RELEASETYPE is the same but with its numerics stripped 259 # and RELEASETYPE is the same but with its numerics stripped
185 # we can work on better sorting EXTRAVERSION. 260 # we can work on better sorting EXTRAVERSION.
186 # first of all, we add the release 261 # first of all, we add the release
187 EXTRAVERSION="${RELEASE}" 262 EXTRAVERSION="${RELEASE}"
188 debug-print "0 EXTRAVERSION:${EXTRAVERSION}" 263 debug-print "0 EXTRAVERSION:${EXTRAVERSION}"
189 [[ -n ${KV_EXTRA} ]] && EXTRAVERSION=".${KV_EXTRA}${EXTRAVERSION}" 264 [[ -n ${KV_EXTRA} ]] && [[ ${KV_MAJOR} -lt 3 ]] && EXTRAVERSION=".${KV_EXTRA}${EXTRAVERSION}"
190 265
191 debug-print "1 EXTRAVERSION:${EXTRAVERSION}" 266 debug-print "1 EXTRAVERSION:${EXTRAVERSION}"
192 if [[ -n "${K_NOUSEPR}" ]]; then 267 if [[ -n "${K_NOUSEPR}" ]]; then
193 # Don't add anything based on PR to EXTRAVERSION 268 # Don't add anything based on PR to EXTRAVERSION
194 debug-print "1.0 EXTRAVERSION:${EXTRAVERSION}" 269 debug-print "1.0 EXTRAVERSION:${EXTRAVERSION}"
212 debug-print "2 EXTRAVERSION:${EXTRAVERSION}" 287 debug-print "2 EXTRAVERSION:${EXTRAVERSION}"
213 288
214 # The only messing around which should actually effect this is for KV_EXTRA 289 # The only messing around which should actually effect this is for KV_EXTRA
215 # since this has to limit OKV to MAJ.MIN.PAT and strip EXTRA off else 290 # since this has to limit OKV to MAJ.MIN.PAT and strip EXTRA off else
216 # KV_FULL evaluates to MAJ.MIN.PAT.EXT.EXT after EXTRAVERSION 291 # KV_FULL evaluates to MAJ.MIN.PAT.EXT.EXT after EXTRAVERSION
292
217 if [[ -n ${KV_EXTRA} ]]; then 293 if [[ -n ${KV_EXTRA} ]]; then
294 if [[ -n ${KV_MINOR} ]]; then
218 OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}" 295 OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
219 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/patch-${CKV}.bz2 296 else
220 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}.tar.bz2" 297 OKV="${KV_MAJOR}.${KV_PATCH}"
298 fi
299 KERNEL_URI="${KERNEL_BASE_URI}/patch-${CKV}.xz
300 ${KERNEL_BASE_URI}/linux-${OKV}.tar.xz"
221 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV}.bz2" 301 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV}.xz"
222 fi 302 fi
223 303
224 # We need to set this using OKV, but we need to set it before we do any 304 # We need to set this using OKV, but we need to set it before we do any
225 # messing around with OKV based on RELEASETYPE 305 # messing around with OKV based on RELEASETYPE
226 KV_FULL=${OKV}${EXTRAVERSION} 306 KV_FULL=${OKV}${EXTRAVERSION}
231 311
232 # -rc-git pulls can be achieved by specifying CKV 312 # -rc-git pulls can be achieved by specifying CKV
233 # for example: 313 # for example:
234 # CKV="2.6.11_rc3_pre2" 314 # CKV="2.6.11_rc3_pre2"
235 # will pull: 315 # will pull:
236 # linux-2.6.10.tar.bz2 & patch-2.6.11-rc3.bz2 & patch-2.6.11-rc3-git2.bz2 316 # linux-2.6.10.tar.xz & patch-2.6.11-rc3.xz & patch-2.6.11-rc3-git2.xz
237 317
318 if [[ ${KV_MAJOR}${KV_MINOR} -eq 26 ]]; then
319
238 if [[ ${RELEASETYPE} == -rc ]] || [[ ${RELEASETYPE} == -pre ]]; then 320 if [[ ${RELEASETYPE} == -rc ]] || [[ ${RELEASETYPE} == -pre ]]; then
239 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))" 321 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))"
240 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${CKV//_/-}.bz2 322 KERNEL_URI="${KERNEL_BASE_URI}/testing/patch-${CKV//_/-}.xz
241 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2" 323 ${KERNEL_BASE_URI}/linux-${OKV}.tar.xz"
242 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV//_/-}.bz2" 324 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV//_/-}.xz"
243 fi 325 fi
244 326
245 if [[ ${RELEASETYPE} == -git ]]; then 327 if [[ ${RELEASETYPE} == -git ]]; then
246 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${OKV}${RELEASE}.bz2 328 KERNEL_URI="${KERNEL_BASE_URI}/snapshots/patch-${OKV}${RELEASE}.xz
247 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2" 329 ${KERNEL_BASE_URI}/linux-${OKV}.tar.xz"
248 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${OKV}${RELEASE}.bz2" 330 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${OKV}${RELEASE}.xz"
249 fi 331 fi
250 332
251 if [[ ${RELEASETYPE} == -rc-git ]]; then 333 if [[ ${RELEASETYPE} == -rc-git ]]; then
252 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))" 334 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))"
253 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2 335 KERNEL_URI="${KERNEL_BASE_URI}/snapshots/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.xz
254 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.bz2 336 ${KERNEL_BASE_URI}/testing/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.xz
255 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2" 337 ${KERNEL_BASE_URI}/linux-${OKV}.tar.xz"
338
256 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.bz2 ${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2" 339 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.xz ${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.xz"
257 fi 340 fi
341 else
342 if [[ ${RELEASETYPE} == -rc ]] || [[ ${RELEASETYPE} == -pre ]]; then
343 if [[ ${KV_MAJOR}${KV_PATCH} -eq 30 ]]; then
344 OKV="2.6.39"
345 else
346 KV_PATCH_ARR=(${KV_PATCH//\./ })
347 OKV="${KV_MAJOR}.$((${KV_PATCH_ARR} - 1))"
348 fi
349 KERNEL_URI="${KERNEL_BASE_URI}/testing/patch-${CKV//_/-}.xz
350 ${KERNEL_BASE_URI}/linux-${OKV}.tar.xz"
351 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV//_/-}.xz"
352 fi
353
354 if [[ ${RELEASETYPE} == -git ]]; then
355 KERNEL_URI="${KERNEL_BASE_URI}/snapshots/patch-${OKV}${RELEASE}.xz
356 ${KERNEL_BASE_URI}/linux-${OKV}.tar.xz"
357 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${OKV}${RELEASE}.xz"
358 fi
359
360 if [[ ${RELEASETYPE} == -rc-git ]]; then
361 if [[ ${KV_MAJOR}${KV_PATCH} -eq 30 ]]; then
362 OKV="2.6.39"
363 else
364 KV_PATCH_ARR=(${KV_PATCH//\./ })
365 OKV="${KV_MAJOR}.$((${KV_PATCH_ARR} - 1))"
366 fi
367 KERNEL_URI="${KERNEL_BASE_URI}/snapshots/patch-${KV_MAJOR}.${KV_PATCH}${RELEASE}.xz
368 ${KERNEL_BASE_URI}/testing/patch-${KV_MAJOR}.${KV_PATCH}${RELEASE/-git*}.xz
369 ${KERNEL_BASE_URI}/linux-${OKV}.tar.xz"
370
371 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${KV_MAJOR}.${KV_PATCH}${RELEASE/-git*}.xz ${DISTDIR}/patch-${KV_MAJOR}.${KV_PATCH}${RELEASE}.xz"
372 fi
373
374
375 fi
376
258 377
259 debug-print-kernel2-variables 378 debug-print-kernel2-variables
260 379
261 handle_genpatches 380 handle_genpatches
262} 381}
263 382
383# Note: duplicated in linux-info.eclass
264kernel_is() { 384kernel_is() {
265 # ALL of these should be set before we can safely continue this function. 385 # ALL of these should be set before we can safely continue this function.
266 # some of the sources have in the past had only one set. 386 # some of the sources have in the past had only one set.
267 local v n=0 387 local v n=0
268 for v in OKV KV_{MAJOR,MINOR,PATCH} ; do [[ -z ${!v} ]] && n=1 ; done 388 for v in OKV KV_{MAJOR,MINOR,PATCH} ; do [[ -z ${!v} ]] && n=1 ; done
269 [[ $n -eq 1 ]] && detect_version 389 [[ $n -eq 1 ]] && detect_version
270 unset v n 390 unset v n
271 391
272 # Now we can continue 392 # Now we can continue
273 local operator test value x=0 y=0 z=0 393 local operator test value
274 394
275 case ${1} in 395 case ${1#-} in
276 lt) operator="-lt"; shift;; 396 lt) operator="-lt"; shift;;
277 gt) operator="-gt"; shift;; 397 gt) operator="-gt"; shift;;
278 le) operator="-le"; shift;; 398 le) operator="-le"; shift;;
279 ge) operator="-ge"; shift;; 399 ge) operator="-ge"; shift;;
280 eq) operator="-eq"; shift;; 400 eq) operator="-eq"; shift;;
281 *) operator="-eq";; 401 *) operator="-eq";;
282 esac 402 esac
283
284 for x in ${@}; do
285 for((y=0; y<$((3 - ${#x})); y++)); do value="${value}0"; done
286 value="${value}${x}"
287 z=$((${z} + 1))
288
289 case ${z} in
290 1) for((y=0; y<$((3 - ${#KV_MAJOR})); y++)); do test="${test}0"; done;
291 test="${test}${KV_MAJOR}";;
292 2) for((y=0; y<$((3 - ${#KV_MINOR})); y++)); do test="${test}0"; done;
293 test="${test}${KV_MINOR}";;
294 3) for((y=0; y<$((3 - ${#KV_PATCH})); y++)); do test="${test}0"; done;
295 test="${test}${KV_PATCH}";;
296 *) die "Error in kernel-2_kernel_is(): Too many parameters.";; 403 [[ $# -gt 3 ]] && die "Error in kernel-2_kernel_is(): too many parameters"
297 esac
298 done
299 404
300 [ ${test} ${operator} ${value} ] && return 0 || return 1 405 : $(( test = (KV_MAJOR << 16) + (KV_MINOR << 8) + KV_PATCH ))
406 : $(( value = (${1:-${KV_MAJOR}} << 16) + (${2:-${KV_MINOR}} << 8) + ${3:-${KV_PATCH}} ))
407 [ ${test} ${operator} ${value} ]
301} 408}
302 409
303kernel_is_2_4() { 410kernel_is_2_4() {
304 kernel_is 2 4 411 kernel_is 2 4
305} 412}
311# Capture the sources type and set DEPENDs 418# Capture the sources type and set DEPENDs
312if [[ ${ETYPE} == sources ]]; then 419if [[ ${ETYPE} == sources ]]; then
313 DEPEND="!build? ( sys-apps/sed 420 DEPEND="!build? ( sys-apps/sed
314 >=sys-devel/binutils-2.11.90.0.31 )" 421 >=sys-devel/binutils-2.11.90.0.31 )"
315 RDEPEND="!build? ( >=sys-libs/ncurses-5.2 422 RDEPEND="!build? ( >=sys-libs/ncurses-5.2
316 sys-devel/make )" 423 sys-devel/make
424 dev-lang/perl
425 sys-devel/bc )"
317 PDEPEND="!build? ( virtual/dev-manager )" 426 PDEPEND="!build? ( virtual/dev-manager )"
318 427
319 PROVIDE="virtual/linux-sources"
320 kernel_is gt 2 4 && PROVIDE="${PROVIDE} virtual/alsa"
321
322 SLOT="${PVR}" 428 SLOT="${PVR}"
323 DESCRIPTION="Sources for the ${KV_MAJOR}.${KV_MINOR} linux kernel" 429 DESCRIPTION="Sources based on the Linux Kernel."
324 IUSE="symlink build" 430 IUSE="symlink build"
325 431
326 # Bug #266157, deblob for libre support 432 # Bug #266157, deblob for libre support
327 if [[ -z ${K_PREDEBLOBBED} ]] ; then 433 if [[ -z ${K_PREDEBLOBBED} ]] ; then
328 if [[ -z ${K_DEBLOB_AVAILABLE} ]] ; then 434 # Bug #359865, force a call to detect_version if needed
329 kernel_is ge 2 6 27 && \ 435 kernel_is ge 2 6 27 && \
436 [[ -z "${K_DEBLOB_AVAILABLE}" ]] && \
330 kernel_is le 2 6 ${DEBLOB_MAX_VERSION} && \ 437 kernel_is le 2 6 ${DEBLOB_MAX_VERSION} && \
331 K_DEBLOB_AVAILABLE=1 438 K_DEBLOB_AVAILABLE=1
332 fi
333 if [[ ${K_DEBLOB_AVAILABLE} == "1" ]] ; then 439 if [[ ${K_DEBLOB_AVAILABLE} == "1" ]] ; then
334 IUSE="${IUSE} deblob" 440 IUSE="${IUSE} deblob"
335 # Reflect that kernels contain firmware blobs unless otherwise 441 # Reflect that kernels contain firmware blobs unless otherwise
336 # stripped 442 # stripped
337 LICENSE="${LICENSE} !deblob? ( freedist )" 443 LICENSE="${LICENSE} !deblob? ( freedist )"
338 444
445 if [[ -n KV_MINOR ]]; then
339 DEBLOB_PV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}" 446 DEBLOB_PV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
447 else
448 DEBLOB_PV="${KV_MAJOR}.${KV_PATCH}"
449 fi
450
451 if [[ ${KV_MAJOR} -ge 3 ]]; then
452 DEBLOB_PV="${KV_MAJOR}.${KV_MINOR}"
453 fi
454
340 DEBLOB_A="deblob-${DEBLOB_PV}" 455 DEBLOB_A="deblob-${DEBLOB_PV}"
456 DEBLOB_CHECK_A="deblob-check-${DEBLOB_PV}"
341 DEBLOB_HOMEPAGE="http://www.fsfla.org/svnwiki/selibre/linux-libre/" 457 DEBLOB_HOMEPAGE="http://www.fsfla.org/svnwiki/selibre/linux-libre/"
458 DEBLOB_URI_PATH="download/releases/LATEST-${DEBLOB_PV}.N"
459 if ! has "${EAPI:-0}" 0 1 ; then
460 DEBLOB_CHECK_URI="${DEBLOB_HOMEPAGE}/${DEBLOB_URI_PATH}/deblob-check -> ${DEBLOB_CHECK_A}"
461 else
462 DEBLOB_CHECK_URI="mirror://gentoo/${DEBLOB_CHECK_A}"
463 fi
464 DEBLOB_URI="${DEBLOB_HOMEPAGE}/${DEBLOB_URI_PATH}/${DEBLOB_A}"
342 HOMEPAGE="${HOMEPAGE} ${DEBLOB_HOMEPAGE}" 465 HOMEPAGE="${HOMEPAGE} ${DEBLOB_HOMEPAGE}"
343 466
467 DEPEND+=" deblob? ( =dev-lang/python-2* )"
344 KERNEL_URI="${KERNEL_URI} 468 KERNEL_URI="${KERNEL_URI}
345 deblob? ( 469 deblob? (
346 ${DEBLOB_HOMEPAGE}/download/releases/LATEST-${DEBLOB_PV}.N/${DEBLOB_A} 470 ${DEBLOB_URI}
471 ${DEBLOB_CHECK_URI}
347 )" 472 )"
348 else 473 else
349 # We have no way to deblob older kernels, so just mark them as 474 # We have no way to deblob older kernels, so just mark them as
350 # tainted with non-libre materials. 475 # tainted with non-libre materials.
351 LICENSE="${LICENSE} freedist" 476 LICENSE="${LICENSE} freedist"
357 482
358 # Since we should NOT honour KBUILD_OUTPUT in headers 483 # Since we should NOT honour KBUILD_OUTPUT in headers
359 # lets unset it here. 484 # lets unset it here.
360 unset KBUILD_OUTPUT 485 unset KBUILD_OUTPUT
361 486
362 if [[ ${CTARGET} = ${CHOST} ]]; then
363 DEPEND="!virtual/os-headers"
364 PROVIDE="virtual/os-headers"
365 SLOT="0" 487 SLOT="0"
366 else
367 SLOT="${CTARGET}"
368 fi
369else 488else
370 eerror "Unknown ETYPE=\"${ETYPE}\", must be \"sources\" or \"headers\"" 489 eerror "Unknown ETYPE=\"${ETYPE}\", must be \"sources\" or \"headers\""
371 die "Unknown ETYPE=\"${ETYPE}\", must be \"sources\" or \"headers\"" 490 die "Unknown ETYPE=\"${ETYPE}\", must be \"sources\" or \"headers\""
372fi 491fi
373 492
429 || die "make include/linux/version.h failed" 548 || die "make include/linux/version.h failed"
430 rm -f .config >/dev/null 549 rm -f .config >/dev/null
431} 550}
432 551
433universal_unpack() { 552universal_unpack() {
553 debug-print "Inside universal_unpack"
554
555 local OKV_ARRAY
556 IFS="." read -r -a OKV_ARRAY <<<"${OKV}"
557
434 cd "${WORKDIR}" 558 cd "${WORKDIR}"
559 if [[ ${#OKV_ARRAY[@]} -ge 3 ]] && [[ ${KV_MAJOR} -ge 3 ]]; then
560 unpack linux-${KV_MAJOR}.${KV_MINOR}.tar.xz
561 else
435 unpack linux-${OKV}.tar.bz2 562 unpack linux-${OKV}.tar.xz
563 fi
564
436 if [[ -d "linux" ]]; then 565 if [[ -d "linux" ]]; then
566 debug-print "Moving linux to linux-${KV_FULL}"
437 mv linux linux-${KV_FULL} \ 567 mv linux linux-${KV_FULL} \
438 || die "Unable to move source tree to ${KV_FULL}." 568 || die "Unable to move source tree to ${KV_FULL}."
439 elif [[ "${OKV}" != "${KV_FULL}" ]]; then 569 elif [[ "${OKV}" != "${KV_FULL}" ]]; then
570 if [[ ${#OKV_ARRAY[@]} -ge 3 ]] && [[ ${KV_MAJOR} -ge 3 ]] &&
571 [[ "${ETYPE}" = "sources" ]]; then
572 debug-print "moving linux-${KV_MAJOR}.${KV_MINOR} to linux-${KV_FULL} "
573 mv linux-${KV_MAJOR}.${KV_MINOR} linux-${KV_FULL} \
574 || die "Unable to move source tree to ${KV_FULL}."
575 else
576 debug-print "moving linux-${OKV} to linux-${KV_FULL} "
440 mv linux-${OKV} linux-${KV_FULL} \ 577 mv linux-${OKV} linux-${KV_FULL} \
578 || die "Unable to move source tree to ${KV_FULL}."
579 fi
580 elif [[ ${#OKV_ARRAY[@]} -ge 3 ]] && [[ ${KV_MAJOR} -ge 3 ]]; then
581 mv linux-${KV_MAJOR}.${KV_MINOR} linux-${KV_FULL} \
441 || die "Unable to move source tree to ${KV_FULL}." 582 || die "Unable to move source tree to ${KV_FULL}."
442 fi 583 fi
443 cd "${S}" 584 cd "${S}"
444 585
445 # remove all backup files 586 # remove all backup files
446 find . -iname "*~" -exec rm {} \; 2> /dev/null 587 find . -iname "*~" -exec rm {} \; 2> /dev/null
447 588
448 # fix a problem on ppc where TOUT writes to /usr/src/linux breaking sandbox
449 # only do this for kernel < 2.6.27 since this file does not exist in later
450 # kernels
451 if [[ ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} < 2.6.27 ]]
452 then
453 sed -i \
454 -e 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
455 "${S}"/arch/ppc/Makefile
456 else
457 sed -i \
458 -e 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
459 "${S}"/arch/powerpc/Makefile
460 fi
461} 589}
462 590
463unpack_set_extraversion() { 591unpack_set_extraversion() {
464 cd "${S}" 592 cd "${S}"
465 sed -i -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile 593 sed -i -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile
542} 670}
543 671
544# install functions 672# install functions
545#============================================================== 673#==============================================================
546install_universal() { 674install_universal() {
547 #fix silly permissions in tarball 675 # Fix silly permissions in tarball
548 cd "${WORKDIR}" 676 cd "${WORKDIR}"
549 chown -R root:0 * >& /dev/null 677 chown -R 0:0 * >& /dev/null
550 chmod -R a+r-w+X,u+w * 678 chmod -R a+r-w+X,u+w *
551 cd ${OLDPWD} 679 cd ${OLDPWD}
552} 680}
553 681
554install_headers() { 682install_headers() {
566 return 0 694 return 0
567 fi 695 fi
568 696
569 # Do not use "linux/*" as that can cause problems with very long 697 # Do not use "linux/*" as that can cause problems with very long
570 # $S values where the cmdline to cp is too long 698 # $S values where the cmdline to cp is too long
571 cd "${S}" 699 pushd "${S}" >/dev/null
572 dodir ${ddir}/linux 700 dodir ${ddir}/linux
573 cp -pPR "${S}"/include/linux "${D}"/${ddir}/ || die 701 cp -pPR "${S}"/include/linux "${D}"/${ddir}/ || die
574 rm -rf "${D}"/${ddir}/linux/modules 702 rm -rf "${D}"/${ddir}/linux/modules
575 703
576 # Handle multilib headers and crap
577 local multi_dirs="" multi_defs=""
578 case $(tc-arch-kernel) in
579 sparc64)
580 multi_dirs="sparc sparc64"
581 multi_defs="!__arch64__ __arch64__"
582 ;;
583 x86_64)
584 multi_dirs="i386 x86_64"
585 multi_defs="__i386__ __x86_64__"
586 ;;
587 ppc64)
588 multi_dirs="ppc ppc64"
589 multi_defs="!__powerpc64__ __powerpc64__"
590 ;;
591 s390x)
592 multi_dirs="s390 s390x"
593 multi_defs="!__s390x__ __s390x__"
594 ;;
595 arm)
596 dodir ${ddir}/asm 704 dodir ${ddir}/asm
597 cp -pPR "${S}"/include/asm/* "${D}"/${ddir}/asm 705 cp -pPR "${S}"/include/asm/* "${D}"/${ddir}/asm
598 [[ ! -e ${D}/${ddir}/asm/arch ]] && ln -sf arch-ebsa285 "${D}"/${ddir}/asm/arch
599 [[ ! -e ${D}/${ddir}/asm/proc ]] && ln -sf proc-armv "${D}"/${ddir}/asm/proc
600 ;;
601 powerpc)
602 dodir ${ddir}/asm
603 cp -pPR "${S}"/include/asm/* "${D}"/${ddir}/asm
604 if [[ -e "${S}"/include/asm-ppc ]] ; then
605 dodir ${ddir}/asm-ppc
606 cp -pPR "${S}"/include/asm-ppc/* "${D}"/${ddir}/asm-ppc
607 fi
608 ;;
609 *)
610 dodir ${ddir}/asm
611 cp -pPR "${S}"/include/asm/* "${D}"/${ddir}/asm
612 ;;
613 esac
614 if [[ -n ${multi_dirs} ]] ; then
615 local d ml_inc=""
616 for d in ${multi_dirs} ; do
617 dodir ${ddir}/asm-${d}
618 cp -pPR "${S}"/include/asm-${d}/* "${D}"/${ddir}/asm-${d}/ || die "cp asm-${d} failed"
619 706
620 ml_inc="${ml_inc} ${multi_defs%% *}:${ddir}/asm-${d}"
621 multi_defs=${multi_defs#* }
622 done
623 create_ml_includes ${ddir}/asm ${ml_inc}
624 fi
625
626 if kernel_is 2 6; then 707 if kernel_is 2 6 ; then
627 dodir ${ddir}/asm-generic 708 dodir ${ddir}/asm-generic
628 cp -pPR "${S}"/include/asm-generic/* "${D}"/${ddir}/asm-generic 709 cp -pPR "${S}"/include/asm-generic/* "${D}"/${ddir}/asm-generic
629 fi 710 fi
630 711
631 # clean up 712 # clean up
632 find "${D}" -name '*.orig' -exec rm -f {} \; 713 find "${D}" -name '*.orig' -exec rm -f {} \;
633 714
634 cd ${OLDPWD} 715 popd >/dev/null
635} 716}
636 717
637install_sources() { 718install_sources() {
638 local file 719 local file
639 720
658 echo "Please check the ebuild ChangeLog for more details." \ 739 echo "Please check the ebuild ChangeLog for more details." \
659 > "${S}"/patches.txt 740 > "${S}"/patches.txt
660 fi 741 fi
661 742
662 mv ${WORKDIR}/linux* "${D}"/usr/src 743 mv ${WORKDIR}/linux* "${D}"/usr/src
744
745 if [[ -z ${UNIPATCH_DOCS} ]] ; then
746 dodoc ${UNIPATCH_DOCS}
747 fi
663} 748}
664 749
665# pkg_preinst functions 750# pkg_preinst functions
666#============================================================== 751#==============================================================
667preinst_headers() { 752preinst_headers() {
741 826
742 # warn sparc users that they need to do cross-compiling with >= 2.6.25(bug #214765) 827 # warn sparc users that they need to do cross-compiling with >= 2.6.25(bug #214765)
743 KV_MAJOR=$(get_version_component_range 1 ${OKV}) 828 KV_MAJOR=$(get_version_component_range 1 ${OKV})
744 KV_MINOR=$(get_version_component_range 2 ${OKV}) 829 KV_MINOR=$(get_version_component_range 2 ${OKV})
745 KV_PATCH=$(get_version_component_range 3 ${OKV}) 830 KV_PATCH=$(get_version_component_range 3 ${OKV})
746 if [[ "$(tc-arch)" = "sparc" ]] \ 831 if [[ "$(tc-arch)" = "sparc" ]]; then
747 && [[ ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} > 2.6.24 ]] 832 if [[ ${KV_MAJOR} -ge 3 || ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} > 2.6.24 ]]
748 then 833 then
749 echo 834 echo
750 elog "NOTE: Since 2.6.25 the kernel Makefile has changed in a way that" 835 elog "NOTE: Since 2.6.25 the kernel Makefile has changed in a way that"
751 elog "you now need to do" 836 elog "you now need to do"
752 elog " make CROSS_COMPILE=sparc64-unknown-linux-gnu-" 837 elog " make CROSS_COMPILE=sparc64-unknown-linux-gnu-"
753 elog "instead of just" 838 elog "instead of just"
754 elog " make" 839 elog " make"
755 elog "to compile the kernel. For more information please browse to" 840 elog "to compile the kernel. For more information please browse to"
756 elog "https://bugs.gentoo.org/show_bug.cgi?id=214765" 841 elog "https://bugs.gentoo.org/show_bug.cgi?id=214765"
757 echo 842 echo
843 fi
758 fi 844 fi
759} 845}
760 846
761# pkg_setup functions 847# pkg_setup functions
762#============================================================== 848#==============================================================
859 do z="${z}0"; 945 do z="${z}0";
860 done 946 done
861 PATCH_ORDER="${z}${STRICT_COUNT}" 947 PATCH_ORDER="${z}${STRICT_COUNT}"
862 948
863 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/ 949 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/
864 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${PATCH_ORDER}/${x}.patch${PATCH_LEVEL}) 950 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${PATCH_ORDER}/${x}.patch${PATCH_LEVEL}) || die "uncompressing patch failed"
865 else 951 else
866 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL}) 952 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL}) || die "uncompressing patch failed"
867 fi 953 fi
868 fi 954 fi
869 fi 955 fi
870 done 956 done
871 957
877 done 963 done
878 964
879 # do not apply fbcondecor patch to sparc/sparc64 as it breaks boot 965 # do not apply fbcondecor patch to sparc/sparc64 as it breaks boot
880 # bug #272676 966 # bug #272676
881 if [[ "$(tc-arch)" = "sparc" || "$(tc-arch)" = "sparc64" ]]; then 967 if [[ "$(tc-arch)" = "sparc" || "$(tc-arch)" = "sparc64" ]]; then
882 if [[ ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} > 2.6.28 ]]; then 968 if [[ ${KV_MAJOR} -ge 3 || ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} > 2.6.28 ]]; then
883 UNIPATCH_DROP="${UNIPATCH_DROP} *_fbcondecor-0.9.6.patch" 969 UNIPATCH_DROP="${UNIPATCH_DROP} *_fbcondecor-0.9.6.patch"
884 echo 970 echo
885 ewarn "fbcondecor currently prevents sparc/sparc64 from booting" 971 ewarn "fbcondecor currently prevents sparc/sparc64 from booting"
886 ewarn "for kernel versions >= 2.6.29. Removing fbcondecor patch." 972 ewarn "for kernel versions >= 2.6.29. Removing fbcondecor patch."
887 ewarn "See https://bugs.gentoo.org/show_bug.cgi?id=272676 for details" 973 ewarn "See https://bugs.gentoo.org/show_bug.cgi?id=272676 for details"
906 [ -z ${i/*.patch*/} ] && PATCH_DEPTH=${i/*.patch/} 992 [ -z ${i/*.patch*/} ] && PATCH_DEPTH=${i/*.patch/}
907 #[ -z ${i/*.diff*/} ] && PATCH_DEPTH=${i/*.diff/} 993 #[ -z ${i/*.diff*/} ] && PATCH_DEPTH=${i/*.diff/}
908 994
909 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi 995 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi
910 996
911 ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)"
912 while [ ${PATCH_DEPTH} -lt 5 ]; do 997 while [ ${PATCH_DEPTH} -lt 5 ]; do
913 echo "Attempting Dry-run:" >> ${STDERR_T} 998 echo "Attempting Dry-run:" >> ${STDERR_T}
914 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i}" >> ${STDERR_T} 999 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i}" >> ${STDERR_T}
915 echo "=======================================================" >> ${STDERR_T} 1000 echo "=======================================================" >> ${STDERR_T}
916 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then 1001 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then
1002 ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH})"
917 echo "Attempting patch:" > ${STDERR_T} 1003 echo "Attempting patch:" > ${STDERR_T}
918 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i}" >> ${STDERR_T} 1004 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i}" >> ${STDERR_T}
919 echo "=======================================================" >> ${STDERR_T} 1005 echo "=======================================================" >> ${STDERR_T}
920 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then 1006 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then
921 eend 0 1007 eend 0
924 else 1010 else
925 eend 1 1011 eend 1
926 eerror "Failed to apply patch ${i/*\//}" 1012 eerror "Failed to apply patch ${i/*\//}"
927 eerror "Please attach ${STDERR_T} to any bug you may post." 1013 eerror "Please attach ${STDERR_T} to any bug you may post."
928 eshopts_pop 1014 eshopts_pop
929 die "Failed to apply ${i/*\//}" 1015 die "Failed to apply ${i/*\//} on patch depth ${PATCH_DEPTH}."
930 fi 1016 fi
931 else 1017 else
932 PATCH_DEPTH=$((${PATCH_DEPTH} + 1)) 1018 PATCH_DEPTH=$((${PATCH_DEPTH} + 1))
933 fi 1019 fi
934 done 1020 done
935 if [ ${PATCH_DEPTH} -eq 5 ]; then 1021 if [ ${PATCH_DEPTH} -eq 5 ]; then
936 eend 1 1022 eerror "Failed to dry-run patch ${i/*\//}"
937 eerror "Please attach ${STDERR_T} to any bug you may post." 1023 eerror "Please attach ${STDERR_T} to any bug you may post."
938 eshopts_pop 1024 eshopts_pop
939 die "Unable to dry-run patch." 1025 die "Unable to dry-run patch on any patch depth lower than 5."
940 fi 1026 fi
941 done 1027 done
942 done 1028 done
943 1029
944 # This is a quick, and kind of nasty hack to deal with UNIPATCH_DOCS which 1030 # When genpatches is used, we want to install 0000_README which documents
945 # sit in KPATCH_DIR's. This is handled properly in the unipatch rewrite, 1031 # the patches that were used; such that the user can see them, bug #301478.
946 # which is why I'm not taking too much time over this. 1032 if [[ ! -z ${K_WANT_GENPATCHES} ]] ; then
1033 UNIPATCH_DOCS="${UNIPATCH_DOCS} 0000_README"
1034 fi
1035
1036 # When files listed in UNIPATCH_DOCS are found in KPATCH_DIR's, we copy it
1037 # to the temporary directory and remember them in UNIPATCH_DOCS to install
1038 # them during the install phase.
947 local tmp 1039 local tmp
1040 for x in ${KPATCH_DIR}; do
948 for i in ${UNIPATCH_DOCS}; do 1041 for i in ${UNIPATCH_DOCS}; do
949 tmp="${tmp} ${i//*\/}" 1042 if [[ -f "${x}/${i}" ]] ; then
1043 tmp="${tmp} \"${T}/${i}\""
950 cp -f ${i} "${T}"/ 1044 cp -f "${x}/${i}" "${T}"/
1045 fi
1046 done
951 done 1047 done
952 UNIPATCH_DOCS="${tmp}" 1048 UNIPATCH_DOCS="${tmp}"
953 1049
954 # clean up KPATCH_DIR's - fixes bug #53610 1050 # clean up KPATCH_DIR's - fixes bug #53610
955 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done 1051 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done
1011 for i in ${COMPAT_URI}; do 1107 for i in ${COMPAT_URI}; do
1012 ARCH_PATCH="${ARCH_PATCH} ${DISTDIR}/${i/*\//}" 1108 ARCH_PATCH="${ARCH_PATCH} ${DISTDIR}/${i/*\//}"
1013 done 1109 done
1014 fi 1110 fi
1015 done 1111 done
1016}
1017
1018# sparc nastiness
1019#==============================================================
1020# This script generates the files in /usr/include/asm for sparc systems
1021# during installation of sys-kernel/linux-headers.
1022# Will no longer be needed when full 64 bit support is used on sparc64
1023# systems.
1024#
1025# Shamefully ripped from Debian
1026# ----------------------------------------------------------------------
1027
1028# Idea borrowed from RedHat's kernel package
1029
1030# This is gonna get replaced by something in multilib.eclass soon...
1031# --eradicator
1032generate_sparc_asm() {
1033 local name
1034
1035 cd $1 || die
1036 mkdir asm
1037
1038 for h in `( ls asm-sparc; ls asm-sparc64 ) | grep '\.h$' | sort -u`; do
1039 name="$(echo $h | tr a-z. A-Z_)"
1040 # common header
1041 echo "/* All asm/ files are generated and point to the corresponding
1042 * file in asm-sparc or asm-sparc64.
1043 */
1044
1045#ifndef __SPARCSTUB__${name}__
1046#define __SPARCSTUB__${name}__
1047" > asm/${h}
1048
1049 # common for sparc and sparc64
1050 if [ -f asm-sparc/$h -a -f asm-sparc64/$h ]; then
1051 echo "#ifdef __arch64__
1052#include <asm-sparc64/$h>
1053#else
1054#include <asm-sparc/$h>
1055#endif
1056" >> asm/${h}
1057
1058 # sparc only
1059 elif [ -f asm-sparc/$h ]; then
1060echo "#ifndef __arch64__
1061#include <asm-sparc/$h>
1062#endif
1063" >> asm/${h}
1064
1065 # sparc64 only
1066 else
1067echo "#ifdef __arch64__
1068#include <asm-sparc64/$h>
1069#endif
1070" >> asm/${h}
1071 fi
1072
1073 # common footer
1074 echo "#endif /* !__SPARCSTUB__${name}__ */" >> asm/${h}
1075 done
1076 return 0
1077} 1112}
1078 1113
1079headers___fix() { 1114headers___fix() {
1080 # Voodoo to partially fix broken upstream headers. 1115 # Voodoo to partially fix broken upstream headers.
1081 # note: do not put inline/asm/volatile together (breaks "inline asm volatile") 1116 # note: do not put inline/asm/volatile together (breaks "inline asm volatile")
1123 kernel_is 2 4 && unpack_2_4 1158 kernel_is 2 4 && unpack_2_4
1124 kernel_is 2 6 && unpack_2_6 1159 kernel_is 2 6 && unpack_2_6
1125 fi 1160 fi
1126 1161
1127 if [[ $K_DEBLOB_AVAILABLE == 1 ]] && use deblob ; then 1162 if [[ $K_DEBLOB_AVAILABLE == 1 ]] && use deblob ; then
1128 cp "${DISTDIR}/${DEBLOB_A}" "${T}" 1163 cp "${DISTDIR}/${DEBLOB_A}" "${T}" || die "cp ${DEBLOB_A} failed"
1129 chmod +x "${T}/${DEBLOB_A}" 1164 cp "${DISTDIR}/${DEBLOB_CHECK_A}" "${T}/deblob-check" || die "cp ${DEBLOB_CHECK_A} failed"
1165 chmod +x "${T}/${DEBLOB_A}" "${T}/deblob-check" || die "chmod deblob scripts failed"
1166 fi
1167
1168 # fix a problem on ppc where TOUT writes to /usr/src/linux breaking sandbox
1169 # only do this for kernel < 2.6.27 since this file does not exist in later
1170 # kernels
1171 if [[ -n ${KV_MINOR} && ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} < 2.6.27 ]]
1172 then
1173 sed -i \
1174 -e "s|TOUT := .tmp_gas_check|TOUT := \"${T}\"/.tmp_gas_check|" \
1175 "${S}"/arch/ppc/Makefile
1176 else
1177 sed -i \
1178 -e "s|TOUT := .tmp_gas_check|TOUT := \"${T}\"/.tmp_gas_check|" \
1179 "${S}"/arch/powerpc/Makefile
1130 fi 1180 fi
1131} 1181}
1132 1182
1133kernel-2_src_compile() { 1183kernel-2_src_compile() {
1134 cd "${S}" 1184 cd "${S}"
1135 [[ ${ETYPE} == headers ]] && compile_headers 1185 [[ ${ETYPE} == headers ]] && compile_headers
1136 1186
1137 if [[ $K_DEBLOB_AVAILABLE == 1 ]] && use deblob ; then 1187 if [[ $K_DEBLOB_AVAILABLE == 1 ]] && use deblob ; then
1138 echo ">>> Running deblob script ..." 1188 echo ">>> Running deblob script ..."
1139 sh "${T}/${DEBLOB_A}" --force || \ 1189 EPYTHON="python2" sh "${T}/${DEBLOB_A}" --force || die "Deblob script failed to run!!!"
1140 die "Deblob script failed to run!!!"
1141 fi 1190 fi
1142} 1191}
1192
1193# if you leave it to the default src_test, it will run make to
1194# find whether test/check targets are present; since "make test"
1195# actually produces a few support files, they are installed even
1196# though the package is binchecks-restricted.
1197#
1198# Avoid this altogether by making the function moot.
1199kernel-2_src_test() { :; }
1143 1200
1144kernel-2_pkg_preinst() { 1201kernel-2_pkg_preinst() {
1145 [[ ${ETYPE} == headers ]] && preinst_headers 1202 [[ ${ETYPE} == headers ]] && preinst_headers
1146} 1203}
1147 1204
1155 [[ ${ETYPE} == sources ]] && postinst_sources 1212 [[ ${ETYPE} == sources ]] && postinst_sources
1156} 1213}
1157 1214
1158kernel-2_pkg_setup() { 1215kernel-2_pkg_setup() {
1159 if kernel_is 2 4; then 1216 if kernel_is 2 4; then
1160 if [ "$( gcc-major-version )" -eq "4" ] ; then 1217 if [[ $(gcc-major-version) -ge 4 ]] ; then
1161 echo 1218 echo
1162 ewarn "Be warned !! >=sys-devel/gcc-4.0.0 isn't supported with linux-2.4!" 1219 ewarn "Be warned !! >=sys-devel/gcc-4.0.0 isn't supported with linux-2.4!"
1163 ewarn "Either switch to another gcc-version (via gcc-config) or use a" 1220 ewarn "Either switch to another gcc-version (via gcc-config) or use a"
1164 ewarn "newer kernel that supports gcc-4." 1221 ewarn "newer kernel that supports gcc-4."
1165 echo 1222 echo
1172 1229
1173 ABI="${KERNEL_ABI}" 1230 ABI="${KERNEL_ABI}"
1174 [[ ${ETYPE} == headers ]] && setup_headers 1231 [[ ${ETYPE} == headers ]] && setup_headers
1175 [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..." 1232 [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..."
1176} 1233}
1234
1235kernel-2_pkg_postrm() {
1236 # This warning only makes sense for kernel sources.
1237 [[ ${ETYPE} == headers ]] && return 0
1238
1239 # If there isn't anything left behind, then don't complain.
1240 [[ -e ${ROOT}usr/src/linux-${KV_FULL} ]] || return 0
1241 echo
1242 ewarn "Note: Even though you have successfully unmerged "
1243 ewarn "your kernel package, directories in kernel source location: "
1244 ewarn "${ROOT}usr/src/linux-${KV_FULL}"
1245 ewarn "with modified files will remain behind. By design, package managers"
1246 ewarn "will not remove these modified files and the directories they reside in."
1247 echo
1248}

Legend:
Removed from v.1.238  
changed lines
  Added in v.1.282

  ViewVC Help
Powered by ViewVC 1.1.20