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

Contents of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.211 - (hide annotations) (download)
Mon Apr 28 19:22:44 2008 UTC (11 years, 1 month ago) by mpagano
Branch: MAIN
Changes since 1.210: +3 -3 lines
Fix for make defconfig. Bug #215442

1 vapier 1.75 # Copyright 1999-2005 Gentoo Foundation
2 johnm 1.13 # Distributed under the terms of the GNU General Public License v2
3 mpagano 1.211 # $Header: /var/cvsroot/gentoo-x86/eclass/kernel-2.eclass,v 1.210 2008/04/12 22:45:56 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     [[ -z ${K_WANT_GENPATCHES} || -z ${K_GENPATCHES_VER} ]] && return -1
111    
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 vapier 1.185 sed -i \
396     -e 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
397 vapier 1.136 "${S}"/arch/ppc/Makefile
398 johnm 1.1 }
399    
400     unpack_set_extraversion() {
401 vapier 1.136 cd "${S}"
402 dsd 1.104 sed -i -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile
403 vapier 1.185 cd "${OLDPWD}"
404 johnm 1.1 }
405    
406 dsd 1.104 # Should be done after patches have been applied
407     # Otherwise patches that modify the same area of Makefile will fail
408     unpack_fix_install_path() {
409 vapier 1.136 cd "${S}"
410 dsd 1.104 sed -i -e 's:#export\tINSTALL_PATH:export\tINSTALL_PATH:' Makefile
411     }
412    
413 johnm 1.1 # Compile Functions
414     #==============================================================
415     compile_headers() {
416 vapier 1.153 env_setup_xmakeopts
417    
418 swegener 1.135 # if we couldnt obtain HOSTCFLAGS from the Makefile,
419 vapier 1.75 # then set it to something sane
420 vapier 1.136 local HOSTCFLAGS=$(getfilevar HOSTCFLAGS "${S}"/Makefile)
421 vapier 1.75 HOSTCFLAGS=${HOSTCFLAGS:--Wall -Wstrict-prototypes -O2 -fomit-frame-pointer}
422    
423 johnm 1.93 if kernel_is 2 4; then
424 vapier 1.75 yes "" | make oldconfig ${xmakeopts}
425 johnm 1.72 echo ">>> make oldconfig complete"
426 vapier 1.152 make dep ${xmakeopts}
427 hollow 1.95 elif kernel_is 2 6; then
428 vapier 1.193 # 2.6.18 introduces headers_install which means we dont need any
429     # of this crap anymore :D
430     kernel_is ge 2 6 18 && return 0
431    
432 johnm 1.72 # autoconf.h isnt generated unless it already exists. plus, we have
433     # no guarantee that any headers are installed on the system...
434 vapier 1.75 [[ -f ${ROOT}/usr/include/linux/autoconf.h ]] \
435 johnm 1.72 || touch include/linux/autoconf.h
436    
437 plasmaroo 1.105 # if K_DEFCONFIG isn't set, force to "defconfig"
438     # needed by mips
439     if [[ -z ${K_DEFCONFIG} ]]; then
440 dostrow 1.194 if [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.16) ]]; then
441     case ${CTARGET} in
442     powerpc64*) K_DEFCONFIG="ppc64_defconfig";;
443     powerpc*) K_DEFCONFIG="pmac32_defconfig";;
444     *) K_DEFCONFIG="defconfig";;
445     esac
446     else
447     K_DEFCONFIG="defconfig"
448     fi
449 plasmaroo 1.105 fi
450    
451 johnm 1.72 # if there arent any installed headers, then there also isnt an asm
452     # symlink in /usr/include/, and make defconfig will fail, so we have
453     # to force an include path with $S.
454 vapier 1.75 HOSTCFLAGS="${HOSTCFLAGS} -I${S}/include/"
455     ln -sf asm-${KARCH} "${S}"/include/asm
456 vapier 1.153 cross_pre_c_headers && return 0
457    
458 vapier 1.170 make ${K_DEFCONFIG} HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "defconfig failed (${K_DEFCONFIG})"
459     if compile_headers_tweak_config ; then
460     yes "" | make oldconfig HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "2nd oldconfig failed"
461     fi
462 vapier 1.75 make prepare HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed"
463 eradicator 1.100 make prepare-all HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed"
464 johnm 1.72 fi
465 johnm 1.1 }
466    
467 vapier 1.170 compile_headers_tweak_config() {
468     # some targets can be very very picky, so let's finesse the
469     # .config based upon any info we may have
470     case ${CTARGET} in
471     sh*)
472     sed -i '/CONFIG_CPU_SH/d' .config
473     echo "CONFIG_CPU_SH${CTARGET:2:1}=y" >> .config
474     return 0;;
475     esac
476    
477     # no changes, so lets do nothing
478     return 1
479     }
480    
481 johnm 1.1 # install functions
482     #==============================================================
483     install_universal() {
484     #fix silly permissions in tarball
485     cd ${WORKDIR}
486 flameeyes 1.176 chown -R root:0 *
487 johnm 1.1 chmod -R a+r-w+X,u+w *
488 johnm 1.93 cd ${OLDPWD}
489 johnm 1.1 }
490    
491     install_headers() {
492 vapier 1.195 local ddir=$(kernel_header_destdir)
493    
494 vapier 1.193 # 2.6.18 introduces headers_install which means we dont need any
495     # of this crap anymore :D
496     if kernel_is ge 2 6 18 ; then
497     env_setup_xmakeopts
498 vapier 1.195 emake headers_install INSTALL_HDR_PATH="${D}"/${ddir}/.. ${xmakeopts} || die
499 vapier 1.196
500     # let other packages install some of these headers
501     rm -rf "${D}"/${ddir}/sound #alsa-headers
502     rm -rf "${D}"/${ddir}/scsi #glibc/uclibc/etc...
503 vapier 1.193 return 0
504     fi
505    
506 vapier 1.198 # Do not use "linux/*" as that can cause problems with very long
507     # $S values where the cmdline to cp is too long
508 vapier 1.136 cd "${S}"
509 vapier 1.60 dodir ${ddir}/linux
510 vapier 1.198 cp -pPR "${S}"/include/linux "${D}"/${ddir}/ || die
511     rm -rf "${D}"/${ddir}/linux/modules
512 lu_zero 1.62
513 vapier 1.137 # Handle multilib headers and crap
514     local multi_dirs="" multi_defs=""
515 eradicator 1.99 case $(tc-arch-kernel) in
516     sparc64)
517 vapier 1.137 multi_dirs="sparc sparc64"
518     multi_defs="!__arch64__ __arch64__"
519 eradicator 1.99 ;;
520     x86_64)
521 vapier 1.137 multi_dirs="i386 x86_64"
522     multi_defs="__i386__ __x86_64__"
523 eradicator 1.99 ;;
524 dostrow 1.131 ppc64)
525 vapier 1.137 multi_dirs="ppc ppc64"
526     multi_defs="!__powerpc64__ __powerpc64__"
527     ;;
528     s390x)
529     multi_dirs="s390 s390x"
530     multi_defs="!__s390x__ __s390x__"
531 dostrow 1.131 ;;
532 vapier 1.114 arm)
533     dodir ${ddir}/asm
534 flameeyes 1.176 cp -pPR "${S}"/include/asm/* "${D}"/${ddir}/asm
535 vapier 1.139 [[ ! -e ${D}/${ddir}/asm/arch ]] && ln -sf arch-ebsa285 "${D}"/${ddir}/asm/arch
536     [[ ! -e ${D}/${ddir}/asm/proc ]] && ln -sf proc-armv "${D}"/${ddir}/asm/proc
537 vapier 1.114 ;;
538 dostrow 1.155 powerpc)
539     dodir ${ddir}/asm
540 flameeyes 1.176 cp -pPR "${S}"/include/asm/* ${D}/${ddir}/asm
541 dostrow 1.155 if [[ -e "${S}"/include/asm-ppc ]] ; then
542     dodir ${ddir}/asm-ppc
543 flameeyes 1.176 cp -pPR "${S}"/include/asm-ppc/* ${D}/${ddir}/asm-ppc
544 dostrow 1.155 fi
545 swegener 1.159 ;;
546 eradicator 1.99 *)
547     dodir ${ddir}/asm
548 flameeyes 1.176 cp -pPR "${S}"/include/asm/* ${D}/${ddir}/asm
549 eradicator 1.99 ;;
550     esac
551 vapier 1.137 if [[ -n ${multi_dirs} ]] ; then
552     local d ml_inc=""
553     for d in ${multi_dirs} ; do
554     dodir ${ddir}/asm-${d}
555 flameeyes 1.176 cp -pPR "${S}"/include/asm-${d}/* ${D}/${ddir}/asm-${d}/ || die "cp asm-${d} failed"
556 vapier 1.137
557     ml_inc="${ml_inc} ${multi_defs%% *}:${ddir}/asm-${d}"
558     multi_defs=${multi_defs#* }
559     done
560 swegener 1.140 create_ml_includes ${ddir}/asm ${ml_inc}
561 vapier 1.137 fi
562 eradicator 1.76
563 johnm 1.93 if kernel_is 2 6; then
564 vapier 1.60 dodir ${ddir}/asm-generic
565 flameeyes 1.176 cp -pPR "${S}"/include/asm-generic/* ${D}/${ddir}/asm-generic
566 johnm 1.12 fi
567 eradicator 1.99
568 vapier 1.103 # clean up
569     find "${D}" -name '*.orig' -exec rm -f {} \;
570    
571 johnm 1.93 cd ${OLDPWD}
572 johnm 1.1 }
573    
574     install_sources() {
575 dsd 1.183 local file
576 johnm 1.1
577 vapier 1.136 cd "${S}"
578 johnm 1.12 dodir /usr/src
579 johnm 1.54 echo ">>> Copying sources ..."
580 johnm 1.93
581 johnm 1.27 file="$(find ${WORKDIR} -iname "docs" -type d)"
582 johnm 1.93 if [[ -n ${file} ]]; then
583     for file in $(find ${file} -type f); do
584 vapier 1.136 echo "${file//*docs\/}" >> "${S}"/patches.txt
585     echo "===================================================" >> "${S}"/patches.txt
586     cat ${file} >> "${S}"/patches.txt
587     echo "===================================================" >> "${S}"/patches.txt
588     echo "" >> "${S}"/patches.txt
589 johnm 1.1 done
590 johnm 1.12 fi
591 johnm 1.1
592 johnm 1.93 if [[ ! -f ${S}/patches.txt ]]; then
593 johnm 1.12 # patches.txt is empty so lets use our ChangeLog
594 johnm 1.93 [[ -f ${FILESDIR}/../ChangeLog ]] && \
595     echo "Please check the ebuild ChangeLog for more details." \
596 vapier 1.136 > "${S}"/patches.txt
597 johnm 1.12 fi
598    
599     mv ${WORKDIR}/linux* ${D}/usr/src
600 johnm 1.1 }
601    
602     # pkg_preinst functions
603     #==============================================================
604     preinst_headers() {
605 vapier 1.60 local ddir=$(kernel_header_destdir)
606 johnm 1.72 [[ -L ${ddir}/linux ]] && rm ${ddir}/linux
607     [[ -L ${ddir}/asm ]] && rm ${ddir}/asm
608 johnm 1.1 }
609    
610     # pkg_postinst functions
611     #==============================================================
612     postinst_sources() {
613 vapier 1.80 local MAKELINK=0
614 swegener 1.135
615 johnm 1.84 # if we have USE=symlink, then force K_SYMLINK=1
616     use symlink && K_SYMLINK=1
617    
618 johnm 1.78 # if we are to forcably symlink, delete it if it already exists first.
619 johnm 1.166 if [[ ${K_SYMLINK} > 0 ]]; then
620 vapier 1.80 [[ -h ${ROOT}usr/src/linux ]] && rm ${ROOT}usr/src/linux
621 johnm 1.78 MAKELINK=1
622     fi
623 swegener 1.135
624 johnm 1.78 # if the link doesnt exist, lets create it
625 vapier 1.80 [[ ! -h ${ROOT}usr/src/linux ]] && MAKELINK=1
626 swegener 1.135
627 johnm 1.93 if [[ ${MAKELINK} == 1 ]]; then
628 johnm 1.89 cd ${ROOT}usr/src
629     ln -sf linux-${KV_FULL} linux
630     cd ${OLDPWD}
631     fi
632 johnm 1.1
633     # Don't forget to make directory for sysfs
634 johnm 1.111 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys
635 johnm 1.1
636 mpagano 1.209 # fix for bug #215442 due to the change for x86 to use a
637     # different file name for the default configuration
638 mpagano 1.211 if kernel_is ge 2 6 24 && [[ ! -e ${ROOT}/usr/src/linux-${KV_FULL}/.config ]] ; then
639 mpagano 1.209 case $(tc-arch-kernel) in
640     x86|x86_64)
641     einfo "Running make defconfig as a temporary workaround for bug #215442"
642 mpagano 1.211 cd ${ROOT}/usr/src/linux-${KV_FULL}
643 mpagano 1.209 make -s defconfig ${xmakeopts} &>/dev/null 2>&1
644     ;;
645     esac
646     fi
647    
648 johnm 1.1 echo
649 zlin 1.208 elog "If you are upgrading from a previous kernel, you may be interested"
650     elog "in the following documents:"
651     elog " - General upgrade guide: http://www.gentoo.org/doc/en/kernel-upgrade.xml"
652     kernel_is_2_6 && elog " - 2.4 to 2.6 migration guide: http://www.gentoo.org/doc/en/migration-to-2.6.xml"
653 r3pek 1.113 echo
654 lu_zero 1.62
655 johnm 1.2 # if K_EXTRAEINFO is set then lets display it now
656 hollow 1.95 if [[ -n ${K_EXTRAEINFO} ]]; then
657 johnm 1.2 echo ${K_EXTRAEINFO} | fmt |
658 hollow 1.95 while read -s ELINE; do einfo "${ELINE}"; done
659 plasmaroo 1.33 fi
660    
661 zlin 1.208 # if K_EXTRAELOG is set then lets display it now
662     if [[ -n ${K_EXTRAELOG} ]]; then
663     echo ${K_EXTRAELOG} | fmt |
664     while read -s ELINE; do elog "${ELINE}"; done
665     fi
666    
667 iggy 1.7 # if K_EXTRAEWARN is set then lets display it now
668 hollow 1.95 if [[ -n ${K_EXTRAEWARN} ]]; then
669 iggy 1.7 echo ${K_EXTRAEWARN} | fmt |
670 hollow 1.95 while read -s ELINE; do ewarn "${ELINE}"; done
671 iggy 1.7 fi
672 dsd 1.200
673     # optionally display security unsupported message
674     if [[ -n ${K_SECURITY_UNSUPPORTED} ]]; then
675     echo
676     ewarn "${PN} is UNSUPPORTED by Gentoo Security."
677     ewarn "This means that it is likely to be vulnerable to recent security issues."
678     ewarn "For specific information on why this kernel is unsupported, please read:"
679     ewarn "http://www.gentoo.org/proj/en/security/kernel.xml"
680     fi
681 johnm 1.1 }
682    
683 johnm 1.12 postinst_headers() {
684 zlin 1.208 elog "Kernel headers are usually only used when recompiling your system libc, as"
685     elog "such, following the installation of newer headers, it is advised that you"
686     elog "re-merge your system libc."
687     elog "Failure to do so will cause your system libc to not make use of newer"
688     elog "features present in the updated kernel headers."
689 johnm 1.12 }
690    
691     # pkg_setup functions
692     #==============================================================
693     setup_headers() {
694 vapier 1.86 [[ -z ${H_SUPPORTEDARCH} ]] && H_SUPPORTEDARCH=${PN/-*/}
695 hollow 1.95 for i in ${H_SUPPORTEDARCH}; do
696 vapier 1.87 [[ $(tc-arch) == "${i}" ]] && H_ACCEPT_ARCH="yes"
697 johnm 1.12 done
698 lu_zero 1.62
699 johnm 1.93 if [[ ${H_ACCEPT_ARCH} != "yes" ]]; then
700 johnm 1.12 echo
701 vapier 1.106 eerror "This version of ${PN} does not support $(tc-arch)."
702 johnm 1.12 eerror "Please merge the appropriate sources, in most cases"
703 vapier 1.106 eerror "(but not all) this will be called $(tc-arch)-headers."
704     die "Package unsupported for $(tc-arch)"
705 johnm 1.12 fi
706     }
707    
708 johnm 1.1 # unipatch
709     #==============================================================
710     unipatch() {
711 johnm 1.108 local i x y z extention PIPE_CMD UNIPATCH_DROP KPATCH_DIR PATCH_DEPTH ELINE
712 dsd 1.201 local STRICT_COUNT PATCH_LEVEL myLC_ALL myLANG extglob_bak
713 swegener 1.135
714 johnm 1.78 # set to a standard locale to ensure sorts are ordered properly.
715     myLC_ALL="${LC_ALL}"
716 johnm 1.122 myLANG="${LANG}"
717 johnm 1.78 LC_ALL="C"
718 johnm 1.122 LANG=""
719 johnm 1.1
720     [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/"
721     [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR}
722    
723 johnm 1.41 # We're gonna need it when doing patches with a predefined patchlevel
724 dsd 1.201 extglob_bak=$(shopt -p extglob)
725 johnm 1.41 shopt -s extglob
726    
727 johnm 1.54 # This function will unpack all passed tarballs, add any passed patches, and remove any passed patchnumbers
728 johnm 1.1 # usage can be either via an env var or by params
729 johnm 1.54 # although due to the nature we pass this within this eclass
730     # it shall be by param only.
731     # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}"
732     UNIPATCH_LIST="${@}"
733 johnm 1.1
734     #unpack any passed tarballs
735 hollow 1.95 for i in ${UNIPATCH_LIST}; do
736 vapier 1.210 if echo ${i} | grep -qs -e "\.tar" -e "\.tbz" -e "\.tgz" ; then
737 hollow 1.95 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
738 johnm 1.110 unset z
739 johnm 1.121 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
740 johnm 1.108 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
741     do z="${z}0";
742     done
743 r3pek 1.112 PATCH_ORDER="${z}${STRICT_COUNT}"
744 johnm 1.108
745 vapier 1.210 mkdir -p "${KPATCH_DIR}/${PATCH_ORDER}"
746     pushd "${KPATCH_DIR}/${PATCH_ORDER}" >/dev/null
747     unpack ${i##*/}
748     popd >/dev/null
749 johnm 1.16 else
750 vapier 1.210 pushd "${KPATCH_DIR}" >/dev/null
751     unpack ${i##*/}
752     popd >/dev/null
753 johnm 1.16 fi
754    
755 vapier 1.210 [[ ${i} == *:* ]] && echo ">>> Strict patch levels not currently supported for tarballed patchsets"
756 johnm 1.16 else
757 johnm 1.25 extention=${i/*./}
758 johnm 1.41 extention=${extention/:*/}
759 johnm 1.25 PIPE_CMD=""
760     case ${extention} in
761     bz2) PIPE_CMD="bzip2 -dc";;
762     patch) PIPE_CMD="cat";;
763     diff) PIPE_CMD="cat";;
764     gz|Z|z) PIPE_CMD="gzip -dc";;
765     ZIP|zip) PIPE_CMD="unzip -p";;
766 johnm 1.41 *) UNIPATCH_DROP="${UNIPATCH_DROP} ${i/:*/}";;
767 johnm 1.25 esac
768 johnm 1.41
769     PATCH_LEVEL=${i/*([^:])?(:)}
770     i=${i/:*/}
771 johnm 1.25 x=${i/*\//}
772     x=${x/\.${extention}/}
773 lu_zero 1.62
774 hollow 1.95 if [ -n "${PIPE_CMD}" ]; then
775     if [ ! -r "${i}" ]; then
776 johnm 1.29 echo
777     eerror "FATAL: unable to locate:"
778     eerror "${i}"
779 johnm 1.54 eerror "for read-only. The file either has incorrect permissions"
780     eerror "or does not exist."
781 johnm 1.29 die Unable to locate ${i}
782     fi
783 lu_zero 1.62
784 hollow 1.95 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
785 johnm 1.110 unset z
786 johnm 1.121 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
787 johnm 1.108 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
788     do z="${z}0";
789     done
790 r3pek 1.112 PATCH_ORDER="${z}${STRICT_COUNT}"
791 johnm 1.108
792 r3pek 1.112 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/
793     $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${PATCH_ORDER}/${x}.patch${PATCH_LEVEL})
794 johnm 1.29 else
795 johnm 1.41 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL})
796 johnm 1.29 fi
797 johnm 1.25 fi
798 johnm 1.16 fi
799 johnm 1.1 done
800    
801     #populate KPATCH_DIRS so we know where to look to remove the excludes
802     x=${KPATCH_DIR}
803     KPATCH_DIR=""
804 hollow 1.95 for i in $(find ${x} -type d | sort -n); do
805 johnm 1.1 KPATCH_DIR="${KPATCH_DIR} ${i}"
806     done
807    
808     #so now lets get rid of the patchno's we want to exclude
809 johnm 1.19 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}"
810 hollow 1.95 for i in ${UNIPATCH_DROP}; do
811 johnm 1.55 ebegin "Excluding Patch #${i}"
812 hollow 1.95 for x in ${KPATCH_DIR}; do rm -f ${x}/${i}* 2>/dev/null; done
813 johnm 1.55 eend $?
814 johnm 1.1 done
815    
816     # and now, finally, we patch it :)
817 hollow 1.95 for x in ${KPATCH_DIR}; do
818     for i in $(find ${x} -maxdepth 1 -iname "*.patch*" -or -iname "*.diff*" | sort -n); do
819 johnm 1.25 STDERR_T="${T}/${i/*\//}"
820 johnm 1.41 STDERR_T="${STDERR_T/.patch*/.err}"
821    
822 lu_zero 1.62 [ -z ${i/*.patch*/} ] && PATCH_DEPTH=${i/*.patch/}
823 r3pek 1.112 #[ -z ${i/*.diff*/} ] && PATCH_DEPTH=${i/*.diff/}
824 johnm 1.41
825 hollow 1.96 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi
826 johnm 1.41
827     ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)"
828 hollow 1.95 while [ ${PATCH_DEPTH} -lt 5 ]; do
829 plasmaroo 1.33 echo "Attempting Dry-run:" >> ${STDERR_T}
830 robbat2 1.204 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i}" >> ${STDERR_T}
831 johnm 1.54 echo "=======================================================" >> ${STDERR_T}
832 robbat2 1.204 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then
833 johnm 1.25 echo "Attempting patch:" > ${STDERR_T}
834 robbat2 1.204 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i}" >> ${STDERR_T}
835 johnm 1.54 echo "=======================================================" >> ${STDERR_T}
836 robbat2 1.204 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then
837 johnm 1.1 eend 0
838 johnm 1.25 rm ${STDERR_T}
839 johnm 1.1 break
840     else
841     eend 1
842     eerror "Failed to apply patch ${i/*\//}"
843 johnm 1.54 eerror "Please attach ${STDERR_T} to any bug you may post."
844 johnm 1.1 die "Failed to apply ${i/*\//}"
845     fi
846     else
847     PATCH_DEPTH=$((${PATCH_DEPTH} + 1))
848     fi
849     done
850 hollow 1.95 if [ ${PATCH_DEPTH} -eq 5 ]; then
851 johnm 1.1 eend 1
852 johnm 1.54 eerror "Please attach ${STDERR_T} to any bug you may post."
853 johnm 1.1 die "Unable to dry-run patch."
854     fi
855     done
856     done
857 johnm 1.43
858 johnm 1.144 # This is a quick, and kind of nasty hack to deal with UNIPATCH_DOCS which
859     # sit in KPATCH_DIR's. This is handled properly in the unipatch rewrite,
860     # which is why I'm not taking too much time over this.
861     local tmp
862     for i in ${UNIPATCH_DOCS}; do
863     tmp="${tmp} ${i//*\/}"
864     cp -f ${i} ${T}/
865     done
866     UNIPATCH_DOCS="${tmp}"
867 swegener 1.146
868 johnm 1.43 # clean up KPATCH_DIR's - fixes bug #53610
869 hollow 1.95 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done
870 swegener 1.135
871 johnm 1.78 LC_ALL="${myLC_ALL}"
872 johnm 1.122 LANG="${myLANG}"
873 dsd 1.201 eval ${extglob_bak}
874 johnm 1.1 }
875    
876 johnm 1.74 # getfilevar accepts 2 vars as follows:
877     # getfilevar <VARIABLE> <CONFIGFILE>
878     # pulled from linux-info
879    
880     getfilevar() {
881 johnm 1.93 local workingdir basefname basedname xarch=$(tc-arch-kernel)
882 johnm 1.74
883 johnm 1.93 if [[ -z ${1} ]] && [[ ! -f ${2} ]]; then
884 johnm 1.74 echo -e "\n"
885     eerror "getfilevar requires 2 variables, with the second a valid file."
886     eerror " getfilevar <VARIABLE> <CONFIGFILE>"
887     else
888     workingdir=${PWD}
889     basefname=$(basename ${2})
890     basedname=$(dirname ${2})
891     unset ARCH
892 swegener 1.135
893 johnm 1.74 cd ${basedname}
894     echo -e "include ${basefname}\ne:\n\t@echo \$(${1})" | \
895 johnm 1.119 make ${BUILD_FIXES} -s -f - e 2>/dev/null
896 johnm 1.74 cd ${workingdir}
897 swegener 1.135
898 johnm 1.74 ARCH=${xarch}
899     fi
900     }
901    
902 johnm 1.28 detect_arch() {
903     # This function sets ARCH_URI and ARCH_PATCH
904     # with the neccessary info for the arch sepecific compatibility
905     # patchsets.
906 lu_zero 1.62
907 johnm 1.93 local ALL_ARCH LOOP_ARCH COMPAT_URI i
908 plasmaroo 1.33
909     # COMPAT_URI is the contents of ${ARCH}_URI
910     # ARCH_URI is the URI for all the ${ARCH}_URI patches
911     # ARCH_PATCH is ARCH_URI broken into files for UNIPATCH
912    
913     ARCH_URI=""
914     ARCH_PATCH=""
915 vapier 1.145 ALL_ARCH="ALPHA AMD64 ARM HPPA IA64 M68K MIPS PPC PPC64 S390 SH SPARC X86"
916 johnm 1.31
917 hollow 1.95 for LOOP_ARCH in ${ALL_ARCH}; do
918 johnm 1.31 COMPAT_URI="${LOOP_ARCH}_URI"
919     COMPAT_URI="${!COMPAT_URI}"
920 lu_zero 1.62
921 vapier 1.86 [[ -n ${COMPAT_URI} ]] && \
922 johnm 1.55 ARCH_URI="${ARCH_URI} $(echo ${LOOP_ARCH} | tr '[:upper:]' '[:lower:]')? ( ${COMPAT_URI} )"
923 lu_zero 1.62
924 johnm 1.93 if [[ ${LOOP_ARCH} == "$(echo $(tc-arch-kernel) | tr '[:lower:]' '[:upper:]')" ]]; then
925     for i in ${COMPAT_URI}; do
926 plasmaroo 1.33 ARCH_PATCH="${ARCH_PATCH} ${DISTDIR}/${i/*\//}"
927     done
928     fi
929 johnm 1.31 done
930 johnm 1.28 }
931    
932 johnm 1.72 # sparc nastiness
933     #==============================================================
934     # This script generates the files in /usr/include/asm for sparc systems
935     # during installation of sys-kernel/linux-headers.
936     # Will no longer be needed when full 64 bit support is used on sparc64
937     # systems.
938     #
939     # Shamefully ripped from Debian
940     # ----------------------------------------------------------------------
941    
942     # Idea borrowed from RedHat's kernel package
943    
944 eradicator 1.76 # This is gonna get replaced by something in multilib.eclass soon...
945     # --eradicator
946 johnm 1.72 generate_sparc_asm() {
947     local name
948    
949     cd $1 || die
950     mkdir asm
951    
952     for h in `( ls asm-sparc; ls asm-sparc64 ) | grep '\.h$' | sort -u`; do
953     name="$(echo $h | tr a-z. A-Z_)"
954     # common header
955     echo "/* All asm/ files are generated and point to the corresponding
956     * file in asm-sparc or asm-sparc64.
957     */
958    
959     #ifndef __SPARCSTUB__${name}__
960     #define __SPARCSTUB__${name}__
961     " > asm/${h}
962    
963     # common for sparc and sparc64
964     if [ -f asm-sparc/$h -a -f asm-sparc64/$h ]; then
965     echo "#ifdef __arch64__
966     #include <asm-sparc64/$h>
967     #else
968     #include <asm-sparc/$h>
969     #endif
970     " >> asm/${h}
971    
972     # sparc only
973     elif [ -f asm-sparc/$h ]; then
974     echo "#ifndef __arch64__
975     #include <asm-sparc/$h>
976     #endif
977     " >> asm/${h}
978    
979     # sparc64 only
980     else
981     echo "#ifdef __arch64__
982     #include <asm-sparc64/$h>
983     #endif
984     " >> asm/${h}
985     fi
986    
987     # common footer
988     echo "#endif /* !__SPARCSTUB__${name}__ */" >> asm/${h}
989     done
990     return 0
991     }
992    
993 johnm 1.89 headers___fix() {
994 plasmaroo 1.88 # Voodoo to partially fix broken upstream headers.
995 vapier 1.205 # note: do not put inline/asm/volatile together (breaks "inline asm volatile")
996 johnm 1.72 sed -i \
997 plasmaroo 1.186 -e '/^\#define.*_TYPES_H/{:loop n; bloop}' \
998 plasmaroo 1.184 -e 's:\<\([us]\(8\|16\|32\|64\)\)\>:__\1:g' \
999 vapier 1.205 -e "s/\([[:space:]]\)inline\([[:space:](]\)/\1__inline__\2/g" \
1000     -e "s/\([[:space:]]\)asm\([[:space:](]\)/\1__asm__\2/g" \
1001     -e "s/\([[:space:]]\)volatile\([[:space:](]\)/\1__volatile__\2/g" \
1002 johnm 1.72 "$@"
1003     }
1004 johnm 1.28
1005 johnm 1.1 # common functions
1006     #==============================================================
1007 plasmaroo 1.33 kernel-2_src_unpack() {
1008 johnm 1.1 universal_unpack
1009 robbat2 1.163 debug-print "Doing unipatch"
1010 lu_zero 1.62
1011 dsd 1.126 [[ -n ${UNIPATCH_LIST} || -n ${UNIPATCH_LIST_DEFAULT} || -n ${UNIPATCH_LIST_GENPATCHES} ]] && \
1012     unipatch "${UNIPATCH_LIST_DEFAULT} ${UNIPATCH_LIST_GENPATCHES} ${UNIPATCH_LIST}"
1013 swegener 1.165
1014 robbat2 1.163 debug-print "Doing premake"
1015 lu_zero 1.62
1016 vapier 1.157 # allow ebuilds to massage the source tree after patching but before
1017     # we run misc `make` functions below
1018 vapier 1.158 [[ $(type -t kernel-2_hook_premake) == "function" ]] && kernel-2_hook_premake
1019 swegener 1.165
1020 robbat2 1.163 debug-print "Doing unpack_set_extraversion"
1021 vapier 1.157
1022 johnm 1.107 [[ -z ${K_NOSETEXTRAVERSION} ]] && unpack_set_extraversion
1023 dsd 1.104 unpack_fix_install_path
1024    
1025 johnm 1.172 # Setup xmakeopts and cd into sourcetree.
1026     env_setup_xmakeopts
1027     cd "${S}"
1028    
1029     # We dont need a version.h for anything other than headers
1030     # at least, I should hope we dont. If this causes problems
1031     # take out the if/fi block and inform me please.
1032     # unpack_2_6 should now be 2.6.17 safe anyways
1033     if [[ ${ETYPE} == headers ]]; then
1034     kernel_is 2 4 && unpack_2_4
1035     kernel_is 2 6 && unpack_2_6
1036     fi
1037 johnm 1.1 }
1038    
1039 plasmaroo 1.33 kernel-2_src_compile() {
1040 vapier 1.136 cd "${S}"
1041 johnm 1.93 [[ ${ETYPE} == headers ]] && compile_headers
1042 johnm 1.1 }
1043    
1044 plasmaroo 1.33 kernel-2_pkg_preinst() {
1045 johnm 1.93 [[ ${ETYPE} == headers ]] && preinst_headers
1046 johnm 1.1 }
1047    
1048 plasmaroo 1.33 kernel-2_src_install() {
1049 johnm 1.1 install_universal
1050 johnm 1.93 [[ ${ETYPE} == headers ]] && install_headers
1051     [[ ${ETYPE} == sources ]] && install_sources
1052 johnm 1.1 }
1053    
1054 plasmaroo 1.33 kernel-2_pkg_postinst() {
1055 johnm 1.93 [[ ${ETYPE} == headers ]] && postinst_headers
1056     [[ ${ETYPE} == sources ]] && postinst_sources
1057 johnm 1.1 }
1058 johnm 1.12
1059 plasmaroo 1.33 kernel-2_pkg_setup() {
1060 phreak 1.192 if kernel_is 2 4; then
1061     if [ "$( gcc-major-version )" -eq "4" ] ; then
1062     echo
1063     ewarn "Be warned !! >=sys-devel/gcc-4.0.0 isn't supported with linux-2.4!"
1064     ewarn "Either switch to another gcc-version (via gcc-config) or use a"
1065     ewarn "newer kernel that supports gcc-4."
1066     echo
1067     ewarn "Also be aware that bugreports about gcc-4 not working"
1068     ewarn "with linux-2.4 based ebuilds will be closed as INVALID!"
1069     echo
1070     epause 10
1071     fi
1072     fi
1073    
1074 blubb 1.167 ABI="${KERNEL_ABI}"
1075 johnm 1.93 [[ ${ETYPE} == headers ]] && setup_headers
1076     [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..."
1077 johnm 1.12 }

  ViewVC Help
Powered by ViewVC 1.1.20