1 SUMMARY = "v4l-dvb drivers"
2 HOMEPAGE = "http://linuxtv.org/"
3 SECTION = "kernel/modules"
5 LIC_FILES_CHKSUM = "file://COPYING;md5=a907e355dcd2c89b14aa4dbcb7764d4f"
10 PACKAGES_DYNAMIC += "v4l-dvb-module-*"
11 PACKAGES_DYNAMIC += "v4l-dvb-firmware-*"
14 install -m 0644 ${WORKDIR}/defconfig ${S}/v4l/.config
18 unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
19 oe_runmake DIR="${STAGING_KERNEL_DIR}" ${MAKE_TARGETS}
23 unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
24 oe_runmake DIR="${STAGING_KERNEL_DIR}" DEPMOD=echo DESTDIR="${D}" install
27 PACKAGES = "v4l-dvb-modules"
29 ALLOW_EMPTY_${PN} = "1"
31 pkg_postinst_modules() {
34 update-modules || true
38 pkg_postrm_modules() {
39 update-modules || true
42 autoload_postinst_fragment() {
43 if [ x"$D" = "x" ]; then
48 python populate_packages_prepend() {
50 def extract_modinfo(file):
52 tempfile.tempdir = bb.data.getVar("WORKDIR", d, 1)
53 tf = tempfile.mkstemp()
55 cmd = "PATH=\"%s\" %sobjcopy -j .modinfo -O binary %s %s" % (bb.data.getVar("PATH", d, 1), bb.data.getVar("HOST_PREFIX", d, 1) or "", file, tmpfile)
58 l = f.read().split("\000")
62 exp = re.compile("([^=]+)=(.*)")
68 vals[m.group(1)] = m.group(2)
74 dvar = bb.data.getVar('PKGD', d, 1)
76 bb.error("D not defined")
79 kernelver = bb.data.getVar('KERNEL_VERSION', d, 1)
80 kernelver_stripped = kernelver
81 m = re.match('^(.*-hh.*)[\.\+].*$', kernelver)
83 kernelver_stripped = m.group(1)
84 path = bb.data.getVar("PATH", d, 1)
85 host_prefix = bb.data.getVar("HOST_PREFIX", d, 1) or ""
86 major_version = bb.data.getVar('KERNEL_MAJOR_VERSION', d, 1)
88 cmd = "PATH=\"%s\" %sdepmod-%s -n -a -r -b %s -F %s/boot/System.map-%s %s" % (path, host_prefix, major_version, dvar, dvar, kernelver, kernelver_stripped)
89 f = os.popen(cmd, 'r')
92 pattern0 = "^(.*\.k?o):..*$"
93 pattern1 = "^(.*\.k?o):\s*(.*\.k?o)\s*$"
94 pattern2 = "^(.*\.k?o):\s*(.*\.k?o)\s*\\\$"
95 pattern3 = "^\t(.*\.k?o)\s*\\\$"
96 pattern4 = "^\t(.*\.k?o)\s*$"
100 if not re.match(pattern0, line):
103 m1 = re.match(pattern1, line)
105 deps[m1.group(1)] = m1.group(2).split()
107 m2 = re.match(pattern2, line)
109 deps[m2.group(1)] = m2.group(2).split()
111 m3 = re.match(pattern3, line)
113 deps[m2.group(1)].extend(m3.group(1).split())
115 m3 = re.match(pattern3, line)
116 m4 = re.match(pattern4, line)
117 deps[m2.group(1)].extend(m4.group(1).split())
122 def get_dependencies(file, pattern, format):
123 file = file.replace(bb.data.getVar('PKGD', d, 1) or '', '', 1)
125 if module_deps.has_key(file):
128 for i in module_deps[file]:
129 m = re.match(pattern, os.path.basename(i))
132 on = legitimize_package_name(m.group(1))
133 dependency_pkg = format % on
134 dependencies.append(dependency_pkg)
138 def frob_metadata(file, pkg, pattern, format, basename):
140 vals = extract_modinfo(file)
142 dvar = bb.data.getVar('PKGD', d, 1)
144 # If autoloading is requested, output /etc/modutils/<name> and append
145 # appropriate modprobe commands to the postinst
146 autoload = bb.data.getVar('module_autoload_%s' % basename, d, 1)
148 # Also, try canonical name with dashes
149 autoload = bb.data.getVar('module_autoload_%s' % basename.replace('_', '-'), d, 1)
151 name = '%s/etc/modutils/%s' % (dvar, basename)
153 for m in autoload.split():
156 postinst = bb.data.getVar('pkg_postinst_%s' % pkg, d, 1)
158 bb.fatal("pkg_postinst_%s not defined" % pkg)
159 postinst += bb.data.getVar('autoload_postinst_fragment', d, 1) % autoload
160 bb.data.setVar('pkg_postinst_%s' % pkg, postinst, d)
162 # Write out any modconf fragment
163 modconf = bb.data.getVar('module_conf_%s' % basename, d, 1)
165 if bb.data.getVar("KERNEL_MAJOR_VERSION", d, 1) == "2.6":
166 name = '%s/etc/modprobe.d/%s.conf' % (dvar, basename)
168 name = '%s/etc/modutils/%s.conf' % (dvar, basename)
170 f.write("%s\n" % modconf)
173 files = bb.data.getVar('FILES_%s' % pkg, d, 1)
174 files = "%s /etc/modutils/%s /etc/modutils/%s.conf /etc/modprobe.d/%s.conf" % (files, basename, basename, basename)
175 bb.data.setVar('FILES_%s' % pkg, files, d)
177 if vals.has_key("description"):
178 old_desc = bb.data.getVar('DESCRIPTION_' + pkg, d, 1) or ""
179 bb.data.setVar('DESCRIPTION_' + pkg, old_desc + "; " + vals["description"], d)
181 rdepends_str = bb.data.getVar('RDEPENDS_' + pkg, d, 1)
183 rdepends = rdepends_str.split()
186 rdepends.extend(get_dependencies(file, pattern, format))
187 bb.data.setVar('RDEPENDS_' + pkg, ' '.join(rdepends), d)
189 module_deps = parse_depmod()
190 module_regex = '^(.*)\.k?o$'
191 module_pattern = 'v4l-dvb-module-%s'
193 postinst = bb.data.getVar('pkg_postinst_modules', d, 1)
194 postrm = bb.data.getVar('pkg_postrm_modules', d, 1)
196 maybe_update_modules = "update-modules "
197 if bb.data.getVar("ONLINE_PACKAGE_MANAGEMENT", d) == "none":
198 maybe_update_modules = ""
200 do_split_packages(d, root='/lib/firmware', file_regex='^(.*)\.bin$', output_pattern='v4l-dvb-firmware-%s', description='Firmware for %s', recursive=True, extra_depends='')
201 do_split_packages(d, root='/lib/firmware', file_regex='^(.*)\.fw$', output_pattern='v4l-dvb-firmware-%s', description='Firmware for %s', recursive=True, extra_depends='')
202 do_split_packages(d, root='/lib/modules', file_regex=module_regex, output_pattern=module_pattern, description='%s kernel module', postinst=postinst, postrm=postrm, recursive=True, hook=frob_metadata, extra_depends='%skernel-%s' % (maybe_update_modules, bb.data.getVar("KERNEL_VERSION", d, 1)))
205 metapkg = bb.data.getVar('PN', d, 1)
206 bb.data.setVar('ALLOW_EMPTY_' + metapkg, "1", d)
207 bb.data.setVar('FILES_' + metapkg, "", d)
209 for l in module_deps.values():
211 pkg = module_pattern % legitimize_package_name(re.match(module_regex, os.path.basename(i)).group(1))
212 blacklist.append(pkg)
213 metapkg_rdepends = []
214 packages = bb.data.getVar('PACKAGES', d, 1).split()
215 for pkg in packages[1:]:
216 if not pkg in blacklist and not pkg in metapkg_rdepends:
217 metapkg_rdepends.append(pkg)
218 p = pkg.find('v4l-dvb-module')
220 name = pkg.split('-')[-1]
221 bb.data.setVar('RREPLACES_' + pkg, 'kernel-module-' + name, d)
222 bb.data.setVar('RCONFLICTS_' + pkg, 'kernel-module-' + name, d)
223 bb.data.setVar('RDEPENDS_' + metapkg, ' '.join(metapkg_rdepends), d)
224 bb.data.setVar('DESCRIPTION_' + metapkg, 'v4l-dvb modules meta package', d)