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

Contents of /eclass/linux-mod.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.15 - (hide annotations) (download)
Thu Jan 6 13:58:15 2005 UTC (9 years, 6 months ago) by johnm
Branch: MAIN
Changes since 1.14: +2 -2 lines
Fixed bugs: 75034 76849 74655

1 johnm 1.1 # Copyright 1999-2004 Gentoo Foundation
2     # Distributed under the terms of the GNU General Public License v2
3 johnm 1.3 # $Header: $
4 johnm 1.1
5 johnm 1.10 # 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 johnm 1.12 # NO_MODULESD <string> Set this to something to prevent
28     # modulesd file generation
29 johnm 1.10
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 johnm 1.1
53     inherit linux-info
54     ECLASS=linux-mod
55     INHERITED="$INHERITED $ECLASS"
56 johnm 1.14 EXPORT_FUNCTIONS pkg_setup src_install pkg_postinst src_compile
57 johnm 1.1
58     DESCRIPTION="Based on the $ECLASS eclass"
59     SLOT=0
60     DEPEND="virtual/linux-sources
61 johnm 1.11 sys-apps/sed
62     sys-apps/module-init-tools"
63 johnm 1.1
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 johnm 1.8 # M= instead of SUBDIRS=
73 johnm 1.1 [ ${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 johnm 1.8 ebegin "Converting ${1/${WORKDIR}\//} to use M= instead of SUBDIRS="
82 johnm 1.1 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 johnm 1.5 if [ -r ${KV_OUT_DIR}/System.map ]
93 johnm 1.1 then
94 johnm 1.5 depmod -ae -F ${KV_OUT_DIR}/System.map -b ${ROOT} -r ${KV_FULL}
95 johnm 1.1 else
96     ewarn
97 johnm 1.5 ewarn "${KV_OUT_DIR}/System.map not found."
98 johnm 1.1 ewarn "You must manually update the kernel module dependencies using depmod."
99     ewarn
100     fi
101     eend $?
102     }
103    
104 johnm 1.3 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 johnm 1.1 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 johnm 1.11 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 johnm 1.12 # strip the directory
134 johnm 1.11 selectedmodule="${selectedmodule_full/*\//}"
135 johnm 1.12 # convert the modulename to uppercase
136 johnm 1.11 selectedmodule="$(echo ${selectedmodule} | tr '[:lower:]' '[:upper:]')"
137    
138     module_docs="MODULESD_${selectedmodule}_DOCS"
139     module_aliases="$(eval echo \$\{#MODULESD_${selectedmodule}_ALIASES[*]\})"
140 johnm 1.12 [ ${module_aliases} == 0 ] && unset module_aliases
141 johnm 1.11 module_docs="${!module_docs}"
142 johnm 1.12 modinfop="$(modinfo -p ${selectedmodule_full}.${KV_OBJ})"
143 johnm 1.11
144 johnm 1.12 # 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 johnm 1.11 for parameter in ${!module_*}
147     do
148     [ -z "${!parameter}" ] && unset ${parameter}
149     done
150 johnm 1.12 [ -z "${!module_*}" -a -z "${modinfop}" ] && return
151 johnm 1.11
152 johnm 1.12 #so now we can set the configfilevar
153 johnm 1.11 module_config="${T}/modulesd-${selectedmodule}"
154 johnm 1.12
155     # and being working on things.
156 johnm 1.11 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 johnm 1.12 if [ ${module_aliases} > 0 ];
165 johnm 1.11 then
166 johnm 1.13 echo >> ${module_config}
167 johnm 1.11 echo "# Internal Aliases - Do not edit" >> ${module_config}
168     echo "# ------------------------------" >> ${module_config}
169 johnm 1.12
170 johnm 1.11 (( module_aliases-- ))
171     for temp in $(seq 0 ${module_aliases})
172     do
173     echo "alias $(eval echo \$\{MODULESD_${selectedmodule}_ALIASES[$temp]\})" >> ${module_config}
174 johnm 1.12 done
175 johnm 1.11 fi
176    
177 johnm 1.12 # and then stating any module parameters defined from the module
178 johnm 1.11 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 johnm 1.12 # and any examples we can gather from them
199 johnm 1.11 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 johnm 1.12 # then we install it
211 johnm 1.11 insinto /etc/modules.d
212     newins ${module_config} ${selectedmodule_full/*\//}
213    
214 johnm 1.12 # and install any documentation we might have.
215 johnm 1.11 [ -n "${module_docs}" ] && dodoc ${module_docs}
216     done
217     eend 0
218     }
219    
220 johnm 1.1 display_postinst() {
221     # if we haven't determined the version yet, we need too.
222     get_version;
223    
224 johnm 1.10 local modulename moduledir sourcedir moduletemp file i
225 johnm 1.1
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 johnm 1.10 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 johnm 1.1 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 johnm 1.6 linux-info_pkg_setup;
253     check_kernel_built;
254 johnm 1.1 check_modules_supported;
255     set_kvobj;
256     }
257    
258     linux-mod_src_compile() {
259 johnm 1.10 local modulename moduledir sourcedir moduletemp xarch i
260 johnm 1.1 xarch="${ARCH}"
261     unset ARCH
262    
263 johnm 1.9 for i in ${MODULE_NAMES}
264 johnm 1.1 do
265 johnm 1.10 moduletemp="$(echo ${i} | sed -e "s:\(.*\)(\(.*\)):\1 \2:")"
266     modulename="${moduletemp/ */}"
267     moduletemp="${moduletemp/* /}"
268     # if we specify two args, then we can set moduledir
269     [ -z "${moduletemp/*:*/}" ] && moduledir="${moduletemp/:*/}"
270     # if we didnt pass the brackets, then we shouldnt accept anything
271     [ -n "${moduletemp/${modulename}/}" ] && sourcedir="${moduletemp/*:/}"
272 johnm 1.1 moduledir="${moduledir:-misc}"
273     sourcedir="${sourcedir:-${S}}"
274 johnm 1.10
275 johnm 1.1 einfo "Preparing ${modulename} module"
276     cd ${sourcedir}
277 johnm 1.15 emake ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS:-clean module} || \
278     die Unable to make ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS:-clean module}.
279 johnm 1.1 done
280     ARCH="${xarch}"
281     }
282    
283     linux-mod_src_install() {
284 johnm 1.10 local modulename moduledir sourcedir moduletemp i
285 johnm 1.1
286 johnm 1.9 for i in ${MODULE_NAMES}
287 johnm 1.1 do
288 johnm 1.10 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 johnm 1.1 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 johnm 1.11
303 johnm 1.12 [ -z "${NO_MODULESD}" ] && generate_modulesd ${sourcedir}/${modulename}
304 johnm 1.1 done
305     }
306    
307     linux-mod_pkg_postinst() {
308     update_depmod;
309 johnm 1.3 update_modules;
310 johnm 1.1 display_postinst;
311     }

  ViewVC Help
Powered by ViewVC 1.1.20