|  | #!/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:]) |