aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/scripts/symbolextractor.py21
1 files changed, 13 insertions, 8 deletions
diff --git a/mesonbuild/scripts/symbolextractor.py b/mesonbuild/scripts/symbolextractor.py
index dea7284..b168acc 100644
--- a/mesonbuild/scripts/symbolextractor.py
+++ b/mesonbuild/scripts/symbolextractor.py
@@ -55,6 +55,8 @@ def print_tool_warning(tool, msg, stderr=None):
global TOOL_WARNING_FILE
if os.path.exists(TOOL_WARNING_FILE):
return
+ if len(tool) == 1:
+ tool = tool[0]
m = '{!r} {}. {}'.format(tool, msg, RELINKING_WARNING)
if stderr:
m += '\n' + stderr
@@ -66,10 +68,13 @@ def print_tool_warning(tool, msg, stderr=None):
def call_tool(name, args):
evar = name.upper()
if evar in os.environ:
- name = os.environ[evar].strip()
+ import shlex
+ name = shlex.split(os.environ[evar])
+ else:
+ name = [name]
# Run it
try:
- p, output, e = Popen_safe([name] + args)
+ p, output, e = Popen_safe(name + args)
except FileNotFoundError:
print_tool_warning(tool, 'not found')
return None
@@ -80,15 +85,15 @@ def call_tool(name, args):
def linux_syms(libfilename: str, outfilename: str):
# Get the name of the library
- output = call_tool(['readelf', '-d', libfilename])
+ output = call_tool('readelf', ['-d', libfilename])
if not output:
dummy_syms(outfilename)
return
result = [x for x in output.split('\n') if 'SONAME' in x]
assert(len(result) <= 1)
# Get a list of all symbols exported
- output = call_tool(['nm', '--dynamic', '--extern-only', '--defined-only',
- '--format=posix', libfilename])
+ output = call_tool('nm', ['--dynamic', '--extern-only', '--defined-only',
+ '--format=posix', libfilename])
if not output:
dummy_syms(outfilename)
return
@@ -104,7 +109,7 @@ def linux_syms(libfilename: str, outfilename: str):
def osx_syms(libfilename, outfilename):
# Get the name of the library
- output = call_tool(['otool', '-l', libfilename])
+ output = call_tool('otool', ['-l', libfilename])
if not output:
dummy_syms(outfilename)
return
@@ -115,8 +120,8 @@ def osx_syms(libfilename, outfilename):
break
result = [arr[match + 2], arr[match + 5]] # Libreoffice stores all 5 lines but the others seem irrelevant.
# Get a list of all symbols exported
- output = call_tool(['nm', '--extern-only', '--defined-only',
- '--format=posix', libfilename])
+ output = call_tool('nm', ['--extern-only', '--defined-only',
+ '--format=posix', libfilename])
if not output:
dummy_syms(outfilename)
return