xref: /OK3568_Linux_fs/yocto/poky/meta/classes/oelint.bbclass (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1addtask lint before do_build
2do_lint[nostamp] = "1"
3python do_lint() {
4    pkgname = d.getVar("PN")
5
6    ##############################
7    # Test that DESCRIPTION exists
8    #
9    description = d.getVar("DESCRIPTION", False)
10    if description[1:10] == '{SUMMARY}':
11        bb.warn("%s: DESCRIPTION is not set" % pkgname)
12
13
14    ##############################
15    # Test that HOMEPAGE exists
16    #
17    homepage = d.getVar("HOMEPAGE", False)
18    if homepage == '':
19        bb.warn("%s: HOMEPAGE is not set" % pkgname)
20    elif not homepage.startswith("http://") and not homepage.startswith("https://"):
21        bb.warn("%s: HOMEPAGE doesn't start with http:// or https://" % pkgname)
22
23
24    ##############################
25    # Test for valid SECTION
26    #
27    section = d.getVar("SECTION", False)
28    if section == '':
29        bb.warn("%s: SECTION is not set" % pkgname)
30    elif not section.islower():
31        bb.warn("%s: SECTION should only use lower case" % pkgname)
32
33
34    ##############################
35    # Check that all patches have Signed-off-by and Upstream-Status
36    #
37    srcuri = d.getVar("SRC_URI", False).split()
38    fpaths = (d.getVar('FILESPATH') or '').split(':')
39
40    def findPatch(patchname):
41        for dir in fpaths:
42            patchpath = dir + patchname
43            if os.path.exists(patchpath):
44                 return patchpath
45
46    def findKey(path, key):
47        ret = True
48        f = open('%s' % path, mode = 'r')
49        line = f.readline()
50        while line:
51            if line.find(key) != -1:
52                ret = False
53            line = f.readline()
54        f.close()
55        return ret
56
57    def checkPN(pkgname, varname, str):
58        if str.find("{PN}") != -1:
59            bb.warn("%s: should use BPN instead of PN in %s" % (pkgname, varname))
60        if str.find("{P}") != -1:
61            bb.warn("%s: should use BP instead of P in %s" % (pkgname, varname))
62
63    length = len("file://")
64    for item in srcuri:
65        if item.startswith("file://"):
66            item = item[length:]
67            if item.endswith(".patch") or item.endswith(".diff"):
68                path = findPatch(item)
69                if findKey(path, "Signed-off-by"):
70                    bb.warn("%s: %s doesn't have Signed-off-by" % (pkgname, item))
71                if findKey(path, "Upstream-Status"):
72                    bb.warn("%s: %s doesn't have Upstream-Status" % (pkgname, item))
73
74
75    ##############################
76    # Check for ${PN} or ${P} usage in SRC_URI or S
77    # Should use ${BPN} or ${BP} instead to avoid breaking multilib
78    #
79    for s in srcuri:
80        if not s.startswith("file://"):
81            checkPN(pkgname, 'SRC_URI', s)
82
83    checkPN(pkgname, 'S', d.getVar('S', False))
84}
85