blob: 458a25ecc39cf1bba8ad8ae8f30c9fb92d0cbcfb [file] [log] [blame]
Patrick Williams92b42cb2022-09-03 06:53:57 -05001#
2# Copyright OpenEmbedded Contributors
3#
4# SPDX-License-Identifier: MIT
5#
6
Patrick Williamsc124f4f2015-09-15 14:41:29 -05007addtask lint before do_build
8do_lint[nostamp] = "1"
9python do_lint() {
Brad Bishop6e60e8b2018-02-01 10:27:11 -050010 pkgname = d.getVar("PN")
Patrick Williamsc124f4f2015-09-15 14:41:29 -050011
12 ##############################
13 # Test that DESCRIPTION exists
14 #
15 description = d.getVar("DESCRIPTION", False)
16 if description[1:10] == '{SUMMARY}':
17 bb.warn("%s: DESCRIPTION is not set" % pkgname)
18
19
20 ##############################
21 # Test that HOMEPAGE exists
22 #
23 homepage = d.getVar("HOMEPAGE", False)
24 if homepage == '':
25 bb.warn("%s: HOMEPAGE is not set" % pkgname)
26 elif not homepage.startswith("http://") and not homepage.startswith("https://"):
27 bb.warn("%s: HOMEPAGE doesn't start with http:// or https://" % pkgname)
28
29
30 ##############################
31 # Test for valid SECTION
32 #
33 section = d.getVar("SECTION", False)
34 if section == '':
35 bb.warn("%s: SECTION is not set" % pkgname)
36 elif not section.islower():
37 bb.warn("%s: SECTION should only use lower case" % pkgname)
38
39
40 ##############################
41 # Check that all patches have Signed-off-by and Upstream-Status
42 #
43 srcuri = d.getVar("SRC_URI", False).split()
Brad Bishop6e60e8b2018-02-01 10:27:11 -050044 fpaths = (d.getVar('FILESPATH') or '').split(':')
Patrick Williamsc124f4f2015-09-15 14:41:29 -050045
46 def findPatch(patchname):
47 for dir in fpaths:
48 patchpath = dir + patchname
49 if os.path.exists(patchpath):
50 return patchpath
51
52 def findKey(path, key):
53 ret = True
Patrick Williamsc0f7c042017-02-23 20:41:17 -060054 f = open('%s' % path, mode = 'r')
Patrick Williamsc124f4f2015-09-15 14:41:29 -050055 line = f.readline()
56 while line:
57 if line.find(key) != -1:
58 ret = False
59 line = f.readline()
60 f.close()
61 return ret
62
63 def checkPN(pkgname, varname, str):
64 if str.find("{PN}") != -1:
65 bb.warn("%s: should use BPN instead of PN in %s" % (pkgname, varname))
66 if str.find("{P}") != -1:
67 bb.warn("%s: should use BP instead of P in %s" % (pkgname, varname))
68
69 length = len("file://")
70 for item in srcuri:
71 if item.startswith("file://"):
72 item = item[length:]
73 if item.endswith(".patch") or item.endswith(".diff"):
74 path = findPatch(item)
75 if findKey(path, "Signed-off-by"):
76 bb.warn("%s: %s doesn't have Signed-off-by" % (pkgname, item))
77 if findKey(path, "Upstream-Status"):
78 bb.warn("%s: %s doesn't have Upstream-Status" % (pkgname, item))
79
80
81 ##############################
82 # Check for ${PN} or ${P} usage in SRC_URI or S
83 # Should use ${BPN} or ${BP} instead to avoid breaking multilib
84 #
85 for s in srcuri:
86 if not s.startswith("file://"):
87 checkPN(pkgname, 'SRC_URI', s)
88
89 checkPN(pkgname, 'S', d.getVar('S', False))
90}