bitbake: cookerdata: Allow bblayers.conf to be found using BBPATH

It should be possible to run a build anywhere on the filesystem and have
bitbake find the correct build directory if its set somehow. The BBPATH
variable makes perfect sense for this usage. Therefore use any available
value of BBPATH to search for conf/bblayers.conf before walking the parent
directory structure.

This restores the option of being able to run bitbake from anywhere if
the user has set things up to operate in that environment.

(Bitbake rev: e86336b3fe245bc97fe74c9b9d6a21d38a536fb7)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie 2013-08-29 14:27:29 +01:00
parent c7a389729a
commit 4322948564
1 changed files with 15 additions and 8 deletions

View File

@ -177,14 +177,21 @@ def _inherit(bbclass, data):
bb.parse.BBHandler.inherit(bbclass, "configuration INHERITs", 0, data) bb.parse.BBHandler.inherit(bbclass, "configuration INHERITs", 0, data)
return data return data
def findConfigFile(configfile): def findConfigFile(configfile, data):
search = []
bbpath = data.getVar("BBPATH", True)
if bbpath:
for i in bbpath.split(":"):
search.append(os.path.join(i, "conf", configfile))
path = os.getcwd() path = os.getcwd()
while path != "/": while path != "/":
confpath = os.path.join(path, "conf", configfile) search.append(os.path.join(path, "conf", configfile))
if os.path.exists(confpath):
return confpath
path, _ = os.path.split(path) path, _ = os.path.split(path)
for i in search:
if os.path.exists(i):
return i
return None return None
class CookerDataBuilder(object): class CookerDataBuilder(object):
@ -225,8 +232,8 @@ class CookerDataBuilder(object):
logger.exception("Error parsing configuration files") logger.exception("Error parsing configuration files")
sys.exit(1) sys.exit(1)
def _findLayerConf(self): def _findLayerConf(self, data):
return findConfigFile("bblayers.conf") return findConfigFile("bblayers.conf", data)
def parseConfigurationFiles(self, prefiles, postfiles): def parseConfigurationFiles(self, prefiles, postfiles):
data = self.data data = self.data
@ -236,7 +243,7 @@ class CookerDataBuilder(object):
for f in prefiles: for f in prefiles:
data = parse_config_file(f, data) data = parse_config_file(f, data)
layerconf = self._findLayerConf() layerconf = self._findLayerConf(data)
if layerconf: if layerconf:
parselog.debug(2, "Found bblayers.conf (%s)", layerconf) parselog.debug(2, "Found bblayers.conf (%s)", layerconf)
# By definition bblayers.conf is in conf/ of TOPDIR. # By definition bblayers.conf is in conf/ of TOPDIR.