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

Contents of /eclass/linux-mod.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.101 - (hide annotations) (download)
Fri May 27 09:46:14 2011 UTC (3 years, 1 month ago) by ferringb
Branch: MAIN
Changes since 1.100: +9 -2 lines
for EAPI>=4, rely on PMS MERGE_TYPE rather than portage non-spec EMERGE_FROM; for EAPI<4, use EMERGE_FROM since it's acceptable there

1 ulm 1.100 # Copyright 1999-2011 Gentoo Foundation
2 johnm 1.1 # Distributed under the terms of the GNU General Public License v2
3 ferringb 1.101 # $Header: /var/cvsroot/gentoo-x86/eclass/linux-mod.eclass,v 1.100 2011/04/24 18:55:20 ulm 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 ulm 1.100 #
61 dsd 1.85 # 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 ulm 1.100 RDEPEND="kernel_linux? ( sys-apps/module-init-tools )"
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 ferringb 1.101 local is_bin="${MERGE_TYPE}"
580    
581 robbat2 1.97 # If we are installing a binpkg, take a different path.
582 ferringb 1.101 # use MERGE_TYPE if available (eapi>=4); else use non-PMS EMERGE_FROM (eapi<4)
583     if has ${EAPI} 0 1 2 3; then
584     is_bin=${EMERGE_FROM}
585     fi
586    
587     if [[ ${is_bin} == binary ]]; then
588 robbat2 1.97 linux-mod_pkg_setup_binary
589     return
590     fi
591    
592 johnm 1.6 linux-info_pkg_setup;
593 dsd 1.78 require_configured_kernel
594 johnm 1.6 check_kernel_built;
595 johnm 1.63 strip_modulenames;
596     [[ -n ${MODULE_NAMES} ]] && check_modules_supported
597 johnm 1.1 set_kvobj;
598 weeve 1.55 # Commented out with permission from johnm until a fixed version for arches
599     # who intentionally use different kernel and userland compilers can be
600     # introduced - Jason Wever <weeve@gentoo.org>, 23 Oct 2005
601     #check_vermagic;
602 johnm 1.1 }
603    
604 robbat2 1.97 # @FUNCTION: linux-mod_pkg_setup_binary
605     # @DESCRIPTION:
606     # Perform all kernel option checks non-fatally, as the .config and
607     # /proc/config.gz might not be present. Do not do anything that requires kernel
608     # sources.
609     linux-mod_pkg_setup_binary() {
610     debug-print-function ${FUNCNAME} $*
611     local new_CONFIG_CHECK
612 ulm 1.100 # ~ needs always to be quoted, else bash expands it.
613 robbat2 1.97 for config in $CONFIG_CHECK ; do
614 robbat2 1.99 optional='~'
615     [[ ${config:0:1} == "~" ]] && optional=''
616 robbat2 1.98 new_CONFIG_CHECK="${new_CONFIG_CHECK} ${optional}${config}"
617 robbat2 1.97 done
618     export CONFIG_CHECK="${new_CONFIG_CHECK}"
619     linux-info_pkg_setup;
620     }
621    
622 johnm 1.63 strip_modulenames() {
623 genstef 1.69 debug-print-function ${FUNCNAME} $*
624    
625 johnm 1.63 local i
626     for i in ${MODULE_IGNORE}; do
627     MODULE_NAMES=${MODULE_NAMES//${i}(*}
628     done
629     }
630    
631 dsd 1.86 # @FUNCTION: linux-mod_src_compile
632     # @DESCRIPTION:
633     # It compiles all the modules specified in MODULE_NAMES. For each module the econf command is
634     # executed only if ECONF_PARAMS is defined, the name of the target is specified by BUILD_TARGETS
635     # while the options are in BUILD_PARAMS (all the modules share these variables). The compilation
636     # happens inside ${srcdir}.
637     #
638     # Look at the description of these variables for more details.
639 johnm 1.1 linux-mod_src_compile() {
640 genstef 1.69 debug-print-function ${FUNCNAME} $*
641    
642 vapier 1.84 local modulename libdir srcdir objdir i n myABI="${ABI}"
643     set_arch_to_kernel
644 blubb 1.62 ABI="${KERNEL_ABI}"
645 johnm 1.26
646 johnm 1.16 BUILD_TARGETS=${BUILD_TARGETS:-clean module}
647 johnm 1.63 strip_modulenames;
648 phreak 1.76 cd "${S}"
649 dsd 1.93 touch Module.symvers
650 johnm 1.9 for i in ${MODULE_NAMES}
651 johnm 1.1 do
652 johnm 1.23 unset libdir srcdir objdir
653 johnm 1.18 for n in $(find_module_params ${i})
654     do
655     eval ${n/:*}=${n/*:/}
656     done
657     libdir=${libdir:-misc}
658     srcdir=${srcdir:-${S}}
659     objdir=${objdir:-${srcdir}}
660 swegener 1.49
661 johnm 1.18 if [ ! -f "${srcdir}/.built" ];
662 johnm 1.16 then
663 robbat2 1.96 cd "${srcdir}"
664 dsd 1.93 ln -s "${S}"/Module.symvers Module.symvers
665 johnm 1.16 einfo "Preparing ${modulename} module"
666 johnm 1.22 if [[ -n ${ECONF_PARAMS} ]]
667     then
668     econf ${ECONF_PARAMS} || \
669     die "Unable to run econf ${ECONF_PARAMS}"
670     fi
671 vapier 1.83
672 robbat2 1.79 # This looks messy, but it is needed to handle multiple variables
673     # being passed in the BUILD_* stuff where the variables also have
674     # spaces that must be preserved. If don't do this, then the stuff
675     # inside the variables gets used as targets for Make, which then
676     # fails.
677     eval "emake HOSTCC=\"$(tc-getBUILD_CC)\" \
678 vapier 1.83 CROSS_COMPILE=${CHOST}- \
679 robbat2 1.79 LDFLAGS=\"$(get_abi_LDFLAGS)\" \
680     ${BUILD_FIXES} \
681     ${BUILD_PARAMS} \
682     ${BUILD_TARGETS} " \
683 vapier 1.83 || die "Unable to emake HOSTCC="$(tc-getBUILD_CC)" CROSS_COMPILE=${CHOST}- LDFLAGS="$(get_abi_LDFLAGS)" ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS}"
684 robbat2 1.96 cd "${OLDPWD}"
685     touch "${srcdir}"/.built
686 johnm 1.16 fi
687 johnm 1.1 done
688 johnm 1.26
689 vapier 1.84 set_arch_to_portage
690 blubb 1.62 ABI="${myABI}"
691 johnm 1.1 }
692    
693 dsd 1.86 # @FUNCTION: linux-mod_src_install
694     # @DESCRIPTION:
695     # It install the modules specified in MODULES_NAME. The modules should be inside the ${objdir}
696     # directory and they are installed inside /lib/modules/${KV_FULL}/${libdir}.
697     #
698     # The modprobe.d/modules.d configuration file is automatically generated if the
699     # MODULESD_<modulename>_* variables are defined. The only way to stop this process is by
700     # setting MODULESD_<modulename>_ENABLED=no. At the end the documentation specified via
701     # MODULESD_<modulename>_DOCS is also installed.
702     #
703     # Look at the description of these variables for more details.
704 johnm 1.1 linux-mod_src_install() {
705 genstef 1.69 debug-print-function ${FUNCNAME} $*
706    
707 johnm 1.18 local modulename libdir srcdir objdir i n
708 swegener 1.49
709 johnm 1.63 strip_modulenames;
710 johnm 1.9 for i in ${MODULE_NAMES}
711 johnm 1.1 do
712 johnm 1.23 unset libdir srcdir objdir
713 johnm 1.18 for n in $(find_module_params ${i})
714     do
715     eval ${n/:*}=${n/*:/}
716     done
717     libdir=${libdir:-misc}
718     srcdir=${srcdir:-${S}}
719     objdir=${objdir:-${srcdir}}
720 johnm 1.1
721     einfo "Installing ${modulename} module"
722 robbat2 1.96 cd "${objdir}" || die "${objdir} does not exist"
723 brix 1.57 insinto /lib/modules/${KV_FULL}/${libdir}
724 vapier 1.56 doins ${modulename}.${KV_OBJ} || die "doins ${modulename}.${KV_OBJ} failed"
725 robbat2 1.96 cd "${OLDPWD}"
726 swegener 1.49
727 robbat2 1.96 generate_modulesd "${objdir}/${modulename}"
728 johnm 1.1 done
729     }
730    
731 dsd 1.86 # @FUNCTION: linux-mod_pkg_preinst
732     # @DESCRIPTION:
733     # It checks what to do after having merged the package.
734 genstef 1.65 linux-mod_pkg_preinst() {
735 genstef 1.69 debug-print-function ${FUNCNAME} $*
736    
737 zmedico 1.77 [ -d "${D}lib/modules" ] && UPDATE_DEPMOD=true || UPDATE_DEPMOD=false
738     [ -d "${D}etc/modules.d" ] && UPDATE_MODULES=true || UPDATE_MODULES=false
739     [ -d "${D}lib/modules" ] && UPDATE_MODULEDB=true || UPDATE_MODULEDB=false
740 genstef 1.65 }
741    
742 dsd 1.86 # @FUNCTION: linux-mod_pkg_postinst
743     # @DESCRIPTION:
744     # It executes /sbin/depmod and adds the package to the /var/lib/module-rebuild/moduledb
745     # database (if ${D}/lib/modules is created) and it runs /sbin/update-modules
746     # (if ${D}/etc/modules.d is created).
747 johnm 1.1 linux-mod_pkg_postinst() {
748 genstef 1.69 debug-print-function ${FUNCNAME} $*
749    
750 genstef 1.65 ${UPDATE_DEPMOD} && update_depmod;
751     ${UPDATE_MODULES} && update_modules;
752     ${UPDATE_MODULEDB} && update_moduledb;
753 johnm 1.1 }
754 johnm 1.37
755 dsd 1.86 # @FUNCTION: linux-mod_pkg_postrm
756     # @DESCRIPTION:
757     # It removes the package from the /var/lib/module-rebuild/moduledb database but it doens't
758     # call /sbin/depmod and /sbin/update-modules because the modules are still installed.
759 johnm 1.37 linux-mod_pkg_postrm() {
760 swegener 1.70 debug-print-function ${FUNCNAME} $*
761 johnm 1.37 remove_moduledb;
762     }

  ViewVC Help
Powered by ViewVC 1.1.20