aboutsummaryrefslogtreecommitdiffstats
path: root/classes/package_dbg.bbclass
blob: 24040f4bed737773ed39372cb5e39d955d5be809 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# package_dbg.bbclass: populate -dbg versions for each package in PACKAGES
#
# Copyright (c) 2009 MontaVista Software, Inc.  All rights reserved.
#
# Released under the MIT license (see LICENSE.MIT for the terms)


inherit package


PACKAGE_DBG_DESC = "Debugging files for %s"
PACKAGE_DBG_EXCLUDE = "${PN}-locale* ${PN}-doc ${PN}-dev *-dbg"


def add_dbg_packages(d):
    from fnmatch import fnmatch

    packages = d.getVar("PACKAGES", True).split()
    excludes = d.getVar("PACKAGE_DBG_EXCLUDE", True).split()

    for pkg in tuple(packages):
        if any(fnmatch(pkg, excluded) for excluded in excludes):
            continue

        dbgpkg = "%s-dbg" % pkg
        if not dbgpkg in packages:
            packages.insert(0, dbgpkg)

    d.setVar("PACKAGES", " ".join(packages))


# Add the -dbg packages to PACKAGES
python () {
    from bb.data import inherits_class as inherits

    # Task handles its own -dbg versions of its packages at the moment
    if not inherits("task", d):
        dynpkgs = d.getVar("PACKAGES_DYNAMIC", True).split()
        dynpkgs += ["%s-dbg" % dyn for dyn in dynpkgs]
        d.setVar("PACKAGES_DYNAMIC", " ".join(dynpkgs))

        add_dbg_packages(d)
}

python populate_packages_prepend () {
	from bb.data import inherits_class as inherits

	if not inherits("task", d):
		bb.build.exec_func("package_do_dbg", d)
}

# Populate the -dbg subpackage metadata
python package_do_dbg() {
    """ Populate the -dbg subpackage metadata. """

    import oe.package
    from os.path import join, basename, dirname

    def setVar(key, val):
        if d.getVar(key, val) is None:
            d.setVar(key, val)

    add_dbg_packages(d)
    packages = d.getVar("PACKAGES", True).split()
    desc = d.getVar("PACKAGE_DBG_DESC", True)

    done = []
    for pkgname in tuple(packages):
        files = tuple(oe.package.files(pkgname, d))
        dbg = [join(dirname(file), ".debug", basename(file))
               for file in files
               if not file in done]
        done.extend(files)

        if dbg:
            setVar("FILES_%s-dbg" % pkgname, " ".join(dbg))
            setVar("DESCRIPTION_%s-dbg" % pkgname, desc % pkgname)
            setVar("RDEPENDS_%s-dbg" % pkgname, pkgname)
        else:
            try:
                packages.remove("%s-dbg" % pkgname)
            except ValueError:
                pass
    d.setVar("PACKAGES", " ".join(packages))
}