diff options
| -rw-r--r-- | meta/lib/oe/path.py | 34 | 
1 files changed, 34 insertions, 0 deletions
| diff --git a/meta/lib/oe/path.py b/meta/lib/oe/path.py index 76c58fa760..be02218c31 100644 --- a/meta/lib/oe/path.py +++ b/meta/lib/oe/path.py @@ -259,3 +259,37 @@ def is_path_parent(possible_parent, *paths):          if not path_abs.startswith(possible_parent_abs):              return False      return True + +def which_wild(pathname, path=None, mode=os.F_OK, *, reverse=False, candidates=False): +    """Search a search path for pathname, supporting wildcards. + +    Return all paths in the specific search path matching the wildcard pattern +    in pathname, returning only the first encountered for each file. If +    candidates is True, information on all potential candidate paths are +    included. +    """ +    paths = (path or os.environ.get('PATH', os.defpath)).split(':') +    if reverse: +        paths.reverse() + +    seen, files = set(), [] +    for index, element in enumerate(paths): +        if not os.path.isabs(element): +            element = os.path.abspath(element) + +        candidate = os.path.join(element, pathname) +        globbed = glob.glob(candidate) +        if globbed: +            for found_path in sorted(globbed): +                if not os.access(found_path, mode): +                    continue +                rel = os.path.relpath(found_path, element) +                if rel not in seen: +                    seen.add(rel) +                    if candidates: +                        files.append((found_path, [os.path.join(p, rel) for p in paths[:index+1]])) +                    else: +                        files.append(found_path) + +    return files + | 
