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

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

  ViewVC Help
Powered by ViewVC 1.1.20