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 <alejandro.hernan...@linux.intel.com>
---
 meta/classes/insane.bbclass | 34 +++++++++++++++++++++++++++++++++-
 1 file changed, 33 insertions(+), 1 deletion(-)

diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass
index 0b45374..419c89b 100644
--- a/meta/classes/insane.bbclass
+++ b/meta/classes/insane.bbclass
@@ -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)
 
-- 
1.9.1

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to