/[gentoo-x86]/eclass/kernel-2.eclass
Gentoo

Contents of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.236 - (hide annotations) (download)
Sat Jun 5 18:49:49 2010 UTC (9 years ago) by vapier
Branch: MAIN
Changes since 1.235: +3 -1 lines
support by Jens Pranaitis for xz/lzma patches #322235

1 vapier 1.218 # Copyright 1999-2009 Gentoo Foundation
2 johnm 1.13 # Distributed under the terms of the GNU General Public License v2
3 vapier 1.236 # $Header: /var/cvsroot/gentoo-x86/eclass/kernel-2.eclass,v 1.235 2010/05/28 20:59:59 robbat2 Exp $
4 johnm 1.13
5 johnm 1.54 # Description: kernel.eclass rewrite for a clean base regarding the 2.6
6     # series of kernel with back-compatibility for 2.4
7 johnm 1.3 #
8 phreak 1.206 # Original author: John Mylchreest <johnm@gentoo.org>
9     # Maintainer: kernel-misc@gentoo.org
10 johnm 1.3 #
11     # Please direct your bugs to the current eclass maintainer :)
12 johnm 1.1
13     # added functionality:
14     # unipatch - a flexible, singular method to extract, add and remove patches.
15    
16 johnm 1.54 # A Couple of env vars are available to effect usage of this eclass
17 johnm 1.1 # These are as follows:
18     #
19 johnm 1.93 # K_USEPV - When setting the EXTRAVERSION variable, it should
20     # add PV to the end.
21     # this is useful for thigns like wolk. IE:
22     # EXTRAVERSION would be something like : -wolk-4.19-r1
23 johnm 1.55 # K_NOSETEXTRAVERSION - if this is set then EXTRAVERSION will not be
24     # automatically set within the kernel Makefile
25     # K_NOUSENAME - if this is set then EXTRAVERSION will not include the
26     # first part of ${PN} in EXTRAVERSION
27 robbat2 1.163 # K_NOUSEPR - if this is set then EXTRAVERSION will not include the
28     # anything based on ${PR}.
29 lu_zero 1.62 # K_PREPATCHED - if the patchset is prepatched (ie: mm-sources,
30     # ck-sources, ac-sources) it will use PR (ie: -r5) as
31     # the patchset version for
32 johnm 1.93 # and not use it as a true package revision
33 johnm 1.55 # K_EXTRAEINFO - this is a new-line seperated list of einfo displays in
34 lu_zero 1.62 # postinst and can be used to carry additional postinst
35 johnm 1.55 # messages
36 zlin 1.208 # 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
38 johnm 1.107 # K_SYMLINK - if this is set, then forcably create symlink anyway
39 plasmaroo 1.105 #
40 johnm 1.108 # K_DEFCONFIG - Allow specifying a different defconfig target.
41     # If length zero, defaults to "defconfig".
42 dsd 1.126 # K_WANT_GENPATCHES - Apply genpatches to kernel source. Provide any
43     # combination of "base" and "extras"
44     # 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
46     # my-sources-2.6.12.ebuild
47 dsd 1.200 # K_SECURITY_UNSUPPORTED- If set, this kernel is unsupported by Gentoo Security
48 robbat2 1.230 # 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
50     # possible. Test ONLY for "1".
51     # K_PREDEBLOBBED - This kernel was already deblobbed elsewhere.
52     # If false, either optional deblobbing will be available
53     # or the license will note the inclusion of freedist
54     # code.
55 johnm 1.55
56     # H_SUPPORTEDARCH - this should be a space separated list of ARCH's which
57     # can be supported by the headers ebuild
58    
59     # UNIPATCH_LIST - space delimetered list of patches to be applied to the
60     # kernel
61     # UNIPATCH_EXCLUDE - an addition var to support exlusion based completely
62     # on "<passedstring>*" and not "<passedno#>_*"
63 lu_zero 1.62 # - this should _NOT_ be used from the ebuild as this is
64 johnm 1.55 # reserved for end users passing excludes from the cli
65 lu_zero 1.62 # UNIPATCH_DOCS - space delimemeted list of docs to be installed to
66 johnm 1.55 # the doc dir
67 lu_zero 1.62 # UNIPATCH_STRICTORDER - if this is set places patches into directories of
68 johnm 1.55 # order, so they are applied in the order passed
69 johnm 1.1
70 phreak 1.192 inherit eutils toolchain-funcs versionator multilib
71 vapier 1.161 EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst pkg_postinst
72 johnm 1.1
73 dostrow 1.132 # 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.
75     # I will remove it when I come up with something more reasonable.
76 vapier 1.189 [[ ${PROFILE_ARCH} == "ppc64" ]] && CHOST="powerpc64-${CHOST#*-}"
77 dostrow 1.132
78 vapier 1.75 export CTARGET=${CTARGET:-${CHOST}}
79 hollow 1.96 if [[ ${CTARGET} == ${CHOST} && ${CATEGORY/cross-} != ${CATEGORY} ]]; then
80 hollow 1.95 export CTARGET=${CATEGORY/cross-}
81 vapier 1.75 fi
82 vapier 1.60
83 phreak 1.181 HOMEPAGE="http://www.kernel.org/ http://www.gentoo.org/ ${HOMEPAGE}"
84 robbat2 1.225 [[ -z ${LICENSE} ]] && \
85 robbat2 1.229 LICENSE="GPL-2"
86 johnm 1.1
87 robbat2 1.231 # This is the latest KV_PATCH of the deblob tool available from the
88     # libre-sources upstream.
89 robbat2 1.235 [[ -z ${DEBLOB_MAX_VERSION} ]] && DEBLOB_MAX_VERSION=34
90 robbat2 1.231
91 brix 1.178 # No need to run scanelf/strip on kernel sources/headers (bug #134453).
92     RESTRICT="binchecks strip"
93    
94 johnm 1.18 # set LINUX_HOSTCFLAGS if not already set
95 vapier 1.136 [[ -z ${LINUX_HOSTCFLAGS} ]] && \
96 johnm 1.93 LINUX_HOSTCFLAGS="-Wall -Wstrict-prototypes -Os -fomit-frame-pointer -I${S}/include"
97 johnm 1.18
98 robbat2 1.163 # debugging functions
99     #==============================================================
100     # this function exists only to help debug kernel-2.eclass
101     # 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.
103     debug-print-kernel2-variables() {
104 robbat2 1.228 for v in PVR CKV OKV KV KV_FULL KV_MAJOR KV_MINOR KV_PATCH RELEASETYPE \
105     RELEASE UNIPATCH_LIST_DEFAULT UNIPATCH_LIST_GENPATCHES \
106     UNIPATCH_LIST S KERNEL_URI ; do
107     debug-print "${v}: ${!v}"
108     done
109 robbat2 1.163 }
110    
111 johnm 1.54 #Eclass functions only from here onwards ...
112 plasmaroo 1.33 #==============================================================
113 dsd 1.126 handle_genpatches() {
114     local tarball
115 vapier 1.218 [[ -z ${K_WANT_GENPATCHES} || -z ${K_GENPATCHES_VER} ]] && return 1
116 dsd 1.126
117     for i in ${K_WANT_GENPATCHES} ; do
118     tarball="genpatches-${OKV}-${K_GENPATCHES_VER}.${i}.tar.bz2"
119     GENPATCHES_URI="${GENPATCHES_URI} mirror://gentoo/${tarball}"
120     UNIPATCH_LIST_GENPATCHES="${UNIPATCH_LIST_GENPATCHES} ${DISTDIR}/${tarball}"
121     done
122     }
123    
124 johnm 1.117 detect_version() {
125     # this function will detect and set
126     # - 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)
128     # - EXTRAVERSION: The additional version appended to OKV (-gentoo/-gentoo-r1)
129    
130     if [[ -n ${KV_FULL} ]]; then
131     # we will set this for backwards compatibility.
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    
139     # CKV is used as a comparison kernel version, which is used when
140     # PV doesnt reflect the genuine kernel version.
141     # this gets set to the portage style versioning. ie:
142     # CKV=2.6.11_rc4
143     CKV=${CKV:-${PV}}
144     OKV=${OKV:-${CKV}}
145     OKV=${OKV/_beta/-test}
146     OKV=${OKV/_rc/-rc}
147     OKV=${OKV/-r*}
148     OKV=${OKV/_p*}
149    
150     KV_MAJOR=$(get_version_component_range 1 ${OKV})
151     KV_MINOR=$(get_version_component_range 2 ${OKV})
152     KV_PATCH=$(get_version_component_range 3 ${OKV})
153    
154     if [[ ${KV_MAJOR}${KV_MINOR}${KV_PATCH} -ge 269 ]]; then
155     KV_EXTRA=$(get_version_component_range 4- ${OKV})
156     KV_EXTRA=${KV_EXTRA/[-_]*}
157     else
158     KV_PATCH=$(get_version_component_range 3- ${OKV})
159     fi
160     KV_PATCH=${KV_PATCH/[-_]*}
161 robbat2 1.234
162     local v n=0 missing
163     for v in CKV OKV KV_{MAJOR,MINOR,PATCH} ; do
164     [[ -z ${!v} ]] && n=1 && missing="${missing}${v} ";
165     done
166     [[ $n -eq 1 ]] && \
167     eerror "Missing variables: ${missing}" && \
168     die "Failed to extract kernel version (try explicit CKV in ebuild)!"
169     unset v n missing
170 johnm 1.117
171     KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
172    
173     RELEASE=${CKV/${OKV}}
174     RELEASE=${RELEASE/_beta}
175     RELEASE=${RELEASE/_rc/-rc}
176     RELEASE=${RELEASE/_pre/-pre}
177 robbat2 1.234 # We cannot trivally call kernel_is here, because it calls us to detect the
178     # version
179     #kernel_is ge 2 6 && RELEASE=${RELEASE/-pre/-git}
180     [ $(($KV_MAJOR * 1000 + $KV_MINOR)) -ge 2006 ] && RELEASE=${RELEASE/-pre/-git}
181 johnm 1.117 RELEASETYPE=${RELEASE//[0-9]}
182    
183 gregkh 1.156 # Now we know that RELEASE is the -rc/-git
184 johnm 1.117 # and RELEASETYPE is the same but with its numerics stripped
185     # we can work on better sorting EXTRAVERSION.
186     # first of all, we add the release
187     EXTRAVERSION="${RELEASE}"
188 robbat2 1.163 debug-print "0 EXTRAVERSION:${EXTRAVERSION}"
189 johnm 1.117 [[ -n ${KV_EXTRA} ]] && EXTRAVERSION=".${KV_EXTRA}${EXTRAVERSION}"
190    
191 robbat2 1.163 debug-print "1 EXTRAVERSION:${EXTRAVERSION}"
192     if [[ -n "${K_NOUSEPR}" ]]; then
193     # Don't add anything based on PR to EXTRAVERSION
194     debug-print "1.0 EXTRAVERSION:${EXTRAVERSION}"
195     elif [[ -n ${K_PREPATCHED} ]]; then
196     debug-print "1.1 EXTRAVERSION:${EXTRAVERSION}"
197 johnm 1.117 EXTRAVERSION="${EXTRAVERSION}-${PN/-*}${PR/r}"
198     elif [[ "${ETYPE}" = "sources" ]]; then
199 robbat2 1.163 debug-print "1.2 EXTRAVERSION:${EXTRAVERSION}"
200 johnm 1.117 # For some sources we want to use the PV in the extra version
201     # This is because upstream releases with a completely different
202     # versioning scheme.
203     case ${PN/-*} in
204     wolk) K_USEPV=1;;
205     vserver) K_USEPV=1;;
206     esac
207    
208 robbat2 1.163 [[ -z "${K_NOUSENAME}" ]] && EXTRAVERSION="${EXTRAVERSION}-${PN/-*}"
209     [[ -n "${K_USEPV}" ]] && EXTRAVERSION="${EXTRAVERSION}-${PV//_/-}"
210     [[ -n "${PR//r0}" ]] && EXTRAVERSION="${EXTRAVERSION}-${PR}"
211 johnm 1.117 fi
212 robbat2 1.163 debug-print "2 EXTRAVERSION:${EXTRAVERSION}"
213 johnm 1.117
214 johnm 1.120 # 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
216     # KV_FULL evaluates to MAJ.MIN.PAT.EXT.EXT after EXTRAVERSION
217     if [[ -n ${KV_EXTRA} ]]; then
218     OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
219     KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/patch-${CKV}.bz2
220     mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}.tar.bz2"
221     UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV}.bz2"
222     fi
223 swegener 1.135
224 johnm 1.118 # 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
226     KV_FULL=${OKV}${EXTRAVERSION}
227    
228     # we will set this for backwards compatibility.
229     S=${WORKDIR}/linux-${KV_FULL}
230     KV=${KV_FULL}
231    
232 gregkh 1.156 # -rc-git pulls can be achieved by specifying CKV
233 johnm 1.117 # for example:
234     # CKV="2.6.11_rc3_pre2"
235     # will pull:
236 gregkh 1.156 # linux-2.6.10.tar.bz2 & patch-2.6.11-rc3.bz2 & patch-2.6.11-rc3-git2.bz2
237 johnm 1.117
238     if [[ ${RELEASETYPE} == -rc ]] || [[ ${RELEASETYPE} == -pre ]]; then
239     OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))"
240     KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${CKV//_/-}.bz2
241     mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
242     UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV//_/-}.bz2"
243     fi
244    
245 gregkh 1.156 if [[ ${RELEASETYPE} == -git ]]; then
246 johnm 1.117 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${OKV}${RELEASE}.bz2
247     mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
248     UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${OKV}${RELEASE}.bz2"
249     fi
250    
251 gregkh 1.156 if [[ ${RELEASETYPE} == -rc-git ]]; then
252 johnm 1.117 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
254 gregkh 1.156 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.bz2
255 johnm 1.117 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
256 gregkh 1.156 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.bz2 ${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2"
257 johnm 1.117 fi
258 dsd 1.126
259 swegener 1.165 debug-print-kernel2-variables
260 robbat2 1.163
261 dsd 1.126 handle_genpatches
262 johnm 1.117 }
263    
264 plasmaroo 1.33 kernel_is() {
265 robbat2 1.226 # 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.
267     local v n=0
268     for v in OKV KV_{MAJOR,MINOR,PATCH} ; do [[ -z ${!v} ]] && n=1 ; done
269     [[ $n -eq 1 ]] && detect_version
270     unset v n
271    
272     # Now we can continue
273 johnm 1.93 local operator test value x=0 y=0 z=0
274 johnm 1.67
275 johnm 1.93 case ${1} in
276     lt) operator="-lt"; shift;;
277     gt) operator="-gt"; shift;;
278     le) operator="-le"; shift;;
279     ge) operator="-ge"; shift;;
280     eq) operator="-eq"; shift;;
281     *) operator="-eq";;
282     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 swegener 1.135
289 johnm 1.93 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.";;
297     esac
298     done
299 johnm 1.69
300 johnm 1.93 [ ${test} ${operator} ${value} ] && return 0 || return 1
301 plasmaroo 1.33 }
302 johnm 1.18
303     kernel_is_2_4() {
304 johnm 1.56 kernel_is 2 4
305 johnm 1.18 }
306    
307     kernel_is_2_6() {
308 johnm 1.78 kernel_is 2 6 || kernel_is 2 5
309 johnm 1.18 }
310    
311 plasmaroo 1.33 # Capture the sources type and set DEPENDs
312 hollow 1.95 if [[ ${ETYPE} == sources ]]; then
313 johnm 1.1 DEPEND="!build? ( sys-apps/sed
314 dsd 1.183 >=sys-devel/binutils-2.11.90.0.31 )"
315 johnm 1.147 RDEPEND="!build? ( >=sys-libs/ncurses-5.2
316 zmedico 1.221 sys-devel/make )"
317 robbat2 1.222 PDEPEND="!build? ( virtual/dev-manager )"
318 lu_zero 1.62
319 johnm 1.78 PROVIDE="virtual/linux-sources"
320     kernel_is gt 2 4 && PROVIDE="${PROVIDE} virtual/alsa"
321 johnm 1.147
322 johnm 1.72 SLOT="${PVR}"
323 johnm 1.147 DESCRIPTION="Sources for the ${KV_MAJOR}.${KV_MINOR} linux kernel"
324 dsd 1.183 IUSE="symlink build"
325 robbat2 1.229
326     # Bug #266157, deblob for libre support
327 robbat2 1.230 if [[ -z ${K_PREDEBLOBBED} ]] ; then
328 robbat2 1.231 if [[ -z ${K_DEBLOB_AVAILABLE} ]] ; then
329     kernel_is ge 2 6 27 && \
330     kernel_is le 2 6 ${DEBLOB_MAX_VERSION} && \
331     K_DEBLOB_AVAILABLE=1
332     fi
333     if [[ ${K_DEBLOB_AVAILABLE} == "1" ]] ; then
334 robbat2 1.229 IUSE="${IUSE} deblob"
335     # Reflect that kernels contain firmware blobs unless otherwise
336     # stripped
337     LICENSE="${LICENSE} !deblob? ( freedist )"
338    
339     DEBLOB_PV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
340     DEBLOB_A="deblob-${DEBLOB_PV}"
341     DEBLOB_HOMEPAGE="http://www.fsfla.org/svnwiki/selibre/linux-libre/"
342     HOMEPAGE="${HOMEPAGE} ${DEBLOB_HOMEPAGE}"
343    
344     KERNEL_URI="${KERNEL_URI}
345     deblob? (
346     ${DEBLOB_HOMEPAGE}/download/releases/LATEST-${DEBLOB_PV}.N/${DEBLOB_A}
347     )"
348     else
349     # We have no way to deblob older kernels, so just mark them as
350     # tainted with non-libre materials.
351     LICENSE="${LICENSE} freedist"
352     fi
353     fi
354    
355 hollow 1.95 elif [[ ${ETYPE} == headers ]]; then
356 johnm 1.72 DESCRIPTION="Linux system headers"
357 swegener 1.135
358 johnm 1.174 # Since we should NOT honour KBUILD_OUTPUT in headers
359     # lets unset it here.
360     unset KBUILD_OUTPUT
361    
362 hollow 1.95 if [[ ${CTARGET} = ${CHOST} ]]; then
363 johnm 1.72 DEPEND="!virtual/os-headers"
364 vapier 1.137 PROVIDE="virtual/os-headers"
365 johnm 1.72 SLOT="0"
366     else
367     SLOT="${CTARGET}"
368     fi
369 johnm 1.1 else
370 johnm 1.55 eerror "Unknown ETYPE=\"${ETYPE}\", must be \"sources\" or \"headers\""
371 johnm 1.93 die "Unknown ETYPE=\"${ETYPE}\", must be \"sources\" or \"headers\""
372 johnm 1.1 fi
373    
374 vapier 1.153 # Cross-compile support functions
375 johnm 1.1 #==============================================================
376 vapier 1.153 kernel_header_destdir() {
377     [[ ${CTARGET} == ${CHOST} ]] \
378     && echo /usr/include \
379 vapier 1.168 || echo /usr/${CTARGET}/usr/include
380 vapier 1.153 }
381    
382     cross_pre_c_headers() {
383 kugelfang 1.187 use crosscompile_opts_headers-only && [[ ${CHOST} != ${CTARGET} ]]
384 vapier 1.153 }
385    
386     env_setup_xmakeopts() {
387 johnm 1.117 # Kernel ARCH != portage ARCH
388 vapier 1.153 export KARCH=$(tc-arch-kernel)
389 johnm 1.117
390 vapier 1.136 # When cross-compiling, we need to set the ARCH/CROSS_COMPILE
391     # variables properly or bad things happen !
392 vapier 1.153 xmakeopts="ARCH=${KARCH}"
393     if [[ ${CTARGET} != ${CHOST} ]] && ! cross_pre_c_headers ; then
394 vapier 1.136 xmakeopts="${xmakeopts} CROSS_COMPILE=${CTARGET}-"
395 vapier 1.151 elif type -p ${CHOST}-ar > /dev/null ; then
396 vapier 1.136 xmakeopts="${xmakeopts} CROSS_COMPILE=${CHOST}-"
397     fi
398 vapier 1.153 export xmakeopts
399     }
400    
401     # Unpack functions
402     #==============================================================
403     unpack_2_4() {
404 lu_zero 1.62 # this file is required for other things to build properly,
405 johnm 1.1 # so we autogenerate it
406 vapier 1.145 make -s mrproper ${xmakeopts} || die "make mrproper failed"
407     make -s symlinks ${xmakeopts} || die "make symlinks failed"
408     make -s include/linux/version.h ${xmakeopts} || die "make include/linux/version.h failed"
409 johnm 1.1 echo ">>> version.h compiled successfully."
410     }
411    
412 vapier 1.153 unpack_2_6() {
413     # this file is required for other things to build properly, so we
414 johnm 1.172 # autogenerate it ... generate a .config to keep version.h build from
415 vapier 1.153 # spitting out an annoying warning
416 johnm 1.177 make -s mrproper ${xmakeopts} 2>/dev/null \
417     || die "make mrproper failed"
418    
419     # quick fix for bug #132152 which triggers when it cannot include linux
420     # headers (ie, we have not installed it yet)
421 vapier 1.188 if ! make -s defconfig ${xmakeopts} &>/dev/null 2>&1 ; then
422 johnm 1.177 touch .config
423     eerror "make defconfig failed."
424     eerror "assuming you dont have any headers installed yet and continuing"
425     epause 5
426     fi
427    
428     make -s include/linux/version.h ${xmakeopts} 2>/dev/null \
429     || die "make include/linux/version.h failed"
430 swegener 1.179 rm -f .config >/dev/null
431 vapier 1.153 }
432    
433 johnm 1.1 universal_unpack() {
434 mpagano 1.223 cd "${WORKDIR}"
435 plasmaroo 1.33 unpack linux-${OKV}.tar.bz2
436 johnm 1.175 if [[ -d "linux" ]]; then
437     mv linux linux-${KV_FULL} \
438     || die "Unable to move source tree to ${KV_FULL}."
439     elif [[ "${OKV}" != "${KV_FULL}" ]]; then
440 hollow 1.98 mv linux-${OKV} linux-${KV_FULL} \
441 johnm 1.55 || die "Unable to move source tree to ${KV_FULL}."
442 hollow 1.98 fi
443 vapier 1.136 cd "${S}"
444 lu_zero 1.62
445 johnm 1.1 # remove all backup files
446     find . -iname "*~" -exec rm {} \; 2> /dev/null
447    
448 johnm 1.78 # fix a problem on ppc where TOUT writes to /usr/src/linux breaking sandbox
449 mpagano 1.215 # 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 mpagano 1.216 else
457     sed -i \
458     -e 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
459     "${S}"/arch/powerpc/Makefile
460 mpagano 1.215 fi
461 johnm 1.1 }
462    
463     unpack_set_extraversion() {
464 vapier 1.136 cd "${S}"
465 dsd 1.104 sed -i -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile
466 vapier 1.185 cd "${OLDPWD}"
467 johnm 1.1 }
468    
469 dsd 1.104 # Should be done after patches have been applied
470     # Otherwise patches that modify the same area of Makefile will fail
471     unpack_fix_install_path() {
472 vapier 1.136 cd "${S}"
473 dsd 1.104 sed -i -e 's:#export\tINSTALL_PATH:export\tINSTALL_PATH:' Makefile
474     }
475    
476 johnm 1.1 # Compile Functions
477     #==============================================================
478     compile_headers() {
479 vapier 1.153 env_setup_xmakeopts
480    
481 swegener 1.135 # if we couldnt obtain HOSTCFLAGS from the Makefile,
482 vapier 1.75 # then set it to something sane
483 vapier 1.136 local HOSTCFLAGS=$(getfilevar HOSTCFLAGS "${S}"/Makefile)
484 vapier 1.75 HOSTCFLAGS=${HOSTCFLAGS:--Wall -Wstrict-prototypes -O2 -fomit-frame-pointer}
485    
486 johnm 1.93 if kernel_is 2 4; then
487 vapier 1.75 yes "" | make oldconfig ${xmakeopts}
488 johnm 1.72 echo ">>> make oldconfig complete"
489 vapier 1.152 make dep ${xmakeopts}
490 hollow 1.95 elif kernel_is 2 6; then
491 vapier 1.193 # 2.6.18 introduces headers_install which means we dont need any
492     # of this crap anymore :D
493     kernel_is ge 2 6 18 && return 0
494    
495 johnm 1.72 # autoconf.h isnt generated unless it already exists. plus, we have
496     # no guarantee that any headers are installed on the system...
497 vapier 1.75 [[ -f ${ROOT}/usr/include/linux/autoconf.h ]] \
498 johnm 1.72 || touch include/linux/autoconf.h
499    
500 plasmaroo 1.105 # if K_DEFCONFIG isn't set, force to "defconfig"
501     # needed by mips
502     if [[ -z ${K_DEFCONFIG} ]]; then
503 dostrow 1.194 if [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.16) ]]; then
504     case ${CTARGET} in
505     powerpc64*) K_DEFCONFIG="ppc64_defconfig";;
506     powerpc*) K_DEFCONFIG="pmac32_defconfig";;
507     *) K_DEFCONFIG="defconfig";;
508     esac
509     else
510     K_DEFCONFIG="defconfig"
511     fi
512 plasmaroo 1.105 fi
513    
514 johnm 1.72 # if there arent any installed headers, then there also isnt an asm
515     # symlink in /usr/include/, and make defconfig will fail, so we have
516     # to force an include path with $S.
517 vapier 1.75 HOSTCFLAGS="${HOSTCFLAGS} -I${S}/include/"
518     ln -sf asm-${KARCH} "${S}"/include/asm
519 vapier 1.153 cross_pre_c_headers && return 0
520    
521 vapier 1.170 make ${K_DEFCONFIG} HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "defconfig failed (${K_DEFCONFIG})"
522     if compile_headers_tweak_config ; then
523     yes "" | make oldconfig HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "2nd oldconfig failed"
524     fi
525 vapier 1.75 make prepare HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed"
526 eradicator 1.100 make prepare-all HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed"
527 johnm 1.72 fi
528 johnm 1.1 }
529    
530 vapier 1.170 compile_headers_tweak_config() {
531     # some targets can be very very picky, so let's finesse the
532     # .config based upon any info we may have
533     case ${CTARGET} in
534     sh*)
535     sed -i '/CONFIG_CPU_SH/d' .config
536     echo "CONFIG_CPU_SH${CTARGET:2:1}=y" >> .config
537     return 0;;
538     esac
539    
540     # no changes, so lets do nothing
541     return 1
542     }
543    
544 johnm 1.1 # install functions
545     #==============================================================
546     install_universal() {
547     #fix silly permissions in tarball
548 mpagano 1.223 cd "${WORKDIR}"
549 vapier 1.217 chown -R root:0 * >& /dev/null
550 johnm 1.1 chmod -R a+r-w+X,u+w *
551 johnm 1.93 cd ${OLDPWD}
552 johnm 1.1 }
553    
554     install_headers() {
555 vapier 1.195 local ddir=$(kernel_header_destdir)
556    
557 vapier 1.193 # 2.6.18 introduces headers_install which means we dont need any
558     # of this crap anymore :D
559     if kernel_is ge 2 6 18 ; then
560     env_setup_xmakeopts
561 vapier 1.195 emake headers_install INSTALL_HDR_PATH="${D}"/${ddir}/.. ${xmakeopts} || die
562 vapier 1.196
563     # let other packages install some of these headers
564     rm -rf "${D}"/${ddir}/sound #alsa-headers
565     rm -rf "${D}"/${ddir}/scsi #glibc/uclibc/etc...
566 vapier 1.193 return 0
567     fi
568    
569 vapier 1.198 # Do not use "linux/*" as that can cause problems with very long
570     # $S values where the cmdline to cp is too long
571 vapier 1.136 cd "${S}"
572 vapier 1.60 dodir ${ddir}/linux
573 vapier 1.198 cp -pPR "${S}"/include/linux "${D}"/${ddir}/ || die
574     rm -rf "${D}"/${ddir}/linux/modules
575 lu_zero 1.62
576 vapier 1.137 # Handle multilib headers and crap
577     local multi_dirs="" multi_defs=""
578 eradicator 1.99 case $(tc-arch-kernel) in
579     sparc64)
580 vapier 1.137 multi_dirs="sparc sparc64"
581     multi_defs="!__arch64__ __arch64__"
582 eradicator 1.99 ;;
583     x86_64)
584 vapier 1.137 multi_dirs="i386 x86_64"
585     multi_defs="__i386__ __x86_64__"
586 eradicator 1.99 ;;
587 dostrow 1.131 ppc64)
588 vapier 1.137 multi_dirs="ppc ppc64"
589     multi_defs="!__powerpc64__ __powerpc64__"
590     ;;
591     s390x)
592     multi_dirs="s390 s390x"
593     multi_defs="!__s390x__ __s390x__"
594 dostrow 1.131 ;;
595 vapier 1.114 arm)
596     dodir ${ddir}/asm
597 flameeyes 1.176 cp -pPR "${S}"/include/asm/* "${D}"/${ddir}/asm
598 vapier 1.139 [[ ! -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 vapier 1.114 ;;
601 dostrow 1.155 powerpc)
602     dodir ${ddir}/asm
603 mpagano 1.223 cp -pPR "${S}"/include/asm/* "${D}"/${ddir}/asm
604 dostrow 1.155 if [[ -e "${S}"/include/asm-ppc ]] ; then
605     dodir ${ddir}/asm-ppc
606 mpagano 1.223 cp -pPR "${S}"/include/asm-ppc/* "${D}"/${ddir}/asm-ppc
607 dostrow 1.155 fi
608 swegener 1.159 ;;
609 eradicator 1.99 *)
610     dodir ${ddir}/asm
611 mpagano 1.223 cp -pPR "${S}"/include/asm/* "${D}"/${ddir}/asm
612 eradicator 1.99 ;;
613     esac
614 vapier 1.137 if [[ -n ${multi_dirs} ]] ; then
615     local d ml_inc=""
616     for d in ${multi_dirs} ; do
617     dodir ${ddir}/asm-${d}
618 mpagano 1.223 cp -pPR "${S}"/include/asm-${d}/* "${D}"/${ddir}/asm-${d}/ || die "cp asm-${d} failed"
619 vapier 1.137
620     ml_inc="${ml_inc} ${multi_defs%% *}:${ddir}/asm-${d}"
621     multi_defs=${multi_defs#* }
622     done
623 swegener 1.140 create_ml_includes ${ddir}/asm ${ml_inc}
624 vapier 1.137 fi
625 eradicator 1.76
626 johnm 1.93 if kernel_is 2 6; then
627 vapier 1.60 dodir ${ddir}/asm-generic
628 mpagano 1.223 cp -pPR "${S}"/include/asm-generic/* "${D}"/${ddir}/asm-generic
629 johnm 1.12 fi
630 eradicator 1.99
631 vapier 1.103 # clean up
632     find "${D}" -name '*.orig' -exec rm -f {} \;
633    
634 johnm 1.93 cd ${OLDPWD}
635 johnm 1.1 }
636    
637     install_sources() {
638 dsd 1.183 local file
639 johnm 1.1
640 vapier 1.136 cd "${S}"
641 johnm 1.12 dodir /usr/src
642 johnm 1.54 echo ">>> Copying sources ..."
643 johnm 1.93
644 johnm 1.27 file="$(find ${WORKDIR} -iname "docs" -type d)"
645 johnm 1.93 if [[ -n ${file} ]]; then
646     for file in $(find ${file} -type f); do
647 vapier 1.136 echo "${file//*docs\/}" >> "${S}"/patches.txt
648     echo "===================================================" >> "${S}"/patches.txt
649     cat ${file} >> "${S}"/patches.txt
650     echo "===================================================" >> "${S}"/patches.txt
651     echo "" >> "${S}"/patches.txt
652 johnm 1.1 done
653 johnm 1.12 fi
654 johnm 1.1
655 johnm 1.93 if [[ ! -f ${S}/patches.txt ]]; then
656 johnm 1.12 # patches.txt is empty so lets use our ChangeLog
657 johnm 1.93 [[ -f ${FILESDIR}/../ChangeLog ]] && \
658     echo "Please check the ebuild ChangeLog for more details." \
659 vapier 1.136 > "${S}"/patches.txt
660 johnm 1.12 fi
661    
662 mpagano 1.223 mv ${WORKDIR}/linux* "${D}"/usr/src
663 johnm 1.1 }
664    
665     # pkg_preinst functions
666     #==============================================================
667     preinst_headers() {
668 vapier 1.60 local ddir=$(kernel_header_destdir)
669 johnm 1.72 [[ -L ${ddir}/linux ]] && rm ${ddir}/linux
670     [[ -L ${ddir}/asm ]] && rm ${ddir}/asm
671 johnm 1.1 }
672    
673     # pkg_postinst functions
674     #==============================================================
675     postinst_sources() {
676 vapier 1.80 local MAKELINK=0
677 swegener 1.135
678 johnm 1.84 # if we have USE=symlink, then force K_SYMLINK=1
679     use symlink && K_SYMLINK=1
680    
681 robbat2 1.229 # if we're using a deblobbed kernel, it's not supported
682 robbat2 1.230 [[ $K_DEBLOB_AVAILABLE == 1 ]] && \
683 robbat2 1.229 use deblob && \
684 robbat2 1.232 K_SECURITY_UNSUPPORTED=deblob
685 robbat2 1.229
686 johnm 1.78 # if we are to forcably symlink, delete it if it already exists first.
687 johnm 1.166 if [[ ${K_SYMLINK} > 0 ]]; then
688 vapier 1.80 [[ -h ${ROOT}usr/src/linux ]] && rm ${ROOT}usr/src/linux
689 johnm 1.78 MAKELINK=1
690     fi
691 swegener 1.135
692 johnm 1.78 # if the link doesnt exist, lets create it
693 vapier 1.80 [[ ! -h ${ROOT}usr/src/linux ]] && MAKELINK=1
694 swegener 1.135
695 johnm 1.93 if [[ ${MAKELINK} == 1 ]]; then
696 mpagano 1.223 cd "${ROOT}"usr/src
697 johnm 1.89 ln -sf linux-${KV_FULL} linux
698     cd ${OLDPWD}
699     fi
700 johnm 1.1
701     # Don't forget to make directory for sysfs
702 johnm 1.111 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys
703 johnm 1.1
704     echo
705 zlin 1.208 elog "If you are upgrading from a previous kernel, you may be interested"
706 mpagano 1.213 elog "in the following document:"
707 zlin 1.208 elog " - General upgrade guide: http://www.gentoo.org/doc/en/kernel-upgrade.xml"
708 r3pek 1.113 echo
709 lu_zero 1.62
710 johnm 1.2 # if K_EXTRAEINFO is set then lets display it now
711 hollow 1.95 if [[ -n ${K_EXTRAEINFO} ]]; then
712 johnm 1.2 echo ${K_EXTRAEINFO} | fmt |
713 hollow 1.95 while read -s ELINE; do einfo "${ELINE}"; done
714 plasmaroo 1.33 fi
715    
716 zlin 1.208 # if K_EXTRAELOG is set then lets display it now
717     if [[ -n ${K_EXTRAELOG} ]]; then
718     echo ${K_EXTRAELOG} | fmt |
719     while read -s ELINE; do elog "${ELINE}"; done
720     fi
721    
722 iggy 1.7 # if K_EXTRAEWARN is set then lets display it now
723 hollow 1.95 if [[ -n ${K_EXTRAEWARN} ]]; then
724 iggy 1.7 echo ${K_EXTRAEWARN} | fmt |
725 hollow 1.95 while read -s ELINE; do ewarn "${ELINE}"; done
726 iggy 1.7 fi
727 dsd 1.200
728     # optionally display security unsupported message
729 robbat2 1.232 # Start with why
730     if [[ ${K_SECURITY_UNSUPPORTED} = deblob ]]; then
731 ulm 1.233 ewarn "Deblobbed kernels are UNSUPPORTED by Gentoo Security."
732 robbat2 1.232 elif [[ -n ${K_SECURITY_UNSUPPORTED} ]]; then
733     ewarn "${PN} is UNSUPPORTED by Gentoo Security."
734     fi
735     # And now the general message.
736 dsd 1.200 if [[ -n ${K_SECURITY_UNSUPPORTED} ]]; then
737     ewarn "This means that it is likely to be vulnerable to recent security issues."
738     ewarn "For specific information on why this kernel is unsupported, please read:"
739     ewarn "http://www.gentoo.org/proj/en/security/kernel.xml"
740     fi
741 bluebird 1.214
742     # 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})
744     KV_MINOR=$(get_version_component_range 2 ${OKV})
745     KV_PATCH=$(get_version_component_range 3 ${OKV})
746     if [[ "$(tc-arch)" = "sparc" ]] \
747     && [[ ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} > 2.6.24 ]]
748     then
749     echo
750     elog "NOTE: Since 2.6.25 the kernel Makefile has changed in a way that"
751     elog "you now need to do"
752     elog " make CROSS_COMPILE=sparc64-unknown-linux-gnu-"
753     elog "instead of just"
754     elog " make"
755     elog "to compile the kernel. For more information please browse to"
756     elog "https://bugs.gentoo.org/show_bug.cgi?id=214765"
757     echo
758     fi
759 johnm 1.1 }
760    
761 johnm 1.12 postinst_headers() {
762 zlin 1.208 elog "Kernel headers are usually only used when recompiling your system libc, as"
763     elog "such, following the installation of newer headers, it is advised that you"
764     elog "re-merge your system libc."
765     elog "Failure to do so will cause your system libc to not make use of newer"
766     elog "features present in the updated kernel headers."
767 johnm 1.12 }
768    
769     # pkg_setup functions
770     #==============================================================
771     setup_headers() {
772 vapier 1.86 [[ -z ${H_SUPPORTEDARCH} ]] && H_SUPPORTEDARCH=${PN/-*/}
773 hollow 1.95 for i in ${H_SUPPORTEDARCH}; do
774 vapier 1.87 [[ $(tc-arch) == "${i}" ]] && H_ACCEPT_ARCH="yes"
775 johnm 1.12 done
776 lu_zero 1.62
777 johnm 1.93 if [[ ${H_ACCEPT_ARCH} != "yes" ]]; then
778 johnm 1.12 echo
779 vapier 1.106 eerror "This version of ${PN} does not support $(tc-arch)."
780 johnm 1.12 eerror "Please merge the appropriate sources, in most cases"
781 vapier 1.106 eerror "(but not all) this will be called $(tc-arch)-headers."
782     die "Package unsupported for $(tc-arch)"
783 johnm 1.12 fi
784     }
785    
786 johnm 1.1 # unipatch
787     #==============================================================
788     unipatch() {
789 johnm 1.108 local i x y z extention PIPE_CMD UNIPATCH_DROP KPATCH_DIR PATCH_DEPTH ELINE
790 dsd 1.201 local STRICT_COUNT PATCH_LEVEL myLC_ALL myLANG extglob_bak
791 swegener 1.135
792 johnm 1.78 # set to a standard locale to ensure sorts are ordered properly.
793     myLC_ALL="${LC_ALL}"
794 johnm 1.122 myLANG="${LANG}"
795 johnm 1.78 LC_ALL="C"
796 johnm 1.122 LANG=""
797 johnm 1.1
798     [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/"
799     [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR}
800    
801 johnm 1.41 # We're gonna need it when doing patches with a predefined patchlevel
802 dsd 1.201 extglob_bak=$(shopt -p extglob)
803 johnm 1.41 shopt -s extglob
804    
805 johnm 1.54 # This function will unpack all passed tarballs, add any passed patches, and remove any passed patchnumbers
806 johnm 1.1 # usage can be either via an env var or by params
807 johnm 1.54 # although due to the nature we pass this within this eclass
808     # it shall be by param only.
809     # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}"
810     UNIPATCH_LIST="${@}"
811 johnm 1.1
812     #unpack any passed tarballs
813 hollow 1.95 for i in ${UNIPATCH_LIST}; do
814 vapier 1.210 if echo ${i} | grep -qs -e "\.tar" -e "\.tbz" -e "\.tgz" ; then
815 hollow 1.95 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
816 johnm 1.110 unset z
817 johnm 1.121 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
818 johnm 1.108 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
819     do z="${z}0";
820     done
821 r3pek 1.112 PATCH_ORDER="${z}${STRICT_COUNT}"
822 johnm 1.108
823 vapier 1.210 mkdir -p "${KPATCH_DIR}/${PATCH_ORDER}"
824     pushd "${KPATCH_DIR}/${PATCH_ORDER}" >/dev/null
825     unpack ${i##*/}
826     popd >/dev/null
827 johnm 1.16 else
828 vapier 1.210 pushd "${KPATCH_DIR}" >/dev/null
829     unpack ${i##*/}
830     popd >/dev/null
831 johnm 1.16 fi
832    
833 vapier 1.210 [[ ${i} == *:* ]] && echo ">>> Strict patch levels not currently supported for tarballed patchsets"
834 johnm 1.16 else
835 johnm 1.25 extention=${i/*./}
836 johnm 1.41 extention=${extention/:*/}
837 johnm 1.25 PIPE_CMD=""
838     case ${extention} in
839 vapier 1.236 xz) PIPE_CMD="xz -dc";;
840     lzma) PIPE_CMD="lzma -dc";;
841 johnm 1.25 bz2) PIPE_CMD="bzip2 -dc";;
842     patch) PIPE_CMD="cat";;
843     diff) PIPE_CMD="cat";;
844     gz|Z|z) PIPE_CMD="gzip -dc";;
845     ZIP|zip) PIPE_CMD="unzip -p";;
846 johnm 1.41 *) UNIPATCH_DROP="${UNIPATCH_DROP} ${i/:*/}";;
847 johnm 1.25 esac
848 johnm 1.41
849     PATCH_LEVEL=${i/*([^:])?(:)}
850     i=${i/:*/}
851 johnm 1.25 x=${i/*\//}
852     x=${x/\.${extention}/}
853 lu_zero 1.62
854 hollow 1.95 if [ -n "${PIPE_CMD}" ]; then
855     if [ ! -r "${i}" ]; then
856 johnm 1.29 echo
857     eerror "FATAL: unable to locate:"
858     eerror "${i}"
859 johnm 1.54 eerror "for read-only. The file either has incorrect permissions"
860     eerror "or does not exist."
861 johnm 1.29 die Unable to locate ${i}
862     fi
863 lu_zero 1.62
864 hollow 1.95 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
865 johnm 1.110 unset z
866 johnm 1.121 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
867 johnm 1.108 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
868     do z="${z}0";
869     done
870 r3pek 1.112 PATCH_ORDER="${z}${STRICT_COUNT}"
871 johnm 1.108
872 r3pek 1.112 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/
873     $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${PATCH_ORDER}/${x}.patch${PATCH_LEVEL})
874 johnm 1.29 else
875 johnm 1.41 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL})
876 johnm 1.29 fi
877 johnm 1.25 fi
878 johnm 1.16 fi
879 johnm 1.1 done
880    
881     #populate KPATCH_DIRS so we know where to look to remove the excludes
882     x=${KPATCH_DIR}
883     KPATCH_DIR=""
884 hollow 1.95 for i in $(find ${x} -type d | sort -n); do
885 johnm 1.1 KPATCH_DIR="${KPATCH_DIR} ${i}"
886     done
887    
888 mpagano 1.219 # do not apply fbcondecor patch to sparc/sparc64 as it breaks boot
889     # bug #272676
890 maekke 1.220 if [[ "$(tc-arch)" = "sparc" || "$(tc-arch)" = "sparc64" ]]; then
891 mpagano 1.219 if [[ ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH} > 2.6.28 ]]; then
892     UNIPATCH_DROP="${UNIPATCH_DROP} *_fbcondecor-0.9.6.patch"
893     echo
894     ewarn "fbcondecor currently prevents sparc/sparc64 from booting"
895     ewarn "for kernel versions >= 2.6.29. Removing fbcondecor patch."
896     ewarn "See https://bugs.gentoo.org/show_bug.cgi?id=272676 for details"
897     echo
898     fi
899     fi
900    
901 johnm 1.1 #so now lets get rid of the patchno's we want to exclude
902 johnm 1.19 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}"
903 hollow 1.95 for i in ${UNIPATCH_DROP}; do
904 johnm 1.55 ebegin "Excluding Patch #${i}"
905 hollow 1.95 for x in ${KPATCH_DIR}; do rm -f ${x}/${i}* 2>/dev/null; done
906 johnm 1.55 eend $?
907 johnm 1.1 done
908    
909     # and now, finally, we patch it :)
910 hollow 1.95 for x in ${KPATCH_DIR}; do
911     for i in $(find ${x} -maxdepth 1 -iname "*.patch*" -or -iname "*.diff*" | sort -n); do
912 johnm 1.25 STDERR_T="${T}/${i/*\//}"
913 johnm 1.41 STDERR_T="${STDERR_T/.patch*/.err}"
914    
915 lu_zero 1.62 [ -z ${i/*.patch*/} ] && PATCH_DEPTH=${i/*.patch/}
916 r3pek 1.112 #[ -z ${i/*.diff*/} ] && PATCH_DEPTH=${i/*.diff/}
917 johnm 1.41
918 hollow 1.96 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi
919 johnm 1.41
920     ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)"
921 hollow 1.95 while [ ${PATCH_DEPTH} -lt 5 ]; do
922 plasmaroo 1.33 echo "Attempting Dry-run:" >> ${STDERR_T}
923 robbat2 1.204 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i}" >> ${STDERR_T}
924 johnm 1.54 echo "=======================================================" >> ${STDERR_T}
925 robbat2 1.204 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then
926 johnm 1.25 echo "Attempting patch:" > ${STDERR_T}
927 robbat2 1.204 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i}" >> ${STDERR_T}
928 johnm 1.54 echo "=======================================================" >> ${STDERR_T}
929 robbat2 1.204 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then
930 johnm 1.1 eend 0
931 johnm 1.25 rm ${STDERR_T}
932 johnm 1.1 break
933     else
934     eend 1
935     eerror "Failed to apply patch ${i/*\//}"
936 johnm 1.54 eerror "Please attach ${STDERR_T} to any bug you may post."
937 johnm 1.1 die "Failed to apply ${i/*\//}"
938     fi
939     else
940     PATCH_DEPTH=$((${PATCH_DEPTH} + 1))
941     fi
942     done
943 hollow 1.95 if [ ${PATCH_DEPTH} -eq 5 ]; then
944 johnm 1.1 eend 1
945 johnm 1.54 eerror "Please attach ${STDERR_T} to any bug you may post."
946 johnm 1.1 die "Unable to dry-run patch."
947     fi
948     done
949     done
950 johnm 1.43
951 johnm 1.144 # This is a quick, and kind of nasty hack to deal with UNIPATCH_DOCS which
952     # sit in KPATCH_DIR's. This is handled properly in the unipatch rewrite,
953     # which is why I'm not taking too much time over this.
954     local tmp
955     for i in ${UNIPATCH_DOCS}; do
956     tmp="${tmp} ${i//*\/}"
957 mpagano 1.223 cp -f ${i} "${T}"/
958 johnm 1.144 done
959     UNIPATCH_DOCS="${tmp}"
960 swegener 1.146
961 johnm 1.43 # clean up KPATCH_DIR's - fixes bug #53610
962 hollow 1.95 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done
963 swegener 1.135
964 johnm 1.78 LC_ALL="${myLC_ALL}"
965 johnm 1.122 LANG="${myLANG}"
966 dsd 1.201 eval ${extglob_bak}
967 johnm 1.1 }
968    
969 johnm 1.74 # getfilevar accepts 2 vars as follows:
970     # getfilevar <VARIABLE> <CONFIGFILE>
971     # pulled from linux-info
972    
973     getfilevar() {
974 johnm 1.93 local workingdir basefname basedname xarch=$(tc-arch-kernel)
975 johnm 1.74
976 johnm 1.93 if [[ -z ${1} ]] && [[ ! -f ${2} ]]; then
977 johnm 1.74 echo -e "\n"
978     eerror "getfilevar requires 2 variables, with the second a valid file."
979     eerror " getfilevar <VARIABLE> <CONFIGFILE>"
980     else
981     workingdir=${PWD}
982     basefname=$(basename ${2})
983     basedname=$(dirname ${2})
984     unset ARCH
985 swegener 1.135
986 johnm 1.74 cd ${basedname}
987     echo -e "include ${basefname}\ne:\n\t@echo \$(${1})" | \
988 johnm 1.119 make ${BUILD_FIXES} -s -f - e 2>/dev/null
989 johnm 1.74 cd ${workingdir}
990 swegener 1.135
991 johnm 1.74 ARCH=${xarch}
992     fi
993     }
994    
995 johnm 1.28 detect_arch() {
996     # This function sets ARCH_URI and ARCH_PATCH
997     # with the neccessary info for the arch sepecific compatibility
998     # patchsets.
999 lu_zero 1.62
1000 johnm 1.93 local ALL_ARCH LOOP_ARCH COMPAT_URI i
1001 plasmaroo 1.33
1002     # COMPAT_URI is the contents of ${ARCH}_URI
1003     # ARCH_URI is the URI for all the ${ARCH}_URI patches
1004     # ARCH_PATCH is ARCH_URI broken into files for UNIPATCH
1005    
1006     ARCH_URI=""
1007     ARCH_PATCH=""
1008 vapier 1.145 ALL_ARCH="ALPHA AMD64 ARM HPPA IA64 M68K MIPS PPC PPC64 S390 SH SPARC X86"
1009 johnm 1.31
1010 hollow 1.95 for LOOP_ARCH in ${ALL_ARCH}; do
1011 johnm 1.31 COMPAT_URI="${LOOP_ARCH}_URI"
1012     COMPAT_URI="${!COMPAT_URI}"
1013 lu_zero 1.62
1014 vapier 1.86 [[ -n ${COMPAT_URI} ]] && \
1015 johnm 1.55 ARCH_URI="${ARCH_URI} $(echo ${LOOP_ARCH} | tr '[:upper:]' '[:lower:]')? ( ${COMPAT_URI} )"
1016 lu_zero 1.62
1017 johnm 1.93 if [[ ${LOOP_ARCH} == "$(echo $(tc-arch-kernel) | tr '[:lower:]' '[:upper:]')" ]]; then
1018     for i in ${COMPAT_URI}; do
1019 plasmaroo 1.33 ARCH_PATCH="${ARCH_PATCH} ${DISTDIR}/${i/*\//}"
1020     done
1021     fi
1022 johnm 1.31 done
1023 johnm 1.28 }
1024    
1025 johnm 1.72 # sparc nastiness
1026     #==============================================================
1027     # This script generates the files in /usr/include/asm for sparc systems
1028     # during installation of sys-kernel/linux-headers.
1029     # Will no longer be needed when full 64 bit support is used on sparc64
1030     # systems.
1031     #
1032     # Shamefully ripped from Debian
1033     # ----------------------------------------------------------------------
1034    
1035     # Idea borrowed from RedHat's kernel package
1036    
1037 eradicator 1.76 # This is gonna get replaced by something in multilib.eclass soon...
1038     # --eradicator
1039 johnm 1.72 generate_sparc_asm() {
1040     local name
1041    
1042     cd $1 || die
1043     mkdir asm
1044    
1045     for h in `( ls asm-sparc; ls asm-sparc64 ) | grep '\.h$' | sort -u`; do
1046     name="$(echo $h | tr a-z. A-Z_)"
1047     # common header
1048     echo "/* All asm/ files are generated and point to the corresponding
1049     * file in asm-sparc or asm-sparc64.
1050     */
1051    
1052     #ifndef __SPARCSTUB__${name}__
1053     #define __SPARCSTUB__${name}__
1054     " > asm/${h}
1055    
1056     # common for sparc and sparc64
1057     if [ -f asm-sparc/$h -a -f asm-sparc64/$h ]; then
1058     echo "#ifdef __arch64__
1059     #include <asm-sparc64/$h>
1060     #else
1061     #include <asm-sparc/$h>
1062     #endif
1063     " >> asm/${h}
1064    
1065     # sparc only
1066     elif [ -f asm-sparc/$h ]; then
1067     echo "#ifndef __arch64__
1068     #include <asm-sparc/$h>
1069     #endif
1070     " >> asm/${h}
1071    
1072     # sparc64 only
1073     else
1074     echo "#ifdef __arch64__
1075     #include <asm-sparc64/$h>
1076     #endif
1077     " >> asm/${h}
1078     fi
1079    
1080     # common footer
1081     echo "#endif /* !__SPARCSTUB__${name}__ */" >> asm/${h}
1082     done
1083     return 0
1084     }
1085    
1086 johnm 1.89 headers___fix() {
1087 plasmaroo 1.88 # Voodoo to partially fix broken upstream headers.
1088 vapier 1.205 # note: do not put inline/asm/volatile together (breaks "inline asm volatile")
1089 johnm 1.72 sed -i \
1090 plasmaroo 1.186 -e '/^\#define.*_TYPES_H/{:loop n; bloop}' \
1091 plasmaroo 1.184 -e 's:\<\([us]\(8\|16\|32\|64\)\)\>:__\1:g' \
1092 vapier 1.205 -e "s/\([[:space:]]\)inline\([[:space:](]\)/\1__inline__\2/g" \
1093     -e "s/\([[:space:]]\)asm\([[:space:](]\)/\1__asm__\2/g" \
1094     -e "s/\([[:space:]]\)volatile\([[:space:](]\)/\1__volatile__\2/g" \
1095 johnm 1.72 "$@"
1096     }
1097 johnm 1.28
1098 johnm 1.1 # common functions
1099     #==============================================================
1100 plasmaroo 1.33 kernel-2_src_unpack() {
1101 johnm 1.1 universal_unpack
1102 robbat2 1.163 debug-print "Doing unipatch"
1103 lu_zero 1.62
1104 dsd 1.126 [[ -n ${UNIPATCH_LIST} || -n ${UNIPATCH_LIST_DEFAULT} || -n ${UNIPATCH_LIST_GENPATCHES} ]] && \
1105     unipatch "${UNIPATCH_LIST_DEFAULT} ${UNIPATCH_LIST_GENPATCHES} ${UNIPATCH_LIST}"
1106 swegener 1.165
1107 robbat2 1.163 debug-print "Doing premake"
1108 lu_zero 1.62
1109 vapier 1.157 # allow ebuilds to massage the source tree after patching but before
1110     # we run misc `make` functions below
1111 vapier 1.158 [[ $(type -t kernel-2_hook_premake) == "function" ]] && kernel-2_hook_premake
1112 swegener 1.165
1113 mpagano 1.224 debug-print "Doing epatch_user"
1114     epatch_user
1115    
1116 robbat2 1.163 debug-print "Doing unpack_set_extraversion"
1117 vapier 1.157
1118 johnm 1.107 [[ -z ${K_NOSETEXTRAVERSION} ]] && unpack_set_extraversion
1119 dsd 1.104 unpack_fix_install_path
1120    
1121 johnm 1.172 # Setup xmakeopts and cd into sourcetree.
1122     env_setup_xmakeopts
1123     cd "${S}"
1124    
1125     # We dont need a version.h for anything other than headers
1126     # at least, I should hope we dont. If this causes problems
1127     # take out the if/fi block and inform me please.
1128     # unpack_2_6 should now be 2.6.17 safe anyways
1129     if [[ ${ETYPE} == headers ]]; then
1130     kernel_is 2 4 && unpack_2_4
1131     kernel_is 2 6 && unpack_2_6
1132     fi
1133 robbat2 1.229
1134 robbat2 1.230 if [[ $K_DEBLOB_AVAILABLE == 1 ]] && use deblob ; then
1135 robbat2 1.229 cp "${DISTDIR}/${DEBLOB_A}" "${T}"
1136     chmod +x "${T}/${DEBLOB_A}"
1137     fi
1138 johnm 1.1 }
1139    
1140 plasmaroo 1.33 kernel-2_src_compile() {
1141 vapier 1.136 cd "${S}"
1142 johnm 1.93 [[ ${ETYPE} == headers ]] && compile_headers
1143 robbat2 1.229
1144 robbat2 1.230 if [[ $K_DEBLOB_AVAILABLE == 1 ]] && use deblob ; then
1145 robbat2 1.229 echo ">>> Running deblob script ..."
1146     sh "${T}/${DEBLOB_A}" --force || \
1147     die "Deblob script failed to run!!!"
1148     fi
1149 johnm 1.1 }
1150    
1151 plasmaroo 1.33 kernel-2_pkg_preinst() {
1152 johnm 1.93 [[ ${ETYPE} == headers ]] && preinst_headers
1153 johnm 1.1 }
1154    
1155 plasmaroo 1.33 kernel-2_src_install() {
1156 johnm 1.1 install_universal
1157 johnm 1.93 [[ ${ETYPE} == headers ]] && install_headers
1158     [[ ${ETYPE} == sources ]] && install_sources
1159 johnm 1.1 }
1160    
1161 plasmaroo 1.33 kernel-2_pkg_postinst() {
1162 johnm 1.93 [[ ${ETYPE} == headers ]] && postinst_headers
1163     [[ ${ETYPE} == sources ]] && postinst_sources
1164 johnm 1.1 }
1165 johnm 1.12
1166 plasmaroo 1.33 kernel-2_pkg_setup() {
1167 phreak 1.192 if kernel_is 2 4; then
1168     if [ "$( gcc-major-version )" -eq "4" ] ; then
1169     echo
1170     ewarn "Be warned !! >=sys-devel/gcc-4.0.0 isn't supported with linux-2.4!"
1171     ewarn "Either switch to another gcc-version (via gcc-config) or use a"
1172     ewarn "newer kernel that supports gcc-4."
1173     echo
1174     ewarn "Also be aware that bugreports about gcc-4 not working"
1175     ewarn "with linux-2.4 based ebuilds will be closed as INVALID!"
1176     echo
1177     epause 10
1178     fi
1179     fi
1180    
1181 blubb 1.167 ABI="${KERNEL_ABI}"
1182 johnm 1.93 [[ ${ETYPE} == headers ]] && setup_headers
1183     [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..."
1184 johnm 1.12 }

  ViewVC Help
Powered by ViewVC 1.1.20