/[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.31 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.31 2005/03/11 23:11:05 kingtaco 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 src_compile_userland src_install_userland
87 84
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
94 93
95# eclass utilities 94# eclass utilities
96# ---------------------------------- 95# ----------------------------------
96
97unpack_pcmcia_sources() {
98 # So while the two eclasses exist side-by-side and also the ebuilds inherit
99 # both we need to check for PCMCIA_SOURCE_DIR, and if we find it, then we
100 # bail out and assume pcmcia.eclass is working on it.
101 [[ -n ${PCMCIA_SOURCE_DIR} ]] && return 1
102
103 if [[ -f "${1}" ]]; then
104 PCMCIA_SOURCE_DIR="${WORKDIR}/pcmcia-cs/"
105
106 ebegin "Decompressing pcmcia-cs sources"
107 mkdir -p ${PCMCIA_SOURCE_DIR}
108 tar -xjf ${1} -C ${PCMCIA_SOURCE_DIR}
109 eend $?
110
111 if [[ -f ${PCMCIA_SOURCE_DIR}/pcmcia-cs-version ]]; then
112 PCMCIA_VERSION=$(cat ${PCMCIA_SOURCE_DIR}/pcmcia-cs-version)
113 einfo "Found pcmcia-cs-${PCMCIA_VERSION}"
114 fi
115 fi
116}
117
118# Dummy function for compatibility.
119pcmcia_configure() { return 0; }
120
121pcmcia_src_unpack() {
122 local pcmcia_tbz="${ROOT}/usr/src/pcmcia-cs/pcmcia-cs-build-env.tbz2"
123
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
140}
97 141
98use_m() { 142use_m() {
99 # if we haven't determined the version yet, we need too. 143 # if we haven't determined the version yet, we need too.
100 get_version; 144 get_version;
101 145
102 # 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
103 # M= instead of SUBDIRS= 147 # M= instead of SUBDIRS=
104 [ ${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 ] && \
105 return 0 || return 1 149 return 0 || return 1
106} 150}
107 151
108convert_to_m() { 152convert_to_m() {
109 [ ! -f "${1}" ] && die "convert_to_m() requires a filename as an argument"
110 if use_m 153 if use_m
111 then 154 then
155 [ ! -f "${1}" ] && \
156 die "convert_to_m() requires a filename as an argument"
112 ebegin "Converting ${1/${WORKDIR}\//} to use M= instead of SUBDIRS=" 157 ebegin "Converting ${1/${WORKDIR}\//} to use M= instead of SUBDIRS="
113 sed -i 's:SUBDIRS=:M=:g' ${1} 158 sed -i 's:SUBDIRS=:M=:g' ${1}
114 eend $? 159 eend $?
115 fi 160 fi
116} 161}
117 162
118update_depmod() { 163update_depmod() {
119 # if we haven't determined the version yet, we need too. 164 # if we haven't determined the version yet, we need too.
120 get_version; 165 get_version;
121 166
122 ebegin "Updating module dependencies for ${KV_FULL}" 167 ebegin "Updating module dependencies for ${KV_FULL}"
123 if [ -r ${KV_OUT_DIR}/System.map ] 168 if [ -r ${KV_OUT_DIR}/System.map ]
124 then 169 then
125 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}
126 eend $? 171 eend $?
140 /sbin/modules-update 185 /sbin/modules-update
141 eend $? 186 eend $?
142 fi 187 fi
143} 188}
144 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
145set_kvobj() { 227set_kvobj() {
146 if kernel_is 2 6 228 if kernel_is 2 6
147 then 229 then
148 KV_OBJ="ko" 230 KV_OBJ="ko"
149 else 231 else
175 257
176 [[ ${module_aliases} -eq 0 ]] && unset module_aliases 258 [[ ${module_aliases} -eq 0 ]] && unset module_aliases
177 [[ ${module_additions} -eq 0 ]] && unset module_additions 259 [[ ${module_additions} -eq 0 ]] && unset module_additions
178 [[ ${module_examples} -eq 0 ]] && unset module_examples 260 [[ ${module_examples} -eq 0 ]] && unset module_examples
179 261
180 # 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
181 # that if its set, we do want it. 263 # that if its set, we do want it.
182 [[ ${module_enabled} == no ]] && return 0 264 [[ ${module_enabled} == no ]] && return 0
183 265
184 # unset any unwanted variables. 266 # unset any unwanted variables.
185 for t in ${!module_*} 267 for t in ${!module_*}
226 echo >> ${module_config} 308 echo >> ${module_config}
227 echo "# Configurable module parameters" >> ${module_config} 309 echo "# Configurable module parameters" >> ${module_config}
228 echo "# ------------------------------" >> ${module_config} 310 echo "# ------------------------------" >> ${module_config}
229 myIFS="${IFS}" 311 myIFS="${IFS}"
230 IFS="$(echo -en "\n\b")" 312 IFS="$(echo -en "\n\b")"
231 313
232 for t in ${module_modinfo} 314 for t in ${module_modinfo}
233 do 315 do
234 myVAR="$(echo ${t#*:} | grep -e " [0-9][ =]" | sed "s:.*\([01][= ]\).*:\1:")" 316 myVAR="$(echo ${t#*:} | grep -e " [0-9][ =]" | sed "s:.*\([01][= ]\).*:\1:")"
235 if [[ -n ${myVAR} ]] 317 if [[ -n ${myVAR} ]]
236 then 318 then
237 module_opts="${module_opts} ${t%%:*}:${myVAR}" 319 module_opts="${module_opts} ${t%%:*}:${myVAR}"
238 fi 320 fi
239 echo -e "# ${t%%:*}:\t${t#*:}" >> ${module_config} 321 echo -e "# ${t%%:*}:\t${t#*:}" >> ${module_config}
240 done 322 done
241 IFS="${myIFS}" 323 IFS="${myIFS}"
242 echo '' >> ${module_config} 324 echo '' >> ${module_config}
243 fi 325 fi
244 326
245 #----------------------------------------------------------------------- 327 #-----------------------------------------------------------------------
276 echo "$(eval echo \${MODULESD_${currm}_ADDITIONS[$t]})" \ 358 echo "$(eval echo \${MODULESD_${currm}_ADDITIONS[$t]})" \
277 >> ${module_config} 359 >> ${module_config}
278 done 360 done
279 echo '' >> ${module_config} 361 echo '' >> ${module_config}
280 fi 362 fi
281 363
282 #----------------------------------------------------------------------- 364 #-----------------------------------------------------------------------
283 365
284 # then we install it 366 # then we install it
285 insinto /etc/modules.d 367 insinto /etc/modules.d
286 newins ${module_config} ${currm_path//*\/} 368 newins ${module_config} ${currm_path//*\/}
290 done 372 done
291 eend 0 373 eend 0
292 return 0 374 return 0
293} 375}
294 376
295display_postinst() {
296 # if we haven't determined the version yet, we need too.
297 get_version;
298
299 local modulename moduledir sourcedir moduletemp file i
300
301 file=${ROOT}/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}
302 file=${file/\/\///}
303
304 for i in ${MODULE_IGNORE}
305 do
306 MODULE_NAMES=${MODULE_NAMES//${i}(*}
307 done
308
309 if [[ -n ${MODULE_NAMES} ]]
310 then
311 einfo "If you would like to load this module automatically upon boot"
312 einfo "please type the following as root:"
313 for i in ${MODULE_NAMES}
314 do
315 unset libdir srcdir objdir
316 for n in $(find_module_params ${i})
317 do
318 eval ${n/:*}=${n/*:/}
319 done
320 einfo " # echo \"${modulename}\" >> ${file}"
321 done
322 einfo
323 fi
324}
325
326find_module_params() { 377find_module_params() {
327 local matched_offset=0 matched_opts=0 test="${@}" temp_var result 378 local matched_offset=0 matched_opts=0 test="${@}" temp_var result
328 local i=0 y=0 z=0 379 local i=0 y=0 z=0
329 380
330 for((i=0; i<=${#test}; i++)) 381 for((i=0; i<=${#test}; i++))
331 do 382 do
332 case ${test:${i}:1} in 383 case ${test:${i}:1} in
333 \() matched_offset[0]=${i};; 384 \() matched_offset[0]=${i};;
334 \:) matched_opts=$((${matched_opts} + 1)); 385 \:) matched_opts=$((${matched_opts} + 1));
335 matched_offset[${matched_opts}]="${i}";; 386 matched_offset[${matched_opts}]="${i}";;
336 \)) matched_opts=$((${matched_opts} + 1)); 387 \)) matched_opts=$((${matched_opts} + 1));
337 matched_offset[${matched_opts}]="${i}";; 388 matched_offset[${matched_opts}]="${i}";;
338 esac 389 esac
339 done 390 done
340 391
341 for((i=0; i<=${matched_opts}; i++)) 392 for((i=0; i<=${matched_opts}; i++))
342 do 393 do
343 # i = offset were working on 394 # i = offset were working on
344 # y = last offset 395 # y = last offset
345 # z = current offset - last offset 396 # z = current offset - last offset
349 *) y=$((${matched_offset[$((${i} - 1))]} + 1)) 400 *) y=$((${matched_offset[$((${i} - 1))]} + 1))
350 z=$((${matched_offset[${i}]} - ${matched_offset[$((${i} - 1))]})); 401 z=$((${matched_offset[${i}]} - ${matched_offset[$((${i} - 1))]}));
351 z=$((${z} - 1)) 402 z=$((${z} - 1))
352 tempvar=${test:${y}:${z}};; 403 tempvar=${test:${y}:${z}};;
353 esac 404 esac
354 405
355 case ${i} in 406 case ${i} in
356 0) result="${result} modulename:${tempvar}";; 407 0) result="${result} modulename:${tempvar}";;
357 1) result="${result} libdir:${tempvar}";; 408 1) result="${result} libdir:${tempvar}";;
358 2) result="${result} srcdir:${tempvar}";; 409 2) result="${result} srcdir:${tempvar}";;
359 3) result="${result} objdir:${tempvar}";; 410 3) result="${result} objdir:${tempvar}";;
360 esac 411 esac
361 done 412 done
362 413
363 echo ${result} 414 echo ${result}
364} 415}
365 416
366# default ebuild functions 417# default ebuild functions
367# -------------------------------- 418# --------------------------------
371 check_kernel_built; 422 check_kernel_built;
372 check_modules_supported; 423 check_modules_supported;
373 set_kvobj; 424 set_kvobj;
374} 425}
375 426
376linux-mod_src_compile_userland() {
377 return 0
378}
379
380linux-mod_src_install_userland() {
381 return 0
382}
383
384linux-mod_src_compile() { 427linux-mod_src_compile() {
385 local modulename libdir srcdir objdir i n myARCH="${ARCH}" 428 local modulename libdir srcdir objdir i n myARCH="${ARCH}"
386 unset ARCH 429 ARCH="$(tc-arch-kernel)"
387 430
388 BUILD_TARGETS=${BUILD_TARGETS:-clean module} 431 BUILD_TARGETS=${BUILD_TARGETS:-clean module}
389 432
390 for i in ${MODULE_IGNORE} 433 for i in ${MODULE_IGNORE}
391 do 434 do
392 MODULE_NAMES=${MODULE_NAMES//${i}(*} 435 MODULE_NAMES=${MODULE_NAMES//${i}(*}
393 done 436 done
394 437
400 eval ${n/:*}=${n/*:/} 443 eval ${n/:*}=${n/*:/}
401 done 444 done
402 libdir=${libdir:-misc} 445 libdir=${libdir:-misc}
403 srcdir=${srcdir:-${S}} 446 srcdir=${srcdir:-${S}}
404 objdir=${objdir:-${srcdir}} 447 objdir=${objdir:-${srcdir}}
405 448
406 if [ ! -f "${srcdir}/.built" ]; 449 if [ ! -f "${srcdir}/.built" ];
407 then 450 then
408 cd ${srcdir} 451 cd ${srcdir}
409 einfo "Preparing ${modulename} module" 452 einfo "Preparing ${modulename} module"
410 if [[ -n ${ECONF_PARAMS} ]] 453 if [[ -n ${ECONF_PARAMS} ]]
424 ARCH="${myARCH}" 467 ARCH="${myARCH}"
425} 468}
426 469
427linux-mod_src_install() { 470linux-mod_src_install() {
428 local modulename libdir srcdir objdir i n 471 local modulename libdir srcdir objdir i n
429 472
430 for i in ${MODULE_IGNORE} 473 for i in ${MODULE_IGNORE}
431 do 474 do
432 MODULE_NAMES=${MODULE_NAMES//${i}(*} 475 MODULE_NAMES=${MODULE_NAMES//${i}(*}
433 done 476 done
434 477
446 einfo "Installing ${modulename} module" 489 einfo "Installing ${modulename} module"
447 cd ${objdir} 490 cd ${objdir}
448 insinto ${ROOT}lib/modules/${KV_FULL}/${libdir} 491 insinto ${ROOT}lib/modules/${KV_FULL}/${libdir}
449 doins ${modulename}.${KV_OBJ} 492 doins ${modulename}.${KV_OBJ}
450 cd ${OLDPWD} 493 cd ${OLDPWD}
451 494
452 generate_modulesd ${objdir}/${modulename} 495 generate_modulesd ${objdir}/${modulename}
453 done 496 done
454} 497}
455 498
456linux-mod_pkg_postinst() { 499linux-mod_pkg_postinst() {
457 update_depmod; 500 update_depmod;
458 update_modules; 501 update_modules;
459 display_postinst; 502 update_moduledb;
460} 503}
504
505linux-mod_pkg_postrm() {
506 remove_moduledb;
507}

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

  ViewVC Help
Powered by ViewVC 1.1.20