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

Contents of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.213 - (hide annotations) (download)
Sun Jun 1 23:28:59 2008 UTC (11 years ago) by mpagano
Branch: MAIN
Changes since 1.212: +2 -3 lines
Removed reference to 2.4 to 2.6 migration document

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.213 # $Header: /var/cvsroot/gentoo-x86/eclass/kernel-2.eclass,v 1.212 2008/05/03 16:07:34 dsd 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     echo
637 zlin 1.208 elog "If you are upgrading from a previous kernel, you may be interested"
638 mpagano 1.213 elog "in the following document:"
639 zlin 1.208 elog " - General upgrade guide: http://www.gentoo.org/doc/en/kernel-upgrade.xml"
640 r3pek 1.113 echo
641 lu_zero 1.62
642 johnm 1.2 # if K_EXTRAEINFO is set then lets display it now
643 hollow 1.95 if [[ -n ${K_EXTRAEINFO} ]]; then
644 johnm 1.2 echo ${K_EXTRAEINFO} | fmt |
645 hollow 1.95 while read -s ELINE; do einfo "${ELINE}"; done
646 plasmaroo 1.33 fi
647    
648 zlin 1.208 # if K_EXTRAELOG is set then lets display it now
649     if [[ -n ${K_EXTRAELOG} ]]; then
650     echo ${K_EXTRAELOG} | fmt |
651     while read -s ELINE; do elog "${ELINE}"; done
652     fi
653    
654 iggy 1.7 # if K_EXTRAEWARN is set then lets display it now
655 hollow 1.95 if [[ -n ${K_EXTRAEWARN} ]]; then
656 iggy 1.7 echo ${K_EXTRAEWARN} | fmt |
657 hollow 1.95 while read -s ELINE; do ewarn "${ELINE}"; done
658 iggy 1.7 fi
659 dsd 1.200
660     # optionally display security unsupported message
661     if [[ -n ${K_SECURITY_UNSUPPORTED} ]]; then
662     echo
663     ewarn "${PN} is UNSUPPORTED by Gentoo Security."
664     ewarn "This means that it is likely to be vulnerable to recent security issues."
665     ewarn "For specific information on why this kernel is unsupported, please read:"
666     ewarn "http://www.gentoo.org/proj/en/security/kernel.xml"
667     fi
668 johnm 1.1 }
669    
670 johnm 1.12 postinst_headers() {
671 zlin 1.208 elog "Kernel headers are usually only used when recompiling your system libc, as"
672     elog "such, following the installation of newer headers, it is advised that you"
673     elog "re-merge your system libc."
674     elog "Failure to do so will cause your system libc to not make use of newer"
675     elog "features present in the updated kernel headers."
676 johnm 1.12 }
677    
678     # pkg_setup functions
679     #==============================================================
680     setup_headers() {
681 vapier 1.86 [[ -z ${H_SUPPORTEDARCH} ]] && H_SUPPORTEDARCH=${PN/-*/}
682 hollow 1.95 for i in ${H_SUPPORTEDARCH}; do
683 vapier 1.87 [[ $(tc-arch) == "${i}" ]] && H_ACCEPT_ARCH="yes"
684 johnm 1.12 done
685 lu_zero 1.62
686 johnm 1.93 if [[ ${H_ACCEPT_ARCH} != "yes" ]]; then
687 johnm 1.12 echo
688 vapier 1.106 eerror "This version of ${PN} does not support $(tc-arch)."
689 johnm 1.12 eerror "Please merge the appropriate sources, in most cases"
690 vapier 1.106 eerror "(but not all) this will be called $(tc-arch)-headers."
691     die "Package unsupported for $(tc-arch)"
692 johnm 1.12 fi
693     }
694    
695 johnm 1.1 # unipatch
696     #==============================================================
697     unipatch() {
698 johnm 1.108 local i x y z extention PIPE_CMD UNIPATCH_DROP KPATCH_DIR PATCH_DEPTH ELINE
699 dsd 1.201 local STRICT_COUNT PATCH_LEVEL myLC_ALL myLANG extglob_bak
700 swegener 1.135
701 johnm 1.78 # set to a standard locale to ensure sorts are ordered properly.
702     myLC_ALL="${LC_ALL}"
703 johnm 1.122 myLANG="${LANG}"
704 johnm 1.78 LC_ALL="C"
705 johnm 1.122 LANG=""
706 johnm 1.1
707     [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/"
708     [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR}
709    
710 johnm 1.41 # We're gonna need it when doing patches with a predefined patchlevel
711 dsd 1.201 extglob_bak=$(shopt -p extglob)
712 johnm 1.41 shopt -s extglob
713    
714 johnm 1.54 # This function will unpack all passed tarballs, add any passed patches, and remove any passed patchnumbers
715 johnm 1.1 # usage can be either via an env var or by params
716 johnm 1.54 # although due to the nature we pass this within this eclass
717     # it shall be by param only.
718     # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}"
719     UNIPATCH_LIST="${@}"
720 johnm 1.1
721     #unpack any passed tarballs
722 hollow 1.95 for i in ${UNIPATCH_LIST}; do
723 vapier 1.210 if echo ${i} | grep -qs -e "\.tar" -e "\.tbz" -e "\.tgz" ; then
724 hollow 1.95 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
725 johnm 1.110 unset z
726 johnm 1.121 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
727 johnm 1.108 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
728     do z="${z}0";
729     done
730 r3pek 1.112 PATCH_ORDER="${z}${STRICT_COUNT}"
731 johnm 1.108
732 vapier 1.210 mkdir -p "${KPATCH_DIR}/${PATCH_ORDER}"
733     pushd "${KPATCH_DIR}/${PATCH_ORDER}" >/dev/null
734     unpack ${i##*/}
735     popd >/dev/null
736 johnm 1.16 else
737 vapier 1.210 pushd "${KPATCH_DIR}" >/dev/null
738     unpack ${i##*/}
739     popd >/dev/null
740 johnm 1.16 fi
741    
742 vapier 1.210 [[ ${i} == *:* ]] && echo ">>> Strict patch levels not currently supported for tarballed patchsets"
743 johnm 1.16 else
744 johnm 1.25 extention=${i/*./}
745 johnm 1.41 extention=${extention/:*/}
746 johnm 1.25 PIPE_CMD=""
747     case ${extention} in
748     bz2) PIPE_CMD="bzip2 -dc";;
749     patch) PIPE_CMD="cat";;
750     diff) PIPE_CMD="cat";;
751     gz|Z|z) PIPE_CMD="gzip -dc";;
752     ZIP|zip) PIPE_CMD="unzip -p";;
753 johnm 1.41 *) UNIPATCH_DROP="${UNIPATCH_DROP} ${i/:*/}";;
754 johnm 1.25 esac
755 johnm 1.41
756     PATCH_LEVEL=${i/*([^:])?(:)}
757     i=${i/:*/}
758 johnm 1.25 x=${i/*\//}
759     x=${x/\.${extention}/}
760 lu_zero 1.62
761 hollow 1.95 if [ -n "${PIPE_CMD}" ]; then
762     if [ ! -r "${i}" ]; then
763 johnm 1.29 echo
764     eerror "FATAL: unable to locate:"
765     eerror "${i}"
766 johnm 1.54 eerror "for read-only. The file either has incorrect permissions"
767     eerror "or does not exist."
768 johnm 1.29 die Unable to locate ${i}
769     fi
770 lu_zero 1.62
771 hollow 1.95 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
772 johnm 1.110 unset z
773 johnm 1.121 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
774 johnm 1.108 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
775     do z="${z}0";
776     done
777 r3pek 1.112 PATCH_ORDER="${z}${STRICT_COUNT}"
778 johnm 1.108
779 r3pek 1.112 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/
780     $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${PATCH_ORDER}/${x}.patch${PATCH_LEVEL})
781 johnm 1.29 else
782 johnm 1.41 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL})
783 johnm 1.29 fi
784 johnm 1.25 fi
785 johnm 1.16 fi
786 johnm 1.1 done
787    
788     #populate KPATCH_DIRS so we know where to look to remove the excludes
789     x=${KPATCH_DIR}
790     KPATCH_DIR=""
791 hollow 1.95 for i in $(find ${x} -type d | sort -n); do
792 johnm 1.1 KPATCH_DIR="${KPATCH_DIR} ${i}"
793     done
794    
795     #so now lets get rid of the patchno's we want to exclude
796 johnm 1.19 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}"
797 hollow 1.95 for i in ${UNIPATCH_DROP}; do
798 johnm 1.55 ebegin "Excluding Patch #${i}"
799 hollow 1.95 for x in ${KPATCH_DIR}; do rm -f ${x}/${i}* 2>/dev/null; done
800 johnm 1.55 eend $?
801 johnm 1.1 done
802    
803     # and now, finally, we patch it :)
804 hollow 1.95 for x in ${KPATCH_DIR}; do
805     for i in $(find ${x} -maxdepth 1 -iname "*.patch*" -or -iname "*.diff*" | sort -n); do
806 johnm 1.25 STDERR_T="${T}/${i/*\//}"
807 johnm 1.41 STDERR_T="${STDERR_T/.patch*/.err}"
808    
809 lu_zero 1.62 [ -z ${i/*.patch*/} ] && PATCH_DEPTH=${i/*.patch/}
810 r3pek 1.112 #[ -z ${i/*.diff*/} ] && PATCH_DEPTH=${i/*.diff/}
811 johnm 1.41
812 hollow 1.96 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi
813 johnm 1.41
814     ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)"
815 hollow 1.95 while [ ${PATCH_DEPTH} -lt 5 ]; do
816 plasmaroo 1.33 echo "Attempting Dry-run:" >> ${STDERR_T}
817 robbat2 1.204 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i}" >> ${STDERR_T}
818 johnm 1.54 echo "=======================================================" >> ${STDERR_T}
819 robbat2 1.204 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then
820 johnm 1.25 echo "Attempting patch:" > ${STDERR_T}
821 robbat2 1.204 echo "cmd: patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i}" >> ${STDERR_T}
822 johnm 1.54 echo "=======================================================" >> ${STDERR_T}
823 robbat2 1.204 if [ $(patch -p${PATCH_DEPTH} --no-backup-if-mismatch -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then
824 johnm 1.1 eend 0
825 johnm 1.25 rm ${STDERR_T}
826 johnm 1.1 break
827     else
828     eend 1
829     eerror "Failed to apply patch ${i/*\//}"
830 johnm 1.54 eerror "Please attach ${STDERR_T} to any bug you may post."
831 johnm 1.1 die "Failed to apply ${i/*\//}"
832     fi
833     else
834     PATCH_DEPTH=$((${PATCH_DEPTH} + 1))
835     fi
836     done
837 hollow 1.95 if [ ${PATCH_DEPTH} -eq 5 ]; then
838 johnm 1.1 eend 1
839 johnm 1.54 eerror "Please attach ${STDERR_T} to any bug you may post."
840 johnm 1.1 die "Unable to dry-run patch."
841     fi
842     done
843     done
844 johnm 1.43
845 johnm 1.144 # This is a quick, and kind of nasty hack to deal with UNIPATCH_DOCS which
846     # sit in KPATCH_DIR's. This is handled properly in the unipatch rewrite,
847     # which is why I'm not taking too much time over this.
848     local tmp
849     for i in ${UNIPATCH_DOCS}; do
850     tmp="${tmp} ${i//*\/}"
851     cp -f ${i} ${T}/
852     done
853     UNIPATCH_DOCS="${tmp}"
854 swegener 1.146
855 johnm 1.43 # clean up KPATCH_DIR's - fixes bug #53610
856 hollow 1.95 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done
857 swegener 1.135
858 johnm 1.78 LC_ALL="${myLC_ALL}"
859 johnm 1.122 LANG="${myLANG}"
860 dsd 1.201 eval ${extglob_bak}
861 johnm 1.1 }
862    
863 johnm 1.74 # getfilevar accepts 2 vars as follows:
864     # getfilevar <VARIABLE> <CONFIGFILE>
865     # pulled from linux-info
866    
867     getfilevar() {
868 johnm 1.93 local workingdir basefname basedname xarch=$(tc-arch-kernel)
869 johnm 1.74
870 johnm 1.93 if [[ -z ${1} ]] && [[ ! -f ${2} ]]; then
871 johnm 1.74 echo -e "\n"
872     eerror "getfilevar requires 2 variables, with the second a valid file."
873     eerror " getfilevar <VARIABLE> <CONFIGFILE>"
874     else
875     workingdir=${PWD}
876     basefname=$(basename ${2})
877     basedname=$(dirname ${2})
878     unset ARCH
879 swegener 1.135
880 johnm 1.74 cd ${basedname}
881     echo -e "include ${basefname}\ne:\n\t@echo \$(${1})" | \
882 johnm 1.119 make ${BUILD_FIXES} -s -f - e 2>/dev/null
883 johnm 1.74 cd ${workingdir}
884 swegener 1.135
885 johnm 1.74 ARCH=${xarch}
886     fi
887     }
888    
889 johnm 1.28 detect_arch() {
890     # This function sets ARCH_URI and ARCH_PATCH
891     # with the neccessary info for the arch sepecific compatibility
892     # patchsets.
893 lu_zero 1.62
894 johnm 1.93 local ALL_ARCH LOOP_ARCH COMPAT_URI i
895 plasmaroo 1.33
896     # COMPAT_URI is the contents of ${ARCH}_URI
897     # ARCH_URI is the URI for all the ${ARCH}_URI patches
898     # ARCH_PATCH is ARCH_URI broken into files for UNIPATCH
899    
900     ARCH_URI=""
901     ARCH_PATCH=""
902 vapier 1.145 ALL_ARCH="ALPHA AMD64 ARM HPPA IA64 M68K MIPS PPC PPC64 S390 SH SPARC X86"
903 johnm 1.31
904 hollow 1.95 for LOOP_ARCH in ${ALL_ARCH}; do
905 johnm 1.31 COMPAT_URI="${LOOP_ARCH}_URI"
906     COMPAT_URI="${!COMPAT_URI}"
907 lu_zero 1.62
908 vapier 1.86 [[ -n ${COMPAT_URI} ]] && \
909 johnm 1.55 ARCH_URI="${ARCH_URI} $(echo ${LOOP_ARCH} | tr '[:upper:]' '[:lower:]')? ( ${COMPAT_URI} )"
910 lu_zero 1.62
911 johnm 1.93 if [[ ${LOOP_ARCH} == "$(echo $(tc-arch-kernel) | tr '[:lower:]' '[:upper:]')" ]]; then
912     for i in ${COMPAT_URI}; do
913 plasmaroo 1.33 ARCH_PATCH="${ARCH_PATCH} ${DISTDIR}/${i/*\//}"
914     done
915     fi
916 johnm 1.31 done
917 johnm 1.28 }
918    
919 johnm 1.72 # sparc nastiness
920     #==============================================================
921     # This script generates the files in /usr/include/asm for sparc systems
922     # during installation of sys-kernel/linux-headers.
923     # Will no longer be needed when full 64 bit support is used on sparc64
924     # systems.
925     #
926     # Shamefully ripped from Debian
927     # ----------------------------------------------------------------------
928    
929     # Idea borrowed from RedHat's kernel package
930    
931 eradicator 1.76 # This is gonna get replaced by something in multilib.eclass soon...
932     # --eradicator
933 johnm 1.72 generate_sparc_asm() {
934     local name
935    
936     cd $1 || die
937     mkdir asm
938    
939     for h in `( ls asm-sparc; ls asm-sparc64 ) | grep '\.h$' | sort -u`; do
940     name="$(echo $h | tr a-z. A-Z_)"
941     # common header
942     echo "/* All asm/ files are generated and point to the corresponding
943     * file in asm-sparc or asm-sparc64.
944     */
945    
946     #ifndef __SPARCSTUB__${name}__
947     #define __SPARCSTUB__${name}__
948     " > asm/${h}
949    
950     # common for sparc and sparc64
951     if [ -f asm-sparc/$h -a -f asm-sparc64/$h ]; then
952     echo "#ifdef __arch64__
953     #include <asm-sparc64/$h>
954     #else
955     #include <asm-sparc/$h>
956     #endif
957     " >> asm/${h}
958    
959     # sparc only
960     elif [ -f asm-sparc/$h ]; then
961     echo "#ifndef __arch64__
962     #include <asm-sparc/$h>
963     #endif
964     " >> asm/${h}
965    
966     # sparc64 only
967     else
968     echo "#ifdef __arch64__
969     #include <asm-sparc64/$h>
970     #endif
971     " >> asm/${h}
972     fi
973    
974     # common footer
975     echo "#endif /* !__SPARCSTUB__${name}__ */" >> asm/${h}
976     done
977     return 0
978     }
979    
980 johnm 1.89 headers___fix() {
981 plasmaroo 1.88 # Voodoo to partially fix broken upstream headers.
982 vapier 1.205 # note: do not put inline/asm/volatile together (breaks "inline asm volatile")
983 johnm 1.72 sed -i \
984 plasmaroo 1.186 -e '/^\#define.*_TYPES_H/{:loop n; bloop}' \
985 plasmaroo 1.184 -e 's:\<\([us]\(8\|16\|32\|64\)\)\>:__\1:g' \
986 vapier 1.205 -e "s/\([[:space:]]\)inline\([[:space:](]\)/\1__inline__\2/g" \
987     -e "s/\([[:space:]]\)asm\([[:space:](]\)/\1__asm__\2/g" \
988     -e "s/\([[:space:]]\)volatile\([[:space:](]\)/\1__volatile__\2/g" \
989 johnm 1.72 "$@"
990     }
991 johnm 1.28
992 johnm 1.1 # common functions
993     #==============================================================
994 plasmaroo 1.33 kernel-2_src_unpack() {
995 johnm 1.1 universal_unpack
996 robbat2 1.163 debug-print "Doing unipatch"
997 lu_zero 1.62
998 dsd 1.126 [[ -n ${UNIPATCH_LIST} || -n ${UNIPATCH_LIST_DEFAULT} || -n ${UNIPATCH_LIST_GENPATCHES} ]] && \
999     unipatch "${UNIPATCH_LIST_DEFAULT} ${UNIPATCH_LIST_GENPATCHES} ${UNIPATCH_LIST}"
1000 swegener 1.165
1001 robbat2 1.163 debug-print "Doing premake"
1002 lu_zero 1.62
1003 vapier 1.157 # allow ebuilds to massage the source tree after patching but before
1004     # we run misc `make` functions below
1005 vapier 1.158 [[ $(type -t kernel-2_hook_premake) == "function" ]] && kernel-2_hook_premake
1006 swegener 1.165
1007 robbat2 1.163 debug-print "Doing unpack_set_extraversion"
1008 vapier 1.157
1009 johnm 1.107 [[ -z ${K_NOSETEXTRAVERSION} ]] && unpack_set_extraversion
1010 dsd 1.104 unpack_fix_install_path
1011    
1012 johnm 1.172 # Setup xmakeopts and cd into sourcetree.
1013     env_setup_xmakeopts
1014     cd "${S}"
1015    
1016     # We dont need a version.h for anything other than headers
1017     # at least, I should hope we dont. If this causes problems
1018     # take out the if/fi block and inform me please.
1019     # unpack_2_6 should now be 2.6.17 safe anyways
1020     if [[ ${ETYPE} == headers ]]; then
1021     kernel_is 2 4 && unpack_2_4
1022     kernel_is 2 6 && unpack_2_6
1023     fi
1024 johnm 1.1 }
1025    
1026 plasmaroo 1.33 kernel-2_src_compile() {
1027 vapier 1.136 cd "${S}"
1028 johnm 1.93 [[ ${ETYPE} == headers ]] && compile_headers
1029 johnm 1.1 }
1030    
1031 plasmaroo 1.33 kernel-2_pkg_preinst() {
1032 johnm 1.93 [[ ${ETYPE} == headers ]] && preinst_headers
1033 johnm 1.1 }
1034    
1035 plasmaroo 1.33 kernel-2_src_install() {
1036 johnm 1.1 install_universal
1037 johnm 1.93 [[ ${ETYPE} == headers ]] && install_headers
1038     [[ ${ETYPE} == sources ]] && install_sources
1039 johnm 1.1 }
1040    
1041 plasmaroo 1.33 kernel-2_pkg_postinst() {
1042 johnm 1.93 [[ ${ETYPE} == headers ]] && postinst_headers
1043     [[ ${ETYPE} == sources ]] && postinst_sources
1044 johnm 1.1 }
1045 johnm 1.12
1046 plasmaroo 1.33 kernel-2_pkg_setup() {
1047 phreak 1.192 if kernel_is 2 4; then
1048     if [ "$( gcc-major-version )" -eq "4" ] ; then
1049     echo
1050     ewarn "Be warned !! >=sys-devel/gcc-4.0.0 isn't supported with linux-2.4!"
1051     ewarn "Either switch to another gcc-version (via gcc-config) or use a"
1052     ewarn "newer kernel that supports gcc-4."
1053     echo
1054     ewarn "Also be aware that bugreports about gcc-4 not working"
1055     ewarn "with linux-2.4 based ebuilds will be closed as INVALID!"
1056     echo
1057     epause 10
1058     fi
1059     fi
1060    
1061 blubb 1.167 ABI="${KERNEL_ABI}"
1062 johnm 1.93 [[ ${ETYPE} == headers ]] && setup_headers
1063     [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..."
1064 johnm 1.12 }

  ViewVC Help
Powered by ViewVC 1.1.20