mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-04-01 12:01:31 +00:00
patman: Add a way to set the search path for tools
Sometimes tools can be located by looking in other locations. Add a way to direct the search. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
45f449bfc1
commit
c22b8cfc1d
1 changed files with 37 additions and 5 deletions
|
@ -24,6 +24,8 @@ chroot_path = None
|
||||||
# Search paths to use for Filename(), used to find files
|
# Search paths to use for Filename(), used to find files
|
||||||
search_paths = []
|
search_paths = []
|
||||||
|
|
||||||
|
tool_search_paths = []
|
||||||
|
|
||||||
# Tools and the packages that contain them, on debian
|
# Tools and the packages that contain them, on debian
|
||||||
packages = {
|
packages = {
|
||||||
'lz4': 'liblz4-tool',
|
'lz4': 'liblz4-tool',
|
||||||
|
@ -154,26 +156,56 @@ def Align(pos, align):
|
||||||
def NotPowerOfTwo(num):
|
def NotPowerOfTwo(num):
|
||||||
return num and (num & (num - 1))
|
return num and (num & (num - 1))
|
||||||
|
|
||||||
def PathHasFile(fname):
|
def SetToolPaths(toolpaths):
|
||||||
|
"""Set the path to search for tools
|
||||||
|
|
||||||
|
Args:
|
||||||
|
toolpaths: List of paths to search for tools executed by Run()
|
||||||
|
"""
|
||||||
|
global tool_search_paths
|
||||||
|
|
||||||
|
tool_search_paths = toolpaths
|
||||||
|
|
||||||
|
def PathHasFile(path_spec, fname):
|
||||||
"""Check if a given filename is in the PATH
|
"""Check if a given filename is in the PATH
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
path_spec: Value of PATH variable to check
|
||||||
fname: Filename to check
|
fname: Filename to check
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
True if found, False if not
|
True if found, False if not
|
||||||
"""
|
"""
|
||||||
for dir in os.environ['PATH'].split(':'):
|
for dir in path_spec.split(':'):
|
||||||
if os.path.exists(os.path.join(dir, fname)):
|
if os.path.exists(os.path.join(dir, fname)):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def Run(name, *args, **kwargs):
|
def Run(name, *args, **kwargs):
|
||||||
|
"""Run a tool with some arguments
|
||||||
|
|
||||||
|
This runs a 'tool', which is a program used by binman to process files and
|
||||||
|
perhaps produce some output. Tools can be located on the PATH or in a
|
||||||
|
search path.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
name: Command name to run
|
||||||
|
args: Arguments to the tool
|
||||||
|
kwargs: Options to pass to command.run()
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
CommandResult object
|
||||||
|
"""
|
||||||
try:
|
try:
|
||||||
return command.Run(name, *args, cwd=outdir, capture=True, **kwargs)
|
env = None
|
||||||
|
if tool_search_paths:
|
||||||
|
env = dict(os.environ)
|
||||||
|
env['PATH'] = ':'.join(tool_search_paths) + ':' + env['PATH']
|
||||||
|
return command.Run(name, *args, capture=True,
|
||||||
|
capture_stderr=True, env=env, **kwargs)
|
||||||
except:
|
except:
|
||||||
if not PathHasFile(name):
|
if env and not PathHasFile(env['PATH'], name):
|
||||||
msg = "Plesae install tool '%s'" % name
|
msg = "Please install tool '%s'" % name
|
||||||
package = packages.get(name)
|
package = packages.get(name)
|
||||||
if package:
|
if package:
|
||||||
msg += " (e.g. from package '%s')" % package
|
msg += " (e.g. from package '%s')" % package
|
||||||
|
|
Loading…
Add table
Reference in a new issue