- Add pn-PN to overrides when evaluating PREFERRED_VERSION
- Improve the progress indicator by skipping tasks that have
already run before starting the build rather than during it
- - Add profiling option (-P)
+ - Add profiling option (-P)
+ - Add BB_SRCREV_POLICY variable (clear or cache) to control SRCREV cache
+ - Add SRCREV_FORMAT support
+ - Fix local fetcher's localpath return values
+ - Apply OVERRIDES before performing immediate expansions
+ - Allow the -b -e option combination to take regular expressions
+ - Fix handling of variables with expansion in the name using _append/_prepend
+ e.g. RRECOMMENDS_${PN}_append_xyz = "abc"
Changes in Bitbake 1.8.6:
- Correctly redirect stdin when forking
#######################################################################
def which(path, item, direction = 0):
- """Useful function for locating a file in a PATH"""
- found = ""
+ """
+ Locate a file in a PATH
+ """
+
+ paths = (path or "").split(':')
+ if direction != 0:
+ paths.reverse()
+
for p in (path or "").split(':'):
- if os.path.exists(os.path.join(p, item)):
- found = os.path.join(p, item)
- if direction == 0:
- break
- return found
+ next = os.path.join(p, item)
+ if os.path.exists(next):
+ return next
+
+ return ""
#######################################################################
if self.configuration.buildfile:
self.cb = None
self.bb_cache = bb.cache.init(self)
+ bf = self.matchFile(self.configuration.buildfile)
try:
- self.configuration.data = self.bb_cache.loadDataFull(self.configuration.buildfile, self.configuration.data)
+ self.configuration.data = self.bb_cache.loadDataFull(bf, self.configuration.data)
except IOError, e:
- bb.msg.fatal(bb.msg.domain.Parsing, "Unable to read %s: %s" % ( self.configuration.buildfile, e ))
+ bb.msg.fatal(bb.msg.domain.Parsing, "Unable to read %s: %s" % (bf, e))
except Exception, e:
bb.msg.fatal(bb.msg.domain.Parsing, "%s" % e)
# emit variables and shell functions
bb.data.setVar("BUILDNAME", os.popen('date +%Y%m%d%H%M').readline().strip(), self.configuration.data)
bb.data.setVar("BUILDSTART", time.strftime('%m/%d/%Y %H:%M:%S',time.gmtime()),self.configuration.data)
- def buildFile(self, buildfile):
+ def matchFile(self, buildfile):
"""
- Build the file matching regexp buildfile
+ Convert the fragment buildfile into a real file
+ Error if there are too many matches
"""
-
bf = os.path.abspath(buildfile)
try:
os.stat(bf)
+ return bf
except OSError:
(filelist, masked) = self.collect_bbfiles()
regexp = re.compile(buildfile)
for f in matches:
bb.msg.error(bb.msg.domain.Parsing, " %s" % f)
sys.exit(1)
- bf = matches[0]
+ return matches[0]
+
+ def buildFile(self, buildfile):
+ """
+ Build the file matching regexp buildfile
+ """
+
+ bf = self.matchFile(buildfile)
bbfile_data = bb.parse.handle(bf, self.configuration.data)
src = getVarFlag(key, i, readdata) or []
dest.extend(src)
setVarFlag(ekey, i, dest, alterdata)
+
+ if key in alterdata._special_values[i]:
+ alterdata._special_values[i].remove(key)
+ alterdata._special_values[i].add(ekey)
delVar(key, alterdata)
if len(scms) == 1:
return urldata[scms[0]].method.sortable_revision(scms[0], urldata[scms[0]], d)
- bb.msg.error(bb.msg.domain.Fetcher, "Sorry, support for SRCREV_FORMAT still needs to be written")
- raise ParameterError
+ #
+ # Mutiple SCMs are in SRC_URI so we resort to SRCREV_FORMAT
+ #
+ format = bb.data.getVar('SRCREV_FORMAT', d, 1)
+ if not format:
+ bb.msg.error(bb.msg.domain.Fetcher, "The SRCREV_FORMAT variable must be set when multiple SCMs are used.")
+ raise ParameterError
+
+ for scm in scms:
+ if 'name' in urldata[scm].parm:
+ name = urldata[scm].parm["name"]
+ rev = urldata[scm].method.sortable_revision(scm, urldata[scm], d)
+ format = format.replace(name, rev)
+
+ return format
def localpath(url, d, cache = True):
"""
return urldata.type in ['file','patch']
def localpath(self, url, urldata, d):
- """Return the local filename of a given url assuming a successful fetch.
+ """
+ Return the local filename of a given url assuming a successful fetch.
"""
path = url.split("://")[1]
+ path = path.split(";")[0]
newpath = path
if path[0] != "/":
filespath = data.getVar('FILESPATH', d, 1)