1#!/usr/bin/env python 2#===----------------------------------------------------------------------===## 3# 4# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5# See https://llvm.org/LICENSE.txt for license information. 6# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7# 8#===----------------------------------------------------------------------===## 9 10import argparse 11import io 12import libcxx.sym_check.extract 13import libcxx.sym_check.util 14import pprint 15import sys 16 17def OutputFile(file): 18 if isinstance(file, io.IOBase): 19 return file 20 assert isinstance(file, str), "Got object {} which is not a str".format(file) 21 return open(file, 'w') 22 23def main(argv): 24 parser = argparse.ArgumentParser( 25 description='Extract a list of symbols from a shared library.') 26 parser.add_argument('library', metavar='LIB', type=str, 27 help='The library to extract symbols from.') 28 parser.add_argument('-o', '--output', dest='output', type=OutputFile, default=sys.stdout, 29 help='The output file to write the symbols to. It is overwritten if it already exists. ' 30 'If no file is specified, the results are written to standard output.') 31 args = parser.parse_args(argv) 32 33 symbols = libcxx.sym_check.extract.extract_symbols(args.library) 34 symbols, _ = libcxx.sym_check.util.filter_stdlib_symbols(symbols) 35 36 lines = [pprint.pformat(sym, width=99999) for sym in symbols] 37 args.output.writelines('\n'.join(sorted(lines))) 38 39if __name__ == '__main__': 40 main(sys.argv[1:]) 41