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

Diff of /eclass/linux-mod.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.8 Revision 1.12
1# Copyright 1999-2004 Gentoo Foundation 1# Copyright 1999-2004 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/linux-mod.eclass,v 1.8 2004/12/06 22:05:08 johnm Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/linux-mod.eclass,v 1.12 2004/12/18 16:22:13 johnm Exp $
4 4
5# This eclass provides functions for compiling external kernel modules 5# Description: This eclass is used to interface with linux-info in such a way
6# from source. 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
7 52
8inherit linux-info 53inherit linux-info
9ECLASS=linux-mod 54ECLASS=linux-mod
10INHERITED="$INHERITED $ECLASS" 55INHERITED="$INHERITED $ECLASS"
11EXPORT_FUNCTIONS pkg_setup pkg_postinst src_compile 56EXPORT_FUNCTIONS pkg_setup pkg_postinst src_compile
12 57
13DESCRIPTION="Based on the $ECLASS eclass" 58DESCRIPTION="Based on the $ECLASS eclass"
14SLOT=0 59SLOT=0
15DEPEND="virtual/linux-sources 60DEPEND="virtual/linux-sources
16 sys-apps/sed" 61 sys-apps/sed
17 62 sys-apps/module-init-tools"
18
19# This eclass is designed to help ease the installation of external kernel
20# modules into the kernel tree.
21
22 63
23# eclass utilities 64# eclass utilities
24# ---------------------------------- 65# ----------------------------------
25 66
26use_m() { 67use_m() {
77 KV_OBJ="o" 118 KV_OBJ="o"
78 fi 119 fi
79 einfo "Using KV_OBJ=${KV_OBJ}" 120 einfo "Using KV_OBJ=${KV_OBJ}"
80} 121}
81 122
123generate_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 echo "# on behalf of ${EBUILD/*\//}" >> ${module_config}
160 for temp in ${module_docs}
161 do
162 echo "# Please read ${temp/*\//} for more info" >> ${module_config}
163 done
164
165 # like inserting any aliases
166 if [ ${module_aliases} > 0 ];
167 then
168 echo "# Internal Aliases - Do not edit" >> ${module_config}
169 echo "# ------------------------------" >> ${module_config}
170
171 (( module_aliases-- ))
172 for temp in $(seq 0 ${module_aliases})
173 do
174 echo "alias $(eval echo \$\{MODULESD_${selectedmodule}_ALIASES[$temp]\})" >> ${module_config}
175 done
176 fi
177
178 # and then stating any module parameters defined from the module
179 if [ -n "${modinfop}" ];
180 then
181 echo >> ${module_config}
182 echo "# Configurable module parameters" >> ${module_config}
183 echo "# ------------------------------" >> ${module_config}
184
185 xifs="${IFS}"
186 IFS="$(echo -en "\n\b")"
187 for parameter in ${modinfop}
188 do
189 temp="$(echo ${parameter#*:} | grep -e " [0-9][ =]" | sed "s:.*\([01][= ]\).*:\1:")"
190 if [ -n "${temp}" ];
191 then
192 module_opts="${module_opts} ${parameter%%:*}:${temp}"
193 fi
194 echo -e "# ${parameter%%:*}:\t${parameter#*:}" >> ${module_config}
195 done
196 IFS="${xifs}"
197 fi
198
199 # and any examples we can gather from them
200 if [ -n "${module_opts}" ];
201 then
202 echo >> ${module_config}
203 echo "# For Example..." >> ${module_config}
204 echo "# ------------------------------" >> ${module_config}
205 for parameter in ${module_opts}
206 do
207 echo "# options ${selectedmodule_full/*\//} ${parameter//:*}=${parameter//*:}" >> ${module_config}
208 done
209 fi
210
211 # then we install it
212 insinto /etc/modules.d
213 newins ${module_config} ${selectedmodule_full/*\//}
214
215 # and install any documentation we might have.
216 [ -n "${module_docs}" ] && dodoc ${module_docs}
217 done
218 eend 0
219}
220
82display_postinst() { 221display_postinst() {
83 # if we haven't determined the version yet, we need too. 222 # if we haven't determined the version yet, we need too.
84 get_version; 223 get_version;
85 224
86 local modulename moduledir sourcedir module_temp file i 225 local modulename moduledir sourcedir moduletemp file i
87 226
88 file=${ROOT}/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR} 227 file=${ROOT}/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}
89 file=${file/\/\///} 228 file=${file/\/\///}
90 229
91 einfo "If you would like to load this module automatically upon boot" 230 einfo "If you would like to load this module automatically upon boot"
92 einfo "please type the following as root:" 231 einfo "please type the following as root:"
93 for i in ${MODULE_NAMES} 232 for i in ${MODULE_NAMES}
94 do 233 do
95 module_temp="$(echo ${i} | sed -e "s:.*(\(.*\)):\1:")" 234 moduletemp="$(echo ${i} | sed -e "s:\(.*\)(\(.*\)):\1 \2:")"
96 modulename="${i/(*/}"
97 moduledir="${module_temp/:*/}" 235 modulename="${moduletemp/ */}"
236 moduletemp="${moduletemp/* /}"
237 # if we specify two args, then we can set moduledir
238 [ -z "${moduletemp/*:*/}" ] && moduledir="${moduletemp/:*/}"
239 # if we didnt pass the brackets, then we shouldnt accept anything
240 [ -n "${moduletemp/${modulename}/}" ] && sourcedir="${moduletemp/*:/}"
98 moduledir="${moduledir:-misc}" 241 moduledir="${moduledir:-misc}"
99 sourcedir="${module_temp/*:/}"
100 sourcedir="${sourcedir:-${S}}" 242 sourcedir="${sourcedir:-${S}}"
101 243
102 einfo " # echo \"${modulename}\" >> ${file}" 244 einfo " # echo \"${modulename}\" >> ${file}"
103 done 245 done
104 echo 246 echo
114 check_extra_config; 256 check_extra_config;
115 set_kvobj; 257 set_kvobj;
116} 258}
117 259
118linux-mod_src_compile() { 260linux-mod_src_compile() {
119 local modulename moduledir sourcedir module_temp xarch i 261 local modulename moduledir sourcedir moduletemp xarch i
120 xarch="${ARCH}" 262 xarch="${ARCH}"
121 unset ARCH 263 unset ARCH
122 264
123 for i in "${MODULE_NAMES}" 265 for i in ${MODULE_NAMES}
124 do 266 do
125 module_temp="$(echo ${i} | sed -e "s:.*(\(.*\)):\1:")" 267 moduletemp="$(echo ${i} | sed -e "s:\(.*\)(\(.*\)):\1 \2:")"
126 modulename="${i/(*/}"
127 moduledir="${module_temp/:*/}" 268 modulename="${moduletemp/ */}"
269 moduletemp="${moduletemp/* /}"
270 # if we specify two args, then we can set moduledir
271 [ -z "${moduletemp/*:*/}" ] && moduledir="${moduletemp/:*/}"
272 # if we didnt pass the brackets, then we shouldnt accept anything
273 [ -n "${moduletemp/${modulename}/}" ] && sourcedir="${moduletemp/*:/}"
128 moduledir="${moduledir:-misc}" 274 moduledir="${moduledir:-misc}"
129 sourcedir="${module_temp/*:/}"
130 sourcedir="${sourcedir:-${S}}" 275 sourcedir="${sourcedir:-${S}}"
131 276
132 einfo "Preparing ${modulename} module" 277 einfo "Preparing ${modulename} module"
133 cd ${sourcedir} 278 cd ${sourcedir}
134 emake ${BUILD_PARAMS} ${BUILD_TARGETS:-clean module} || die Unable to make ${BUILD_PARAMS} ${BUILD_TARGETS:-clean module}. 279 emake ${BUILD_PARAMS} ${BUILD_TARGETS:-clean module} || die Unable to make ${BUILD_PARAMS} ${BUILD_TARGETS:-clean module}.
135 done 280 done
136 ARCH="${xarch}" 281 ARCH="${xarch}"
137} 282}
138 283
139linux-mod_src_install() { 284linux-mod_src_install() {
140 local modulename moduledir sourcedir module_temp i 285 local modulename moduledir sourcedir moduletemp i
141 286
142 for i in "${MODULE_NAMES}" 287 for i in ${MODULE_NAMES}
143 do 288 do
144 module_temp="$(echo ${i} | sed -e "s:.*(\(.*\)):\1:")" 289 moduletemp="$(echo ${i} | sed -e "s:\(.*\)(\(.*\)):\1 \2:")"
145 modulename="${i/(*/}"
146 moduledir="${module_temp/:*/}" 290 modulename="${moduletemp/ */}"
291 moduletemp="${moduletemp/* /}"
292 # if we specify two args, then we can set moduledir
293 [ -z "${moduletemp/*:*/}" ] && moduledir="${moduletemp/:*/}"
294 # if we didnt pass the brackets, then we shouldnt accept anything
295 [ -n "${moduletemp/${modulename}/}" ] && sourcedir="${moduletemp/*:/}"
147 moduledir="${moduledir:-misc}" 296 moduledir="${moduledir:-misc}"
148 sourcedir="${module_temp/*:/}"
149 sourcedir="${sourcedir:-${S}}" 297 sourcedir="${sourcedir:-${S}}"
150 298
151 einfo "Installing ${modulename} module" 299 einfo "Installing ${modulename} module"
152 cd ${sourcedir} 300 cd ${sourcedir}
153 insinto /lib/modules/${KV_FULL}/${moduledir} 301 insinto /lib/modules/${KV_FULL}/${moduledir}
154 doins ${modulename}.${KV_OBJ} 302 doins ${modulename}.${KV_OBJ}
303
304 [ -z "${NO_MODULESD}" ] && generate_modulesd ${sourcedir}/${modulename}
155 done 305 done
156} 306}
157 307
158linux-mod_pkg_postinst() { 308linux-mod_pkg_postinst() {
159 update_depmod; 309 update_depmod;

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.12

  ViewVC Help
Powered by ViewVC 1.1.20