On 05/13/2013 12:09 PM, Robert Yang wrote:
RP's comment:
"What we're trying to do is move everything to use a standard mechanism
for reporting issues of this type (do_package). With insane.bbclass, you
can elect whether a given type of error is a warning or error and fails
the task."

* The package.bbclass had used package_qa_handle_error() which is from
   insane.bbclass, and we will use it for handling other warnings and
   errors, so let package.bbclass inherit insane.bbclass, this change will
   make the insane as a requirement (always included).

* Change the "PACKAGEFUNCS ?=" to "+=", otherwise there would be an
   error like:
   Exception: variable SUMMARY references itself!

Robert,

Did you test this with a multilib build? I am seeing this error with your change set on the Autobuilder.

Below is from the world build, you can see more examples of this failure in the nightly-multilib

http://autobuilder.yoctoproject.org:8011/builders/nightly-multilib/builds/138/steps/Building%20Images/logs/stdio

Sau!


ERROR: Error executing a python function in 
/srv/home/pokybuild/yocto-autobuilder-new/yocto-slave/nightly-world/build/meta/recipes-kernel/linux-libc-headers/linux-libc-headers_3.8.bb:

The stack trace of python calls that resulted in this exception/failure was:
File: 'write_specfile', lineno: 505, function: <module>
     0501:
     0502:    specfile.close()
     0503:
     0504:
 *** 0505:write_specfile(d)
     0506:
File: 'write_specfile', lineno: 209, function: write_specfile
     0205:        conffiles = (localdata.getVar('CONFFILES', True) or 
"").split()
     0206:
     0207:        splitname    = strip_multilib(pkgname, d)
     0208:
 *** 0209:        splitsummary = (localdata.getVar('SUMMARY', True) or 
localdata.getVar('DESCRIPTION', True) or ".")
     0210:        splitversion = (localdata.getVar('PKGV', True) or 
"").replace('-', '+')
     0211:        splitrelease = (localdata.getVar('PKGR', True) or "")
     0212:        splitepoch   = (localdata.getVar('PKGE', True) or "")
     0213:        splitlicense = (localdata.getVar('LICENSE', True) or "")
File: 
'/srv/home/pokybuild/yocto-autobuilder-new/yocto-slave/nightly-world/build/bitbake/lib/bb/data_smart.py',
 lineno: 503, function: getVar
     0499:        value = self.getVarFlag(var, "_content", False, noweakdefault)
     0500:
     0501:        # Call expand() separately to make use of the expand cache
     0502:        if expand and value:
 *** 0503:            return self.expand(value, var)
     0504:        return value
     0505:
     0506:    def renameVar(self, key, newkey, **loginfo):
     0507:        """
File: 
'/srv/home/pokybuild/yocto-autobuilder-new/yocto-slave/nightly-world/build/bitbake/lib/bb/data_smart.py',
 lineno: 336, function: expand
     0332:
     0333:        return varparse
     0334:
     0335:    def expand(self, s, varname = None):
 *** 0336:        return self.expandWithRefs(s, varname).value
     0337:
     0338:
     0339:    def finalize(self, parent = False):
     0340:        """Performs final steps upon the datastore, including application of 
overrides"""
File: 
'/srv/home/pokybuild/yocto-autobuilder-new/yocto-slave/nightly-world/build/bitbake/lib/bb/data_smart.py',
 lineno: 326, function: expandWithRefs
     0322:                raise
     0323:            except bb.parse.SkipPackage:
     0324:                raise
     0325:            except Exception as exc:
 *** 0326:                raise ExpansionError(varname, s, exc)
     0327:
     0328:        varparse.value = s
     0329:
     0330:        if varname:
Exception: ExpansionError: Failure expanding variable SUMMARY, expression was 
${SUMMARY} - Debugging files which triggered exception Exception: variable 
SUMMARY references itself!

ERROR: Function failed: write_specfile
ERROR: Logfile of failure stored in: 
/srv/home/pokybuild/yocto-autobuilder-new/yocto-slave/nightly-world/build/build/tmp/work/x86-pokymllib32-linux/lib32-linux-libc-headers/3.8-r0/temp/log.do_package_write_rpm.32203


   This is because we let package.bbclass inherit insane.bbclass, and
   PACKAGEFUNCS has been set in insane.bbclass, so the "PACKAGEFUNCS ?="
   will set nothing, then the "emit_pkgdata" doesn't run which will
   cause this error.

* Add a QA_SANE variable in insane.bbclass, once the error type
   is ERROR_QA, it will fail the task and stop the build.

[YOCTO #3190]
[YOCTO #4396]

Signed-off-by: Robert Yang <[email protected]>
---
  meta/classes/insane.bbclass  |    6 ++++--
  meta/classes/package.bbclass |    5 ++++-
  2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass
index fb18022..c3e4b1e 100644
--- a/meta/classes/insane.bbclass
+++ b/meta/classes/insane.bbclass
@@ -17,7 +17,6 @@
  #   files under exec_prefix


-inherit package
  PACKAGE_DEPENDS += "${QADEPENDS}"
  PACKAGEFUNCS += " do_package_qa "

@@ -26,6 +25,7 @@ PACKAGEFUNCS += " do_package_qa "
  QADEPENDS = "prelink-native"
  QADEPENDS_class-native = ""
  QADEPENDS_class-nativesdk = ""
+QA_SANE = "True"

  #
  # dictionary for elf headers
@@ -133,6 +133,7 @@ def package_qa_handle_error(error_class, error_msg, d):
      package_qa_write_error(error_msg, d)
      if error_class in (d.getVar("ERROR_QA", True) or "").split():
          bb.error("QA Issue: %s" % error_msg)
+        d.setVar("QA_SANE", False)
          return False
      else:
          bb.warn("QA Issue: %s" % error_msg)
@@ -821,7 +822,8 @@ python do_package_qa () {
      if 'libdir' in d.getVar("ALL_QA", True).split():
          package_qa_check_libdir(d)

-    if not walk_sane or not rdepends_sane or not deps_sane:
+    qa_sane = d.getVar("QA_SANE", True)
+    if not walk_sane or not rdepends_sane or not deps_sane or not qa_sane:
          bb.fatal("QA run found fatal errors. Please consider fixing them.")
      bb.note("DONE with PACKAGE QA")
  }
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index 36b3ae5..e9a324e 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -42,6 +42,9 @@ inherit packagedata
  inherit prserv
  inherit chrpath

+# Need the package_qa_handle_error() in insane.bbclass
+inherit insane
+
  PKGD    = "${WORKDIR}/package"
  PKGDEST = "${WORKDIR}/packages-split"

@@ -1814,7 +1817,7 @@ PACKAGESPLITFUNCS ?= " \
                  package_do_split_locales \
                  populate_packages"
  # Functions which process metadata based on split packages
-PACKAGEFUNCS ?= " \
+PACKAGEFUNCS += " \
                  package_fixsymlinks \
                  package_name_hook \
                  package_do_filedeps \


_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

Reply via email to