/[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.52 Revision 1.68
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.52 2005/09/22 14:13:36 johnm Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/linux-mod.eclass,v 1.68 2006/10/16 14:10:46 genstef 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> 10# Maintainer: John Mylchreest <johnm@gentoo.org>, Stefan Schweizer <genstef@gentoo.org>
11# Copyright 2004 Gentoo Linux 11# Copyright 2004 Gentoo Linux
12# 12#
13# Please direct your bugs to the current eclass maintainer :) 13# Please direct your bugs to the current eclass maintainer :)
14 14
15# A Couple of env vars are available to effect usage of this eclass 15# A Couple of env vars are available to effect usage of this eclass
76# Each entry is a new line. 76# Each entry is a new line.
77# MODULES_${modulename}_DOCS This is a string list which contains 77# MODULES_${modulename}_DOCS This is a string list which contains
78# the full path to any associated 78# the full path to any associated
79# documents for $modulename 79# documents for $modulename
80 80
81# The order of these is important as both of linux-info and eutils contain
82# set_arch_to_kernel and set_arch_to_portage functions and the ones in eutils
83# are deprecated in favor of the ones in linux-info.
84# See http://bugs.gentoo.org/show_bug.cgi?id=127506
81 85
82inherit linux-info 86inherit eutils linux-info multilib
83EXPORT_FUNCTIONS pkg_setup pkg_postinst src_install src_compile pkg_postrm 87EXPORT_FUNCTIONS pkg_setup pkg_preinst pkg_postinst src_install src_compile pkg_postrm
84 88
85IUSE="" # don't put pcmcia here, rather in the ebuilds that actually support pcmcia 89IUSE="kernel_linux"
86SLOT="0" 90SLOT="0"
87DESCRIPTION="Based on the $ECLASS eclass" 91DESCRIPTION="Based on the $ECLASS eclass"
88RDEPEND="virtual/modutils 92RDEPEND="kernel_linux? ( virtual/modutils )"
89 pcmcia? ( virtual/pcmcia )" 93DEPEND="${RDEPEND}
90DEPEND="virtual/linux-sources
91 sys-apps/sed 94 sys-apps/sed"
92 pcmcia? ( virtual/pcmcia )"
93 95
94# eclass utilities 96# eclass utilities
95# ---------------------------------- 97# ----------------------------------
96 98
97unpack_pcmcia_sources() { 99check_vermagic() {
98 # So while the two eclasses exist side-by-side and also the ebuilds inherit 100 local curr_gcc_ver=$(gcc -dumpversion)
99 # both we need to check for PCMCIA_SOURCE_DIR, and if we find it, then we 101 local tmpfile old_chost old_gcc_ver result=0
100 # bail out and assume pcmcia.eclass is working on it.
101 [[ -n ${PCMCIA_SOURCE_DIR} ]] && return 1
102 102
103 if [[ -f "${1}" ]]; then 103 tmpfile=`find ${KV_DIR}/ -iname "*.o.cmd" -exec grep usr/lib/gcc {} \; -quit`
104 PCMCIA_SOURCE_DIR="${WORKDIR}/pcmcia-cs/" 104 tmpfile=${tmpfile//*usr/lib}
105 tmpfile=${tmpfile//\/include*}
106 old_chost=${tmpfile//*gcc\/}
107 old_chost=${old_chost//\/*}
108 old_gcc_ver=${tmpfile//*\/}
105 109
106 ebegin "Decompressing pcmcia-cs sources" 110 if [[ -z ${old_gcc_ver} || -z ${old_chost} ]]; then
107 mkdir -p ${PCMCIA_SOURCE_DIR} 111 ewarn ""
108 tar -xjf ${1} -C ${PCMCIA_SOURCE_DIR} 112 ewarn "Unable to detect what version of GCC was used to compile"
109 eend $? 113 ewarn "the kernel. Build will continue, but you may experience problems."
110 114 elif [[ ${curr_gcc_ver} != ${old_gcc_ver} ]]; then
111 if [[ -f ${PCMCIA_SOURCE_DIR}/pcmcia-cs-version ]]; then 115 ewarn ""
112 PCMCIA_VERSION=$(cat ${PCMCIA_SOURCE_DIR}/pcmcia-cs-version) 116 ewarn "The version of GCC you are using (${curr_gcc_ver}) does"
113 einfo "Found pcmcia-cs-${PCMCIA_VERSION}" 117 ewarn "not match the version of GCC used to compile the"
118 ewarn "kernel (${old_gcc_ver})."
119 result=1
120 elif [[ ${CHOST} != ${old_chost} ]]; then
121 ewarn ""
122 ewarn "The current CHOST (${CHOST}) does not match the chost"
123 ewarn "used when compiling the kernel (${old_chost})."
124 result=1
114 fi 125 fi
115 fi
116}
117 126
118# Dummy function for compatibility. 127 if [[ ${result} -gt 0 ]]; then
119pcmcia_configure() { return 0; } 128 ewarn ""
120 129 ewarn "Build will not continue, because you will experience problems."
121pcmcia_src_unpack() { 130 ewarn "To fix this either change the version of GCC you wish to use"
122 local pcmcia_tbz="${ROOT}/usr/src/pcmcia-cs/pcmcia-cs-build-env.tbz2" 131 ewarn "to match the kernel, or recompile the kernel first."
123 132 die "GCC Version Mismatch."
124 # if the kernel has pcmcia support built in, then we just ignore all this.
125 if linux_chkconfig_present PCMCIA; then
126 einfo "Kernel based PCMCIA support has been detected."
127 else
128 if kernel_is 2 4; then
129 unpack_pcmcia_sources ${pcmcia_tbz};
130 else
131 einfo "We have detected that you are running a 2.6 kernel"
132 einfo "but you are not using the built-in PCMCIA support."
133 einfo "We will assume you know what you are doing, but please"
134 einfo "consider using the built in PCMCIA support instead."
135 sleep 10
136
137 unpack_pcmcia_sources ${pcmcia_tbz};
138 fi
139 fi 133 fi
140} 134}
141 135
142use_m() { 136use_m() {
143 # if we haven't determined the version yet, we need too. 137 # if we haven't determined the version yet, we need too.
218 local MODULEDB_DIR=${ROOT}/var/lib/module-rebuild/ 212 local MODULEDB_DIR=${ROOT}/var/lib/module-rebuild/
219 move_old_moduledb 213 move_old_moduledb
220 214
221 if [[ -n $(grep ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb) ]]; then 215 if [[ -n $(grep ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb) ]]; then
222 einfo "Removing ${CATEGORY}/${PN}-${PVR} from moduledb." 216 einfo "Removing ${CATEGORY}/${PN}-${PVR} from moduledb."
223 sed -ie "/.*${CATEGORY}\/${P}.*/d" ${MODULEDB_DIR}/moduledb 217 sed -ie "/.*${CATEGORY}\/${PN}-${PVR}.*/d" ${MODULEDB_DIR}/moduledb
224 fi 218 fi
225} 219}
226 220
227set_kvobj() { 221set_kvobj() {
228 if kernel_is 2 6 222 if kernel_is 2 6
234 # Do we really need to know this? 228 # Do we really need to know this?
235 # Lets silence it. 229 # Lets silence it.
236 # einfo "Using KV_OBJ=${KV_OBJ}" 230 # einfo "Using KV_OBJ=${KV_OBJ}"
237} 231}
238 232
233get-KERNEL_CC() {
234 local kernel_cc
235 if [ -n "${KERNEL_ABI}" ]; then
236 # In future, an arch might want to define CC_$ABI
237 #kernel_cc="$(get_abi_CC)"
238 #[ -z "${kernel_cc}" ] &&
239 kernel_cc="$(tc-getCC $(ABI=${KERNEL_ABI} get_abi_CHOST))"
240 else
241 kernel_cc=$(tc-getCC)
242 fi
243 echo "${kernel_cc}"
244}
245
239generate_modulesd() { 246generate_modulesd() {
240 # This function will generate the neccessary modules.d file from the 247 # This function will generate the neccessary modules.d file from the
241 # information contained in the modules exported parms 248 # information contained in the modules exported parms
242 249
243 local currm_path currm t myIFS myVAR 250 local currm_path currm currm_t t myIFS myVAR
244 local module_docs module_enabled module_aliases \ 251 local module_docs module_enabled module_aliases \
245 module_additions module_examples module_modinfo module_opts 252 module_additions module_examples module_modinfo module_opts
246 253
247 for currm_path in ${@} 254 for currm_path in ${@}
248 do 255 do
249 currm=${currm_path//*\/} 256 currm=${currm_path//*\/}
250 currm=$(echo ${currm} | tr '[:lower:]' '[:upper:]') 257 currm=$(echo ${currm} | tr '[:lower:]' '[:upper:]')
258 currm_t=${currm}
259 while [[ -z ${currm_t//*-*} ]]; do
260 currm_t=${currm_t/-/_}
261 done
251 262
252 module_docs="$(eval echo \${MODULESD_${currm}_DOCS})" 263 module_docs="$(eval echo \${MODULESD_${currm_t}_DOCS})"
253 module_enabled="$(eval echo \${MODULESD_${currm}_ENABLED})" 264 module_enabled="$(eval echo \${MODULESD_${currm_t}_ENABLED})"
254 module_aliases="$(eval echo \${#MODULESD_${currm/-/_}_ALIASES[*]})" 265 module_aliases="$(eval echo \${#MODULESD_${currm_t}_ALIASES[*]})"
255 module_additions="$(eval echo \${#MODULESD_${currm/-/_}_ADDITIONS[*]})" 266 module_additions="$(eval echo \${#MODULESD_${currm_t}_ADDITIONS[*]})"
256 module_examples="$(eval echo \${#MODULESD_${currm/-/_}_EXAMPLES[*]})" 267 module_examples="$(eval echo \${#MODULESD_${currm_t}_EXAMPLES[*]})"
257 268
258 [[ ${module_aliases} -eq 0 ]] && unset module_aliases 269 [[ ${module_aliases} -eq 0 ]] && unset module_aliases
259 [[ ${module_additions} -eq 0 ]] && unset module_additions 270 [[ ${module_additions} -eq 0 ]] && unset module_additions
260 [[ ${module_examples} -eq 0 ]] && unset module_examples 271 [[ ${module_examples} -eq 0 ]] && unset module_examples
261 272
418# -------------------------------- 429# --------------------------------
419 430
420linux-mod_pkg_setup() { 431linux-mod_pkg_setup() {
421 linux-info_pkg_setup; 432 linux-info_pkg_setup;
422 check_kernel_built; 433 check_kernel_built;
423 check_modules_supported; 434 strip_modulenames;
435 [[ -n ${MODULE_NAMES} ]] && check_modules_supported
424 set_kvobj; 436 set_kvobj;
437 # Commented out with permission from johnm until a fixed version for arches
438 # who intentionally use different kernel and userland compilers can be
439 # introduced - Jason Wever <weeve@gentoo.org>, 23 Oct 2005
440 #check_vermagic;
425} 441}
426 442
427linux-mod_src_compile() { 443strip_modulenames() {
428 local modulename libdir srcdir objdir i n myARCH="${ARCH}" 444 local i
429 ARCH="$(tc-arch-kernel)"
430
431 BUILD_TARGETS=${BUILD_TARGETS:-clean module}
432
433 for i in ${MODULE_IGNORE} 445 for i in ${MODULE_IGNORE}; do
434 do
435 MODULE_NAMES=${MODULE_NAMES//${i}(*} 446 MODULE_NAMES=${MODULE_NAMES//${i}(*}
436 done 447 done
448}
437 449
450linux-mod_src_compile() {
451 local modulename libdir srcdir objdir i n myARCH="${ARCH}" myABI="${ABI}"
452 ARCH="$(tc-arch-kernel)"
453 ABI="${KERNEL_ABI}"
454 CC_HOSTCC=$(tc-getBUILD_CC)
455 CC_CC=$(get-KERNEL_CC)
456
457 BUILD_TARGETS=${BUILD_TARGETS:-clean module}
458 strip_modulenames;
438 for i in ${MODULE_NAMES} 459 for i in ${MODULE_NAMES}
439 do 460 do
440 unset libdir srcdir objdir 461 unset libdir srcdir objdir
441 for n in $(find_module_params ${i}) 462 for n in $(find_module_params ${i})
442 do 463 do
454 then 475 then
455 econf ${ECONF_PARAMS} || \ 476 econf ${ECONF_PARAMS} || \
456 die "Unable to run econf ${ECONF_PARAMS}" 477 die "Unable to run econf ${ECONF_PARAMS}"
457 fi 478 fi
458 479
459 emake ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS} \ 480 emake HOSTCC=${CC_HOSTCC} CC=${CC_CC} LDFLAGS="$(get_abi_LDFLAGS)" \
460 || die "Unable to make \
461 ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS}." 481 ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS} \
482 || die "Unable to make ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS}."
462 touch ${srcdir}/.built 483 touch ${srcdir}/.built
463 cd ${OLDPWD} 484 cd ${OLDPWD}
464 fi 485 fi
465 done 486 done
466 487
467 ARCH="${myARCH}" 488 ARCH="${myARCH}"
489 ABI="${myABI}"
468} 490}
469 491
470linux-mod_src_install() { 492linux-mod_src_install() {
471 local modulename libdir srcdir objdir i n 493 local modulename libdir srcdir objdir i n
472 494
473 for i in ${MODULE_IGNORE} 495 strip_modulenames;
474 do
475 MODULE_NAMES=${MODULE_NAMES//${i}(*}
476 done
477
478 for i in ${MODULE_NAMES} 496 for i in ${MODULE_NAMES}
479 do 497 do
480 unset libdir srcdir objdir 498 unset libdir srcdir objdir
481 for n in $(find_module_params ${i}) 499 for n in $(find_module_params ${i})
482 do 500 do
485 libdir=${libdir:-misc} 503 libdir=${libdir:-misc}
486 srcdir=${srcdir:-${S}} 504 srcdir=${srcdir:-${S}}
487 objdir=${objdir:-${srcdir}} 505 objdir=${objdir:-${srcdir}}
488 506
489 einfo "Installing ${modulename} module" 507 einfo "Installing ${modulename} module"
490 cd ${objdir} 508 cd ${objdir} || die "${objdir} does not exist"
491 insinto ${ROOT}lib/modules/${KV_FULL}/${libdir} 509 insinto /lib/modules/${KV_FULL}/${libdir}
492 doins ${modulename}.${KV_OBJ} 510 doins ${modulename}.${KV_OBJ} || die "doins ${modulename}.${KV_OBJ} failed"
493 cd ${OLDPWD} 511 cd ${OLDPWD}
494 512
495 generate_modulesd ${objdir}/${modulename} 513 generate_modulesd ${objdir}/${modulename}
496 done 514 done
497} 515}
498 516
517linux-mod_pkg_preinst() {
518 [ -d ${IMAGE}/lib/modules ] && UPDATE_DEPMOD=true || UPDATE_DEPMOD=false
519 [ -d ${IMAGE}/etc/modules.d ] && UPDATE_MODULES=true || UPDATE_MODULES=false
520 [ -d ${IMAGE}/lib/modules ] && UPDATE_MODULEDB=true || UPDATE_MODULEDB=false
521}
522
499linux-mod_pkg_postinst() { 523linux-mod_pkg_postinst() {
500 update_depmod; 524 ${UPDATE_DEPMOD} && update_depmod;
501 update_modules; 525 ${UPDATE_MODULES} && update_modules;
502 update_moduledb; 526 ${UPDATE_MODULEDB} && update_moduledb;
503} 527}
504 528
505linux-mod_pkg_postrm() { 529linux-mod_pkg_postrm() {
506 remove_moduledb; 530 remove_moduledb;
507} 531}

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

  ViewVC Help
Powered by ViewVC 1.1.20