Merge branch 'org.openembedded.dev' of ssh+git://git@git.openembedded.net/openembedde...
[openembedded.git] / classes / insane.bbclass
index 3e519c3..c2e8d9c 100644 (file)
@@ -31,6 +31,9 @@ PACKAGEFUNCS += " do_package_qa "
 #           TARGET_OS  TARGET_ARCH   MACHINE, OSABI, ABIVERSION, Little Endian, 32bit?
 def package_qa_get_machine_dict():
     return {
+            "darwin9" : { 
+                        "arm" :       (40,     0,    0,          True,          True),
+                      },
             "linux" : { 
                         "arm" :       (40,    97,    0,          True,          True),
                         "armeb":      (40,    97,    0,          False,         True),
@@ -58,6 +61,7 @@ def package_qa_get_machine_dict():
                         "i486":       (   3,     0,    0,          True,          True),
                         "i586":       (   3,     0,    0,          True,          True),
                         "i686":       (   3,     0,    0,          True,          True),
+                        "mips":       (   8,     0,    0,          False,         True),
                         "mipsel":     (   8,     0,    0,          True,          True),
                         "avr32":      (6317,     0,    0,          False,         True),
                        "sh4":        (42,       0,    0,          True,          True),
@@ -70,13 +74,16 @@ def package_qa_get_machine_dict():
                         "arm" :       (40,     0,    0,          True,          True),
                         "armeb" :     (40,     0,    0,          False,         True),
                       },
-            "linux-uclibcgnueabi" : {
+            "linux-uclibceabi" : {
                         "arm" :       (40,     0,    0,          True,          True),
                         "armeb" :     (40,     0,    0,          False,         True),
                       },
             "linux-gnuspe" : {
                         "powerpc":    (20,     0,    0,          False,         True),
                       },
+            "linux-uclibcspe" : {
+                        "powerpc":    (20,     0,    0,          False,         True),
+                      },
 
        }
 
@@ -175,7 +182,6 @@ def package_qa_get_elf(path, bits32):
 
 def package_qa_clean_path(path,d):
     """ Remove the common prefix from the path. In this case it is the TMPDIR"""
-    import bb
     return path.replace(bb.data.getVar('TMPDIR',d,True),"")
 
 def package_qa_make_fatal_error(error_class, name, path,d):
@@ -184,13 +190,12 @@ def package_qa_make_fatal_error(error_class, name, path,d):
 
     TODO: Load a whitelist of known errors
     """
-    return not error_class in [0, 5, 7, 9]
+    return not error_class in [0, 5, 7]
 
 def package_qa_write_error(error_class, name, path, d):
     """
     Log the error
     """
-    import bb, os
     if not bb.data.getVar('QA_LOG', d):
         bb.note("a QA error occured but will not be logged because QA_LOG is not set")
         return
@@ -215,8 +220,7 @@ def package_qa_write_error(error_class, name, path, d):
     f.close()
 
 def package_qa_handle_error(error_class, error_msg, name, path, d):
-    import bb
-    bb.error("QA Issue: %s" % error_msg)
+    bb.error("QA Issue with %s: %s" % (name, error_msg))
     package_qa_write_error(error_class, name, path, d)
     return not package_qa_make_fatal_error(error_class, name, path, d)
 
@@ -247,23 +251,35 @@ def package_qa_check_rpath(file,name,d, elf):
 
     return sane
 
-def package_qa_check_devdbg(path, name,d, elf):
+def package_qa_check_dev(path, name,d, elf):
     """
-    Check for debug remains inside the binary or
-    non dev packages containing
+    Check for ".so" library symlinks in non-dev packages
     """
 
-    import bb, os
     sane = True
 
+    # SDK packages are special.
+    for s in ['sdk', 'canadian-sdk']:
+        if bb.data.inherits_class(s, d):
+            return True
+
     if not "-dev" in name:
         if path[-3:] == ".so" and os.path.islink(path):
             error_msg = "non -dev package contains symlink .so: %s path '%s'" % \
                      (name, package_qa_clean_path(path,d))
             sane = package_qa_handle_error(0, error_msg, name, path, d)
 
+    return sane
+
+def package_qa_check_dbg(path, name,d, elf):
+    """
+    Check for ".debug" files or directories outside of the dbg package
+    """
+
+    sane = True
+
     if not "-dbg" in name:
-        if '.debug' in path:
+        if '.debug' in path.split(os.path.sep):
             error_msg = "non debug package contains .debug directory: %s path %s" % \
                      (name, package_qa_clean_path(path,d))
             sane = package_qa_handle_error(3, error_msg, name, path, d)
@@ -284,7 +300,6 @@ def package_qa_check_arch(path,name,d, elf):
     if not elf:
         return True
 
-    import bb, os
     sane = True
     target_os   = bb.data.getVar('TARGET_OS',   d, True)
     target_arch = bb.data.getVar('TARGET_ARCH', d, True)
@@ -319,7 +334,6 @@ def package_qa_check_desktop(path, name, d, elf):
     """
     Run all desktop files through desktop-file-validate.
     """
-    import bb, os
     sane = True
     if path.endswith(".desktop"):
         output = os.popen("desktop-file-validate %s" % path)
@@ -333,7 +347,6 @@ def package_qa_hash_style(path, name, d, elf):
     """
     Check if the binary has the right hash style...
     """
-    import bb, os
 
     if not elf:
         return True
@@ -380,7 +393,6 @@ def package_qa_check_staged(path,d):
         to find the one responsible for the errors easily even
         if we look at every .pc and .la file
     """
-    import os, bb
 
     sane = True
     tmpdir = bb.data.getVar('TMPDIR', d, True)
@@ -420,7 +432,6 @@ def package_qa_check_staged(path,d):
 
 # Walk over all files in a directory and call func
 def package_qa_walk(path, funcs, package,d):
-    import bb, os
     sane = True
 
     #if this will throw an exception, then fix the dict above
@@ -443,14 +454,13 @@ def package_qa_walk(path, funcs, package,d):
 
     return sane
 
-def package_qa_check_rdepends(pkg, workdir, d):
-    import bb
+def package_qa_check_rdepends(pkg, pkgdest, d):
     sane = True
     if not "-dbg" in pkg and not "task-" in pkg and not "-image" in pkg:
         # Copied from package_ipk.bbclass
         # boiler plate to update the data
         localdata = bb.data.createCopy(d)
-        root = "%s/install/%s" % (workdir, pkg)
+        root = "%s/%s" % (pkgdest, pkg)
 
         bb.data.setVar('ROOT', '', localdata) 
         bb.data.setVar('ROOT_%s' % pkg, root, localdata)
@@ -481,42 +491,42 @@ def package_qa_check_rdepends(pkg, workdir, d):
 
 # The PACKAGE FUNC to scan each package
 python do_package_qa () {
-    import bb
-    bb.note("DO PACKAGE QA")
-    workdir = bb.data.getVar('WORKDIR', d, True)
+    bb.debug(2, "DO PACKAGE QA")
+    pkgdest = bb.data.getVar('PKGDEST', d, True)
     packages = bb.data.getVar('PACKAGES',d, True)
 
     # no packages should be scanned
     if not packages:
         return
 
-    checks = [package_qa_check_rpath, package_qa_check_devdbg,
+    checks = [package_qa_check_rpath, package_qa_check_dev,
               package_qa_check_perm, package_qa_check_arch,
-              package_qa_check_desktop, package_qa_hash_style]
+              package_qa_check_desktop, package_qa_hash_style,
+              package_qa_check_dbg]
     walk_sane = True
     rdepends_sane = True
     for package in packages.split():
         if bb.data.getVar('INSANE_SKIP_' + package, d, True):
-            bb.note("Package: %s (skipped)" % package)
+            bb.note("package %s skipped" % package)
             continue
 
-        bb.note("Checking Package: %s" % package)
-        path = "%s/install/%s" % (workdir, package)
+        bb.debug(1, "Checking Package: %s" % package)
+        path = "%s/%s" % (pkgdest, package)
         if not package_qa_walk(path, checks, package, d):
             walk_sane  = False
-        if not package_qa_check_rdepends(package, workdir, d):
+        if not package_qa_check_rdepends(package, pkgdest, d):
             rdepends_sane = False
 
     if not walk_sane or not rdepends_sane:
         bb.fatal("QA run found fatal errors. Please consider fixing them.")
-    bb.note("DONE with PACKAGE QA")
+    bb.debug(2, "DONE with PACKAGE QA")
 }
 
 
 # The Staging Func, to check all staging
 addtask qa_staging after do_populate_staging before do_build
 python do_qa_staging() {
-    bb.note("QA checking staging")
+    bb.debug(2, "QA checking staging")
 
     if not package_qa_check_staged(bb.data.getVar('STAGING_LIBDIR',d,True), d):
         bb.fatal("QA staging was broken by the package built above")
@@ -525,8 +535,7 @@ python do_qa_staging() {
 # Check broken config.log files
 addtask qa_configure after do_configure before do_compile
 python do_qa_configure() {
-    bb.note("Checking sanity of the config.log file")
-    import os
+    bb.debug(1, "Checking sanity of the config.log file")
     for root, dirs, files in os.walk(bb.data.getVar('WORKDIR', d, True)):
         statement = "grep 'CROSS COMPILE Badness:' %s > /dev/null" % \
                     os.path.join(root,"config.log")