53 lines
2.2 KiB
Python
53 lines
2.2 KiB
Python
|
# Generate the bblayers.conf file for the current build workspace
|
||
|
# emitted to stdout for simplicity.
|
||
|
|
||
|
import os, sys, fnmatch, re
|
||
|
from operator import itemgetter
|
||
|
|
||
|
# Trawl the OEROOT as passed to us and find all the layer files that meet our
|
||
|
# metadata directory criteria...
|
||
|
def getLayerPaths(target, fnexpr) :
|
||
|
retList = []
|
||
|
for file in os.listdir(target) :
|
||
|
if fnmatch.fnmatch(file, fnexpr) and not (fnmatch.fnmatch(file, "meta-hob") or fnmatch.fnmatch(file, "meta-skeleton")) :
|
||
|
# Found what might be a metadata layer...
|
||
|
layerPath = target + "/" + file
|
||
|
layerConfPath = layerPath + "/conf/layer.conf"
|
||
|
if os.path.exists(layerConfPath) :
|
||
|
# Found a layer. Find the priority for it...
|
||
|
confFile = open(layerConfPath, "r")
|
||
|
if (confFile != None) :
|
||
|
for line in confFile :
|
||
|
fields = line.split()
|
||
|
if (len(fields) > 0 and re.match("BBFILE_PRIORITY", fields[0])) :
|
||
|
# Add the path, priority as a tuple to the list for the layer.
|
||
|
retList += [( layerPath, int(fields[2].strip("\"")) )]
|
||
|
break
|
||
|
confFile.close()
|
||
|
# In order to avoid potential namespace conflicts, between recipes on layers
|
||
|
# we sort the list in descending order of priority.
|
||
|
return sorted(retList, key=itemgetter(1), reverse=True)
|
||
|
|
||
|
|
||
|
# Just spool the tuple list's paths out in order to a string...
|
||
|
def generatePathString ( pathList ):
|
||
|
retString = ""
|
||
|
for path, priority in pathList:
|
||
|
retString = retString + path + " "
|
||
|
return retString.strip()
|
||
|
|
||
|
|
||
|
# Emit our config file...
|
||
|
print "# This configuration file is dynamically generated every time"
|
||
|
print "# set_bb_env.sh is sourced to set up a workspace. DO NOT EDIT."
|
||
|
print "#--------------------------------------------------------------"
|
||
|
print "LCONF_VERSION = \"4\""
|
||
|
print
|
||
|
print "export WORKSPACE := \"${@os.path.abspath(os.path.join(os.path.dirname(bb.data.getVar('FILE', d)),'../../..'))}\""
|
||
|
print
|
||
|
print "BBFILES ?= \"\""
|
||
|
print "BBLAYERS = \"" + generatePathString(getLayerPaths(sys.argv[1].strip("\""), sys.argv[2].strip("\""))) + "\""
|
||
|
|
||
|
|
||
|
|