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

Contents of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.181 - (hide annotations) (download)
Sun Jul 16 06:27:58 2006 UTC (8 years, 3 months ago) by phreak
Branch: MAIN
Changes since 1.180: +2 -2 lines
Reuse ebuild's HOMEPAGE, not just plainly ignore it

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

  ViewVC Help
Powered by ViewVC 1.1.20