diff options
author | Ross Burton <ross.burton@intel.com> | 2017-03-30 14:34:17 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-03-31 10:08:36 +0100 |
commit | 8ce18c5c4402243dc2ce7e6648e0d343acef46ef (patch) | |
tree | 3a2189648891a47ffa793ddef7887672322dc181 /bitbake/lib/bb | |
parent | f46846dc118a3132eee5aeddb43570b8343afc0a (diff) | |
download | poky-8ce18c5c4402243dc2ce7e6648e0d343acef46ef.tar.gz |
bitbake: bb/utils: extend which() so it can look for just executables
Normally bb.utils.which() is used by the unpack code to find a file in a variety
of places, but it is useful as a slightly more powerful version of os.which().
Support this by allowing it to only return matches which are executable files,
instead of just the first filename that matches.
(Bitbake rev: c0b94f02f0cba7a424aaa16cf98c0f7a3f62b889)
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb')
-rw-r--r-- | bitbake/lib/bb/utils.py | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py index d6bcfa37e8..077fddc0ee 100644 --- a/bitbake/lib/bb/utils.py +++ b/bitbake/lib/bb/utils.py | |||
@@ -899,11 +899,20 @@ def copyfile(src, dest, newmtime = None, sstat = None): | |||
899 | newmtime = sstat[stat.ST_MTIME] | 899 | newmtime = sstat[stat.ST_MTIME] |
900 | return newmtime | 900 | return newmtime |
901 | 901 | ||
902 | def which(path, item, direction = 0, history = False): | 902 | def which(path, item, direction = 0, history = False, executable=False): |
903 | """ | 903 | """ |
904 | Locate a file in a PATH | 904 | Locate `item` in the list of paths `path` (colon separated string like $PATH). |
905 | If `direction` is non-zero then the list is reversed. | ||
906 | If `history` is True then the list of candidates also returned as result,history. | ||
907 | If `executable` is True then the candidate has to be an executable file, | ||
908 | otherwise the candidate simply has to exist. | ||
905 | """ | 909 | """ |
906 | 910 | ||
911 | if executable: | ||
912 | is_candidate = lambda p: os.path.isfile(p) and os.access(p, os.X_OK) | ||
913 | else: | ||
914 | is_candidate = lambda p: os.path.exists(p) | ||
915 | |||
907 | hist = [] | 916 | hist = [] |
908 | paths = (path or "").split(':') | 917 | paths = (path or "").split(':') |
909 | if direction != 0: | 918 | if direction != 0: |
@@ -912,7 +921,7 @@ def which(path, item, direction = 0, history = False): | |||
912 | for p in paths: | 921 | for p in paths: |
913 | next = os.path.join(p, item) | 922 | next = os.path.join(p, item) |
914 | hist.append(next) | 923 | hist.append(next) |
915 | if os.path.exists(next): | 924 | if is_candidate(next): |
916 | if not os.path.isabs(next): | 925 | if not os.path.isabs(next): |
917 | next = os.path.abspath(next) | 926 | next = os.path.abspath(next) |
918 | if history: | 927 | if history: |