diff options
Diffstat (limited to 'mesonbuild/scripts/symbolextractor.py')
| -rw-r--r-- | mesonbuild/scripts/symbolextractor.py | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/mesonbuild/scripts/symbolextractor.py b/mesonbuild/scripts/symbolextractor.py index cf486afb2..e60731510 100644 --- a/mesonbuild/scripts/symbolextractor.py +++ b/mesonbuild/scripts/symbolextractor.py @@ -36,12 +36,12 @@ parser.add_argument('args', nargs='+') TOOL_WARNING_FILE = None RELINKING_WARNING = 'Relinking will always happen on source changes.' -def dummy_syms(outfilename: str): +def dummy_syms(outfilename: str) -> None: """Just touch it so relinking happens always.""" with open(outfilename, 'w'): pass -def write_if_changed(text: str, outfilename: str): +def write_if_changed(text: str, outfilename: str) -> None: try: with open(outfilename, 'r') as f: oldtext = f.read() @@ -52,13 +52,11 @@ def write_if_changed(text: str, outfilename: str): with open(outfilename, 'w') as f: f.write(text) -def print_tool_warning(tool: list, msg: str, stderr: str = None): +def print_tool_warning(tools: T.List[str], msg: str, stderr: T.Optional[str] = None) -> 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) + m = '{!r} {}. {}'.format(tools, msg, RELINKING_WARNING) if stderr: m += '\n' + stderr mlog.warning(m) @@ -73,7 +71,7 @@ def get_tool(name: str) -> T.List[str]: return shlex.split(os.environ[evar]) return [name] -def call_tool(name: str, args: T.List[str], **kwargs) -> str: +def call_tool(name: str, args: T.List[str], **kwargs: T.Any) -> str: tool = get_tool(name) try: p, output, e = Popen_safe(tool + args, **kwargs) @@ -88,7 +86,7 @@ def call_tool(name: str, args: T.List[str], **kwargs) -> str: return None return output -def call_tool_nowarn(tool: T.List[str], **kwargs) -> T.Tuple[str, str]: +def call_tool_nowarn(tool: T.List[str], **kwargs: T.Any) -> T.Tuple[str, str]: try: p, output, e = Popen_safe(tool, **kwargs) except FileNotFoundError: @@ -99,7 +97,7 @@ def call_tool_nowarn(tool: T.List[str], **kwargs) -> T.Tuple[str, str]: return None, e return output, None -def gnu_syms(libfilename: str, outfilename: str): +def gnu_syms(libfilename: str, outfilename: str) -> None: # Get the name of the library output = call_tool('readelf', ['-d', libfilename]) if not output: @@ -126,7 +124,7 @@ def gnu_syms(libfilename: str, outfilename: str): result += [' '.join(entry)] write_if_changed('\n'.join(result) + '\n', outfilename) -def solaris_syms(libfilename: str, outfilename: str): +def solaris_syms(libfilename: str, outfilename: str) -> None: # gnu_syms() works with GNU nm & readelf, not Solaris nm & elfdump origpath = os.environ['PATH'] try: @@ -135,7 +133,7 @@ def solaris_syms(libfilename: str, outfilename: str): finally: os.environ['PATH'] = origpath -def osx_syms(libfilename: str, outfilename: str): +def osx_syms(libfilename: str, outfilename: str) -> None: # Get the name of the library output = call_tool('otool', ['-l', libfilename]) if not output: @@ -156,7 +154,7 @@ def osx_syms(libfilename: str, outfilename: str): result += [' '.join(x.split()[0:2]) for x in output.split('\n')] write_if_changed('\n'.join(result) + '\n', outfilename) -def openbsd_syms(libfilename: str, outfilename: str): +def openbsd_syms(libfilename: str, outfilename: str) -> None: # Get the name of the library output = call_tool('readelf', ['-d', libfilename]) if not output: @@ -173,7 +171,7 @@ def openbsd_syms(libfilename: str, outfilename: str): result += [' '.join(x.split()[0:2]) for x in output.split('\n') if x and not x.endswith('U ')] write_if_changed('\n'.join(result) + '\n', outfilename) -def cygwin_syms(impfilename: str, outfilename: str): +def cygwin_syms(impfilename: str, outfilename: str) -> None: # Get the name of the library output = call_tool('dlltool', ['-I', impfilename]) if not output: @@ -242,23 +240,23 @@ def _get_implib_exports(impfilename: str) -> T.Tuple[T.List[str], str]: all_stderr += e return ([], all_stderr) -def windows_syms(impfilename: str, outfilename: str): +def windows_syms(impfilename: str, outfilename: str) -> None: # Get the name of the library result, e = _get_implib_dllname(impfilename) if not result: - print_tool_warning('lib, llvm-lib, dlltool', 'do not work or were not found', e) + print_tool_warning(['lib', 'llvm-lib', 'dlltool'], 'do not work or were not found', e) dummy_syms(outfilename) return # Get a list of all symbols exported symbols, e = _get_implib_exports(impfilename) if not symbols: - print_tool_warning('dumpbin, llvm-nm, nm', 'do not work or were not found', e) + print_tool_warning(['dumpbin', 'llvm-nm', 'nm'], 'do not work or were not found', e) dummy_syms(outfilename) return result += symbols write_if_changed('\n'.join(result) + '\n', outfilename) -def gen_symbols(libfilename: str, impfilename: str, outfilename: str, cross_host: str): +def gen_symbols(libfilename: str, impfilename: str, outfilename: str, cross_host: str) -> None: if cross_host is not None: # In case of cross builds just always relink. In theory we could # determine the correct toolset, but we would need to use the correct @@ -295,7 +293,7 @@ def gen_symbols(libfilename: str, impfilename: str, outfilename: str, cross_host pass dummy_syms(outfilename) -def run(args): +def run(args: T.List[str]) -> int: global TOOL_WARNING_FILE options = parser.parse_args(args) if len(options.args) != 4: |
