diff options
author | Joshua Lock <josh@linux.intel.com> | 2011-06-30 23:02:52 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2011-07-01 17:17:35 +0100 |
commit | 6c36f4a6aa76dbbca4f8c0623955058db34bd1e5 (patch) | |
tree | 66aba473c08e3d195fc0cf8c2e86b9d06e805608 | |
parent | 9fe29fd7db125d8f1295086b003d925c255303f4 (diff) | |
download | ast2050-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.py | 12 | ||||
-rw-r--r-- | bitbake/lib/bb/cooker.py | 23 | ||||
-rw-r--r-- | bitbake/lib/bb/event.py | 10 |
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 |