oelint.bbclass: make oelint bbclass work
cover oelint.bbclass: make oelint bbclass work
In conf/local.conf, add 'INHERIT += "oelint"' to test. We can get many warnings, like following:
WARNING: diffutils: HOMEPAGE is not set
WARNING: sed: DESCRIPTION is not set
WARNING: perl: DESCRIPTION is not set
WARNING: perl: debian/cpan_definstalldirs.diff doesn't have Signed-off-by
WARNING: perl: debian/cpan_definstalldirs.diff doesn't have Upstream-Status
The following changes since commit 2d1660112e54653f7bb763939d0416472c49fe01:
populate_sdk_base: Fix grep command usage on old hosts (2014-07-29 09:58:27 +0100)
are available in the git repository at:
git://git.pokylinux.org/poky-contrib chonglu/oelint
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=chonglu/oelint
Chong Lu (3):
oelint.bbclass: make oelint bbclass work
oelint.bbclass: add patch checking
oelint.bbclass: Check for ${PN} or ${P} usage
meta/classes/oelint.bbclass | 251 ++++++++++++++------------------------------ 1 file changed, 81 insertions(+), 170 deletions(-)
Signature · 1 line
1.9.1
PATCH 1/3 oelint.bbclass: make oelint bbclass work
Remove LICENSE, MAINTAINER, PRIORITY and valid SECTION checking. Convert tab indentation into four-space.
[YOCTO #5427]
--- meta/classes/oelint.bbclass | 196 ++++++-------------------------------------- 1 file changed, 26 insertions(+), 170 deletions(-)
meta/classes/oelint.bbclass +26 -170
@@ -1,174 +1,30 @@ addtask lint before do_fetch do_lint[nostamp] = "1" python do_lint() { - def testVar(var, explain=None): - try: - s = d[var] - return s["content"] - except KeyError: - bb.error("%s is not set" % var) - if explain: bb.note(explain) - return None - - - ############################## - # Test that DESCRIPTION exists - # - testVar("DESCRIPTION") - - - ############################## - # Test that HOMEPAGE exists - # - s = testVar("HOMEPAGE") - if s=="unknown": - bb.error("HOMEPAGE is not set") - elif not s.startswith("http://"): - bb.error("HOMEPAGE doesn't start with http://") - - - - ############################## - # Test for valid LICENSE - # - valid_licenses = { - "GPL-2" : "GPLv2", - "GPL LGPL FDL" : True, - "GPL PSF" : True, - "GPL/QPL" : True, - "GPL" : True, - "GPLv2" : True, - "IBM" : True, - "LGPL GPL" : True, - "LGPL" : True, - "MIT" : True, - "OSL" : True, - "Perl" : True, - "Public Domain" : True, - "QPL" : "GPL/QPL", - } - s = testVar("LICENSE") - if s=="unknown": - bb.error("LICENSE is not set") - elif s.startswith("Vendor"): - pass - else: - try: - newlic = valid_licenses[s] - if newlic == False: - bb.note("LICENSE '%s' is not recommended" % s) - elif newlic != True: - bb.note("LICENSE '%s' is not recommended, better use '%s'" % (s, newsect)) - except: - bb.note("LICENSE '%s' is not recommended" % s) - - - ############################## - # Test for valid MAINTAINER - # - s = testVar("MAINTAINER") - if s=="OpenEmbedded Team <[email protected]>": - bb.error("explicit MAINTAINER is missing, using default") - elif s and s.find("@") == -1: - bb.error("You forgot to put an e-mail address into MAINTAINER") - - - ############################## - # Test for valid SECTION - # - # if Correct section: True section name is valid - # False section name is invalid, no suggestion - # string section name is invalid, better name suggested - # - valid_sections = { - # Current Section Correct section - "apps" : True, - "audio" : True, - "base" : True, - "console/games" : True, - "console/net" : "console/network", - "console/network" : True, - "console/utils" : True, - "devel" : True, - "developing" : "devel", - "devel/python" : True, - "fonts" : True, - "games" : True, - "games/libs" : True, - "gnome/base" : True, - "gnome/libs" : True, - "gpe" : True, - "gpe/libs" : True, - "gui" : False, - "libc" : "libs", - "libs" : True, - "libs/net" : True, - "multimedia" : True, - "net" : "network", - "NET" : "network", - "network" : True, - "opie/applets" : True, - "opie/applications" : True, - "opie/base" : True, - "opie/codecs" : True, - "opie/decorations" : True, - "opie/fontfactories" : True, - "opie/fonts" : True, - "opie/games" : True, - "opie/help" : True, - "opie/inputmethods" : True, - "opie/libs" : True, - "opie/multimedia" : True, - "opie/pim" : True, - "opie/setting" : "opie/settings", - "opie/settings" : True, - "opie/Shell" : False, - "opie/styles" : True, - "opie/today" : True, - "scientific" : True, - "utils" : True, - "x11" : True, - "x11/libs" : True, - "x11/wm" : True, - } - s = testVar("SECTION") - if s: - try: - newsect = valid_sections[s] - if newsect == False: - bb.note("SECTION '%s' is not recommended" % s) - elif newsect != True: - bb.note("SECTION '%s' is not recommended, better use '%s'" % (s, newsect)) - except: - bb.note("SECTION '%s' is not recommended" % s) - - if not s.islower(): - bb.error("SECTION should only use lower case") - - - - - ############################## - # Test for valid PRIORITY - # - valid_priorities = { - "standard" : True, - "required" : True, - "optional" : True, - "extra" : True, - } - s = testVar("PRIORITY") - if s: - try: - newprio = valid_priorities[s] - if newprio == False: - bb.note("PRIORITY '%s' is not recommended" % s) - elif newprio != True: - bb.note("PRIORITY '%s' is not recommended, better use '%s'" % (s, newprio)) - except: - bb.note("PRIORITY '%s' is not recommended" % s) - - if not s.islower(): - bb.error("PRIORITY should only use lower case") - + ############################## + # Test that DESCRIPTION exists + # + s = d.getVar("DESCRIPTION") + if s[1:10] == '{SUMMARY}': + bb.warn("${PN}: DESCRIPTION is not set") + + + ############################## + # Test that HOMEPAGE exists + # + s = d.getVar("HOMEPAGE") + if s == '': + bb.warn("${PN}: HOMEPAGE is not set") + elif not s.startswith("http://") and not s.startswith("https://"): + bb.warn("${PN}: HOMEPAGE doesn't start with http:// or https://") + + + ############################## + # Test for valid SECTION + # + s = d.getVar("SECTION") + if s == '': + bb.warn("${PN}: SECTION is not set") + elif not s.islower(): + bb.warn("${PN}: SECTION should only use lower case") }
Signature · 1 line
1.9.1
PATCH 2/3 oelint.bbclass: add patch checking
In reply to Chong LuCheck that all patches have Signed-off-by and Upstream-Status.
[YOCTO #5427]
--- meta/classes/oelint.bbclass | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+)
meta/classes/oelint.bbclass +35 -0
@@ -27,4 +27,39 @@ python do_lint() { bb.warn("${PN}: SECTION is not set") elif not s.islower(): bb.warn("${PN}: SECTION should only use lower case") + + + ############################## + # Check that all patches have Signed-off-by and Upstream-Status + # + s = d.getVar("SRC_URI").split() + fpaths = (d.getVar('FILESPATH', True) or '').split(':') + + def findPatch(patchname): + for dir in fpaths: + patchpath = dir + patchname + if os.path.exists(patchpath): + return patchpath + + def findKey(path, key): + ret = True + f = file('%s' % path, mode = 'r') + line = f.readline() + while line: + if line.find(key) != -1: + ret = False + line = f.readline() + f.close() + return ret + + length = len("file://") + for item in s: + if item.startswith("file://"): + item = item[length:] + if item.endswith(".patch") or item.endswith(".diff"): + path = findPatch(item) + if findKey(path, "Signed-off-by"): + bb.warn("${PN}: %s doesn't have Signed-off-by" % item) + if findKey(path, "Upstream-Status"): + bb.warn("${PN}: %s doesn't have Upstream-Status" % item) }
Signature · 1 line
1.9.1
PATCH 3/3 oelint.bbclass: Check for ${PN} or ${P} usage
In reply to Chong LuCheck for ${PN} or ${P} usage in SRC_URI or S.
We should use ${BPN} or ${BP} instead to avoid breaking multilib.
[YOCTO #5427]
--- meta/classes/oelint.bbclass | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
meta/classes/oelint.bbclass +20 -0
@@ -62,4 +62,24 @@ python do_lint() { bb.warn("${PN}: %s doesn't have Signed-off-by" % item) if findKey(path, "Upstream-Status"): bb.warn("${PN}: %s doesn't have Upstream-Status" % item) + + + ############################## + # Check for ${PN} or ${P} usage in SRC_URI or S + # Should use ${BPN} or ${BP} instead to avoid breaking multilib + # + s = d.getVar("SRC_URI").split() + + for srcurl in s: + if not srcurl.startswith("file://"): + if not srcurl.find("{PN}") == -1: + bb.warn("${PN}: Should use BPN instead to PN in SRC_URI") + if not srcurl.find("{P}") == -1: + bb.warn("${PN}: Should use BP instead to P in SRC_URI") + + srcpath = d.getVar("S") + if not srcpath.find("{PN}") == -1: + bb.warn("${PN}: Should use BPN instead to PN in S") + if not srcpath.find("{P}") == -1: + bb.warn("${PN}: Should use BP instead to P in S") }
Signature · 1 line
1.9.1
Re: [PATCH 3/3] oelint.bbclass: Check for ${PN} or ${P} usage
Quoted 21 lines · Chong Lu
Check for ${PN} or ${P} usage in
SRC_URIor S.
We should use ${BPN} or ${BP} instead to avoid breaking multilib.[YOCTO #5427]
Signed-off-by Chong Lu <[email protected]>--- meta/classes/oelint.bbclass | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)meta/classes/oelint.bbclass +3
-0@@ -62,4 +62,24 @@ python do_lint() { bb.warn("${PN}: %s doesn't have Signed-off-by" % item) if findKey(path, "Upstream-Status"): bb.warn("${PN}: %s doesn't have Upstream-Status" % item) + + + ##############################
meta/classes/oelint.bbclass python do_lint() { · line 77
Quoted 10 lines
meta/classes/oelint.bbclass +10
-0+ # Check for ${PN} or ${P} usage in SRC_URI or S + # Should use ${BPN} or ${BP} instead to avoid breaking multilib + # + s = d.getVar("SRC_URI").split() + + for srcurl in s: + if not srcurl.startswith("file://"): + if not srcurl.find("{PN}") == -1: + bb.warn("${PN}: Should use BPN instead to PN in SRC_URI") + if not srcurl.find("{P}") == -1:
should you not say, "use BPN instead of PN ..."?
rday
Signature · 7 lines
========================================================================
Robert P. J. Day Ottawa, Ontario, CANADA
http://crashcourse.ca
Twitter: http://twitter.com/rpjday
LinkedIn: http://ca.linkedin.com/in/rpjday
========================================================================Re: [PATCH 3/3] oelint.bbclass: Check for ${PN} or ${P} usage
Quoted 35 lines · Robert P. J. Day
Quoted 21 lines · Chong Lu
Check for ${PN} or ${P} usage in
SRC_URIor S.
We should use ${BPN} or ${BP} instead to avoid breaking multilib.[YOCTO #5427]
Signed-off-by Chong Lu <[email protected]>--- meta/classes/oelint.bbclass | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)meta/classes/oelint.bbclass +3
-0@@ -62,4 +62,24 @@ python do_lint() { bb.warn("${PN}: %s doesn't have Signed-off-by" % item) if findKey(path, "Upstream-Status"): bb.warn("${PN}: %s doesn't have Upstream-Status" % item) + + + ##############################meta/classes/oelint.bbclass python do_lint() { · line 77
Quoted 10 lines
meta/classes/oelint.bbclass +10
-0+ # Check for ${PN} or ${P} usage in SRC_URI or S + # Should use ${BPN} or ${BP} instead to avoid breaking multilib + # + s = d.getVar("SRC_URI").split() + + for srcurl in s: + if not srcurl.startswith("file://"): + if not srcurl.find("{PN}") == -1: + bb.warn("${PN}: Should use BPN instead to PN in SRC_URI") + if not srcurl.find("{P}") == -1:should you not say, "use BPN instead of PN ..."?
Quoted 1 line
rday
OK, thanks.
I will change this and resend a V2.
Best Regards
Chong