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

Contents of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.218 - (hide annotations) (download)
Mon Feb 23 05:51:14 2009 UTC (10 years, 4 months ago) by vapier
Branch: MAIN
Changes since 1.217: +3 -3 lines
return 1 rather than -1 as bash-4 hates negative return values and all consumers only care the value is not 0

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

  ViewVC Help
Powered by ViewVC 1.1.20