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

Contents of /eclass/linux-mod.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.106 - (hide annotations) (download)
Tue Aug 28 15:28:01 2012 UTC (22 months, 4 weeks ago) by mpagano
Branch: MAIN
Changes since 1.105: +2 -2 lines
Remove deprecated and unrecommended parameter -r from depmod

1 robbat2 1.105 # Copyright 1999-2012 Gentoo Foundation
2 johnm 1.1 # Distributed under the terms of the GNU General Public License v2
3 mpagano 1.106 # $Header: /var/cvsroot/gentoo-x86/eclass/linux-mod.eclass,v 1.105 2012/02/25 06:26:14 robbat2 Exp $
4 johnm 1.10
5 dsd 1.86 # @ECLASS: linux-mod.eclass
6     # @MAINTAINER:
7     # kernel-misc@gentoo.org
8 vapier 1.104 # @AUTHOR:
9     # John Mylchreest <johnm@gentoo.org>,
10     # Stefan Schweizer <genstef@gentoo.org>
11 dsd 1.86 # @BLURB: It provides the functionality required to install external modules against a kernel source tree.
12     # @DESCRIPTION:
13     # This eclass is used to interface with linux-info.eclass in such a way
14     # to provide the functionality and initial functions
15     # required to install external modules against a kernel source
16     # tree.
17    
18 johnm 1.10 # A Couple of env vars are available to effect usage of this eclass
19     # These are as follows:
20    
21 dsd 1.86 # @ECLASS-VARIABLE: KERNEL_DIR
22     # @DESCRIPTION:
23     # A string containing the directory of the target kernel sources. The default value is
24     # "/usr/src/linux"
25    
26     # @ECLASS-VARIABLE: ECONF_PARAMS
27     # @DESCRIPTION:
28     # It's a string containing the parameters to pass to econf.
29     # If this is not set, then econf isn't run.
30    
31     # @ECLASS-VARIABLE: BUILD_PARAMS
32     # @DESCRIPTION:
33     # It's a string with the parameters to pass to emake.
34    
35     # @ECLASS-VARIABLE: BUILD_TARGETS
36     # @DESCRIPTION:
37     # It's a string with the build targets to pass to make. The default value is "clean modules"
38    
39     # @ECLASS-VARIABLE: MODULE_NAMES
40     # @DESCRIPTION:
41     # It's a string containing the modules to be built automatically using the default
42     # src_compile/src_install. It will only make ${BUILD_TARGETS} once in any directory.
43 swegener 1.49 #
44 johnm 1.10 # The structure of each MODULE_NAMES entry is as follows:
45 dsd 1.85 #
46 dsd 1.86 # modulename(libdir:srcdir:objdir)
47     #
48     # where:
49     #
50     # modulename = name of the module file excluding the .ko
51 dsd 1.91 # libdir = place in system modules directory where module is installed (by default it's misc)
52     # srcdir = place for ebuild to cd to before running make (by default it's ${S})
53     # objdir = place the .ko and objects are located after make runs (by default it's set to srcdir)
54 dsd 1.85 #
55     # To get an idea of how these variables are used, here's a few lines
56     # of code from around line 540 in this eclass:
57 ulm 1.100 #
58 dsd 1.85 # einfo "Installing ${modulename} module"
59     # cd ${objdir} || die "${objdir} does not exist"
60     # insinto /lib/modules/${KV_FULL}/${libdir}
61     # doins ${modulename}.${KV_OBJ} || die "doins ${modulename}.${KV_OBJ} failed"
62     #
63 dsd 1.86 # For example:
64     # MODULE_NAMES="module_pci(pci:${S}/pci:${S}) module_usb(usb:${S}/usb:${S})"
65 swegener 1.49 #
66 johnm 1.10 # what this would do is
67 dsd 1.86 #
68     # cd "${S}"/pci
69     # make ${BUILD_PARAMS} ${BUILD_TARGETS}
70     # cd "${S}"
71     # insinto /lib/modules/${KV_FULL}/pci
72     # doins module_pci.${KV_OBJ}
73     #
74     # cd "${S}"/usb
75     # make ${BUILD_PARAMS} ${BUILD_TARGETS}
76     # cd "${S}"
77     # insinto /lib/modules/${KV_FULL}/usb
78     # doins module_usb.${KV_OBJ}
79 johnm 1.26
80 genstef 1.80 # There is also support for automated modprobe.d/modules.d(2.4) file generation.
81 johnm 1.26 # This can be explicitly enabled by setting any of the following variables.
82 dsd 1.86
83     # @ECLASS-VARIABLE: MODULESD_<modulename>_ENABLED
84     # @DESCRIPTION:
85     # This is used to disable the modprobe.d/modules.d file generation otherwise the file will be
86     # always generated (unless no MODULESD_<modulename>_* variable is provided). Set to "no" to disable
87     # the generation of the file and the installation of the documentation.
88    
89     # @ECLASS-VARIABLE: MODULESD_<modulename>_EXAMPLES
90     # @DESCRIPTION:
91     # This is a bash array containing a list of examples which should
92     # be used. If you want us to try and take a guess set this to "guess".
93     #
94     # For each array_component it's added an options line in the modprobe.d/modules.d file
95     #
96     # options array_component
97     #
98     # where array_component is "<modulename> options" (see modprobe.conf(5))
99    
100     # @ECLASS-VARIABLE: MODULESD_<modulename>_ALIASES
101     # @DESCRIPTION:
102     # This is a bash array containing a list of associated aliases.
103     #
104     # For each array_component it's added an alias line in the modprobe.d/modules.d file
105 johnm 1.26 #
106 dsd 1.86 # alias array_component
107 johnm 1.26 #
108 dsd 1.86 # where array_component is "wildcard <modulename>" (see modprobe.conf(5))
109    
110     # @ECLASS-VARIABLE: MODULESD_<modulename>_ADDITIONS
111     # @DESCRIPTION:
112     # This is a bash array containing a list of additional things to
113     # add to the bottom of the file. This can be absolutely anything.
114     # Each entry is a new line.
115    
116     # @ECLASS-VARIABLE: MODULESD_<modulename>_DOCS
117     # @DESCRIPTION:
118     # This is a string list which contains the full path to any associated
119     # documents for <modulename>. These files are installed in the live tree.
120    
121     # @ECLASS-VARIABLE: KV_OBJ
122     # @DESCRIPTION:
123     # It's a read-only variable. It contains the extension of the kernel modules.
124 johnm 1.26
125 blubb 1.62 inherit eutils linux-info multilib
126 genstef 1.65 EXPORT_FUNCTIONS pkg_setup pkg_preinst pkg_postinst src_install src_compile pkg_postrm
127 johnm 1.1
128 genstef 1.67 IUSE="kernel_linux"
129 johnm 1.26 SLOT="0"
130 johnm 1.1 DESCRIPTION="Based on the $ECLASS eclass"
131 robbat2 1.105 RDEPEND="kernel_linux? ( virtual/modutils )"
132 genstef 1.65 DEPEND="${RDEPEND}
133 robbat2 1.95 sys-apps/sed
134     kernel_linux? ( virtual/linux-sources )"
135 johnm 1.26
136 johnm 1.1 # eclass utilities
137     # ----------------------------------
138    
139 johnm 1.53 check_vermagic() {
140 genstef 1.69 debug-print-function ${FUNCNAME} $*
141    
142 johnm 1.53 local curr_gcc_ver=$(gcc -dumpversion)
143     local tmpfile old_chost old_gcc_ver result=0
144    
145 robbat2 1.96 tmpfile=`find "${KV_DIR}/" -iname "*.o.cmd" -exec grep usr/lib/gcc {} \; -quit`
146 johnm 1.53 tmpfile=${tmpfile//*usr/lib}
147     tmpfile=${tmpfile//\/include*}
148     old_chost=${tmpfile//*gcc\/}
149     old_chost=${old_chost//\/*}
150     old_gcc_ver=${tmpfile//*\/}
151    
152 johnm 1.54 if [[ -z ${old_gcc_ver} || -z ${old_chost} ]]; then
153     ewarn ""
154     ewarn "Unable to detect what version of GCC was used to compile"
155     ewarn "the kernel. Build will continue, but you may experience problems."
156     elif [[ ${curr_gcc_ver} != ${old_gcc_ver} ]]; then
157 johnm 1.53 ewarn ""
158     ewarn "The version of GCC you are using (${curr_gcc_ver}) does"
159     ewarn "not match the version of GCC used to compile the"
160     ewarn "kernel (${old_gcc_ver})."
161     result=1
162     elif [[ ${CHOST} != ${old_chost} ]]; then
163     ewarn ""
164     ewarn "The current CHOST (${CHOST}) does not match the chost"
165     ewarn "used when compiling the kernel (${old_chost})."
166     result=1
167     fi
168    
169     if [[ ${result} -gt 0 ]]; then
170     ewarn ""
171     ewarn "Build will not continue, because you will experience problems."
172     ewarn "To fix this either change the version of GCC you wish to use"
173     ewarn "to match the kernel, or recompile the kernel first."
174     die "GCC Version Mismatch."
175     fi
176     }
177    
178 dsd 1.86 # @FUNCTION: use_m
179     # @RETURN: true or false
180     # @DESCRIPTION:
181     # It checks if the kernel version is greater than 2.6.5.
182 johnm 1.1 use_m() {
183 genstef 1.69 debug-print-function ${FUNCNAME} $*
184    
185 johnm 1.1 # if we haven't determined the version yet, we need too.
186     get_version;
187 swegener 1.49
188 johnm 1.1 # if the kernel version is greater than 2.6.6 then we should use
189 johnm 1.8 # M= instead of SUBDIRS=
190 robbat2 1.102 [ ${KV_MAJOR} -eq 3 ] && return 0
191 johnm 1.1 [ ${KV_MAJOR} -eq 2 -a ${KV_MINOR} -gt 5 -a ${KV_PATCH} -gt 5 ] && \
192     return 0 || return 1
193     }
194    
195 dsd 1.86 # @FUNCTION: convert_to_m
196     # @USAGE: /path/to/the/file
197     # @DESCRIPTION:
198     # It converts a file (e.g. a makefile) to use M= instead of SUBDIRS=
199 johnm 1.1 convert_to_m() {
200 genstef 1.69 debug-print-function ${FUNCNAME} $*
201    
202 johnm 1.1 if use_m
203     then
204 johnm 1.32 [ ! -f "${1}" ] && \
205     die "convert_to_m() requires a filename as an argument"
206 johnm 1.8 ebegin "Converting ${1/${WORKDIR}\//} to use M= instead of SUBDIRS="
207 robbat2 1.96 sed -i 's:SUBDIRS=:M=:g' "${1}"
208 johnm 1.1 eend $?
209     fi
210     }
211    
212 dsd 1.86 # internal function
213     #
214     # FUNCTION: update_depmod
215     # DESCRIPTION:
216     # It updates the modules.dep file for the current kernel.
217 johnm 1.1 update_depmod() {
218 genstef 1.69 debug-print-function ${FUNCNAME} $*
219    
220 johnm 1.1 # if we haven't determined the version yet, we need too.
221     get_version;
222 swegener 1.49
223 johnm 1.1 ebegin "Updating module dependencies for ${KV_FULL}"
224 robbat2 1.96 if [ -r "${KV_OUT_DIR}"/System.map ]
225 johnm 1.1 then
226 mpagano 1.106 depmod -ae -F "${KV_OUT_DIR}"/System.map -b "${ROOT}" ${KV_FULL}
227 johnm 1.18 eend $?
228 johnm 1.1 else
229     ewarn
230 johnm 1.5 ewarn "${KV_OUT_DIR}/System.map not found."
231 johnm 1.1 ewarn "You must manually update the kernel module dependencies using depmod."
232 johnm 1.18 eend 1
233 johnm 1.1 ewarn
234     fi
235     }
236    
237 dsd 1.86 # internal function
238     #
239     # FUNCTION: update_modules
240     # DESCRIPTION:
241     # It calls the update-modules utility.
242 johnm 1.3 update_modules() {
243 genstef 1.69 debug-print-function ${FUNCNAME} $*
244    
245 genstef 1.73 if [ -x /sbin/update-modules ] && \
246 robbat2 1.96 grep -v -e "^#" -e "^$" "${D}"/etc/modules.d/* >/dev/null 2>&1; then
247 genstef 1.73 ebegin "Updating modules.conf"
248     /sbin/update-modules
249     eend $?
250 vapier 1.74 elif [ -x /sbin/update-modules ] && \
251 robbat2 1.96 grep -v -e "^#" -e "^$" "${D}"/etc/modules.d/* >/dev/null 2>&1; then
252 johnm 1.3 ebegin "Updating modules.conf"
253 vapier 1.74 /sbin/update-modules
254 johnm 1.3 eend $?
255     fi
256     }
257    
258 dsd 1.86 # internal function
259     #
260     # FUNCTION: move_old_moduledb
261     # DESCRIPTION:
262     # It updates the location of the database used by the module-rebuild utility.
263 johnm 1.41 move_old_moduledb() {
264 genstef 1.69 debug-print-function ${FUNCNAME} $*
265    
266 robbat2 1.96 local OLDDIR="${ROOT}"/usr/share/module-rebuild/
267     local NEWDIR="${ROOT}"/var/lib/module-rebuild/
268 swegener 1.49
269 robbat2 1.96 if [[ -f "${OLDDIR}"/moduledb ]]; then
270     [[ ! -d "${NEWDIR}" ]] && mkdir -p "${NEWDIR}"
271     [[ ! -f "${NEWDIR}"/moduledb ]] && \
272     mv "${OLDDIR}"/moduledb "${NEWDIR}"/moduledb
273     rm -f "${OLDDIR}"/*
274     rmdir "${OLDDIR}"
275 johnm 1.41 fi
276     }
277    
278 dsd 1.86 # internal function
279     #
280     # FUNCTION: update_moduledb
281     # DESCRIPTION:
282     # It adds the package to the /var/lib/module-rebuild/moduledb database used by the module-rebuild utility.
283 johnm 1.37 update_moduledb() {
284 genstef 1.69 debug-print-function ${FUNCNAME} $*
285    
286 robbat2 1.96 local MODULEDB_DIR="${ROOT}"/var/lib/module-rebuild/
287 johnm 1.41 move_old_moduledb
288 johnm 1.40
289 robbat2 1.96 if [[ ! -f "${MODULEDB_DIR}"/moduledb ]]; then
290     [[ ! -d "${MODULEDB_DIR}" ]] && mkdir -p "${MODULEDB_DIR}"
291     touch "${MODULEDB_DIR}"/moduledb
292 johnm 1.37 fi
293 vapier 1.72
294 robbat2 1.96 if ! grep -qs ${CATEGORY}/${PN}-${PVR} "${MODULEDB_DIR}"/moduledb ; then
295 johnm 1.37 einfo "Adding module to moduledb."
296 robbat2 1.96 echo "a:1:${CATEGORY}/${PN}-${PVR}" >> "${MODULEDB_DIR}"/moduledb
297 swegener 1.49 fi
298 johnm 1.37 }
299    
300 dsd 1.86 # internal function
301     #
302     # FUNCTION: remove_moduledb
303     # DESCRIPTION:
304     # It removes the package from the /var/lib/module-rebuild/moduledb database used by
305     # the module-rebuild utility.
306 johnm 1.37 remove_moduledb() {
307 genstef 1.69 debug-print-function ${FUNCNAME} $*
308    
309 robbat2 1.96 local MODULEDB_DIR="${ROOT}"/var/lib/module-rebuild/
310 johnm 1.41 move_old_moduledb
311 johnm 1.40
312 robbat2 1.96 if grep -qs ${CATEGORY}/${PN}-${PVR} "${MODULEDB_DIR}"/moduledb ; then
313 johnm 1.37 einfo "Removing ${CATEGORY}/${PN}-${PVR} from moduledb."
314 robbat2 1.96 sed -i -e "/.*${CATEGORY}\/${PN}-${PVR}.*/d" "${MODULEDB_DIR}"/moduledb
315 johnm 1.37 fi
316     }
317    
318 dsd 1.86 # @FUNCTION: set_kvobj
319     # @DESCRIPTION:
320     # It sets the KV_OBJ variable.
321 johnm 1.1 set_kvobj() {
322 genstef 1.69 debug-print-function ${FUNCNAME} $*
323    
324 robbat2 1.102 if kernel_is ge 2 6
325 johnm 1.1 then
326     KV_OBJ="ko"
327     else
328     KV_OBJ="o"
329     fi
330 johnm 1.26 # Do we really need to know this?
331     # Lets silence it.
332     # einfo "Using KV_OBJ=${KV_OBJ}"
333 johnm 1.1 }
334    
335 genstef 1.68 get-KERNEL_CC() {
336 genstef 1.69 debug-print-function ${FUNCNAME} $*
337    
338 vapier 1.82 if [[ -n ${KERNEL_CC} ]] ; then
339     echo "${KERNEL_CC}"
340     return
341     fi
342    
343 genstef 1.68 local kernel_cc
344     if [ -n "${KERNEL_ABI}" ]; then
345     # In future, an arch might want to define CC_$ABI
346     #kernel_cc="$(get_abi_CC)"
347 swegener 1.70 #[ -z "${kernel_cc}" ] &&
348 genstef 1.68 kernel_cc="$(tc-getCC $(ABI=${KERNEL_ABI} get_abi_CHOST))"
349     else
350     kernel_cc=$(tc-getCC)
351     fi
352     echo "${kernel_cc}"
353     }
354    
355 dsd 1.86 # internal function
356     #
357     # FUNCTION:
358     # USAGE: /path/to/the/modulename_without_extension
359     # RETURN: A file in /etc/modules.d/ (kernel < 2.6) or /etc/modprobe.d/ (kernel >= 2.6)
360     # DESCRIPTION:
361     # This function will generate and install the neccessary modprobe.d/modules.d file from the
362     # information contained in the modules exported parms.
363     # (see the variables MODULESD_<modulename>_ENABLED, MODULESD_<modulename>_EXAMPLES,
364     # MODULESD_<modulename>_ALIASES, MODULESD_<modulename>_ADDITION and MODULESD_<modulename>_DOCS).
365     #
366     # At the end the documentation specified with MODULESD_<modulename>_DOCS is installed.
367 johnm 1.11 generate_modulesd() {
368 genstef 1.69 debug-print-function ${FUNCNAME} $*
369    
370 johnm 1.54 local currm_path currm currm_t t myIFS myVAR
371 johnm 1.26 local module_docs module_enabled module_aliases \
372     module_additions module_examples module_modinfo module_opts
373    
374     for currm_path in ${@}
375 johnm 1.11 do
376 johnm 1.26 currm=${currm_path//*\/}
377     currm=$(echo ${currm} | tr '[:lower:]' '[:upper:]')
378 johnm 1.54 currm_t=${currm}
379     while [[ -z ${currm_t//*-*} ]]; do
380     currm_t=${currm_t/-/_}
381     done
382 johnm 1.26
383 johnm 1.54 module_docs="$(eval echo \${MODULESD_${currm_t}_DOCS})"
384     module_enabled="$(eval echo \${MODULESD_${currm_t}_ENABLED})"
385     module_aliases="$(eval echo \${#MODULESD_${currm_t}_ALIASES[*]})"
386     module_additions="$(eval echo \${#MODULESD_${currm_t}_ADDITIONS[*]})"
387     module_examples="$(eval echo \${#MODULESD_${currm_t}_EXAMPLES[*]})"
388 johnm 1.26
389 johnm 1.27 [[ ${module_aliases} -eq 0 ]] && unset module_aliases
390     [[ ${module_additions} -eq 0 ]] && unset module_additions
391     [[ ${module_examples} -eq 0 ]] && unset module_examples
392 johnm 1.26
393 swegener 1.49 # If we specify we dont want it, then lets exit, otherwise we assume
394 johnm 1.26 # that if its set, we do want it.
395     [[ ${module_enabled} == no ]] && return 0
396    
397     # unset any unwanted variables.
398     for t in ${!module_*}
399 johnm 1.11 do
400 johnm 1.26 [[ -z ${!t} ]] && unset ${t}
401 johnm 1.11 done
402    
403 johnm 1.26 [[ -z ${!module_*} ]] && return 0
404    
405     # OK so now if we have got this far, then we know we want to continue
406     # and generate the modules.d file.
407     module_modinfo="$(modinfo -p ${currm_path}.${KV_OBJ})"
408     module_config="${T}/modulesd-${currm}"
409    
410 johnm 1.11 ebegin "Preparing file for modules.d"
411 johnm 1.26 #-----------------------------------------------------------------------
412 robbat2 1.96 echo "# modules.d configuration file for ${currm}" >> "${module_config}"
413 johnm 1.26 #-----------------------------------------------------------------------
414     [[ -n ${module_docs} ]] && \
415 robbat2 1.96 echo "# For more information please read:" >> "${module_config}"
416 johnm 1.26 for t in ${module_docs}
417 johnm 1.11 do
418 robbat2 1.96 echo "# ${t//*\/}" >> "${module_config}"
419 johnm 1.11 done
420 robbat2 1.96 echo >> "${module_config}"
421 johnm 1.11
422 johnm 1.26 #-----------------------------------------------------------------------
423 johnm 1.27 if [[ ${module_aliases} -gt 0 ]]
424 johnm 1.11 then
425 robbat2 1.96 echo "# Internal Aliases - Do not edit" >> "${module_config}"
426     echo "# ------------------------------" >> "${module_config}"
427 johnm 1.12
428 johnm 1.26 for((t=0; t<${module_aliases}; t++))
429 johnm 1.11 do
430 johnm 1.26 echo "alias $(eval echo \${MODULESD_${currm}_ALIASES[$t]})" \
431 robbat2 1.96 >> "${module_config}"
432 johnm 1.12 done
433 robbat2 1.96 echo '' >> "${module_config}"
434 johnm 1.11 fi
435    
436 johnm 1.26 #-----------------------------------------------------------------------
437     if [[ -n ${module_modinfo} ]]
438 johnm 1.11 then
439 robbat2 1.96 echo >> "${module_config}"
440     echo "# Configurable module parameters" >> "${module_config}"
441     echo "# ------------------------------" >> "${module_config}"
442 johnm 1.26 myIFS="${IFS}"
443 johnm 1.11 IFS="$(echo -en "\n\b")"
444 swegener 1.49
445 johnm 1.26 for t in ${module_modinfo}
446 johnm 1.11 do
447 johnm 1.26 myVAR="$(echo ${t#*:} | grep -e " [0-9][ =]" | sed "s:.*\([01][= ]\).*:\1:")"
448     if [[ -n ${myVAR} ]]
449 johnm 1.11 then
450 johnm 1.26 module_opts="${module_opts} ${t%%:*}:${myVAR}"
451 johnm 1.11 fi
452 robbat2 1.96 echo -e "# ${t%%:*}:\t${t#*:}" >> "${module_config}"
453 swegener 1.49 done
454 johnm 1.26 IFS="${myIFS}"
455 robbat2 1.96 echo '' >> "${module_config}"
456 johnm 1.26 fi
457    
458     #-----------------------------------------------------------------------
459     if [[ $(eval echo \${MODULESD_${currm}_ALIASES[0]}) == guess ]]
460     then
461     # So lets do some guesswork eh?
462     if [[ -n ${module_opts} ]]
463     then
464 robbat2 1.96 echo "# For Example..." >> "${module_config}"
465     echo "# --------------" >> "${module_config}"
466 johnm 1.26 for t in ${module_opts}
467     do
468 robbat2 1.96 echo "# options ${currm} ${t//:*}=${t//*:}" >> "${module_config}"
469 johnm 1.26 done
470 robbat2 1.96 echo '' >> "${module_config}"
471 johnm 1.26 fi
472 johnm 1.27 elif [[ ${module_examples} -gt 0 ]]
473 johnm 1.26 then
474 robbat2 1.96 echo "# For Example..." >> "${module_config}"
475     echo "# --------------" >> "${module_config}"
476 johnm 1.26 for((t=0; t<${module_examples}; t++))
477     do
478     echo "options $(eval echo \${MODULESD_${currm}_EXAMPLES[$t]})" \
479 robbat2 1.96 >> "${module_config}"
480 johnm 1.11 done
481 robbat2 1.96 echo '' >> "${module_config}"
482 johnm 1.11 fi
483 johnm 1.26
484     #-----------------------------------------------------------------------
485 johnm 1.27 if [[ ${module_additions} -gt 0 ]]
486 johnm 1.11 then
487 johnm 1.26 for((t=0; t<${module_additions}; t++))
488 johnm 1.11 do
489 johnm 1.26 echo "$(eval echo \${MODULESD_${currm}_ADDITIONS[$t]})" \
490 robbat2 1.96 >> "${module_config}"
491 johnm 1.11 done
492 robbat2 1.96 echo '' >> "${module_config}"
493 johnm 1.11 fi
494 swegener 1.49
495 johnm 1.26 #-----------------------------------------------------------------------
496    
497 johnm 1.12 # then we install it
498 cardoe 1.81 if kernel_is ge 2 6; then
499 genstef 1.80 insinto /etc/modprobe.d
500     else
501     insinto /etc/modules.d
502     fi
503 robbat2 1.96 newins "${module_config}" "${currm_path//*\/}.conf"
504 johnm 1.27
505 johnm 1.12 # and install any documentation we might have.
506 johnm 1.26 [[ -n ${module_docs} ]] && dodoc ${module_docs}
507 johnm 1.11 done
508     eend 0
509 johnm 1.26 return 0
510 johnm 1.11 }
511    
512 dsd 1.86 # internal function
513     #
514     # FUNCTION: find_module_params
515     # USAGE: A string "NAME(LIBDIR:SRCDIR:OBJDIR)"
516     # RETURN: The string "modulename:NAME libdir:LIBDIR srcdir:SRCDIR objdir:OBJDIR"
517     # DESCRIPTION:
518     # Analyze the specification NAME(LIBDIR:SRCDIR:OBJDIR) of one module as described in MODULE_NAMES.
519 johnm 1.18 find_module_params() {
520 genstef 1.69 debug-print-function ${FUNCNAME} $*
521    
522 johnm 1.18 local matched_offset=0 matched_opts=0 test="${@}" temp_var result
523     local i=0 y=0 z=0
524 swegener 1.49
525 johnm 1.18 for((i=0; i<=${#test}; i++))
526     do
527     case ${test:${i}:1} in
528     \() matched_offset[0]=${i};;
529     \:) matched_opts=$((${matched_opts} + 1));
530     matched_offset[${matched_opts}]="${i}";;
531     \)) matched_opts=$((${matched_opts} + 1));
532     matched_offset[${matched_opts}]="${i}";;
533     esac
534     done
535 swegener 1.49
536 johnm 1.18 for((i=0; i<=${matched_opts}; i++))
537     do
538     # i = offset were working on
539     # y = last offset
540     # z = current offset - last offset
541     # temp_var = temporary name
542     case ${i} in
543     0) tempvar=${test:0:${matched_offset[0]}};;
544     *) y=$((${matched_offset[$((${i} - 1))]} + 1))
545     z=$((${matched_offset[${i}]} - ${matched_offset[$((${i} - 1))]}));
546     z=$((${z} - 1))
547     tempvar=${test:${y}:${z}};;
548     esac
549 swegener 1.49
550 johnm 1.18 case ${i} in
551     0) result="${result} modulename:${tempvar}";;
552     1) result="${result} libdir:${tempvar}";;
553     2) result="${result} srcdir:${tempvar}";;
554     3) result="${result} objdir:${tempvar}";;
555     esac
556     done
557 swegener 1.49
558 johnm 1.18 echo ${result}
559     }
560    
561 johnm 1.1 # default ebuild functions
562     # --------------------------------
563    
564 dsd 1.86 # @FUNCTION: linux-mod_pkg_setup
565     # @DESCRIPTION:
566     # It checks the CONFIG_CHECK options (see linux-info.eclass(5)), verifies that the kernel is
567     # configured, verifies that the sources are prepared, verifies that the modules support is builtin
568     # in the kernel and sets the object extension KV_OBJ.
569 johnm 1.1 linux-mod_pkg_setup() {
570 genstef 1.69 debug-print-function ${FUNCNAME} $*
571    
572 ferringb 1.101 local is_bin="${MERGE_TYPE}"
573    
574 robbat2 1.97 # If we are installing a binpkg, take a different path.
575 ferringb 1.101 # use MERGE_TYPE if available (eapi>=4); else use non-PMS EMERGE_FROM (eapi<4)
576     if has ${EAPI} 0 1 2 3; then
577     is_bin=${EMERGE_FROM}
578     fi
579    
580     if [[ ${is_bin} == binary ]]; then
581 robbat2 1.97 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 ulm 1.100 # ~ needs always to be quoted, else bash expands it.
606 robbat2 1.97 for config in $CONFIG_CHECK ; do
607 robbat2 1.99 optional='~'
608     [[ ${config:0:1} == "~" ]] && optional=''
609 robbat2 1.98 new_CONFIG_CHECK="${new_CONFIG_CHECK} ${optional}${config}"
610 robbat2 1.97 done
611     export CONFIG_CHECK="${new_CONFIG_CHECK}"
612     linux-info_pkg_setup;
613     }
614    
615 johnm 1.63 strip_modulenames() {
616 genstef 1.69 debug-print-function ${FUNCNAME} $*
617    
618 johnm 1.63 local i
619     for i in ${MODULE_IGNORE}; do
620     MODULE_NAMES=${MODULE_NAMES//${i}(*}
621     done
622     }
623    
624 dsd 1.86 # @FUNCTION: linux-mod_src_compile
625     # @DESCRIPTION:
626     # It compiles all the modules specified in MODULE_NAMES. For each module the econf command is
627     # executed only if ECONF_PARAMS is defined, the name of the target is specified by BUILD_TARGETS
628     # while the options are in BUILD_PARAMS (all the modules share these variables). The compilation
629     # happens inside ${srcdir}.
630     #
631     # Look at the description of these variables for more details.
632 johnm 1.1 linux-mod_src_compile() {
633 genstef 1.69 debug-print-function ${FUNCNAME} $*
634    
635 vapier 1.84 local modulename libdir srcdir objdir i n myABI="${ABI}"
636     set_arch_to_kernel
637 blubb 1.62 ABI="${KERNEL_ABI}"
638 johnm 1.26
639 johnm 1.16 BUILD_TARGETS=${BUILD_TARGETS:-clean module}
640 johnm 1.63 strip_modulenames;
641 phreak 1.76 cd "${S}"
642 dsd 1.93 touch Module.symvers
643 johnm 1.9 for i in ${MODULE_NAMES}
644 johnm 1.1 do
645 johnm 1.23 unset libdir srcdir objdir
646 johnm 1.18 for n in $(find_module_params ${i})
647     do
648     eval ${n/:*}=${n/*:/}
649     done
650     libdir=${libdir:-misc}
651     srcdir=${srcdir:-${S}}
652     objdir=${objdir:-${srcdir}}
653 swegener 1.49
654 johnm 1.18 if [ ! -f "${srcdir}/.built" ];
655 johnm 1.16 then
656 robbat2 1.96 cd "${srcdir}"
657 dsd 1.93 ln -s "${S}"/Module.symvers Module.symvers
658 johnm 1.16 einfo "Preparing ${modulename} module"
659 johnm 1.22 if [[ -n ${ECONF_PARAMS} ]]
660     then
661     econf ${ECONF_PARAMS} || \
662     die "Unable to run econf ${ECONF_PARAMS}"
663     fi
664 vapier 1.83
665 robbat2 1.79 # This looks messy, but it is needed to handle multiple variables
666     # being passed in the BUILD_* stuff where the variables also have
667     # spaces that must be preserved. If don't do this, then the stuff
668     # inside the variables gets used as targets for Make, which then
669     # fails.
670     eval "emake HOSTCC=\"$(tc-getBUILD_CC)\" \
671 vapier 1.83 CROSS_COMPILE=${CHOST}- \
672 robbat2 1.79 LDFLAGS=\"$(get_abi_LDFLAGS)\" \
673     ${BUILD_FIXES} \
674     ${BUILD_PARAMS} \
675     ${BUILD_TARGETS} " \
676 vapier 1.83 || die "Unable to emake HOSTCC="$(tc-getBUILD_CC)" CROSS_COMPILE=${CHOST}- LDFLAGS="$(get_abi_LDFLAGS)" ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS}"
677 robbat2 1.96 cd "${OLDPWD}"
678     touch "${srcdir}"/.built
679 johnm 1.16 fi
680 johnm 1.1 done
681 johnm 1.26
682 vapier 1.84 set_arch_to_portage
683 blubb 1.62 ABI="${myABI}"
684 johnm 1.1 }
685    
686 dsd 1.86 # @FUNCTION: linux-mod_src_install
687     # @DESCRIPTION:
688     # It install the modules specified in MODULES_NAME. The modules should be inside the ${objdir}
689     # directory and they are installed inside /lib/modules/${KV_FULL}/${libdir}.
690     #
691     # The modprobe.d/modules.d configuration file is automatically generated if the
692     # MODULESD_<modulename>_* variables are defined. The only way to stop this process is by
693     # setting MODULESD_<modulename>_ENABLED=no. At the end the documentation specified via
694     # MODULESD_<modulename>_DOCS is also installed.
695     #
696     # Look at the description of these variables for more details.
697 johnm 1.1 linux-mod_src_install() {
698 genstef 1.69 debug-print-function ${FUNCNAME} $*
699    
700 johnm 1.18 local modulename libdir srcdir objdir i n
701 swegener 1.49
702 johnm 1.63 strip_modulenames;
703 johnm 1.9 for i in ${MODULE_NAMES}
704 johnm 1.1 do
705 johnm 1.23 unset libdir srcdir objdir
706 johnm 1.18 for n in $(find_module_params ${i})
707     do
708     eval ${n/:*}=${n/*:/}
709     done
710     libdir=${libdir:-misc}
711     srcdir=${srcdir:-${S}}
712     objdir=${objdir:-${srcdir}}
713 johnm 1.1
714     einfo "Installing ${modulename} module"
715 robbat2 1.96 cd "${objdir}" || die "${objdir} does not exist"
716 brix 1.57 insinto /lib/modules/${KV_FULL}/${libdir}
717 vapier 1.56 doins ${modulename}.${KV_OBJ} || die "doins ${modulename}.${KV_OBJ} failed"
718 robbat2 1.96 cd "${OLDPWD}"
719 swegener 1.49
720 robbat2 1.96 generate_modulesd "${objdir}/${modulename}"
721 johnm 1.1 done
722     }
723    
724 dsd 1.86 # @FUNCTION: linux-mod_pkg_preinst
725     # @DESCRIPTION:
726     # It checks what to do after having merged the package.
727 genstef 1.65 linux-mod_pkg_preinst() {
728 genstef 1.69 debug-print-function ${FUNCNAME} $*
729    
730 zmedico 1.77 [ -d "${D}lib/modules" ] && UPDATE_DEPMOD=true || UPDATE_DEPMOD=false
731     [ -d "${D}etc/modules.d" ] && UPDATE_MODULES=true || UPDATE_MODULES=false
732     [ -d "${D}lib/modules" ] && UPDATE_MODULEDB=true || UPDATE_MODULEDB=false
733 genstef 1.65 }
734    
735 dsd 1.86 # @FUNCTION: linux-mod_pkg_postinst
736     # @DESCRIPTION:
737     # It executes /sbin/depmod and adds the package to the /var/lib/module-rebuild/moduledb
738     # database (if ${D}/lib/modules is created) and it runs /sbin/update-modules
739     # (if ${D}/etc/modules.d is created).
740 johnm 1.1 linux-mod_pkg_postinst() {
741 genstef 1.69 debug-print-function ${FUNCNAME} $*
742    
743 genstef 1.65 ${UPDATE_DEPMOD} && update_depmod;
744     ${UPDATE_MODULES} && update_modules;
745     ${UPDATE_MODULEDB} && update_moduledb;
746 johnm 1.1 }
747 johnm 1.37
748 dsd 1.86 # @FUNCTION: linux-mod_pkg_postrm
749     # @DESCRIPTION:
750     # It removes the package from the /var/lib/module-rebuild/moduledb database but it doens't
751     # call /sbin/depmod and /sbin/update-modules because the modules are still installed.
752 johnm 1.37 linux-mod_pkg_postrm() {
753 swegener 1.70 debug-print-function ${FUNCNAME} $*
754 johnm 1.37 remove_moduledb;
755     }

  ViewVC Help
Powered by ViewVC 1.1.20