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

Diff of /eclass/kernel-2.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.12 Revision 1.74
1# Copyright 1999-2004 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/kernel-2.eclass,v 1.74 2005/01/11 21:20:59 johnm Exp $
4
1# kernel.eclass rewrite for a clean base regarding the 2.6 series of kernel 5# Description: kernel.eclass rewrite for a clean base regarding the 2.6
2# with back-compatibility for 2.4 6# series of kernel with back-compatibility for 2.4
3# 7#
4# Author: John Mylchreest <johnm@gentoo.org> 8# Maintainer: John Mylchreest <johnm@gentoo.org>
5# Copyright 2004 Gentoo Linux 9# Copyright 2004 Gentoo Linux
6# 10#
7# Please direct your bugs to the current eclass maintainer :) 11# Please direct your bugs to the current eclass maintainer :)
8# thatll be: johnm
9 12
10# added functionality: 13# added functionality:
11# unipatch - a flexible, singular method to extract, add and remove patches. 14# unipatch - a flexible, singular method to extract, add and remove patches.
12 15
13# A Couple of env vars are available to effect usage of this eclass 16# A Couple of env vars are available to effect usage of this eclass
14# These are as follows: 17# These are as follows:
15# 18#
16# K_NOSETEXTRAVERSION - if this is set then EXTRAVERSION will not be automatically set within the kernel Makefile 19# K_NOSETEXTRAVERSION - if this is set then EXTRAVERSION will not be
20# automatically set within the kernel Makefile
17# K_NOUSENAME - if this is set then EXTRAVERSION will not include the first part of ${PN} in EXTRAVERSION 21# K_NOUSENAME - if this is set then EXTRAVERSION will not include the
18# K_PREPATCHED - if the patchset is prepatched (ie: mm-sources, ck-sources, ac-sources) it will use PR (ie: -r5) as the patchset version for EXTRAVERSION 22# first part of ${PN} in EXTRAVERSION
23# 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
19# - and not use it as a true package revision 26# - and not use it as a true package revision
20# K_EXTRAEINFO - this is a new-line seperated list of einfo displays in postinst and can be used to carry additional postinst messages 27# K_EXTRAEINFO - this is a new-line seperated list of einfo displays in
28# postinst and can be used to carry additional postinst
29# messages
21# K_EXTRAEWARN - same as K_EXTRAEINFO except ewarn's instead of einfo's 30# K_EXTRAEWARN - same as K_EXTRAEINFO except ewarn's instead of einfo's
22 31
23# H_SUPPORTEDARCH - this should be a space separated list of ARCH's which can be supported by the headers ebuild 32# H_SUPPORTEDARCH - this should be a space separated list of ARCH's which
33# can be supported by the headers ebuild
24 34
25# UNIPATCH_LIST - space delimetered list of patches to be applied to the kernel 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# - this should _NOT_ be used from the ebuild as this is
40# reserved for end users passing excludes from the cli
26# UNIPATCH_DOCS - space delimemeted list of docs to be installed to the doc dir 41# UNIPATCH_DOCS - space delimemeted list of docs to be installed to
42# the doc dir
43# UNIPATCH_STRICTORDER - if this is set places patches into directories of
44# order, so they are applied in the order passed
27 45
28ECLASS="kernel-2" 46ECLASS="kernel-2"
47INHERITED="$INHERITED $ECLASS"
29EXPORT_FUNCTIONS src_unpack src_compile src_install pkg_preinst pkg_postinst 48EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst pkg_postinst
30 49
50export CTARGET="${CTARGET:-${CHOST}}"
51
31HOMEPAGE="http://www.kernel.org/ http://www.gentoo.org/" 52HOMEPAGE="http://www.kernel.org/ http://www.gentoo.org/"
32LICENSE="GPL-2" 53LICENSE="GPL-2"
33IUSE="${IUSE} build"
34SLOT="${KV}"
35 54
55# 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#Eclass functions only from here onwards ...
59#==============================================================
60kernel_is() {
61 # And lets add a sanity check
62 [ -z "${KV_FULL}" ] && return 1
63
64 local RESULT operator test value i len
65 RESULT=0
66
67 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
120 [ ${test} ${operator} ${value} ] && return 0 || return 1
121}
122
123
124kernel_is_2_4() {
125 kernel_is 2 4
126 return $?
127}
128
129kernel_is_2_6() {
130 [ ${KV_MAJOR} -eq 2 -a ${KV_MINOR} -eq 5 -o ${KV_MINOR} -eq 6 ] && \
131 return 0 || return 1
132}
133
134kernel_header_destdir() {
135 [ "${CTARGET}" = "${CHOST}" ] \
136 && echo /usr/include \
137 || echo /usr/${CTARGET}/include
138}
139
36# capture the sources type and set depends 140# Capture the sources type and set DEPENDs
37if [ "${ETYPE}" == "sources" ] 141if [ "${ETYPE}" == "sources" ]
38then 142then
39 #console-tools is needed to solve the loadkeys fiasco; binutils version needed to avoid Athlon/PIII/SSE assembler bugs. 143 # binutils version needed to avoid Athlon/PIII/SSE assembler bugs.
40 DEPEND="!build? ( sys-apps/sed 144 DEPEND="!build? ( sys-apps/sed
41 >=sys-devel/binutils-2.11.90.0.31 )" 145 >=sys-devel/binutils-2.11.90.0.31 )
146 doc? ( !arm? ( !s390? ( app-text/docbook-sgml-utils ) ) )"
42 147
43 RDEPEND="${DEPEND} 148 RDEPEND="${DEPEND}
44 !build? ( >=sys-libs/ncurses-5.2 149 !build? ( >=sys-libs/ncurses-5.2
45 dev-lang/perl 150 dev-lang/perl
46 sys-apps/module-init-tools 151 virtual/modutils
47 sys-devel/make )" 152 sys-devel/make )"
48 153
154 [ $(kernel_is_2_4) $? == 0 ] && PROVIDE="virtual/linux-sources" \
49 PROVIDE="virtual/linux-sources virtual/alsa" 155 || PROVIDE="virtual/linux-sources virtual/alsa"
50 156
157 SLOT="${PVR}"
158 DESCRIPTION="Sources for the Linux kernel"
159 IUSE="${IUSE} build doc"
51elif [ "${ETYPE}" == "headers" ] 160elif [ "${ETYPE}" == "headers" ]
52then 161then
162 DESCRIPTION="Linux system headers"
163 IUSE="${IUSE}"
164
165 if [[ ${CTARGET} = ${CHOST} ]]
166 then
167 DEPEND="!virtual/os-headers"
53 PROVIDE="virtual/kernel virtual/os-headers" 168 PROVIDE="virtual/kernel virtual/os-headers"
169 SLOT="0"
170 else
171 SLOT="${CTARGET}"
172 fi
54else 173else
55 eerror "Unknown ETYPE=\"${ETYPE}\", must be either \"sources\" or \"headers\"" 174 eerror "Unknown ETYPE=\"${ETYPE}\", must be \"sources\" or \"headers\""
56 die 175 die
57fi 176fi
58 177
59# Grab kernel version from KV
60KV_MAJOR=$(echo ${KV} | cut -d. -f1)
61KV_MINOR=$(echo ${KV} | cut -d. -f2)
62KV_PATCH=$(echo ${KV} | cut -d. -f3)
63KV_PATCH=${KV_PATCH/[-_]*/}
64
65# set LINUX_HOSTCFLAGS if not already set
66[ -z "$LINUX_HOSTCFLAGS" ] && LINUX_HOSTCFLAGS="-Wall -Wstrict-prototypes -Os -fomit-frame-pointer -I${S}/include"
67
68
69#eclass functions only from here onwards.
70#==============================================================
71kernel_is_2_4() {
72 [ ${KV_MAJOR} -eq 2 -a ${KV_MINOR} -eq 4 ] && return 0 || return 1
73}
74
75kernel_is_2_6() {
76 [ ${KV_MAJOR} -eq 2 -a ${KV_MINOR} -eq 5 -o ${KV_MINOR} -eq 6 ] && return 0 || return 1
77}
78
79
80# Unpack functions 178# Unpack functions
81#============================================================== 179#==============================================================
82unpack_2_4() { 180unpack_2_4() {
83 cd ${S} 181 cd ${S}
84 # this file is required for other things to build properly, 182 # this file is required for other things to build properly,
85 # so we autogenerate it 183 # so we autogenerate it
86 make mrproper || die "make mrproper died" 184 make mrproper || die "make mrproper died"
87 make include/linux/version.h || die "make include/linux/version.h failed" 185 make include/linux/version.h || die "make include/linux/version.h failed"
88 echo ">>> version.h compiled successfully." 186 echo ">>> version.h compiled successfully."
89} 187}
90 188
91universal_unpack() { 189universal_unpack() {
190 [ -z "${OKV}" ] && OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
191
192 cd ${WORKDIR}
193 unpack linux-${OKV}.tar.bz2
194 if [ "${OKV}" != "${KV_FULL}" ]
195 then
196 mv linux-${OKV} linux-${KV_FULL} \
197 || die "Unable to move source tree to ${KV_FULL}."
198 fi
199 cd ${S}
200
201 # change incorrect install path
202 sed -ie 's:#export\tINSTALL_PATH:export\tINSTALL_PATH:' Makefile
203
92 # remove all backup files 204 # remove all backup files
93 find . -iname "*~" -exec rm {} \; 2> /dev/null 205 find . -iname "*~" -exec rm {} \; 2> /dev/null
94 206
95 if [ -d "${S}/Documentation/DocBook" ] 207 if [ -d "${S}/Documentation/DocBook" ]
96 then 208 then
97 cd ${S}/Documentation/DocBook 209 cd ${S}/Documentation/DocBook
98 sed -e "s:db2:docbook2:g" Makefile > Makefile.new \ 210 sed -e "s:db2:docbook2:g" Makefile > Makefile.new \
99 && mv Makefile.new Makefile 211 && mv Makefile.new Makefile
100 cd ${S} 212 cd ${S}
101 fi 213 fi
214 # 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
102} 218}
103 219
104unpack_set_extraversion() { 220unpack_set_extraversion() {
105 # Gentoo Linux uses /boot, so fix 'make install' to work properly and fix EXTRAVERSION
106 cd ${S} 221 cd ${S}
107 mv Makefile Makefile.orig
108 sed -e 's:#export\tINSTALL_PATH:export\tINSTALL_PATH:' \
109 -e "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" \ 222 sed -ie "s:^\(EXTRAVERSION =\).*:\1 ${EXTRAVERSION}:" Makefile
110 Makefile.orig > Makefile
111 rm Makefile.orig
112} 223}
113 224
114# Compile Functions 225# Compile Functions
115#============================================================== 226#==============================================================
116compile_headers() { 227compile_headers() {
228 local extra_makeopts=
229 local HOSTCFLAGS=$(getfilevar HOSTCFLAGS ${S}/Makefile)
230
231 set_arch_to_kernel;
232
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 # 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 # 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
265 set_arch_to_portage;
266}
267
268compile_manpages() {
117 local MY_ARCH 269 local MY_ARCH
118 270
271 einfo "Making manpages ..."
119 MY_ARCH=${ARCH} 272 MY_ARCH=${ARCH}
120 unset ${ARCH} 273 unset ARCH
121 yes "" | make oldconfig 274 make mandocs
122 echo ">>> make oldconfig complete"
123 ARCH=${MY_ARCH} 275 ARCH=${MY_ARCH}
124} 276}
125 277
126# install functions 278# install functions
127#============================================================== 279#==============================================================
128install_universal() { 280install_universal() {
131 chown -R root:root * 283 chown -R root:root *
132 chmod -R a+r-w+X,u+w * 284 chmod -R a+r-w+X,u+w *
133} 285}
134 286
135install_headers() { 287install_headers() {
136 [ $(kernel_is_2_4) $? == 0 ] && unpack_2_4 288 local ddir=$(kernel_header_destdir)
137 [ $(kernel_is_2_6) $? == 0 ] && ln -sf ${S}/include/asm-${ARCH} ${S}/include/asm
138 289
139 cd ${S} 290 cd ${S}
140 dodir /usr/include/linux 291 dodir ${ddir}/linux
141 cp -ax ${S}/include/linux/* ${D}/usr/include/linux 292 cp -ax ${S}/include/linux/* ${D}/${ddir}/linux
142 rm -rf ${D}/usr/include/linux/modules 293 rm -rf ${D}/${ddir}/linux/modules
143 dodir /usr/include/asm 294 dodir ${ddir}/asm
295
296 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
144 cp -ax ${S}/include/asm/* ${D}/usr/include/asm 300 cp -ax ${S}/include/asm-sparc/* ${D}/usr/include/asm-sparc
145 301 cp -ax ${S}/include/asm-sparc64/* ${D}/usr/include/asm-sparc64
146 if [ $(kernel_is_2_6) $? == 0 ] 302 generate_sparc_asm ${D}/usr/include
303 else
304 cp -ax ${S}/include/asm/* ${D}/${ddir}/asm
305 fi
306
307 if kernel_is 2 6
147 then 308 then
148 dodir /usr/include/asm-generic 309 dodir ${ddir}/asm-generic
149 cp -ax ${S}/include/asm-generic/* ${D}/usr/include/asm-generic 310 cp -ax ${S}/include/asm-generic/* ${D}/${ddir}/asm-generic
311
312
150 fi 313 fi
151} 314}
152 315
153install_sources() { 316install_sources() {
154 local doc 317 local doc
155 local docs 318 local docs
319 local file
156 320
157 cd ${S} 321 cd ${S}
158 dodir /usr/src 322 dodir /usr/src
159 echo ">>> Copying sources..." 323 echo ">>> Copying sources ..."
160 if [ -d "${WORKDIR}/${KV}/docs/" ] 324 file="$(find ${WORKDIR} -iname "docs" -type d)"
325 if [ -n "${file}" ]
161 then 326 then
162 for file in $(ls -1 ${WORKDIR}/${KV}/docs/) 327 for file in $(find ${file} -type f)
163 do 328 do
164 echo "XX_${file}*" >> ${S}/patches.txt 329 echo "${file/*docs\//}" >> ${S}/patches.txt
330 echo "===================================================" >> ${S}/patches.txt
165 cat ${WORKDIR}/${KV}/docs/${file} >> ${S}/patches.txt 331 cat ${file} >> ${S}/patches.txt
332 echo "===================================================" >> ${S}/patches.txt
166 echo "" >> ${S}/patches.txt 333 echo "" >> ${S}/patches.txt
167 done 334 done
168 fi 335 fi
169 336
170 if [ ! -f ${S}/patches.txt ] 337 if [ ! -f ${S}/patches.txt ]
179 done 346 done
180 347
181 if [ -f ${S}/patches.txt ]; then 348 if [ -f ${S}/patches.txt ]; then
182 docs="${docs} ${S}/patches.txt" 349 docs="${docs} ${S}/patches.txt"
183 fi 350 fi
351
352 if use doc && ! use arm && ! use s390; then
353 install_manpages
354 fi
355
184 dodoc ${docs} 356 dodoc ${docs}
185 mv ${WORKDIR}/linux* ${D}/usr/src 357 mv ${WORKDIR}/linux* ${D}/usr/src
186} 358}
187 359
360install_manpages() {
361 local MY_ARCH
362
363 ebegin "Installing manpages"
364 MY_ARCH=${ARCH}
365 unset ARCH
366 sed -ie "s#/usr/local/man#${D}/usr/man#g" scripts/makeman
367 make installmandocs
368 eend $?
369 sed -ie "s#${D}/usr/man#/usr/local/man#g" scripts/makeman
370 ARCH=${MY_ARCH}
371}
372
188# pkg_preinst functions 373# pkg_preinst functions
189#============================================================== 374#==============================================================
190preinst_headers() { 375preinst_headers() {
191 [ -L ${ROOT}usr/include/linux ] && rm ${ROOT}usr/include/linux 376 local ddir=$(kernel_header_destdir)
192 [ -L ${ROOT}usr/include/asm ] && rm ${ROOT}usr/include/asm 377 [[ -L ${ddir}/linux ]] && rm ${ddir}/linux
378 [[ -L ${ddir}/asm ]] && rm ${ddir}/asm
193} 379}
194 380
195# pkg_postinst functions 381# pkg_postinst functions
196#============================================================== 382#==============================================================
197postinst_sources() { 383postinst_sources() {
198 if [ ! -h ${ROOT}usr/src/linux ] 384 if [ ! -h ${ROOT}usr/src/linux ]
199 then 385 then
200 ln -sf ${ROOT}usr/src/linux-${KV} ${ROOT}usr/src/linux 386 ln -sf ${ROOT}usr/src/linux-${KV_FULL} ${ROOT}usr/src/linux
201 fi 387 fi
202 388
203 # Don't forget to make directory for sysfs 389 # Don't forget to make directory for sysfs
204 [ ! -d "${ROOT}/sys" -a $(kernel_is_2_6) $? == 0 ] && mkdir /sys 390 [ ! -d "${ROOT}/sys" -a $(kernel_is_2_6) $? == 0 ] && mkdir /sys
205 391
209 einfo "created (X.Y is the first 2 parts of your new kernel version)" 395 einfo "created (X.Y is the first 2 parts of your new kernel version)"
210 echo 396 echo
211 einfo "For example, this kernel will require:" 397 einfo "For example, this kernel will require:"
212 einfo "/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}" 398 einfo "/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}"
213 echo 399 echo
214 400
215 # if K_EXTRAEINFO is set then lets display it now 401 # if K_EXTRAEINFO is set then lets display it now
216 if [ -n "${K_EXTRAEINFO}" ] 402 if [ -n "${K_EXTRAEINFO}" ]
217 then 403 then
218 echo ${K_EXTRAEINFO} | fmt | 404 echo ${K_EXTRAEINFO} | fmt |
219 while read -s ELINE 405 while read -s ELINE
222 done 408 done
223 409
224 echo 410 echo
225 fi 411 fi
226 412
413 # Show policy version, if this kernel has SELinux ...
414 local secfile
415 secfile="${ROOT}usr/src/linux-${KV_FULL}/security/selinux/include/security.h"
416 if use selinux && [ -f "$secfile" ]
417 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
227 # if K_EXTRAEWARN is set then lets display it now 423 # if K_EXTRAEWARN is set then lets display it now
228 if [ -n "${K_EXTRAEWARN}" ] 424 if [ -n "${K_EXTRAEWARN}" ]
229 then 425 then
230 echo ${K_EXTRAEWARN} | fmt | 426 echo ${K_EXTRAEWARN} | fmt |
231 while read -s ELINE 427 while read -s ELINE
236 echo 432 echo
237 fi 433 fi
238} 434}
239 435
240postinst_headers() { 436postinst_headers() {
241 echo
242 einfo "Kernel headers are usually only used when recompiling glibc." 437 einfo "Kernel headers are usually only used when recompiling glibc, as such, following the installation"
243 einfo "Following the installation of newer headers it is advised that" 438 einfo "of newer headers, it is advised that you re-merge glibc as follows:"
244 einfo "you re-merge glibc as follows:"
245 einfo "# emerge glibc" 439 einfo "emerge glibc"
246 einfo "Failure to do so will cause glibc to not make use of newer" 440 einfo "Failure to do so will cause glibc to not make use of newer features present in the updated kernel"
247 einfo "features present in the updated kernelheaders." 441 einfo "headers."
248 echo
249} 442}
250 443
251# pkg_setup functions 444# pkg_setup functions
252#============================================================== 445#==============================================================
253setup_headers() { 446setup_headers() {
254 ARCH=$(uname -m | sed -e s/[i].86/i386/ -e s/x86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/ -e s/amd64/x86_64/)
255 [ "$ARCH" == "sparc" -a "$PROFILE_ARCH" == "sparc64" ] && ARCH="sparc64"
256
257 [ -z "${H_SUPPORTEDARCH}" ] && H_SUPPORTEDARCH="${PN/-*/}" 447 [ -z "${H_SUPPORTEDARCH}" ] && H_SUPPORTEDARCH="${PN/-*/}"
258 for i in ${H_SUPPORTEDARCH} 448 for i in ${H_SUPPORTEDARCH}
259 do 449 do
260 [ "${ARCH}" == "${i}" ] && H_ACCEPT_ARCH="yes" 450 [ "${ARCH}" == "${i}" ] && H_ACCEPT_ARCH="yes"
261 done 451 done
262 452
263 if [ "${H_ACCEPT_ARCH}" != "yes" ] 453 if [ "${H_ACCEPT_ARCH}" != "yes" ]
264 then 454 then
265 echo 455 echo
266 eerror "This version of ${PN} does not support ${ARCH}." 456 eerror "This version of ${PN} does not support ${ARCH}."
267 eerror "Please merge the appropriate sources, in most cases" 457 eerror "Please merge the appropriate sources, in most cases"
268 eerror "this will be ${ARCH}-headers." 458 eerror "(but not all) this will be called ${ARCH}-headers."
269 die "incorrect headers" 459 die "Package unsupported for ${ARCH}"
270 fi 460 fi
271} 461}
272 462
273# unipatch 463# unipatch
274#============================================================== 464#==============================================================
275unipatch() { 465unipatch() {
276 local i 466 local i
277 local x 467 local x
278 local extention 468 local extention
279 local PIPE_CMD 469 local PIPE_CMD
280 local UNIPATCH_EXCLUDE 470 local UNIPATCH_DROP
281 local KPATCH_DIR 471 local KPATCH_DIR
282 local PATCH_DEPTH 472 local PATCH_DEPTH
283 local ELINE 473 local ELINE
474 local STRICT_COUNT
475 local PATCH_LEVEL
284 476
285 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/" 477 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/"
286 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR} 478 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR}
287 479
480 # We're gonna need it when doing patches with a predefined patchlevel
481 shopt -s extglob
482
288 # This function will unpack all passed tarballs, add any passed patches, and remove any passed patchnumbers 483 # This function will unpack all passed tarballs, add any passed patches, and remove any passed patchnumbers
289 # usage can be either via an env var or by params 484 # usage can be either via an env var or by params
485 # although due to the nature we pass this within this eclass
486 # it shall be by param only.
290 [ -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}" 487 # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}"
488 UNIPATCH_LIST="${@}"
291 489
292 #unpack any passed tarballs 490 #unpack any passed tarballs
293 for i in ${UNIPATCH_LIST} 491 for i in ${UNIPATCH_LIST}
294 do 492 do
295 if [ -n "$(echo ${i} | grep -e "\.tar" -e "\.tbz" -e "\.tgz")" ] 493 if [ -n "$(echo ${i} | grep -e "\.tar" -e "\.tbz" -e "\.tgz")" ]
296 then 494 then
297 extention=${i/*./} 495 extention=${i/*./}
496 extention=${extention/:*/}
298 case ${extention} in 497 case ${extention} in
299 tbz2) PIPE_CMD="tar -xvjf";; 498 tbz2) PIPE_CMD="tar -xvjf";;
300 bz2) PIPE_CMD="tar -xvjf";; 499 bz2) PIPE_CMD="tar -xvjf";;
301 tgz) PIPE_CMD="tar -xvzf";; 500 tgz) PIPE_CMD="tar -xvzf";;
302 gz) PIPE_CMD="tar -xvzf";; 501 gz) PIPE_CMD="tar -xvzf";;
303 *) eerror "Unrecognized tarball compression" 502 *) eerror "Unrecognized tarball compression"
304 die "Unrecognized tarball compression";; 503 die "Unrecognized tarball compression";;
305 esac 504 esac
306 505
506 if [ -n "${UNIPATCH_STRICTORDER}" ]
507 then
508 STRICT_COUNT=$((${STRICT_COUNT} + 1))
509 mkdir -p ${KPATCH_DIR}/${STRICT_COUNT}/
510 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR}/${STRICT_COUNT}/ 1>/dev/null
511 else
307 ${PIPE_CMD} ${i} -C ${KPATCH_DIR} 1>/dev/null 512 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR} 1>/dev/null
513 fi
514
308 if [ $? == 0 ] 515 if [ $? == 0 ]
309 then 516 then
310 einfo "${i/*\//} unpacked" 517 einfo "${i/*\//} unpacked"
518 [ -n "$(echo ${i} | grep ':')" ] && echo ">>> Strict patch levels not currently supported for tarballed patchsets"
311 else 519 else
312 eerror "Failed to unpack ${i}" 520 eerror "Failed to unpack ${i/:*/}"
313 die "unable to unpack patch tarball" 521 die "unable to unpack patch tarball"
314 fi 522 fi
523 else
524 extention=${i/*./}
525 extention=${extention/:*/}
526 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 *) UNIPATCH_DROP="${UNIPATCH_DROP} ${i/:*/}";;
534 esac
315 535
316 UNIPATCH_LIST="${UNIPATCH_LIST/${i}/}" 536 PATCH_LEVEL=${i/*([^:])?(:)}
537 i=${i/:*/}
538 x=${i/*\//}
539 x=${x/\.${extention}/}
540
541 if [ -n "${PIPE_CMD}" ]
542 then
543 if [ ! -r "${i}" ]
544 then
545 echo
546 eerror "FATAL: unable to locate:"
547 eerror "${i}"
548 eerror "for read-only. The file either has incorrect permissions"
549 eerror "or does not exist."
550 die Unable to locate ${i}
551 fi
552
553 if [ -n "${UNIPATCH_STRICTORDER}" ]
554 then
555 STRICT_COUNT=$((${STRICT_COUNT} + 1))
556 mkdir -p ${KPATCH_DIR}/${STRICT_COUNT}/
557 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${STRICT_COUNT}/${x}.patch${PATCH_LEVEL})
558 else
559 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL})
560 fi
561 fi
317 fi 562 fi
318 done
319
320 #so now everything is unpacked, lets work out whats to be dropped and whats to be included.
321 for i in ${UNIPATCH_LIST}
322 do
323 extention=${i/*./}
324 PIPE_CMD=""
325 case ${extention} in
326 bz2) PIPE_CMD="bzip2 -dc";;
327 patch) PIPE_CMD="cat";;
328 diff) PIPE_CMD="cat";;
329 gz|Z|z) PIPE_CMD="gzip -dc";;
330 ZIP|zip) PIPE_CMD="unzip -p";;
331 *) UNIPATCH_EXCLUDE="${UNIPATCH_EXCLUDE} ${i}";;
332 esac
333 x=${i/*\//}
334 x=${x/\.${extention}/}
335 [ -n "${PIPE_CMD}" ] && ${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch
336 done 563 done
337 564
338 #populate KPATCH_DIRS so we know where to look to remove the excludes 565 #populate KPATCH_DIRS so we know where to look to remove the excludes
339 x=${KPATCH_DIR} 566 x=${KPATCH_DIR}
340 KPATCH_DIR="" 567 KPATCH_DIR=""
568 LC_ALL="C"
341 for i in $(find ${x} -type d) 569 for i in $(find ${x} -type d | sort -n)
342 do 570 do
343 KPATCH_DIR="${KPATCH_DIR} ${i}" 571 KPATCH_DIR="${KPATCH_DIR} ${i}"
344 done 572 done
345 573
346 #so now lets get rid of the patchno's we want to exclude 574 #so now lets get rid of the patchno's we want to exclude
575 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}"
347 for i in ${UNIPATCH_EXCLUDE} 576 for i in ${UNIPATCH_DROP}
348 do 577 do
578 ebegin "Excluding Patch #${i}"
349 for x in ${KPATCH_DIR} 579 for x in ${KPATCH_DIR}
350 do 580 do
351 rm ${x}/${i}_* 2>/dev/null 581 rm -f ${x}/${i}* 2>/dev/null
352 if [ $? == 0 ]
353 then
354 einfo "Excluding Patch #${i}"
355 einfo "From: ${x/${WORKDIR}/}"
356 fi
357 done 582 done
583 eend $?
358 done 584 done
359 585
360 # and now, finally, we patch it :) 586 # and now, finally, we patch it :)
361 for x in ${KPATCH_DIR} 587 for x in ${KPATCH_DIR}
362 do 588 do
363 for i in $(find ${x} -maxdepth 1 -iname "*.patch" -or -iname "*.diff" | sort -u) 589 for i in $(find ${x} -maxdepth 1 -iname "*.patch*" -or -iname "*.diff*" | sort -n)
364 do 590 do
591 STDERR_T="${T}/${i/*\//}"
592 STDERR_T="${STDERR_T/.patch*/.err}"
365 593
594 [ -z ${i/*.patch*/} ] && PATCH_DEPTH=${i/*.patch/}
595 [ -z ${i/*.diff*/} ] && PATCH_DEPTH=${i/*.diff/}
366 596
597 if [ -z "${PATCH_DEPTH}" ]; then
367 PATCH_DEPTH=0 598 PATCH_DEPTH=0
599 fi
600
368 ebegin "Applying ${i/*\//}" 601 ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)"
369 while [ ${PATCH_DEPTH} -lt 5 ] 602 while [ ${PATCH_DEPTH} -lt 5 ]
370 do 603 do
371 if (patch -p${PATCH_DEPTH} --dry-run -f < ${i} >/dev/null) 604 echo "Attempting Dry-run:" >> ${STDERR_T}
605 echo "cmd: patch -p${PATCH_DEPTH} --dry-run -f < ${i}" >> ${STDERR_T}
606 echo "=======================================================" >> ${STDERR_T}
607 if [ $(patch -p${PATCH_DEPTH} --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]
372 then 608 then
373 $(patch -p${PATCH_DEPTH} -f < ${i} >/dev/null) 609 echo "Attempting patch:" > ${STDERR_T}
374 if [ "$?" -eq 0 ] 610 echo "cmd: patch -p${PATCH_DEPTH} -f < ${i}" >> ${STDERR_T}
611 echo "=======================================================" >> ${STDERR_T}
612 if [ $(patch -p${PATCH_DEPTH} -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]
375 then 613 then
376 eend 0 614 eend 0
615 rm ${STDERR_T}
377 break 616 break
378 else 617 else
379 eend 1 618 eend 1
380 eerror "Failed to apply patch ${i/*\//}" 619 eerror "Failed to apply patch ${i/*\//}"
620 eerror "Please attach ${STDERR_T} to any bug you may post."
381 die "Failed to apply ${i/*\//}" 621 die "Failed to apply ${i/*\//}"
382 fi 622 fi
383 else 623 else
384 PATCH_DEPTH=$((${PATCH_DEPTH} + 1)) 624 PATCH_DEPTH=$((${PATCH_DEPTH} + 1))
385 fi 625 fi
386 done 626 done
387 if [ ${PATCH_DEPTH} -eq 5 ] 627 if [ ${PATCH_DEPTH} -eq 5 ]
388 then 628 then
389 eend 1 629 eend 1
630 eerror "Please attach ${STDERR_T} to any bug you may post."
390 die "Unable to dry-run patch." 631 die "Unable to dry-run patch."
391 fi 632 fi
392
393
394 done 633 done
395 done 634 done
635
636 # clean up KPATCH_DIR's - fixes bug #53610
637 for x in ${KPATCH_DIR}
638 do
639 rm -Rf ${x}
640 done
641 unset LC_ALL
396} 642}
397 643
398# custom functions 644# custom functions
399#============================================================== 645#==============================================================
646# 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
648set_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
660set_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
668getfilevar() {
669local 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
400detect_version() { 697detect_version() {
401 # this function will detect and set 698 # this function will detect and set
402 # - OKV: Original Kernel Version (2.6.0/2.6.0-test11) 699 # - OKV: Original Kernel Version (2.6.0/2.6.0-test11)
403 # - KV: Kernel Version (2.6.0-gentoo/2.6.0-test11-gentoo-r1) 700 # - KV: Kernel Version (2.6.0-gentoo/2.6.0-test11-gentoo-r1)
404 # - EXTRAVERSION: The additional version appended to OKV (-gentoo/-gentoo-r1) 701 # - EXTRAVERSION: The additional version appended to OKV (-gentoo/-gentoo-r1)
405 702
703 if [ -n "${KV_FULL}" ] ;
704 then
705 # we will set this for backwards compatibility.
706 KV=${KV_FULL}
707
708 # we know KV_FULL so lets stop here. but not without resetting S
709 S=${WORKDIR}/linux-${KV_FULL}
710 return
711 fi
712
713 if [ -z "${OKV}" ]
714 then
406 OKV=${PV/_beta/-test} 715 OKV=${PV/_beta/-test}
407 OKV=${OKV/_rc/-rc} 716 OKV=${OKV/_rc/-rc}
408 OKV=${OKV/_pre*/} 717 OKV=${OKV/_p*/}
409 OKV=${OKV/-r*/} 718 OKV=${OKV/-r*/}
410 719 fi
720
411 KV_MAJOR=$(echo ${OKV} | cut -d. -f1) 721 KV_MAJOR=$(echo ${OKV} | cut -d. -f1)
412 KV_MINOR=$(echo ${OKV} | cut -d. -f2) 722 KV_MINOR=$(echo ${OKV} | cut -d. -f2)
413 KV_PATCH=$(echo ${OKV} | cut -d. -f3) 723 KV_PATCH=$(echo ${OKV} | cut -d. -f3-)
414 KV_PATCH=${KV_PATCH/[-_]*/} 724 KV_PATCH=${KV_PATCH/[-_]*/}
415 725
416 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2" 726 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
417 727
418 RELEASE=${PV/${OKV}/} 728 RELEASE=${PV/${OKV}/}
419 RELEASE=${RELEASE/_beta/} 729 RELEASE=${RELEASE/_beta/}
420 RELEASE=${RELEASE/_rc/-rc} 730 RELEASE=${RELEASE/_rc/-rc}
731 if [ $(kernel_is_2_4) $? == 0 ]
732 then
733 RELEASE=${RELEASE/_pre/-pre}
734 else
421 RELEASE=${RELEASE/_pre/-bk} 735 RELEASE=${RELEASE/_pre/-bk}
736 fi
422 RELEASETYPE=${RELEASE//[0-9]/} 737 RELEASETYPE=${RELEASE//[0-9]/}
423
424 EXTRAVERSION="${RELEASE}" 738 EXTRAVERSION="${RELEASE}"
425 739
426 if [ -n "${K_PREPATCHED}" ] 740 if [ -n "${K_PREPATCHED}" ]
427 then 741 then
428 KV="${OKV}-${PN/-*/}${PR/r/}" 742 EXTRAVERSION="${EXTRAVERSION}-${PN/-*/}${PR/r/}"
429 else 743 elif [ ${ETYPE} != "headers" ]
744 then
430 [ -z "${K_NOUSENAME}" ] && EXTRAVERSION="${EXTRAVERSION}-${PN/-*/}" 745 [ -z "${K_NOUSENAME}" ] && EXTRAVERSION="${EXTRAVERSION}-${PN/-*/}"
746 [ "${PN/-*/}" == "wolk" ] && EXTRAVERSION="-${PN/-*/}-${PV}"
431 [ ! "${PR}" == "r0" ] && EXTRAVERSION="${EXTRAVERSION}-${PR}" 747 [ "${PR}" != "r0" ] && EXTRAVERSION="${EXTRAVERSION}-${PR}"
432 748 fi
749
433 KV=${OKV}${EXTRAVERSION} 750 KV_FULL=${OKV}${EXTRAVERSION}
434 fi 751
435
436 # -rcXX-bkXX pulls are *IMPOSSIBLE* to support within the portage naming convention 752 # -rcXX-bkXX pulls are *IMPOSSIBLE* to support within the portage naming convention
437 # these cannot be supported, but the code here can handle it up until this point 753 # these cannot be supported, but the code here can handle it up until this point
438 # and theoretically thereafter. 754 # and theoretically thereafter.
439 755
440 if [ "${RELEASETYPE}" == "-rc" ] 756 if [ "${RELEASETYPE}" == "-rc" -o "${RELEASETYPE}" == "-pre" ]
441 then 757 then
442 OKV="${KV_MAJOR}.${KV_MINOR}.$([ $((${KV_PATCH} - 1)) -lt 0 ] && echo ${KV_PATCH} || echo $((${KV_PATCH} - 1)))" 758 OKV="${KV_MAJOR}.${KV_MINOR}.$([ $((${KV_PATCH} - 1)) -lt 0 ] && echo ${KV_PATCH} || echo $((${KV_PATCH} - 1)))"
443 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${PV//_/-}.bz2 759 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${PV//_/-}.bz2
444 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2" 760 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
445 UNIPATCH_LIST="${DISTDIR}/patch-${PV//_/-}.bz2 ${UNIPATCH_LIST}" 761 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${PV//_/-}.bz2"
446 [ -n "${K_PREPATCHED}" ] && KV="${PV/[-_]*/}${EXTRAVERSION}-${PN/-*/}${PR/r/}" || KV=${PV/[-_]*/}${EXTRAVERSION} 762 KV_FULL=${PV/[-_]*/}${EXTRAVERSION}
447 fi 763 fi
448 764
449 if [ "${RELEASETYPE}" == "-bk" ] 765 if [ "${RELEASETYPE}" == "-bk" ]
450 then 766 then
451 OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}" 767 OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
452 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2 768 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2
453 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2" 769 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
454 UNIPATCH_LIST="${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2 ${UNIPATCH_LIST}" 770 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2"
455 [ -n "${K_PREPATCHED}" ] && KV="${PV/[-_]*/}${EXTRAVERSION}-${PN/-*/}${PR/r/}" || KV=${PV/[-_]*/}${EXTRAVERSION} 771 KV_FULL=${PV/[-_]*/}${EXTRAVERSION}
456 fi 772 fi
457 773
458 if [ "${RELEASETYPE}" == "-rc-bk" ] 774 if [ "${RELEASETYPE}" == "-rc-bk" ]
459 then 775 then
460 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))-${RELEASE/-bk*}" 776 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))-${RELEASE/-bk*}"
461 EXTRAVERSION="$([ -n "${RELEASE}" ] && echo ${RELEASE/*-bk/-bk})$([ -n "${K_USENAME}" ] && echo -${PN/-*/})$([ ! "${PR}" == "r0" ] && echo -${PR})" 777 EXTRAVERSION="$([ -n "${RELEASE}" ] && echo ${RELEASE/*-bk/-bk})$([ -n "${K_USENAME}" ] && echo -${PN/-*/})$([ ! "${PR}" == "r0" ] && echo -${PR})"
462 778
463 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2 779 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2
464 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2" 780 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
465 UNIPATCH_LIST="${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2 ${UNIPATCH_LIST}" 781 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2"
466 [ -n "${K_PREPATCHED}" ] && KV="${PV/[-_]*/}${EXTRAVERSION}-${PN/-*/}${PR/r/}" || KV=${PV/[-_]*/}${EXTRAVERSION} 782 KV_FULL=${PV/[-_]*/}${EXTRAVERSION}
467 fi 783 fi
468 784
469 S=${WORKDIR}/linux-${KV} 785 S=${WORKDIR}/linux-${KV_FULL}
786 # we will set this for backwards compatibility.
787 KV=${KV_FULL}
470} 788}
471 789
790detect_arch() {
791 # This function sets ARCH_URI and ARCH_PATCH
792 # with the neccessary info for the arch sepecific compatibility
793 # patchsets.
794
795 local ALL_ARCH
796 local LOOP_ARCH
797 local COMPAT_URI
798 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
808 for LOOP_ARCH in ${ALL_ARCH}
809 do
810 COMPAT_URI="${LOOP_ARCH}_URI"
811 COMPAT_URI="${!COMPAT_URI}"
812
813 [ -n "${COMPAT_URI}" ] && \
814 ARCH_URI="${ARCH_URI} $(echo ${LOOP_ARCH} | tr '[:upper:]' '[:lower:]')? ( ${COMPAT_URI} )"
815
816 if [ "${LOOP_ARCH}" == "$(echo ${ARCH} | tr '[:lower:]' '[:upper:]')" ]
817 then
818 for i in ${COMPAT_URI}
819 do
820 ARCH_PATCH="${ARCH_PATCH} ${DISTDIR}/${i/*\//}"
821 done
822 fi
823 done
824}
825
826# 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
838generate_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
866echo "#ifndef __arch64__
867#include <asm-sparc/$h>
868#endif
869" >> asm/${h}
870
871 # sparc64 only
872 else
873echo "#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
885headers___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}
472 893
473# common functions 894# common functions
474#============================================================== 895#==============================================================
475src_unpack() { 896kernel-2_src_unpack() {
476 [ -z "${OKV}" ] && OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}" 897 detect_version
898 universal_unpack
477 899
478 cd ${WORKDIR} 900 [ -n "${UNIPATCH_LIST}" -o -n "${UNIPATCH_LIST_DEFAULT}" ] && \
479 unpack linux-${OKV}.tar.bz2 901 unipatch "${UNIPATCH_LIST_DEFAULT} ${UNIPATCH_LIST}"
480 if [ "${OKV}" != "${KV}" ] 902
481 then 903 [ -z "${K_NOSETEXTRAVERSION}" ] && \
482 mv linux-${OKV} linux-${KV} || die "Unable to move source tree to ${KV}." 904 unpack_set_extraversion
483 fi 905
906 kernel_is 2 4 && unpack_2_4
907}
908
909kernel-2_src_compile() {
910 detect_version
484 cd ${S} 911 cd ${S}
485
486 universal_unpack
487 [ -n "${UNIPATCH_LIST}" ] && unipatch ${UNIPATCH_LIST}
488 [ -z "${K_NOSETEXTRAVERSION}" ] && unpack_set_extraversion
489
490 [ $(kernel_is_2_4) $? == 0 ] && unpack_2_4
491}
492
493src_compile() {
494 [ "${ETYPE}" == "headers" ] && compile_headers 912 [ "${ETYPE}" == "headers" ] && compile_headers
913 [ "${ETYPE}" == "sources" ] && \
914 use doc && ! use arm && ! use s390 && compile_manpages
495} 915}
496 916
497pkg_preinst() { 917kernel-2_pkg_preinst() {
918 detect_version
498 [ "${ETYPE}" == "headers" ] && preinst_headers 919 [ "${ETYPE}" == "headers" ] && preinst_headers
499} 920}
500 921
501src_install() { 922kernel-2_src_install() {
923 detect_version
502 install_universal 924 install_universal
503 [ "${ETYPE}" == "headers" ] && install_headers 925 [ "${ETYPE}" == "headers" ] && install_headers
504 [ "${ETYPE}" == "sources" ] && install_sources 926 [ "${ETYPE}" == "sources" ] && install_sources
505} 927}
506 928
507pkg_postinst() { 929kernel-2_pkg_postinst() {
930 detect_version
508 [ "${ETYPE}" == "headers" ] && postinst_headers 931 [ "${ETYPE}" == "headers" ] && postinst_headers
509 [ "${ETYPE}" == "sources" ] && postinst_sources 932 [ "${ETYPE}" == "sources" ] && postinst_sources
510} 933}
511 934
512pkg_setup() { 935kernel-2_pkg_setup() {
936 detect_version
513 [ "${ETYPE}" == "headers" ] && setup_headers 937 [ "${ETYPE}" == "headers" ] && setup_headers
938
939 # This is to fix some weird portage bug? in stable versions of portage.
940 [ "${ETYPE}" == "sources" ] && echo ">>> Preparing to unpack ..."
514} 941}
942
943

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.74

  ViewVC Help
Powered by ViewVC 1.1.20