/[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.99
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.99 2005/02/11 01:17:36 eradicator 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
255 # Handle multilib headers
256 case $(tc-arch-kernel) in
257 sparc64)
258 dodir ${ddir}/asm-sparc
259 cp -ax ${S}/include/asm-sparc/* ${D}/${ddir}/asm-sparc
260
261 dodir ${ddir}/asm-sparc64
262 cp -ax ${S}/include/asm-sparc64/* ${D}/${ddir}/asm-sparc64
263
264 create_ml_includes ${ddir}/asm __sparc__:${ddir}/asm-sparc __sparc64__:${ddir}/asm-sparc64
265 ;;
266 x86_64)
267 dodir ${ddir}/asm-i386
268 cp -ax ${S}/include/asm-i386/* ${D}/${ddir}/asm-i386
269
270 dodir ${ddir}/asm-x86_64
271 cp -ax ${S}/include/asm-x86_64/* ${D}/${ddir}/asm-x86_64
272
273 create_ml_includes ${ddir}/asm __i386__:${ddir}/asm-i386 __x86_64__:${ddir}/asm-x86_64
274 ;;
275 *)
276 dodir ${ddir}/asm
144 cp -ax ${S}/include/asm/* ${D}/usr/include/asm 277 cp -ax ${S}/include/asm/* ${D}/${ddir}/asm
145 278 ;;
146 if [ $(kernel_is_2_6) $? == 0 ] 279 esac
147 then 280
148 dodir /usr/include/asm-generic 281 if kernel_is 2 6; then
282 dodir ${ddir}/asm-generic
149 cp -ax ${S}/include/asm-generic/* ${D}/usr/include/asm-generic 283 cp -ax ${S}/include/asm-generic/* ${D}/${ddir}/asm-generic
150 fi 284 fi
285
286 cd ${OLDPWD}
151} 287}
152 288
153install_sources() { 289install_sources() {
154 local doc 290 local doc docs file
155 local docs
156 291
157 cd ${S} 292 cd ${S}
158 dodir /usr/src 293 dodir /usr/src
159 echo ">>> Copying sources..." 294 echo ">>> Copying sources ..."
160 if [ -d "${WORKDIR}/${KV}/docs/" ] 295
161 then 296 file="$(find ${WORKDIR} -iname "docs" -type d)"
162 for file in $(ls -1 ${WORKDIR}/${KV}/docs/) 297 if [[ -n ${file} ]]; then
163 do 298 for file in $(find ${file} -type f); do
164 echo "XX_${file}*" >> ${S}/patches.txt 299 echo "${file//*docs\/}" >> ${S}/patches.txt
300 echo "===================================================" >> ${S}/patches.txt
165 cat ${WORKDIR}/${KV}/docs/${file} >> ${S}/patches.txt 301 cat ${file} >> ${S}/patches.txt
302 echo "===================================================" >> ${S}/patches.txt
166 echo "" >> ${S}/patches.txt 303 echo "" >> ${S}/patches.txt
167 done 304 done
168 fi 305 fi
169 306
170 if [ ! -f ${S}/patches.txt ] 307 if [[ ! -f ${S}/patches.txt ]]; then
171 then
172 # patches.txt is empty so lets use our ChangeLog 308 # 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 309 [[ -f ${FILESDIR}/../ChangeLog ]] && \
310 echo "Please check the ebuild ChangeLog for more details." \
311 > ${S}/patches.txt
174 fi 312 fi
175 313
176 for doc in ${UNIPATCH_DOCS} 314 for doc in ${UNIPATCH_DOCS}; do [[ -f ${doc} ]] && docs="${docs} ${doc}"; done
177 do 315 if [[ -f ${S}/patches.txt ]]; then docs="${docs} ${S}/patches.txt"; fi
178 [ -f ${doc} ] && docs="${docs} ${doc}" 316 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} 317 dodoc ${docs}
318
185 mv ${WORKDIR}/linux* ${D}/usr/src 319 mv ${WORKDIR}/linux* ${D}/usr/src
186} 320}
187 321
322install_manpages() {
323 sed -ie "s#/usr/local/man#${D}/usr/man#g" scripts/makeman
324 ebegin "Installing manpages"
325 env -u ARCH make installmandocs
326 eend $?
327 sed -ie "s#${D}/usr/man#/usr/local/man#g" scripts/makeman
328}
329
188# pkg_preinst functions 330# pkg_preinst functions
189#============================================================== 331#==============================================================
190preinst_headers() { 332preinst_headers() {
191 [ -L ${ROOT}usr/include/linux ] && rm ${ROOT}usr/include/linux 333 local ddir=$(kernel_header_destdir)
192 [ -L ${ROOT}usr/include/asm ] && rm ${ROOT}usr/include/asm 334 [[ -L ${ddir}/linux ]] && rm ${ddir}/linux
335 [[ -L ${ddir}/asm ]] && rm ${ddir}/asm
193} 336}
194 337
195# pkg_postinst functions 338# pkg_postinst functions
196#============================================================== 339#==============================================================
197postinst_sources() { 340postinst_sources() {
198 if [ ! -h ${ROOT}usr/src/linux ] 341 local MAKELINK=0
199 then 342
343 # if we have USE=symlink, then force K_SYMLINK=1
344 use symlink && K_SYMLINK=1
345
346 # if we are to forcably symlink, delete it if it already exists first.
347 if [[ -n ${K_SYMLINK} ]]; then
200 ln -sf ${ROOT}usr/src/linux-${KV} ${ROOT}usr/src/linux 348 [[ -h ${ROOT}usr/src/linux ]] && rm ${ROOT}usr/src/linux
349 MAKELINK=1
350 fi
351
352 # if the link doesnt exist, lets create it
353 [[ ! -h ${ROOT}usr/src/linux ]] && MAKELINK=1
354
355 if [[ ${MAKELINK} == 1 ]]; then
356 cd ${ROOT}usr/src
357 ln -sf linux-${KV_FULL} linux
358 cd ${OLDPWD}
201 fi 359 fi
202 360
203 # Don't forget to make directory for sysfs 361 # Don't forget to make directory for sysfs
204 [ ! -d "${ROOT}/sys" -a $(kernel_is_2_6) $? == 0 ] && mkdir /sys 362 [[ ! -d ${ROOT}sys ]] && kernel_is 2 6 && mkdir /sys
205 363
206 echo 364 echo
207 einfo "After installing a new kernel of any version, it is important" 365 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" 366 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)" 367 einfo "created (X.Y is the first 2 parts of your new kernel version)"
210 echo 368 echo
211 einfo "For example, this kernel will require:" 369 einfo "For example, this kernel will require:"
212 einfo "/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}" 370 einfo "/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}"
213 echo 371 echo
214 372
215 # if K_EXTRAEINFO is set then lets display it now 373 # if K_EXTRAEINFO is set then lets display it now
216 if [ -n "${K_EXTRAEINFO}" ] 374 if [[ -n ${K_EXTRAEINFO} ]]; then
217 then
218 echo ${K_EXTRAEINFO} | fmt | 375 echo ${K_EXTRAEINFO} | fmt |
219 while read -s ELINE 376 while read -s ELINE; do einfo "${ELINE}"; done
220 do
221 einfo "${ELINE}"
222 done
223
224 echo
225 fi 377 fi
226 378
227 # if K_EXTRAEWARN is set then lets display it now 379 # if K_EXTRAEWARN is set then lets display it now
228 if [ -n "${K_EXTRAEWARN}" ] 380 if [[ -n ${K_EXTRAEWARN} ]]; then
229 then
230 echo ${K_EXTRAEWARN} | fmt | 381 echo ${K_EXTRAEWARN} | fmt |
231 while read -s ELINE 382 while read -s ELINE; do ewarn "${ELINE}"; done
232 do
233 ewarn "${ELINE}"
234 done
235
236 echo
237 fi 383 fi
238} 384}
239 385
240postinst_headers() { 386postinst_headers() {
241 echo
242 einfo "Kernel headers are usually only used when recompiling glibc." 387 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" 388 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" 389 einfo "emerge glibc"
246 einfo "Failure to do so will cause glibc to not make use of newer" 390 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." 391 einfo "headers."
248 echo
249} 392}
250 393
251# pkg_setup functions 394# pkg_setup functions
252#============================================================== 395#==============================================================
253setup_headers() { 396setup_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/-*/}" 397 [[ -z ${H_SUPPORTEDARCH} ]] && H_SUPPORTEDARCH=${PN/-*/}
258 for i in ${H_SUPPORTEDARCH} 398 for i in ${H_SUPPORTEDARCH}; do
259 do
260 [ "${ARCH}" == "${i}" ] && H_ACCEPT_ARCH="yes" 399 [[ $(tc-arch) == "${i}" ]] && H_ACCEPT_ARCH="yes"
261 done 400 done
262 401
263 if [ "${H_ACCEPT_ARCH}" != "yes" ] 402 if [[ ${H_ACCEPT_ARCH} != "yes" ]]; then
264 then
265 echo 403 echo
266 eerror "This version of ${PN} does not support ${ARCH}." 404 eerror "This version of ${PN} does not support ${ARCH}."
267 eerror "Please merge the appropriate sources, in most cases" 405 eerror "Please merge the appropriate sources, in most cases"
268 eerror "this will be ${ARCH}-headers." 406 eerror "(but not all) this will be called ${ARCH}-headers."
269 die "incorrect headers" 407 die "Package unsupported for ${ARCH}"
270 fi 408 fi
271} 409}
272 410
273# unipatch 411# unipatch
274#============================================================== 412#==============================================================
275unipatch() { 413unipatch() {
276 local i 414 local i x extention PIPE_CMD UNIPATCH_DROP KPATCH_DIR PATCH_DEPTH ELINE
277 local x 415 local STRICT_COUNT PATCH_LEVEL myLC_ALL
278 local extention 416
279 local PIPE_CMD 417 # set to a standard locale to ensure sorts are ordered properly.
280 local UNIPATCH_EXCLUDE 418 myLC_ALL="${LC_ALL}"
281 local KPATCH_DIR 419 LC_ALL="C"
282 local PATCH_DEPTH
283 local ELINE
284 420
285 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/" 421 [ -z "${KPATCH_DIR}" ] && KPATCH_DIR="${WORKDIR}/patches/"
286 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR} 422 [ ! -d ${KPATCH_DIR} ] && mkdir -p ${KPATCH_DIR}
287 423
424 # We're gonna need it when doing patches with a predefined patchlevel
425 shopt -s extglob
426
288 # This function will unpack all passed tarballs, add any passed patches, and remove any passed patchnumbers 427 # 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 428 # usage can be either via an env var or by params
429 # although due to the nature we pass this within this eclass
430 # it shall be by param only.
290 [ -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}" 431 # -z "${UNIPATCH_LIST}" ] && UNIPATCH_LIST="${@}"
432 UNIPATCH_LIST="${@}"
291 433
292 #unpack any passed tarballs 434 #unpack any passed tarballs
293 for i in ${UNIPATCH_LIST} 435 for i in ${UNIPATCH_LIST}; do
294 do
295 if [ -n "$(echo ${i} | grep -e "\.tar" -e "\.tbz" -e "\.tgz")" ] 436 if [ -n "$(echo ${i} | grep -e "\.tar" -e "\.tbz" -e "\.tgz")" ]; then
296 then
297 extention=${i/*./} 437 extention=${i/*./}
438 extention=${extention/:*/}
298 case ${extention} in 439 case ${extention} in
299 tbz2) PIPE_CMD="tar -xvjf";; 440 tbz2) PIPE_CMD="tar -xvjf";;
300 bz2) PIPE_CMD="tar -xvjf";; 441 bz2) PIPE_CMD="tar -xvjf";;
301 tgz) PIPE_CMD="tar -xvzf";; 442 tgz) PIPE_CMD="tar -xvzf";;
302 gz) PIPE_CMD="tar -xvzf";; 443 gz) PIPE_CMD="tar -xvzf";;
303 *) eerror "Unrecognized tarball compression" 444 *) eerror "Unrecognized tarball compression"
304 die "Unrecognized tarball compression";; 445 die "Unrecognized tarball compression";;
305 esac 446 esac
306 447
448 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
449 STRICT_COUNT=$((${STRICT_COUNT} + 1))
450 mkdir -p ${KPATCH_DIR}/${STRICT_COUNT}/
451 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR}/${STRICT_COUNT}/ 1>/dev/null
452 else
307 ${PIPE_CMD} ${i} -C ${KPATCH_DIR} 1>/dev/null 453 ${PIPE_CMD} ${i/:*/} -C ${KPATCH_DIR} 1>/dev/null
454 fi
455
308 if [ $? == 0 ] 456 if [ $? == 0 ]; then
309 then
310 einfo "${i/*\//} unpacked" 457 einfo "${i/*\//} unpacked"
458 [ -n "$(echo ${i} | grep ':')" ] && echo ">>> Strict patch levels not currently supported for tarballed patchsets"
311 else 459 else
312 eerror "Failed to unpack ${i}" 460 eerror "Failed to unpack ${i/:*/}"
313 die "unable to unpack patch tarball" 461 die "unable to unpack patch tarball"
314 fi 462 fi
463 else
464 extention=${i/*./}
465 extention=${extention/:*/}
466 PIPE_CMD=""
467 case ${extention} in
468 bz2) PIPE_CMD="bzip2 -dc";;
469 patch) PIPE_CMD="cat";;
470 diff) PIPE_CMD="cat";;
471 gz|Z|z) PIPE_CMD="gzip -dc";;
472 ZIP|zip) PIPE_CMD="unzip -p";;
473 *) UNIPATCH_DROP="${UNIPATCH_DROP} ${i/:*/}";;
474 esac
315 475
316 UNIPATCH_LIST="${UNIPATCH_LIST/${i}/}" 476 PATCH_LEVEL=${i/*([^:])?(:)}
477 i=${i/:*/}
478 x=${i/*\//}
479 x=${x/\.${extention}/}
480
481 if [ -n "${PIPE_CMD}" ]; then
482 if [ ! -r "${i}" ]; then
483 echo
484 eerror "FATAL: unable to locate:"
485 eerror "${i}"
486 eerror "for read-only. The file either has incorrect permissions"
487 eerror "or does not exist."
488 die Unable to locate ${i}
489 fi
490
491 if [ -n "${UNIPATCH_STRICTORDER}" ]; then
492 STRICT_COUNT=$((${STRICT_COUNT} + 1))
493 mkdir -p ${KPATCH_DIR}/${STRICT_COUNT}/
494 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${STRICT_COUNT}/${x}.patch${PATCH_LEVEL})
495 else
496 $(${PIPE_CMD} ${i} > ${KPATCH_DIR}/${x}.patch${PATCH_LEVEL})
497 fi
498 fi
317 fi 499 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 500 done
337 501
338 #populate KPATCH_DIRS so we know where to look to remove the excludes 502 #populate KPATCH_DIRS so we know where to look to remove the excludes
339 x=${KPATCH_DIR} 503 x=${KPATCH_DIR}
340 KPATCH_DIR="" 504 KPATCH_DIR=""
341 for i in $(find ${x} -type d) 505 for i in $(find ${x} -type d | sort -n); do
342 do
343 KPATCH_DIR="${KPATCH_DIR} ${i}" 506 KPATCH_DIR="${KPATCH_DIR} ${i}"
344 done 507 done
345 508
346 #so now lets get rid of the patchno's we want to exclude 509 #so now lets get rid of the patchno's we want to exclude
510 UNIPATCH_DROP="${UNIPATCH_EXCLUDE} ${UNIPATCH_DROP}"
347 for i in ${UNIPATCH_EXCLUDE} 511 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}" 512 ebegin "Excluding Patch #${i}"
355 einfo "From: ${x/${WORKDIR}/}" 513 for x in ${KPATCH_DIR}; do rm -f ${x}/${i}* 2>/dev/null; done
356 fi 514 eend $?
357 done
358 done 515 done
359 516
360 # and now, finally, we patch it :) 517 # and now, finally, we patch it :)
361 for x in ${KPATCH_DIR} 518 for x in ${KPATCH_DIR}; do
362 do
363 for i in $(find ${x} -maxdepth 1 -iname "*.patch" -or -iname "*.diff" | sort -u) 519 for i in $(find ${x} -maxdepth 1 -iname "*.patch*" -or -iname "*.diff*" | sort -n); do
364 do 520 STDERR_T="${T}/${i/*\//}"
521 STDERR_T="${STDERR_T/.patch*/.err}"
365 522
523 [ -z ${i/*.patch*/} ] && PATCH_DEPTH=${i/*.patch/}
524 [ -z ${i/*.diff*/} ] && PATCH_DEPTH=${i/*.diff/}
366 525
367 PATCH_DEPTH=0 526 if [ -z "${PATCH_DEPTH}" ]; then PATCH_DEPTH=0; fi
527
368 ebegin "Applying ${i/*\//}" 528 ebegin "Applying ${i/*\//} (-p${PATCH_DEPTH}+)"
369 while [ ${PATCH_DEPTH} -lt 5 ] 529 while [ ${PATCH_DEPTH} -lt 5 ]; do
370 do 530 echo "Attempting Dry-run:" >> ${STDERR_T}
371 if (patch -p${PATCH_DEPTH} --dry-run -f < ${i} >/dev/null) 531 echo "cmd: patch -p${PATCH_DEPTH} --dry-run -f < ${i}" >> ${STDERR_T}
372 then 532 echo "=======================================================" >> ${STDERR_T}
373 $(patch -p${PATCH_DEPTH} -f < ${i} >/dev/null) 533 if [ $(patch -p${PATCH_DEPTH} --dry-run -f < ${i} >> ${STDERR_T}) $? -eq 0 ]; then
374 if [ "$?" -eq 0 ] 534 echo "Attempting patch:" > ${STDERR_T}
375 then 535 echo "cmd: patch -p${PATCH_DEPTH} -f < ${i}" >> ${STDERR_T}
536 echo "=======================================================" >> ${STDERR_T}
537 if [ $(patch -p${PATCH_DEPTH} -f < ${i} >> ${STDERR_T}) "$?" -eq 0 ]; then
376 eend 0 538 eend 0
539 rm ${STDERR_T}
377 break 540 break
378 else 541 else
379 eend 1 542 eend 1
380 eerror "Failed to apply patch ${i/*\//}" 543 eerror "Failed to apply patch ${i/*\//}"
544 eerror "Please attach ${STDERR_T} to any bug you may post."
381 die "Failed to apply ${i/*\//}" 545 die "Failed to apply ${i/*\//}"
382 fi 546 fi
383 else 547 else
384 PATCH_DEPTH=$((${PATCH_DEPTH} + 1)) 548 PATCH_DEPTH=$((${PATCH_DEPTH} + 1))
385 fi 549 fi
386 done 550 done
387 if [ ${PATCH_DEPTH} -eq 5 ] 551 if [ ${PATCH_DEPTH} -eq 5 ]; then
388 then
389 eend 1 552 eend 1
553 eerror "Please attach ${STDERR_T} to any bug you may post."
390 die "Unable to dry-run patch." 554 die "Unable to dry-run patch."
391 fi 555 fi
392
393
394 done 556 done
395 done 557 done
396}
397 558
398# custom functions 559 # clean up KPATCH_DIR's - fixes bug #53610
399#============================================================== 560 for x in ${KPATCH_DIR}; do rm -Rf ${x}; done
561
562 LC_ALL="${myLC_ALL}"
563}
564
565# getfilevar accepts 2 vars as follows:
566# getfilevar <VARIABLE> <CONFIGFILE>
567# pulled from linux-info
568
569getfilevar() {
570 local workingdir basefname basedname xarch=$(tc-arch-kernel)
571
572 if [[ -z ${1} ]] && [[ ! -f ${2} ]]; then
573 ebeep
574 echo -e "\n"
575 eerror "getfilevar requires 2 variables, with the second a valid file."
576 eerror " getfilevar <VARIABLE> <CONFIGFILE>"
577 else
578 workingdir=${PWD}
579 basefname=$(basename ${2})
580 basedname=$(dirname ${2})
581 unset ARCH
582
583 cd ${basedname}
584 echo -e "include ${basefname}\ne:\n\t@echo \$(${1})" | \
585 make ${BUILD_FIXES} -f - e 2>/dev/null
586 cd ${workingdir}
587
588 ARCH=${xarch}
589 fi
590}
591
400detect_version() { 592detect_version() {
401 # this function will detect and set 593 # this function will detect and set
402 # - OKV: Original Kernel Version (2.6.0/2.6.0-test11) 594 # - 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) 595 # - KV: Kernel Version (2.6.0-gentoo/2.6.0-test11-gentoo-r1)
404 # - EXTRAVERSION: The additional version appended to OKV (-gentoo/-gentoo-r1) 596 # - EXTRAVERSION: The additional version appended to OKV (-gentoo/-gentoo-r1)
405 597
598 if [[ -n ${KV_FULL} ]]; then
599 # we will set this for backwards compatibility.
600 KV=${KV_FULL}
601
602 # we know KV_FULL so lets stop here. but not without resetting S
603 S=${WORKDIR}/linux-${KV_FULL}
604 return
605 fi
606
607 # CKV is used as a comparison kernel version, which is used when
608 # PV doesnt reflect the genuine kernel version.
609 # this gets set to the portage style versioning. ie:
610 # CKV=2.6.11_rc4
611 CKV=${CKV:-${PV}}
612 OKV=${OKV:-${CKV}}
406 OKV=${PV/_beta/-test} 613 OKV=${OKV/_beta/-test}
407 OKV=${OKV/_rc/-rc} 614 OKV=${OKV/_rc/-rc}
408 OKV=${OKV/_pre*/}
409 OKV=${OKV/-r*/} 615 OKV=${OKV/-r*}
410 616 OKV=${OKV/_p*}
411 KV_MAJOR=$(echo ${OKV} | cut -d. -f1) 617
412 KV_MINOR=$(echo ${OKV} | cut -d. -f2) 618 KV_MAJOR=$(get_version_component_range 1 ${OKV})
413 KV_PATCH=$(echo ${OKV} | cut -d. -f3) 619 KV_MINOR=$(get_version_component_range 2 ${OKV})
620 KV_PATCH=$(get_version_component_range 3- ${OKV})
414 KV_PATCH=${KV_PATCH/[-_]*/} 621 KV_PATCH=${KV_PATCH/[-_]*}
415 622
416 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2" 623 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
417 624
418 RELEASE=${PV/${OKV}/} 625 RELEASE=${CKV/${OKV}}
419 RELEASE=${RELEASE/_beta/} 626 RELEASE=${RELEASE/_beta}
420 RELEASE=${RELEASE/_rc/-rc} 627 RELEASE=${RELEASE/_rc/-rc}
421 RELEASE=${RELEASE/_pre/-bk} 628 RELEASE=${RELEASE/_pre/-pre}
629 kernel_is_2_6 && RELEASE=${RELEASE/-pre/-bk}
422 RELEASETYPE=${RELEASE//[0-9]/} 630 RELEASETYPE=${RELEASE//[0-9]}
423 631
632 # Now we know that RELEASE is the -rc/-bk
633 # and RELEASETYPE is the same but with its numerics stripped
634 # we can work on better sorting EXTRAVERSION.
635 # first of all, we add the release
424 EXTRAVERSION="${RELEASE}" 636 EXTRAVERSION="${RELEASE}"
425 637
426 if [ -n "${K_PREPATCHED}" ] 638 if [[ -n ${K_PREPATCHED} ]]; then
427 then 639 EXTRAVERSION="${EXTRAVERSION}-${PN/-*}${PR/r}"
428 KV="${OKV}-${PN/-*/}${PR/r/}" 640 elif [[ "${ETYPE}" = "sources" ]]; then
429 else 641 # For some sources we want to use the PV in the extra version
642 # This is because upstream releases with a completely different
643 # versioning scheme.
644 case ${PN/-*} in
645 wolk) K_USEPV=1;;
646 vserver) K_USEPV=1;;
647 esac
648
430 [ -z "${K_NOUSENAME}" ] && EXTRAVERSION="${EXTRAVERSION}-${PN/-*/}" 649 [[ -z ${K_NOUSENAME} ]] && EXTRAVERSION="${EXTRAVERSION}-${PN/-*}"
650 [[ -n ${K_USEPV} ]] && EXTRAVERSION="${EXTRAVERSION}-${PV//_/-}"
431 [ ! "${PR}" == "r0" ] && EXTRAVERSION="${EXTRAVERSION}-${PR}" 651 [[ -n ${PR//r0} ]] && EXTRAVERSION="${EXTRAVERSION}-${PR}"
432 652 fi
653
433 KV=${OKV}${EXTRAVERSION} 654 KV_FULL=${OKV}${EXTRAVERSION}
434 fi 655
435 656 # -rc-bk pulls can be achieved by specifying CKV
436 # -rcXX-bkXX pulls are *IMPOSSIBLE* to support within the portage naming convention 657 # for example:
437 # these cannot be supported, but the code here can handle it up until this point 658 # CKV="2.6.11_rc3_pre2"
438 # and theoretically thereafter. 659 # will pull:
439 660 # linux-2.6.10.tar.bz2 & patch-2.6.11-rc3.bz2 & patch-2.6.11-rc3-bk2.bz2
440 if [ "${RELEASETYPE}" == "-rc" ] 661
441 then 662 if [[ ${RELEASETYPE} == -rc ]] || [[ ${RELEASETYPE} == -pre ]]; then
442 OKV="${KV_MAJOR}.${KV_MINOR}.$([ $((${KV_PATCH} - 1)) -lt 0 ] && echo ${KV_PATCH} || echo $((${KV_PATCH} - 1)))" 663 OKV="${KV_MAJOR}.${KV_MINOR}.$((${KV_PATCH} - 1))"
443 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/testing/patch-${PV//_/-}.bz2 664 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" 665 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
445 UNIPATCH_LIST="${DISTDIR}/patch-${PV//_/-}.bz2 ${UNIPATCH_LIST}" 666 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${CKV//_/-}.bz2"
446 [ -n "${K_PREPATCHED}" ] && KV="${PV/[-_]*/}${EXTRAVERSION}-${PN/-*/}${PR/r/}" || KV=${PV/[-_]*/}${EXTRAVERSION}
447 fi 667 fi
448 668
449 if [ "${RELEASETYPE}" == "-bk" ] 669 if [[ ${RELEASETYPE} == -bk ]]; then
450 then 670 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${OKV}${RELEASE}.bz2
671 mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/linux-${OKV}.tar.bz2"
672 UNIPATCH_LIST_DEFAULT="${DISTDIR}/patch-${OKV}${RELEASE}.bz2"
673 fi
674
675 if [[ ${RELEASETYPE} == -rc-bk ]]; then
451 OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}" 676 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 677 KERNEL_URI="mirror://kernel/linux/kernel/v${KV_MAJOR}.${KV_MINOR}/snapshots/patch-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${RELEASE}.bz2
678 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" 679 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}" 680 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 681 fi
457 682
458 if [ "${RELEASETYPE}" == "-rc-bk" ] 683 # 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} 684 S=${WORKDIR}/linux-${KV_FULL}
685 KV=${KV_FULL}
470} 686}
471 687
688detect_arch() {
689 # This function sets ARCH_URI and ARCH_PATCH
690 # with the neccessary info for the arch sepecific compatibility
691 # patchsets.
692
693 local ALL_ARCH LOOP_ARCH COMPAT_URI i
694
695 # COMPAT_URI is the contents of ${ARCH}_URI
696 # ARCH_URI is the URI for all the ${ARCH}_URI patches
697 # ARCH_PATCH is ARCH_URI broken into files for UNIPATCH
698
699 ARCH_URI=""
700 ARCH_PATCH=""
701 ALL_ARCH="X86 PPC PPC64 SPARC MIPS ALPHA ARM HPPA AMD64 IA64 X86OBSD S390 SH"
702
703 for LOOP_ARCH in ${ALL_ARCH}; do
704 COMPAT_URI="${LOOP_ARCH}_URI"
705 COMPAT_URI="${!COMPAT_URI}"
706
707 [[ -n ${COMPAT_URI} ]] && \
708 ARCH_URI="${ARCH_URI} $(echo ${LOOP_ARCH} | tr '[:upper:]' '[:lower:]')? ( ${COMPAT_URI} )"
709
710 if [[ ${LOOP_ARCH} == "$(echo $(tc-arch-kernel) | tr '[:lower:]' '[:upper:]')" ]]; then
711 for i in ${COMPAT_URI}; do
712 ARCH_PATCH="${ARCH_PATCH} ${DISTDIR}/${i/*\//}"
713 done
714 fi
715 done
716}
717
718# sparc nastiness
719#==============================================================
720# This script generates the files in /usr/include/asm for sparc systems
721# during installation of sys-kernel/linux-headers.
722# Will no longer be needed when full 64 bit support is used on sparc64
723# systems.
724#
725# Shamefully ripped from Debian
726# ----------------------------------------------------------------------
727
728# Idea borrowed from RedHat's kernel package
729
730# This is gonna get replaced by something in multilib.eclass soon...
731# --eradicator
732generate_sparc_asm() {
733 local name
734
735 cd $1 || die
736 mkdir asm
737
738 for h in `( ls asm-sparc; ls asm-sparc64 ) | grep '\.h$' | sort -u`; do
739 name="$(echo $h | tr a-z. A-Z_)"
740 # common header
741 echo "/* All asm/ files are generated and point to the corresponding
742 * file in asm-sparc or asm-sparc64.
743 */
744
745#ifndef __SPARCSTUB__${name}__
746#define __SPARCSTUB__${name}__
747" > asm/${h}
748
749 # common for sparc and sparc64
750 if [ -f asm-sparc/$h -a -f asm-sparc64/$h ]; then
751 echo "#ifdef __arch64__
752#include <asm-sparc64/$h>
753#else
754#include <asm-sparc/$h>
755#endif
756" >> asm/${h}
757
758 # sparc only
759 elif [ -f asm-sparc/$h ]; then
760echo "#ifndef __arch64__
761#include <asm-sparc/$h>
762#endif
763" >> asm/${h}
764
765 # sparc64 only
766 else
767echo "#ifdef __arch64__
768#include <asm-sparc64/$h>
769#endif
770" >> asm/${h}
771 fi
772
773 # common footer
774 echo "#endif /* !__SPARCSTUB__${name}__ */" >> asm/${h}
775 done
776 return 0
777}
778
779headers___fix() {
780 # Voodoo to partially fix broken upstream headers.
781 # Issues with this function should go to plasmaroo.
782 sed -i \
783 -e "s/\([ "$'\t'"]\)u8\([ "$'\t'"]\)/\1__u8\2/g;" \
784 -e "s/\([ "$'\t'"]\)u16\([ "$'\t'"]\)/\1__u16\2/g;" \
785 -e "s/\([ "$'\t'"]\)u32\([ "$'\t'"]\)/\1__u32\2/g;" \
786 -e "s/\([ "$'\t'"]\)u64\([ "$'\t'"]\)/\1__u64\2/g;" \
787 -e "s/\([ "$'\t'"]\)s64\([ "$'\t'"]\)/\1__s64\2/g;" \
788 -e 's/ \(u\|s\)\(8\|16\|32\|64\)$/ __\1\2/g' \
789 -e 's/\([(, ]\)\(u\|s\)64\([, )]\)/\1__\264\3/g' \
790 "$@"
791}
472 792
473# common functions 793# common functions
474#============================================================== 794#==============================================================
475src_unpack() { 795kernel-2_src_unpack() {
476 [ -z "${OKV}" ] && OKV="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}" 796 universal_unpack
477 797
478 cd ${WORKDIR} 798 [[ -n ${UNIPATCH_LIST} ]] || [[ -n ${UNIPATCH_LIST_DEFAULT} ]] && \
479 unpack linux-${OKV}.tar.bz2 799 unipatch "${UNIPATCH_LIST_DEFAULT} ${UNIPATCH_LIST}"
480 if [ "${OKV}" != "${KV}" ] 800
481 then 801 [ -z "${K_NOSETEXTRAVERSION}" ] && \
482 mv linux-${OKV} linux-${KV} || die "Unable to move source tree to ${KV}." 802 unpack_set_extraversion
483 fi 803
804 kernel_is 2 4 && unpack_2_4
805}
806
807kernel-2_src_compile() {
484 cd ${S} 808 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 809 [[ ${ETYPE} == headers ]] && compile_headers
810 [[ ${ETYPE} == sources ]] && \
811 use doc && ! use arm && ! use s390 && compile_manpages
495} 812}
496 813
497pkg_preinst() { 814kernel-2_pkg_preinst() {
498 [ "${ETYPE}" == "headers" ] && preinst_headers 815 [[ ${ETYPE} == headers ]] && preinst_headers
499} 816}
500 817
501src_install() { 818kernel-2_src_install() {
502 install_universal 819 install_universal
503 [ "${ETYPE}" == "headers" ] && install_headers 820 [[ ${ETYPE} == headers ]] && install_headers
504 [ "${ETYPE}" == "sources" ] && install_sources 821 [[ ${ETYPE} == sources ]] && install_sources
505} 822}
506 823
507pkg_postinst() { 824kernel-2_pkg_postinst() {
508 [ "${ETYPE}" == "headers" ] && postinst_headers 825 [[ ${ETYPE} == headers ]] && postinst_headers
509 [ "${ETYPE}" == "sources" ] && postinst_sources 826 [[ ${ETYPE} == sources ]] && postinst_sources
510} 827}
511 828
512pkg_setup() { 829kernel-2_pkg_setup() {
513 [ "${ETYPE}" == "headers" ] && setup_headers 830 [[ ${ETYPE} == headers ]] && setup_headers
831 [[ ${ETYPE} == sources ]] && echo ">>> Preparing to unpack ..."
514} 832}

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

  ViewVC Help
Powered by ViewVC 1.1.20