/[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.70 Revision 1.85
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.70 2007/01/01 22:27:01 swegener Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/linux-mod.eclass,v 1.85 2008/10/31 21:25:56 dsd 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:
34 35
35# MODULE_NAMES - Detailed Overview 36# MODULE_NAMES - Detailed Overview
36# 37#
37# The structure of each MODULE_NAMES entry is as follows: 38# The structure of each MODULE_NAMES entry is as follows:
38# modulename(libdir:srcdir:objdir) 39# modulename(libdir:srcdir:objdir)
40#
41# modulename = name of the module file excluding the .ko
42# libdir = place in system modules directory where module is installed:
43# srcdir = place for ebuild to cd to before running make
44# objdir = place the .ko and objects are located after make runs
45#
46# To get an idea of how these variables are used, here's a few lines
47# of code from around line 540 in this eclass:
48#
49# einfo "Installing ${modulename} module"
50# cd ${objdir} || die "${objdir} does not exist"
51# insinto /lib/modules/${KV_FULL}/${libdir}
52# doins ${modulename}.${KV_OBJ} || die "doins ${modulename}.${KV_OBJ} failed"
53#
39# for example: 54# for example:
40# MODULE_NAMES="module_pci(pci:${S}/pci:${S}) module_usb(usb:${S}/usb:${S})" 55# MODULE_NAMES="module_pci(pci:${S}/pci:${S}) module_usb(usb:${S}/usb:${S})"
41# 56#
42# what this would do is 57# what this would do is
43# cd ${S}/pci 58# cd ${S}/pci
54# 69#
55# if the srcdir isnt specified, it assumes ${S} 70# if the srcdir isnt specified, it assumes ${S}
56# if the libdir isnt specified, it assumes misc. 71# if the libdir isnt specified, it assumes misc.
57# if the objdir isnt specified, it assumes srcdir 72# if the objdir isnt specified, it assumes srcdir
58 73
59# There is also support for automatyed modules.d file generation. 74# 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. 75# This can be explicitly enabled by setting any of the following variables.
61# 76#
62# 77#
63# MODULESD_${modulename}_ENABLED This enables the modules.d file 78# MODULESD_${modulename}_ENABLED This enables the modules.d file
64# generation even if we dont 79# generation even if we dont
181} 196}
182 197
183update_modules() { 198update_modules() {
184 debug-print-function ${FUNCNAME} $* 199 debug-print-function ${FUNCNAME} $*
185 200
186 if [ -x /sbin/modules-update ] && \ 201 if [ -x /sbin/update-modules ] && \
187 grep -v -e "^#" -e "^$" ${D}/etc/modules.d/* >/dev/null 2>&1; then 202 grep -v -e "^#" -e "^$" ${D}/etc/modules.d/* >/dev/null 2>&1; then
188 ebegin "Updating modules.conf" 203 ebegin "Updating modules.conf"
189 /sbin/modules-update 204 /sbin/update-modules
205 eend $?
206 elif [ -x /sbin/update-modules ] && \
207 grep -v -e "^#" -e "^$" ${D}/etc/modules.d/* >/dev/null 2>&1; then
208 ebegin "Updating modules.conf"
209 /sbin/update-modules
190 eend $? 210 eend $?
191 fi 211 fi
192} 212}
193 213
194move_old_moduledb() { 214move_old_moduledb() {
214 234
215 if [[ ! -f ${MODULEDB_DIR}/moduledb ]]; then 235 if [[ ! -f ${MODULEDB_DIR}/moduledb ]]; then
216 [[ ! -d ${MODULEDB_DIR} ]] && mkdir -p ${MODULEDB_DIR} 236 [[ ! -d ${MODULEDB_DIR} ]] && mkdir -p ${MODULEDB_DIR}
217 touch ${MODULEDB_DIR}/moduledb 237 touch ${MODULEDB_DIR}/moduledb
218 fi 238 fi
239
219 if [[ -z $(grep ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb) ]]; then 240 if ! grep -qs ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb ; then
220 einfo "Adding module to moduledb." 241 einfo "Adding module to moduledb."
221 echo "a:1:${CATEGORY}/${PN}-${PVR}" >> ${MODULEDB_DIR}/moduledb 242 echo "a:1:${CATEGORY}/${PN}-${PVR}" >> ${MODULEDB_DIR}/moduledb
222 fi 243 fi
223} 244}
224 245
226 debug-print-function ${FUNCNAME} $* 247 debug-print-function ${FUNCNAME} $*
227 248
228 local MODULEDB_DIR=${ROOT}/var/lib/module-rebuild/ 249 local MODULEDB_DIR=${ROOT}/var/lib/module-rebuild/
229 move_old_moduledb 250 move_old_moduledb
230 251
231 if [[ -n $(grep ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb) ]]; then 252 if grep -qs ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb ; then
232 einfo "Removing ${CATEGORY}/${PN}-${PVR} from moduledb." 253 einfo "Removing ${CATEGORY}/${PN}-${PVR} from moduledb."
233 sed -ie "/.*${CATEGORY}\/${PN}-${PVR}.*/d" ${MODULEDB_DIR}/moduledb 254 sed -i -e "/.*${CATEGORY}\/${PN}-${PVR}.*/d" ${MODULEDB_DIR}/moduledb
234 fi 255 fi
235} 256}
236 257
237set_kvobj() { 258set_kvobj() {
238 debug-print-function ${FUNCNAME} $* 259 debug-print-function ${FUNCNAME} $*
248 # einfo "Using KV_OBJ=${KV_OBJ}" 269 # einfo "Using KV_OBJ=${KV_OBJ}"
249} 270}
250 271
251get-KERNEL_CC() { 272get-KERNEL_CC() {
252 debug-print-function ${FUNCNAME} $* 273 debug-print-function ${FUNCNAME} $*
274
275 if [[ -n ${KERNEL_CC} ]] ; then
276 echo "${KERNEL_CC}"
277 return
278 fi
253 279
254 local kernel_cc 280 local kernel_cc
255 if [ -n "${KERNEL_ABI}" ]; then 281 if [ -n "${KERNEL_ABI}" ]; then
256 # In future, an arch might want to define CC_$ABI 282 # In future, an arch might want to define CC_$ABI
257 #kernel_cc="$(get_abi_CC)" 283 #kernel_cc="$(get_abi_CC)"
395 fi 421 fi
396 422
397 #----------------------------------------------------------------------- 423 #-----------------------------------------------------------------------
398 424
399 # then we install it 425 # then we install it
426 if kernel_is ge 2 6; then
427 insinto /etc/modprobe.d
428 else
400 insinto /etc/modules.d 429 insinto /etc/modules.d
430 fi
401 newins ${module_config} ${currm_path//*\/} 431 newins ${module_config} ${currm_path//*\/}
402 432
403 # and install any documentation we might have. 433 # and install any documentation we might have.
404 [[ -n ${module_docs} ]] && dodoc ${module_docs} 434 [[ -n ${module_docs} ]] && dodoc ${module_docs}
405 done 435 done
454 484
455linux-mod_pkg_setup() { 485linux-mod_pkg_setup() {
456 debug-print-function ${FUNCNAME} $* 486 debug-print-function ${FUNCNAME} $*
457 487
458 linux-info_pkg_setup; 488 linux-info_pkg_setup;
489 require_configured_kernel
459 check_kernel_built; 490 check_kernel_built;
460 strip_modulenames; 491 strip_modulenames;
461 [[ -n ${MODULE_NAMES} ]] && check_modules_supported 492 [[ -n ${MODULE_NAMES} ]] && check_modules_supported
462 set_kvobj; 493 set_kvobj;
463 # Commented out with permission from johnm until a fixed version for arches 494 # Commented out with permission from johnm until a fixed version for arches
476} 507}
477 508
478linux-mod_src_compile() { 509linux-mod_src_compile() {
479 debug-print-function ${FUNCNAME} $* 510 debug-print-function ${FUNCNAME} $*
480 511
481 local modulename libdir srcdir objdir i n myARCH="${ARCH}" myABI="${ABI}" 512 local modulename libdir srcdir objdir i n myABI="${ABI}"
482 ARCH="$(tc-arch-kernel)" 513 set_arch_to_kernel
483 ABI="${KERNEL_ABI}" 514 ABI="${KERNEL_ABI}"
484 515
485 BUILD_TARGETS=${BUILD_TARGETS:-clean module} 516 BUILD_TARGETS=${BUILD_TARGETS:-clean module}
517 strip_modulenames;
518 cd "${S}"
519 for i in ${MODULE_NAMES}
520 do
521 unset libdir srcdir objdir
522 for n in $(find_module_params ${i})
523 do
524 eval ${n/:*}=${n/*:/}
525 done
526 libdir=${libdir:-misc}
527 srcdir=${srcdir:-${S}}
528 objdir=${objdir:-${srcdir}}
529
530 if [ ! -f "${srcdir}/.built" ];
531 then
532 cd ${srcdir}
533 einfo "Preparing ${modulename} module"
534 if [[ -n ${ECONF_PARAMS} ]]
535 then
536 econf ${ECONF_PARAMS} || \
537 die "Unable to run econf ${ECONF_PARAMS}"
538 fi
539
540 # This looks messy, but it is needed to handle multiple variables
541 # being passed in the BUILD_* stuff where the variables also have
542 # spaces that must be preserved. If don't do this, then the stuff
543 # inside the variables gets used as targets for Make, which then
544 # fails.
545 eval "emake HOSTCC=\"$(tc-getBUILD_CC)\" \
546 CROSS_COMPILE=${CHOST}- \
547 LDFLAGS=\"$(get_abi_LDFLAGS)\" \
548 ${BUILD_FIXES} \
549 ${BUILD_PARAMS} \
550 ${BUILD_TARGETS} " \
551 || die "Unable to emake HOSTCC="$(tc-getBUILD_CC)" CROSS_COMPILE=${CHOST}- LDFLAGS="$(get_abi_LDFLAGS)" ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS}"
552 touch ${srcdir}/.built
553 cd ${OLDPWD}
554 fi
555 done
556
557 set_arch_to_portage
558 ABI="${myABI}"
559}
560
561linux-mod_src_install() {
562 debug-print-function ${FUNCNAME} $*
563
564 local modulename libdir srcdir objdir i n
565
486 strip_modulenames; 566 strip_modulenames;
487 for i in ${MODULE_NAMES} 567 for i in ${MODULE_NAMES}
488 do 568 do
489 unset libdir srcdir objdir 569 unset libdir srcdir objdir
490 for n in $(find_module_params ${i}) 570 for n in $(find_module_params ${i})
493 done 573 done
494 libdir=${libdir:-misc} 574 libdir=${libdir:-misc}
495 srcdir=${srcdir:-${S}} 575 srcdir=${srcdir:-${S}}
496 objdir=${objdir:-${srcdir}} 576 objdir=${objdir:-${srcdir}}
497 577
498 if [ ! -f "${srcdir}/.built" ];
499 then
500 cd ${srcdir}
501 einfo "Preparing ${modulename} module"
502 if [[ -n ${ECONF_PARAMS} ]]
503 then
504 econf ${ECONF_PARAMS} || \
505 die "Unable to run econf ${ECONF_PARAMS}"
506 fi
507
508 emake HOSTCC="$(tc-getBUILD_CC)" CC="$(get-KERNEL_CC)" LDFLAGS="$(get_abi_LDFLAGS)" \
509 ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS} \
510 || die "Unable to make ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS}."
511 touch ${srcdir}/.built
512 cd ${OLDPWD}
513 fi
514 done
515
516 ARCH="${myARCH}"
517 ABI="${myABI}"
518}
519
520linux-mod_src_install() {
521 debug-print-function ${FUNCNAME} $*
522
523 local modulename libdir srcdir objdir i n
524
525 strip_modulenames;
526 for i in ${MODULE_NAMES}
527 do
528 unset libdir srcdir objdir
529 for n in $(find_module_params ${i})
530 do
531 eval ${n/:*}=${n/*:/}
532 done
533 libdir=${libdir:-misc}
534 srcdir=${srcdir:-${S}}
535 objdir=${objdir:-${srcdir}}
536
537 einfo "Installing ${modulename} module" 578 einfo "Installing ${modulename} module"
538 cd ${objdir} || die "${objdir} does not exist" 579 cd ${objdir} || die "${objdir} does not exist"
539 insinto /lib/modules/${KV_FULL}/${libdir} 580 insinto /lib/modules/${KV_FULL}/${libdir}
540 doins ${modulename}.${KV_OBJ} || die "doins ${modulename}.${KV_OBJ} failed" 581 doins ${modulename}.${KV_OBJ} || die "doins ${modulename}.${KV_OBJ} failed"
541 cd ${OLDPWD} 582 cd ${OLDPWD}
545} 586}
546 587
547linux-mod_pkg_preinst() { 588linux-mod_pkg_preinst() {
548 debug-print-function ${FUNCNAME} $* 589 debug-print-function ${FUNCNAME} $*
549 590
550 [ -d ${IMAGE}/lib/modules ] && UPDATE_DEPMOD=true || UPDATE_DEPMOD=false 591 [ -d "${D}lib/modules" ] && UPDATE_DEPMOD=true || UPDATE_DEPMOD=false
551 [ -d ${IMAGE}/etc/modules.d ] && UPDATE_MODULES=true || UPDATE_MODULES=false 592 [ -d "${D}etc/modules.d" ] && UPDATE_MODULES=true || UPDATE_MODULES=false
552 [ -d ${IMAGE}/lib/modules ] && UPDATE_MODULEDB=true || UPDATE_MODULEDB=false 593 [ -d "${D}lib/modules" ] && UPDATE_MODULEDB=true || UPDATE_MODULEDB=false
553} 594}
554 595
555linux-mod_pkg_postinst() { 596linux-mod_pkg_postinst() {
556 debug-print-function ${FUNCNAME} $* 597 debug-print-function ${FUNCNAME} $*
557 598

Legend:
Removed from v.1.70  
changed lines
  Added in v.1.85

  ViewVC Help
Powered by ViewVC 1.1.20