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

Contents of /eclass/linux-mod.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.10 - (show annotations) (download)
Tue Dec 14 18:56:46 2004 UTC (9 years, 6 months ago) by johnm
Branch: MAIN
Changes since 1.9: +70 -23 lines
adding documentation, and changing the MODULE_NAMES parsing slightly

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
28
29 # MODULE_NAMES - Detailed Overview
30 #
31 # The structure of each MODULE_NAMES entry is as follows:
32 # modulename(libmodulesdir:modulesourcedir)
33 # for example:
34 # MODULE_NAMES="module_pci(pci:${S}/pci) module_usb(usb:${S}/usb)"
35 #
36 # what this would do is
37 # cd ${S}/pci
38 # make ${BUILD_PARAMS} ${BUILD_TARGETS}
39 # insinto /lib/modules/${KV_FULL}/pci
40 # doins module_pci.${KV_OBJ}
41 #
42 # cd ${S}/usb
43 # make ${BUILD_PARAMS} ${BUILD_TARGETS}
44 # insinto /lib/modules/${KV_FULL}/usb
45 # doins module_usb.${KV_OBJ}
46 #
47 # if the modulessourcedir isnt specified, it assumes ${S}
48 # if the libmodulesdir isnt specified, it assumes misc.
49 # if no seperator is defined ":" then it assumes the argument is modulesourcedir
50
51 inherit linux-info
52 ECLASS=linux-mod
53 INHERITED="$INHERITED $ECLASS"
54 EXPORT_FUNCTIONS pkg_setup pkg_postinst src_compile
55
56 DESCRIPTION="Based on the $ECLASS eclass"
57 SLOT=0
58 DEPEND="virtual/linux-sources
59 sys-apps/sed"
60
61 # eclass utilities
62 # ----------------------------------
63
64 use_m() {
65 # if we haven't determined the version yet, we need too.
66 get_version;
67
68 # if the kernel version is greater than 2.6.6 then we should use
69 # M= instead of SUBDIRS=
70 [ ${KV_MAJOR} -eq 2 -a ${KV_MINOR} -gt 5 -a ${KV_PATCH} -gt 5 ] && \
71 return 0 || return 1
72 }
73
74 convert_to_m() {
75 [ ! -f "${1}" ] && die "convert_to_m() requires a filename as an argument"
76 if use_m
77 then
78 ebegin "Converting ${1/${WORKDIR}\//} to use M= instead of SUBDIRS="
79 sed -i 's:SUBDIRS=:M=:g' ${1}
80 eend $?
81 fi
82 }
83
84 update_depmod() {
85 # if we haven't determined the version yet, we need too.
86 get_version;
87
88 ebegin "Updating module dependencies for ${KV_FULL}"
89 if [ -r ${KV_OUT_DIR}/System.map ]
90 then
91 depmod -ae -F ${KV_OUT_DIR}/System.map -b ${ROOT} -r ${KV_FULL}
92 else
93 ewarn
94 ewarn "${KV_OUT_DIR}/System.map not found."
95 ewarn "You must manually update the kernel module dependencies using depmod."
96 ewarn
97 fi
98 eend $?
99 }
100
101 update_modules() {
102 if [ -x /sbin/modules-update ] ;
103 then
104 ebegin "Updating modules.conf"
105 /sbin/modules-update
106 eend $?
107 fi
108 }
109
110 set_kvobj() {
111 if kernel_is 2 6
112 then
113 KV_OBJ="ko"
114 else
115 KV_OBJ="o"
116 fi
117 einfo "Using KV_OBJ=${KV_OBJ}"
118 }
119
120 display_postinst() {
121 # if we haven't determined the version yet, we need too.
122 get_version;
123
124 local modulename moduledir sourcedir moduletemp file i
125
126 file=${ROOT}/etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}
127 file=${file/\/\///}
128
129 einfo "If you would like to load this module automatically upon boot"
130 einfo "please type the following as root:"
131 for i in ${MODULE_NAMES}
132 do
133 moduletemp="$(echo ${i} | sed -e "s:\(.*\)(\(.*\)):\1 \2:")"
134 modulename="${moduletemp/ */}"
135 moduletemp="${moduletemp/* /}"
136 # if we specify two args, then we can set moduledir
137 [ -z "${moduletemp/*:*/}" ] && moduledir="${moduletemp/:*/}"
138 # if we didnt pass the brackets, then we shouldnt accept anything
139 [ -n "${moduletemp/${modulename}/}" ] && sourcedir="${moduletemp/*:/}"
140 moduledir="${moduledir:-misc}"
141 sourcedir="${sourcedir:-${S}}"
142
143 einfo " # echo \"${modulename}\" >> ${file}"
144 done
145 echo
146 }
147
148 # default ebuild functions
149 # --------------------------------
150
151 linux-mod_pkg_setup() {
152 linux-info_pkg_setup;
153 check_kernel_built;
154 check_modules_supported;
155 check_extra_config;
156 set_kvobj;
157 }
158
159 linux-mod_src_compile() {
160 local modulename moduledir sourcedir moduletemp xarch i
161 xarch="${ARCH}"
162 unset ARCH
163
164 for i in ${MODULE_NAMES}
165 do
166 moduletemp="$(echo ${i} | sed -e "s:\(.*\)(\(.*\)):\1 \2:")"
167 modulename="${moduletemp/ */}"
168 moduletemp="${moduletemp/* /}"
169 # if we specify two args, then we can set moduledir
170 [ -z "${moduletemp/*:*/}" ] && moduledir="${moduletemp/:*/}"
171 # if we didnt pass the brackets, then we shouldnt accept anything
172 [ -n "${moduletemp/${modulename}/}" ] && sourcedir="${moduletemp/*:/}"
173 moduledir="${moduledir:-misc}"
174 sourcedir="${sourcedir:-${S}}"
175
176 einfo "Preparing ${modulename} module"
177 cd ${sourcedir}
178 emake ${BUILD_PARAMS} ${BUILD_TARGETS:-clean module} || die Unable to make ${BUILD_PARAMS} ${BUILD_TARGETS:-clean module}.
179 done
180 ARCH="${xarch}"
181 }
182
183 linux-mod_src_install() {
184 local modulename moduledir sourcedir moduletemp i
185
186 for i in ${MODULE_NAMES}
187 do
188 moduletemp="$(echo ${i} | sed -e "s:\(.*\)(\(.*\)):\1 \2:")"
189 modulename="${moduletemp/ */}"
190 moduletemp="${moduletemp/* /}"
191 # if we specify two args, then we can set moduledir
192 [ -z "${moduletemp/*:*/}" ] && moduledir="${moduletemp/:*/}"
193 # if we didnt pass the brackets, then we shouldnt accept anything
194 [ -n "${moduletemp/${modulename}/}" ] && sourcedir="${moduletemp/*:/}"
195 moduledir="${moduledir:-misc}"
196 sourcedir="${sourcedir:-${S}}"
197
198 einfo "Installing ${modulename} module"
199 cd ${sourcedir}
200 insinto /lib/modules/${KV_FULL}/${moduledir}
201 doins ${modulename}.${KV_OBJ}
202 done
203 }
204
205 linux-mod_pkg_postinst() {
206 update_depmod;
207 update_modules;
208 display_postinst;
209 }

  ViewVC Help
Powered by ViewVC 1.1.20