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

Contents of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.122 - (hide annotations) (download)
Thu Apr 14 11:00:34 2005 UTC (14 years, 2 months ago) by johnm
Branch: MAIN
Changes since 1.121: +4 -1 lines
Fixes bug #77190, unsetting LANG and changing LC_ALL to prevent any locale weirdness

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.115 # $Header: /var/cvsroot/gentoo-x86/eclass/kernel-2.eclass,v 1.114 2005/03/30 07:03:33 vapier Exp $
4 johnm 1.13
5 johnm 1.54 # Description: kernel.eclass rewrite for a clean base regarding the 2.6
6     # series of kernel with back-compatibility for 2.4
7 johnm 1.3 #
8 johnm 1.54 # Maintainer: John Mylchreest <johnm@gentoo.org>
9 johnm 1.93 # Copyright 2005 Gentoo Linux
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 lu_zero 1.62 # K_PREPATCHED - if the patchset is prepatched (ie: mm-sources,
28     # ck-sources, ac-sources) it will use PR (ie: -r5) as
29     # the patchset version for
30 johnm 1.93 # and not use it as a true package revision
31 johnm 1.55 # K_EXTRAEINFO - this is a new-line seperated list of einfo displays in
32 lu_zero 1.62 # postinst and can be used to carry additional postinst
33 johnm 1.55 # messages
34     # K_EXTRAEWARN - same as K_EXTRAEINFO except ewarn's instead of einfo's
35 johnm 1.107 # K_SYMLINK - if this is set, then forcably create symlink anyway
36 plasmaroo 1.105 #
37 johnm 1.108 # K_DEFCONFIG - Allow specifying a different defconfig target.
38     # If length zero, defaults to "defconfig".
39 johnm 1.55
40     # H_SUPPORTEDARCH - this should be a space separated list of ARCH's which
41     # can be supported by the headers ebuild
42    
43     # UNIPATCH_LIST - space delimetered list of patches to be applied to the
44     # kernel
45     # UNIPATCH_EXCLUDE - an addition var to support exlusion based completely
46     # on "<passedstring>*" and not "<passedno#>_*"
47 lu_zero 1.62 # - this should _NOT_ be used from the ebuild as this is
48 johnm 1.55 # reserved for end users passing excludes from the cli
49 lu_zero 1.62 # UNIPATCH_DOCS - space delimemeted list of docs to be installed to
50 johnm 1.55 # the doc dir
51 lu_zero 1.62 # UNIPATCH_STRICTORDER - if this is set places patches into directories of
52 johnm 1.55 # order, so they are applied in the order passed
53 johnm 1.1
54 eradicator 1.79 inherit toolchain-funcs versionator multilib
55 johnm 1.1 ECLASS="kernel-2"
56 plasmaroo 1.33 INHERITED="$INHERITED $ECLASS"
57 johnm 1.93 EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install \
58     pkg_preinst pkg_postinst
59 johnm 1.1
60 vapier 1.75 export CTARGET=${CTARGET:-${CHOST}}
61 hollow 1.96 if [[ ${CTARGET} == ${CHOST} && ${CATEGORY/cross-} != ${CATEGORY} ]]; then
62 hollow 1.95 export CTARGET=${CATEGORY/cross-}
63 vapier 1.75 fi
64 vapier 1.60
65 lu_zero 1.62 HOMEPAGE="http://www.kernel.org/ http://www.gentoo.org/"
66 johnm 1.1 LICENSE="GPL-2"
67    
68 johnm 1.18 # set LINUX_HOSTCFLAGS if not already set
69 johnm 1.93 [ -z "$LINUX_HOSTCFLAGS" ] && \
70     LINUX_HOSTCFLAGS="-Wall -Wstrict-prototypes -Os -fomit-frame-pointer -I${S}/include"
71 johnm 1.18
72 johnm 1.54 #Eclass functions only from here onwards ...
73 plasmaroo 1.33 #==============================================================
74 johnm 1.117 detect_version() {
75     # this function will detect and set
76     # - OKV: Original Kernel Version (2.6.0/2.6.0-test11)
77     # - KV: Kernel Version (2.6.0-gentoo/2.6.0-test11-gentoo-r1)
78     # - EXTRAVERSION: The additional version appended to OKV (-gentoo/-gentoo-r1)
79    
80     if [[ -n ${KV_FULL} ]]; then
81     # we will set this for backwards compatibility.
82     KV=${KV_FULL}
83    
84     # we know KV_FULL so lets stop here. but not without resetting S
85     S=${WORKDIR}/linux-${KV_FULL}
86     return
87     fi
88    
89     # CKV is used as a comparison kernel version, which is used when
90     # PV doesnt reflect the genuine kernel version.
91     # this gets set to the portage style versioning. ie:
92     # CKV=2.6.11_rc4
93     CKV=${CKV:-${PV}}
94     OKV=${OKV:-${CKV}}
95     OKV=${OKV/_beta/-test}
96     OKV=${OKV/_rc/-rc}
97     OKV=${OKV/-r*}
98     OKV=${OKV/_p*}
99    
100     KV_MAJOR=$(get_version_component_range 1 ${OKV})
101     KV_MINOR=$(get_version_component_range 2 ${OKV})
102     KV_PATCH=$(get_version_component_range 3 ${OKV})
103    
104     if [[ ${KV_MAJOR}${KV_MINOR}${KV_PATCH} -ge 269 ]]; then
105     KV_EXTRA=$(get_version_component_range 4- ${OKV})
106     KV_EXTRA=${KV_EXTRA/[-_]*}
107     else
108     KV_PATCH=$(get_version_component_range 3- ${OKV})
109     fi
110     KV_PATCH=${KV_PATCH/[-_]*}
111    
112     KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
113    
114     RELEASE=${CKV/${OKV}}
115     RELEASE=${RELEASE/_beta}
116     RELEASE=${RELEASE/_rc/-rc}
117     RELEASE=${RELEASE/_pre/-pre}
118 johnm 1.118 kernel_is ge 2 6 && RELEASE=${RELEASE/-pre/-bk}
119 johnm 1.117 RELEASETYPE=${RELEASE//[0-9]}
120    
121     # Now we know that RELEASE is the -rc/-bk
122     # and RELEASETYPE is the same but with its numerics stripped
123     # we can work on better sorting EXTRAVERSION.
124     # first of all, we add the release
125     EXTRAVERSION="${RELEASE}"
126     [[ -n ${KV_EXTRA} ]] && EXTRAVERSION=".${KV_EXTRA}${EXTRAVERSION}"
127    
128     if [[ -n ${K_PREPATCHED} ]]; then
129     EXTRAVERSION="${EXTRAVERSION}-${PN/-*}${PR/r}"
130     elif [[ "${ETYPE}" = "sources" ]]; then
131     # For some sources we want to use the PV in the extra version
132     # This is because upstream releases with a completely different
133     # versioning scheme.
134     case ${PN/-*} in
135     wolk) K_USEPV=1;;
136     vserver) K_USEPV=1;;
137     esac
138    
139     [[ -z ${K_NOUSENAME} ]] && EXTRAVERSION="${EXTRAVERSION}-${PN/-*}"
140     [[ -n ${K_USEPV} ]] && EXTRAVERSION="${EXTRAVERSION}-${PV//_/-}"
141     [[ -n ${PR//r0} ]] && EXTRAVERSION="${EXTRAVERSION}-${PR}"
142     fi
143    
144 johnm 1.120 # The only messing around which should actually effect this is for KV_EXTRA
145     # since this has to limit OKV to MAJ.MIN.PAT and strip EXTRA off else
146     # KV_FULL evaluates to MAJ.MIN.PAT.EXT.EXT after EXTRAVERSION
147     if [[ -n ${KV_EXTRA} ]]; then
148     OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
149     KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/patch-${CKV}.bz2
150     mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}.tar.bz2"
151     UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV}.bz2"
152     fi
153    
154 johnm 1.118 # We need to set this using OKV, but we need to set it before we do any
155     # messing around with OKV based on RELEASETYPE
156     KV_FULL=${OKV}${EXTRAVERSION}
157    
158     # we will set this for backwards compatibility.
159     S=${WORKDIR}/linux-${KV_FULL}
160     KV=${KV_FULL}
161    
162 johnm 1.117 # -rc-bk pulls can be achieved by specifying CKV
163     # for example:
164     # CKV="2.6.11_rc3_pre2"
165     # will pull:
166     # linux-2.6.10.tar.bz2 & patch-2.6.11-rc3.bz2 & patch-2.6.11-rc3-bk2.bz2
167    
168     if [[ ${RELEASETYPE} == -rc ]] || [[ ${RELEASETYPE} == -pre ]]; then
169     OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))"
170     KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${CKV//_/-}.bz2
171     mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
172     UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV//_/-}.bz2"
173     fi
174    
175     if [[ ${RELEASETYPE} == -bk ]]; then
176     KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${OKV}${RELEASE}.bz2
177     mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
178     UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${OKV}${RELEASE}.bz2"
179     fi
180    
181     if [[ ${RELEASETYPE} == -rc-bk ]]; then
182     OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))"
183     KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2
184     mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-bk*}.bz2
185     mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
186     UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE/-bk*}.bz2 ${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2"
187     fi
188     }
189    
190 plasmaroo 1.33 kernel_is() {
191 johnm 1.117 [[ -z ${OKV} ]] && detect_version
192 johnm 1.93 local operator test value x=0 y=0 z=0
193 johnm 1.67
194 johnm 1.93 case ${1} in
195     lt) operator="-lt"; shift;;
196     gt) operator="-gt"; shift;;
197     le) operator="-le"; shift;;
198     ge) operator="-ge"; shift;;
199     eq) operator="-eq"; shift;;
200     *) operator="-eq";;
201     esac
202    
203     for x in ${@}; do
204     for((y=0; y<$((3 - ${#x})); y++)); do value="${value}0"; done
205     value="${value}${x}"
206     z=$((${z} + 1))
207    
208     case ${z} in
209     1) for((y=0; y<$((3 - ${#KV_MAJOR})); y++)); do test="${test}0"; done;
210     test="${test}${KV_MAJOR}";;
211     2) for((y=0; y<$((3 - ${#KV_MINOR})); y++)); do test="${test}0"; done;
212     test="${test}${KV_MINOR}";;
213     3) for((y=0; y<$((3 - ${#KV_PATCH})); y++)); do test="${test}0"; done;
214     test="${test}${KV_PATCH}";;
215     *) die "Error in kernel-2_kernel_is(): Too many parameters.";;
216     esac
217     done
218 johnm 1.69
219 johnm 1.93 [ ${test} ${operator} ${value} ] && return 0 || return 1
220 plasmaroo 1.33 }
221 johnm 1.18
222     kernel_is_2_4() {
223 johnm 1.56 kernel_is 2 4
224 johnm 1.18 }
225    
226     kernel_is_2_6() {
227 johnm 1.78 kernel_is 2 6 || kernel_is 2 5
228 johnm 1.18 }
229    
230 vapier 1.60 kernel_header_destdir() {
231 vapier 1.75 [[ ${CTARGET} == ${CHOST} ]] \
232 vapier 1.60 && echo /usr/include \
233     || echo /usr/${CTARGET}/include
234     }
235    
236 plasmaroo 1.33 # Capture the sources type and set DEPENDs
237 hollow 1.95 if [[ ${ETYPE} == sources ]]; then
238 johnm 1.1 DEPEND="!build? ( sys-apps/sed
239 johnm 1.93 >=sys-devel/binutils-2.11.90.0.31 )
240     doc? ( app-text/docbook-sgml-utils )"
241 johnm 1.1 RDEPEND="${DEPEND}
242 johnm 1.93 !build? ( >=sys-libs/ncurses-5.2
243     sys-devel/make )"
244 lu_zero 1.62
245 johnm 1.78 PROVIDE="virtual/linux-sources"
246     kernel_is gt 2 4 && PROVIDE="${PROVIDE} virtual/alsa"
247 johnm 1.72 SLOT="${PVR}"
248     DESCRIPTION="Sources for the Linux kernel"
249 johnm 1.84 IUSE="${IUSE} symlink build doc"
250 hollow 1.95 elif [[ ${ETYPE} == headers ]]; then
251 johnm 1.72 DESCRIPTION="Linux system headers"
252     IUSE="${IUSE}"
253    
254 hollow 1.95 if [[ ${CTARGET} = ${CHOST} ]]; then
255 johnm 1.72 DEPEND="!virtual/os-headers"
256     PROVIDE="virtual/kernel virtual/os-headers"
257     SLOT="0"
258     else
259     SLOT="${CTARGET}"
260     fi
261 johnm 1.1 else
262 johnm 1.55 eerror "Unknown ETYPE=\"${ETYPE}\", must be \"sources\" or \"headers\""
263 johnm 1.93 die "Unknown ETYPE=\"${ETYPE}\", must be \"sources\" or \"headers\""
264 johnm 1.1 fi
265    
266     # Unpack functions
267     #==============================================================
268     unpack_2_4() {
269 johnm 1.117 # Kernel ARCH != portage ARCH
270     local ARCH=$(tc-arch-kernel)
271    
272 johnm 1.1 cd ${S}
273 lu_zero 1.62 # this file is required for other things to build properly,
274 johnm 1.1 # so we autogenerate it
275     make mrproper || die "make mrproper died"
276     make include/linux/version.h || die "make include/linux/version.h failed"
277     echo ">>> version.h compiled successfully."
278 johnm 1.117
279     ARCH=$(tc-arch)
280 johnm 1.1 }
281    
282     universal_unpack() {
283 plasmaroo 1.33 cd ${WORKDIR}
284     unpack linux-${OKV}.tar.bz2
285 hollow 1.98 if [[ "${OKV}" != "${KV_FULL}" ]]; then
286     mv linux-${OKV} linux-${KV_FULL} \
287 johnm 1.55 || die "Unable to move source tree to ${KV_FULL}."
288 hollow 1.98 fi
289 plasmaroo 1.33 cd ${S}
290 lu_zero 1.62
291 johnm 1.1 # remove all backup files
292     find . -iname "*~" -exec rm {} \; 2> /dev/null
293    
294 johnm 1.78 # fix a problem on ppc where TOUT writes to /usr/src/linux breaking sandbox
295 lu_zero 1.62 use ppc && \
296 johnm 1.93 sed -ie 's|TOUT := .tmp_gas_check|TOUT := $(T).tmp_gas_check|' \
297     ${S}/arch/ppc/Makefile
298 johnm 1.1 }
299    
300     unpack_set_extraversion() {
301     cd ${S}
302 dsd 1.104 sed -i -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile
303 johnm 1.93 cd ${OLDPWD}
304 johnm 1.1 }
305    
306 dsd 1.104 # Should be done after patches have been applied
307     # Otherwise patches that modify the same area of Makefile will fail
308     unpack_fix_install_path() {
309     cd ${S}
310     sed -i -e 's:#export\tINSTALL_PATH:export\tINSTALL_PATH:' Makefile
311     }
312    
313 johnm 1.107 unpack_fix_docbook() {
314     if [[ -d ${S}/Documentation/DocBook ]]; then
315     cd ${S}/Documentation/DocBook
316     sed -ie "s:db2:docbook2:g" Makefile
317     cd ${OLDPWD}
318     fi
319     }
320    
321 johnm 1.1 # Compile Functions
322     #==============================================================
323     compile_headers() {
324 vapier 1.75 # if we couldnt obtain HOSTCFLAGS from the Makefile,
325     # then set it to something sane
326 johnm 1.74 local HOSTCFLAGS=$(getfilevar HOSTCFLAGS ${S}/Makefile)
327 vapier 1.75 HOSTCFLAGS=${HOSTCFLAGS:--Wall -Wstrict-prototypes -O2 -fomit-frame-pointer}
328    
329     # Kernel ARCH != portage ARCH
330 vapier 1.86 local KARCH=$(tc-arch-kernel)
331 vapier 1.75
332     # When cross-compiling, we need to set the ARCH/CROSS_COMPILE
333     # variables properly or bad things happen !
334     local xmakeopts="ARCH=${KARCH}"
335 johnm 1.93 if [[ ${CTARGET} != ${CHOST} ]]; then
336 vapier 1.75 xmakeopts="${xmakeopts} CROSS_COMPILE=${CTARGET}-"
337 hollow 1.95 elif type -p ${CHOST}-ar; then
338 vapier 1.75 xmakeopts="${xmakeopts} CROSS_COMPILE=${CHOST}-"
339     fi
340    
341 johnm 1.93 if kernel_is 2 4; then
342 vapier 1.75 yes "" | make oldconfig ${xmakeopts}
343 johnm 1.72 echo ">>> make oldconfig complete"
344 vapier 1.75 use sparc && make dep ${xmakeopts}
345 hollow 1.95 elif kernel_is 2 6; then
346 johnm 1.72 # autoconf.h isnt generated unless it already exists. plus, we have
347     # no guarantee that any headers are installed on the system...
348 vapier 1.75 [[ -f ${ROOT}/usr/include/linux/autoconf.h ]] \
349 johnm 1.72 || touch include/linux/autoconf.h
350    
351 plasmaroo 1.105 # if K_DEFCONFIG isn't set, force to "defconfig"
352     # needed by mips
353     if [[ -z ${K_DEFCONFIG} ]]; then
354     K_DEFCONFIG="defconfig"
355     fi
356    
357 johnm 1.72 # if there arent any installed headers, then there also isnt an asm
358     # symlink in /usr/include/, and make defconfig will fail, so we have
359     # to force an include path with $S.
360 vapier 1.75 HOSTCFLAGS="${HOSTCFLAGS} -I${S}/include/"
361     ln -sf asm-${KARCH} "${S}"/include/asm
362 plasmaroo 1.105 make ${K_DEFCONFIG} HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "defconfig failed"
363 vapier 1.75 make prepare HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed"
364 eradicator 1.100 make prepare-all HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed"
365 johnm 1.72 fi
366 johnm 1.1 }
367    
368 spock 1.37 compile_manpages() {
369 johnm 1.54 einfo "Making manpages ..."
370 vapier 1.75 env -u ARCH make mandocs
371 spock 1.37 }
372    
373 johnm 1.1 # install functions
374     #==============================================================
375     install_universal() {
376     #fix silly permissions in tarball
377     cd ${WORKDIR}
378     chown -R root:root *
379     chmod -R a+r-w+X,u+w *
380 johnm 1.93 cd ${OLDPWD}
381 johnm 1.1 }
382    
383     install_headers() {
384 johnm 1.72 local ddir=$(kernel_header_destdir)
385 vapier 1.60
386 johnm 1.1 cd ${S}
387 vapier 1.60 dodir ${ddir}/linux
388     cp -ax ${S}/include/linux/* ${D}/${ddir}/linux
389     rm -rf ${D}/${ddir}/linux/modules
390 lu_zero 1.62
391 eradicator 1.99 # Handle multilib headers
392     case $(tc-arch-kernel) in
393     sparc64)
394     dodir ${ddir}/asm-sparc
395     cp -ax ${S}/include/asm-sparc/* ${D}/${ddir}/asm-sparc
396    
397     dodir ${ddir}/asm-sparc64
398     cp -ax ${S}/include/asm-sparc64/* ${D}/${ddir}/asm-sparc64
399    
400 eradicator 1.102 create_ml_includes ${ddir}/asm !__arch64__:${ddir}/asm-sparc __arch64__:${ddir}/asm-sparc64
401 eradicator 1.99 ;;
402     x86_64)
403     dodir ${ddir}/asm-i386
404     cp -ax ${S}/include/asm-i386/* ${D}/${ddir}/asm-i386
405    
406     dodir ${ddir}/asm-x86_64
407     cp -ax ${S}/include/asm-x86_64/* ${D}/${ddir}/asm-x86_64
408    
409     create_ml_includes ${ddir}/asm __i386__:${ddir}/asm-i386 __x86_64__:${ddir}/asm-x86_64
410     ;;
411 vapier 1.114 arm)
412     dodir ${ddir}/asm
413     cp -ax ${S}/include/asm/* ${D}/${ddir}/asm
414     [[ ! -e ${D}/${ddir}/asm/arch ]] && ln -s arch-ebsa285 ${D}/${ddir}/asm/arch
415     [[ ! -e ${D}/${ddir}/asm/proc ]] && ln -s proc-armv ${D}/${ddir}/asm/proc
416     ;;
417 eradicator 1.99 *)
418     dodir ${ddir}/asm
419     cp -ax ${S}/include/asm/* ${D}/${ddir}/asm
420     ;;
421     esac
422 eradicator 1.76
423 johnm 1.93 if kernel_is 2 6; then
424 vapier 1.60 dodir ${ddir}/asm-generic
425     cp -ax ${S}/include/asm-generic/* ${D}/${ddir}/asm-generic
426 johnm 1.12 fi
427 eradicator 1.99
428 vapier 1.103 # clean up
429     find "${D}" -name '*.orig' -exec rm -f {} \;
430    
431 johnm 1.93 cd ${OLDPWD}
432 johnm 1.1 }
433    
434     install_sources() {
435 johnm 1.93 local doc docs file
436 johnm 1.1
437 johnm 1.12 cd ${S}
438     dodir /usr/src
439 johnm 1.54 echo ">>> Copying sources ..."
440 johnm 1.93
441 johnm 1.27 file="$(find ${WORKDIR} -iname "docs" -type d)"
442 johnm 1.93 if [[ -n ${file} ]]; then
443     for file in $(find ${file} -type f); do
444     echo "${file//*docs\/}" >> ${S}/patches.txt
445 johnm 1.54 echo "===================================================" >> ${S}/patches.txt
446 johnm 1.27 cat ${file} >> ${S}/patches.txt
447 johnm 1.54 echo "===================================================" >> ${S}/patches.txt
448 johnm 1.12 echo "" >> ${S}/patches.txt
449 johnm 1.1 done
450 johnm 1.12 fi
451 johnm 1.1
452 johnm 1.93 if [[ ! -f ${S}/patches.txt ]]; then
453 johnm 1.12 # patches.txt is empty so lets use our ChangeLog
454 johnm 1.93 [[ -f ${FILESDIR}/../ChangeLog ]] && \
455     echo "Please check the ebuild ChangeLog for more details." \
456     > ${S}/patches.txt
457 johnm 1.12 fi
458    
459 hollow 1.95 for doc in ${UNIPATCH_DOCS}; do [[ -f ${doc} ]] && docs="${docs} ${doc}"; done
460     if [[ -f ${S}/patches.txt ]]; then docs="${docs} ${S}/patches.txt"; fi
461     use doc && ! use arm && ! use s390 && install_manpages
462     dodoc ${docs}
463 johnm 1.12
464     mv ${WORKDIR}/linux* ${D}/usr/src
465 johnm 1.1 }
466    
467 spock 1.37 install_manpages() {
468 johnm 1.85 sed -ie "s#/usr/local/man#${D}/usr/man#g" scripts/makeman
469 spock 1.39 ebegin "Installing manpages"
470 johnm 1.78 env -u ARCH make installmandocs
471 spock 1.37 eend $?
472 johnm 1.85 sed -ie "s#${D}/usr/man#/usr/local/man#g" scripts/makeman
473 spock 1.37 }
474    
475 johnm 1.1 # pkg_preinst functions
476     #==============================================================
477     preinst_headers() {
478 vapier 1.60 local ddir=$(kernel_header_destdir)
479 johnm 1.72 [[ -L ${ddir}/linux ]] && rm ${ddir}/linux
480     [[ -L ${ddir}/asm ]] && rm ${ddir}/asm
481 johnm 1.1 }
482    
483     # pkg_postinst functions
484     #==============================================================
485     postinst_sources() {
486 vapier 1.80 local MAKELINK=0
487 johnm 1.78
488 johnm 1.84 # if we have USE=symlink, then force K_SYMLINK=1
489     use symlink && K_SYMLINK=1
490    
491 johnm 1.78 # if we are to forcably symlink, delete it if it already exists first.
492 johnm 1.93 if [[ -n ${K_SYMLINK} ]]; then
493 vapier 1.80 [[ -h ${ROOT}usr/src/linux ]] && rm ${ROOT}usr/src/linux
494 johnm 1.78 MAKELINK=1
495     fi
496    
497     # if the link doesnt exist, lets create it
498 vapier 1.80 [[ ! -h ${ROOT}usr/src/linux ]] && MAKELINK=1
499 johnm 1.78
500 johnm 1.93 if [[ ${MAKELINK} == 1 ]]; then
501 johnm 1.89 cd ${ROOT}usr/src
502     ln -sf linux-${KV_FULL} linux
503     cd ${OLDPWD}
504     fi
505 johnm 1.1
506     # Don't forget to make directory for sysfs
507 johnm 1.111 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys
508 johnm 1.1
509     echo
510     einfo "After installing a new kernel of any version, it is important"
511     einfo "that you have the appropriate /etc/modules.autoload.d/kernel-X.Y"
512     einfo "created (X.Y is the first 2 parts of your new kernel version)"
513     echo
514     einfo "For example, this kernel will require:"
515     einfo "/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}"
516     echo
517 r3pek 1.113 einfo "If you are upgrading from a previous kernel, you may be interested"
518     einfo "in the following documents:"
519     einfo " - General upgrade guide: http://www.gentoo.org/doc/en/kernel-upgrade.xml"
520     kernel_is_2_6 && einfo " - 2.4 to 2.6 migration guide: http://www.gentoo.org/doc/en/migration-to-2.6.xml"
521     echo
522 lu_zero 1.62
523 johnm 1.2 # if K_EXTRAEINFO is set then lets display it now
524 hollow 1.95 if [[ -n ${K_EXTRAEINFO} ]]; then
525 johnm 1.2 echo ${K_EXTRAEINFO} | fmt |
526 hollow 1.95 while read -s ELINE; do einfo "${ELINE}"; done
527 plasmaroo 1.33 fi
528    
529 iggy 1.7 # if K_EXTRAEWARN is set then lets display it now
530 hollow 1.95 if [[ -n ${K_EXTRAEWARN} ]]; then
531 iggy 1.7 echo ${K_EXTRAEWARN} | fmt |
532 hollow 1.95 while read -s ELINE; do ewarn "${ELINE}"; done
533 iggy 1.7 fi
534 johnm 1.1 }
535    
536 johnm 1.12 postinst_headers() {
537 johnm 1.72 einfo "Kernel headers are usually only used when recompiling glibc, as such, following the installation"
538     einfo "of newer headers, it is advised that you re-merge glibc as follows:"
539     einfo "emerge glibc"
540     einfo "Failure to do so will cause glibc to not make use of newer features present in the updated kernel"
541     einfo "headers."
542 johnm 1.12 }
543    
544     # pkg_setup functions
545     #==============================================================
546     setup_headers() {
547 vapier 1.86 [[ -z ${H_SUPPORTEDARCH} ]] && H_SUPPORTEDARCH=${PN/-*/}
548 hollow 1.95 for i in ${H_SUPPORTEDARCH}; do
549 vapier 1.87 [[ $(tc-arch) == "${i}" ]] && H_ACCEPT_ARCH="yes"
550 johnm 1.12 done
551 lu_zero 1.62
552 johnm 1.93 if [[ ${H_ACCEPT_ARCH} != "yes" ]]; then
553 johnm 1.12 echo
554 vapier 1.106 eerror "This version of ${PN} does not support $(tc-arch)."
555 johnm 1.12 eerror "Please merge the appropriate sources, in most cases"
556 vapier 1.106 eerror "(but not all) this will be called $(tc-arch)-headers."
557     die "Package unsupported for $(tc-arch)"
558 johnm 1.12 fi
559     }
560    
561 johnm 1.1 # unipatch
562     #==============================================================
563     unipatch() {
564 johnm 1.108 local i x y z extention PIPE_CMD UNIPATCH_DROP KPATCH_DIR PATCH_DEPTH ELINE
565 johnm 1.122 local STRICT_COUNT PATCH_LEVEL myLC_ALL myLANG
566 johnm 1.78
567     # set to a standard locale to ensure sorts are ordered properly.
568     myLC_ALL="${LC_ALL}"
569 johnm 1.122 myLANG="${LANG}"
570 johnm 1.78 LC_ALL="C"
571 johnm 1.122 LANG=""
572 johnm 1.1
573     [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/"
574     [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR}
575    
576 johnm 1.41 # We're gonna need it when doing patches with a predefined patchlevel
577     shopt -s extglob
578    
579 johnm 1.54 # This function will unpack all passed tarballs, add any passed patches, and remove any passed patchnumbers
580 johnm 1.1 # usage can be either via an env var or by params
581 johnm 1.54 # although due to the nature we pass this within this eclass
582     # it shall be by param only.
583     # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}"
584     UNIPATCH_LIST="${@}"
585 johnm 1.1
586     #unpack any passed tarballs
587 hollow 1.95 for i in ${UNIPATCH_LIST}; do
588     if [ -n "$(echo ${i} | grep -e "\.tar" -e "\.tbz" -e "\.tgz")" ]; then
589 johnm 1.1 extention=${i/*./}
590 johnm 1.41 extention=${extention/:*/}
591 johnm 1.1 case ${extention} in
592     tbz2) PIPE_CMD="tar -xvjf";;
593     bz2) PIPE_CMD="tar -xvjf";;
594     tgz) PIPE_CMD="tar -xvzf";;
595     gz) PIPE_CMD="tar -xvzf";;
596     *) eerror "Unrecognized tarball compression"
597     die "Unrecognized tarball compression";;
598     esac
599    
600 hollow 1.95 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
601 johnm 1.110 unset z
602 johnm 1.121 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
603 johnm 1.108 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
604     do z="${z}0";
605     done
606 r3pek 1.112 PATCH_ORDER="${z}${STRICT_COUNT}"
607 johnm 1.108
608 r3pek 1.112 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/
609     ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR}/${PATCH_ORDER}/ 1>/dev/null
610 johnm 1.16 else
611 johnm 1.41 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR} 1>/dev/null
612 johnm 1.16 fi
613    
614 hollow 1.95 if [ $? == 0 ]; then
615 johnm 1.1 einfo "${i/*\//} unpacked"
616 johnm 1.54 [ -n "$(echo ${i} | grep ':')" ] && echo ">>> Strict patch levels not currently supported for tarballed patchsets"
617 johnm 1.1 else
618 johnm 1.41 eerror "Failed to unpack ${i/:*/}"
619 johnm 1.1 die "unable to unpack patch tarball"
620     fi
621 johnm 1.16 else
622 johnm 1.25 extention=${i/*./}
623 johnm 1.41 extention=${extention/:*/}
624 johnm 1.25 PIPE_CMD=""
625     case ${extention} in
626     bz2) PIPE_CMD="bzip2 -dc";;
627     patch) PIPE_CMD="cat";;
628     diff) PIPE_CMD="cat";;
629     gz|Z|z) PIPE_CMD="gzip -dc";;
630     ZIP|zip) PIPE_CMD="unzip -p";;
631 johnm 1.41 *) UNIPATCH_DROP="${UNIPATCH_DROP} ${i/:*/}";;
632 johnm 1.25 esac
633 johnm 1.41
634     PATCH_LEVEL=${i/*([^:])?(:)}
635     i=${i/:*/}
636 johnm 1.25 x=${i/*\//}
637     x=${x/\.${extention}/}
638 lu_zero 1.62
639 hollow 1.95 if [ -n "${PIPE_CMD}" ]; then
640     if [ ! -r "${i}" ]; then
641 johnm 1.29 echo
642     eerror "FATAL: unable to locate:"
643     eerror "${i}"
644 johnm 1.54 eerror "for read-only. The file either has incorrect permissions"
645     eerror "or does not exist."
646 johnm 1.29 die Unable to locate ${i}
647     fi
648 lu_zero 1.62
649 hollow 1.95 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
650 johnm 1.110 unset z
651 johnm 1.121 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
652 johnm 1.108 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
653     do z="${z}0";
654     done
655 r3pek 1.112 PATCH_ORDER="${z}${STRICT_COUNT}"
656 johnm 1.108
657 r3pek 1.112 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/
658     $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${PATCH_ORDER}/${x}.patch${PATCH_LEVEL})
659 johnm 1.29 else
660 johnm 1.41 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL})
661 johnm 1.29 fi
662 johnm 1.25 fi
663 johnm 1.16 fi
664 johnm 1.1 done
665    
666     #populate KPATCH_DIRS so we know where to look to remove the excludes
667     x=${KPATCH_DIR}
668     KPATCH_DIR=""
669 hollow 1.95 for i in $(find ${x} -type d | sort -n); do
670 johnm 1.1 KPATCH_DIR="${KPATCH_DIR} ${i}"
671     done
672    
673     #so now lets get rid of the patchno's we want to exclude
674 johnm 1.19 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}"
675 hollow 1.95 for i in ${UNIPATCH_DROP}; do
676 johnm 1.55 ebegin "Excluding Patch #${i}"
677 hollow 1.95 for x in ${KPATCH_DIR}; do rm -f ${x}/${i}* 2>/dev/null; done
678 johnm 1.55 eend $?
679 johnm 1.1 done
680    
681     # and now, finally, we patch it :)
682 hollow 1.95 for x in ${KPATCH_DIR}; do
683     for i in $(find ${x} -maxdepth 1 -iname "*.patch*" -or -iname "*.diff*" | sort -n); do
684 johnm 1.25 STDERR_T="${T}/${i/*\//}"
685 johnm 1.41 STDERR_T="${STDERR_T/.patch*/.err}"
686    
687 lu_zero 1.62 [ -z ${i/*.patch*/} ] && PATCH_DEPTH=${i/*.patch/}
688 r3pek 1.112 #[ -z ${i/*.diff*/} ] && PATCH_DEPTH=${i/*.diff/}
689 johnm 1.41
690 hollow 1.96 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi
691 johnm 1.41
692     ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)"
693 hollow 1.95 while [ ${PATCH_DEPTH} -lt 5 ]; do
694 plasmaroo 1.33 echo "Attempting Dry-run:" >> ${STDERR_T}
695 johnm 1.25 echo "cmd: patch -p${PATCH_DEPTH} --dry-run -f < ${i}" >> ${STDERR_T}
696 johnm 1.54 echo "=======================================================" >> ${STDERR_T}
697 hollow 1.95 if [ $(patch -p${PATCH_DEPTH} --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then
698 johnm 1.25 echo "Attempting patch:" > ${STDERR_T}
699     echo "cmd: patch -p${PATCH_DEPTH} -f < ${i}" >> ${STDERR_T}
700 johnm 1.54 echo "=======================================================" >> ${STDERR_T}
701 hollow 1.95 if [ $(patch -p${PATCH_DEPTH} -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then
702 johnm 1.1 eend 0
703 johnm 1.25 rm ${STDERR_T}
704 johnm 1.1 break
705     else
706     eend 1
707     eerror "Failed to apply patch ${i/*\//}"
708 johnm 1.54 eerror "Please attach ${STDERR_T} to any bug you may post."
709 johnm 1.1 die "Failed to apply ${i/*\//}"
710     fi
711     else
712     PATCH_DEPTH=$((${PATCH_DEPTH} + 1))
713     fi
714     done
715 hollow 1.95 if [ ${PATCH_DEPTH} -eq 5 ]; then
716 johnm 1.1 eend 1
717 johnm 1.54 eerror "Please attach ${STDERR_T} to any bug you may post."
718 johnm 1.1 die "Unable to dry-run patch."
719     fi
720     done
721     done
722 johnm 1.43
723     # clean up KPATCH_DIR's - fixes bug #53610
724 hollow 1.95 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done
725 johnm 1.78
726     LC_ALL="${myLC_ALL}"
727 johnm 1.122 LANG="${myLANG}"
728 johnm 1.1 }
729    
730 johnm 1.74 # getfilevar accepts 2 vars as follows:
731     # getfilevar <VARIABLE> <CONFIGFILE>
732     # pulled from linux-info
733    
734     getfilevar() {
735 johnm 1.93 local workingdir basefname basedname xarch=$(tc-arch-kernel)
736 johnm 1.74
737 johnm 1.93 if [[ -z ${1} ]] && [[ ! -f ${2} ]]; then
738 johnm 1.74 echo -e "\n"
739     eerror "getfilevar requires 2 variables, with the second a valid file."
740     eerror " getfilevar <VARIABLE> <CONFIGFILE>"
741     else
742     workingdir=${PWD}
743     basefname=$(basename ${2})
744     basedname=$(dirname ${2})
745     unset ARCH
746    
747     cd ${basedname}
748     echo -e "include ${basefname}\ne:\n\t@echo \$(${1})" | \
749 johnm 1.119 make ${BUILD_FIXES} -s -f - e 2>/dev/null
750 johnm 1.74 cd ${workingdir}
751    
752     ARCH=${xarch}
753     fi
754     }
755    
756 johnm 1.28 detect_arch() {
757     # This function sets ARCH_URI and ARCH_PATCH
758     # with the neccessary info for the arch sepecific compatibility
759     # patchsets.
760 lu_zero 1.62
761 johnm 1.93 local ALL_ARCH LOOP_ARCH COMPAT_URI i
762 plasmaroo 1.33
763     # COMPAT_URI is the contents of ${ARCH}_URI
764     # ARCH_URI is the URI for all the ${ARCH}_URI patches
765     # ARCH_PATCH is ARCH_URI broken into files for UNIPATCH
766    
767     ARCH_URI=""
768     ARCH_PATCH=""
769 johnm 1.85 ALL_ARCH="X86 PPC PPC64 SPARC MIPS ALPHA ARM HPPA AMD64 IA64 X86OBSD S390 SH"
770 johnm 1.31
771 hollow 1.95 for LOOP_ARCH in ${ALL_ARCH}; do
772 johnm 1.31 COMPAT_URI="${LOOP_ARCH}_URI"
773     COMPAT_URI="${!COMPAT_URI}"
774 lu_zero 1.62
775 vapier 1.86 [[ -n ${COMPAT_URI} ]] && \
776 johnm 1.55 ARCH_URI="${ARCH_URI} $(echo ${LOOP_ARCH} | tr '[:upper:]' '[:lower:]')? ( ${COMPAT_URI} )"
777 lu_zero 1.62
778 johnm 1.93 if [[ ${LOOP_ARCH} == "$(echo $(tc-arch-kernel) | tr '[:lower:]' '[:upper:]')" ]]; then
779     for i in ${COMPAT_URI}; do
780 plasmaroo 1.33 ARCH_PATCH="${ARCH_PATCH} ${DISTDIR}/${i/*\//}"
781     done
782     fi
783 johnm 1.31 done
784 johnm 1.28 }
785    
786 johnm 1.72 # sparc nastiness
787     #==============================================================
788     # This script generates the files in /usr/include/asm for sparc systems
789     # during installation of sys-kernel/linux-headers.
790     # Will no longer be needed when full 64 bit support is used on sparc64
791     # systems.
792     #
793     # Shamefully ripped from Debian
794     # ----------------------------------------------------------------------
795    
796     # Idea borrowed from RedHat's kernel package
797    
798 eradicator 1.76 # This is gonna get replaced by something in multilib.eclass soon...
799     # --eradicator
800 johnm 1.72 generate_sparc_asm() {
801     local name
802    
803     cd $1 || die
804     mkdir asm
805    
806     for h in `( ls asm-sparc; ls asm-sparc64 ) | grep '\.h$' | sort -u`; do
807     name="$(echo $h | tr a-z. A-Z_)"
808     # common header
809     echo "/* All asm/ files are generated and point to the corresponding
810     * file in asm-sparc or asm-sparc64.
811     */
812    
813     #ifndef __SPARCSTUB__${name}__
814     #define __SPARCSTUB__${name}__
815     " > asm/${h}
816    
817     # common for sparc and sparc64
818     if [ -f asm-sparc/$h -a -f asm-sparc64/$h ]; then
819     echo "#ifdef __arch64__
820     #include <asm-sparc64/$h>
821     #else
822     #include <asm-sparc/$h>
823     #endif
824     " >> asm/${h}
825    
826     # sparc only
827     elif [ -f asm-sparc/$h ]; then
828     echo "#ifndef __arch64__
829     #include <asm-sparc/$h>
830     #endif
831     " >> asm/${h}
832    
833     # sparc64 only
834     else
835     echo "#ifdef __arch64__
836     #include <asm-sparc64/$h>
837     #endif
838     " >> asm/${h}
839     fi
840    
841     # common footer
842     echo "#endif /* !__SPARCSTUB__${name}__ */" >> asm/${h}
843     done
844     return 0
845     }
846    
847 johnm 1.89 headers___fix() {
848 plasmaroo 1.88 # Voodoo to partially fix broken upstream headers.
849     # Issues with this function should go to plasmaroo.
850 johnm 1.72 sed -i \
851     -e "s/\([ "$'\t'"]\)u8\([ "$'\t'"]\)/\1__u8\2/g;" \
852     -e "s/\([ "$'\t'"]\)u16\([ "$'\t'"]\)/\1__u16\2/g;" \
853     -e "s/\([ "$'\t'"]\)u32\([ "$'\t'"]\)/\1__u32\2/g;" \
854     -e "s/\([ "$'\t'"]\)u64\([ "$'\t'"]\)/\1__u64\2/g;" \
855 plasmaroo 1.88 -e "s/\([ "$'\t'"]\)s64\([ "$'\t'"]\)/\1__s64\2/g;" \
856     -e 's/ \(u\|s\)\(8\|16\|32\|64\)$/ __\1\2/g' \
857     -e 's/\([(, ]\)\(u\|s\)64\([, )]\)/\1__\264\3/g' \
858 johnm 1.72 "$@"
859     }
860 johnm 1.28
861 johnm 1.1 # common functions
862     #==============================================================
863 plasmaroo 1.33 kernel-2_src_unpack() {
864 johnm 1.1 universal_unpack
865 lu_zero 1.62
866 johnm 1.93 [[ -n ${UNIPATCH_LIST} ]] || [[ -n ${UNIPATCH_LIST_DEFAULT} ]] && \
867 johnm 1.56 unipatch "${UNIPATCH_LIST_DEFAULT} ${UNIPATCH_LIST}"
868 lu_zero 1.62
869 johnm 1.107 [[ -z ${K_NOSETEXTRAVERSION} ]] && unpack_set_extraversion
870     unpack_fix_docbook
871 dsd 1.104 unpack_fix_install_path
872    
873 johnm 1.56 kernel_is 2 4 && unpack_2_4
874 johnm 1.1 }
875    
876 plasmaroo 1.33 kernel-2_src_compile() {
877 johnm 1.72 cd ${S}
878 johnm 1.93 [[ ${ETYPE} == headers ]] && compile_headers
879     [[ ${ETYPE} == sources ]] && \
880 johnm 1.55 use doc && ! use arm && ! use s390 && compile_manpages
881 johnm 1.1 }
882    
883 plasmaroo 1.33 kernel-2_pkg_preinst() {
884 johnm 1.93 [[ ${ETYPE} == headers ]] && preinst_headers
885 johnm 1.1 }
886    
887 plasmaroo 1.33 kernel-2_src_install() {
888 johnm 1.1 install_universal
889 johnm 1.93 [[ ${ETYPE} == headers ]] && install_headers
890     [[ ${ETYPE} == sources ]] && install_sources
891 johnm 1.1 }
892    
893 plasmaroo 1.33 kernel-2_pkg_postinst() {
894 johnm 1.93 [[ ${ETYPE} == headers ]] && postinst_headers
895     [[ ${ETYPE} == sources ]] && postinst_sources
896 johnm 1.1 }
897 johnm 1.12
898 plasmaroo 1.33 kernel-2_pkg_setup() {
899 johnm 1.93 [[ ${ETYPE} == headers ]] && setup_headers
900     [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..."
901 johnm 1.12 }

  ViewVC Help
Powered by ViewVC 1.1.20