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

Contents of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.113 - (hide annotations) (download)
Thu Mar 17 00:00:15 2005 UTC (14 years, 7 months ago) by r3pek
Branch: MAIN
Changes since 1.112: +6 -1 lines
Closing bug #77321 and #77312

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

  ViewVC Help
Powered by ViewVC 1.1.20