llvm-project/lldb/packages/Python/lldbsuite/support/fs.py

65 lines
1.9 KiB
Python

"""
The LLVM Compiler Infrastructure
This file is distributed under the University of Illinois Open Source
License. See LICENSE.TXT for details.
Prepares language bindings for LLDB build process. Run with --help
to see a description of the supported command line arguments.
"""
# Python modules:
import os
import platform
import sys
def _find_file_in_paths(paths, exe_basename):
"""Returns the full exe path for the first path match.
@params paths the list of directories to search for the exe_basename
executable
@params exe_basename the name of the file for which to search.
e.g. "swig" or "swig.exe".
@return the full path to the executable if found in one of the
given paths; otherwise, returns None.
"""
for path in paths:
trial_exe_path = os.path.join(path, exe_basename)
if os.path.exists(trial_exe_path):
return os.path.normcase(trial_exe_path)
return None
def find_executable(executable):
"""Finds the specified executable in the PATH or known good locations."""
# Figure out what we're looking for.
if platform.system() == "Windows":
executable = executable + ".exe"
extra_dirs = []
else:
extra_dirs = ["/usr/local/bin"]
# Figure out what paths to check.
path_env = os.environ.get("PATH", None)
if path_env is not None:
paths_to_check = path_env.split(os.path.pathsep)
else:
paths_to_check = []
# Add in the extra dirs
paths_to_check.extend(extra_dirs)
if len(paths_to_check) < 1:
raise os.OSError(
"executable was not specified, PATH has no "
"contents, and there are no extra directories to search")
result = _find_file_in_paths(paths_to_check, executable)
if not result or len(result) < 1:
raise os.OSError(
"failed to find exe='%s' in paths='%s'" % (executable, paths_to_check))
return result