M7350/oe-core/build/conf/get_bblayers.py
2024-09-09 08:52:07 +00:00

53 lines
2.2 KiB
Python
Executable File

# 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("\""))) + "\""