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

Contents of /eclass/linux-mod.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.14 - (show annotations) (download)
Wed Dec 29 10:11:16 2004 UTC (9 years, 10 months ago) by johnm
Branch: MAIN
Changes since 1.13: +1 -1 lines
exporting src_install

1 # Copyright 1999-2004 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: $
4
5 # Description: This eclass is used to interface with linux-info in such a way
6 # to provide the functionality required and initial functions
7 # required to install external modules against a kernel source
8 # tree.
9 #
10 # Maintainer: John Mylchreest <johnm@gentoo.org>
11 # Copyright 2004 Gentoo Linux
12 #
13 # Please direct your bugs to the current eclass maintainer :)
14
15 # A Couple of env vars are available to effect usage of this eclass
16 # These are as follows:
17 #
18 # Env Var Option Default Description
19 # KERNEL_DIR <string> /usr/src/linux The directory containing kernel
20 # the target kernel sources.
21 # BUILD_PARAMS <string> The parameters to pass to make.
22 # BUILD_TARGETS <string> clean modules The build targets to pass to make.
23 # MODULE_NAMES <string> This is the modules which are
24 # to be built automatically using the
25 # default pkg_compile/install. They
26 # are explained properly below.
27 # NO_MODULESD <string> Set this to something to prevent
28 # modulesd file generation
29
30
31 # MODULE_NAMES - Detailed Overview
32 #
33 # The structure of each MODULE_NAMES entry is as follows:
34 # modulename(libmodulesdir:modulesourcedir)
35 # for example:
36 # MODULE_NAMES="module_pci(pci:${S}/pci) module_usb(usb:${S}/usb)"
37 #
38 # what this would do is
39 # cd ${S}/pci
40 # make ${BUILD_PARAMS} ${BUILD_TARGETS}
41 # insinto /lib/modules/${KV_FULL}/pci
42 # doins module_pci.${KV_OBJ}
43 #
44 # cd ${S}/usb
45 # make ${BUILD_PARAMS} ${BUILD_TARGETS}
46 # insinto /lib/modules/${KV_FULL}/usb
47 # doins module_usb.${KV_OBJ}
48 #
49 # if the modulessourcedir isnt specified, it assumes ${S}
50 # if the libmodulesdir isnt specified, it assumes misc.
51 # if no seperator is defined ":" then it assumes the argument is modulesourcedir
52
53 inherit linux-info
54 ECLASS=linux-mod
55 INHERITED="$INHERITED $ECLASS"
56 EXPORT_FUNCTIONS pkg_setup src_install pkg_postinst src_compile
57
58 DESCRIPTION="Based on the $ECLASS eclass"
59 SLOT=0
60 DEPEND="virtual/linux-sources
61 sys-apps/sed
62 sys-apps/module-init-tools"
63
64 # eclass utilities
65 # ----------------------------------
66
67 use_m() {
68 # if we haven't determined the version yet, we need too.
69 get_version;
70
71 # if the kernel version is greater than 2.6.6 then we should use
72 # M= instead of SUBDIRS=
73 [ ${KV_MAJOR} -eq 2 -a ${KV_MINOR} -gt 5 -a ${KV_PATCH} -gt 5 ] && \
74 return 0 || return 1
75 }
76
77 convert_to_m() {
78 [ ! -f "${1}" ] && die "convert_to_m() requires a filename as an argument"
79 if use_m
80 then
81 ebegin "Converting ${1/${WORKDIR}\//} to use M= instead of SUBDIRS="
82 sed -i 's:SUBDIRS=:M=:g' ${1}
83 eend $?
84 fi
85 }
86
87 update_depmod() {
88 # if we haven't determined the version yet, we need too.
89 get_version;
90
91 ebegin "Updating module dependencies for ${KV_FULL}"
92 if [ -r ${KV_OUT_DIR}/System.map ]
93 then
94 depmod -ae -F ${KV_OUT_DIR}/System.map -b ${ROOT} -r ${KV_FULL}
95 else
96 ewarn
97 ewarn "${KV_OUT_DIR}/System.map not found."
98 ewarn "You must manually update the kernel module dependencies using depmod."
99 ewarn
100 fi
101 eend $?
102 }
103
104 update_modules() {
105 if [ -x /sbin/modules-update ] ;
106 then
107 ebegin "Updating modules.conf"
108 /sbin/modules-update
109 eend $?
110 fi
111 }
112
113 set_kvobj() {
114 if kernel_is 2 6
115 then
116 KV_OBJ="ko"
117 else
118 KV_OBJ="o"
119 fi
120 einfo "Using KV_OBJ=${KV_OBJ}"
121 }
122
123 generate_modulesd() {
124 # This function will generate the neccessary modules.d file from the
125 # information contained in the modules exported parms
126
127 local selectedmodule selectedmodule_full selectedmodulevars parameter modinfop arg xifs temp
128 local module_docs module_opts module_aliases module_config
129
130 for arg in ${@}
131 do
132 selectedmodule_full="${arg}"
133 # strip the directory
134 selectedmodule="${selectedmodule_full/*\//}"
135 # convert the modulename to uppercase
136 selectedmodule="$(echo ${selectedmodule} | tr '[:lower:]' '[:upper:]')"
137
138 module_docs="MODULESD_${selectedmodule}_DOCS"
139 module_aliases="$(eval echo \$\{#MODULESD_${selectedmodule}_ALIASES[*]\})"
140 [ ${module_aliases} == 0 ] && unset module_aliases
141 module_docs="${!module_docs}"
142 modinfop="$(modinfo -p ${selectedmodule_full}.${KV_OBJ})"
143
144 # By now we know if there is anything we can use to generate a file with
145 # so unset empty vars and bail out if we find nothing.
146 for parameter in ${!module_*}
147 do
148 [ -z "${!parameter}" ] && unset ${parameter}
149 done
150 [ -z "${!module_*}" -a -z "${modinfop}" ] && return
151
152 #so now we can set the configfilevar
153 module_config="${T}/modulesd-${selectedmodule}"
154
155 # and being working on things.
156 ebegin "Preparing file for modules.d"
157 echo "# modules.d config file for ${selectedmodule}" >> ${module_config}
158 echo "# this file was automatically generated from linux-mod.eclass" >> ${module_config}
159 for temp in ${module_docs}
160 do
161 echo "# Please read ${temp/*\//} for more info" >> ${module_config}
162 done
163
164 if [ ${module_aliases} > 0 ];
165 then
166 echo >> ${module_config}
167 echo "# Internal Aliases - Do not edit" >> ${module_config}
168 echo "# ------------------------------" >> ${module_config}
169
170 (( module_aliases-- ))
171 for temp in $(seq 0 ${module_aliases})
172 do
173 echo "alias $(eval echo \$\{MODULESD_${selectedmodule}_ALIASES[$temp]\})" >> ${module_config}
174 done
175 fi
176
177 # and then stating any module parameters defined from the module
178 if [ -n "${modinfop}" ];
179 then
180 echo >> ${module_config}
181 echo "# Configurable module parameters" >> ${module_config}
182 echo "# ------------------------------" >> ${module_config}
183
184 xifs="${IFS}"
185 IFS="$(echo -en "\n\b")"
186 for parameter in ${modinfop}
187 do
188 temp="$(echo ${parameter#*:} | grep -e " [0-9][ =]" | sed "s:.*\([01][= ]\).*:\1:")"
189 if [ -n "${temp}" ];
190 then
191 module_opts="${module_opts} ${parameter%%:*}:${temp}"
192 fi
193 echo -e "# ${parameter%%:*}:\t${parameter#*:}" >> ${module_config}
194 done
195 IFS="${xifs}"
196 fi
197
198 # and any examples we can gather from them
199 if [ -n "${module_opts}" ];
200 then
201 echo >> ${module_config}
202 echo "# For Example..." >> ${module_config}
203 echo "# ------------------------------" >> ${module_config}
204 for parameter in ${module_opts}
205 do
206 echo "# options ${selectedmodule_full/*\//} ${parameter//:*}=${parameter//*:}" >> ${module_config}
207 done
208 fi
209
210 # then we install it
211 insinto /etc/modules.d
212 newins ${module_config} ${selectedmodule_full/*\//}
213
214 # and install any documentation we might have.
215 [ -n "${module_docs}" ] && dodoc ${module_docs}
216 done
217 eend 0
218 }
219
220 display_postinst() {
221 # if we haven't determined the version yet, we need too.
222 get_version;
223
224 local modulename moduledir sourcedir moduletemp file i
225
226 file=${ROOT}/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}
227 file=${file/\/\///}
228
229 einfo "If you would like to load this module automatically upon boot"
230 einfo "please type the following as root:"
231 for i in ${MODULE_NAMES}
232 do
233 moduletemp="$(echo ${i} | sed -e "s:\(.*\)(\(.*\)):\1 \2:")"
234 modulename="${moduletemp/ */}"
235 moduletemp="${moduletemp/* /}"
236 # if we specify two args, then we can set moduledir
237 [ -z "${moduletemp/*:*/}" ] && moduledir="${moduletemp/:*/}"
238 # if we didnt pass the brackets, then we shouldnt accept anything
239 [ -n "${moduletemp/${modulename}/}" ] && sourcedir="${moduletemp/*:/}"
240 moduledir="${moduledir:-misc}"
241 sourcedir="${sourcedir:-${S}}"
242
243 einfo " # echo \"${modulename}\" >> ${file}"
244 done
245 echo
246 }
247
248 # default ebuild functions
249 # --------------------------------
250
251 linux-mod_pkg_setup() {
252 linux-info_pkg_setup;
253 check_kernel_built;
254 check_modules_supported;
255 check_extra_config;
256 set_kvobj;
257 }
258
259 linux-mod_src_compile() {
260 local modulename moduledir sourcedir moduletemp xarch i
261 xarch="${ARCH}"
262 unset ARCH
263
264 for i in ${MODULE_NAMES}
265 do
266 moduletemp="$(echo ${i} | sed -e "s:\(.*\)(\(.*\)):\1 \2:")"
267 modulename="${moduletemp/ */}"
268 moduletemp="${moduletemp/* /}"
269 # if we specify two args, then we can set moduledir
270 [ -z "${moduletemp/*:*/}" ] && moduledir="${moduletemp/:*/}"
271 # if we didnt pass the brackets, then we shouldnt accept anything
272 [ -n "${moduletemp/${modulename}/}" ] && sourcedir="${moduletemp/*:/}"
273 moduledir="${moduledir:-misc}"
274 sourcedir="${sourcedir:-${S}}"
275
276 einfo "Preparing ${modulename} module"
277 cd ${sourcedir}
278 emake ${BUILD_PARAMS} ${BUILD_TARGETS:-clean module} || die Unable to make ${BUILD_PARAMS} ${BUILD_TARGETS:-clean module}.
279 done
280 ARCH="${xarch}"
281 }
282
283 linux-mod_src_install() {
284 local modulename moduledir sourcedir moduletemp i
285
286 for i in ${MODULE_NAMES}
287 do
288 moduletemp="$(echo ${i} | sed -e "s:\(.*\)(\(.*\)):\1 \2:")"
289 modulename="${moduletemp/ */}"
290 moduletemp="${moduletemp/* /}"
291 # if we specify two args, then we can set moduledir
292 [ -z "${moduletemp/*:*/}" ] && moduledir="${moduletemp/:*/}"
293 # if we didnt pass the brackets, then we shouldnt accept anything
294 [ -n "${moduletemp/${modulename}/}" ] && sourcedir="${moduletemp/*:/}"
295 moduledir="${moduledir:-misc}"
296 sourcedir="${sourcedir:-${S}}"
297
298 einfo "Installing ${modulename} module"
299 cd ${sourcedir}
300 insinto /lib/modules/${KV_FULL}/${moduledir}
301 doins ${modulename}.${KV_OBJ}
302
303 [ -z "${NO_MODULESD}" ] && generate_modulesd ${sourcedir}/${modulename}
304 done
305 }
306
307 linux-mod_pkg_postinst() {
308 update_depmod;
309 update_modules;
310 display_postinst;
311 }

  ViewVC Help
Powered by ViewVC 1.1.20