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

Contents of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.199 - (hide annotations) (download)
Sun Dec 10 18:21:54 2006 UTC (12 years, 5 months ago) by phreak
Branch: MAIN
Changes since 1.198: +5 -5 lines
Adding --no-backup-if-mismatch to the unipatch opts, so patch doesn't leave the .orig files around.

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

  ViewVC Help
Powered by ViewVC 1.1.20