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

Contents of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.202 - (hide annotations) (download)
Wed Feb 14 16:40:49 2007 UTC (12 years, 8 months ago) by vapier
Branch: MAIN
Changes since 1.201: +6 -6 lines
touchup kernel headers post install message #166850 by Arfrever Frehtes Taifersar Arahesis

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

  ViewVC Help
Powered by ViewVC 1.1.20