/[gentoo-x86]/eclass/linux-mod.eclass
Gentoo

Contents of /eclass/linux-mod.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.95 - (hide annotations) (download)
Sun Sep 6 23:16:37 2009 UTC (4 years, 11 months ago) by robbat2
Branch: MAIN
Changes since 1.94: +3 -2 lines
Bug #283320: The dependancy for linux-sources now moves into linux-mod, where it is actually required.

1 johnm 1.1 # Copyright 1999-2004 Gentoo Foundation
2     # Distributed under the terms of the GNU General Public License v2
3 robbat2 1.95 # $Header: /var/cvsroot/gentoo-x86/eclass/linux-mod.eclass,v 1.94 2009/07/15 17:21:11 mpagano Exp $
4 johnm 1.1
5 phreak 1.75 # Author(s): John Mylchreest <johnm@gentoo.org>,
6     # Stefan Schweizer <genstef@gentoo.org>
7     # Maintainer: kernel-misc@gentoo.org
8 johnm 1.10 #
9     # Please direct your bugs to the current eclass maintainer :)
10    
11 dsd 1.86 # @ECLASS: linux-mod.eclass
12     # @MAINTAINER:
13     # kernel-misc@gentoo.org
14     # @BLURB: It provides the functionality required to install external modules against a kernel source tree.
15     # @DESCRIPTION:
16     # This eclass is used to interface with linux-info.eclass in such a way
17     # to provide the functionality and initial functions
18     # required to install external modules against a kernel source
19     # tree.
20    
21 johnm 1.10 # A Couple of env vars are available to effect usage of this eclass
22     # These are as follows:
23    
24 dsd 1.86 # @ECLASS-VARIABLE: KERNEL_DIR
25     # @DESCRIPTION:
26     # A string containing the directory of the target kernel sources. The default value is
27     # "/usr/src/linux"
28    
29     # @ECLASS-VARIABLE: ECONF_PARAMS
30     # @DESCRIPTION:
31     # It's a string containing the parameters to pass to econf.
32     # If this is not set, then econf isn't run.
33    
34     # @ECLASS-VARIABLE: BUILD_PARAMS
35     # @DESCRIPTION:
36     # It's a string with the parameters to pass to emake.
37    
38     # @ECLASS-VARIABLE: BUILD_TARGETS
39     # @DESCRIPTION:
40     # It's a string with the build targets to pass to make. The default value is "clean modules"
41    
42     # @ECLASS-VARIABLE: MODULE_NAMES
43     # @DESCRIPTION:
44     # It's a string containing the modules to be built automatically using the default
45     # src_compile/src_install. It will only make ${BUILD_TARGETS} once in any directory.
46 swegener 1.49 #
47 johnm 1.10 # The structure of each MODULE_NAMES entry is as follows:
48 dsd 1.85 #
49 dsd 1.86 # modulename(libdir:srcdir:objdir)
50     #
51     # where:
52     #
53     # modulename = name of the module file excluding the .ko
54 dsd 1.91 # libdir = place in system modules directory where module is installed (by default it's misc)
55     # srcdir = place for ebuild to cd to before running make (by default it's ${S})
56     # objdir = place the .ko and objects are located after make runs (by default it's set to srcdir)
57 dsd 1.85 #
58     # To get an idea of how these variables are used, here's a few lines
59     # of code from around line 540 in this eclass:
60     #
61     # einfo "Installing ${modulename} module"
62     # cd ${objdir} || die "${objdir} does not exist"
63     # insinto /lib/modules/${KV_FULL}/${libdir}
64     # doins ${modulename}.${KV_OBJ} || die "doins ${modulename}.${KV_OBJ} failed"
65     #
66 dsd 1.86 # For example:
67     # MODULE_NAMES="module_pci(pci:${S}/pci:${S}) module_usb(usb:${S}/usb:${S})"
68 swegener 1.49 #
69 johnm 1.10 # what this would do is
70 dsd 1.86 #
71     # cd "${S}"/pci
72     # make ${BUILD_PARAMS} ${BUILD_TARGETS}
73     # cd "${S}"
74     # insinto /lib/modules/${KV_FULL}/pci
75     # doins module_pci.${KV_OBJ}
76     #
77     # cd "${S}"/usb
78     # make ${BUILD_PARAMS} ${BUILD_TARGETS}
79     # cd "${S}"
80     # insinto /lib/modules/${KV_FULL}/usb
81     # doins module_usb.${KV_OBJ}
82 johnm 1.26
83 genstef 1.80 # There is also support for automated modprobe.d/modules.d(2.4) file generation.
84 johnm 1.26 # This can be explicitly enabled by setting any of the following variables.
85 dsd 1.86
86     # @ECLASS-VARIABLE: MODULESD_<modulename>_ENABLED
87     # @DESCRIPTION:
88     # This is used to disable the modprobe.d/modules.d file generation otherwise the file will be
89     # always generated (unless no MODULESD_<modulename>_* variable is provided). Set to "no" to disable
90     # the generation of the file and the installation of the documentation.
91    
92     # @ECLASS-VARIABLE: MODULESD_<modulename>_EXAMPLES
93     # @DESCRIPTION:
94     # This is a bash array containing a list of examples which should
95     # be used. If you want us to try and take a guess set this to "guess".
96     #
97     # For each array_component it's added an options line in the modprobe.d/modules.d file
98     #
99     # options array_component
100     #
101     # where array_component is "<modulename> options" (see modprobe.conf(5))
102    
103     # @ECLASS-VARIABLE: MODULESD_<modulename>_ALIASES
104     # @DESCRIPTION:
105     # This is a bash array containing a list of associated aliases.
106     #
107     # For each array_component it's added an alias line in the modprobe.d/modules.d file
108 johnm 1.26 #
109 dsd 1.86 # alias array_component
110 johnm 1.26 #
111 dsd 1.86 # where array_component is "wildcard <modulename>" (see modprobe.conf(5))
112    
113     # @ECLASS-VARIABLE: MODULESD_<modulename>_ADDITIONS
114     # @DESCRIPTION:
115     # This is a bash array containing a list of additional things to
116     # add to the bottom of the file. This can be absolutely anything.
117     # Each entry is a new line.
118    
119     # @ECLASS-VARIABLE: MODULESD_<modulename>_DOCS
120     # @DESCRIPTION:
121     # This is a string list which contains the full path to any associated
122     # documents for <modulename>. These files are installed in the live tree.
123    
124     # @ECLASS-VARIABLE: KV_OBJ
125     # @DESCRIPTION:
126     # It's a read-only variable. It contains the extension of the kernel modules.
127 johnm 1.26
128 betelgeuse 1.61 # The order of these is important as both of linux-info and eutils contain
129     # set_arch_to_kernel and set_arch_to_portage functions and the ones in eutils
130     # are deprecated in favor of the ones in linux-info.
131     # See http://bugs.gentoo.org/show_bug.cgi?id=127506
132 johnm 1.1
133 blubb 1.62 inherit eutils linux-info multilib
134 genstef 1.65 EXPORT_FUNCTIONS pkg_setup pkg_preinst pkg_postinst src_install src_compile pkg_postrm
135 johnm 1.1
136 genstef 1.67 IUSE="kernel_linux"
137 johnm 1.26 SLOT="0"
138 johnm 1.1 DESCRIPTION="Based on the $ECLASS eclass"
139 genstef 1.67 RDEPEND="kernel_linux? ( virtual/modutils )"
140 genstef 1.65 DEPEND="${RDEPEND}
141 robbat2 1.95 sys-apps/sed
142     kernel_linux? ( virtual/linux-sources )"
143 johnm 1.26
144 johnm 1.1 # eclass utilities
145     # ----------------------------------
146    
147 johnm 1.53 check_vermagic() {
148 genstef 1.69 debug-print-function ${FUNCNAME} $*
149    
150 johnm 1.53 local curr_gcc_ver=$(gcc -dumpversion)
151     local tmpfile old_chost old_gcc_ver result=0
152    
153 johnm 1.54 tmpfile=`find ${KV_DIR}/ -iname "*.o.cmd" -exec grep usr/lib/gcc {} \; -quit`
154 johnm 1.53 tmpfile=${tmpfile//*usr/lib}
155     tmpfile=${tmpfile//\/include*}
156     old_chost=${tmpfile//*gcc\/}
157     old_chost=${old_chost//\/*}
158     old_gcc_ver=${tmpfile//*\/}
159    
160 johnm 1.54 if [[ -z ${old_gcc_ver} || -z ${old_chost} ]]; then
161     ewarn ""
162     ewarn "Unable to detect what version of GCC was used to compile"
163     ewarn "the kernel. Build will continue, but you may experience problems."
164     elif [[ ${curr_gcc_ver} != ${old_gcc_ver} ]]; then
165 johnm 1.53 ewarn ""
166     ewarn "The version of GCC you are using (${curr_gcc_ver}) does"
167     ewarn "not match the version of GCC used to compile the"
168     ewarn "kernel (${old_gcc_ver})."
169     result=1
170     elif [[ ${CHOST} != ${old_chost} ]]; then
171     ewarn ""
172     ewarn "The current CHOST (${CHOST}) does not match the chost"
173     ewarn "used when compiling the kernel (${old_chost})."
174     result=1
175     fi
176    
177     if [[ ${result} -gt 0 ]]; then
178     ewarn ""
179     ewarn "Build will not continue, because you will experience problems."
180     ewarn "To fix this either change the version of GCC you wish to use"
181     ewarn "to match the kernel, or recompile the kernel first."
182     die "GCC Version Mismatch."
183     fi
184     }
185    
186 dsd 1.86 # @FUNCTION: use_m
187     # @RETURN: true or false
188     # @DESCRIPTION:
189     # It checks if the kernel version is greater than 2.6.5.
190 johnm 1.1 use_m() {
191 genstef 1.69 debug-print-function ${FUNCNAME} $*
192    
193 johnm 1.1 # if we haven't determined the version yet, we need too.
194     get_version;
195 swegener 1.49
196 johnm 1.1 # if the kernel version is greater than 2.6.6 then we should use
197 johnm 1.8 # M= instead of SUBDIRS=
198 johnm 1.1 [ ${KV_MAJOR} -eq 2 -a ${KV_MINOR} -gt 5 -a ${KV_PATCH} -gt 5 ] && \
199     return 0 || return 1
200     }
201    
202 dsd 1.86 # @FUNCTION: convert_to_m
203     # @USAGE: /path/to/the/file
204     # @DESCRIPTION:
205     # It converts a file (e.g. a makefile) to use M= instead of SUBDIRS=
206 johnm 1.1 convert_to_m() {
207 genstef 1.69 debug-print-function ${FUNCNAME} $*
208    
209 johnm 1.1 if use_m
210     then
211 johnm 1.32 [ ! -f "${1}" ] && \
212     die "convert_to_m() requires a filename as an argument"
213 johnm 1.8 ebegin "Converting ${1/${WORKDIR}\//} to use M= instead of SUBDIRS="
214 johnm 1.1 sed -i 's:SUBDIRS=:M=:g' ${1}
215     eend $?
216     fi
217     }
218    
219 dsd 1.86 # internal function
220     #
221     # FUNCTION: update_depmod
222     # DESCRIPTION:
223     # It updates the modules.dep file for the current kernel.
224 johnm 1.1 update_depmod() {
225 genstef 1.69 debug-print-function ${FUNCNAME} $*
226    
227 johnm 1.1 # if we haven't determined the version yet, we need too.
228     get_version;
229 swegener 1.49
230 johnm 1.1 ebegin "Updating module dependencies for ${KV_FULL}"
231 johnm 1.5 if [ -r ${KV_OUT_DIR}/System.map ]
232 johnm 1.1 then
233 johnm 1.5 depmod -ae -F ${KV_OUT_DIR}/System.map -b ${ROOT} -r ${KV_FULL}
234 johnm 1.18 eend $?
235 johnm 1.1 else
236     ewarn
237 johnm 1.5 ewarn "${KV_OUT_DIR}/System.map not found."
238 johnm 1.1 ewarn "You must manually update the kernel module dependencies using depmod."
239 johnm 1.18 eend 1
240 johnm 1.1 ewarn
241     fi
242     }
243    
244 dsd 1.86 # internal function
245     #
246     # FUNCTION: update_modules
247     # DESCRIPTION:
248     # It calls the update-modules utility.
249 johnm 1.3 update_modules() {
250 genstef 1.69 debug-print-function ${FUNCNAME} $*
251    
252 genstef 1.73 if [ -x /sbin/update-modules ] && \
253     grep -v -e "^#" -e "^$" ${D}/etc/modules.d/* >/dev/null 2>&1; then
254     ebegin "Updating modules.conf"
255     /sbin/update-modules
256     eend $?
257 vapier 1.74 elif [ -x /sbin/update-modules ] && \
258 kingtaco 1.31 grep -v -e "^#" -e "^$" ${D}/etc/modules.d/* >/dev/null 2>&1; then
259 johnm 1.3 ebegin "Updating modules.conf"
260 vapier 1.74 /sbin/update-modules
261 johnm 1.3 eend $?
262     fi
263     }
264    
265 dsd 1.86 # internal function
266     #
267     # FUNCTION: move_old_moduledb
268     # DESCRIPTION:
269     # It updates the location of the database used by the module-rebuild utility.
270 johnm 1.41 move_old_moduledb() {
271 genstef 1.69 debug-print-function ${FUNCNAME} $*
272    
273 johnm 1.41 local OLDDIR=${ROOT}/usr/share/module-rebuild/
274     local NEWDIR=${ROOT}/var/lib/module-rebuild/
275 swegener 1.49
276 johnm 1.41 if [[ -f ${OLDDIR}/moduledb ]]; then
277     [[ ! -d ${NEWDIR} ]] && mkdir -p ${NEWDIR}
278 johnm 1.42 [[ ! -f ${NEWDIR}/moduledb ]] && \
279     mv ${OLDDIR}/moduledb ${NEWDIR}/moduledb
280     rm -f ${OLDDIR}/*
281 johnm 1.41 rmdir ${OLDDIR}
282     fi
283     }
284    
285 dsd 1.86 # internal function
286     #
287     # FUNCTION: update_moduledb
288     # DESCRIPTION:
289     # It adds the package to the /var/lib/module-rebuild/moduledb database used by the module-rebuild utility.
290 johnm 1.37 update_moduledb() {
291 genstef 1.69 debug-print-function ${FUNCNAME} $*
292    
293 johnm 1.40 local MODULEDB_DIR=${ROOT}/var/lib/module-rebuild/
294 johnm 1.41 move_old_moduledb
295 johnm 1.40
296     if [[ ! -f ${MODULEDB_DIR}/moduledb ]]; then
297     [[ ! -d ${MODULEDB_DIR} ]] && mkdir -p ${MODULEDB_DIR}
298     touch ${MODULEDB_DIR}/moduledb
299 johnm 1.37 fi
300 vapier 1.72
301     if ! grep -qs ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb ; then
302 johnm 1.37 einfo "Adding module to moduledb."
303 johnm 1.40 echo "a:1:${CATEGORY}/${PN}-${PVR}" >> ${MODULEDB_DIR}/moduledb
304 swegener 1.49 fi
305 johnm 1.37 }
306    
307 dsd 1.86 # internal function
308     #
309     # FUNCTION: remove_moduledb
310     # DESCRIPTION:
311     # It removes the package from the /var/lib/module-rebuild/moduledb database used by
312     # the module-rebuild utility.
313 johnm 1.37 remove_moduledb() {
314 genstef 1.69 debug-print-function ${FUNCNAME} $*
315    
316 johnm 1.40 local MODULEDB_DIR=${ROOT}/var/lib/module-rebuild/
317 johnm 1.41 move_old_moduledb
318 johnm 1.40
319 vapier 1.72 if grep -qs ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb ; then
320 johnm 1.37 einfo "Removing ${CATEGORY}/${PN}-${PVR} from moduledb."
321 dsd 1.71 sed -i -e "/.*${CATEGORY}\/${PN}-${PVR}.*/d" ${MODULEDB_DIR}/moduledb
322 johnm 1.37 fi
323     }
324    
325 dsd 1.86 # @FUNCTION: set_kvobj
326     # @DESCRIPTION:
327     # It sets the KV_OBJ variable.
328 johnm 1.1 set_kvobj() {
329 genstef 1.69 debug-print-function ${FUNCNAME} $*
330    
331 johnm 1.1 if kernel_is 2 6
332     then
333     KV_OBJ="ko"
334     else
335     KV_OBJ="o"
336     fi
337 johnm 1.26 # Do we really need to know this?
338     # Lets silence it.
339     # einfo "Using KV_OBJ=${KV_OBJ}"
340 johnm 1.1 }
341    
342 genstef 1.68 get-KERNEL_CC() {
343 genstef 1.69 debug-print-function ${FUNCNAME} $*
344    
345 vapier 1.82 if [[ -n ${KERNEL_CC} ]] ; then
346     echo "${KERNEL_CC}"
347     return
348     fi
349    
350 genstef 1.68 local kernel_cc
351     if [ -n "${KERNEL_ABI}" ]; then
352     # In future, an arch might want to define CC_$ABI
353     #kernel_cc="$(get_abi_CC)"
354 swegener 1.70 #[ -z "${kernel_cc}" ] &&
355 genstef 1.68 kernel_cc="$(tc-getCC $(ABI=${KERNEL_ABI} get_abi_CHOST))"
356     else
357     kernel_cc=$(tc-getCC)
358     fi
359     echo "${kernel_cc}"
360     }
361    
362 dsd 1.86 # internal function
363     #
364     # FUNCTION:
365     # USAGE: /path/to/the/modulename_without_extension
366     # RETURN: A file in /etc/modules.d/ (kernel < 2.6) or /etc/modprobe.d/ (kernel >= 2.6)
367     # DESCRIPTION:
368     # This function will generate and install the neccessary modprobe.d/modules.d file from the
369     # information contained in the modules exported parms.
370     # (see the variables MODULESD_<modulename>_ENABLED, MODULESD_<modulename>_EXAMPLES,
371     # MODULESD_<modulename>_ALIASES, MODULESD_<modulename>_ADDITION and MODULESD_<modulename>_DOCS).
372     #
373     # At the end the documentation specified with MODULESD_<modulename>_DOCS is installed.
374 johnm 1.11 generate_modulesd() {
375 genstef 1.69 debug-print-function ${FUNCNAME} $*
376    
377 johnm 1.54 local currm_path currm currm_t t myIFS myVAR
378 johnm 1.26 local module_docs module_enabled module_aliases \
379     module_additions module_examples module_modinfo module_opts
380    
381     for currm_path in ${@}
382 johnm 1.11 do
383 johnm 1.26 currm=${currm_path//*\/}
384     currm=$(echo ${currm} | tr '[:lower:]' '[:upper:]')
385 johnm 1.54 currm_t=${currm}
386     while [[ -z ${currm_t//*-*} ]]; do
387     currm_t=${currm_t/-/_}
388     done
389 johnm 1.26
390 johnm 1.54 module_docs="$(eval echo \${MODULESD_${currm_t}_DOCS})"
391     module_enabled="$(eval echo \${MODULESD_${currm_t}_ENABLED})"
392     module_aliases="$(eval echo \${#MODULESD_${currm_t}_ALIASES[*]})"
393     module_additions="$(eval echo \${#MODULESD_${currm_t}_ADDITIONS[*]})"
394     module_examples="$(eval echo \${#MODULESD_${currm_t}_EXAMPLES[*]})"
395 johnm 1.26
396 johnm 1.27 [[ ${module_aliases} -eq 0 ]] && unset module_aliases
397     [[ ${module_additions} -eq 0 ]] && unset module_additions
398     [[ ${module_examples} -eq 0 ]] && unset module_examples
399 johnm 1.26
400 swegener 1.49 # If we specify we dont want it, then lets exit, otherwise we assume
401 johnm 1.26 # that if its set, we do want it.
402     [[ ${module_enabled} == no ]] && return 0
403    
404     # unset any unwanted variables.
405     for t in ${!module_*}
406 johnm 1.11 do
407 johnm 1.26 [[ -z ${!t} ]] && unset ${t}
408 johnm 1.11 done
409    
410 johnm 1.26 [[ -z ${!module_*} ]] && return 0
411    
412     # OK so now if we have got this far, then we know we want to continue
413     # and generate the modules.d file.
414     module_modinfo="$(modinfo -p ${currm_path}.${KV_OBJ})"
415     module_config="${T}/modulesd-${currm}"
416    
417 johnm 1.11 ebegin "Preparing file for modules.d"
418 johnm 1.26 #-----------------------------------------------------------------------
419     echo "# modules.d configuration file for ${currm}" >> ${module_config}
420     #-----------------------------------------------------------------------
421     [[ -n ${module_docs} ]] && \
422     echo "# For more information please read:" >> ${module_config}
423     for t in ${module_docs}
424 johnm 1.11 do
425 johnm 1.26 echo "# ${t//*\/}" >> ${module_config}
426 johnm 1.11 done
427 johnm 1.26 echo >> ${module_config}
428 johnm 1.11
429 johnm 1.26 #-----------------------------------------------------------------------
430 johnm 1.27 if [[ ${module_aliases} -gt 0 ]]
431 johnm 1.11 then
432     echo "# Internal Aliases - Do not edit" >> ${module_config}
433     echo "# ------------------------------" >> ${module_config}
434 johnm 1.12
435 johnm 1.26 for((t=0; t<${module_aliases}; t++))
436 johnm 1.11 do
437 johnm 1.26 echo "alias $(eval echo \${MODULESD_${currm}_ALIASES[$t]})" \
438     >> ${module_config}
439 johnm 1.12 done
440 johnm 1.26 echo '' >> ${module_config}
441 johnm 1.11 fi
442    
443 johnm 1.26 #-----------------------------------------------------------------------
444     if [[ -n ${module_modinfo} ]]
445 johnm 1.11 then
446     echo >> ${module_config}
447     echo "# Configurable module parameters" >> ${module_config}
448     echo "# ------------------------------" >> ${module_config}
449 johnm 1.26 myIFS="${IFS}"
450 johnm 1.11 IFS="$(echo -en "\n\b")"
451 swegener 1.49
452 johnm 1.26 for t in ${module_modinfo}
453 johnm 1.11 do
454 johnm 1.26 myVAR="$(echo ${t#*:} | grep -e " [0-9][ =]" | sed "s:.*\([01][= ]\).*:\1:")"
455     if [[ -n ${myVAR} ]]
456 johnm 1.11 then
457 johnm 1.26 module_opts="${module_opts} ${t%%:*}:${myVAR}"
458 johnm 1.11 fi
459 johnm 1.26 echo -e "# ${t%%:*}:\t${t#*:}" >> ${module_config}
460 swegener 1.49 done
461 johnm 1.26 IFS="${myIFS}"
462     echo '' >> ${module_config}
463     fi
464    
465     #-----------------------------------------------------------------------
466     if [[ $(eval echo \${MODULESD_${currm}_ALIASES[0]}) == guess ]]
467     then
468     # So lets do some guesswork eh?
469     if [[ -n ${module_opts} ]]
470     then
471     echo "# For Example..." >> ${module_config}
472     echo "# --------------" >> ${module_config}
473     for t in ${module_opts}
474     do
475     echo "# options ${currm} ${t//:*}=${t//*:}" >> ${module_config}
476     done
477     echo '' >> ${module_config}
478     fi
479 johnm 1.27 elif [[ ${module_examples} -gt 0 ]]
480 johnm 1.26 then
481     echo "# For Example..." >> ${module_config}
482     echo "# --------------" >> ${module_config}
483     for((t=0; t<${module_examples}; t++))
484     do
485     echo "options $(eval echo \${MODULESD_${currm}_EXAMPLES[$t]})" \
486     >> ${module_config}
487 johnm 1.11 done
488 johnm 1.26 echo '' >> ${module_config}
489 johnm 1.11 fi
490 johnm 1.26
491     #-----------------------------------------------------------------------
492 johnm 1.27 if [[ ${module_additions} -gt 0 ]]
493 johnm 1.11 then
494 johnm 1.26 for((t=0; t<${module_additions}; t++))
495 johnm 1.11 do
496 johnm 1.26 echo "$(eval echo \${MODULESD_${currm}_ADDITIONS[$t]})" \
497     >> ${module_config}
498 johnm 1.11 done
499 johnm 1.26 echo '' >> ${module_config}
500 johnm 1.11 fi
501 swegener 1.49
502 johnm 1.26 #-----------------------------------------------------------------------
503    
504 johnm 1.12 # then we install it
505 cardoe 1.81 if kernel_is ge 2 6; then
506 genstef 1.80 insinto /etc/modprobe.d
507     else
508     insinto /etc/modules.d
509     fi
510 mpagano 1.94 newins ${module_config} ${currm_path//*\/}.conf
511 johnm 1.27
512 johnm 1.12 # and install any documentation we might have.
513 johnm 1.26 [[ -n ${module_docs} ]] && dodoc ${module_docs}
514 johnm 1.11 done
515     eend 0
516 johnm 1.26 return 0
517 johnm 1.11 }
518    
519 dsd 1.86 # internal function
520     #
521     # FUNCTION: find_module_params
522     # USAGE: A string "NAME(LIBDIR:SRCDIR:OBJDIR)"
523     # RETURN: The string "modulename:NAME libdir:LIBDIR srcdir:SRCDIR objdir:OBJDIR"
524     # DESCRIPTION:
525     # Analyze the specification NAME(LIBDIR:SRCDIR:OBJDIR) of one module as described in MODULE_NAMES.
526 johnm 1.18 find_module_params() {
527 genstef 1.69 debug-print-function ${FUNCNAME} $*
528    
529 johnm 1.18 local matched_offset=0 matched_opts=0 test="${@}" temp_var result
530     local i=0 y=0 z=0
531 swegener 1.49
532 johnm 1.18 for((i=0; i<=${#test}; i++))
533     do
534     case ${test:${i}:1} in
535     \() matched_offset[0]=${i};;
536     \:) matched_opts=$((${matched_opts} + 1));
537     matched_offset[${matched_opts}]="${i}";;
538     \)) matched_opts=$((${matched_opts} + 1));
539     matched_offset[${matched_opts}]="${i}";;
540     esac
541     done
542 swegener 1.49
543 johnm 1.18 for((i=0; i<=${matched_opts}; i++))
544     do
545     # i = offset were working on
546     # y = last offset
547     # z = current offset - last offset
548     # temp_var = temporary name
549     case ${i} in
550     0) tempvar=${test:0:${matched_offset[0]}};;
551     *) y=$((${matched_offset[$((${i} - 1))]} + 1))
552     z=$((${matched_offset[${i}]} - ${matched_offset[$((${i} - 1))]}));
553     z=$((${z} - 1))
554     tempvar=${test:${y}:${z}};;
555     esac
556 swegener 1.49
557 johnm 1.18 case ${i} in
558     0) result="${result} modulename:${tempvar}";;
559     1) result="${result} libdir:${tempvar}";;
560     2) result="${result} srcdir:${tempvar}";;
561     3) result="${result} objdir:${tempvar}";;
562     esac
563     done
564 swegener 1.49
565 johnm 1.18 echo ${result}
566     }
567    
568 johnm 1.1 # default ebuild functions
569     # --------------------------------
570    
571 dsd 1.86 # @FUNCTION: linux-mod_pkg_setup
572     # @DESCRIPTION:
573     # It checks the CONFIG_CHECK options (see linux-info.eclass(5)), verifies that the kernel is
574     # configured, verifies that the sources are prepared, verifies that the modules support is builtin
575     # in the kernel and sets the object extension KV_OBJ.
576 johnm 1.1 linux-mod_pkg_setup() {
577 genstef 1.69 debug-print-function ${FUNCNAME} $*
578    
579 johnm 1.6 linux-info_pkg_setup;
580 dsd 1.78 require_configured_kernel
581 johnm 1.6 check_kernel_built;
582 johnm 1.63 strip_modulenames;
583     [[ -n ${MODULE_NAMES} ]] && check_modules_supported
584 johnm 1.1 set_kvobj;
585 weeve 1.55 # Commented out with permission from johnm until a fixed version for arches
586     # who intentionally use different kernel and userland compilers can be
587     # introduced - Jason Wever <weeve@gentoo.org>, 23 Oct 2005
588     #check_vermagic;
589 johnm 1.1 }
590    
591 johnm 1.63 strip_modulenames() {
592 genstef 1.69 debug-print-function ${FUNCNAME} $*
593    
594 johnm 1.63 local i
595     for i in ${MODULE_IGNORE}; do
596     MODULE_NAMES=${MODULE_NAMES//${i}(*}
597     done
598     }
599    
600 dsd 1.86 # @FUNCTION: linux-mod_src_compile
601     # @DESCRIPTION:
602     # It compiles all the modules specified in MODULE_NAMES. For each module the econf command is
603     # executed only if ECONF_PARAMS is defined, the name of the target is specified by BUILD_TARGETS
604     # while the options are in BUILD_PARAMS (all the modules share these variables). The compilation
605     # happens inside ${srcdir}.
606     #
607     # Look at the description of these variables for more details.
608 johnm 1.1 linux-mod_src_compile() {
609 genstef 1.69 debug-print-function ${FUNCNAME} $*
610    
611 vapier 1.84 local modulename libdir srcdir objdir i n myABI="${ABI}"
612     set_arch_to_kernel
613 blubb 1.62 ABI="${KERNEL_ABI}"
614 johnm 1.26
615 johnm 1.16 BUILD_TARGETS=${BUILD_TARGETS:-clean module}
616 johnm 1.63 strip_modulenames;
617 phreak 1.76 cd "${S}"
618 dsd 1.93 touch Module.symvers
619 johnm 1.9 for i in ${MODULE_NAMES}
620 johnm 1.1 do
621 johnm 1.23 unset libdir srcdir objdir
622 johnm 1.18 for n in $(find_module_params ${i})
623     do
624     eval ${n/:*}=${n/*:/}
625     done
626     libdir=${libdir:-misc}
627     srcdir=${srcdir:-${S}}
628     objdir=${objdir:-${srcdir}}
629 swegener 1.49
630 johnm 1.18 if [ ! -f "${srcdir}/.built" ];
631 johnm 1.16 then
632 johnm 1.18 cd ${srcdir}
633 dsd 1.93 ln -s "${S}"/Module.symvers Module.symvers
634 johnm 1.16 einfo "Preparing ${modulename} module"
635 johnm 1.22 if [[ -n ${ECONF_PARAMS} ]]
636     then
637     econf ${ECONF_PARAMS} || \
638     die "Unable to run econf ${ECONF_PARAMS}"
639     fi
640 vapier 1.83
641 robbat2 1.79 # This looks messy, but it is needed to handle multiple variables
642     # being passed in the BUILD_* stuff where the variables also have
643     # spaces that must be preserved. If don't do this, then the stuff
644     # inside the variables gets used as targets for Make, which then
645     # fails.
646     eval "emake HOSTCC=\"$(tc-getBUILD_CC)\" \
647 vapier 1.83 CROSS_COMPILE=${CHOST}- \
648 robbat2 1.79 LDFLAGS=\"$(get_abi_LDFLAGS)\" \
649     ${BUILD_FIXES} \
650     ${BUILD_PARAMS} \
651     ${BUILD_TARGETS} " \
652 vapier 1.83 || die "Unable to emake HOSTCC="$(tc-getBUILD_CC)" CROSS_COMPILE=${CHOST}- LDFLAGS="$(get_abi_LDFLAGS)" ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS}"
653 dsd 1.87 cd ${OLDPWD}
654 johnm 1.18 touch ${srcdir}/.built
655 johnm 1.16 fi
656 johnm 1.1 done
657 johnm 1.26
658 vapier 1.84 set_arch_to_portage
659 blubb 1.62 ABI="${myABI}"
660 johnm 1.1 }
661    
662 dsd 1.86 # @FUNCTION: linux-mod_src_install
663     # @DESCRIPTION:
664     # It install the modules specified in MODULES_NAME. The modules should be inside the ${objdir}
665     # directory and they are installed inside /lib/modules/${KV_FULL}/${libdir}.
666     #
667     # The modprobe.d/modules.d configuration file is automatically generated if the
668     # MODULESD_<modulename>_* variables are defined. The only way to stop this process is by
669     # setting MODULESD_<modulename>_ENABLED=no. At the end the documentation specified via
670     # MODULESD_<modulename>_DOCS is also installed.
671     #
672     # Look at the description of these variables for more details.
673 johnm 1.1 linux-mod_src_install() {
674 genstef 1.69 debug-print-function ${FUNCNAME} $*
675    
676 johnm 1.18 local modulename libdir srcdir objdir i n
677 swegener 1.49
678 johnm 1.63 strip_modulenames;
679 johnm 1.9 for i in ${MODULE_NAMES}
680 johnm 1.1 do
681 johnm 1.23 unset libdir srcdir objdir
682 johnm 1.18 for n in $(find_module_params ${i})
683     do
684     eval ${n/:*}=${n/*:/}
685     done
686     libdir=${libdir:-misc}
687     srcdir=${srcdir:-${S}}
688     objdir=${objdir:-${srcdir}}
689 johnm 1.1
690     einfo "Installing ${modulename} module"
691 vapier 1.56 cd ${objdir} || die "${objdir} does not exist"
692 brix 1.57 insinto /lib/modules/${KV_FULL}/${libdir}
693 vapier 1.56 doins ${modulename}.${KV_OBJ} || die "doins ${modulename}.${KV_OBJ} failed"
694 johnm 1.16 cd ${OLDPWD}
695 swegener 1.49
696 johnm 1.26 generate_modulesd ${objdir}/${modulename}
697 johnm 1.1 done
698     }
699    
700 dsd 1.86 # @FUNCTION: linux-mod_pkg_preinst
701     # @DESCRIPTION:
702     # It checks what to do after having merged the package.
703 genstef 1.65 linux-mod_pkg_preinst() {
704 genstef 1.69 debug-print-function ${FUNCNAME} $*
705    
706 zmedico 1.77 [ -d "${D}lib/modules" ] && UPDATE_DEPMOD=true || UPDATE_DEPMOD=false
707     [ -d "${D}etc/modules.d" ] && UPDATE_MODULES=true || UPDATE_MODULES=false
708     [ -d "${D}lib/modules" ] && UPDATE_MODULEDB=true || UPDATE_MODULEDB=false
709 genstef 1.65 }
710    
711 dsd 1.86 # @FUNCTION: linux-mod_pkg_postinst
712     # @DESCRIPTION:
713     # It executes /sbin/depmod and adds the package to the /var/lib/module-rebuild/moduledb
714     # database (if ${D}/lib/modules is created) and it runs /sbin/update-modules
715     # (if ${D}/etc/modules.d is created).
716 johnm 1.1 linux-mod_pkg_postinst() {
717 genstef 1.69 debug-print-function ${FUNCNAME} $*
718    
719 genstef 1.65 ${UPDATE_DEPMOD} && update_depmod;
720     ${UPDATE_MODULES} && update_modules;
721     ${UPDATE_MODULEDB} && update_moduledb;
722 johnm 1.1 }
723 johnm 1.37
724 dsd 1.86 # @FUNCTION: linux-mod_pkg_postrm
725     # @DESCRIPTION:
726     # It removes the package from the /var/lib/module-rebuild/moduledb database but it doens't
727     # call /sbin/depmod and /sbin/update-modules because the modules are still installed.
728 johnm 1.37 linux-mod_pkg_postrm() {
729 swegener 1.70 debug-print-function ${FUNCNAME} $*
730 johnm 1.37 remove_moduledb;
731     }

  ViewVC Help
Powered by ViewVC 1.1.20