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