summaryrefslogtreecommitdiff
path: root/tools/util.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/util.py')
-rw-r--r--tools/util.py25
1 files changed, 17 insertions, 8 deletions
diff --git a/tools/util.py b/tools/util.py
index 2cb22ed6a..306f2109f 100644
--- a/tools/util.py
+++ b/tools/util.py
@@ -131,15 +131,24 @@ def touch(fname):
# Recursive search for files of certain extensions.
-# (Recursive glob doesn't exist in python 2.7.)
-def find_exts(directory, *extensions):
+# * Recursive glob doesn't exist in python 2.7.
+# * On windows, `os.walk()` unconditionally follows symlinks.
+# The `skip` parameter should be used to avoid recursing through those.
+def find_exts(directories, extensions, skip=[]):
+ assert isinstance(directories, list)
+ assert isinstance(extensions, list)
+ skip = [os.path.normpath(i) for i in skip]
matches = []
- for root, dirnames, filenames in os.walk(directory):
- for filename in filenames:
- for ext in extensions:
- if filename.endswith(ext):
- matches.append(os.path.join(root, filename))
- break
+ for directory in directories:
+ for root, dirnames, filenames in os.walk(directory):
+ if root in skip:
+ dirnames[:] = [] # Don't recurse further into this directory.
+ continue
+ for filename in filenames:
+ for ext in extensions:
+ if filename.endswith(ext):
+ matches.append(os.path.join(root, filename))
+ break
return matches