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

Contents of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.170 - (hide annotations) (download)
Tue Apr 11 23:35:10 2006 UTC (13 years, 2 months ago) by vapier
Branch: MAIN
Changes since 1.169: +19 -2 lines
add ability to tweak the config for whiny targets

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.170 # $Header: /var/cvsroot/gentoo-x86/eclass/kernel-2.eclass,v 1.169 2006/04/11 00:14:02 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 lu_zero 1.62 HOMEPAGE="http://www.kernel.org/ http://www.gentoo.org/"
74 johnm 1.1 LICENSE="GPL-2"
75    
76 johnm 1.18 # set LINUX_HOSTCFLAGS if not already set
77 vapier 1.136 [[ -z ${LINUX_HOSTCFLAGS} ]] && \
78 johnm 1.93 LINUX_HOSTCFLAGS="-Wall -Wstrict-prototypes -Os -fomit-frame-pointer -I${S}/include"
79 johnm 1.18
80 robbat2 1.163 # debugging functions
81     #==============================================================
82     # this function exists only to help debug kernel-2.eclass
83     # if you are adding new functionality in, put a call to it
84     # at the start of src_unpack, or during SRC_URI/dep generation.
85     debug-print-kernel2-variables() {
86     debug-print "PVR: ${PVR}"
87     debug-print "CKV: ${CKV}"
88     debug-print "OKV: ${OKV}"
89     debug-print "KV: ${KV}"
90     debug-print "KV_FULL: ${KV_FULL}"
91     debug-print "RELEASETYPE: ${RELEASETYPE}"
92     debug-print "RELEASE: ${RELEASE}"
93     debug-print "UNIPATCH_LIST_DEFAULT: ${UNIPATCH_LIST_DEFAULT} "
94     debug-print "UNIPATCH_LIST_GENPATCHES: ${UNIPATCH_LIST_GENPATCHES} "
95     debug-print "UNIPATCH_LIST: ${UNIPATCH_LIST}"
96     debug-print "S: ${S}"
97     debug-print "KERNEL_URI: ${KERNEL_URI}"
98     }
99    
100 johnm 1.54 #Eclass functions only from here onwards ...
101 plasmaroo 1.33 #==============================================================
102 dsd 1.126 handle_genpatches() {
103     local tarball
104     [[ -z ${K_WANT_GENPATCHES} || -z ${K_GENPATCHES_VER} ]] && return -1
105    
106     for i in ${K_WANT_GENPATCHES} ; do
107     tarball="genpatches-${OKV}-${K_GENPATCHES_VER}.${i}.tar.bz2"
108     GENPATCHES_URI="${GENPATCHES_URI} mirror://gentoo/${tarball}"
109     UNIPATCH_LIST_GENPATCHES="${UNIPATCH_LIST_GENPATCHES} ${DISTDIR}/${tarball}"
110     done
111     }
112    
113 johnm 1.117 detect_version() {
114     # this function will detect and set
115     # - OKV: Original Kernel Version (2.6.0/2.6.0-test11)
116     # - KV: Kernel Version (2.6.0-gentoo/2.6.0-test11-gentoo-r1)
117     # - EXTRAVERSION: The additional version appended to OKV (-gentoo/-gentoo-r1)
118    
119     if [[ -n ${KV_FULL} ]]; then
120     # we will set this for backwards compatibility.
121     KV=${KV_FULL}
122    
123     # we know KV_FULL so lets stop here. but not without resetting S
124     S=${WORKDIR}/linux-${KV_FULL}
125     return
126     fi
127    
128     # CKV is used as a comparison kernel version, which is used when
129     # PV doesnt reflect the genuine kernel version.
130     # this gets set to the portage style versioning. ie:
131     # CKV=2.6.11_rc4
132     CKV=${CKV:-${PV}}
133     OKV=${OKV:-${CKV}}
134     OKV=${OKV/_beta/-test}
135     OKV=${OKV/_rc/-rc}
136     OKV=${OKV/-r*}
137     OKV=${OKV/_p*}
138    
139     KV_MAJOR=$(get_version_component_range 1 ${OKV})
140     KV_MINOR=$(get_version_component_range 2 ${OKV})
141     KV_PATCH=$(get_version_component_range 3 ${OKV})
142    
143     if [[ ${KV_MAJOR}${KV_MINOR}${KV_PATCH} -ge 269 ]]; then
144     KV_EXTRA=$(get_version_component_range 4- ${OKV})
145     KV_EXTRA=${KV_EXTRA/[-_]*}
146     else
147     KV_PATCH=$(get_version_component_range 3- ${OKV})
148     fi
149     KV_PATCH=${KV_PATCH/[-_]*}
150    
151     KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
152    
153     RELEASE=${CKV/${OKV}}
154     RELEASE=${RELEASE/_beta}
155     RELEASE=${RELEASE/_rc/-rc}
156     RELEASE=${RELEASE/_pre/-pre}
157 gregkh 1.156 kernel_is ge 2 6 && RELEASE=${RELEASE/-pre/-git}
158 johnm 1.117 RELEASETYPE=${RELEASE//[0-9]}
159    
160 gregkh 1.156 # Now we know that RELEASE is the -rc/-git
161 johnm 1.117 # and RELEASETYPE is the same but with its numerics stripped
162     # we can work on better sorting EXTRAVERSION.
163     # first of all, we add the release
164     EXTRAVERSION="${RELEASE}"
165 robbat2 1.163 debug-print "0 EXTRAVERSION:${EXTRAVERSION}"
166 johnm 1.117 [[ -n ${KV_EXTRA} ]] && EXTRAVERSION=".${KV_EXTRA}${EXTRAVERSION}"
167    
168 robbat2 1.163 debug-print "1 EXTRAVERSION:${EXTRAVERSION}"
169     if [[ -n "${K_NOUSEPR}" ]]; then
170     # Don't add anything based on PR to EXTRAVERSION
171     debug-print "1.0 EXTRAVERSION:${EXTRAVERSION}"
172     elif [[ -n ${K_PREPATCHED} ]]; then
173     debug-print "1.1 EXTRAVERSION:${EXTRAVERSION}"
174 johnm 1.117 EXTRAVERSION="${EXTRAVERSION}-${PN/-*}${PR/r}"
175     elif [[ "${ETYPE}" = "sources" ]]; then
176 robbat2 1.163 debug-print "1.2 EXTRAVERSION:${EXTRAVERSION}"
177 johnm 1.117 # For some sources we want to use the PV in the extra version
178     # This is because upstream releases with a completely different
179     # versioning scheme.
180     case ${PN/-*} in
181     wolk) K_USEPV=1;;
182     vserver) K_USEPV=1;;
183     esac
184    
185 robbat2 1.163 [[ -z "${K_NOUSENAME}" ]] && EXTRAVERSION="${EXTRAVERSION}-${PN/-*}"
186     [[ -n "${K_USEPV}" ]] && EXTRAVERSION="${EXTRAVERSION}-${PV//_/-}"
187     [[ -n "${PR//r0}" ]] && EXTRAVERSION="${EXTRAVERSION}-${PR}"
188 johnm 1.117 fi
189 robbat2 1.163 debug-print "2 EXTRAVERSION:${EXTRAVERSION}"
190 johnm 1.117
191 johnm 1.120 # The only messing around which should actually effect this is for KV_EXTRA
192     # since this has to limit OKV to MAJ.MIN.PAT and strip EXTRA off else
193     # KV_FULL evaluates to MAJ.MIN.PAT.EXT.EXT after EXTRAVERSION
194     if [[ -n ${KV_EXTRA} ]]; then
195     OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
196     KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/patch-${CKV}.bz2
197     mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}.tar.bz2"
198     UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV}.bz2"
199     fi
200 swegener 1.135
201 johnm 1.118 # We need to set this using OKV, but we need to set it before we do any
202     # messing around with OKV based on RELEASETYPE
203     KV_FULL=${OKV}${EXTRAVERSION}
204    
205     # we will set this for backwards compatibility.
206     S=${WORKDIR}/linux-${KV_FULL}
207     KV=${KV_FULL}
208    
209 gregkh 1.156 # -rc-git pulls can be achieved by specifying CKV
210 johnm 1.117 # for example:
211     # CKV="2.6.11_rc3_pre2"
212     # will pull:
213 gregkh 1.156 # linux-2.6.10.tar.bz2 & patch-2.6.11-rc3.bz2 & patch-2.6.11-rc3-git2.bz2
214 johnm 1.117
215     if [[ ${RELEASETYPE} == -rc ]] || [[ ${RELEASETYPE} == -pre ]]; then
216     OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))"
217     KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${CKV//_/-}.bz2
218     mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
219     UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV//_/-}.bz2"
220     fi
221    
222 gregkh 1.156 if [[ ${RELEASETYPE} == -git ]]; then
223 johnm 1.117 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${OKV}${RELEASE}.bz2
224     mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
225     UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${OKV}${RELEASE}.bz2"
226     fi
227    
228 gregkh 1.156 if [[ ${RELEASETYPE} == -rc-git ]]; then
229 johnm 1.117 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))"
230     KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2
231 gregkh 1.156 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-git*}.bz2
232 johnm 1.117 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
233 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"
234 johnm 1.117 fi
235 dsd 1.126
236 swegener 1.165 debug-print-kernel2-variables
237 robbat2 1.163
238 dsd 1.126 handle_genpatches
239 johnm 1.117 }
240    
241 plasmaroo 1.33 kernel_is() {
242 swegener 1.135 [[ -z ${OKV} ]] && detect_version
243 johnm 1.93 local operator test value x=0 y=0 z=0
244 johnm 1.67
245 johnm 1.93 case ${1} in
246     lt) operator="-lt"; shift;;
247     gt) operator="-gt"; shift;;
248     le) operator="-le"; shift;;
249     ge) operator="-ge"; shift;;
250     eq) operator="-eq"; shift;;
251     *) operator="-eq";;
252     esac
253    
254     for x in ${@}; do
255     for((y=0; y<$((3 - ${#x})); y++)); do value="${value}0"; done
256     value="${value}${x}"
257     z=$((${z} + 1))
258 swegener 1.135
259 johnm 1.93 case ${z} in
260     1) for((y=0; y<$((3 - ${#KV_MAJOR})); y++)); do test="${test}0"; done;
261     test="${test}${KV_MAJOR}";;
262     2) for((y=0; y<$((3 - ${#KV_MINOR})); y++)); do test="${test}0"; done;
263     test="${test}${KV_MINOR}";;
264     3) for((y=0; y<$((3 - ${#KV_PATCH})); y++)); do test="${test}0"; done;
265     test="${test}${KV_PATCH}";;
266     *) die "Error in kernel-2_kernel_is(): Too many parameters.";;
267     esac
268     done
269 johnm 1.69
270 johnm 1.93 [ ${test} ${operator} ${value} ] && return 0 || return 1
271 plasmaroo 1.33 }
272 johnm 1.18
273     kernel_is_2_4() {
274 johnm 1.56 kernel_is 2 4
275 johnm 1.18 }
276    
277     kernel_is_2_6() {
278 johnm 1.78 kernel_is 2 6 || kernel_is 2 5
279 johnm 1.18 }
280    
281 plasmaroo 1.33 # Capture the sources type and set DEPENDs
282 hollow 1.95 if [[ ${ETYPE} == sources ]]; then
283 johnm 1.1 DEPEND="!build? ( sys-apps/sed
284 johnm 1.93 >=sys-devel/binutils-2.11.90.0.31 )
285 swegener 1.135 doc? ( app-text/docbook-sgml-utils
286 swegener 1.129 app-text/xmlto )"
287 johnm 1.147 RDEPEND="!build? ( >=sys-libs/ncurses-5.2
288     sys-devel/make )
289     virtual/dev-manager"
290 lu_zero 1.62
291 johnm 1.78 PROVIDE="virtual/linux-sources"
292     kernel_is gt 2 4 && PROVIDE="${PROVIDE} virtual/alsa"
293 johnm 1.147
294 johnm 1.72 SLOT="${PVR}"
295 johnm 1.147 DESCRIPTION="Sources for the ${KV_MAJOR}.${KV_MINOR} linux kernel"
296 swegener 1.142 IUSE="symlink build doc"
297 hollow 1.95 elif [[ ${ETYPE} == headers ]]; then
298 johnm 1.72 DESCRIPTION="Linux system headers"
299 swegener 1.142 IUSE=""
300 swegener 1.135
301 hollow 1.95 if [[ ${CTARGET} = ${CHOST} ]]; then
302 johnm 1.72 DEPEND="!virtual/os-headers"
303 vapier 1.137 PROVIDE="virtual/os-headers"
304 johnm 1.72 SLOT="0"
305     else
306     SLOT="${CTARGET}"
307     fi
308 johnm 1.1 else
309 johnm 1.55 eerror "Unknown ETYPE=\"${ETYPE}\", must be \"sources\" or \"headers\""
310 johnm 1.93 die "Unknown ETYPE=\"${ETYPE}\", must be \"sources\" or \"headers\""
311 johnm 1.1 fi
312    
313 vapier 1.153 # Cross-compile support functions
314 johnm 1.1 #==============================================================
315 vapier 1.153 kernel_header_destdir() {
316     [[ ${CTARGET} == ${CHOST} ]] \
317     && echo /usr/include \
318 vapier 1.168 || echo /usr/${CTARGET}/usr/include
319 vapier 1.153 }
320    
321     cross_pre_c_headers() {
322 vapier 1.164 has _E_CROSS_HEADERS_ONLY ${USE} && [[ ${CHOST} != ${CTARGET} ]]
323 vapier 1.153 }
324    
325     env_setup_xmakeopts() {
326 johnm 1.117 # Kernel ARCH != portage ARCH
327 vapier 1.153 export KARCH=$(tc-arch-kernel)
328 johnm 1.117
329 vapier 1.136 # When cross-compiling, we need to set the ARCH/CROSS_COMPILE
330     # variables properly or bad things happen !
331 vapier 1.153 xmakeopts="ARCH=${KARCH}"
332     if [[ ${CTARGET} != ${CHOST} ]] && ! cross_pre_c_headers ; then
333 vapier 1.136 xmakeopts="${xmakeopts} CROSS_COMPILE=${CTARGET}-"
334 vapier 1.151 elif type -p ${CHOST}-ar > /dev/null ; then
335 vapier 1.136 xmakeopts="${xmakeopts} CROSS_COMPILE=${CHOST}-"
336     fi
337 vapier 1.153 export xmakeopts
338     }
339    
340     # Unpack functions
341     #==============================================================
342     unpack_2_4() {
343     env_setup_xmakeopts
344 vapier 1.136
345     cd "${S}"
346 lu_zero 1.62 # this file is required for other things to build properly,
347 johnm 1.1 # so we autogenerate it
348 vapier 1.145 make -s mrproper ${xmakeopts} || die "make mrproper failed"
349     make -s symlinks ${xmakeopts} || die "make symlinks failed"
350     make -s include/linux/version.h ${xmakeopts} || die "make include/linux/version.h failed"
351 johnm 1.1 echo ">>> version.h compiled successfully."
352     }
353    
354 vapier 1.153 unpack_2_6() {
355     env_setup_xmakeopts
356    
357     cd "${S}"
358 swegener 1.165
359 johnm 1.160 # since KBUILD_OUTPUT should only be used on the active kernel
360     # sources, we should unset it here.
361     [[ -n "${KBUILD_OUTPUT}" ]] && unset KBUILD_OUTPUT
362 swegener 1.165
363 vapier 1.153 # this file is required for other things to build properly, so we
364     # autogenerate it ... touch .config to keep version.h build from
365     # spitting out an annoying warning
366 vapier 1.169 make -s mrproper ${xmakeopts} || die "make mrproper failed"
367 vapier 1.153 touch .config
368     make -s include/linux/version.h ${xmakeopts} || die "make include/linux/version.h failed"
369     rm -f .config
370     }
371    
372 johnm 1.1 universal_unpack() {
373 plasmaroo 1.33 cd ${WORKDIR}
374     unpack linux-${OKV}.tar.bz2
375 hollow 1.98 if [[ "${OKV}" != "${KV_FULL}" ]]; then
376     mv linux-${OKV} linux-${KV_FULL} \
377 johnm 1.55 || die "Unable to move source tree to ${KV_FULL}."
378 hollow 1.98 fi
379 vapier 1.136 cd "${S}"
380 lu_zero 1.62
381 johnm 1.1 # remove all backup files
382     find . -iname "*~" -exec rm {} \; 2> /dev/null
383    
384 johnm 1.78 # fix a problem on ppc where TOUT writes to /usr/src/linux breaking sandbox
385 lu_zero 1.62 use ppc && \
386 johnm 1.93 sed -ie 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
387 vapier 1.136 "${S}"/arch/ppc/Makefile
388 johnm 1.1 }
389    
390     unpack_set_extraversion() {
391 vapier 1.136 cd "${S}"
392 dsd 1.104 sed -i -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile
393 johnm 1.93 cd ${OLDPWD}
394 johnm 1.1 }
395    
396 dsd 1.104 # Should be done after patches have been applied
397     # Otherwise patches that modify the same area of Makefile will fail
398     unpack_fix_install_path() {
399 vapier 1.136 cd "${S}"
400 dsd 1.104 sed -i -e 's:#export\tINSTALL_PATH:export\tINSTALL_PATH:' Makefile
401     }
402    
403 johnm 1.107 unpack_fix_docbook() {
404     if [[ -d ${S}/Documentation/DocBook ]]; then
405 vapier 1.136 cd "${S}"/Documentation/DocBook
406 johnm 1.107 sed -ie "s:db2:docbook2:g" Makefile
407     cd ${OLDPWD}
408     fi
409     }
410    
411 johnm 1.1 # Compile Functions
412     #==============================================================
413     compile_headers() {
414 vapier 1.153 env_setup_xmakeopts
415    
416 johnm 1.125 # Since KBUILD_OUTPUT shouldnt be used when compiling headers, lets unset it
417     # if it exists.
418     [[ -n ${KBUILD_OUTPUT} ]] && unset KBUILD_OUTPUT
419    
420 swegener 1.135 # if we couldnt obtain HOSTCFLAGS from the Makefile,
421 vapier 1.75 # then set it to something sane
422 vapier 1.136 local HOSTCFLAGS=$(getfilevar HOSTCFLAGS "${S}"/Makefile)
423 vapier 1.75 HOSTCFLAGS=${HOSTCFLAGS:--Wall -Wstrict-prototypes -O2 -fomit-frame-pointer}
424    
425 johnm 1.93 if kernel_is 2 4; then
426 vapier 1.75 yes "" | make oldconfig ${xmakeopts}
427 johnm 1.72 echo ">>> make oldconfig complete"
428 vapier 1.152 make dep ${xmakeopts}
429 hollow 1.95 elif kernel_is 2 6; then
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     K_DEFCONFIG="defconfig"
439     fi
440    
441 johnm 1.72 # if there arent any installed headers, then there also isnt an asm
442     # symlink in /usr/include/, and make defconfig will fail, so we have
443     # to force an include path with $S.
444 vapier 1.75 HOSTCFLAGS="${HOSTCFLAGS} -I${S}/include/"
445     ln -sf asm-${KARCH} "${S}"/include/asm
446 vapier 1.153 cross_pre_c_headers && return 0
447    
448 vapier 1.170 make ${K_DEFCONFIG} HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "defconfig failed (${K_DEFCONFIG})"
449     if compile_headers_tweak_config ; then
450     yes "" | make oldconfig HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "2nd oldconfig failed"
451     fi
452 vapier 1.75 make prepare HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed"
453 eradicator 1.100 make prepare-all HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed"
454 johnm 1.72 fi
455 johnm 1.1 }
456    
457 vapier 1.170 compile_headers_tweak_config() {
458     # some targets can be very very picky, so let's finesse the
459     # .config based upon any info we may have
460     case ${CTARGET} in
461     sh*)
462     sed -i '/CONFIG_CPU_SH/d' .config
463     echo "CONFIG_CPU_SH${CTARGET:2:1}=y" >> .config
464     return 0;;
465     esac
466    
467     # no changes, so lets do nothing
468     return 1
469     }
470    
471 spock 1.37 compile_manpages() {
472 johnm 1.54 einfo "Making manpages ..."
473 johnm 1.160 env -u ARCH -u KBUILD_OUTPUT make mandocs
474 spock 1.37 }
475    
476 johnm 1.1 # install functions
477     #==============================================================
478     install_universal() {
479     #fix silly permissions in tarball
480     cd ${WORKDIR}
481     chown -R root:root *
482     chmod -R a+r-w+X,u+w *
483 johnm 1.93 cd ${OLDPWD}
484 johnm 1.1 }
485    
486     install_headers() {
487 johnm 1.72 local ddir=$(kernel_header_destdir)
488 vapier 1.60
489 vapier 1.136 cd "${S}"
490 vapier 1.60 dodir ${ddir}/linux
491 vapier 1.136 cp -ax "${S}"/include/linux/* ${D}/${ddir}/linux
492 vapier 1.60 rm -rf ${D}/${ddir}/linux/modules
493 lu_zero 1.62
494 vapier 1.137 # Handle multilib headers and crap
495     local multi_dirs="" multi_defs=""
496 eradicator 1.99 case $(tc-arch-kernel) in
497     sparc64)
498 vapier 1.137 multi_dirs="sparc sparc64"
499     multi_defs="!__arch64__ __arch64__"
500 eradicator 1.99 ;;
501     x86_64)
502 vapier 1.137 multi_dirs="i386 x86_64"
503     multi_defs="__i386__ __x86_64__"
504 eradicator 1.99 ;;
505 dostrow 1.131 ppc64)
506 vapier 1.137 multi_dirs="ppc ppc64"
507     multi_defs="!__powerpc64__ __powerpc64__"
508     ;;
509     s390x)
510     multi_dirs="s390 s390x"
511     multi_defs="!__s390x__ __s390x__"
512 dostrow 1.131 ;;
513 vapier 1.114 arm)
514     dodir ${ddir}/asm
515 vapier 1.139 cp -ax "${S}"/include/asm/* "${D}"/${ddir}/asm
516     [[ ! -e ${D}/${ddir}/asm/arch ]] && ln -sf arch-ebsa285 "${D}"/${ddir}/asm/arch
517     [[ ! -e ${D}/${ddir}/asm/proc ]] && ln -sf proc-armv "${D}"/${ddir}/asm/proc
518 vapier 1.114 ;;
519 dostrow 1.155 powerpc)
520     dodir ${ddir}/asm
521     cp -ax "${S}"/include/asm/* ${D}/${ddir}/asm
522     if [[ -e "${S}"/include/asm-ppc ]] ; then
523     dodir ${ddir}/asm-ppc
524     cp -ax "${S}"/include/asm-ppc/* ${D}/${ddir}/asm-ppc
525     fi
526 swegener 1.159 ;;
527 eradicator 1.99 *)
528     dodir ${ddir}/asm
529 vapier 1.136 cp -ax "${S}"/include/asm/* ${D}/${ddir}/asm
530 eradicator 1.99 ;;
531     esac
532 vapier 1.137 if [[ -n ${multi_dirs} ]] ; then
533     local d ml_inc=""
534     for d in ${multi_dirs} ; do
535     dodir ${ddir}/asm-${d}
536     cp -ax "${S}"/include/asm-${d}/* ${D}/${ddir}/asm-${d}/ || die "cp asm-${d} failed"
537    
538     ml_inc="${ml_inc} ${multi_defs%% *}:${ddir}/asm-${d}"
539     multi_defs=${multi_defs#* }
540     done
541 swegener 1.140 create_ml_includes ${ddir}/asm ${ml_inc}
542 vapier 1.137 fi
543 eradicator 1.76
544 johnm 1.93 if kernel_is 2 6; then
545 vapier 1.60 dodir ${ddir}/asm-generic
546 vapier 1.136 cp -ax "${S}"/include/asm-generic/* ${D}/${ddir}/asm-generic
547 johnm 1.12 fi
548 eradicator 1.99
549 vapier 1.103 # clean up
550     find "${D}" -name '*.orig' -exec rm -f {} \;
551    
552 johnm 1.93 cd ${OLDPWD}
553 johnm 1.1 }
554    
555     install_sources() {
556 johnm 1.93 local doc docs file
557 johnm 1.1
558 vapier 1.136 cd "${S}"
559 johnm 1.12 dodir /usr/src
560 johnm 1.54 echo ">>> Copying sources ..."
561 johnm 1.93
562 johnm 1.27 file="$(find ${WORKDIR} -iname "docs" -type d)"
563 johnm 1.93 if [[ -n ${file} ]]; then
564     for file in $(find ${file} -type f); do
565 vapier 1.136 echo "${file//*docs\/}" >> "${S}"/patches.txt
566     echo "===================================================" >> "${S}"/patches.txt
567     cat ${file} >> "${S}"/patches.txt
568     echo "===================================================" >> "${S}"/patches.txt
569     echo "" >> "${S}"/patches.txt
570 johnm 1.1 done
571 johnm 1.12 fi
572 johnm 1.1
573 johnm 1.93 if [[ ! -f ${S}/patches.txt ]]; then
574 johnm 1.12 # patches.txt is empty so lets use our ChangeLog
575 johnm 1.93 [[ -f ${FILESDIR}/../ChangeLog ]] && \
576     echo "Please check the ebuild ChangeLog for more details." \
577 vapier 1.136 > "${S}"/patches.txt
578 johnm 1.12 fi
579    
580 vapier 1.145 if use doc ; then
581     install_manpages
582    
583     for doc in ${UNIPATCH_DOCS}; do [[ -f ${doc} ]] && docs="${docs} ${doc}"; done
584     if [[ -f ${S}/patches.txt ]]; then docs="${docs} ${S}/patches.txt"; fi
585     [[ -n ${docs} ]] && dodoc ${docs}
586     fi
587 johnm 1.12
588     mv ${WORKDIR}/linux* ${D}/usr/src
589 johnm 1.1 }
590    
591 spock 1.37 install_manpages() {
592 dsd 1.123 kernel_is lt 2 5 && return
593 johnm 1.149
594     local myfiles="Documentation/DocBook/Makefile"
595     kernel_is lt 2 6 12 && myfiles="scripts/makeman ${myfiles}"
596 swegener 1.150
597 johnm 1.149 sed -ie "s#/usr/local/man#${D}/usr/share/man#g" ${myfiles}
598 spock 1.39 ebegin "Installing manpages"
599 johnm 1.78 env -u ARCH make installmandocs
600 spock 1.37 eend $?
601 johnm 1.149 sed -ie "s#${D}/usr/share/man#/usr/local/man#g" ${myfiles}
602 spock 1.37 }
603    
604 johnm 1.1 # pkg_preinst functions
605     #==============================================================
606     preinst_headers() {
607 vapier 1.60 local ddir=$(kernel_header_destdir)
608 johnm 1.72 [[ -L ${ddir}/linux ]] && rm ${ddir}/linux
609     [[ -L ${ddir}/asm ]] && rm ${ddir}/asm
610 johnm 1.1 }
611    
612     # pkg_postinst functions
613     #==============================================================
614     postinst_sources() {
615 vapier 1.80 local MAKELINK=0
616 swegener 1.135
617 johnm 1.84 # if we have USE=symlink, then force K_SYMLINK=1
618     use symlink && K_SYMLINK=1
619    
620 johnm 1.78 # if we are to forcably symlink, delete it if it already exists first.
621 johnm 1.166 if [[ ${K_SYMLINK} > 0 ]]; then
622 vapier 1.80 [[ -h ${ROOT}usr/src/linux ]] && rm ${ROOT}usr/src/linux
623 johnm 1.78 MAKELINK=1
624     fi
625 swegener 1.135
626 johnm 1.78 # if the link doesnt exist, lets create it
627 vapier 1.80 [[ ! -h ${ROOT}usr/src/linux ]] && MAKELINK=1
628 swegener 1.135
629 johnm 1.93 if [[ ${MAKELINK} == 1 ]]; then
630 johnm 1.89 cd ${ROOT}usr/src
631     ln -sf linux-${KV_FULL} linux
632     cd ${OLDPWD}
633     fi
634 johnm 1.1
635     # Don't forget to make directory for sysfs
636 johnm 1.111 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys
637 johnm 1.1
638     echo
639     einfo "After installing a new kernel of any version, it is important"
640     einfo "that you have the appropriate /etc/modules.autoload.d/kernel-X.Y"
641     einfo "created (X.Y is the first 2 parts of your new kernel version)"
642     echo
643     einfo "For example, this kernel will require:"
644     einfo "/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}"
645     echo
646 r3pek 1.113 einfo "If you are upgrading from a previous kernel, you may be interested"
647     einfo "in the following documents:"
648     einfo " - General upgrade guide: http://www.gentoo.org/doc/en/kernel-upgrade.xml"
649     kernel_is_2_6 && einfo " - 2.4 to 2.6 migration guide: http://www.gentoo.org/doc/en/migration-to-2.6.xml"
650 johnm 1.138 if kernel_is ge 2 6 13; then
651     ewarn "As of 2.6.13 the support for devfs has been removed."
652     ewarn "You will be required to either manage a static /dev"
653     ewarn "or to ensure that udev is starting on boot."
654     fi
655 r3pek 1.113 echo
656 lu_zero 1.62
657 johnm 1.2 # if K_EXTRAEINFO is set then lets display it now
658 hollow 1.95 if [[ -n ${K_EXTRAEINFO} ]]; then
659 johnm 1.2 echo ${K_EXTRAEINFO} | fmt |
660 hollow 1.95 while read -s ELINE; do einfo "${ELINE}"; done
661 plasmaroo 1.33 fi
662    
663 iggy 1.7 # if K_EXTRAEWARN is set then lets display it now
664 hollow 1.95 if [[ -n ${K_EXTRAEWARN} ]]; then
665 iggy 1.7 echo ${K_EXTRAEWARN} | fmt |
666 hollow 1.95 while read -s ELINE; do ewarn "${ELINE}"; done
667 iggy 1.7 fi
668 johnm 1.1 }
669    
670 johnm 1.12 postinst_headers() {
671 johnm 1.72 einfo "Kernel headers are usually only used when recompiling glibc, as such, following the installation"
672     einfo "of newer headers, it is advised that you re-merge glibc as follows:"
673     einfo "emerge glibc"
674     einfo "Failure to do so will cause glibc to not make use of newer features present in the updated kernel"
675     einfo "headers."
676 johnm 1.12 }
677    
678     # pkg_setup functions
679     #==============================================================
680     setup_headers() {
681 vapier 1.86 [[ -z ${H_SUPPORTEDARCH} ]] && H_SUPPORTEDARCH=${PN/-*/}
682 hollow 1.95 for i in ${H_SUPPORTEDARCH}; do
683 vapier 1.87 [[ $(tc-arch) == "${i}" ]] && H_ACCEPT_ARCH="yes"
684 johnm 1.12 done
685 lu_zero 1.62
686 johnm 1.93 if [[ ${H_ACCEPT_ARCH} != "yes" ]]; then
687 johnm 1.12 echo
688 vapier 1.106 eerror "This version of ${PN} does not support $(tc-arch)."
689 johnm 1.12 eerror "Please merge the appropriate sources, in most cases"
690 vapier 1.106 eerror "(but not all) this will be called $(tc-arch)-headers."
691     die "Package unsupported for $(tc-arch)"
692 johnm 1.12 fi
693     }
694    
695 johnm 1.1 # unipatch
696     #==============================================================
697     unipatch() {
698 johnm 1.108 local i x y z extention PIPE_CMD UNIPATCH_DROP KPATCH_DIR PATCH_DEPTH ELINE
699 johnm 1.122 local STRICT_COUNT PATCH_LEVEL myLC_ALL myLANG
700 swegener 1.135
701 johnm 1.78 # set to a standard locale to ensure sorts are ordered properly.
702     myLC_ALL="${LC_ALL}"
703 johnm 1.122 myLANG="${LANG}"
704 johnm 1.78 LC_ALL="C"
705 johnm 1.122 LANG=""
706 johnm 1.1
707     [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/"
708     [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR}
709    
710 johnm 1.41 # We're gonna need it when doing patches with a predefined patchlevel
711     shopt -s extglob
712    
713 johnm 1.54 # This function will unpack all passed tarballs, add any passed patches, and remove any passed patchnumbers
714 johnm 1.1 # usage can be either via an env var or by params
715 johnm 1.54 # although due to the nature we pass this within this eclass
716     # it shall be by param only.
717     # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}"
718     UNIPATCH_LIST="${@}"
719 johnm 1.1
720     #unpack any passed tarballs
721 hollow 1.95 for i in ${UNIPATCH_LIST}; do
722     if [ -n "$(echo ${i} | grep -e "\.tar" -e "\.tbz" -e "\.tgz")" ]; then
723 johnm 1.1 extention=${i/*./}
724 johnm 1.41 extention=${extention/:*/}
725 johnm 1.1 case ${extention} in
726     tbz2) PIPE_CMD="tar -xvjf";;
727     bz2) PIPE_CMD="tar -xvjf";;
728     tgz) PIPE_CMD="tar -xvzf";;
729     gz) PIPE_CMD="tar -xvzf";;
730     *) eerror "Unrecognized tarball compression"
731     die "Unrecognized tarball compression";;
732     esac
733    
734 hollow 1.95 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
735 johnm 1.110 unset z
736 johnm 1.121 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
737 johnm 1.108 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
738     do z="${z}0";
739     done
740 r3pek 1.112 PATCH_ORDER="${z}${STRICT_COUNT}"
741 johnm 1.108
742 r3pek 1.112 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/
743     ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR}/${PATCH_ORDER}/ 1>/dev/null
744 johnm 1.16 else
745 johnm 1.41 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR} 1>/dev/null
746 johnm 1.16 fi
747    
748 hollow 1.95 if [ $? == 0 ]; then
749 johnm 1.1 einfo "${i/*\//} unpacked"
750 johnm 1.54 [ -n "$(echo ${i} | grep ':')" ] && echo ">>> Strict patch levels not currently supported for tarballed patchsets"
751 johnm 1.1 else
752 johnm 1.41 eerror "Failed to unpack ${i/:*/}"
753 johnm 1.1 die "unable to unpack patch tarball"
754     fi
755 johnm 1.16 else
756 johnm 1.25 extention=${i/*./}
757 johnm 1.41 extention=${extention/:*/}
758 johnm 1.25 PIPE_CMD=""
759     case ${extention} in
760     bz2) PIPE_CMD="bzip2 -dc";;
761     patch) PIPE_CMD="cat";;
762     diff) PIPE_CMD="cat";;
763     gz|Z|z) PIPE_CMD="gzip -dc";;
764     ZIP|zip) PIPE_CMD="unzip -p";;
765 johnm 1.41 *) UNIPATCH_DROP="${UNIPATCH_DROP} ${i/:*/}";;
766 johnm 1.25 esac
767 johnm 1.41
768     PATCH_LEVEL=${i/*([^:])?(:)}
769     i=${i/:*/}
770 johnm 1.25 x=${i/*\//}
771     x=${x/\.${extention}/}
772 lu_zero 1.62
773 hollow 1.95 if [ -n "${PIPE_CMD}" ]; then
774     if [ ! -r "${i}" ]; then
775 johnm 1.29 echo
776     eerror "FATAL: unable to locate:"
777     eerror "${i}"
778 johnm 1.54 eerror "for read-only. The file either has incorrect permissions"
779     eerror "or does not exist."
780 johnm 1.29 die Unable to locate ${i}
781     fi
782 lu_zero 1.62
783 hollow 1.95 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
784 johnm 1.110 unset z
785 johnm 1.121 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
786 johnm 1.108 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
787     do z="${z}0";
788     done
789 r3pek 1.112 PATCH_ORDER="${z}${STRICT_COUNT}"
790 johnm 1.108
791 r3pek 1.112 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/
792     $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${PATCH_ORDER}/${x}.patch${PATCH_LEVEL})
793 johnm 1.29 else
794 johnm 1.41 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL})
795 johnm 1.29 fi
796 johnm 1.25 fi
797 johnm 1.16 fi
798 johnm 1.1 done
799    
800     #populate KPATCH_DIRS so we know where to look to remove the excludes
801     x=${KPATCH_DIR}
802     KPATCH_DIR=""
803 hollow 1.95 for i in $(find ${x} -type d | sort -n); do
804 johnm 1.1 KPATCH_DIR="${KPATCH_DIR} ${i}"
805     done
806    
807     #so now lets get rid of the patchno's we want to exclude
808 johnm 1.19 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}"
809 hollow 1.95 for i in ${UNIPATCH_DROP}; do
810 johnm 1.55 ebegin "Excluding Patch #${i}"
811 hollow 1.95 for x in ${KPATCH_DIR}; do rm -f ${x}/${i}* 2>/dev/null; done
812 johnm 1.55 eend $?
813 johnm 1.1 done
814    
815     # and now, finally, we patch it :)
816 hollow 1.95 for x in ${KPATCH_DIR}; do
817     for i in $(find ${x} -maxdepth 1 -iname "*.patch*" -or -iname "*.diff*" | sort -n); do
818 johnm 1.25 STDERR_T="${T}/${i/*\//}"
819 johnm 1.41 STDERR_T="${STDERR_T/.patch*/.err}"
820    
821 lu_zero 1.62 [ -z ${i/*.patch*/} ] && PATCH_DEPTH=${i/*.patch/}
822 r3pek 1.112 #[ -z ${i/*.diff*/} ] && PATCH_DEPTH=${i/*.diff/}
823 johnm 1.41
824 hollow 1.96 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi
825 johnm 1.41
826     ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)"
827 hollow 1.95 while [ ${PATCH_DEPTH} -lt 5 ]; do
828 plasmaroo 1.33 echo "Attempting Dry-run:" >> ${STDERR_T}
829 johnm 1.25 echo "cmd: patch -p${PATCH_DEPTH} --dry-run -f < ${i}" >> ${STDERR_T}
830 johnm 1.54 echo "=======================================================" >> ${STDERR_T}
831 hollow 1.95 if [ $(patch -p${PATCH_DEPTH} --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then
832 johnm 1.25 echo "Attempting patch:" > ${STDERR_T}
833     echo "cmd: patch -p${PATCH_DEPTH} -f < ${i}" >> ${STDERR_T}
834 johnm 1.54 echo "=======================================================" >> ${STDERR_T}
835 hollow 1.95 if [ $(patch -p${PATCH_DEPTH} -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then
836 johnm 1.1 eend 0
837 johnm 1.25 rm ${STDERR_T}
838 johnm 1.1 break
839     else
840     eend 1
841     eerror "Failed to apply patch ${i/*\//}"
842 johnm 1.54 eerror "Please attach ${STDERR_T} to any bug you may post."
843 johnm 1.1 die "Failed to apply ${i/*\//}"
844     fi
845     else
846     PATCH_DEPTH=$((${PATCH_DEPTH} + 1))
847     fi
848     done
849 hollow 1.95 if [ ${PATCH_DEPTH} -eq 5 ]; then
850 johnm 1.1 eend 1
851 johnm 1.54 eerror "Please attach ${STDERR_T} to any bug you may post."
852 johnm 1.1 die "Unable to dry-run patch."
853     fi
854     done
855     done
856 johnm 1.43
857 johnm 1.144 # This is a quick, and kind of nasty hack to deal with UNIPATCH_DOCS which
858     # sit in KPATCH_DIR's. This is handled properly in the unipatch rewrite,
859     # which is why I'm not taking too much time over this.
860     local tmp
861     for i in ${UNIPATCH_DOCS}; do
862     tmp="${tmp} ${i//*\/}"
863     cp -f ${i} ${T}/
864     done
865     UNIPATCH_DOCS="${tmp}"
866 swegener 1.146
867 johnm 1.43 # clean up KPATCH_DIR's - fixes bug #53610
868 hollow 1.95 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done
869 swegener 1.135
870 johnm 1.78 LC_ALL="${myLC_ALL}"
871 johnm 1.122 LANG="${myLANG}"
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     # Issues with this function should go to plasmaroo.
994 johnm 1.72 sed -i \
995 plasmaroo 1.124 -e "s/\([ "$'\t'"]\)\(u\|s\)\(8\|16\|32\|64\)\([ "$'\t'"]\)/\1__\2\3\4/g;" \
996 plasmaroo 1.88 -e 's/ \(u\|s\)\(8\|16\|32\|64\)$/ __\1\2/g' \
997     -e 's/\([(, ]\)\(u\|s\)64\([, )]\)/\1__\264\3/g' \
998 plasmaroo 1.124 -e "s/^\(u\|s\)\(8\|16\|32\|64\)\([ "$'\t'"]\)/__\1\2\3/g;" \
999 plasmaroo 1.154 -e "s/ inline / __inline__ /g" \
1000 johnm 1.72 "$@"
1001     }
1002 johnm 1.28
1003 johnm 1.1 # common functions
1004     #==============================================================
1005 plasmaroo 1.33 kernel-2_src_unpack() {
1006 johnm 1.1 universal_unpack
1007 robbat2 1.163 debug-print "Doing unipatch"
1008 lu_zero 1.62
1009 dsd 1.126 [[ -n ${UNIPATCH_LIST} || -n ${UNIPATCH_LIST_DEFAULT} || -n ${UNIPATCH_LIST_GENPATCHES} ]] && \
1010     unipatch "${UNIPATCH_LIST_DEFAULT} ${UNIPATCH_LIST_GENPATCHES} ${UNIPATCH_LIST}"
1011 swegener 1.165
1012 robbat2 1.163 debug-print "Doing premake"
1013 lu_zero 1.62
1014 vapier 1.157 # allow ebuilds to massage the source tree after patching but before
1015     # we run misc `make` functions below
1016 vapier 1.158 [[ $(type -t kernel-2_hook_premake) == "function" ]] && kernel-2_hook_premake
1017 swegener 1.165
1018 robbat2 1.163 debug-print "Doing unpack_set_extraversion"
1019 vapier 1.157
1020 johnm 1.107 [[ -z ${K_NOSETEXTRAVERSION} ]] && unpack_set_extraversion
1021     unpack_fix_docbook
1022 dsd 1.104 unpack_fix_install_path
1023    
1024 johnm 1.56 kernel_is 2 4 && unpack_2_4
1025 vapier 1.153 kernel_is 2 6 && unpack_2_6
1026 johnm 1.1 }
1027    
1028 plasmaroo 1.33 kernel-2_src_compile() {
1029 vapier 1.136 cd "${S}"
1030 johnm 1.93 [[ ${ETYPE} == headers ]] && compile_headers
1031     [[ ${ETYPE} == sources ]] && \
1032 vapier 1.145 use doc && compile_manpages
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 blubb 1.167 ABI="${KERNEL_ABI}"
1052 johnm 1.93 [[ ${ETYPE} == headers ]] && setup_headers
1053     [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..."
1054 johnm 1.12 }

  ViewVC Help
Powered by ViewVC 1.1.20