[PATCH v2 08/38] patman: Add a function to find a tool on the path

Simon Glass sjg at chromium.org
Mon Jan 10 04:13:43 CET 2022


The Run() function automatically uses the PATH variable to locate a tool
when running it. Add a function that does this manually, so we don't have
to run a tool to find out if it is present.

This is needed by the new Bintool class, which wants to check which tools
are present.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

(no changes since v1)

 tools/patman/tools.py | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/tools/patman/tools.py b/tools/patman/tools.py
index 24e2bf567b8..a27db05ff2a 100644
--- a/tools/patman/tools.py
+++ b/tools/patman/tools.py
@@ -378,6 +378,29 @@ def run_result(name, *args, **kwargs):
             raise ValueError(msg)
         raise
 
+def tool_find(name):
+    """Search the current path for a tool
+
+    This uses both PATH and any value from SetToolPaths() to search for a tool
+
+    Args:
+        name (str): Name of tool to locate
+
+    Returns:
+        str: Full path to tool if found, else None
+    """
+    name = os.path.expanduser(name)  # Expand paths containing ~
+    paths = []
+    pathvar = os.environ.get('PATH')
+    if pathvar:
+        paths = pathvar.split(':')
+    if tool_search_paths:
+        paths += tool_search_paths
+    for path in paths:
+        fname = os.path.join(path, name)
+        if os.path.isfile(fname) and os.access(fname, os.X_OK):
+            return fname
+
 def Run(name, *args, **kwargs):
     """Run a tool with some arguments
 
-- 
2.34.1.575.g55b058a8bb-goog



More information about the U-Boot mailing list