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

Contents of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.212 - (hide annotations) (download)
Sat May 3 16:07:34 2008 UTC (11 years, 1 month ago) by dsd
Branch: MAIN
Changes since 1.211: +1 -13 lines
remove defconfig workaround now that the stable kernel is fixed

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

  ViewVC Help
Powered by ViewVC 1.1.20