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

Contents of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.172 - (hide annotations) (download)
Wed May 3 11:10:11 2006 UTC (13 years, 5 months ago) by johnm
Branch: MAIN
Changes since 1.171: +19 -16 lines
provide fix for 2.6.17 make of version.h depending on oldconfig and throwing an error if the .config is not valid, dont call the special unpack conditions for sources (we dont need to). This should be 2.4-2.6.17+ safe

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

  ViewVC Help
Powered by ViewVC 1.1.20