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

Contents of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.219 - (hide annotations) (download)
Fri Aug 28 16:28:13 2009 UTC (9 years, 10 months ago) by mpagano
Branch: MAIN
Changes since 1.218: +14 -1 lines
Removing fbcondecor for sparc/sparc64 as it currently prevents sparc/sparc64 from booting. bug #272676.

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

  ViewVC Help
Powered by ViewVC 1.1.20