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

Contents of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.116 - (hide annotations) (download)
Wed Apr 6 14:46:09 2005 UTC (13 years, 1 month ago) by johnm
Branch: MAIN
Changes since 1.115: +9 -3 lines
Fixing 2.6.8.1 KV_EXTRA blunder

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

  ViewVC Help
Powered by ViewVC 1.1.20