/[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.35 Revision 1.52
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.35 2005/04/22 19:10:32 johnm Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/linux-mod.eclass,v 1.52 2005/09/22 14:13:36 johnm 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.
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
16# These are as follows: 16# These are as follows:
17# 17#
18# Env Var Option Default Description 18# Env Var Option Default Description
19# KERNEL_DIR <string> /usr/src/linux The directory containing kernel 19# KERNEL_DIR <string> /usr/src/linux The directory containing kernel
20# the target kernel sources. 20# the target kernel sources.
21# ECONF_PARAMS <string> The parameters to pass to econf. 21# ECONF_PARAMS <string> The parameters to pass to econf.
22# If this is not set, then econf 22# If this is not set, then econf
23# isn't run. 23# isn't run.
24# BUILD_PARAMS <string> The parameters to pass to emake. 24# BUILD_PARAMS <string> The parameters to pass to emake.
25# BUILD_TARGETS <string> clean modules The build targets to pass to 25# BUILD_TARGETS <string> clean modules The build targets to pass to
26# make. 26# make.
27# MODULE_NAMES <string> This is the modules which are 27# MODULE_NAMES <string> This is the modules which are
28# to be built automatically using 28# to be built automatically using
29# the default pkg_compile/install. 29# the default pkg_compile/install.
30# They are explained properly 30# They are explained properly
31# below. It will only make 31# below. It will only make
32# BUILD_TARGETS once in any 32# BUILD_TARGETS once in any
33# directory. 33# directory.
34 34
35# MODULE_NAMES - Detailed Overview 35# MODULE_NAMES - Detailed Overview
36# 36#
37# The structure of each MODULE_NAMES entry is as follows: 37# The structure of each MODULE_NAMES entry is as follows:
38# modulename(libdir:srcdir:objdir) 38# modulename(libdir:srcdir:objdir)
39# for example: 39# for example:
40# MODULE_NAMES="module_pci(pci:${S}/pci:${S}) module_usb(usb:${S}/usb:${S})" 40# MODULE_NAMES="module_pci(pci:${S}/pci:${S}) module_usb(usb:${S}/usb:${S})"
41# 41#
42# what this would do is 42# what this would do is
43# cd ${S}/pci 43# cd ${S}/pci
44# make ${BUILD_PARAMS} ${BUILD_TARGETS} 44# make ${BUILD_PARAMS} ${BUILD_TARGETS}
45# cd ${S} 45# cd ${S}
46# insinto /lib/modules/${KV_FULL}/pci 46# insinto /lib/modules/${KV_FULL}/pci
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 81
82inherit linux-info 82inherit linux-info
83ECLASS=linux-mod
84INHERITED="$INHERITED $ECLASS"
85EXPORT_FUNCTIONS pkg_setup pkg_postinst src_install src_compile 83EXPORT_FUNCTIONS pkg_setup pkg_postinst src_install src_compile pkg_postrm
86 84
87IUSE="${IUSE} pcmcia" 85IUSE="" # don't put pcmcia here, rather in the ebuilds that actually support pcmcia
88SLOT="0" 86SLOT="0"
89DESCRIPTION="Based on the $ECLASS eclass" 87DESCRIPTION="Based on the $ECLASS eclass"
88RDEPEND="virtual/modutils
89 pcmcia? ( virtual/pcmcia )"
90DEPEND="virtual/linux-sources 90DEPEND="virtual/linux-sources
91 sys-apps/sed 91 sys-apps/sed
92 virtual/modutils 92 pcmcia? ( virtual/pcmcia )"
93 pcmcia? ( sys-apps/pcmcia-cs )"
94 93
95# eclass utilities 94# eclass utilities
96# ---------------------------------- 95# ----------------------------------
97 96
98unpack_pcmcia_sources() { 97unpack_pcmcia_sources() {
101 # bail out and assume pcmcia.eclass is working on it. 100 # bail out and assume pcmcia.eclass is working on it.
102 [[ -n ${PCMCIA_SOURCE_DIR} ]] && return 1 101 [[ -n ${PCMCIA_SOURCE_DIR} ]] && return 1
103 102
104 if [[ -f "${1}" ]]; then 103 if [[ -f "${1}" ]]; then
105 PCMCIA_SOURCE_DIR="${WORKDIR}/pcmcia-cs/" 104 PCMCIA_SOURCE_DIR="${WORKDIR}/pcmcia-cs/"
106 105
107 ebegin "Decompressing pcmcia-cs sources" 106 ebegin "Decompressing pcmcia-cs sources"
108 mkdir -p ${PCMCIA_SOURCE_DIR} 107 mkdir -p ${PCMCIA_SOURCE_DIR}
109 tar -xjf ${1} -C ${PCMCIA_SOURCE_DIR} 108 tar -xjf ${1} -C ${PCMCIA_SOURCE_DIR}
110 eend $? 109 eend $?
111 110
141} 140}
142 141
143use_m() { 142use_m() {
144 # if we haven't determined the version yet, we need too. 143 # if we haven't determined the version yet, we need too.
145 get_version; 144 get_version;
146 145
147 # if the kernel version is greater than 2.6.6 then we should use 146 # if the kernel version is greater than 2.6.6 then we should use
148 # M= instead of SUBDIRS= 147 # M= instead of SUBDIRS=
149 [ ${KV_MAJOR} -eq 2 -a ${KV_MINOR} -gt 5 -a ${KV_PATCH} -gt 5 ] && \ 148 [ ${KV_MAJOR} -eq 2 -a ${KV_MINOR} -gt 5 -a ${KV_PATCH} -gt 5 ] && \
150 return 0 || return 1 149 return 0 || return 1
151} 150}
162} 161}
163 162
164update_depmod() { 163update_depmod() {
165 # if we haven't determined the version yet, we need too. 164 # if we haven't determined the version yet, we need too.
166 get_version; 165 get_version;
167 166
168 ebegin "Updating module dependencies for ${KV_FULL}" 167 ebegin "Updating module dependencies for ${KV_FULL}"
169 if [ -r ${KV_OUT_DIR}/System.map ] 168 if [ -r ${KV_OUT_DIR}/System.map ]
170 then 169 then
171 depmod -ae -F ${KV_OUT_DIR}/System.map -b ${ROOT} -r ${KV_FULL} 170 depmod -ae -F ${KV_OUT_DIR}/System.map -b ${ROOT} -r ${KV_FULL}
172 eend $? 171 eend $?
186 /sbin/modules-update 185 /sbin/modules-update
187 eend $? 186 eend $?
188 fi 187 fi
189} 188}
190 189
190move_old_moduledb() {
191 local OLDDIR=${ROOT}/usr/share/module-rebuild/
192 local NEWDIR=${ROOT}/var/lib/module-rebuild/
193
194 if [[ -f ${OLDDIR}/moduledb ]]; then
195 [[ ! -d ${NEWDIR} ]] && mkdir -p ${NEWDIR}
196 [[ ! -f ${NEWDIR}/moduledb ]] && \
197 mv ${OLDDIR}/moduledb ${NEWDIR}/moduledb
198 rm -f ${OLDDIR}/*
199 rmdir ${OLDDIR}
200 fi
201}
202
203update_moduledb() {
204 local MODULEDB_DIR=${ROOT}/var/lib/module-rebuild/
205 move_old_moduledb
206
207 if [[ ! -f ${MODULEDB_DIR}/moduledb ]]; then
208 [[ ! -d ${MODULEDB_DIR} ]] && mkdir -p ${MODULEDB_DIR}
209 touch ${MODULEDB_DIR}/moduledb
210 fi
211 if [[ -z $(grep ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb) ]]; then
212 einfo "Adding module to moduledb."
213 echo "a:1:${CATEGORY}/${PN}-${PVR}" >> ${MODULEDB_DIR}/moduledb
214 fi
215}
216
217remove_moduledb() {
218 local MODULEDB_DIR=${ROOT}/var/lib/module-rebuild/
219 move_old_moduledb
220
221 if [[ -n $(grep ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb) ]]; then
222 einfo "Removing ${CATEGORY}/${PN}-${PVR} from moduledb."
223 sed -ie "/.*${CATEGORY}\/${P}.*/d" ${MODULEDB_DIR}/moduledb
224 fi
225}
226
191set_kvobj() { 227set_kvobj() {
192 if kernel_is 2 6 228 if kernel_is 2 6
193 then 229 then
194 KV_OBJ="ko" 230 KV_OBJ="ko"
195 else 231 else
221 257
222 [[ ${module_aliases} -eq 0 ]] && unset module_aliases 258 [[ ${module_aliases} -eq 0 ]] && unset module_aliases
223 [[ ${module_additions} -eq 0 ]] && unset module_additions 259 [[ ${module_additions} -eq 0 ]] && unset module_additions
224 [[ ${module_examples} -eq 0 ]] && unset module_examples 260 [[ ${module_examples} -eq 0 ]] && unset module_examples
225 261
226 # If we specify we dont want it, then lets exit, otherwise we assume 262 # If we specify we dont want it, then lets exit, otherwise we assume
227 # that if its set, we do want it. 263 # that if its set, we do want it.
228 [[ ${module_enabled} == no ]] && return 0 264 [[ ${module_enabled} == no ]] && return 0
229 265
230 # unset any unwanted variables. 266 # unset any unwanted variables.
231 for t in ${!module_*} 267 for t in ${!module_*}
272 echo >> ${module_config} 308 echo >> ${module_config}
273 echo "# Configurable module parameters" >> ${module_config} 309 echo "# Configurable module parameters" >> ${module_config}
274 echo "# ------------------------------" >> ${module_config} 310 echo "# ------------------------------" >> ${module_config}
275 myIFS="${IFS}" 311 myIFS="${IFS}"
276 IFS="$(echo -en "\n\b")" 312 IFS="$(echo -en "\n\b")"
277 313
278 for t in ${module_modinfo} 314 for t in ${module_modinfo}
279 do 315 do
280 myVAR="$(echo ${t#*:} | grep -e " [0-9][ =]" | sed "s:.*\([01][= ]\).*:\1:")" 316 myVAR="$(echo ${t#*:} | grep -e " [0-9][ =]" | sed "s:.*\([01][= ]\).*:\1:")"
281 if [[ -n ${myVAR} ]] 317 if [[ -n ${myVAR} ]]
282 then 318 then
283 module_opts="${module_opts} ${t%%:*}:${myVAR}" 319 module_opts="${module_opts} ${t%%:*}:${myVAR}"
284 fi 320 fi
285 echo -e "# ${t%%:*}:\t${t#*:}" >> ${module_config} 321 echo -e "# ${t%%:*}:\t${t#*:}" >> ${module_config}
286 done 322 done
287 IFS="${myIFS}" 323 IFS="${myIFS}"
288 echo '' >> ${module_config} 324 echo '' >> ${module_config}
289 fi 325 fi
290 326
291 #----------------------------------------------------------------------- 327 #-----------------------------------------------------------------------
322 echo "$(eval echo \${MODULESD_${currm}_ADDITIONS[$t]})" \ 358 echo "$(eval echo \${MODULESD_${currm}_ADDITIONS[$t]})" \
323 >> ${module_config} 359 >> ${module_config}
324 done 360 done
325 echo '' >> ${module_config} 361 echo '' >> ${module_config}
326 fi 362 fi
327 363
328 #----------------------------------------------------------------------- 364 #-----------------------------------------------------------------------
329 365
330 # then we install it 366 # then we install it
331 insinto /etc/modules.d 367 insinto /etc/modules.d
332 newins ${module_config} ${currm_path//*\/} 368 newins ${module_config} ${currm_path//*\/}
336 done 372 done
337 eend 0 373 eend 0
338 return 0 374 return 0
339} 375}
340 376
341display_postinst() {
342 # if we haven't determined the version yet, we need too.
343 get_version;
344
345 local modulename moduledir sourcedir moduletemp file i
346
347 file=${ROOT}/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}
348 file=${file/\/\///}
349
350 for i in ${MODULE_IGNORE}
351 do
352 MODULE_NAMES=${MODULE_NAMES//${i}(*}
353 done
354
355 if [[ -n ${MODULE_NAMES} ]]
356 then
357 einfo "If you would like to load this module automatically upon boot"
358 einfo "please type the following as root:"
359 for i in ${MODULE_NAMES}
360 do
361 unset libdir srcdir objdir
362 for n in $(find_module_params ${i})
363 do
364 eval ${n/:*}=${n/*:/}
365 done
366 einfo " # echo \"${modulename}\" >> ${file}"
367 done
368 einfo
369 fi
370}
371
372find_module_params() { 377find_module_params() {
373 local matched_offset=0 matched_opts=0 test="${@}" temp_var result 378 local matched_offset=0 matched_opts=0 test="${@}" temp_var result
374 local i=0 y=0 z=0 379 local i=0 y=0 z=0
375 380
376 for((i=0; i<=${#test}; i++)) 381 for((i=0; i<=${#test}; i++))
377 do 382 do
378 case ${test:${i}:1} in 383 case ${test:${i}:1} in
379 \() matched_offset[0]=${i};; 384 \() matched_offset[0]=${i};;
380 \:) matched_opts=$((${matched_opts} + 1)); 385 \:) matched_opts=$((${matched_opts} + 1));
381 matched_offset[${matched_opts}]="${i}";; 386 matched_offset[${matched_opts}]="${i}";;
382 \)) matched_opts=$((${matched_opts} + 1)); 387 \)) matched_opts=$((${matched_opts} + 1));
383 matched_offset[${matched_opts}]="${i}";; 388 matched_offset[${matched_opts}]="${i}";;
384 esac 389 esac
385 done 390 done
386 391
387 for((i=0; i<=${matched_opts}; i++)) 392 for((i=0; i<=${matched_opts}; i++))
388 do 393 do
389 # i = offset were working on 394 # i = offset were working on
390 # y = last offset 395 # y = last offset
391 # z = current offset - last offset 396 # z = current offset - last offset
395 *) y=$((${matched_offset[$((${i} - 1))]} + 1)) 400 *) y=$((${matched_offset[$((${i} - 1))]} + 1))
396 z=$((${matched_offset[${i}]} - ${matched_offset[$((${i} - 1))]})); 401 z=$((${matched_offset[${i}]} - ${matched_offset[$((${i} - 1))]}));
397 z=$((${z} - 1)) 402 z=$((${z} - 1))
398 tempvar=${test:${y}:${z}};; 403 tempvar=${test:${y}:${z}};;
399 esac 404 esac
400 405
401 case ${i} in 406 case ${i} in
402 0) result="${result} modulename:${tempvar}";; 407 0) result="${result} modulename:${tempvar}";;
403 1) result="${result} libdir:${tempvar}";; 408 1) result="${result} libdir:${tempvar}";;
404 2) result="${result} srcdir:${tempvar}";; 409 2) result="${result} srcdir:${tempvar}";;
405 3) result="${result} objdir:${tempvar}";; 410 3) result="${result} objdir:${tempvar}";;
406 esac 411 esac
407 done 412 done
408 413
409 echo ${result} 414 echo ${result}
410} 415}
411 416
412# default ebuild functions 417# default ebuild functions
413# -------------------------------- 418# --------------------------------
419 set_kvobj; 424 set_kvobj;
420} 425}
421 426
422linux-mod_src_compile() { 427linux-mod_src_compile() {
423 local modulename libdir srcdir objdir i n myARCH="${ARCH}" 428 local modulename libdir srcdir objdir i n myARCH="${ARCH}"
424 unset ARCH 429 ARCH="$(tc-arch-kernel)"
425 430
426 BUILD_TARGETS=${BUILD_TARGETS:-clean module} 431 BUILD_TARGETS=${BUILD_TARGETS:-clean module}
427 432
428 for i in ${MODULE_IGNORE} 433 for i in ${MODULE_IGNORE}
429 do 434 do
430 MODULE_NAMES=${MODULE_NAMES//${i}(*} 435 MODULE_NAMES=${MODULE_NAMES//${i}(*}
431 done 436 done
432 437
438 eval ${n/:*}=${n/*:/} 443 eval ${n/:*}=${n/*:/}
439 done 444 done
440 libdir=${libdir:-misc} 445 libdir=${libdir:-misc}
441 srcdir=${srcdir:-${S}} 446 srcdir=${srcdir:-${S}}
442 objdir=${objdir:-${srcdir}} 447 objdir=${objdir:-${srcdir}}
443 448
444 if [ ! -f "${srcdir}/.built" ]; 449 if [ ! -f "${srcdir}/.built" ];
445 then 450 then
446 cd ${srcdir} 451 cd ${srcdir}
447 einfo "Preparing ${modulename} module" 452 einfo "Preparing ${modulename} module"
448 if [[ -n ${ECONF_PARAMS} ]] 453 if [[ -n ${ECONF_PARAMS} ]]
462 ARCH="${myARCH}" 467 ARCH="${myARCH}"
463} 468}
464 469
465linux-mod_src_install() { 470linux-mod_src_install() {
466 local modulename libdir srcdir objdir i n 471 local modulename libdir srcdir objdir i n
467 472
468 for i in ${MODULE_IGNORE} 473 for i in ${MODULE_IGNORE}
469 do 474 do
470 MODULE_NAMES=${MODULE_NAMES//${i}(*} 475 MODULE_NAMES=${MODULE_NAMES//${i}(*}
471 done 476 done
472 477
484 einfo "Installing ${modulename} module" 489 einfo "Installing ${modulename} module"
485 cd ${objdir} 490 cd ${objdir}
486 insinto ${ROOT}lib/modules/${KV_FULL}/${libdir} 491 insinto ${ROOT}lib/modules/${KV_FULL}/${libdir}
487 doins ${modulename}.${KV_OBJ} 492 doins ${modulename}.${KV_OBJ}
488 cd ${OLDPWD} 493 cd ${OLDPWD}
489 494
490 generate_modulesd ${objdir}/${modulename} 495 generate_modulesd ${objdir}/${modulename}
491 done 496 done
492} 497}
493 498
494linux-mod_pkg_postinst() { 499linux-mod_pkg_postinst() {
495 update_depmod; 500 update_depmod;
496 update_modules; 501 update_modules;
497 display_postinst; 502 update_moduledb;
498} 503}
504
505linux-mod_pkg_postrm() {
506 remove_moduledb;
507}

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

  ViewVC Help
Powered by ViewVC 1.1.20