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

Contents of /eclass/linux-mod.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.93 - (hide annotations) (download)
Wed Nov 5 12:00:19 2008 UTC (6 years, 1 month ago) by dsd
Branch: MAIN
Changes since 1.92: +3 -1 lines
share Module.symvers between all compiled modules, patch from Peter Volkov in bug #237618

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

  ViewVC Help
Powered by ViewVC 1.1.20