summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoshua Lock <josh@linux.intel.com>2011-06-30 23:02:52 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-07-01 17:17:35 +0100
commit6c36f4a6aa76dbbca4f8c0623955058db34bd1e5 (patch)
tree66aba473c08e3d195fc0cf8c2e86b9d06e805608
parent9fe29fd7db125d8f1295086b003d925c255303f4 (diff)
downloadast2050-yocto-poky-6c36f4a6aa76dbbca4f8c0623955058db34bd1e5.zip
ast2050-yocto-poky-6c36f4a6aa76dbbca4f8c0623955058db34bd1e5.tar.gz
cooker|command|event: add new command findFilesMatchingInDir
This command can be used to search each BBPATH for files in the passed directory which have a filename matching the supplied pattern. This is implemented for use from the GUI (to determine the available PACKAGE_CLASSES) but has been written so as to be generically useful and reusable. (Bitbake rev: 2a599812a57cb0b964880a6a2b7548423497ea92) Signed-off-by: Joshua Lock <josh@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--bitbake/lib/bb/command.py12
-rw-r--r--bitbake/lib/bb/cooker.py23
-rw-r--r--bitbake/lib/bb/event.py10
3 files changed, 45 insertions, 0 deletions
diff --git a/bitbake/lib/bb/command.py b/bitbake/lib/bb/command.py
index 2f37938..a902da2 100644
--- a/bitbake/lib/bb/command.py
+++ b/bitbake/lib/bb/command.py
@@ -251,6 +251,18 @@ class CommandsAsync:
command.finishAsyncCommand()
findConfigFiles.needcache = True
+ def findFilesMatchingInDir(self, command, params):
+ """
+ Find implementation files matching the specified pattern
+ in the requested subdirectory of a BBPATH
+ """
+ pattern = params[0]
+ directory = params[1]
+
+ command.cooker.findFilesMatchingInDir(pattern, directory)
+ command.finishAsyncCommand()
+ findFilesMatchingInDir.needcache = True
+
def findConfigFilePath(self, command, params):
"""
Find the path of the requested configuration file
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index e537634..9874f66 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -520,6 +520,29 @@ class BBCooker:
path = self._findConfigFile(configfile)
bb.event.fire(bb.event.ConfigFilePathFound(path), self.configuration.data)
+ def findFilesMatchingInDir(self, filepattern, directory):
+ """
+ Searches for files matching the regex 'pattern' which are children of
+ 'directory' in each BBPATH. i.e. to find all rootfs package classes available
+ to BitBake one could call findFilesMatchingInDir(self, 'rootfs_', 'classes')
+ or to find all machine configuration files on could call
+ findFilesMatchingInDir(self, 'conf/machines', 'conf')
+ """
+ import re
+
+ matches = []
+ p = re.compile(re.escape(filepattern))
+ bbpaths = bb.data.getVar('BBPATH', self.configuration.data, True).split(':')
+ for path in bbpaths:
+ dirpath = os.path.join(path, directory)
+ if os.path.exists(dirpath):
+ for root, dirs, files in os.walk(dirpath):
+ for f in files:
+ if p.search(f):
+ matches.append(f)
+
+ bb.event.fire(bb.event.FilesMatchingFound(filepattern, matches), self.configuration.data)
+
def findConfigFiles(self, varname):
"""
Find config files which are appropriate values for varname.
diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py
index 7c49d46..c7252dd 100644
--- a/bitbake/lib/bb/event.py
+++ b/bitbake/lib/bb/event.py
@@ -390,6 +390,16 @@ class TargetsTreeGenerated(Event):
Event.__init__(self)
self._model = model
+class FilesMatchingFound(Event):
+ """
+ Event when a list of files matching the supplied pattern has
+ been generated
+ """
+ def __init__(self, pattern, matches):
+ Event.__init__(self)
+ self._pattern = pattern
+ self._matches = matches
+
class ConfigFilesFound(Event):
"""
Event when a list of appropriate config files has been generated
OpenPOWER on IntegriCloud