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

Contents of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.125 - (hide annotations) (download)
Sun May 15 20:30:04 2005 UTC (13 years, 4 months ago) by johnm
Branch: MAIN
Changes since 1.124: +5 -1 lines
Ignore KBUILD_OUTPUT for linux-headers. Fixes bug #92620

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.125 # $Header: /var/cvsroot/gentoo-x86/eclass/kernel-2.eclass,v 1.124 2005/05/09 17:20:11 plasmaroo 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 johnm 1.125 # Since KBUILD_OUTPUT shouldnt be used when compiling headers, lets unset it
325     # if it exists.
326     [[ -n ${KBUILD_OUTPUT} ]] && unset KBUILD_OUTPUT
327    
328 vapier 1.75 # if we couldnt obtain HOSTCFLAGS from the Makefile,
329     # then set it to something sane
330 johnm 1.74 local HOSTCFLAGS=$(getfilevar HOSTCFLAGS ${S}/Makefile)
331 vapier 1.75 HOSTCFLAGS=${HOSTCFLAGS:--Wall -Wstrict-prototypes -O2 -fomit-frame-pointer}
332    
333     # Kernel ARCH != portage ARCH
334 vapier 1.86 local KARCH=$(tc-arch-kernel)
335 vapier 1.75
336     # When cross-compiling, we need to set the ARCH/CROSS_COMPILE
337     # variables properly or bad things happen !
338     local xmakeopts="ARCH=${KARCH}"
339 johnm 1.93 if [[ ${CTARGET} != ${CHOST} ]]; then
340 vapier 1.75 xmakeopts="${xmakeopts} CROSS_COMPILE=${CTARGET}-"
341 hollow 1.95 elif type -p ${CHOST}-ar; then
342 vapier 1.75 xmakeopts="${xmakeopts} CROSS_COMPILE=${CHOST}-"
343     fi
344    
345 johnm 1.93 if kernel_is 2 4; then
346 vapier 1.75 yes "" | make oldconfig ${xmakeopts}
347 johnm 1.72 echo ">>> make oldconfig complete"
348 vapier 1.75 use sparc && make dep ${xmakeopts}
349 hollow 1.95 elif kernel_is 2 6; then
350 johnm 1.72 # autoconf.h isnt generated unless it already exists. plus, we have
351     # no guarantee that any headers are installed on the system...
352 vapier 1.75 [[ -f ${ROOT}/usr/include/linux/autoconf.h ]] \
353 johnm 1.72 || touch include/linux/autoconf.h
354    
355 plasmaroo 1.105 # if K_DEFCONFIG isn't set, force to "defconfig"
356     # needed by mips
357     if [[ -z ${K_DEFCONFIG} ]]; then
358     K_DEFCONFIG="defconfig"
359     fi
360    
361 johnm 1.72 # if there arent any installed headers, then there also isnt an asm
362     # symlink in /usr/include/, and make defconfig will fail, so we have
363     # to force an include path with $S.
364 vapier 1.75 HOSTCFLAGS="${HOSTCFLAGS} -I${S}/include/"
365     ln -sf asm-${KARCH} "${S}"/include/asm
366 plasmaroo 1.105 make ${K_DEFCONFIG} HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "defconfig failed"
367 vapier 1.75 make prepare HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed"
368 eradicator 1.100 make prepare-all HOSTCFLAGS="${HOSTCFLAGS}" ${xmakeopts} || die "prepare failed"
369 johnm 1.72 fi
370 johnm 1.1 }
371    
372 spock 1.37 compile_manpages() {
373 johnm 1.54 einfo "Making manpages ..."
374 vapier 1.75 env -u ARCH make mandocs
375 spock 1.37 }
376    
377 johnm 1.1 # install functions
378     #==============================================================
379     install_universal() {
380     #fix silly permissions in tarball
381     cd ${WORKDIR}
382     chown -R root:root *
383     chmod -R a+r-w+X,u+w *
384 johnm 1.93 cd ${OLDPWD}
385 johnm 1.1 }
386    
387     install_headers() {
388 johnm 1.72 local ddir=$(kernel_header_destdir)
389 vapier 1.60
390 johnm 1.1 cd ${S}
391 vapier 1.60 dodir ${ddir}/linux
392     cp -ax ${S}/include/linux/* ${D}/${ddir}/linux
393     rm -rf ${D}/${ddir}/linux/modules
394 lu_zero 1.62
395 eradicator 1.99 # Handle multilib headers
396     case $(tc-arch-kernel) in
397     sparc64)
398     dodir ${ddir}/asm-sparc
399     cp -ax ${S}/include/asm-sparc/* ${D}/${ddir}/asm-sparc
400    
401     dodir ${ddir}/asm-sparc64
402     cp -ax ${S}/include/asm-sparc64/* ${D}/${ddir}/asm-sparc64
403    
404 eradicator 1.102 create_ml_includes ${ddir}/asm !__arch64__:${ddir}/asm-sparc __arch64__:${ddir}/asm-sparc64
405 eradicator 1.99 ;;
406     x86_64)
407     dodir ${ddir}/asm-i386
408     cp -ax ${S}/include/asm-i386/* ${D}/${ddir}/asm-i386
409    
410     dodir ${ddir}/asm-x86_64
411     cp -ax ${S}/include/asm-x86_64/* ${D}/${ddir}/asm-x86_64
412    
413     create_ml_includes ${ddir}/asm __i386__:${ddir}/asm-i386 __x86_64__:${ddir}/asm-x86_64
414     ;;
415 vapier 1.114 arm)
416     dodir ${ddir}/asm
417     cp -ax ${S}/include/asm/* ${D}/${ddir}/asm
418     [[ ! -e ${D}/${ddir}/asm/arch ]] && ln -s arch-ebsa285 ${D}/${ddir}/asm/arch
419     [[ ! -e ${D}/${ddir}/asm/proc ]] && ln -s proc-armv ${D}/${ddir}/asm/proc
420     ;;
421 eradicator 1.99 *)
422     dodir ${ddir}/asm
423     cp -ax ${S}/include/asm/* ${D}/${ddir}/asm
424     ;;
425     esac
426 eradicator 1.76
427 johnm 1.93 if kernel_is 2 6; then
428 vapier 1.60 dodir ${ddir}/asm-generic
429     cp -ax ${S}/include/asm-generic/* ${D}/${ddir}/asm-generic
430 johnm 1.12 fi
431 eradicator 1.99
432 vapier 1.103 # clean up
433     find "${D}" -name '*.orig' -exec rm -f {} \;
434    
435 johnm 1.93 cd ${OLDPWD}
436 johnm 1.1 }
437    
438     install_sources() {
439 johnm 1.93 local doc docs file
440 johnm 1.1
441 johnm 1.12 cd ${S}
442     dodir /usr/src
443 johnm 1.54 echo ">>> Copying sources ..."
444 johnm 1.93
445 johnm 1.27 file="$(find ${WORKDIR} -iname "docs" -type d)"
446 johnm 1.93 if [[ -n ${file} ]]; then
447     for file in $(find ${file} -type f); do
448     echo "${file//*docs\/}" >> ${S}/patches.txt
449 johnm 1.54 echo "===================================================" >> ${S}/patches.txt
450 johnm 1.27 cat ${file} >> ${S}/patches.txt
451 johnm 1.54 echo "===================================================" >> ${S}/patches.txt
452 johnm 1.12 echo "" >> ${S}/patches.txt
453 johnm 1.1 done
454 johnm 1.12 fi
455 johnm 1.1
456 johnm 1.93 if [[ ! -f ${S}/patches.txt ]]; then
457 johnm 1.12 # patches.txt is empty so lets use our ChangeLog
458 johnm 1.93 [[ -f ${FILESDIR}/../ChangeLog ]] && \
459     echo "Please check the ebuild ChangeLog for more details." \
460     > ${S}/patches.txt
461 johnm 1.12 fi
462    
463 hollow 1.95 for doc in ${UNIPATCH_DOCS}; do [[ -f ${doc} ]] && docs="${docs} ${doc}"; done
464     if [[ -f ${S}/patches.txt ]]; then docs="${docs} ${S}/patches.txt"; fi
465     use doc && ! use arm && ! use s390 && install_manpages
466     dodoc ${docs}
467 johnm 1.12
468     mv ${WORKDIR}/linux* ${D}/usr/src
469 johnm 1.1 }
470    
471 spock 1.37 install_manpages() {
472 dsd 1.123 kernel_is lt 2 5 && return
473 johnm 1.85 sed -ie "s#/usr/local/man#${D}/usr/man#g" scripts/makeman
474 spock 1.39 ebegin "Installing manpages"
475 johnm 1.78 env -u ARCH make installmandocs
476 spock 1.37 eend $?
477 johnm 1.85 sed -ie "s#${D}/usr/man#/usr/local/man#g" scripts/makeman
478 spock 1.37 }
479    
480 johnm 1.1 # pkg_preinst functions
481     #==============================================================
482     preinst_headers() {
483 vapier 1.60 local ddir=$(kernel_header_destdir)
484 johnm 1.72 [[ -L ${ddir}/linux ]] && rm ${ddir}/linux
485     [[ -L ${ddir}/asm ]] && rm ${ddir}/asm
486 johnm 1.1 }
487    
488     # pkg_postinst functions
489     #==============================================================
490     postinst_sources() {
491 vapier 1.80 local MAKELINK=0
492 johnm 1.78
493 johnm 1.84 # if we have USE=symlink, then force K_SYMLINK=1
494     use symlink && K_SYMLINK=1
495    
496 johnm 1.78 # if we are to forcably symlink, delete it if it already exists first.
497 johnm 1.93 if [[ -n ${K_SYMLINK} ]]; then
498 vapier 1.80 [[ -h ${ROOT}usr/src/linux ]] && rm ${ROOT}usr/src/linux
499 johnm 1.78 MAKELINK=1
500     fi
501    
502     # if the link doesnt exist, lets create it
503 vapier 1.80 [[ ! -h ${ROOT}usr/src/linux ]] && MAKELINK=1
504 johnm 1.78
505 johnm 1.93 if [[ ${MAKELINK} == 1 ]]; then
506 johnm 1.89 cd ${ROOT}usr/src
507     ln -sf linux-${KV_FULL} linux
508     cd ${OLDPWD}
509     fi
510 johnm 1.1
511     # Don't forget to make directory for sysfs
512 johnm 1.111 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir ${ROOT}sys
513 johnm 1.1
514     echo
515     einfo "After installing a new kernel of any version, it is important"
516     einfo "that you have the appropriate /etc/modules.autoload.d/kernel-X.Y"
517     einfo "created (X.Y is the first 2 parts of your new kernel version)"
518     echo
519     einfo "For example, this kernel will require:"
520     einfo "/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}"
521     echo
522 r3pek 1.113 einfo "If you are upgrading from a previous kernel, you may be interested"
523     einfo "in the following documents:"
524     einfo " - General upgrade guide: http://www.gentoo.org/doc/en/kernel-upgrade.xml"
525     kernel_is_2_6 && einfo " - 2.4 to 2.6 migration guide: http://www.gentoo.org/doc/en/migration-to-2.6.xml"
526     echo
527 lu_zero 1.62
528 johnm 1.2 # if K_EXTRAEINFO is set then lets display it now
529 hollow 1.95 if [[ -n ${K_EXTRAEINFO} ]]; then
530 johnm 1.2 echo ${K_EXTRAEINFO} | fmt |
531 hollow 1.95 while read -s ELINE; do einfo "${ELINE}"; done
532 plasmaroo 1.33 fi
533    
534 iggy 1.7 # if K_EXTRAEWARN is set then lets display it now
535 hollow 1.95 if [[ -n ${K_EXTRAEWARN} ]]; then
536 iggy 1.7 echo ${K_EXTRAEWARN} | fmt |
537 hollow 1.95 while read -s ELINE; do ewarn "${ELINE}"; done
538 iggy 1.7 fi
539 johnm 1.1 }
540    
541 johnm 1.12 postinst_headers() {
542 johnm 1.72 einfo "Kernel headers are usually only used when recompiling glibc, as such, following the installation"
543     einfo "of newer headers, it is advised that you re-merge glibc as follows:"
544     einfo "emerge glibc"
545     einfo "Failure to do so will cause glibc to not make use of newer features present in the updated kernel"
546     einfo "headers."
547 johnm 1.12 }
548    
549     # pkg_setup functions
550     #==============================================================
551     setup_headers() {
552 vapier 1.86 [[ -z ${H_SUPPORTEDARCH} ]] && H_SUPPORTEDARCH=${PN/-*/}
553 hollow 1.95 for i in ${H_SUPPORTEDARCH}; do
554 vapier 1.87 [[ $(tc-arch) == "${i}" ]] && H_ACCEPT_ARCH="yes"
555 johnm 1.12 done
556 lu_zero 1.62
557 johnm 1.93 if [[ ${H_ACCEPT_ARCH} != "yes" ]]; then
558 johnm 1.12 echo
559 vapier 1.106 eerror "This version of ${PN} does not support $(tc-arch)."
560 johnm 1.12 eerror "Please merge the appropriate sources, in most cases"
561 vapier 1.106 eerror "(but not all) this will be called $(tc-arch)-headers."
562     die "Package unsupported for $(tc-arch)"
563 johnm 1.12 fi
564     }
565    
566 johnm 1.1 # unipatch
567     #==============================================================
568     unipatch() {
569 johnm 1.108 local i x y z extention PIPE_CMD UNIPATCH_DROP KPATCH_DIR PATCH_DEPTH ELINE
570 johnm 1.122 local STRICT_COUNT PATCH_LEVEL myLC_ALL myLANG
571 johnm 1.78
572     # set to a standard locale to ensure sorts are ordered properly.
573     myLC_ALL="${LC_ALL}"
574 johnm 1.122 myLANG="${LANG}"
575 johnm 1.78 LC_ALL="C"
576 johnm 1.122 LANG=""
577 johnm 1.1
578     [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/"
579     [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR}
580    
581 johnm 1.41 # We're gonna need it when doing patches with a predefined patchlevel
582     shopt -s extglob
583    
584 johnm 1.54 # This function will unpack all passed tarballs, add any passed patches, and remove any passed patchnumbers
585 johnm 1.1 # usage can be either via an env var or by params
586 johnm 1.54 # although due to the nature we pass this within this eclass
587     # it shall be by param only.
588     # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}"
589     UNIPATCH_LIST="${@}"
590 johnm 1.1
591     #unpack any passed tarballs
592 hollow 1.95 for i in ${UNIPATCH_LIST}; do
593     if [ -n "$(echo ${i} | grep -e "\.tar" -e "\.tbz" -e "\.tgz")" ]; then
594 johnm 1.1 extention=${i/*./}
595 johnm 1.41 extention=${extention/:*/}
596 johnm 1.1 case ${extention} in
597     tbz2) PIPE_CMD="tar -xvjf";;
598     bz2) PIPE_CMD="tar -xvjf";;
599     tgz) PIPE_CMD="tar -xvzf";;
600     gz) PIPE_CMD="tar -xvzf";;
601     *) eerror "Unrecognized tarball compression"
602     die "Unrecognized tarball compression";;
603     esac
604    
605 hollow 1.95 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
606 johnm 1.110 unset z
607 johnm 1.121 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
608 johnm 1.108 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
609     do z="${z}0";
610     done
611 r3pek 1.112 PATCH_ORDER="${z}${STRICT_COUNT}"
612 johnm 1.108
613 r3pek 1.112 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/
614     ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR}/${PATCH_ORDER}/ 1>/dev/null
615 johnm 1.16 else
616 johnm 1.41 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR} 1>/dev/null
617 johnm 1.16 fi
618    
619 hollow 1.95 if [ $? == 0 ]; then
620 johnm 1.1 einfo "${i/*\//} unpacked"
621 johnm 1.54 [ -n "$(echo ${i} | grep ':')" ] && echo ">>> Strict patch levels not currently supported for tarballed patchsets"
622 johnm 1.1 else
623 johnm 1.41 eerror "Failed to unpack ${i/:*/}"
624 johnm 1.1 die "unable to unpack patch tarball"
625     fi
626 johnm 1.16 else
627 johnm 1.25 extention=${i/*./}
628 johnm 1.41 extention=${extention/:*/}
629 johnm 1.25 PIPE_CMD=""
630     case ${extention} in
631     bz2) PIPE_CMD="bzip2 -dc";;
632     patch) PIPE_CMD="cat";;
633     diff) PIPE_CMD="cat";;
634     gz|Z|z) PIPE_CMD="gzip -dc";;
635     ZIP|zip) PIPE_CMD="unzip -p";;
636 johnm 1.41 *) UNIPATCH_DROP="${UNIPATCH_DROP} ${i/:*/}";;
637 johnm 1.25 esac
638 johnm 1.41
639     PATCH_LEVEL=${i/*([^:])?(:)}
640     i=${i/:*/}
641 johnm 1.25 x=${i/*\//}
642     x=${x/\.${extention}/}
643 lu_zero 1.62
644 hollow 1.95 if [ -n "${PIPE_CMD}" ]; then
645     if [ ! -r "${i}" ]; then
646 johnm 1.29 echo
647     eerror "FATAL: unable to locate:"
648     eerror "${i}"
649 johnm 1.54 eerror "for read-only. The file either has incorrect permissions"
650     eerror "or does not exist."
651 johnm 1.29 die Unable to locate ${i}
652     fi
653 lu_zero 1.62
654 hollow 1.95 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
655 johnm 1.110 unset z
656 johnm 1.121 STRICT_COUNT=$((10#${STRICT_COUNT} + 1))
657 johnm 1.108 for((y=0; y<$((6 - ${#STRICT_COUNT})); y++));
658     do z="${z}0";
659     done
660 r3pek 1.112 PATCH_ORDER="${z}${STRICT_COUNT}"
661 johnm 1.108
662 r3pek 1.112 mkdir -p ${KPATCH_DIR}/${PATCH_ORDER}/
663     $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${PATCH_ORDER}/${x}.patch${PATCH_LEVEL})
664 johnm 1.29 else
665 johnm 1.41 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL})
666 johnm 1.29 fi
667 johnm 1.25 fi
668 johnm 1.16 fi
669 johnm 1.1 done
670    
671     #populate KPATCH_DIRS so we know where to look to remove the excludes
672     x=${KPATCH_DIR}
673     KPATCH_DIR=""
674 hollow 1.95 for i in $(find ${x} -type d | sort -n); do
675 johnm 1.1 KPATCH_DIR="${KPATCH_DIR} ${i}"
676     done
677    
678     #so now lets get rid of the patchno's we want to exclude
679 johnm 1.19 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}"
680 hollow 1.95 for i in ${UNIPATCH_DROP}; do
681 johnm 1.55 ebegin "Excluding Patch #${i}"
682 hollow 1.95 for x in ${KPATCH_DIR}; do rm -f ${x}/${i}* 2>/dev/null; done
683 johnm 1.55 eend $?
684 johnm 1.1 done
685    
686     # and now, finally, we patch it :)
687 hollow 1.95 for x in ${KPATCH_DIR}; do
688     for i in $(find ${x} -maxdepth 1 -iname "*.patch*" -or -iname "*.diff*" | sort -n); do
689 johnm 1.25 STDERR_T="${T}/${i/*\//}"
690 johnm 1.41 STDERR_T="${STDERR_T/.patch*/.err}"
691    
692 lu_zero 1.62 [ -z ${i/*.patch*/} ] && PATCH_DEPTH=${i/*.patch/}
693 r3pek 1.112 #[ -z ${i/*.diff*/} ] && PATCH_DEPTH=${i/*.diff/}
694 johnm 1.41
695 hollow 1.96 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi
696 johnm 1.41
697     ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)"
698 hollow 1.95 while [ ${PATCH_DEPTH} -lt 5 ]; do
699 plasmaroo 1.33 echo "Attempting Dry-run:" >> ${STDERR_T}
700 johnm 1.25 echo "cmd: patch -p${PATCH_DEPTH} --dry-run -f < ${i}" >> ${STDERR_T}
701 johnm 1.54 echo "=======================================================" >> ${STDERR_T}
702 hollow 1.95 if [ $(patch -p${PATCH_DEPTH} --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then
703 johnm 1.25 echo "Attempting patch:" > ${STDERR_T}
704     echo "cmd: patch -p${PATCH_DEPTH} -f < ${i}" >> ${STDERR_T}
705 johnm 1.54 echo "=======================================================" >> ${STDERR_T}
706 hollow 1.95 if [ $(patch -p${PATCH_DEPTH} -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then
707 johnm 1.1 eend 0
708 johnm 1.25 rm ${STDERR_T}
709 johnm 1.1 break
710     else
711     eend 1
712     eerror "Failed to apply patch ${i/*\//}"
713 johnm 1.54 eerror "Please attach ${STDERR_T} to any bug you may post."
714 johnm 1.1 die "Failed to apply ${i/*\//}"
715     fi
716     else
717     PATCH_DEPTH=$((${PATCH_DEPTH} + 1))
718     fi
719     done
720 hollow 1.95 if [ ${PATCH_DEPTH} -eq 5 ]; then
721 johnm 1.1 eend 1
722 johnm 1.54 eerror "Please attach ${STDERR_T} to any bug you may post."
723 johnm 1.1 die "Unable to dry-run patch."
724     fi
725     done
726     done
727 johnm 1.43
728     # clean up KPATCH_DIR's - fixes bug #53610
729 hollow 1.95 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done
730 johnm 1.78
731     LC_ALL="${myLC_ALL}"
732 johnm 1.122 LANG="${myLANG}"
733 johnm 1.1 }
734    
735 johnm 1.74 # getfilevar accepts 2 vars as follows:
736     # getfilevar <VARIABLE> <CONFIGFILE>
737     # pulled from linux-info
738    
739     getfilevar() {
740 johnm 1.93 local workingdir basefname basedname xarch=$(tc-arch-kernel)
741 johnm 1.74
742 johnm 1.93 if [[ -z ${1} ]] && [[ ! -f ${2} ]]; then
743 johnm 1.74 echo -e "\n"
744     eerror "getfilevar requires 2 variables, with the second a valid file."
745     eerror " getfilevar <VARIABLE> <CONFIGFILE>"
746     else
747     workingdir=${PWD}
748     basefname=$(basename ${2})
749     basedname=$(dirname ${2})
750     unset ARCH
751    
752     cd ${basedname}
753     echo -e "include ${basefname}\ne:\n\t@echo \$(${1})" | \
754 johnm 1.119 make ${BUILD_FIXES} -s -f - e 2>/dev/null
755 johnm 1.74 cd ${workingdir}
756    
757     ARCH=${xarch}
758     fi
759     }
760    
761 johnm 1.28 detect_arch() {
762     # This function sets ARCH_URI and ARCH_PATCH
763     # with the neccessary info for the arch sepecific compatibility
764     # patchsets.
765 lu_zero 1.62
766 johnm 1.93 local ALL_ARCH LOOP_ARCH COMPAT_URI i
767 plasmaroo 1.33
768     # COMPAT_URI is the contents of ${ARCH}_URI
769     # ARCH_URI is the URI for all the ${ARCH}_URI patches
770     # ARCH_PATCH is ARCH_URI broken into files for UNIPATCH
771    
772     ARCH_URI=""
773     ARCH_PATCH=""
774 johnm 1.85 ALL_ARCH="X86 PPC PPC64 SPARC MIPS ALPHA ARM HPPA AMD64 IA64 X86OBSD S390 SH"
775 johnm 1.31
776 hollow 1.95 for LOOP_ARCH in ${ALL_ARCH}; do
777 johnm 1.31 COMPAT_URI="${LOOP_ARCH}_URI"
778     COMPAT_URI="${!COMPAT_URI}"
779 lu_zero 1.62
780 vapier 1.86 [[ -n ${COMPAT_URI} ]] && \
781 johnm 1.55 ARCH_URI="${ARCH_URI} $(echo ${LOOP_ARCH} | tr '[:upper:]' '[:lower:]')? ( ${COMPAT_URI} )"
782 lu_zero 1.62
783 johnm 1.93 if [[ ${LOOP_ARCH} == "$(echo $(tc-arch-kernel) | tr '[:lower:]' '[:upper:]')" ]]; then
784     for i in ${COMPAT_URI}; do
785 plasmaroo 1.33 ARCH_PATCH="${ARCH_PATCH} ${DISTDIR}/${i/*\//}"
786     done
787     fi
788 johnm 1.31 done
789 johnm 1.28 }
790    
791 johnm 1.72 # sparc nastiness
792     #==============================================================
793     # This script generates the files in /usr/include/asm for sparc systems
794     # during installation of sys-kernel/linux-headers.
795     # Will no longer be needed when full 64 bit support is used on sparc64
796     # systems.
797     #
798     # Shamefully ripped from Debian
799     # ----------------------------------------------------------------------
800    
801     # Idea borrowed from RedHat's kernel package
802    
803 eradicator 1.76 # This is gonna get replaced by something in multilib.eclass soon...
804     # --eradicator
805 johnm 1.72 generate_sparc_asm() {
806     local name
807    
808     cd $1 || die
809     mkdir asm
810    
811     for h in `( ls asm-sparc; ls asm-sparc64 ) | grep '\.h$' | sort -u`; do
812     name="$(echo $h | tr a-z. A-Z_)"
813     # common header
814     echo "/* All asm/ files are generated and point to the corresponding
815     * file in asm-sparc or asm-sparc64.
816     */
817    
818     #ifndef __SPARCSTUB__${name}__
819     #define __SPARCSTUB__${name}__
820     " > asm/${h}
821    
822     # common for sparc and sparc64
823     if [ -f asm-sparc/$h -a -f asm-sparc64/$h ]; then
824     echo "#ifdef __arch64__
825     #include <asm-sparc64/$h>
826     #else
827     #include <asm-sparc/$h>
828     #endif
829     " >> asm/${h}
830    
831     # sparc only
832     elif [ -f asm-sparc/$h ]; then
833     echo "#ifndef __arch64__
834     #include <asm-sparc/$h>
835     #endif
836     " >> asm/${h}
837    
838     # sparc64 only
839     else
840     echo "#ifdef __arch64__
841     #include <asm-sparc64/$h>
842     #endif
843     " >> asm/${h}
844     fi
845    
846     # common footer
847     echo "#endif /* !__SPARCSTUB__${name}__ */" >> asm/${h}
848     done
849     return 0
850     }
851    
852 johnm 1.89 headers___fix() {
853 plasmaroo 1.88 # Voodoo to partially fix broken upstream headers.
854     # Issues with this function should go to plasmaroo.
855 johnm 1.72 sed -i \
856 plasmaroo 1.124 -e "s/\([ "$'\t'"]\)\(u\|s\)\(8\|16\|32\|64\)\([ "$'\t'"]\)/\1__\2\3\4/g;" \
857 plasmaroo 1.88 -e 's/ \(u\|s\)\(8\|16\|32\|64\)$/ __\1\2/g' \
858     -e 's/\([(, ]\)\(u\|s\)64\([, )]\)/\1__\264\3/g' \
859 plasmaroo 1.124 -e "s/^\(u\|s\)\(8\|16\|32\|64\)\([ "$'\t'"]\)/__\1\2\3/g;" \
860 johnm 1.72 "$@"
861     }
862 johnm 1.28
863 johnm 1.1 # common functions
864     #==============================================================
865 plasmaroo 1.33 kernel-2_src_unpack() {
866 johnm 1.1 universal_unpack
867 lu_zero 1.62
868 johnm 1.93 [[ -n ${UNIPATCH_LIST} ]] || [[ -n ${UNIPATCH_LIST_DEFAULT} ]] && \
869 johnm 1.56 unipatch "${UNIPATCH_LIST_DEFAULT} ${UNIPATCH_LIST}"
870 lu_zero 1.62
871 johnm 1.107 [[ -z ${K_NOSETEXTRAVERSION} ]] && unpack_set_extraversion
872     unpack_fix_docbook
873 dsd 1.104 unpack_fix_install_path
874    
875 johnm 1.56 kernel_is 2 4 && unpack_2_4
876 johnm 1.1 }
877    
878 plasmaroo 1.33 kernel-2_src_compile() {
879 johnm 1.72 cd ${S}
880 johnm 1.93 [[ ${ETYPE} == headers ]] && compile_headers
881     [[ ${ETYPE} == sources ]] && \
882 johnm 1.55 use doc && ! use arm && ! use s390 && compile_manpages
883 johnm 1.1 }
884    
885 plasmaroo 1.33 kernel-2_pkg_preinst() {
886 johnm 1.93 [[ ${ETYPE} == headers ]] && preinst_headers
887 johnm 1.1 }
888    
889 plasmaroo 1.33 kernel-2_src_install() {
890 johnm 1.1 install_universal
891 johnm 1.93 [[ ${ETYPE} == headers ]] && install_headers
892     [[ ${ETYPE} == sources ]] && install_sources
893 johnm 1.1 }
894    
895 plasmaroo 1.33 kernel-2_pkg_postinst() {
896 johnm 1.93 [[ ${ETYPE} == headers ]] && postinst_headers
897     [[ ${ETYPE} == sources ]] && postinst_sources
898 johnm 1.1 }
899 johnm 1.12
900 plasmaroo 1.33 kernel-2_pkg_setup() {
901 johnm 1.93 [[ ${ETYPE} == headers ]] && setup_headers
902     [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..."
903 johnm 1.12 }

  ViewVC Help
Powered by ViewVC 1.1.20