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