| #!/usr/bin/env python |
| #===----------------------------------------------------------------------===## |
| # |
| # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| # See https://llvm.org/LICENSE.txt for license information. |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| # |
| #===----------------------------------------------------------------------===## |
| |
| import argparse |
| import io |
| import libcxx.sym_check.extract |
| import libcxx.sym_check.util |
| import pprint |
| import sys |
| |
| def OutputFile(file): |
| if isinstance(file, io.IOBase): |
| return file |
| assert isinstance(file, str), "Got object {} which is not a str".format(file) |
| return open(file, 'w', newline='\n') |
| |
| def main(argv): |
| parser = argparse.ArgumentParser( |
| description='Extract a list of symbols from a shared library.') |
| parser.add_argument('library', metavar='LIB', type=str, |
| help='The library to extract symbols from.') |
| parser.add_argument('-o', '--output', dest='output', type=OutputFile, default=sys.stdout, |
| help='The output file to write the symbols to. It is overwritten if it already exists. ' |
| 'If no file is specified, the results are written to standard output.') |
| args = parser.parse_args(argv) |
| |
| symbols = libcxx.sym_check.extract.extract_symbols(args.library) |
| symbols, _ = libcxx.sym_check.util.filter_stdlib_symbols(symbols) |
| |
| lines = [pprint.pformat(sym, width=99999) for sym in symbols] |
| args.output.writelines('\n'.join(sorted(lines))) |
| |
| if __name__ == '__main__': |
| main(sys.argv[1:]) |