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

Contents of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.186 - (hide annotations) (download)
Fri Aug 4 04:24:22 2006 UTC (12 years, 10 months ago) by plasmaroo
Branch: MAIN
Changes since 1.185: +2 -2 lines
Fix #142442.

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

  ViewVC Help
Powered by ViewVC 1.1.20