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

Contents of /eclass/linux-mod.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.89 - (hide annotations) (download)
Fri Oct 31 23:43:48 2008 UTC (5 years, 8 months ago) by gengor
Branch: MAIN
Changes since 1.88: +2 -1 lines
Forgot to add a comment to the eclass for commit: Add distcc to RESTRICT in linux-mod.eclass bug #167844

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