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

Contents of /eclass/linux-mod.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.102 - (hide annotations) (download)
Wed Jun 1 06:51:30 2011 UTC (3 years, 6 months ago) by robbat2
Branch: MAIN
Changes since 1.101: +3 -2 lines
Update linux-mod.eclass for building modules on Linux 3.0* kernels.

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

  ViewVC Help
Powered by ViewVC 1.1.20