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

Contents of /eclass/linux-mod.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.103 - (hide annotations) (download)
Tue Aug 9 22:11:53 2011 UTC (2 years, 11 months ago) by vapier
Branch: MAIN
Changes since 1.102: +1 -6 lines
drop old comment now that eutils.eclass no longer contains these funcs

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

  ViewVC Help
Powered by ViewVC 1.1.20