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

Contents of /eclass/linux-mod.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.111 - (hide annotations) (download)
Tue Mar 26 07:36:11 2013 UTC (17 months, 1 week ago) by ssuominen
Branch: MAIN
Changes since 1.110: +7 -5 lines
Stop pulling in virtual/linux-sources when used for sys-apps/kmod by angry_vincent

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

  ViewVC Help
Powered by ViewVC 1.1.20