/[gentoo-x86]/eclass/linux-mod.eclass
Gentoo

Diff of /eclass/linux-mod.eclass

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

Revision 1.68 Revision 1.82
1# Copyright 1999-2004 Gentoo Foundation 1# Copyright 1999-2004 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/linux-mod.eclass,v 1.68 2006/10/16 14:10:46 genstef Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/linux-mod.eclass,v 1.82 2008/09/30 05:27:42 vapier Exp $
4 4
5# Description: This eclass is used to interface with linux-info in such a way 5# Description: This eclass is used to interface with linux-info in such a way
6# to provide the functionality required and initial functions 6# to provide the functionality required and initial functions
7# required to install external modules against a kernel source 7# required to install external modules against a kernel source
8# tree. 8# tree.
9# 9#
10# Maintainer: John Mylchreest <johnm@gentoo.org>, Stefan Schweizer <genstef@gentoo.org> 10# Author(s): John Mylchreest <johnm@gentoo.org>,
11# Copyright 2004 Gentoo Linux 11# Stefan Schweizer <genstef@gentoo.org>
12# Maintainer: kernel-misc@gentoo.org
12# 13#
13# Please direct your bugs to the current eclass maintainer :) 14# Please direct your bugs to the current eclass maintainer :)
14 15
15# 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
16# These are as follows: 17# These are as follows:
54# 55#
55# if the srcdir isnt specified, it assumes ${S} 56# if the srcdir isnt specified, it assumes ${S}
56# if the libdir isnt specified, it assumes misc. 57# if the libdir isnt specified, it assumes misc.
57# if the objdir isnt specified, it assumes srcdir 58# if the objdir isnt specified, it assumes srcdir
58 59
59# There is also support for automatyed modules.d file generation. 60# There is also support for automated modprobe.d/modules.d(2.4) file generation.
60# This can be explicitly enabled by setting any of the following variables. 61# This can be explicitly enabled by setting any of the following variables.
61# 62#
62# 63#
63# MODULESD_${modulename}_ENABLED This enables the modules.d file 64# MODULESD_${modulename}_ENABLED This enables the modules.d file
64# generation even if we dont 65# generation even if we dont
95 96
96# eclass utilities 97# eclass utilities
97# ---------------------------------- 98# ----------------------------------
98 99
99check_vermagic() { 100check_vermagic() {
101 debug-print-function ${FUNCNAME} $*
102
100 local curr_gcc_ver=$(gcc -dumpversion) 103 local curr_gcc_ver=$(gcc -dumpversion)
101 local tmpfile old_chost old_gcc_ver result=0 104 local tmpfile old_chost old_gcc_ver result=0
102 105
103 tmpfile=`find ${KV_DIR}/ -iname "*.o.cmd" -exec grep usr/lib/gcc {} \; -quit` 106 tmpfile=`find ${KV_DIR}/ -iname "*.o.cmd" -exec grep usr/lib/gcc {} \; -quit`
104 tmpfile=${tmpfile//*usr/lib} 107 tmpfile=${tmpfile//*usr/lib}
132 die "GCC Version Mismatch." 135 die "GCC Version Mismatch."
133 fi 136 fi
134} 137}
135 138
136use_m() { 139use_m() {
140 debug-print-function ${FUNCNAME} $*
141
137 # if we haven't determined the version yet, we need too. 142 # if we haven't determined the version yet, we need too.
138 get_version; 143 get_version;
139 144
140 # if the kernel version is greater than 2.6.6 then we should use 145 # if the kernel version is greater than 2.6.6 then we should use
141 # M= instead of SUBDIRS= 146 # M= instead of SUBDIRS=
142 [ ${KV_MAJOR} -eq 2 -a ${KV_MINOR} -gt 5 -a ${KV_PATCH} -gt 5 ] && \ 147 [ ${KV_MAJOR} -eq 2 -a ${KV_MINOR} -gt 5 -a ${KV_PATCH} -gt 5 ] && \
143 return 0 || return 1 148 return 0 || return 1
144} 149}
145 150
146convert_to_m() { 151convert_to_m() {
152 debug-print-function ${FUNCNAME} $*
153
147 if use_m 154 if use_m
148 then 155 then
149 [ ! -f "${1}" ] && \ 156 [ ! -f "${1}" ] && \
150 die "convert_to_m() requires a filename as an argument" 157 die "convert_to_m() requires a filename as an argument"
151 ebegin "Converting ${1/${WORKDIR}\//} to use M= instead of SUBDIRS=" 158 ebegin "Converting ${1/${WORKDIR}\//} to use M= instead of SUBDIRS="
153 eend $? 160 eend $?
154 fi 161 fi
155} 162}
156 163
157update_depmod() { 164update_depmod() {
165 debug-print-function ${FUNCNAME} $*
166
158 # if we haven't determined the version yet, we need too. 167 # if we haven't determined the version yet, we need too.
159 get_version; 168 get_version;
160 169
161 ebegin "Updating module dependencies for ${KV_FULL}" 170 ebegin "Updating module dependencies for ${KV_FULL}"
162 if [ -r ${KV_OUT_DIR}/System.map ] 171 if [ -r ${KV_OUT_DIR}/System.map ]
171 ewarn 180 ewarn
172 fi 181 fi
173} 182}
174 183
175update_modules() { 184update_modules() {
185 debug-print-function ${FUNCNAME} $*
186
176 if [ -x /sbin/modules-update ] && \ 187 if [ -x /sbin/update-modules ] && \
177 grep -v -e "^#" -e "^$" ${D}/etc/modules.d/* >/dev/null 2>&1; then 188 grep -v -e "^#" -e "^$" ${D}/etc/modules.d/* >/dev/null 2>&1; then
178 ebegin "Updating modules.conf" 189 ebegin "Updating modules.conf"
179 /sbin/modules-update 190 /sbin/update-modules
180 eend $? 191 eend $?
192 elif [ -x /sbin/update-modules ] && \
193 grep -v -e "^#" -e "^$" ${D}/etc/modules.d/* >/dev/null 2>&1; then
194 ebegin "Updating modules.conf"
195 /sbin/update-modules
196 eend $?
181 fi 197 fi
182} 198}
183 199
184move_old_moduledb() { 200move_old_moduledb() {
201 debug-print-function ${FUNCNAME} $*
202
185 local OLDDIR=${ROOT}/usr/share/module-rebuild/ 203 local OLDDIR=${ROOT}/usr/share/module-rebuild/
186 local NEWDIR=${ROOT}/var/lib/module-rebuild/ 204 local NEWDIR=${ROOT}/var/lib/module-rebuild/
187 205
188 if [[ -f ${OLDDIR}/moduledb ]]; then 206 if [[ -f ${OLDDIR}/moduledb ]]; then
189 [[ ! -d ${NEWDIR} ]] && mkdir -p ${NEWDIR} 207 [[ ! -d ${NEWDIR} ]] && mkdir -p ${NEWDIR}
193 rmdir ${OLDDIR} 211 rmdir ${OLDDIR}
194 fi 212 fi
195} 213}
196 214
197update_moduledb() { 215update_moduledb() {
216 debug-print-function ${FUNCNAME} $*
217
198 local MODULEDB_DIR=${ROOT}/var/lib/module-rebuild/ 218 local MODULEDB_DIR=${ROOT}/var/lib/module-rebuild/
199 move_old_moduledb 219 move_old_moduledb
200 220
201 if [[ ! -f ${MODULEDB_DIR}/moduledb ]]; then 221 if [[ ! -f ${MODULEDB_DIR}/moduledb ]]; then
202 [[ ! -d ${MODULEDB_DIR} ]] && mkdir -p ${MODULEDB_DIR} 222 [[ ! -d ${MODULEDB_DIR} ]] && mkdir -p ${MODULEDB_DIR}
203 touch ${MODULEDB_DIR}/moduledb 223 touch ${MODULEDB_DIR}/moduledb
204 fi 224 fi
225
205 if [[ -z $(grep ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb) ]]; then 226 if ! grep -qs ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb ; then
206 einfo "Adding module to moduledb." 227 einfo "Adding module to moduledb."
207 echo "a:1:${CATEGORY}/${PN}-${PVR}" >> ${MODULEDB_DIR}/moduledb 228 echo "a:1:${CATEGORY}/${PN}-${PVR}" >> ${MODULEDB_DIR}/moduledb
208 fi 229 fi
209} 230}
210 231
211remove_moduledb() { 232remove_moduledb() {
233 debug-print-function ${FUNCNAME} $*
234
212 local MODULEDB_DIR=${ROOT}/var/lib/module-rebuild/ 235 local MODULEDB_DIR=${ROOT}/var/lib/module-rebuild/
213 move_old_moduledb 236 move_old_moduledb
214 237
215 if [[ -n $(grep ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb) ]]; then 238 if grep -qs ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb ; then
216 einfo "Removing ${CATEGORY}/${PN}-${PVR} from moduledb." 239 einfo "Removing ${CATEGORY}/${PN}-${PVR} from moduledb."
217 sed -ie "/.*${CATEGORY}\/${PN}-${PVR}.*/d" ${MODULEDB_DIR}/moduledb 240 sed -i -e "/.*${CATEGORY}\/${PN}-${PVR}.*/d" ${MODULEDB_DIR}/moduledb
218 fi 241 fi
219} 242}
220 243
221set_kvobj() { 244set_kvobj() {
245 debug-print-function ${FUNCNAME} $*
246
222 if kernel_is 2 6 247 if kernel_is 2 6
223 then 248 then
224 KV_OBJ="ko" 249 KV_OBJ="ko"
225 else 250 else
226 KV_OBJ="o" 251 KV_OBJ="o"
229 # Lets silence it. 254 # Lets silence it.
230 # einfo "Using KV_OBJ=${KV_OBJ}" 255 # einfo "Using KV_OBJ=${KV_OBJ}"
231} 256}
232 257
233get-KERNEL_CC() { 258get-KERNEL_CC() {
259 debug-print-function ${FUNCNAME} $*
260
261 if [[ -n ${KERNEL_CC} ]] ; then
262 echo "${KERNEL_CC}"
263 return
264 fi
265
234 local kernel_cc 266 local kernel_cc
235 if [ -n "${KERNEL_ABI}" ]; then 267 if [ -n "${KERNEL_ABI}" ]; then
236 # In future, an arch might want to define CC_$ABI 268 # In future, an arch might want to define CC_$ABI
237 #kernel_cc="$(get_abi_CC)" 269 #kernel_cc="$(get_abi_CC)"
238 #[ -z "${kernel_cc}" ] && 270 #[ -z "${kernel_cc}" ] &&
239 kernel_cc="$(tc-getCC $(ABI=${KERNEL_ABI} get_abi_CHOST))" 271 kernel_cc="$(tc-getCC $(ABI=${KERNEL_ABI} get_abi_CHOST))"
240 else 272 else
241 kernel_cc=$(tc-getCC) 273 kernel_cc=$(tc-getCC)
242 fi 274 fi
243 echo "${kernel_cc}" 275 echo "${kernel_cc}"
244} 276}
245 277
246generate_modulesd() { 278generate_modulesd() {
279 debug-print-function ${FUNCNAME} $*
280
247 # This function will generate the neccessary modules.d file from the 281 # This function will generate the neccessary modules.d file from the
248 # information contained in the modules exported parms 282 # information contained in the modules exported parms
249 283
250 local currm_path currm currm_t t myIFS myVAR 284 local currm_path currm currm_t t myIFS myVAR
251 local module_docs module_enabled module_aliases \ 285 local module_docs module_enabled module_aliases \
373 fi 407 fi
374 408
375 #----------------------------------------------------------------------- 409 #-----------------------------------------------------------------------
376 410
377 # then we install it 411 # then we install it
412 if kernel_is ge 2 6; then
413 insinto /etc/modprobe.d
414 else
378 insinto /etc/modules.d 415 insinto /etc/modules.d
416 fi
379 newins ${module_config} ${currm_path//*\/} 417 newins ${module_config} ${currm_path//*\/}
380 418
381 # and install any documentation we might have. 419 # and install any documentation we might have.
382 [[ -n ${module_docs} ]] && dodoc ${module_docs} 420 [[ -n ${module_docs} ]] && dodoc ${module_docs}
383 done 421 done
384 eend 0 422 eend 0
385 return 0 423 return 0
386} 424}
387 425
388find_module_params() { 426find_module_params() {
427 debug-print-function ${FUNCNAME} $*
428
389 local matched_offset=0 matched_opts=0 test="${@}" temp_var result 429 local matched_offset=0 matched_opts=0 test="${@}" temp_var result
390 local i=0 y=0 z=0 430 local i=0 y=0 z=0
391 431
392 for((i=0; i<=${#test}; i++)) 432 for((i=0; i<=${#test}; i++))
393 do 433 do
427 467
428# default ebuild functions 468# default ebuild functions
429# -------------------------------- 469# --------------------------------
430 470
431linux-mod_pkg_setup() { 471linux-mod_pkg_setup() {
472 debug-print-function ${FUNCNAME} $*
473
432 linux-info_pkg_setup; 474 linux-info_pkg_setup;
475 require_configured_kernel
433 check_kernel_built; 476 check_kernel_built;
434 strip_modulenames; 477 strip_modulenames;
435 [[ -n ${MODULE_NAMES} ]] && check_modules_supported 478 [[ -n ${MODULE_NAMES} ]] && check_modules_supported
436 set_kvobj; 479 set_kvobj;
437 # Commented out with permission from johnm until a fixed version for arches 480 # Commented out with permission from johnm until a fixed version for arches
439 # introduced - Jason Wever <weeve@gentoo.org>, 23 Oct 2005 482 # introduced - Jason Wever <weeve@gentoo.org>, 23 Oct 2005
440 #check_vermagic; 483 #check_vermagic;
441} 484}
442 485
443strip_modulenames() { 486strip_modulenames() {
487 debug-print-function ${FUNCNAME} $*
488
444 local i 489 local i
445 for i in ${MODULE_IGNORE}; do 490 for i in ${MODULE_IGNORE}; do
446 MODULE_NAMES=${MODULE_NAMES//${i}(*} 491 MODULE_NAMES=${MODULE_NAMES//${i}(*}
447 done 492 done
448} 493}
449 494
450linux-mod_src_compile() { 495linux-mod_src_compile() {
496 debug-print-function ${FUNCNAME} $*
497
451 local modulename libdir srcdir objdir i n myARCH="${ARCH}" myABI="${ABI}" 498 local modulename libdir srcdir objdir i n myARCH="${ARCH}" myABI="${ABI}"
452 ARCH="$(tc-arch-kernel)" 499 ARCH="$(tc-arch-kernel)"
453 ABI="${KERNEL_ABI}" 500 ABI="${KERNEL_ABI}"
454 CC_HOSTCC=$(tc-getBUILD_CC)
455 CC_CC=$(get-KERNEL_CC)
456 501
457 BUILD_TARGETS=${BUILD_TARGETS:-clean module} 502 BUILD_TARGETS=${BUILD_TARGETS:-clean module}
503 strip_modulenames;
504 cd "${S}"
505 for i in ${MODULE_NAMES}
506 do
507 unset libdir srcdir objdir
508 for n in $(find_module_params ${i})
509 do
510 eval ${n/:*}=${n/*:/}
511 done
512 libdir=${libdir:-misc}
513 srcdir=${srcdir:-${S}}
514 objdir=${objdir:-${srcdir}}
515
516 if [ ! -f "${srcdir}/.built" ];
517 then
518 cd ${srcdir}
519 einfo "Preparing ${modulename} module"
520 if [[ -n ${ECONF_PARAMS} ]]
521 then
522 econf ${ECONF_PARAMS} || \
523 die "Unable to run econf ${ECONF_PARAMS}"
524 fi
525
526 # This looks messy, but it is needed to handle multiple variables
527 # being passed in the BUILD_* stuff where the variables also have
528 # spaces that must be preserved. If don't do this, then the stuff
529 # inside the variables gets used as targets for Make, which then
530 # fails.
531 eval "emake HOSTCC=\"$(tc-getBUILD_CC)\" \
532 CC=\"$(get-KERNEL_CC)\" \
533 LDFLAGS=\"$(get_abi_LDFLAGS)\" \
534 ${BUILD_FIXES} \
535 ${BUILD_PARAMS} \
536 ${BUILD_TARGETS} " \
537 || die "Unable to emake HOSTCC="$(tc-getBUILD_CC)" CC="$(get-KERNEL_CC)" LDFLAGS="$(get_abi_LDFLAGS)" ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS}"
538 touch ${srcdir}/.built
539 cd ${OLDPWD}
540 fi
541 done
542
543 ARCH="${myARCH}"
544 ABI="${myABI}"
545}
546
547linux-mod_src_install() {
548 debug-print-function ${FUNCNAME} $*
549
550 local modulename libdir srcdir objdir i n
551
458 strip_modulenames; 552 strip_modulenames;
459 for i in ${MODULE_NAMES} 553 for i in ${MODULE_NAMES}
460 do 554 do
461 unset libdir srcdir objdir 555 unset libdir srcdir objdir
462 for n in $(find_module_params ${i}) 556 for n in $(find_module_params ${i})
465 done 559 done
466 libdir=${libdir:-misc} 560 libdir=${libdir:-misc}
467 srcdir=${srcdir:-${S}} 561 srcdir=${srcdir:-${S}}
468 objdir=${objdir:-${srcdir}} 562 objdir=${objdir:-${srcdir}}
469 563
470 if [ ! -f "${srcdir}/.built" ];
471 then
472 cd ${srcdir}
473 einfo "Preparing ${modulename} module"
474 if [[ -n ${ECONF_PARAMS} ]]
475 then
476 econf ${ECONF_PARAMS} || \
477 die "Unable to run econf ${ECONF_PARAMS}"
478 fi
479
480 emake HOSTCC=${CC_HOSTCC} CC=${CC_CC} LDFLAGS="$(get_abi_LDFLAGS)" \
481 ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS} \
482 || die "Unable to make ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS}."
483 touch ${srcdir}/.built
484 cd ${OLDPWD}
485 fi
486 done
487
488 ARCH="${myARCH}"
489 ABI="${myABI}"
490}
491
492linux-mod_src_install() {
493 local modulename libdir srcdir objdir i n
494
495 strip_modulenames;
496 for i in ${MODULE_NAMES}
497 do
498 unset libdir srcdir objdir
499 for n in $(find_module_params ${i})
500 do
501 eval ${n/:*}=${n/*:/}
502 done
503 libdir=${libdir:-misc}
504 srcdir=${srcdir:-${S}}
505 objdir=${objdir:-${srcdir}}
506
507 einfo "Installing ${modulename} module" 564 einfo "Installing ${modulename} module"
508 cd ${objdir} || die "${objdir} does not exist" 565 cd ${objdir} || die "${objdir} does not exist"
509 insinto /lib/modules/${KV_FULL}/${libdir} 566 insinto /lib/modules/${KV_FULL}/${libdir}
510 doins ${modulename}.${KV_OBJ} || die "doins ${modulename}.${KV_OBJ} failed" 567 doins ${modulename}.${KV_OBJ} || die "doins ${modulename}.${KV_OBJ} failed"
511 cd ${OLDPWD} 568 cd ${OLDPWD}
513 generate_modulesd ${objdir}/${modulename} 570 generate_modulesd ${objdir}/${modulename}
514 done 571 done
515} 572}
516 573
517linux-mod_pkg_preinst() { 574linux-mod_pkg_preinst() {
575 debug-print-function ${FUNCNAME} $*
576
518 [ -d ${IMAGE}/lib/modules ] && UPDATE_DEPMOD=true || UPDATE_DEPMOD=false 577 [ -d "${D}lib/modules" ] && UPDATE_DEPMOD=true || UPDATE_DEPMOD=false
519 [ -d ${IMAGE}/etc/modules.d ] && UPDATE_MODULES=true || UPDATE_MODULES=false 578 [ -d "${D}etc/modules.d" ] && UPDATE_MODULES=true || UPDATE_MODULES=false
520 [ -d ${IMAGE}/lib/modules ] && UPDATE_MODULEDB=true || UPDATE_MODULEDB=false 579 [ -d "${D}lib/modules" ] && UPDATE_MODULEDB=true || UPDATE_MODULEDB=false
521} 580}
522 581
523linux-mod_pkg_postinst() { 582linux-mod_pkg_postinst() {
583 debug-print-function ${FUNCNAME} $*
584
524 ${UPDATE_DEPMOD} && update_depmod; 585 ${UPDATE_DEPMOD} && update_depmod;
525 ${UPDATE_MODULES} && update_modules; 586 ${UPDATE_MODULES} && update_modules;
526 ${UPDATE_MODULEDB} && update_moduledb; 587 ${UPDATE_MODULEDB} && update_moduledb;
527} 588}
528 589
529linux-mod_pkg_postrm() { 590linux-mod_pkg_postrm() {
591 debug-print-function ${FUNCNAME} $*
530 remove_moduledb; 592 remove_moduledb;
531} 593}

Legend:
Removed from v.1.68  
changed lines
  Added in v.1.82

  ViewVC Help
Powered by ViewVC 1.1.20