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

Contents of /eclass/linux-mod.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.97 - (hide annotations) (download)
Sun Jan 17 03:54:51 2010 UTC (4 years, 8 months ago) by robbat2
Branch: MAIN
Changes since 1.96: +23 -1 lines
Bug #286292: Try to make kernel module binpkgs NOT need kernel sources by using a different path in pkg_setup.

1 johnm 1.1 # Copyright 1999-2004 Gentoo Foundation
2     # Distributed under the terms of the GNU General Public License v2
3 robbat2 1.97 # $Header: /var/cvsroot/gentoo-x86/eclass/linux-mod.eclass,v 1.96 2010/01/10 09:38:50 robbat2 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 robbat2 1.96 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 robbat2 1.96 sed -i 's:SUBDIRS=:M=:g' "${1}"
215 johnm 1.1 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 robbat2 1.96 if [ -r "${KV_OUT_DIR}"/System.map ]
232 johnm 1.1 then
233 robbat2 1.96 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 robbat2 1.96 grep -v -e "^#" -e "^$" "${D}"/etc/modules.d/* >/dev/null 2>&1; then
254 genstef 1.73 ebegin "Updating modules.conf"
255     /sbin/update-modules
256     eend $?
257 vapier 1.74 elif [ -x /sbin/update-modules ] && \
258 robbat2 1.96 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 robbat2 1.96 local OLDDIR="${ROOT}"/usr/share/module-rebuild/
274     local NEWDIR="${ROOT}"/var/lib/module-rebuild/
275 swegener 1.49
276 robbat2 1.96 if [[ -f "${OLDDIR}"/moduledb ]]; then
277     [[ ! -d "${NEWDIR}" ]] && mkdir -p "${NEWDIR}"
278     [[ ! -f "${NEWDIR}"/moduledb ]] && \
279     mv "${OLDDIR}"/moduledb "${NEWDIR}"/moduledb
280     rm -f "${OLDDIR}"/*
281     rmdir "${OLDDIR}"
282 johnm 1.41 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 robbat2 1.96 local MODULEDB_DIR="${ROOT}"/var/lib/module-rebuild/
294 johnm 1.41 move_old_moduledb
295 johnm 1.40
296 robbat2 1.96 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 robbat2 1.96 if ! grep -qs ${CATEGORY}/${PN}-${PVR} "${MODULEDB_DIR}"/moduledb ; then
302 johnm 1.37 einfo "Adding module to moduledb."
303 robbat2 1.96 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 robbat2 1.96 local MODULEDB_DIR="${ROOT}"/var/lib/module-rebuild/
317 johnm 1.41 move_old_moduledb
318 johnm 1.40
319 robbat2 1.96 if grep -qs ${CATEGORY}/${PN}-${PVR} "${MODULEDB_DIR}"/moduledb ; then
320 johnm 1.37 einfo "Removing ${CATEGORY}/${PN}-${PVR} from moduledb."
321 robbat2 1.96 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 robbat2 1.96 echo "# modules.d configuration file for ${currm}" >> "${module_config}"
420 johnm 1.26 #-----------------------------------------------------------------------
421     [[ -n ${module_docs} ]] && \
422 robbat2 1.96 echo "# For more information please read:" >> "${module_config}"
423 johnm 1.26 for t in ${module_docs}
424 johnm 1.11 do
425 robbat2 1.96 echo "# ${t//*\/}" >> "${module_config}"
426 johnm 1.11 done
427 robbat2 1.96 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 robbat2 1.96 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 robbat2 1.96 >> "${module_config}"
439 johnm 1.12 done
440 robbat2 1.96 echo '' >> "${module_config}"
441 johnm 1.11 fi
442    
443 johnm 1.26 #-----------------------------------------------------------------------
444     if [[ -n ${module_modinfo} ]]
445 johnm 1.11 then
446 robbat2 1.96 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 robbat2 1.96 echo -e "# ${t%%:*}:\t${t#*:}" >> "${module_config}"
460 swegener 1.49 done
461 johnm 1.26 IFS="${myIFS}"
462 robbat2 1.96 echo '' >> "${module_config}"
463 johnm 1.26 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 robbat2 1.96 echo "# For Example..." >> "${module_config}"
472     echo "# --------------" >> "${module_config}"
473 johnm 1.26 for t in ${module_opts}
474     do
475 robbat2 1.96 echo "# options ${currm} ${t//:*}=${t//*:}" >> "${module_config}"
476 johnm 1.26 done
477 robbat2 1.96 echo '' >> "${module_config}"
478 johnm 1.26 fi
479 johnm 1.27 elif [[ ${module_examples} -gt 0 ]]
480 johnm 1.26 then
481 robbat2 1.96 echo "# For Example..." >> "${module_config}"
482     echo "# --------------" >> "${module_config}"
483 johnm 1.26 for((t=0; t<${module_examples}; t++))
484     do
485     echo "options $(eval echo \${MODULESD_${currm}_EXAMPLES[$t]})" \
486 robbat2 1.96 >> "${module_config}"
487 johnm 1.11 done
488 robbat2 1.96 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 robbat2 1.96 >> "${module_config}"
498 johnm 1.11 done
499 robbat2 1.96 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 robbat2 1.96 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 robbat2 1.97 # If we are installing a binpkg, take a different path.
580     if [[ $EMERGE_FROM == binary ]]; then
581     linux-mod_pkg_setup_binary
582     return
583     fi
584    
585 johnm 1.6 linux-info_pkg_setup;
586 dsd 1.78 require_configured_kernel
587 johnm 1.6 check_kernel_built;
588 johnm 1.63 strip_modulenames;
589     [[ -n ${MODULE_NAMES} ]] && check_modules_supported
590 johnm 1.1 set_kvobj;
591 weeve 1.55 # Commented out with permission from johnm until a fixed version for arches
592     # who intentionally use different kernel and userland compilers can be
593     # introduced - Jason Wever <weeve@gentoo.org>, 23 Oct 2005
594     #check_vermagic;
595 johnm 1.1 }
596    
597 robbat2 1.97 # @FUNCTION: linux-mod_pkg_setup_binary
598     # @DESCRIPTION:
599     # Perform all kernel option checks non-fatally, as the .config and
600     # /proc/config.gz might not be present. Do not do anything that requires kernel
601     # sources.
602     linux-mod_pkg_setup_binary() {
603     debug-print-function ${FUNCNAME} $*
604     local new_CONFIG_CHECK
605     for config in $CONFIG_CHECK ; do
606     optional=${config:0:1}
607     new_CONFIG_CHECK="${new_CONFIG_CHECK} ${optional:-~}${config}"
608     done
609     export CONFIG_CHECK="${new_CONFIG_CHECK}"
610     linux-info_pkg_setup;
611     }
612    
613 johnm 1.63 strip_modulenames() {
614 genstef 1.69 debug-print-function ${FUNCNAME} $*
615    
616 johnm 1.63 local i
617     for i in ${MODULE_IGNORE}; do
618     MODULE_NAMES=${MODULE_NAMES//${i}(*}
619     done
620     }
621    
622 dsd 1.86 # @FUNCTION: linux-mod_src_compile
623     # @DESCRIPTION:
624     # It compiles all the modules specified in MODULE_NAMES. For each module the econf command is
625     # executed only if ECONF_PARAMS is defined, the name of the target is specified by BUILD_TARGETS
626     # while the options are in BUILD_PARAMS (all the modules share these variables). The compilation
627     # happens inside ${srcdir}.
628     #
629     # Look at the description of these variables for more details.
630 johnm 1.1 linux-mod_src_compile() {
631 genstef 1.69 debug-print-function ${FUNCNAME} $*
632    
633 vapier 1.84 local modulename libdir srcdir objdir i n myABI="${ABI}"
634     set_arch_to_kernel
635 blubb 1.62 ABI="${KERNEL_ABI}"
636 johnm 1.26
637 johnm 1.16 BUILD_TARGETS=${BUILD_TARGETS:-clean module}
638 johnm 1.63 strip_modulenames;
639 phreak 1.76 cd "${S}"
640 dsd 1.93 touch Module.symvers
641 johnm 1.9 for i in ${MODULE_NAMES}
642 johnm 1.1 do
643 johnm 1.23 unset libdir srcdir objdir
644 johnm 1.18 for n in $(find_module_params ${i})
645     do
646     eval ${n/:*}=${n/*:/}
647     done
648     libdir=${libdir:-misc}
649     srcdir=${srcdir:-${S}}
650     objdir=${objdir:-${srcdir}}
651 swegener 1.49
652 johnm 1.18 if [ ! -f "${srcdir}/.built" ];
653 johnm 1.16 then
654 robbat2 1.96 cd "${srcdir}"
655 dsd 1.93 ln -s "${S}"/Module.symvers Module.symvers
656 johnm 1.16 einfo "Preparing ${modulename} module"
657 johnm 1.22 if [[ -n ${ECONF_PARAMS} ]]
658     then
659     econf ${ECONF_PARAMS} || \
660     die "Unable to run econf ${ECONF_PARAMS}"
661     fi
662 vapier 1.83
663 robbat2 1.79 # This looks messy, but it is needed to handle multiple variables
664     # being passed in the BUILD_* stuff where the variables also have
665     # spaces that must be preserved. If don't do this, then the stuff
666     # inside the variables gets used as targets for Make, which then
667     # fails.
668     eval "emake HOSTCC=\"$(tc-getBUILD_CC)\" \
669 vapier 1.83 CROSS_COMPILE=${CHOST}- \
670 robbat2 1.79 LDFLAGS=\"$(get_abi_LDFLAGS)\" \
671     ${BUILD_FIXES} \
672     ${BUILD_PARAMS} \
673     ${BUILD_TARGETS} " \
674 vapier 1.83 || die "Unable to emake HOSTCC="$(tc-getBUILD_CC)" CROSS_COMPILE=${CHOST}- LDFLAGS="$(get_abi_LDFLAGS)" ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS}"
675 robbat2 1.96 cd "${OLDPWD}"
676     touch "${srcdir}"/.built
677 johnm 1.16 fi
678 johnm 1.1 done
679 johnm 1.26
680 vapier 1.84 set_arch_to_portage
681 blubb 1.62 ABI="${myABI}"
682 johnm 1.1 }
683    
684 dsd 1.86 # @FUNCTION: linux-mod_src_install
685     # @DESCRIPTION:
686     # It install the modules specified in MODULES_NAME. The modules should be inside the ${objdir}
687     # directory and they are installed inside /lib/modules/${KV_FULL}/${libdir}.
688     #
689     # The modprobe.d/modules.d configuration file is automatically generated if the
690     # MODULESD_<modulename>_* variables are defined. The only way to stop this process is by
691     # setting MODULESD_<modulename>_ENABLED=no. At the end the documentation specified via
692     # MODULESD_<modulename>_DOCS is also installed.
693     #
694     # Look at the description of these variables for more details.
695 johnm 1.1 linux-mod_src_install() {
696 genstef 1.69 debug-print-function ${FUNCNAME} $*
697    
698 johnm 1.18 local modulename libdir srcdir objdir i n
699 swegener 1.49
700 johnm 1.63 strip_modulenames;
701 johnm 1.9 for i in ${MODULE_NAMES}
702 johnm 1.1 do
703 johnm 1.23 unset libdir srcdir objdir
704 johnm 1.18 for n in $(find_module_params ${i})
705     do
706     eval ${n/:*}=${n/*:/}
707     done
708     libdir=${libdir:-misc}
709     srcdir=${srcdir:-${S}}
710     objdir=${objdir:-${srcdir}}
711 johnm 1.1
712     einfo "Installing ${modulename} module"
713 robbat2 1.96 cd "${objdir}" || die "${objdir} does not exist"
714 brix 1.57 insinto /lib/modules/${KV_FULL}/${libdir}
715 vapier 1.56 doins ${modulename}.${KV_OBJ} || die "doins ${modulename}.${KV_OBJ} failed"
716 robbat2 1.96 cd "${OLDPWD}"
717 swegener 1.49
718 robbat2 1.96 generate_modulesd "${objdir}/${modulename}"
719 johnm 1.1 done
720     }
721    
722 dsd 1.86 # @FUNCTION: linux-mod_pkg_preinst
723     # @DESCRIPTION:
724     # It checks what to do after having merged the package.
725 genstef 1.65 linux-mod_pkg_preinst() {
726 genstef 1.69 debug-print-function ${FUNCNAME} $*
727    
728 zmedico 1.77 [ -d "${D}lib/modules" ] && UPDATE_DEPMOD=true || UPDATE_DEPMOD=false
729     [ -d "${D}etc/modules.d" ] && UPDATE_MODULES=true || UPDATE_MODULES=false
730     [ -d "${D}lib/modules" ] && UPDATE_MODULEDB=true || UPDATE_MODULEDB=false
731 genstef 1.65 }
732    
733 dsd 1.86 # @FUNCTION: linux-mod_pkg_postinst
734     # @DESCRIPTION:
735     # It executes /sbin/depmod and adds the package to the /var/lib/module-rebuild/moduledb
736     # database (if ${D}/lib/modules is created) and it runs /sbin/update-modules
737     # (if ${D}/etc/modules.d is created).
738 johnm 1.1 linux-mod_pkg_postinst() {
739 genstef 1.69 debug-print-function ${FUNCNAME} $*
740    
741 genstef 1.65 ${UPDATE_DEPMOD} && update_depmod;
742     ${UPDATE_MODULES} && update_modules;
743     ${UPDATE_MODULEDB} && update_moduledb;
744 johnm 1.1 }
745 johnm 1.37
746 dsd 1.86 # @FUNCTION: linux-mod_pkg_postrm
747     # @DESCRIPTION:
748     # It removes the package from the /var/lib/module-rebuild/moduledb database but it doens't
749     # call /sbin/depmod and /sbin/update-modules because the modules are still installed.
750 johnm 1.37 linux-mod_pkg_postrm() {
751 swegener 1.70 debug-print-function ${FUNCNAME} $*
752 johnm 1.37 remove_moduledb;
753     }

  ViewVC Help
Powered by ViewVC 1.1.20