Yocto 2.3
Move OpenBMC to Yocto 2.3(pyro).
Tested: Built and verified Witherspoon and Palmetto images
Change-Id: I50744030e771f4850afc2a93a10d3507e76d36bc
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Resolves: openbmc/openbmc#2461
diff --git a/import-layers/yocto-poky/bitbake/lib/bb/utils.py b/import-layers/yocto-poky/bitbake/lib/bb/utils.py
index 16fc9db..6a44db5 100644
--- a/import-layers/yocto-poky/bitbake/lib/bb/utils.py
+++ b/import-layers/yocto-poky/bitbake/lib/bb/utils.py
@@ -523,12 +523,8 @@
"""
Return the hex string representation of the MD5 checksum of filename.
"""
- try:
- import hashlib
- m = hashlib.md5()
- except ImportError:
- import md5
- m = md5.new()
+ import hashlib
+ m = hashlib.md5()
with open(filename, "rb") as f:
for line in f:
@@ -538,14 +534,9 @@
def sha256_file(filename):
"""
Return the hex string representation of the 256-bit SHA checksum of
- filename. On Python 2.4 this will return None, so callers will need to
- handle that by either skipping SHA checks, or running a standalone sha256sum
- binary.
+ filename.
"""
- try:
- import hashlib
- except ImportError:
- return None
+ import hashlib
s = hashlib.sha256()
with open(filename, "rb") as f:
@@ -557,10 +548,7 @@
"""
Return the hex string representation of the SHA1 checksum of the filename
"""
- try:
- import hashlib
- except ImportError:
- return None
+ import hashlib
s = hashlib.sha1()
with open(filename, "rb") as f:
@@ -665,7 +653,7 @@
for var in bb.data.keys(d):
export = d.getVarFlag(var, "export", False)
if export:
- os.environ[var] = d.getVar(var, True) or ""
+ os.environ[var] = d.getVar(var) or ""
def _check_unsafe_delete_path(path):
"""
@@ -692,7 +680,7 @@
if _check_unsafe_delete_path(path):
raise Exception('bb.utils.remove: called with dangerous path "%s" and recurse=True, refusing to delete!' % path)
# shutil.rmtree(name) would be ideal but its too slow
- subprocess.call(['rm', '-rf'] + glob.glob(path))
+ subprocess.check_call(['rm', '-rf'] + glob.glob(path))
return
for name in glob.glob(path):
try:
@@ -911,11 +899,20 @@
newmtime = sstat[stat.ST_MTIME]
return newmtime
-def which(path, item, direction = 0, history = False):
+def which(path, item, direction = 0, history = False, executable=False):
"""
- Locate a file in a PATH
+ Locate `item` in the list of paths `path` (colon separated string like $PATH).
+ If `direction` is non-zero then the list is reversed.
+ If `history` is True then the list of candidates also returned as result,history.
+ If `executable` is True then the candidate has to be an executable file,
+ otherwise the candidate simply has to exist.
"""
+ if executable:
+ is_candidate = lambda p: os.path.isfile(p) and os.access(p, os.X_OK)
+ else:
+ is_candidate = lambda p: os.path.exists(p)
+
hist = []
paths = (path or "").split(':')
if direction != 0:
@@ -924,7 +921,7 @@
for p in paths:
next = os.path.join(p, item)
hist.append(next)
- if os.path.exists(next):
+ if is_candidate(next):
if not os.path.isabs(next):
next = os.path.abspath(next)
if history:
@@ -953,7 +950,7 @@
Arguments:
variable -- the variable name. This will be fetched and expanded (using
- d.getVar(variable, True)) and then split into a set().
+ d.getVar(variable)) and then split into a set().
checkvalues -- if this is a string it is split on whitespace into a set(),
otherwise coerced directly into a set().
@@ -966,7 +963,7 @@
d -- the data store.
"""
- val = d.getVar(variable, True)
+ val = d.getVar(variable)
if not val:
return falsevalue
val = set(val.split())
@@ -979,7 +976,7 @@
return falsevalue
def contains_any(variable, checkvalues, truevalue, falsevalue, d):
- val = d.getVar(variable, True)
+ val = d.getVar(variable)
if not val:
return falsevalue
val = set(val.split())
@@ -991,6 +988,30 @@
return truevalue
return falsevalue
+def filter(variable, checkvalues, d):
+ """Return all words in the variable that are present in the checkvalues.
+
+ Arguments:
+
+ variable -- the variable name. This will be fetched and expanded (using
+ d.getVar(variable)) and then split into a set().
+
+ checkvalues -- if this is a string it is split on whitespace into a set(),
+ otherwise coerced directly into a set().
+
+ d -- the data store.
+ """
+
+ val = d.getVar(variable)
+ if not val:
+ return ''
+ val = set(val.split())
+ if isinstance(checkvalues, str):
+ checkvalues = set(checkvalues.split())
+ else:
+ checkvalues = set(checkvalues)
+ return ' '.join(sorted(checkvalues & val))
+
def cpu_count():
return multiprocessing.cpu_count()
@@ -1378,10 +1399,10 @@
def get_file_layer(filename, d):
"""Determine the collection (as defined by a layer's layer.conf file) containing the specified file"""
- collections = (d.getVar('BBFILE_COLLECTIONS', True) or '').split()
+ collections = (d.getVar('BBFILE_COLLECTIONS') or '').split()
collection_res = {}
for collection in collections:
- collection_res[collection] = d.getVar('BBFILE_PATTERN_%s' % collection, True) or ''
+ collection_res[collection] = d.getVar('BBFILE_PATTERN_%s' % collection) or ''
def path_to_layer(path):
# Use longest path so we handle nested layers
@@ -1394,7 +1415,7 @@
return match
result = None
- bbfiles = (d.getVar('BBFILES', True) or '').split()
+ bbfiles = (d.getVar('BBFILES') or '').split()
bbfilesmatch = False
for bbfilesentry in bbfiles:
if fnmatch.fnmatch(filename, bbfilesentry):
@@ -1471,7 +1492,7 @@
if v in os.environ.keys():
exported = True
else:
- v_proxy = d.getVar(v, True)
+ v_proxy = d.getVar(v)
if v_proxy is not None:
os.environ[v] = v_proxy
exported = True
@@ -1503,3 +1524,14 @@
plugins.append(obj or plugin)
else:
plugins.append(plugin)
+
+
+class LogCatcher(logging.Handler):
+ """Logging handler for collecting logged messages so you can check them later"""
+ def __init__(self):
+ self.messages = []
+ logging.Handler.__init__(self, logging.WARNING)
+ def emit(self, record):
+ self.messages.append(bb.build.logformatter.format(record))
+ def contains(self, message):
+ return (message in self.messages)