/[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.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.68 2006/10/16 14:10:46 genstef 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
95 110
96# eclass utilities 111# eclass utilities
97# ---------------------------------- 112# ----------------------------------
98 113
99check_vermagic() { 114check_vermagic() {
115 debug-print-function ${FUNCNAME} $*
116
100 local curr_gcc_ver=$(gcc -dumpversion) 117 local curr_gcc_ver=$(gcc -dumpversion)
101 local tmpfile old_chost old_gcc_ver result=0 118 local tmpfile old_chost old_gcc_ver result=0
102 119
103 tmpfile=`find ${KV_DIR}/ -iname "*.o.cmd" -exec grep usr/lib/gcc {} \; -quit` 120 tmpfile=`find ${KV_DIR}/ -iname "*.o.cmd" -exec grep usr/lib/gcc {} \; -quit`
104 tmpfile=${tmpfile//*usr/lib} 121 tmpfile=${tmpfile//*usr/lib}
132 die "GCC Version Mismatch." 149 die "GCC Version Mismatch."
133 fi 150 fi
134} 151}
135 152
136use_m() { 153use_m() {
154 debug-print-function ${FUNCNAME} $*
155
137 # if we haven't determined the version yet, we need too. 156 # if we haven't determined the version yet, we need too.
138 get_version; 157 get_version;
139 158
140 # if the kernel version is greater than 2.6.6 then we should use 159 # if the kernel version is greater than 2.6.6 then we should use
141 # M= instead of SUBDIRS= 160 # M= instead of SUBDIRS=
142 [ ${KV_MAJOR} -eq 2 -a ${KV_MINOR} -gt 5 -a ${KV_PATCH} -gt 5 ] && \ 161 [ ${KV_MAJOR} -eq 2 -a ${KV_MINOR} -gt 5 -a ${KV_PATCH} -gt 5 ] && \
143 return 0 || return 1 162 return 0 || return 1
144} 163}
145 164
146convert_to_m() { 165convert_to_m() {
166 debug-print-function ${FUNCNAME} $*
167
147 if use_m 168 if use_m
148 then 169 then
149 [ ! -f "${1}" ] && \ 170 [ ! -f "${1}" ] && \
150 die "convert_to_m() requires a filename as an argument" 171 die "convert_to_m() requires a filename as an argument"
151 ebegin "Converting ${1/${WORKDIR}\//} to use M= instead of SUBDIRS=" 172 ebegin "Converting ${1/${WORKDIR}\//} to use M= instead of SUBDIRS="
153 eend $? 174 eend $?
154 fi 175 fi
155} 176}
156 177
157update_depmod() { 178update_depmod() {
179 debug-print-function ${FUNCNAME} $*
180
158 # if we haven't determined the version yet, we need too. 181 # if we haven't determined the version yet, we need too.
159 get_version; 182 get_version;
160 183
161 ebegin "Updating module dependencies for ${KV_FULL}" 184 ebegin "Updating module dependencies for ${KV_FULL}"
162 if [ -r ${KV_OUT_DIR}/System.map ] 185 if [ -r ${KV_OUT_DIR}/System.map ]
171 ewarn 194 ewarn
172 fi 195 fi
173} 196}
174 197
175update_modules() { 198update_modules() {
199 debug-print-function ${FUNCNAME} $*
200
176 if [ -x /sbin/modules-update ] && \ 201 if [ -x /sbin/update-modules ] && \
177 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
178 ebegin "Updating modules.conf" 203 ebegin "Updating modules.conf"
179 /sbin/modules-update 204 /sbin/update-modules
180 eend $? 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
210 eend $?
181 fi 211 fi
182} 212}
183 213
184move_old_moduledb() { 214move_old_moduledb() {
215 debug-print-function ${FUNCNAME} $*
216
185 local OLDDIR=${ROOT}/usr/share/module-rebuild/ 217 local OLDDIR=${ROOT}/usr/share/module-rebuild/
186 local NEWDIR=${ROOT}/var/lib/module-rebuild/ 218 local NEWDIR=${ROOT}/var/lib/module-rebuild/
187 219
188 if [[ -f ${OLDDIR}/moduledb ]]; then 220 if [[ -f ${OLDDIR}/moduledb ]]; then
189 [[ ! -d ${NEWDIR} ]] && mkdir -p ${NEWDIR} 221 [[ ! -d ${NEWDIR} ]] && mkdir -p ${NEWDIR}
193 rmdir ${OLDDIR} 225 rmdir ${OLDDIR}
194 fi 226 fi
195} 227}
196 228
197update_moduledb() { 229update_moduledb() {
230 debug-print-function ${FUNCNAME} $*
231
198 local MODULEDB_DIR=${ROOT}/var/lib/module-rebuild/ 232 local MODULEDB_DIR=${ROOT}/var/lib/module-rebuild/
199 move_old_moduledb 233 move_old_moduledb
200 234
201 if [[ ! -f ${MODULEDB_DIR}/moduledb ]]; then 235 if [[ ! -f ${MODULEDB_DIR}/moduledb ]]; then
202 [[ ! -d ${MODULEDB_DIR} ]] && mkdir -p ${MODULEDB_DIR} 236 [[ ! -d ${MODULEDB_DIR} ]] && mkdir -p ${MODULEDB_DIR}
203 touch ${MODULEDB_DIR}/moduledb 237 touch ${MODULEDB_DIR}/moduledb
204 fi 238 fi
239
205 if [[ -z $(grep ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb) ]]; then 240 if ! grep -qs ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb ; then
206 einfo "Adding module to moduledb." 241 einfo "Adding module to moduledb."
207 echo "a:1:${CATEGORY}/${PN}-${PVR}" >> ${MODULEDB_DIR}/moduledb 242 echo "a:1:${CATEGORY}/${PN}-${PVR}" >> ${MODULEDB_DIR}/moduledb
208 fi 243 fi
209} 244}
210 245
211remove_moduledb() { 246remove_moduledb() {
247 debug-print-function ${FUNCNAME} $*
248
212 local MODULEDB_DIR=${ROOT}/var/lib/module-rebuild/ 249 local MODULEDB_DIR=${ROOT}/var/lib/module-rebuild/
213 move_old_moduledb 250 move_old_moduledb
214 251
215 if [[ -n $(grep ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb) ]]; then 252 if grep -qs ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb ; then
216 einfo "Removing ${CATEGORY}/${PN}-${PVR} from moduledb." 253 einfo "Removing ${CATEGORY}/${PN}-${PVR} from moduledb."
217 sed -ie "/.*${CATEGORY}\/${PN}-${PVR}.*/d" ${MODULEDB_DIR}/moduledb 254 sed -i -e "/.*${CATEGORY}\/${PN}-${PVR}.*/d" ${MODULEDB_DIR}/moduledb
218 fi 255 fi
219} 256}
220 257
221set_kvobj() { 258set_kvobj() {
259 debug-print-function ${FUNCNAME} $*
260
222 if kernel_is 2 6 261 if kernel_is 2 6
223 then 262 then
224 KV_OBJ="ko" 263 KV_OBJ="ko"
225 else 264 else
226 KV_OBJ="o" 265 KV_OBJ="o"
229 # Lets silence it. 268 # Lets silence it.
230 # einfo "Using KV_OBJ=${KV_OBJ}" 269 # einfo "Using KV_OBJ=${KV_OBJ}"
231} 270}
232 271
233get-KERNEL_CC() { 272get-KERNEL_CC() {
273 debug-print-function ${FUNCNAME} $*
274
275 if [[ -n ${KERNEL_CC} ]] ; then
276 echo "${KERNEL_CC}"
277 return
278 fi
279
234 local kernel_cc 280 local kernel_cc
235 if [ -n "${KERNEL_ABI}" ]; then 281 if [ -n "${KERNEL_ABI}" ]; then
236 # In future, an arch might want to define CC_$ABI 282 # In future, an arch might want to define CC_$ABI
237 #kernel_cc="$(get_abi_CC)" 283 #kernel_cc="$(get_abi_CC)"
238 #[ -z "${kernel_cc}" ] && 284 #[ -z "${kernel_cc}" ] &&
239 kernel_cc="$(tc-getCC $(ABI=${KERNEL_ABI} get_abi_CHOST))" 285 kernel_cc="$(tc-getCC $(ABI=${KERNEL_ABI} get_abi_CHOST))"
240 else 286 else
241 kernel_cc=$(tc-getCC) 287 kernel_cc=$(tc-getCC)
242 fi 288 fi
243 echo "${kernel_cc}" 289 echo "${kernel_cc}"
244} 290}
245 291
246generate_modulesd() { 292generate_modulesd() {
293 debug-print-function ${FUNCNAME} $*
294
247 # This function will generate the neccessary modules.d file from the 295 # This function will generate the neccessary modules.d file from the
248 # information contained in the modules exported parms 296 # information contained in the modules exported parms
249 297
250 local currm_path currm currm_t t myIFS myVAR 298 local currm_path currm currm_t t myIFS myVAR
251 local module_docs module_enabled module_aliases \ 299 local module_docs module_enabled module_aliases \
373 fi 421 fi
374 422
375 #----------------------------------------------------------------------- 423 #-----------------------------------------------------------------------
376 424
377 # then we install it 425 # then we install it
426 if kernel_is ge 2 6; then
427 insinto /etc/modprobe.d
428 else
378 insinto /etc/modules.d 429 insinto /etc/modules.d
430 fi
379 newins ${module_config} ${currm_path//*\/} 431 newins ${module_config} ${currm_path//*\/}
380 432
381 # and install any documentation we might have. 433 # and install any documentation we might have.
382 [[ -n ${module_docs} ]] && dodoc ${module_docs} 434 [[ -n ${module_docs} ]] && dodoc ${module_docs}
383 done 435 done
384 eend 0 436 eend 0
385 return 0 437 return 0
386} 438}
387 439
388find_module_params() { 440find_module_params() {
441 debug-print-function ${FUNCNAME} $*
442
389 local matched_offset=0 matched_opts=0 test="${@}" temp_var result 443 local matched_offset=0 matched_opts=0 test="${@}" temp_var result
390 local i=0 y=0 z=0 444 local i=0 y=0 z=0
391 445
392 for((i=0; i<=${#test}; i++)) 446 for((i=0; i<=${#test}; i++))
393 do 447 do
427 481
428# default ebuild functions 482# default ebuild functions
429# -------------------------------- 483# --------------------------------
430 484
431linux-mod_pkg_setup() { 485linux-mod_pkg_setup() {
486 debug-print-function ${FUNCNAME} $*
487
432 linux-info_pkg_setup; 488 linux-info_pkg_setup;
489 require_configured_kernel
433 check_kernel_built; 490 check_kernel_built;
434 strip_modulenames; 491 strip_modulenames;
435 [[ -n ${MODULE_NAMES} ]] && check_modules_supported 492 [[ -n ${MODULE_NAMES} ]] && check_modules_supported
436 set_kvobj; 493 set_kvobj;
437 # 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
439 # introduced - Jason Wever <weeve@gentoo.org>, 23 Oct 2005 496 # introduced - Jason Wever <weeve@gentoo.org>, 23 Oct 2005
440 #check_vermagic; 497 #check_vermagic;
441} 498}
442 499
443strip_modulenames() { 500strip_modulenames() {
501 debug-print-function ${FUNCNAME} $*
502
444 local i 503 local i
445 for i in ${MODULE_IGNORE}; do 504 for i in ${MODULE_IGNORE}; do
446 MODULE_NAMES=${MODULE_NAMES//${i}(*} 505 MODULE_NAMES=${MODULE_NAMES//${i}(*}
447 done 506 done
448} 507}
449 508
450linux-mod_src_compile() { 509linux-mod_src_compile() {
510 debug-print-function ${FUNCNAME} $*
511
451 local modulename libdir srcdir objdir i n myARCH="${ARCH}" myABI="${ABI}" 512 local modulename libdir srcdir objdir i n myABI="${ABI}"
452 ARCH="$(tc-arch-kernel)" 513 set_arch_to_kernel
453 ABI="${KERNEL_ABI}" 514 ABI="${KERNEL_ABI}"
454 CC_HOSTCC=$(tc-getBUILD_CC)
455 CC_CC=$(get-KERNEL_CC)
456 515
457 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
458 strip_modulenames; 566 strip_modulenames;
459 for i in ${MODULE_NAMES} 567 for i in ${MODULE_NAMES}
460 do 568 do
461 unset libdir srcdir objdir 569 unset libdir srcdir objdir
462 for n in $(find_module_params ${i}) 570 for n in $(find_module_params ${i})
465 done 573 done
466 libdir=${libdir:-misc} 574 libdir=${libdir:-misc}
467 srcdir=${srcdir:-${S}} 575 srcdir=${srcdir:-${S}}
468 objdir=${objdir:-${srcdir}} 576 objdir=${objdir:-${srcdir}}
469 577
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" 578 einfo "Installing ${modulename} module"
508 cd ${objdir} || die "${objdir} does not exist" 579 cd ${objdir} || die "${objdir} does not exist"
509 insinto /lib/modules/${KV_FULL}/${libdir} 580 insinto /lib/modules/${KV_FULL}/${libdir}
510 doins ${modulename}.${KV_OBJ} || die "doins ${modulename}.${KV_OBJ} failed" 581 doins ${modulename}.${KV_OBJ} || die "doins ${modulename}.${KV_OBJ} failed"
511 cd ${OLDPWD} 582 cd ${OLDPWD}
513 generate_modulesd ${objdir}/${modulename} 584 generate_modulesd ${objdir}/${modulename}
514 done 585 done
515} 586}
516 587
517linux-mod_pkg_preinst() { 588linux-mod_pkg_preinst() {
589 debug-print-function ${FUNCNAME} $*
590
518 [ -d ${IMAGE}/lib/modules ] && UPDATE_DEPMOD=true || UPDATE_DEPMOD=false 591 [ -d "${D}lib/modules" ] && UPDATE_DEPMOD=true || UPDATE_DEPMOD=false
519 [ -d ${IMAGE}/etc/modules.d ] && UPDATE_MODULES=true || UPDATE_MODULES=false 592 [ -d "${D}etc/modules.d" ] && UPDATE_MODULES=true || UPDATE_MODULES=false
520 [ -d ${IMAGE}/lib/modules ] && UPDATE_MODULEDB=true || UPDATE_MODULEDB=false 593 [ -d "${D}lib/modules" ] && UPDATE_MODULEDB=true || UPDATE_MODULEDB=false
521} 594}
522 595
523linux-mod_pkg_postinst() { 596linux-mod_pkg_postinst() {
597 debug-print-function ${FUNCNAME} $*
598
524 ${UPDATE_DEPMOD} && update_depmod; 599 ${UPDATE_DEPMOD} && update_depmod;
525 ${UPDATE_MODULES} && update_modules; 600 ${UPDATE_MODULES} && update_modules;
526 ${UPDATE_MODULEDB} && update_moduledb; 601 ${UPDATE_MODULEDB} && update_moduledb;
527} 602}
528 603
529linux-mod_pkg_postrm() { 604linux-mod_pkg_postrm() {
605 debug-print-function ${FUNCNAME} $*
530 remove_moduledb; 606 remove_moduledb;
531} 607}

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

  ViewVC Help
Powered by ViewVC 1.1.20