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

Contents of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.169 - (hide annotations) (download)
Tue Apr 11 00:14:02 2006 UTC (13 years, 2 months ago) by vapier
Branch: MAIN
Changes since 1.168: +2 -2 lines
run mrproper before building version.h as mrproper will delete the header on us

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.169 # $Header: /var/cvsroot/gentoo-x86/eclass/kernel-2.eclass,v 1.168 2006/04/09 21:30:58 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 plasmaroo 1.105 make ${K_DEFCONFIG} HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "defconfig failed"
449 vapier 1.75 make prepare HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed"
450 eradicator 1.100 make prepare-all HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed"
451 johnm 1.72 fi
452 johnm 1.1 }
453    
454 spock 1.37 compile_manpages() {
455 johnm 1.54 einfo "Making manpages ..."
456 johnm 1.160 env -u ARCH -u KBUILD_OUTPUT make mandocs
457 spock 1.37 }
458    
459 johnm 1.1 # install functions
460     #==============================================================
461     install_universal() {
462     #fix silly permissions in tarball
463     cd ${WORKDIR}
464     chown -R root:root *
465     chmod -R a+r-w+X,u+w *
466 johnm 1.93 cd ${OLDPWD}
467 johnm 1.1 }
468    
469     install_headers() {
470 johnm 1.72 local ddir=$(kernel_header_destdir)
471 vapier 1.60
472 vapier 1.136 cd "${S}"
473 vapier 1.60 dodir ${ddir}/linux
474 vapier 1.136 cp -ax "${S}"/include/linux/* ${D}/${ddir}/linux
475 vapier 1.60 rm -rf ${D}/${ddir}/linux/modules
476 lu_zero 1.62
477 vapier 1.137 # Handle multilib headers and crap
478     local multi_dirs="" multi_defs=""
479 eradicator 1.99 case $(tc-arch-kernel) in
480     sparc64)
481 vapier 1.137 multi_dirs="sparc sparc64"
482     multi_defs="!__arch64__ __arch64__"
483 eradicator 1.99 ;;
484     x86_64)
485 vapier 1.137 multi_dirs="i386 x86_64"
486     multi_defs="__i386__ __x86_64__"
487 eradicator 1.99 ;;
488 dostrow 1.131 ppc64)
489 vapier 1.137 multi_dirs="ppc ppc64"
490     multi_defs="!__powerpc64__ __powerpc64__"
491     ;;
492     s390x)
493     multi_dirs="s390 s390x"
494     multi_defs="!__s390x__ __s390x__"
495 dostrow 1.131 ;;
496 vapier 1.114 arm)
497     dodir ${ddir}/asm
498 vapier 1.139 cp -ax "${S}"/include/asm/* "${D}"/${ddir}/asm
499     [[ ! -e ${D}/${ddir}/asm/arch ]] && ln -sf arch-ebsa285 "${D}"/${ddir}/asm/arch
500     [[ ! -e ${D}/${ddir}/asm/proc ]] && ln -sf proc-armv "${D}"/${ddir}/asm/proc
501 vapier 1.114 ;;
502 dostrow 1.155 powerpc)
503     dodir ${ddir}/asm
504     cp -ax "${S}"/include/asm/* ${D}/${ddir}/asm
505     if [[ -e "${S}"/include/asm-ppc ]] ; then
506     dodir ${ddir}/asm-ppc
507     cp -ax "${S}"/include/asm-ppc/* ${D}/${ddir}/asm-ppc
508     fi
509 swegener 1.159 ;;
510 eradicator 1.99 *)
511     dodir ${ddir}/asm
512 vapier 1.136 cp -ax "${S}"/include/asm/* ${D}/${ddir}/asm
513 eradicator 1.99 ;;
514     esac
515 vapier 1.137 if [[ -n ${multi_dirs} ]] ; then
516     local d ml_inc=""
517     for d in ${multi_dirs} ; do
518     dodir ${ddir}/asm-${d}
519     cp -ax "${S}"/include/asm-${d}/* ${D}/${ddir}/asm-${d}/ || die "cp asm-${d} failed"
520    
521     ml_inc="${ml_inc} ${multi_defs%% *}:${ddir}/asm-${d}"
522     multi_defs=${multi_defs#* }
523     done
524 swegener 1.140 create_ml_includes ${ddir}/asm ${ml_inc}
525 vapier 1.137 fi
526 eradicator 1.76
527 johnm 1.93 if kernel_is 2 6; then
528 vapier 1.60 dodir ${ddir}/asm-generic
529 vapier 1.136 cp -ax "${S}"/include/asm-generic/* ${D}/${ddir}/asm-generic
530 johnm 1.12 fi
531 eradicator 1.99
532 vapier 1.103 # clean up
533     find "${D}" -name '*.orig' -exec rm -f {} \;
534    
535 johnm 1.93 cd ${OLDPWD}
536 johnm 1.1 }
537    
538     install_sources() {
539 johnm 1.93 local doc docs file
540 johnm 1.1
541 vapier 1.136 cd "${S}"
542 johnm 1.12 dodir /usr/src
543 johnm 1.54 echo ">>> Copying sources ..."
544 johnm 1.93
545 johnm 1.27 file="$(find ${WORKDIR} -iname "docs" -type d)"
546 johnm 1.93 if [[ -n ${file} ]]; then
547     for file in $(find ${file} -type f); do
548 vapier 1.136 echo "${file//*docs\/}" >> "${S}"/patches.txt
549     echo "===================================================" >> "${S}"/patches.txt
550     cat ${file} >> "${S}"/patches.txt
551     echo "===================================================" >> "${S}"/patches.txt
552     echo "" >> "${S}"/patches.txt
553 johnm 1.1 done
554 johnm 1.12 fi
555 johnm 1.1
556 johnm 1.93 if [[ ! -f ${S}/patches.txt ]]; then
557 johnm 1.12 # patches.txt is empty so lets use our ChangeLog
558 johnm 1.93 [[ -f ${FILESDIR}/../ChangeLog ]] && \
559     echo "Please check the ebuild ChangeLog for more details." \
560 vapier 1.136 > "${S}"/patches.txt
561 johnm 1.12 fi
562    
563 vapier 1.145 if use doc ; then
564     install_manpages
565    
566     for doc in ${UNIPATCH_DOCS}; do [[ -f ${doc} ]] && docs="${docs} ${doc}"; done
567     if [[ -f ${S}/patches.txt ]]; then docs="${docs} ${S}/patches.txt"; fi
568     [[ -n ${docs} ]] && dodoc ${docs}
569     fi
570 johnm 1.12
571     mv ${WORKDIR}/linux* ${D}/usr/src
572 johnm 1.1 }
573    
574 spock 1.37 install_manpages() {
575 dsd 1.123 kernel_is lt 2 5 && return
576 johnm 1.149
577     local myfiles="Documentation/DocBook/Makefile"
578     kernel_is lt 2 6 12 && myfiles="scripts/makeman ${myfiles}"
579 swegener 1.150
580 johnm 1.149 sed -ie "s#/usr/local/man#${D}/usr/share/man#g" ${myfiles}
581 spock 1.39 ebegin "Installing manpages"
582 johnm 1.78 env -u ARCH make installmandocs
583 spock 1.37 eend $?
584 johnm 1.149 sed -ie "s#${D}/usr/share/man#/usr/local/man#g" ${myfiles}
585 spock 1.37 }
586    
587 johnm 1.1 # pkg_preinst functions
588     #==============================================================
589     preinst_headers() {
590 vapier 1.60 local ddir=$(kernel_header_destdir)
591 johnm 1.72 [[ -L ${ddir}/linux ]] && rm ${ddir}/linux
592     [[ -L ${ddir}/asm ]] && rm ${ddir}/asm
593 johnm 1.1 }
594    
595     # pkg_postinst functions
596     #==============================================================
597     postinst_sources() {
598 vapier 1.80 local MAKELINK=0
599 swegener 1.135
600 johnm 1.84 # if we have USE=symlink, then force K_SYMLINK=1
601     use symlink && K_SYMLINK=1
602    
603 johnm 1.78 # if we are to forcably symlink, delete it if it already exists first.
604 johnm 1.166 if [[ ${K_SYMLINK} > 0 ]]; then
605 vapier 1.80 [[ -h ${ROOT}usr/src/linux ]] && rm ${ROOT}usr/src/linux
606 johnm 1.78 MAKELINK=1
607     fi
608 swegener 1.135
609 johnm 1.78 # if the link doesnt exist, lets create it
610 vapier 1.80 [[ ! -h ${ROOT}usr/src/linux ]] && MAKELINK=1
611 swegener 1.135
612 johnm 1.93 if [[ ${MAKELINK} == 1 ]]; then
613 johnm 1.89 cd ${ROOT}usr/src
614     ln -sf linux-${KV_FULL} linux
615     cd ${OLDPWD}
616     fi
617 johnm 1.1
618     # Don't forget to make directory for sysfs
619 johnm 1.111 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys
620 johnm 1.1
621     echo
622     einfo "After installing a new kernel of any version, it is important"
623     einfo "that you have the appropriate /etc/modules.autoload.d/kernel-X.Y"
624     einfo "created (X.Y is the first 2 parts of your new kernel version)"
625     echo
626     einfo "For example, this kernel will require:"
627     einfo "/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}"
628     echo
629 r3pek 1.113 einfo "If you are upgrading from a previous kernel, you may be interested"
630     einfo "in the following documents:"
631     einfo " - General upgrade guide: http://www.gentoo.org/doc/en/kernel-upgrade.xml"
632     kernel_is_2_6 && einfo " - 2.4 to 2.6 migration guide: http://www.gentoo.org/doc/en/migration-to-2.6.xml"
633 johnm 1.138 if kernel_is ge 2 6 13; then
634     ewarn "As of 2.6.13 the support for devfs has been removed."
635     ewarn "You will be required to either manage a static /dev"
636     ewarn "or to ensure that udev is starting on boot."
637     fi
638 r3pek 1.113 echo
639 lu_zero 1.62
640 johnm 1.2 # if K_EXTRAEINFO is set then lets display it now
641 hollow 1.95 if [[ -n ${K_EXTRAEINFO} ]]; then
642 johnm 1.2 echo ${K_EXTRAEINFO} | fmt |
643 hollow 1.95 while read -s ELINE; do einfo "${ELINE}"; done
644 plasmaroo 1.33 fi
645    
646 iggy 1.7 # if K_EXTRAEWARN is set then lets display it now
647 hollow 1.95 if [[ -n ${K_EXTRAEWARN} ]]; then
648 iggy 1.7 echo ${K_EXTRAEWARN} | fmt |
649 hollow 1.95 while read -s ELINE; do ewarn "${ELINE}"; done
650 iggy 1.7 fi
651 johnm 1.1 }
652    
653 johnm 1.12 postinst_headers() {
654 johnm 1.72 einfo "Kernel headers are usually only used when recompiling glibc, as such, following the installation"
655     einfo "of newer headers, it is advised that you re-merge glibc as follows:"
656     einfo "emerge glibc"
657     einfo "Failure to do so will cause glibc to not make use of newer features present in the updated kernel"
658     einfo "headers."
659 johnm 1.12 }
660    
661     # pkg_setup functions
662     #==============================================================
663     setup_headers() {
664 vapier 1.86 [[ -z ${H_SUPPORTEDARCH} ]] && H_SUPPORTEDARCH=${PN/-*/}
665 hollow 1.95 for i in ${H_SUPPORTEDARCH}; do
666 vapier 1.87 [[ $(tc-arch) == "${i}" ]] && H_ACCEPT_ARCH="yes"
667 johnm 1.12 done
668 lu_zero 1.62
669 johnm 1.93 if [[ ${H_ACCEPT_ARCH} != "yes" ]]; then
670 johnm 1.12 echo
671 vapier 1.106 eerror "This version of ${PN} does not support $(tc-arch)."
672 johnm 1.12 eerror "Please merge the appropriate sources, in most cases"
673 vapier 1.106 eerror "(but not all) this will be called $(tc-arch)-headers."
674     die "Package unsupported for $(tc-arch)"
675 johnm 1.12 fi
676     }
677    
678 johnm 1.1 # unipatch
679     #==============================================================
680     unipatch() {
681 johnm 1.108 local i x y z extention PIPE_CMD UNIPATCH_DROP KPATCH_DIR PATCH_DEPTH ELINE
682 johnm 1.122 local STRICT_COUNT PATCH_LEVEL myLC_ALL myLANG
683 swegener 1.135
684 johnm 1.78 # set to a standard locale to ensure sorts are ordered properly.
685     myLC_ALL="${LC_ALL}"
686 johnm 1.122 myLANG="${LANG}"
687 johnm 1.78 LC_ALL="C"
688 johnm 1.122 LANG=""
689 johnm 1.1
690     [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/"
691     [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR}
692    
693 johnm 1.41 # We're gonna need it when doing patches with a predefined patchlevel
694     shopt -s extglob
695    
696 johnm 1.54 # This function will unpack all passed tarballs, add any passed patches, and remove any passed patchnumbers
697 johnm 1.1 # usage can be either via an env var or by params
698 johnm 1.54 # although due to the nature we pass this within this eclass
699     # it shall be by param only.
700     # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}"
701     UNIPATCH_LIST="${@}"
702 johnm 1.1
703     #unpack any passed tarballs
704 hollow 1.95 for i in ${UNIPATCH_LIST}; do
705     if [ -n "$(echo ${i} | grep -e "\.tar" -e "\.tbz" -e "\.tgz")" ]; then
706 johnm 1.1 extention=${i/*./}
707 johnm 1.41 extention=${extention/:*/}
708 johnm 1.1 case ${extention} in
709     tbz2) PIPE_CMD="tar -xvjf";;
710     bz2) PIPE_CMD="tar -xvjf";;
711     tgz) PIPE_CMD="tar -xvzf";;
712     gz) PIPE_CMD="tar -xvzf";;
713     *) eerror "Unrecognized tarball compression"
714     die "Unrecognized tarball compression";;
715     esac
716    
717 hollow 1.95 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
718 johnm 1.110 unset z
719 johnm 1.121 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
720 johnm 1.108 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
721     do z="${z}0";
722     done
723 r3pek 1.112 PATCH_ORDER="${z}${STRICT_COUNT}"
724 johnm 1.108
725 r3pek 1.112 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/
726     ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR}/${PATCH_ORDER}/ 1>/dev/null
727 johnm 1.16 else
728 johnm 1.41 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR} 1>/dev/null
729 johnm 1.16 fi
730    
731 hollow 1.95 if [ $? == 0 ]; then
732 johnm 1.1 einfo "${i/*\//} unpacked"
733 johnm 1.54 [ -n "$(echo ${i} | grep ':')" ] && echo ">>> Strict patch levels not currently supported for tarballed patchsets"
734 johnm 1.1 else
735 johnm 1.41 eerror "Failed to unpack ${i/:*/}"
736 johnm 1.1 die "unable to unpack patch tarball"
737     fi
738 johnm 1.16 else
739 johnm 1.25 extention=${i/*./}
740 johnm 1.41 extention=${extention/:*/}
741 johnm 1.25 PIPE_CMD=""
742     case ${extention} in
743     bz2) PIPE_CMD="bzip2 -dc";;
744     patch) PIPE_CMD="cat";;
745     diff) PIPE_CMD="cat";;
746     gz|Z|z) PIPE_CMD="gzip -dc";;
747     ZIP|zip) PIPE_CMD="unzip -p";;
748 johnm 1.41 *) UNIPATCH_DROP="${UNIPATCH_DROP} ${i/:*/}";;
749 johnm 1.25 esac
750 johnm 1.41
751     PATCH_LEVEL=${i/*([^:])?(:)}
752     i=${i/:*/}
753 johnm 1.25 x=${i/*\//}
754     x=${x/\.${extention}/}
755 lu_zero 1.62
756 hollow 1.95 if [ -n "${PIPE_CMD}" ]; then
757     if [ ! -r "${i}" ]; then
758 johnm 1.29 echo
759     eerror "FATAL: unable to locate:"
760     eerror "${i}"
761 johnm 1.54 eerror "for read-only. The file either has incorrect permissions"
762     eerror "or does not exist."
763 johnm 1.29 die Unable to locate ${i}
764     fi
765 lu_zero 1.62
766 hollow 1.95 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
767 johnm 1.110 unset z
768 johnm 1.121 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
769 johnm 1.108 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
770     do z="${z}0";
771     done
772 r3pek 1.112 PATCH_ORDER="${z}${STRICT_COUNT}"
773 johnm 1.108
774 r3pek 1.112 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/
775     $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${PATCH_ORDER}/${x}.patch${PATCH_LEVEL})
776 johnm 1.29 else
777 johnm 1.41 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL})
778 johnm 1.29 fi
779 johnm 1.25 fi
780 johnm 1.16 fi
781 johnm 1.1 done
782    
783     #populate KPATCH_DIRS so we know where to look to remove the excludes
784     x=${KPATCH_DIR}
785     KPATCH_DIR=""
786 hollow 1.95 for i in $(find ${x} -type d | sort -n); do
787 johnm 1.1 KPATCH_DIR="${KPATCH_DIR} ${i}"
788     done
789    
790     #so now lets get rid of the patchno's we want to exclude
791 johnm 1.19 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}"
792 hollow 1.95 for i in ${UNIPATCH_DROP}; do
793 johnm 1.55 ebegin "Excluding Patch #${i}"
794 hollow 1.95 for x in ${KPATCH_DIR}; do rm -f ${x}/${i}* 2>/dev/null; done
795 johnm 1.55 eend $?
796 johnm 1.1 done
797    
798     # and now, finally, we patch it :)
799 hollow 1.95 for x in ${KPATCH_DIR}; do
800     for i in $(find ${x} -maxdepth 1 -iname "*.patch*" -or -iname "*.diff*" | sort -n); do
801 johnm 1.25 STDERR_T="${T}/${i/*\//}"
802 johnm 1.41 STDERR_T="${STDERR_T/.patch*/.err}"
803    
804 lu_zero 1.62 [ -z ${i/*.patch*/} ] && PATCH_DEPTH=${i/*.patch/}
805 r3pek 1.112 #[ -z ${i/*.diff*/} ] && PATCH_DEPTH=${i/*.diff/}
806 johnm 1.41
807 hollow 1.96 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi
808 johnm 1.41
809     ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)"
810 hollow 1.95 while [ ${PATCH_DEPTH} -lt 5 ]; do
811 plasmaroo 1.33 echo "Attempting Dry-run:" >> ${STDERR_T}
812 johnm 1.25 echo "cmd: patch -p${PATCH_DEPTH} --dry-run -f < ${i}" >> ${STDERR_T}
813 johnm 1.54 echo "=======================================================" >> ${STDERR_T}
814 hollow 1.95 if [ $(patch -p${PATCH_DEPTH} --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then
815 johnm 1.25 echo "Attempting patch:" > ${STDERR_T}
816     echo "cmd: patch -p${PATCH_DEPTH} -f < ${i}" >> ${STDERR_T}
817 johnm 1.54 echo "=======================================================" >> ${STDERR_T}
818 hollow 1.95 if [ $(patch -p${PATCH_DEPTH} -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then
819 johnm 1.1 eend 0
820 johnm 1.25 rm ${STDERR_T}
821 johnm 1.1 break
822     else
823     eend 1
824     eerror "Failed to apply patch ${i/*\//}"
825 johnm 1.54 eerror "Please attach ${STDERR_T} to any bug you may post."
826 johnm 1.1 die "Failed to apply ${i/*\//}"
827     fi
828     else
829     PATCH_DEPTH=$((${PATCH_DEPTH} + 1))
830     fi
831     done
832 hollow 1.95 if [ ${PATCH_DEPTH} -eq 5 ]; then
833 johnm 1.1 eend 1
834 johnm 1.54 eerror "Please attach ${STDERR_T} to any bug you may post."
835 johnm 1.1 die "Unable to dry-run patch."
836     fi
837     done
838     done
839 johnm 1.43
840 johnm 1.144 # This is a quick, and kind of nasty hack to deal with UNIPATCH_DOCS which
841     # sit in KPATCH_DIR's. This is handled properly in the unipatch rewrite,
842     # which is why I'm not taking too much time over this.
843     local tmp
844     for i in ${UNIPATCH_DOCS}; do
845     tmp="${tmp} ${i//*\/}"
846     cp -f ${i} ${T}/
847     done
848     UNIPATCH_DOCS="${tmp}"
849 swegener 1.146
850 johnm 1.43 # clean up KPATCH_DIR's - fixes bug #53610
851 hollow 1.95 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done
852 swegener 1.135
853 johnm 1.78 LC_ALL="${myLC_ALL}"
854 johnm 1.122 LANG="${myLANG}"
855 johnm 1.1 }
856    
857 johnm 1.74 # getfilevar accepts 2 vars as follows:
858     # getfilevar <VARIABLE> <CONFIGFILE>
859     # pulled from linux-info
860    
861     getfilevar() {
862 johnm 1.93 local workingdir basefname basedname xarch=$(tc-arch-kernel)
863 johnm 1.74
864 johnm 1.93 if [[ -z ${1} ]] && [[ ! -f ${2} ]]; then
865 johnm 1.74 echo -e "\n"
866     eerror "getfilevar requires 2 variables, with the second a valid file."
867     eerror " getfilevar <VARIABLE> <CONFIGFILE>"
868     else
869     workingdir=${PWD}
870     basefname=$(basename ${2})
871     basedname=$(dirname ${2})
872     unset ARCH
873 swegener 1.135
874 johnm 1.74 cd ${basedname}
875     echo -e "include ${basefname}\ne:\n\t@echo \$(${1})" | \
876 johnm 1.119 make ${BUILD_FIXES} -s -f - e 2>/dev/null
877 johnm 1.74 cd ${workingdir}
878 swegener 1.135
879 johnm 1.74 ARCH=${xarch}
880     fi
881     }
882    
883 johnm 1.28 detect_arch() {
884     # This function sets ARCH_URI and ARCH_PATCH
885     # with the neccessary info for the arch sepecific compatibility
886     # patchsets.
887 lu_zero 1.62
888 johnm 1.93 local ALL_ARCH LOOP_ARCH COMPAT_URI i
889 plasmaroo 1.33
890     # COMPAT_URI is the contents of ${ARCH}_URI
891     # ARCH_URI is the URI for all the ${ARCH}_URI patches
892     # ARCH_PATCH is ARCH_URI broken into files for UNIPATCH
893    
894     ARCH_URI=""
895     ARCH_PATCH=""
896 vapier 1.145 ALL_ARCH="ALPHA AMD64 ARM HPPA IA64 M68K MIPS PPC PPC64 S390 SH SPARC X86"
897 johnm 1.31
898 hollow 1.95 for LOOP_ARCH in ${ALL_ARCH}; do
899 johnm 1.31 COMPAT_URI="${LOOP_ARCH}_URI"
900     COMPAT_URI="${!COMPAT_URI}"
901 lu_zero 1.62
902 vapier 1.86 [[ -n ${COMPAT_URI} ]] && \
903 johnm 1.55 ARCH_URI="${ARCH_URI} $(echo ${LOOP_ARCH} | tr '[:upper:]' '[:lower:]')? ( ${COMPAT_URI} )"
904 lu_zero 1.62
905 johnm 1.93 if [[ ${LOOP_ARCH} == "$(echo $(tc-arch-kernel) | tr '[:lower:]' '[:upper:]')" ]]; then
906     for i in ${COMPAT_URI}; do
907 plasmaroo 1.33 ARCH_PATCH="${ARCH_PATCH} ${DISTDIR}/${i/*\//}"
908     done
909     fi
910 johnm 1.31 done
911 johnm 1.28 }
912    
913 johnm 1.72 # sparc nastiness
914     #==============================================================
915     # This script generates the files in /usr/include/asm for sparc systems
916     # during installation of sys-kernel/linux-headers.
917     # Will no longer be needed when full 64 bit support is used on sparc64
918     # systems.
919     #
920     # Shamefully ripped from Debian
921     # ----------------------------------------------------------------------
922    
923     # Idea borrowed from RedHat's kernel package
924    
925 eradicator 1.76 # This is gonna get replaced by something in multilib.eclass soon...
926     # --eradicator
927 johnm 1.72 generate_sparc_asm() {
928     local name
929    
930     cd $1 || die
931     mkdir asm
932    
933     for h in `( ls asm-sparc; ls asm-sparc64 ) | grep '\.h$' | sort -u`; do
934     name="$(echo $h | tr a-z. A-Z_)"
935     # common header
936     echo "/* All asm/ files are generated and point to the corresponding
937     * file in asm-sparc or asm-sparc64.
938     */
939    
940     #ifndef __SPARCSTUB__${name}__
941     #define __SPARCSTUB__${name}__
942     " > asm/${h}
943    
944     # common for sparc and sparc64
945     if [ -f asm-sparc/$h -a -f asm-sparc64/$h ]; then
946     echo "#ifdef __arch64__
947     #include <asm-sparc64/$h>
948     #else
949     #include <asm-sparc/$h>
950     #endif
951     " >> asm/${h}
952    
953     # sparc only
954     elif [ -f asm-sparc/$h ]; then
955     echo "#ifndef __arch64__
956     #include <asm-sparc/$h>
957     #endif
958     " >> asm/${h}
959    
960     # sparc64 only
961     else
962     echo "#ifdef __arch64__
963     #include <asm-sparc64/$h>
964     #endif
965     " >> asm/${h}
966     fi
967    
968     # common footer
969     echo "#endif /* !__SPARCSTUB__${name}__ */" >> asm/${h}
970     done
971     return 0
972     }
973    
974 johnm 1.89 headers___fix() {
975 plasmaroo 1.88 # Voodoo to partially fix broken upstream headers.
976     # Issues with this function should go to plasmaroo.
977 johnm 1.72 sed -i \
978 plasmaroo 1.124 -e "s/\([ "$'\t'"]\)\(u\|s\)\(8\|16\|32\|64\)\([ "$'\t'"]\)/\1__\2\3\4/g;" \
979 plasmaroo 1.88 -e 's/ \(u\|s\)\(8\|16\|32\|64\)$/ __\1\2/g' \
980     -e 's/\([(, ]\)\(u\|s\)64\([, )]\)/\1__\264\3/g' \
981 plasmaroo 1.124 -e "s/^\(u\|s\)\(8\|16\|32\|64\)\([ "$'\t'"]\)/__\1\2\3/g;" \
982 plasmaroo 1.154 -e "s/ inline / __inline__ /g" \
983 johnm 1.72 "$@"
984     }
985 johnm 1.28
986 johnm 1.1 # common functions
987     #==============================================================
988 plasmaroo 1.33 kernel-2_src_unpack() {
989 johnm 1.1 universal_unpack
990 robbat2 1.163 debug-print "Doing unipatch"
991 lu_zero 1.62
992 dsd 1.126 [[ -n ${UNIPATCH_LIST} || -n ${UNIPATCH_LIST_DEFAULT} || -n ${UNIPATCH_LIST_GENPATCHES} ]] && \
993     unipatch "${UNIPATCH_LIST_DEFAULT} ${UNIPATCH_LIST_GENPATCHES} ${UNIPATCH_LIST}"
994 swegener 1.165
995 robbat2 1.163 debug-print "Doing premake"
996 lu_zero 1.62
997 vapier 1.157 # allow ebuilds to massage the source tree after patching but before
998     # we run misc `make` functions below
999 vapier 1.158 [[ $(type -t kernel-2_hook_premake) == "function" ]] && kernel-2_hook_premake
1000 swegener 1.165
1001 robbat2 1.163 debug-print "Doing unpack_set_extraversion"
1002 vapier 1.157
1003 johnm 1.107 [[ -z ${K_NOSETEXTRAVERSION} ]] && unpack_set_extraversion
1004     unpack_fix_docbook
1005 dsd 1.104 unpack_fix_install_path
1006    
1007 johnm 1.56 kernel_is 2 4 && unpack_2_4
1008 vapier 1.153 kernel_is 2 6 && unpack_2_6
1009 johnm 1.1 }
1010    
1011 plasmaroo 1.33 kernel-2_src_compile() {
1012 vapier 1.136 cd "${S}"
1013 johnm 1.93 [[ ${ETYPE} == headers ]] && compile_headers
1014     [[ ${ETYPE} == sources ]] && \
1015 vapier 1.145 use doc && compile_manpages
1016 johnm 1.1 }
1017    
1018 plasmaroo 1.33 kernel-2_pkg_preinst() {
1019 johnm 1.93 [[ ${ETYPE} == headers ]] && preinst_headers
1020 johnm 1.1 }
1021    
1022 plasmaroo 1.33 kernel-2_src_install() {
1023 johnm 1.1 install_universal
1024 johnm 1.93 [[ ${ETYPE} == headers ]] && install_headers
1025     [[ ${ETYPE} == sources ]] && install_sources
1026 johnm 1.1 }
1027    
1028 plasmaroo 1.33 kernel-2_pkg_postinst() {
1029 johnm 1.93 [[ ${ETYPE} == headers ]] && postinst_headers
1030     [[ ${ETYPE} == sources ]] && postinst_sources
1031 johnm 1.1 }
1032 johnm 1.12
1033 plasmaroo 1.33 kernel-2_pkg_setup() {
1034 blubb 1.167 ABI="${KERNEL_ABI}"
1035 johnm 1.93 [[ ${ETYPE} == headers ]] && setup_headers
1036     [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..."
1037 johnm 1.12 }

  ViewVC Help
Powered by ViewVC 1.1.20