/[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.258 Revision 1.306
1# Copyright 1999-2011 Gentoo Foundation 1# Copyright 1999-2015 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.258 2011/08/18 14:58:57 vapier Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/kernel-2.eclass,v 1.306 2015/06/26 22:32:49 mpagano 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>
35# messages 35# messages
36# K_EXTRAELOG - same as K_EXTRAEINFO except using elog instead of einfo 36# K_EXTRAELOG - same as K_EXTRAEINFO except using elog instead of einfo
37# K_EXTRAEWARN - same as K_EXTRAEINFO except using ewarn instead of einfo 37# K_EXTRAEWARN - same as K_EXTRAEINFO except using ewarn instead of einfo
38# K_SYMLINK - if this is set, then forcably create symlink anyway 38# K_SYMLINK - if this is set, then forcably create symlink anyway
39# 39#
40# K_BASE_VER - for git-sources, declare the base version this patch is
41# based off of.
40# K_DEFCONFIG - Allow specifying a different defconfig target. 42# K_DEFCONFIG - Allow specifying a different defconfig target.
41# If length zero, defaults to "defconfig". 43# If length zero, defaults to "defconfig".
42# K_WANT_GENPATCHES - Apply genpatches to kernel source. Provide any 44# K_WANT_GENPATCHES - Apply genpatches to kernel source. Provide any
43# combination of "base" and "extras" 45# combination of "base", "extras" or "experimental".
46# K_EXP_GENPATCHES_PULL - If set, we pull "experimental" regardless of the USE FLAG
47# but expect the ebuild maintainer to use K_EXP_GENPATCHES_LIST.
48# K_EXP_GENPATCHES_NOUSE - If set, no USE flag will be provided for "experimental";
49# as a result the user cannot choose to apply those patches.
50# K_EXP_GENPATCHES_LIST - A list of patches to pick from "experimental" to apply when
51# the USE flag is unset and K_EXP_GENPATCHES_PULL is set.
44# K_GENPATCHES_VER - The version of the genpatches tarball(s) to apply. 52# K_GENPATCHES_VER - The version of the genpatches tarball(s) to apply.
45# A value of "5" would apply genpatches-2.6.12-5 to 53# A value of "5" would apply genpatches-2.6.12-5 to
46# my-sources-2.6.12.ebuild 54# my-sources-2.6.12.ebuild
47# K_SECURITY_UNSUPPORTED- If set, this kernel is unsupported by Gentoo Security 55# K_SECURITY_UNSUPPORTED- If set, this kernel is unsupported by Gentoo Security
48# K_DEBLOB_AVAILABLE - A value of "0" will disable all of the optional deblob 56# K_DEBLOB_AVAILABLE - A value of "0" will disable all of the optional deblob
49# code. If empty, will be set to "1" if deblobbing is 57# code. If empty, will be set to "1" if deblobbing is
50# possible. Test ONLY for "1". 58# possible. Test ONLY for "1".
59# K_DEBLOB_TAG - This will be the version of deblob script. It's a upstream SVN tag
60# such asw -gnu or -gnu1.
51# K_PREDEBLOBBED - This kernel was already deblobbed elsewhere. 61# K_PREDEBLOBBED - This kernel was already deblobbed elsewhere.
52# If false, either optional deblobbing will be available 62# If false, either optional deblobbing will be available
53# or the license will note the inclusion of freedist 63# or the license will note the inclusion of freedist
54# code. 64# code.
55# K_LONGTERM - If set, the eclass will search for the kernel source 65# K_LONGTERM - If set, the eclass will search for the kernel source
67# UNIPATCH_DOCS - space delimemeted list of docs to be installed to 77# UNIPATCH_DOCS - space delimemeted list of docs to be installed to
68# the doc dir 78# the doc dir
69# UNIPATCH_STRICTORDER - if this is set places patches into directories of 79# UNIPATCH_STRICTORDER - if this is set places patches into directories of
70# order, so they are applied in the order passed 80# order, so they are applied in the order passed
71 81
82# Changing any other variable in this eclass is not supported; you can request
83# for additional variables to be added by contacting the current maintainer.
84# If you do change them, there is a chance that we will not fix resulting bugs;
85# that of course does not mean we're not willing to help.
86
87PYTHON_COMPAT=( python{2_6,2_7} )
88
72inherit eutils toolchain-funcs versionator multilib 89inherit eutils toolchain-funcs versionator multilib python-any-r1
73EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_test src_install pkg_preinst pkg_postinst pkg_postrm 90EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_test src_install pkg_preinst pkg_postinst pkg_postrm
74 91
75# Added by Daniel Ostrow <dostrow@gentoo.org> 92# Added by Daniel Ostrow <dostrow@gentoo.org>
76# This is an ugly hack to get around an issue with a 32-bit userland on ppc64. 93# This is an ugly hack to get around an issue with a 32-bit userland on ppc64.
77# I will remove it when I come up with something more reasonable. 94# I will remove it when I come up with something more reasonable.
81if [[ ${CTARGET} == ${CHOST} && ${CATEGORY/cross-} != ${CATEGORY} ]]; then 98if [[ ${CTARGET} == ${CHOST} && ${CATEGORY/cross-} != ${CATEGORY} ]]; then
82 export CTARGET=${CATEGORY/cross-} 99 export CTARGET=${CATEGORY/cross-}
83fi 100fi
84 101
85HOMEPAGE="http://www.kernel.org/ http://www.gentoo.org/ ${HOMEPAGE}" 102HOMEPAGE="http://www.kernel.org/ http://www.gentoo.org/ ${HOMEPAGE}"
86[[ -z ${LICENSE} ]] && \
87 LICENSE="GPL-2" 103: ${LICENSE:="GPL-2"}
88 104
89# This is the latest KV_PATCH of the deblob tool available from the 105# This is the latest KV_PATCH of the deblob tool available from the
90# libre-sources upstream. If you bump this, you MUST regenerate the Manifests 106# libre-sources upstream. If you bump this, you MUST regenerate the Manifests
91# for ALL kernel-2 consumer packages where deblob is available. 107# for ALL kernel-2 consumer packages where deblob is available.
92[[ -z ${DEBLOB_MAX_VERSION} ]] && DEBLOB_MAX_VERSION=38 108: ${DEBLOB_MAX_VERSION:=38}
93 109
94# No need to run scanelf/strip on kernel sources/headers (bug #134453). 110# No need to run scanelf/strip on kernel sources/headers (bug #134453).
95RESTRICT="binchecks strip" 111RESTRICT="binchecks strip"
96 112
97# set LINUX_HOSTCFLAGS if not already set 113# set LINUX_HOSTCFLAGS if not already set
98[[ -z ${LINUX_HOSTCFLAGS} ]] && \
99 LINUX_HOSTCFLAGS="-Wall -Wstrict-prototypes -Os -fomit-frame-pointer -I${S}/include" 114: ${LINUX_HOSTCFLAGS:="-Wall -Wstrict-prototypes -Os -fomit-frame-pointer -I${S}/include"}
100 115
101# debugging functions 116# debugging functions
102#============================================================== 117#==============================================================
103# this function exists only to help debug kernel-2.eclass 118# this function exists only to help debug kernel-2.eclass
104# if you are adding new functionality in, put a call to it 119# if you are adding new functionality in, put a call to it
105# at the start of src_unpack, or during SRC_URI/dep generation. 120# at the start of src_unpack, or during SRC_URI/dep generation.
106debug-print-kernel2-variables() { 121debug-print-kernel2-variables() {
107 for v in PVR CKV OKV KV KV_FULL KV_MAJOR KV_MINOR KV_PATCH RELEASETYPE \ 122 for v in PVR CKV OKV KV KV_FULL KV_MAJOR KV_MINOR KV_PATCH RELEASETYPE \
108 RELEASE UNIPATCH_LIST_DEFAULT UNIPATCH_LIST_GENPATCHES \ 123 RELEASE UNIPATCH_LIST_DEFAULT UNIPATCH_LIST_GENPATCHES \
109 UNIPATCH_LIST S KERNEL_URI ; do 124 UNIPATCH_LIST S KERNEL_URI K_WANT_GENPATCHES ; do
110 debug-print "${v}: ${!v}" 125 debug-print "${v}: ${!v}"
111 done 126 done
112} 127}
113 128
114#Eclass functions only from here onwards ... 129#Eclass functions only from here onwards ...
116handle_genpatches() { 131handle_genpatches() {
117 local tarball 132 local tarball
118 [[ -z ${K_WANT_GENPATCHES} || -z ${K_GENPATCHES_VER} ]] && return 1 133 [[ -z ${K_WANT_GENPATCHES} || -z ${K_GENPATCHES_VER} ]] && return 1
119 134
120 debug-print "Inside handle_genpatches" 135 debug-print "Inside handle_genpatches"
121 local oldifs=${IFS}
122 export IFS="."
123 local OKV_ARRAY=( $OKV ) 136 local OKV_ARRAY
124 export IFS=${oldifs} 137 IFS="." read -r -a OKV_ARRAY <<<"${OKV}"
125 138
126 # for > 3.0 kernels, handle genpatches tarball name 139 # for > 3.0 kernels, handle genpatches tarball name
127 # genpatches for 3.0 and 3.0.1 might be named 140 # genpatches for 3.0 and 3.0.1 might be named
128 # genpatches-3.0-1.base.tar.bz2 and genpatches-3.0-2.base.tar.bz2 141 # genpatches-3.0-1.base.tar.xz and genpatches-3.0-2.base.tar.xz
129 # respectively. Handle this. 142 # respectively. Handle this.
130 143
131 for i in ${K_WANT_GENPATCHES} ; do 144 for i in ${K_WANT_GENPATCHES} ; do
132 if [[ ${KV_MAJOR} -ge 3 ]]; then 145 if [[ ${KV_MAJOR} -ge 3 ]]; then
133 if [[ ${#OKV_ARRAY[@]} -ge 3 ]]; then 146 if [[ ${#OKV_ARRAY[@]} -ge 3 ]]; then
134 tarball="genpatches-${KV_MAJOR}.${KV_MINOR}-${K_GENPATCHES_VER}.${i}.tar.bz2" 147 tarball="genpatches-${KV_MAJOR}.${KV_MINOR}-${K_GENPATCHES_VER}.${i}.tar.xz"
148 else
149 tarball="genpatches-${KV_MAJOR}.${KV_PATCH}-${K_GENPATCHES_VER}.${i}.tar.xz"
150 fi
135 else 151 else
136 tarball="genpatches-${KV_MAJOR}.${KV_PATCH}-${K_GENPATCHES_VER}.${i}.tar.bz2"
137 fi
138 else
139 tarball="genpatches-${OKV}-${K_GENPATCHES_VER}.${i}.tar.bz2" 152 tarball="genpatches-${OKV}-${K_GENPATCHES_VER}.${i}.tar.xz"
140 fi 153 fi
154
155 local use_cond_start="" use_cond_end=""
156
157 if [[ "${i}" == "experimental" && -z ${K_EXP_GENPATCHES_PULL} && -z ${K_EXP_GENPATCHES_NOUSE} ]] ; then
158 use_cond_start="experimental? ( "
159 use_cond_end=" )"
160
161 if use experimental ; then
162 UNIPATCH_LIST_GENPATCHES+=" ${DISTDIR}/${tarball}"
163 debug-print "genpatches tarball: $tarball"
164 fi
165 else
166 UNIPATCH_LIST_GENPATCHES+=" ${DISTDIR}/${tarball}"
141 debug-print "genpatches tarball: $tarball" 167 debug-print "genpatches tarball: $tarball"
142 GENPATCHES_URI="${GENPATCHES_URI} mirror://gentoo/${tarball}" 168 fi
143 UNIPATCH_LIST_GENPATCHES="${UNIPATCH_LIST_GENPATCHES} ${DISTDIR}/${tarball}" 169 GENPATCHES_URI+=" ${use_cond_start}mirror://gentoo/${tarball}${use_cond_end}"
144 done 170 done
145} 171}
146 172
147detect_version() { 173detect_version() {
148 # this function will detect and set 174 # this function will detect and set
149 # - OKV: Original Kernel Version (2.6.0/2.6.0-test11) 175 # - OKV: Original Kernel Version (2.6.0/2.6.0-test11)
150 # - KV: Kernel Version (2.6.0-gentoo/2.6.0-test11-gentoo-r1) 176 # - KV: Kernel Version (2.6.0-gentoo/2.6.0-test11-gentoo-r1)
151 # - EXTRAVERSION: The additional version appended to OKV (-gentoo/-gentoo-r1) 177 # - EXTRAVERSION: The additional version appended to OKV (-gentoo/-gentoo-r1)
152 178
153 if [[ -n ${KV_FULL} ]]; then 179 # We've already run, so nothing to do here.
154 # we will set this for backwards compatibility. 180 [[ -n ${KV_FULL} ]] && return 0
155 KV=${KV_FULL}
156
157 # we know KV_FULL so lets stop here. but not without resetting S
158 S=${WORKDIR}/linux-${KV_FULL}
159 return
160 fi
161 181
162 # CKV is used as a comparison kernel version, which is used when 182 # CKV is used as a comparison kernel version, which is used when
163 # PV doesnt reflect the genuine kernel version. 183 # PV doesnt reflect the genuine kernel version.
164 # this gets set to the portage style versioning. ie: 184 # this gets set to the portage style versioning. ie:
165 # CKV=2.6.11_rc4 185 # CKV=2.6.11_rc4
170 OKV=${OKV/-r*} 190 OKV=${OKV/-r*}
171 OKV=${OKV/_p*} 191 OKV=${OKV/_p*}
172 192
173 KV_MAJOR=$(get_version_component_range 1 ${OKV}) 193 KV_MAJOR=$(get_version_component_range 1 ${OKV})
174 # handle if OKV is X.Y or X.Y.Z (e.g. 3.0 or 3.0.1) 194 # handle if OKV is X.Y or X.Y.Z (e.g. 3.0 or 3.0.1)
175 local oldifs=${IFS}
176 export IFS="."
177 local OKV_ARRAY=( $OKV ) 195 local OKV_ARRAY
178 export IFS=${oldifs} 196 IFS="." read -r -a OKV_ARRAY <<<"${OKV}"
179 197
180 # if KV_MAJOR >= 3, then we have no more KV_MINOR 198 # if KV_MAJOR >= 3, then we have no more KV_MINOR
181 #if [[ ${KV_MAJOR} -lt 3 ]]; then 199 #if [[ ${KV_MAJOR} -lt 3 ]]; then
182 if [[ ${#OKV_ARRAY[@]} -ge 3 ]]; then 200 if [[ ${#OKV_ARRAY[@]} -ge 3 ]]; then
183 KV_MINOR=$(get_version_component_range 2 ${OKV}) 201 KV_MINOR=$(get_version_component_range 2 ${OKV})
217 235
218# if [[ ${KV_MAJOR} -ge 3 ]]; then 236# if [[ ${KV_MAJOR} -ge 3 ]]; then
219 if [[ ${#OKV_ARRAY[@]} -lt 3 ]]; then 237 if [[ ${#OKV_ARRAY[@]} -lt 3 ]]; then
220 KV_PATCH_ARR=(${KV_PATCH//\./ }) 238 KV_PATCH_ARR=(${KV_PATCH//\./ })
221 239
222 # at this point 080811, Linus is putting 3.1 kernels in 3.0 directory 240 # at this point 031412, Linus is putting all 3.x kernels in a
223 # revisit when 3.1 is released 241 # 3.x directory, may need to revisit when 4.x is released
224 if [[ ${KV_PATCH} -gt 0 ]]; then
225 KERNEL_BASE_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.$((${KV_PATCH_ARR} - 1))"
226 else
227 KERNEL_BASE_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_PATCH_ARR}" 242 KERNEL_BASE_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.x"
228 fi 243
229 # KERNEL_BASE_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_PATCH_ARR}"
230 [[ -n "${K_LONGTERM}" ]] && 244 [[ -n "${K_LONGTERM}" ]] &&
231 KERNEL_BASE_URI="${KERNEL_BASE_URI}/longterm/v${KV_MAJOR}.${KV_PATCH_ARR}" 245 KERNEL_BASE_URI="${KERNEL_BASE_URI}/longterm/v${KV_MAJOR}.${KV_PATCH_ARR}"
232 else 246 else
233 #KERNEL_BASE_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.0" 247 #KERNEL_BASE_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.0"
234 KERNEL_BASE_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}" 248 #KERNEL_BASE_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}"
249 if [[ ${KV_MAJOR} -ge 3 ]]; then
250 KERNEL_BASE_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.x"
251 else
252 KERNEL_BASE_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}"
253 fi
254
235 [[ -n "${K_LONGTERM}" ]] && 255 [[ -n "${K_LONGTERM}" ]] &&
256 #KERNEL_BASE_URI="${KERNEL_BASE_URI}/longterm"
236 KERNEL_BASE_URI="${KERNEL_BASE_URI}/longterm/v${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}" 257 KERNEL_BASE_URI="${KERNEL_BASE_URI}/longterm/v${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
237 fi 258 fi
238 259
239 debug-print "KERNEL_BASE_URI is ${KERNEL_BASE_URI}" 260 debug-print "KERNEL_BASE_URI is ${KERNEL_BASE_URI}"
240 261
241 if [[ ${#OKV_ARRAY[@]} -ge 3 ]] && [[ ${KV_MAJOR} -ge 3 ]]; then 262 if [[ ${#OKV_ARRAY[@]} -ge 3 ]] && [[ ${KV_MAJOR} -ge 3 ]]; then
242 # handle vanilla-sources-3.x.y correctly 263 # handle non genpatch using sources correctly
243 if [[ ${PN/-*} == "vanilla" && ${KV_PATCH} -gt 0 ]]; then 264 if [[ -z ${K_WANT_GENPATCHES} && -z ${K_GENPATCHES_VER} && ${KV_PATCH} -gt 0 ]]; then
244 KERNEL_URI="${KERNEL_BASE_URI}/patch-${OKV}.bz2" 265 KERNEL_URI="${KERNEL_BASE_URI}/patch-${OKV}.xz"
245 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV}.bz2" 266 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV}.xz"
246 fi 267 fi
247 KERNEL_URI="${KERNEL_URI} ${KERNEL_BASE_URI}/linux-${KV_MAJOR}.${KV_MINOR}.tar.bz2" 268 KERNEL_URI="${KERNEL_URI} ${KERNEL_BASE_URI}/linux-${KV_MAJOR}.${KV_MINOR}.tar.xz"
248 else 269 else
249 KERNEL_URI="${KERNEL_BASE_URI}/linux-${OKV}.tar.bz2" 270 KERNEL_URI="${KERNEL_BASE_URI}/linux-${OKV}.tar.xz"
250 fi 271 fi
251 272
252 RELEASE=${CKV/${OKV}} 273 RELEASE=${CKV/${OKV}}
253 RELEASE=${RELEASE/_beta} 274 RELEASE=${RELEASE/_beta}
254 RELEASE=${RELEASE/_rc/-rc} 275 RELEASE=${RELEASE/_rc/-rc}
298 if [[ -n ${KV_MINOR} ]]; then 319 if [[ -n ${KV_MINOR} ]]; then
299 OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}" 320 OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
300 else 321 else
301 OKV="${KV_MAJOR}.${KV_PATCH}" 322 OKV="${KV_MAJOR}.${KV_PATCH}"
302 fi 323 fi
303 KERNEL_URI="${KERNEL_BASE_URI}/patch-${CKV}.bz2 324 KERNEL_URI="${KERNEL_BASE_URI}/patch-${CKV}.xz
304 ${KERNEL_BASE_URI}/linux-${OKV}.tar.bz2" 325 ${KERNEL_BASE_URI}/linux-${OKV}.tar.xz"
305 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV}.bz2" 326 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV}.xz"
306 fi 327 fi
307 328
308 # We need to set this using OKV, but we need to set it before we do any 329 # We need to set this using OKV, but we need to set it before we do any
309 # messing around with OKV based on RELEASETYPE 330 # messing around with OKV based on RELEASETYPE
310 KV_FULL=${OKV}${EXTRAVERSION} 331 KV_FULL=${OKV}${EXTRAVERSION}
315 336
316 # -rc-git pulls can be achieved by specifying CKV 337 # -rc-git pulls can be achieved by specifying CKV
317 # for example: 338 # for example:
318 # CKV="2.6.11_rc3_pre2" 339 # CKV="2.6.11_rc3_pre2"
319 # will pull: 340 # will pull:
320 # linux-2.6.10.tar.bz2 & patch-2.6.11-rc3.bz2 & patch-2.6.11-rc3-git2.bz2 341 # linux-2.6.10.tar.xz & patch-2.6.11-rc3.xz & patch-2.6.11-rc3-git2.xz
321 342
322 if [[ ${KV_MAJOR}${KV_MINOR} -eq 26 ]]; then 343 if [[ ${KV_MAJOR}${KV_MINOR} -eq 26 ]]; then
323 344
324 if [[ ${RELEASETYPE} == -rc ]] || [[ ${RELEASETYPE} == -pre ]]; then 345 if [[ ${RELEASETYPE} == -rc ]] || [[ ${RELEASETYPE} == -pre ]]; then
325 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))" 346 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))"
326 KERNEL_URI="${KERNEL_BASE_URI}/testing/patch-${CKV//_/-}.bz2 347 KERNEL_URI="${KERNEL_BASE_URI}/testing/patch-${CKV//_/-}.xz
327 ${KERNEL_BASE_URI}/linux-${OKV}.tar.bz2" 348 ${KERNEL_BASE_URI}/linux-${OKV}.tar.xz"
328 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV//_/-}.bz2" 349 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV//_/-}.xz"
329 fi 350 fi
330 351
331 if [[ ${RELEASETYPE} == -git ]]; then 352 if [[ ${RELEASETYPE} == -git ]]; then
332 KERNEL_URI="${KERNEL_BASE_URI}/snapshots/patch-${OKV}${RELEASE}.bz2 353 KERNEL_URI="${KERNEL_BASE_URI}/snapshots/patch-${OKV}${RELEASE}.xz
333 ${KERNEL_BASE_URI}/linux-${OKV}.tar.bz2" 354 ${KERNEL_BASE_URI}/linux-${OKV}.tar.xz"
334 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${OKV}${RELEASE}.bz2" 355 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${OKV}${RELEASE}.xz"
335 fi 356 fi
336 357
337 if [[ ${RELEASETYPE} == -rc-git ]]; then 358 if [[ ${RELEASETYPE} == -rc-git ]]; then
338 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))" 359 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))"
339 KERNEL_URI="${KERNEL_BASE_URI}/snapshots/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2 360 KERNEL_URI="${KERNEL_BASE_URI}/snapshots/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.xz
340 ${KERNEL_BASE_URI}/testing/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.bz2 361 ${KERNEL_BASE_URI}/testing/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.xz
341 ${KERNEL_BASE_URI}/linux-${OKV}.tar.bz2" 362 ${KERNEL_BASE_URI}/linux-${OKV}.tar.xz"
342 363
343 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.bz2 ${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2" 364 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.xz ${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.xz"
344 fi 365 fi
345 else 366 else
367 KV_PATCH_ARR=(${KV_PATCH//\./ })
368
369 # the different majorminor versions have different patch start versions
370 OKV_DICT=(["2"]="${KV_MAJOR}.$((${KV_PATCH_ARR} - 1))" ["3"]="2.6.39" ["4"]="3.19")
371
346 if [[ ${RELEASETYPE} == -rc ]] || [[ ${RELEASETYPE} == -pre ]]; then 372 if [[ ${RELEASETYPE} == -rc ]] || [[ ${RELEASETYPE} == -pre ]]; then
347 if [[ ${KV_MAJOR}${KV_PATCH} -eq 30 ]]; then 373 OKV=${K_BASE_VER:-$OKV_DICT["${KV_MAJOR}"]}
348 OKV="2.6.39"
349 else
350 KV_PATCH_ARR=(${KV_PATCH//\./ })
351 OKV="${KV_MAJOR}.$((${KV_PATCH_ARR} - 1))"
352 fi
353 KERNEL_URI="${KERNEL_BASE_URI}/testing/patch-${CKV//_/-}.bz2 374 KERNEL_URI="${KERNEL_BASE_URI}/testing/patch-${CKV//_/-}.xz
354 ${KERNEL_BASE_URI}/testing/linux-${OKV}.tar.bz2" 375 ${KERNEL_BASE_URI}/linux-${OKV}.tar.xz"
355 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV//_/-}.bz2" 376 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV//_/-}.xz"
356 fi 377 fi
357 378
358 if [[ ${RELEASETYPE} == -git ]]; then 379 if [[ ${RELEASETYPE} == -git ]]; then
359 KERNEL_URI="${KERNEL_BASE_URI}/snapshots/patch-${OKV}${RELEASE}.bz2 380 KERNEL_URI="${KERNEL_BASE_URI}/snapshots/patch-${OKV}${RELEASE}.xz
360 ${KERNEL_BASE_URI}/linux-${OKV}.tar.bz2" 381 ${KERNEL_BASE_URI}/linux-${OKV}.tar.xz"
361 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${OKV}${RELEASE}.bz2" 382 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${OKV}${RELEASE}.xz"
362 fi 383 fi
363 384
364 if [[ ${RELEASETYPE} == -rc-git ]]; then 385 if [[ ${RELEASETYPE} == -rc-git ]]; then
365 if [[ ${KV_MAJOR}${KV_PATCH} -eq 30 ]]; then 386 OKV=${K_BASE_VER:-$OKV_DICT["${KV_MAJOR}"]}
366 OKV="2.6.39"
367 else
368 KV_PATCH_ARR=(${KV_PATCH//\./ })
369 OKV="${KV_MAJOR}.$((${KV_PATCH_ARR} - 1))"
370 fi
371 KERNEL_URI="${KERNEL_BASE_URI}/snapshots/patch-${KV_MAJOR}.${KV_PATCH}${RELEASE}.bz2 387 KERNEL_URI="${KERNEL_BASE_URI}/snapshots/patch-${KV_MAJOR}.${KV_PATCH}${RELEASE}.xz
372 ${KERNEL_BASE_URI}/testing/patch-${KV_MAJOR}.${KV_PATCH}${RELEASE/-git*}.bz2 388 ${KERNEL_BASE_URI}/testing/patch-${KV_MAJOR}.${KV_PATCH}${RELEASE/-git*}.xz
373 ${KERNEL_BASE_URI}/linux-${OKV}.tar.bz2" 389 ${KERNEL_BASE_URI}/linux-${OKV}.tar.xz"
374 390
375 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${KV_MAJOR}.${KV_PATCH}${RELEASE/-git*}.bz2 ${DISTDIR}/patch-${KV_MAJOR}.${KV_PATCH}${RELEASE}.bz2" 391 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${KV_MAJOR}.${KV_PATCH}${RELEASE/-git*}.xz ${DISTDIR}/patch-${KV_MAJOR}.${KV_PATCH}${RELEASE}.xz"
376 fi
377
378
379 fi 392 fi
380 393
381 394
395 fi
396
382 debug-print-kernel2-variables 397 debug-print-kernel2-variables
383 398
384 handle_genpatches 399 handle_genpatches
385} 400}
386 401
402# Note: duplicated in linux-info.eclass
387kernel_is() { 403kernel_is() {
388 # ALL of these should be set before we can safely continue this function. 404 # ALL of these should be set before we can safely continue this function.
389 # some of the sources have in the past had only one set. 405 # some of the sources have in the past had only one set.
390 local v n=0 406 local v n=0
391 for v in OKV KV_{MAJOR,MINOR,PATCH} ; do [[ -z ${!v} ]] && n=1 ; done 407 for v in OKV KV_{MAJOR,MINOR,PATCH} ; do [[ -z ${!v} ]] && n=1 ; done
392 [[ $n -eq 1 ]] && detect_version 408 [[ $n -eq 1 ]] && detect_version
393 unset v n 409 unset v n
394 410
395 # Now we can continue 411 # Now we can continue
396 local operator test value x=0 y=0 z=0 412 local operator test value
397 413
398 case ${1} in 414 case ${1#-} in
399 lt) operator="-lt"; shift;; 415 lt) operator="-lt"; shift;;
400 gt) operator="-gt"; shift;; 416 gt) operator="-gt"; shift;;
401 le) operator="-le"; shift;; 417 le) operator="-le"; shift;;
402 ge) operator="-ge"; shift;; 418 ge) operator="-ge"; shift;;
403 eq) operator="-eq"; shift;; 419 eq) operator="-eq"; shift;;
404 *) operator="-eq";; 420 *) operator="-eq";;
405 esac 421 esac
406
407 for x in ${@}; do
408 for((y=0; y<$((3 - ${#x})); y++)); do value="${value}0"; done
409 value="${value}${x}"
410 z=$((${z} + 1))
411
412 case ${z} in
413 1) for((y=0; y<$((3 - ${#KV_MAJOR})); y++)); do test="${test}0"; done;
414 test="${test}${KV_MAJOR}";;
415 2) for((y=0; y<$((3 - ${#KV_MINOR})); y++)); do test="${test}0"; done;
416 test="${test}${KV_MINOR}";;
417 3) for((y=0; y<$((3 - ${#KV_PATCH})); y++)); do test="${test}0"; done;
418 test="${test}${KV_PATCH}";;
419 *) die "Error in kernel-2_kernel_is(): Too many parameters.";; 422 [[ $# -gt 3 ]] && die "Error in kernel-2_kernel_is(): too many parameters"
420 esac
421 done
422 423
423 [ ${test} ${operator} ${value} ] && return 0 || return 1 424 : $(( test = (KV_MAJOR << 16) + (KV_MINOR << 8) + KV_PATCH ))
425 : $(( value = (${1:-${KV_MAJOR}} << 16) + (${2:-${KV_MINOR}} << 8) + ${3:-${KV_PATCH}} ))
426 [ ${test} ${operator} ${value} ]
424} 427}
425 428
426kernel_is_2_4() { 429kernel_is_2_4() {
427 kernel_is 2 4 430 kernel_is 2 4
428} 431}
431 kernel_is 2 6 || kernel_is 2 5 434 kernel_is 2 6 || kernel_is 2 5
432} 435}
433 436
434# Capture the sources type and set DEPENDs 437# Capture the sources type and set DEPENDs
435if [[ ${ETYPE} == sources ]]; then 438if [[ ${ETYPE} == sources ]]; then
436 DEPEND="!build? ( sys-apps/sed 439 DEPEND="!build? (
440 sys-apps/sed
437 >=sys-devel/binutils-2.11.90.0.31 )" 441 >=sys-devel/binutils-2.11.90.0.31
438 RDEPEND="!build? ( >=sys-libs/ncurses-5.2 442 )"
443 RDEPEND="!build? (
444 >=sys-libs/ncurses-5.2
439 sys-devel/make )" 445 sys-devel/make
440 PDEPEND="!build? ( virtual/dev-manager )" 446 dev-lang/perl
447 sys-devel/bc
448 )"
441 449
442 SLOT="${PVR}" 450 SLOT="${PVR}"
443 DESCRIPTION="Sources for the ${KV_MAJOR}.${KV_MINOR:-$KV_PATCH} linux kernel" 451 DESCRIPTION="Sources based on the Linux Kernel."
444 IUSE="symlink build" 452 IUSE="symlink build kdbus"
445 453
446 # Bug #266157, deblob for libre support 454 # Bug #266157, deblob for libre support
447 if [[ -z ${K_PREDEBLOBBED} ]] ; then 455 if [[ -z ${K_PREDEBLOBBED} ]] ; then
448 # Bug #359865, force a call to detect_version if needed 456 # Bug #359865, force a call to detect_version if needed
449 kernel_is ge 2 6 27 && \ 457 kernel_is ge 2 6 27 && \
450 [[ -z "${K_DEBLOB_AVAILABLE}" ]] && \ 458 [[ -z "${K_DEBLOB_AVAILABLE}" ]] && \
451 kernel_is le 2 6 ${DEBLOB_MAX_VERSION} && \ 459 kernel_is le 2 6 ${DEBLOB_MAX_VERSION} && \
452 K_DEBLOB_AVAILABLE=1 460 K_DEBLOB_AVAILABLE=1
453 if [[ ${K_DEBLOB_AVAILABLE} == "1" ]] ; then 461 if [[ ${K_DEBLOB_AVAILABLE} == "1" ]] ; then
454 IUSE="${IUSE} deblob" 462 IUSE="${IUSE} deblob"
463
455 # Reflect that kernels contain firmware blobs unless otherwise 464 # Reflect that kernels contain firmware blobs unless otherwise
456 # stripped 465 # stripped
457 LICENSE="${LICENSE} !deblob? ( freedist )" 466 LICENSE="${LICENSE} !deblob? ( freedist )"
467
468 DEPEND+=" deblob? ( ${PYTHON_DEPS} )"
458 469
459 if [[ -n KV_MINOR ]]; then 470 if [[ -n KV_MINOR ]]; then
460 DEBLOB_PV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}" 471 DEBLOB_PV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
461 else 472 else
462 DEBLOB_PV="${KV_MAJOR}.${KV_PATCH}" 473 DEBLOB_PV="${KV_MAJOR}.${KV_PATCH}"
464 475
465 if [[ ${KV_MAJOR} -ge 3 ]]; then 476 if [[ ${KV_MAJOR} -ge 3 ]]; then
466 DEBLOB_PV="${KV_MAJOR}.${KV_MINOR}" 477 DEBLOB_PV="${KV_MAJOR}.${KV_MINOR}"
467 fi 478 fi
468 479
480 # deblob svn tag, default is -gnu, to change, use K_DEBLOB_TAG in ebuild
481 K_DEBLOB_TAG=${K_DEBLOB_TAG:--gnu}
469 DEBLOB_A="deblob-${DEBLOB_PV}" 482 DEBLOB_A="deblob-${DEBLOB_PV}"
470 DEBLOB_CHECK_A="deblob-check-${DEBLOB_PV}" 483 DEBLOB_CHECK_A="deblob-check-${DEBLOB_PV}"
471 DEBLOB_HOMEPAGE="http://www.fsfla.org/svnwiki/selibre/linux-libre/" 484 DEBLOB_HOMEPAGE="http://www.fsfla.org/svn/fsfla/software/linux-libre/releases/tags"
472 DEBLOB_URI_PATH="download/releases/LATEST-${DEBLOB_PV}.N" 485 DEBLOB_URI_PATH="${DEBLOB_PV}${K_DEBLOB_TAG}"
473 if ! has "${EAPI:-0}" 0 1 ; then 486 if ! has "${EAPI:-0}" 0 1 ; then
474 DEBLOB_CHECK_URI="${DEBLOB_HOMEPAGE}/${DEBLOB_URI_PATH}/deblob-check -> ${DEBLOB_CHECK_A}" 487 DEBLOB_CHECK_URI="${DEBLOB_HOMEPAGE}/${DEBLOB_URI_PATH}/deblob-check -> ${DEBLOB_CHECK_A}"
475 else 488 else
476 DEBLOB_CHECK_URI="mirror://gentoo/${DEBLOB_CHECK_A}" 489 DEBLOB_CHECK_URI="mirror://gentoo/${DEBLOB_CHECK_A}"
477 fi 490 fi
491
478 DEBLOB_URI="${DEBLOB_HOMEPAGE}/${DEBLOB_URI_PATH}/${DEBLOB_A}" 492 DEBLOB_URI="${DEBLOB_HOMEPAGE}/${DEBLOB_URI_PATH}/${DEBLOB_A}"
479 HOMEPAGE="${HOMEPAGE} ${DEBLOB_HOMEPAGE}" 493 HOMEPAGE="${HOMEPAGE} ${DEBLOB_HOMEPAGE}"
480 494
481 KERNEL_URI="${KERNEL_URI} 495 KERNEL_URI="${KERNEL_URI}
482 deblob? ( 496 deblob? (
495 509
496 # Since we should NOT honour KBUILD_OUTPUT in headers 510 # Since we should NOT honour KBUILD_OUTPUT in headers
497 # lets unset it here. 511 # lets unset it here.
498 unset KBUILD_OUTPUT 512 unset KBUILD_OUTPUT
499 513
500 if [[ ${CTARGET} = ${CHOST} ]]; then
501 SLOT="0" 514 SLOT="0"
502 else
503 SLOT="${CTARGET}"
504 fi
505else 515else
506 eerror "Unknown ETYPE=\"${ETYPE}\", must be \"sources\" or \"headers\"" 516 eerror "Unknown ETYPE=\"${ETYPE}\", must be \"sources\" or \"headers\""
507 die "Unknown ETYPE=\"${ETYPE}\", must be \"sources\" or \"headers\"" 517 die "Unknown ETYPE=\"${ETYPE}\", must be \"sources\" or \"headers\""
508fi 518fi
509 519
567} 577}
568 578
569universal_unpack() { 579universal_unpack() {
570 debug-print "Inside universal_unpack" 580 debug-print "Inside universal_unpack"
571 581
572 local oldifs=${IFS}
573 export IFS="."
574 local OKV_ARRAY=( $OKV ) 582 local OKV_ARRAY
575 export IFS=${oldifs} 583 IFS="." read -r -a OKV_ARRAY <<<"${OKV}"
576 584
577 cd "${WORKDIR}" 585 cd "${WORKDIR}"
578 if [[ ${#OKV_ARRAY[@]} -ge 3 ]] && [[ ${KV_MAJOR} -ge 3 ]]; then 586 if [[ ${#OKV_ARRAY[@]} -ge 3 ]] && [[ ${KV_MAJOR} -ge 3 ]]; then
579 unpack linux-${KV_MAJOR}.${KV_MINOR}.tar.bz2 587 unpack linux-${KV_MAJOR}.${KV_MINOR}.tar.xz
580 else 588 else
581 unpack linux-${OKV}.tar.bz2 589 unpack linux-${OKV}.tar.xz
582 fi 590 fi
583 591
584 if [[ -d "linux" ]]; then 592 if [[ -d "linux" ]]; then
585 debug-print "Moving linux to linux-${KV_FULL}" 593 debug-print "Moving linux to linux-${KV_FULL}"
586 mv linux linux-${KV_FULL} \ 594 mv linux linux-${KV_FULL} \
603 cd "${S}" 611 cd "${S}"
604 612
605 # remove all backup files 613 # remove all backup files
606 find . -iname "*~" -exec rm {} \; 2> /dev/null 614 find . -iname "*~" -exec rm {} \; 2> /dev/null
607 615
608 # fix a problem on ppc where TOUT writes to /usr/src/linux breaking sandbox
609 # only do this for kernel < 2.6.27 since this file does not exist in later
610 # kernels
611 if [[ -n ${KV_MINOR} && ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} < 2.6.27 ]]
612 then
613 sed -i \
614 -e 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
615 "${S}"/arch/ppc/Makefile
616 else
617 sed -i \
618 -e 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
619 "${S}"/arch/powerpc/Makefile
620 fi
621} 616}
622 617
623unpack_set_extraversion() { 618unpack_set_extraversion() {
624 cd "${S}" 619 cd "${S}"
625 sed -i -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile 620 sed -i -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile
702} 697}
703 698
704# install functions 699# install functions
705#============================================================== 700#==============================================================
706install_universal() { 701install_universal() {
707 #fix silly permissions in tarball 702 # Fix silly permissions in tarball
708 cd "${WORKDIR}" 703 cd "${WORKDIR}"
709 chown -R root:0 * >& /dev/null 704 chown -R 0:0 * >& /dev/null
710 chmod -R a+r-w+X,u+w * 705 chmod -R a+r-w+X,u+w *
711 cd ${OLDPWD} 706 cd ${OLDPWD}
712} 707}
713 708
714install_headers() { 709install_headers() {
719 if kernel_is ge 2 6 18 ; then 714 if kernel_is ge 2 6 18 ; then
720 env_setup_xmakeopts 715 env_setup_xmakeopts
721 emake headers_install INSTALL_HDR_PATH="${D}"/${ddir}/.. ${xmakeopts} || die 716 emake headers_install INSTALL_HDR_PATH="${D}"/${ddir}/.. ${xmakeopts} || die
722 717
723 # let other packages install some of these headers 718 # let other packages install some of these headers
724 rm -rf "${D}"/${ddir}/sound #alsa-headers
725 rm -rf "${D}"/${ddir}/scsi #glibc/uclibc/etc... 719 rm -rf "${D}"/${ddir}/scsi #glibc/uclibc/etc...
726 return 0 720 return 0
727 fi 721 fi
728 722
729 # Do not use "linux/*" as that can cause problems with very long 723 # Do not use "linux/*" as that can cause problems with very long
771 echo "Please check the ebuild ChangeLog for more details." \ 765 echo "Please check the ebuild ChangeLog for more details." \
772 > "${S}"/patches.txt 766 > "${S}"/patches.txt
773 fi 767 fi
774 768
775 mv ${WORKDIR}/linux* "${D}"/usr/src 769 mv ${WORKDIR}/linux* "${D}"/usr/src
770
771 if [[ -n "${UNIPATCH_DOCS}" ]] ; then
772 for i in ${UNIPATCH_DOCS}; do
773 dodoc "${T}"/${i}
774 done
775 fi
776} 776}
777 777
778# pkg_preinst functions 778# pkg_preinst functions
779#============================================================== 779#==============================================================
780preinst_headers() { 780preinst_headers() {
839 fi 839 fi
840 840
841 # optionally display security unsupported message 841 # optionally display security unsupported message
842 # Start with why 842 # Start with why
843 if [[ ${K_SECURITY_UNSUPPORTED} = deblob ]]; then 843 if [[ ${K_SECURITY_UNSUPPORTED} = deblob ]]; then
844 ewarn "Deblobbed kernels are UNSUPPORTED by Gentoo Security." 844 ewarn "Deblobbed kernels may not be up-to-date security-wise"
845 ewarn "as they depend on external scripts."
845 elif [[ -n ${K_SECURITY_UNSUPPORTED} ]]; then 846 elif [[ -n ${K_SECURITY_UNSUPPORTED} ]]; then
846 ewarn "${PN} is UNSUPPORTED by Gentoo Security." 847 ewarn "${PN} is UNSUPPORTED by Gentoo Security."
847 fi 848 fi
848 # And now the general message. 849 # And now the general message.
849 if [[ -n ${K_SECURITY_UNSUPPORTED} ]]; then 850 if [[ -n ${K_SECURITY_UNSUPPORTED} ]]; then
855 # warn sparc users that they need to do cross-compiling with >= 2.6.25(bug #214765) 856 # warn sparc users that they need to do cross-compiling with >= 2.6.25(bug #214765)
856 KV_MAJOR=$(get_version_component_range 1 ${OKV}) 857 KV_MAJOR=$(get_version_component_range 1 ${OKV})
857 KV_MINOR=$(get_version_component_range 2 ${OKV}) 858 KV_MINOR=$(get_version_component_range 2 ${OKV})
858 KV_PATCH=$(get_version_component_range 3 ${OKV}) 859 KV_PATCH=$(get_version_component_range 3 ${OKV})
859 if [[ "$(tc-arch)" = "sparc" ]]; then 860 if [[ "$(tc-arch)" = "sparc" ]]; then
861 if [[ $(gcc-major-version) -lt 4 && $(gcc-minor-version) -lt 4 ]]; then
860 if [[ ${KV_MAJOR} -ge 3 || ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} > 2.6.24 ]] 862 if [[ ${KV_MAJOR} -ge 3 || ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} > 2.6.24 ]] ; then
861 then
862 echo 863 echo
863 elog "NOTE: Since 2.6.25 the kernel Makefile has changed in a way that" 864 elog "NOTE: Since 2.6.25 the kernel Makefile has changed in a way that"
864 elog "you now need to do" 865 elog "you now need to do"
865 elog " make CROSS_COMPILE=sparc64-unknown-linux-gnu-" 866 elog " make CROSS_COMPILE=sparc64-unknown-linux-gnu-"
866 elog "instead of just" 867 elog "instead of just"
867 elog " make" 868 elog " make"
868 elog "to compile the kernel. For more information please browse to" 869 elog "to compile the kernel. For more information please browse to"
869 elog "https://bugs.gentoo.org/show_bug.cgi?id=214765" 870 elog "https://bugs.gentoo.org/show_bug.cgi?id=214765"
870 echo 871 echo
872 fi
871 fi 873 fi
872 fi 874 fi
873} 875}
874 876
875# pkg_setup functions 877# pkg_setup functions
942 PIPE_CMD="" 944 PIPE_CMD=""
943 case ${extention} in 945 case ${extention} in
944 xz) PIPE_CMD="xz -dc";; 946 xz) PIPE_CMD="xz -dc";;
945 lzma) PIPE_CMD="lzma -dc";; 947 lzma) PIPE_CMD="lzma -dc";;
946 bz2) PIPE_CMD="bzip2 -dc";; 948 bz2) PIPE_CMD="bzip2 -dc";;
947 patch) PIPE_CMD="cat";; 949 patch*) PIPE_CMD="cat";;
948 diff) PIPE_CMD="cat";; 950 diff) PIPE_CMD="cat";;
949 gz|Z|z) PIPE_CMD="gzip -dc";; 951 gz|Z|z) PIPE_CMD="gzip -dc";;
950 ZIP|zip) PIPE_CMD="unzip -p";; 952 ZIP|zip) PIPE_CMD="unzip -p";;
951 *) UNIPATCH_DROP="${UNIPATCH_DROP} ${i/:*/}";; 953 *) UNIPATCH_DROP="${UNIPATCH_DROP} ${i/:*/}";;
952 esac 954 esac
977 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/ 979 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/
978 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${PATCH_ORDER}/${x}.patch${PATCH_LEVEL}) || die "uncompressing patch failed" 980 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${PATCH_ORDER}/${x}.patch${PATCH_LEVEL}) || die "uncompressing patch failed"
979 else 981 else
980 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL}) || die "uncompressing patch failed" 982 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL}) || die "uncompressing patch failed"
981 fi 983 fi
984 fi
985 fi
986
987 # If experimental was not chosen by the user, drop experimental patches not in K_EXP_GENPATCHES_LIST.
988 if [[ "${i}" == *"genpatches-"*".experimental."* && -n ${K_EXP_GENPATCHES_PULL} ]] ; then
989 if [[ -z ${K_EXP_GENPATCHES_NOUSE} ]] && use experimental; then
990 continue
991 fi
992
993 local j
994 for j in ${KPATCH_DIR}/*/50*_*.patch*; do
995 for k in ${K_EXP_GENPATCHES_LIST} ; do
996 [[ "$(basename ${j})" == ${k}* ]] && continue 2
997 done
998 UNIPATCH_DROP+=" $(basename ${j})"
999 done
1000 else
1001 UNIPATCH_LIST_GENPATCHES+=" ${DISTDIR}/${tarball}"
1002 debug-print "genpatches tarball: $tarball"
1003
1004 # check gcc version < 4.9.X uses patch 5000 and = 4.9.X uses patch 5010
1005 if [[ $(gcc-major-version) -eq 4 ]] && [[ $(gcc-minor-version) -ne 9 ]]; then
1006 # drop 5000_enable-additional-cpu-optimizations-for-gcc-4.9.patch
1007 if [[ $UNIPATCH_DROP != *"5010_enable-additional-cpu-optimizations-for-gcc-4.9.patch"* ]]; then
1008 UNIPATCH_DROP+=" 5010_enable-additional-cpu-optimizations-for-gcc-4.9.patch"
1009 fi
1010 else
1011 if [[ $UNIPATCH_DROP != *"5000_enable-additional-cpu-optimizations-for-gcc.patch"* ]]; then
1012 #drop 5000_enable-additional-cpu-optimizations-for-gcc.patch
1013 UNIPATCH_DROP+=" 5000_enable-additional-cpu-optimizations-for-gcc.patch"
1014 fi
1015 fi
1016
1017 # if kdbus use flag is not set, drop the kdbus patch
1018 if [[ $UNIPATCH_DROP != *"5015_kdbus*.patch"* ]] && ! use kdbus; then
1019 UNIPATCH_DROP="${UNIPATCH_DROP} 5015_kdbus*.patch"
982 fi 1020 fi
983 fi 1021 fi
984 done 1022 done
985 1023
986 #populate KPATCH_DIRS so we know where to look to remove the excludes 1024 #populate KPATCH_DIRS so we know where to look to remove the excludes
1020 [ -z ${i/*.patch*/} ] && PATCH_DEPTH=${i/*.patch/} 1058 [ -z ${i/*.patch*/} ] && PATCH_DEPTH=${i/*.patch/}
1021 #[ -z ${i/*.diff*/} ] && PATCH_DEPTH=${i/*.diff/} 1059 #[ -z ${i/*.diff*/} ] && PATCH_DEPTH=${i/*.diff/}
1022 1060
1023 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi 1061 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi
1024 1062
1063 ####################################################################
1064 # IMPORTANT: This is temporary code to support Linux git 3.15_rc1! #
1065 # #
1066 # The patch contains a removal of a symlink, followed by addition #
1067 # of a file with the same name as the symlink in the same #
1068 # location; this causes the dry-run to fail, filed bug #507656. #
1069 # #
1070 # https://bugs.gentoo.org/show_bug.cgi?id=507656 #
1071 ####################################################################
1072 if [[ ${PN} == "git-sources" ]] ; then
1073 if [[ ${KV_MAJOR}${KV_PATCH} -ge 315 && ${RELEASETYPE} == -rc ]] ; then
1025 ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)" 1074 ebegin "Applying ${i/*\//} (-p1)"
1075 if [ $(patch -p1 --no-backup-if-mismatch -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then
1076 eend 0
1077 rm ${STDERR_T}
1078 break
1079 else
1080 eend 1
1081 eerror "Failed to apply patch ${i/*\//}"
1082 eerror "Please attach ${STDERR_T} to any bug you may post."
1083 eshopts_pop
1084 die "Failed to apply ${i/*\//} on patch depth 1."
1085 fi
1086 fi
1087 fi
1088 ####################################################################
1089
1026 while [ ${PATCH_DEPTH} -lt 5 ]; do 1090 while [ ${PATCH_DEPTH} -lt 5 ]; do
1027 echo "Attempting Dry-run:" >> ${STDERR_T} 1091 echo "Attempting Dry-run:" >> ${STDERR_T}
1028 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i}" >> ${STDERR_T} 1092 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i}" >> ${STDERR_T}
1029 echo "=======================================================" >> ${STDERR_T} 1093 echo "=======================================================" >> ${STDERR_T}
1030 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then 1094 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then
1095 ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH})"
1031 echo "Attempting patch:" > ${STDERR_T} 1096 echo "Attempting patch:" > ${STDERR_T}
1032 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i}" >> ${STDERR_T} 1097 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i}" >> ${STDERR_T}
1033 echo "=======================================================" >> ${STDERR_T} 1098 echo "=======================================================" >> ${STDERR_T}
1034 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then 1099 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then
1035 eend 0 1100 eend 0
1038 else 1103 else
1039 eend 1 1104 eend 1
1040 eerror "Failed to apply patch ${i/*\//}" 1105 eerror "Failed to apply patch ${i/*\//}"
1041 eerror "Please attach ${STDERR_T} to any bug you may post." 1106 eerror "Please attach ${STDERR_T} to any bug you may post."
1042 eshopts_pop 1107 eshopts_pop
1043 die "Failed to apply ${i/*\//}" 1108 die "Failed to apply ${i/*\//} on patch depth ${PATCH_DEPTH}."
1044 fi 1109 fi
1045 else 1110 else
1046 PATCH_DEPTH=$((${PATCH_DEPTH} + 1)) 1111 PATCH_DEPTH=$((${PATCH_DEPTH} + 1))
1047 fi 1112 fi
1048 done 1113 done
1049 if [ ${PATCH_DEPTH} -eq 5 ]; then 1114 if [ ${PATCH_DEPTH} -eq 5 ]; then
1050 eend 1 1115 eerror "Failed to dry-run patch ${i/*\//}"
1051 eerror "Please attach ${STDERR_T} to any bug you may post." 1116 eerror "Please attach ${STDERR_T} to any bug you may post."
1052 eshopts_pop 1117 eshopts_pop
1053 die "Unable to dry-run patch." 1118 die "Unable to dry-run patch on any patch depth lower than 5."
1054 fi 1119 fi
1055 done 1120 done
1056 done 1121 done
1057 1122
1058 # This is a quick, and kind of nasty hack to deal with UNIPATCH_DOCS which 1123 # When genpatches is used, we want to install 0000_README which documents
1059 # sit in KPATCH_DIR's. This is handled properly in the unipatch rewrite, 1124 # the patches that were used; such that the user can see them, bug #301478.
1060 # which is why I'm not taking too much time over this. 1125 if [[ ! -z ${K_WANT_GENPATCHES} ]] ; then
1126 UNIPATCH_DOCS="${UNIPATCH_DOCS} 0000_README"
1127 fi
1128
1129 # When files listed in UNIPATCH_DOCS are found in KPATCH_DIR's, we copy it
1130 # to the temporary directory and remember them in UNIPATCH_DOCS to install
1131 # them during the install phase.
1061 local tmp 1132 local tmp
1133 for x in ${KPATCH_DIR}; do
1062 for i in ${UNIPATCH_DOCS}; do 1134 for i in ${UNIPATCH_DOCS}; do
1135 if [[ -f "${x}/${i}" ]] ; then
1063 tmp="${tmp} ${i//*\/}" 1136 tmp="${tmp} ${i}"
1064 cp -f ${i} "${T}"/ 1137 cp -f "${x}/${i}" "${T}"/
1138 fi
1139 done
1065 done 1140 done
1066 UNIPATCH_DOCS="${tmp}" 1141 UNIPATCH_DOCS="${tmp}"
1067 1142
1068 # clean up KPATCH_DIR's - fixes bug #53610 1143 # clean up KPATCH_DIR's - fixes bug #53610
1069 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done 1144 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done
1125 for i in ${COMPAT_URI}; do 1200 for i in ${COMPAT_URI}; do
1126 ARCH_PATCH="${ARCH_PATCH} ${DISTDIR}/${i/*\//}" 1201 ARCH_PATCH="${ARCH_PATCH} ${DISTDIR}/${i/*\//}"
1127 done 1202 done
1128 fi 1203 fi
1129 done 1204 done
1130}
1131
1132# sparc nastiness
1133#==============================================================
1134# This script generates the files in /usr/include/asm for sparc systems
1135# during installation of sys-kernel/linux-headers.
1136# Will no longer be needed when full 64 bit support is used on sparc64
1137# systems.
1138#
1139# Shamefully ripped from Debian
1140# ----------------------------------------------------------------------
1141
1142# Idea borrowed from RedHat's kernel package
1143
1144# This is gonna get replaced by something in multilib.eclass soon...
1145# --eradicator
1146generate_sparc_asm() {
1147 local name
1148
1149 cd $1 || die
1150 mkdir asm
1151
1152 for h in `( ls asm-sparc; ls asm-sparc64 ) | grep '\.h$' | sort -u`; do
1153 name="$(echo $h | tr a-z. A-Z_)"
1154 # common header
1155 echo "/* All asm/ files are generated and point to the corresponding
1156 * file in asm-sparc or asm-sparc64.
1157 */
1158
1159#ifndef __SPARCSTUB__${name}__
1160#define __SPARCSTUB__${name}__
1161" > asm/${h}
1162
1163 # common for sparc and sparc64
1164 if [ -f asm-sparc/$h -a -f asm-sparc64/$h ]; then
1165 echo "#ifdef __arch64__
1166#include <asm-sparc64/$h>
1167#else
1168#include <asm-sparc/$h>
1169#endif
1170" >> asm/${h}
1171
1172 # sparc only
1173 elif [ -f asm-sparc/$h ]; then
1174echo "#ifndef __arch64__
1175#include <asm-sparc/$h>
1176#endif
1177" >> asm/${h}
1178
1179 # sparc64 only
1180 else
1181echo "#ifdef __arch64__
1182#include <asm-sparc64/$h>
1183#endif
1184" >> asm/${h}
1185 fi
1186
1187 # common footer
1188 echo "#endif /* !__SPARCSTUB__${name}__ */" >> asm/${h}
1189 done
1190 return 0
1191} 1205}
1192 1206
1193headers___fix() { 1207headers___fix() {
1194 # Voodoo to partially fix broken upstream headers. 1208 # Voodoo to partially fix broken upstream headers.
1195 # note: do not put inline/asm/volatile together (breaks "inline asm volatile") 1209 # note: do not put inline/asm/volatile together (breaks "inline asm volatile")
1241 if [[ $K_DEBLOB_AVAILABLE == 1 ]] && use deblob ; then 1255 if [[ $K_DEBLOB_AVAILABLE == 1 ]] && use deblob ; then
1242 cp "${DISTDIR}/${DEBLOB_A}" "${T}" || die "cp ${DEBLOB_A} failed" 1256 cp "${DISTDIR}/${DEBLOB_A}" "${T}" || die "cp ${DEBLOB_A} failed"
1243 cp "${DISTDIR}/${DEBLOB_CHECK_A}" "${T}/deblob-check" || die "cp ${DEBLOB_CHECK_A} failed" 1257 cp "${DISTDIR}/${DEBLOB_CHECK_A}" "${T}/deblob-check" || die "cp ${DEBLOB_CHECK_A} failed"
1244 chmod +x "${T}/${DEBLOB_A}" "${T}/deblob-check" || die "chmod deblob scripts failed" 1258 chmod +x "${T}/${DEBLOB_A}" "${T}/deblob-check" || die "chmod deblob scripts failed"
1245 fi 1259 fi
1260
1261 # fix a problem on ppc where TOUT writes to /usr/src/linux breaking sandbox
1262 # only do this for kernel < 2.6.27 since this file does not exist in later
1263 # kernels
1264 if [[ -n ${KV_MINOR} && ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} < 2.6.27 ]] ; then
1265 sed -i \
1266 -e 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
1267 "${S}"/arch/ppc/Makefile
1268 else
1269 sed -i \
1270 -e 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
1271 "${S}"/arch/powerpc/Makefile
1272 fi
1246} 1273}
1247 1274
1248kernel-2_src_compile() { 1275kernel-2_src_compile() {
1249 cd "${S}" 1276 cd "${S}"
1250 [[ ${ETYPE} == headers ]] && compile_headers 1277 [[ ${ETYPE} == headers ]] && compile_headers
1251 1278
1252 if [[ $K_DEBLOB_AVAILABLE == 1 ]] && use deblob ; then 1279 if [[ $K_DEBLOB_AVAILABLE == 1 ]] && use deblob ; then
1253 echo ">>> Running deblob script ..." 1280 echo ">>> Running deblob script ..."
1254 sh "${T}/${DEBLOB_A}" --force || \ 1281 python_setup
1255 die "Deblob script failed to run!!!" 1282 sh "${T}/${DEBLOB_A}" --force || die "Deblob script failed to run!!!"
1256 fi 1283 fi
1257} 1284}
1258 1285
1259# if you leave it to the default src_test, it will run make to 1286# if you leave it to the default src_test, it will run make to
1260# find whether test/check targets are present; since "make test" 1287# find whether test/check targets are present; since "make test"
1278 [[ ${ETYPE} == sources ]] && postinst_sources 1305 [[ ${ETYPE} == sources ]] && postinst_sources
1279} 1306}
1280 1307
1281kernel-2_pkg_setup() { 1308kernel-2_pkg_setup() {
1282 if kernel_is 2 4; then 1309 if kernel_is 2 4; then
1283 if [ "$( gcc-major-version )" -eq "4" ] ; then 1310 if [[ $(gcc-major-version) -ge 4 ]] ; then
1284 echo 1311 echo
1285 ewarn "Be warned !! >=sys-devel/gcc-4.0.0 isn't supported with linux-2.4!" 1312 ewarn "Be warned !! >=sys-devel/gcc-4.0.0 isn't supported with linux-2.4!"
1286 ewarn "Either switch to another gcc-version (via gcc-config) or use a" 1313 ewarn "Either switch to another gcc-version (via gcc-config) or use a"
1287 ewarn "newer kernel that supports gcc-4." 1314 ewarn "newer kernel that supports gcc-4."
1288 echo 1315 echo
1297 [[ ${ETYPE} == headers ]] && setup_headers 1324 [[ ${ETYPE} == headers ]] && setup_headers
1298 [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..." 1325 [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..."
1299} 1326}
1300 1327
1301kernel-2_pkg_postrm() { 1328kernel-2_pkg_postrm() {
1329 # This warning only makes sense for kernel sources.
1330 [[ ${ETYPE} == headers ]] && return 0
1331
1332 # If there isn't anything left behind, then don't complain.
1333 [[ -e ${ROOT}usr/src/linux-${KV_FULL} ]] || return 0
1302 echo 1334 echo
1303 ewarn "Note: Even though you have successfully unmerged " 1335 ewarn "Note: Even though you have successfully unmerged "
1304 ewarn "your kernel package, directories in kernel source location: " 1336 ewarn "your kernel package, directories in kernel source location: "
1305 ewarn "${ROOT}usr/src/linux-${KV_FULL}" 1337 ewarn "${ROOT}usr/src/linux-${KV_FULL}"
1306 ewarn "with modified files will remain behind. By design, package managers" 1338 ewarn "with modified files will remain behind. By design, package managers"
1307 ewarn "will not remove these modified files and the directories they reside in." 1339 ewarn "will not remove these modified files and the directories they reside in."
1308 echo 1340 echo
1309} 1341}
1310

Legend:
Removed from v.1.258  
changed lines
  Added in v.1.306

  ViewVC Help
Powered by ViewVC 1.1.20