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

Contents of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.74 - (hide annotations) (download)
Tue Jan 11 21:20:59 2005 UTC (14 years, 4 months ago) by johnm
Branch: MAIN
Changes since 1.73: +61 -3 lines
fixing cross-compile

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

  ViewVC Help
Powered by ViewVC 1.1.20