summaryrefslogtreecommitdiff
path: root/classes/insane.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'classes/insane.bbclass')
-rw-r--r--classes/insane.bbclass226
1 files changed, 81 insertions, 145 deletions
diff --git a/classes/insane.bbclass b/classes/insane.bbclass
index c41b84a4c0..4696c25c1e 100644
--- a/classes/insane.bbclass
+++ b/classes/insane.bbclass
@@ -32,137 +32,63 @@ PACKAGEFUNCS += " do_package_qa "
def package_qa_get_machine_dict():
return {
"darwin9" : {
- "arm" : (40, 0, 0, True, True),
+ "arm" : ( 40, 0, 0, True, True),
},
"linux" : {
- "arm" : (40, 97, 0, True, True),
- "armeb": (40, 97, 0, False, True),
- "powerpc": (20, 0, 0, False, True),
- "i386": ( 3, 0, 0, True, True),
- "i486": ( 3, 0, 0, True, True),
- "i586": ( 3, 0, 0, True, True),
- "i686": ( 3, 0, 0, True, True),
- "x86_64": (62, 0, 0, True, False),
- "ia64": (50, 0, 0, True, False),
- "alpha": (36902, 0, 0, True, False),
- "hppa": (15, 3, 0, False, True),
- "m68k": ( 4, 0, 0, False, True),
- "mips": ( 8, 0, 0, False, True),
- "mipsel": ( 8, 0, 0, True, True),
- "s390": (22, 0, 0, False, True),
- "sh4": (42, 0, 0, True, True),
- "sparc": ( 2, 0, 0, False, True),
+ "arm" : ( 40, 97, 0, True, True),
+ "armeb": ( 40, 97, 0, False, True),
+ "i386": ( 3, 0, 0, True, True),
+ "i486": ( 3, 0, 0, True, True),
+ "i586": ( 3, 0, 0, True, True),
+ "i686": ( 3, 0, 0, True, True),
+ "x86_64": ( 62, 0, 0, True, False),
+ "ia64": ( 50, 0, 0, True, False),
+ "alpha": (36902, 0, 0, True, False),
+ "hppa": ( 15, 3, 0, False, True),
+ "m68k": ( 4, 0, 0, False, True),
+ "mips": ( 8, 0, 0, False, True),
+ "mipsel": ( 8, 0, 0, True, True),
+ "nios2": ( 113, 0, 0, True, True),
+ "powerpc": ( 20, 0, 0, False, True),
+ "s390": ( 22, 0, 0, False, True),
+ "sh4": ( 42, 0, 0, True, True),
+ "sparc": ( 2, 0, 0, False, True),
},
"linux-uclibc" : {
- "arm" : ( 40, 97, 0, True, True),
- "armeb": ( 40, 97, 0, False, True),
- "powerpc": ( 20, 0, 0, False, True),
- "i386": ( 3, 0, 0, True, True),
- "i486": ( 3, 0, 0, True, True),
- "i586": ( 3, 0, 0, True, True),
- "i686": ( 3, 0, 0, True, True),
- "mipsel": ( 8, 0, 0, True, True),
- "avr32": (6317, 0, 0, False, True),
- "sh4": (42, 0, 0, True, True),
-
+ "arm" : ( 40, 97, 0, True, True),
+ "armeb": ( 40, 97, 0, False, True),
+ "avr32": ( 6317, 0, 0, False, True),
+ "i386": ( 3, 0, 0, True, True),
+ "i486": ( 3, 0, 0, True, True),
+ "i586": ( 3, 0, 0, True, True),
+ "i686": ( 3, 0, 0, True, True),
+ "x86_64": ( 62, 0, 0, True, False),
+ "mips": ( 8, 0, 0, False, True),
+ "mipsel": ( 8, 0, 0, True, True),
+ "nios2": ( 113, 0, 0, True, True),
+ "powerpc": ( 20, 0, 0, False, True),
+ "sh4": ( 42, 0, 0, True, True),
},
"uclinux-uclibc" : {
- "bfin": ( 106, 0, 0, True, True),
+ "bfin": ( 106, 0, 0, True, True),
},
"linux-gnueabi" : {
- "arm" : (40, 0, 0, True, True),
- "armeb" : (40, 0, 0, False, True),
+ "arm" : ( 40, 0, 0, True, True),
+ "armeb" : ( 40, 0, 0, False, True),
},
"linux-uclibceabi" : {
- "arm" : (40, 0, 0, True, True),
- "armeb" : (40, 0, 0, False, True),
+ "arm" : ( 40, 0, 0, True, True),
+ "armeb" : ( 40, 0, 0, False, True),
},
"linux-gnuspe" : {
- "powerpc": (20, 0, 0, False, True),
+ "powerpc": ( 20, 0, 0, False, True),
+ },
+ "linux-uclibcspe" : {
+ "powerpc": ( 20, 0, 0, False, True),
},
}
-# factory for a class, embedded in a method
-def package_qa_get_elf(path, bits32):
- class ELFFile:
- EI_NIDENT = 16
-
- EI_CLASS = 4
- EI_DATA = 5
- EI_VERSION = 6
- EI_OSABI = 7
- EI_ABIVERSION = 8
-
- # possible values for EI_CLASS
- ELFCLASSNONE = 0
- ELFCLASS32 = 1
- ELFCLASS64 = 2
-
- # possible value for EI_VERSION
- EV_CURRENT = 1
-
- # possible values for EI_DATA
- ELFDATANONE = 0
- ELFDATA2LSB = 1
- ELFDATA2MSB = 2
-
- def my_assert(self, expectation, result):
- if not expectation == result:
- #print "'%x','%x' %s" % (ord(expectation), ord(result), self.name)
- raise Exception("This does not work as expected")
-
- def __init__(self, name):
- self.name = name
-
- def open(self):
- self.file = file(self.name, "r")
- self.data = self.file.read(ELFFile.EI_NIDENT+4)
-
- self.my_assert(len(self.data), ELFFile.EI_NIDENT+4)
- self.my_assert(self.data[0], chr(0x7f) )
- self.my_assert(self.data[1], 'E')
- self.my_assert(self.data[2], 'L')
- self.my_assert(self.data[3], 'F')
- if bits32 :
- self.my_assert(self.data[ELFFile.EI_CLASS], chr(ELFFile.ELFCLASS32))
- else:
- self.my_assert(self.data[ELFFile.EI_CLASS], chr(ELFFile.ELFCLASS64))
- self.my_assert(self.data[ELFFile.EI_VERSION], chr(ELFFile.EV_CURRENT) )
-
- self.sex = self.data[ELFFile.EI_DATA]
- if self.sex == chr(ELFFile.ELFDATANONE):
- raise Exception("self.sex == ELFDATANONE")
- elif self.sex == chr(ELFFile.ELFDATA2LSB):
- self.sex = "<"
- elif self.sex == chr(ELFFile.ELFDATA2MSB):
- self.sex = ">"
- else:
- raise Exception("Unknown self.sex")
-
- def osAbi(self):
- return ord(self.data[ELFFile.EI_OSABI])
-
- def abiVersion(self):
- return ord(self.data[ELFFile.EI_ABIVERSION])
-
- def isLittleEndian(self):
- return self.sex == "<"
-
- def isBigEngian(self):
- return self.sex == ">"
-
- def machine(self):
- """
- We know the sex stored in self.sex and we
- know the position
- """
- import struct
- (a,) = struct.unpack(self.sex+"H", self.data[18:20])
- return a
-
- return ELFFile(path)
-
# Known Error classes
# 0 - non dev contains .so
@@ -178,7 +104,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):
@@ -193,7 +118,6 @@ 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
@@ -218,7 +142,6 @@ 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 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)
@@ -255,7 +178,6 @@ def package_qa_check_dev(path, name,d, elf):
Check for ".so" library symlinks in non-dev packages
"""
- import bb, os
sane = True
# SDK packages are special.
@@ -263,11 +185,10 @@ def package_qa_check_dev(path, name,d, elf):
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)
+ if not name.endswith("-dev") and path.endswith(".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
@@ -276,11 +197,10 @@ def package_qa_check_dbg(path, name,d, elf):
Check for ".debug" files or directories outside of the dbg package
"""
- import bb, os
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)
@@ -301,7 +221,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)
@@ -336,10 +255,11 @@ def package_qa_check_desktop(path, name, d, elf):
"""
Run all desktop files through desktop-file-validate.
"""
- import bb, os
sane = True
+ env_path = bb.data.getVar('PATH', d, True)
+
if path.endswith(".desktop"):
- output = os.popen("desktop-file-validate %s" % path)
+ output = os.popen("PATH=%s desktop-file-validate %s" % (env_path, path))
# This only produces output on errors
for l in output:
sane = package_qa_handle_error(7, l.strip(), name, path, d)
@@ -350,7 +270,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
@@ -397,7 +316,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)
@@ -417,7 +335,7 @@ def package_qa_check_staged(path,d):
for root, dirs, files in os.walk(path):
for file in files:
path = os.path.join(root,file)
- if file[-2:] == "la":
+ if file.endswith(".la"):
file_content = open(path).read()
# Don't check installed status for native/cross packages
if not iscrossnative:
@@ -427,7 +345,7 @@ def package_qa_check_staged(path,d):
if workdir in file_content:
error_msg = "%s failed sanity test (workdir) in path %s" % (file,root)
sane = package_qa_handle_error(8, error_msg, "staging", path, d)
- elif file[-2:] == "pc":
+ elif file.endswith(".pc"):
file_content = open(path).read()
if pkgconfigcheck in file_content:
error_msg = "%s failed sanity test (tmpdir) in path %s" % (file,root)
@@ -437,8 +355,7 @@ 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
+ import oe.qa
#if this will throw an exception, then fix the dict above
target_os = bb.data.getVar('TARGET_OS', d, True)
@@ -446,10 +363,11 @@ def package_qa_walk(path, funcs, package,d):
(machine, osabi, abiversion, littleendian, bits32) \
= package_qa_get_machine_dict()[target_os][target_arch]
+ sane = True
for root, dirs, files in os.walk(path):
for file in files:
path = os.path.join(root,file)
- elf = package_qa_get_elf(path, bits32)
+ elf = oe.qa.ELFFile(path, bits32)
try:
elf.open()
except:
@@ -460,14 +378,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)
@@ -498,9 +415,8 @@ def package_qa_check_rdepends(pkg, workdir, d):
# The PACKAGE FUNC to scan each package
python do_package_qa () {
- import bb
bb.debug(2, "DO PACKAGE QA")
- workdir = bb.data.getVar('WORKDIR', d, True)
+ pkgdest = bb.data.getVar('PKGDEST', d, True)
packages = bb.data.getVar('PACKAGES',d, True)
# no packages should be scanned
@@ -519,10 +435,10 @@ python do_package_qa () {
continue
bb.debug(1, "Checking Package: %s" % package)
- path = "%s/install/%s" % (workdir, 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:
@@ -532,7 +448,7 @@ python do_package_qa () {
# The Staging Func, to check all staging
-addtask qa_staging after do_populate_staging before do_build
+addtask qa_staging after do_populate_sysroot before do_package_stage
python do_qa_staging() {
bb.debug(2, "QA checking staging")
@@ -543,8 +459,8 @@ python do_qa_staging() {
# Check broken config.log files
addtask qa_configure after do_configure before do_compile
python do_qa_configure() {
+ configs = []
bb.debug(1, "Checking sanity of the config.log file")
- import os
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")
@@ -552,4 +468,24 @@ python do_qa_configure() {
if os.system(statement) == 0:
bb.fatal("""This autoconf log indicates errors, it looked at host includes.
Rerun configure task after fixing this. The path was '%s'""" % root)
+
+ if "configure.ac" in files:
+ configs.append(os.path.join(root,"configure.ac"))
+ if "configure.in" in files:
+ configs.append(os.path.join(root, "configure.in"))
+
+ if "gettext" not in bb.data.getVar('P', d, True):
+ if bb.data.inherits_class('native', d) or bb.data.inherits_class('cross', d) or bb.data.inherits_class('crosssdk', d) or bb.data.inherits_class('nativesdk', d):
+ gt = "gettext-native"
+ elif bb.data.inherits_class('cross-canadian', d):
+ gt = "gettext-nativesdk"
+ else:
+ gt = "gettext"
+ deps = bb.utils.explode_deps(bb.data.getVar('DEPENDS', d, True) or "")
+ if gt not in deps:
+ for config in configs:
+ gnu = "grep \"^[[:space:]]*AM_GNU_GETTEXT\" %s >/dev/null" % config
+ if os.system(gnu) == 0:
+ bb.note("""Gettext required but not in DEPENDS for file %s.
+Missing inherit gettext?""" % config)
}