insane.bbclass: Added QA test for unexpanded ${D}
PATCH 1/1 insane.bbclass: Added QA test for unexpanded ${D}
In reply to a message not in the archiveChecks in FILES and pkg_* variables ,solves common mistake of using ${D} instead of $D and warns the user accordingly.
[YOCTO #6642]
--- meta/classes/insane.bbclass | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-)
meta/classes/insane.bbclass +33 -1
@@ -906,6 +906,39 @@ def package_qa_check_deps(pkg, pkgdest, skip, d): return sane +def package_qa_check_unexpanded_d(d): + """ + Check for unexpanded D variable in pkg_* and FILES + variables, warn the user to use it correctly. + """ + + sane = True + + # Get variables for current package + pkg = d.getVar('PN', True) + localdata = bb.data.createCopy(d) + localdata.setVar('OVERRIDES', pkg) + bb.data.update_data(localdata) + + # Go through all variables and check if unexpanded D is found, warn the user accordingly + for var in 'FILES','pkg_preinst', 'pkg_postinst', 'pkg_prerm', 'pkg_postrm': + bbvar = localdata.getVar(var, False) + if bbvar: + if "${D}" in bbvar: + if var == 'FILES': + bb.error("FILES should not contain the ${D} variable as it references the local build directory not the target filesystem, best solution is to remove the ${D} reference") + sane = False + else: + bb.error("%s in %s recipe contains ${D}, it should be replaced by $D instead" % (var, pkg)) + sane = False + return sane + +# Actual task to check for ${D +python do_qa_check_unexpanded_d(){ + package_qa_check_unexpanded_d(d) +} +addtask qa_check_unexpanded_d before do_compile + # The PACKAGE FUNC to scan each package python do_package_qa () { import subprocess
@@ -1000,7 +1033,6 @@ python do_package_qa () { if not package_qa_check_deps(package, pkgdest, skip, d): deps_sane = False - if 'libdir' in d.getVar("ALL_QA", True).split(): package_qa_check_libdir(d)
Signature · 1 line
1.9.1
Quoted 41 lines · Alejandro Hernandez
Checks in FILES and pkg_* variables ,solves common mistake of using ${D} instead of $D and warns the user accordingly.
[YOCTO #6642]
Signed-off-by Alejandro Hernandez <[email protected]>--- meta/classes/insane.bbclass | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-)meta/classes/insane.bbclass +23
-0@@ -906,6 +906,39 @@ def package_qa_check_deps(pkg, pkgdest, skip, d): return sane +def package_qa_check_unexpanded_d(d): + """ + Check for unexpanded D variable in pkg_* and FILES + variables, warn the user to use it correctly. + """ + + sane = True + + # Get variables for current package + pkg = d.getVar('PN', True) + localdata = bb.data.createCopy(d) + localdata.setVar('OVERRIDES', pkg) + bb.data.update_data(localdata) + + # Go through all variables and check if unexpanded D is found, warn the user accordingly + for var in 'FILES','pkg_preinst', 'pkg_postinst', 'pkg_prerm', 'pkg_postrm': + bbvar = localdata.getVar(var, False) + if bbvar: + if "${D}" in bbvar: + if var == 'FILES': + bb.error("FILES should not contain the ${D} variable as it references the local build directory not the target filesystem, best solution is to remove the ${D} reference") + sane = False + else:
meta/classes/insane.bbclass def package_qa_check_deps(pkg, pkgdest, skip, d): · line 941
Quoted 10 lines
meta/classes/insane.bbclass +10
-0+ bb.error("%s in %s recipe contains ${D}, it should be replaced by $D instead" % (var, pkg)) + sane = False + return sane + +# Actual task to check for ${D +python do_qa_check_unexpanded_d(){ + package_qa_check_unexpanded_d(d) +} +addtask qa_check_unexpanded_d before do_compile +
would it make more sense to have a qa check -before- compile, then add this to that task.. and then have one (current place) after install?
That way we could add additional checks (as needed) for things that are setup/confgiured incorrectly.. and checks for the build/install stuff..
--Mark
Quoted 12 lines
meta/classes/insane.bbclass +0
-1# The PACKAGE FUNC to scan each package python do_package_qa () { import subprocess@@ -1000,7 +1033,6 @@ python do_package_qa () { if not package_qa_check_deps(package, pkgdest, skip, d): deps_sane = False - if 'libdir' in d.getVar("ALL_QA", True).split(): package_qa_check_libdir(d)
Quoted 18 lines · Alejandro Hernandez
Checks in FILES and pkg_* variables ,solves common mistake of using ${D} instead of $D and warns the user accordingly.
[YOCTO #6642]
Signed-off-by Alejandro Hernandez <[email protected]>--- meta/classes/insane.bbclass | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-)meta/classes/insane.bbclass +0
-0@@ -906,6 +906,39 @@ def package_qa_check_deps(pkg, pkgdest, skip, d): return sane
meta/classes/insane.bbclass def package_qa_check_deps(pkg, pkgdest, skip, d): · line 918
Quoted 10 lines
meta/classes/insane.bbclass +10
-0+def package_qa_check_unexpanded_d(d): + """ + Check for unexpanded D variable in pkg_* and FILES + variables, warn the user to use it correctly. + """ + + sane = True + + # Get variables for current package + pkg = d.getVar('PN', True)
Rather than just PN here (which may or may not be a package), you need to iterate over the list of packages in PACKAGES.
Quoted 13 lines
meta/classes/insane.bbclass +13
-0+ localdata = bb.data.createCopy(d) + localdata.setVar('OVERRIDES', pkg) + bb.data.update_data(localdata) + + # Go through all variables and check if unexpanded D is found, warn the user accordingly + for var in 'FILES','pkg_preinst', 'pkg_postinst', 'pkg_prerm', 'pkg_postrm': + bbvar = localdata.getVar(var, False) + if bbvar: + if "${D}" in bbvar: + if var == 'FILES': + bb.error("FILES should not contain the ${D} variable as it references the local build directory not the target filesystem, best solution is to remove the ${D} reference") + sane = False + else:
meta/classes/insane.bbclass def package_qa_check_deps(pkg, pkgdest, skip, d): · line 941
Quoted 10 lines
meta/classes/insane.bbclass +10
-0+ bb.error("%s in %s recipe contains ${D}, it should be replaced by $D instead" % (var, pkg)) + sane = False + return sane + +# Actual task to check for ${D +python do_qa_check_unexpanded_d(){ + package_qa_check_unexpanded_d(d) +} +addtask qa_check_unexpanded_d before do_compile +
Why are we doing this before compile, rather than using the existing package variable handling infrastructure in the class?
The other benefit of using that is we can benefit from the QA_WARN and QA_ERR variables to determine if this issue is a warning or a fatal error.
Cheers,
Richard
Yes, I agree the function should iterate over all the PACKAGES, but for the second matter, using the existing package variable handling infrastructure within the class, ends up expanding the variables before being able to check them , using getVar('FOO', False) is useless in this case, any suggestions?
Quoted 68 lines · Richard Purdie
Quoted 18 lines · Alejandro Hernandez
Checks in FILES and pkg_* variables ,solves common mistake of using ${D} instead of $D and warns the user accordingly.
[YOCTO #6642]
Signed-off-by Alejandro Hernandez <[email protected]>--- meta/classes/insane.bbclass | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-)meta/classes/insane.bbclass +0
-0@@ -906,6 +906,39 @@ def package_qa_check_deps(pkg, pkgdest, skip, d): return sanemeta/classes/insane.bbclass def package_qa_check_deps(pkg, pkgdest, skip, d): · line 918
Quoted 10 lines
meta/classes/insane.bbclass +10
-0+def package_qa_check_unexpanded_d(d): + """ + Check for unexpanded D variable in pkg_* and FILES + variables, warn the user to use it correctly. + """ + + sane = True + + # Get variables for current package + pkg = d.getVar('PN', True)Rather than just PN here (which may or may not be a package), you need to iterate over the list of packages in PACKAGES.
Quoted 13 lines
meta/classes/insane.bbclass +13
-0+ localdata = bb.data.createCopy(d) + localdata.setVar('OVERRIDES', pkg) + bb.data.update_data(localdata) + + # Go through all variables and check if unexpanded D is found, warn the user accordingly + for var in 'FILES','pkg_preinst', 'pkg_postinst', 'pkg_prerm', 'pkg_postrm': + bbvar = localdata.getVar(var, False) + if bbvar: + if "${D}" in bbvar: + if var == 'FILES': + bb.error("FILES should not contain the ${D} variable as it references the local build directory not the target filesystem, best solution is to remove the ${D} reference") + sane = False + else:meta/classes/insane.bbclass def package_qa_check_deps(pkg, pkgdest, skip, d): · line 941
Quoted 10 lines
meta/classes/insane.bbclass +10
-0+ bb.error("%s in %s recipe contains ${D}, it should be replaced by $D instead" % (var, pkg)) + sane = False + return sane + +# Actual task to check for ${D +python do_qa_check_unexpanded_d(){ + package_qa_check_unexpanded_d(d) +} +addtask qa_check_unexpanded_d before do_compile +Why are we doing this before compile, rather than using the existing package variable handling infrastructure in the class?
The other benefit of using that is we can benefit from the
QA_WARNandQA_ERRvariables to determine if this issue is a warning or a fatal error.Cheers,
Richard