Mercurial > hg > CbC > CbC_llvm
view libcxx/utils/sym_diff.py @ 266:00f31e85ec16 default tip
Added tag current for changeset 31d058e83c98
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 14 Oct 2023 10:13:55 +0900 |
parents | 1f2b6ac9f198 |
children |
line wrap: on
line source
#!/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 # # ===----------------------------------------------------------------------===## """ sym_diff - Compare two symbol lists and output the differences. """ from argparse import ArgumentParser import sys from libcxx.sym_check import diff, util def main(): parser = ArgumentParser( description="Extract a list of symbols from a shared library." ) parser.add_argument( "--names-only", dest="names_only", help="Only print symbol names", action="store_true", default=False, ) parser.add_argument( "--removed-only", dest="removed_only", help="Only print removed symbols", action="store_true", default=False, ) parser.add_argument( "--only-stdlib-symbols", dest="only_stdlib", help="Filter all symbols not related to the stdlib", action="store_true", default=False, ) parser.add_argument( "--strict", dest="strict", help="Exit with a non-zero status if any symbols " "differ", action="store_true", default=False, ) parser.add_argument( "-o", "--output", dest="output", help="The output file. stdout is used if not given", type=str, action="store", default=None, ) parser.add_argument( "--demangle", dest="demangle", action="store_true", default=False ) parser.add_argument( "old_syms", metavar="old-syms", type=str, help="The file containing the old symbol list or a library", ) parser.add_argument( "new_syms", metavar="new-syms", type=str, help="The file containing the new symbol list or a library", ) args = parser.parse_args() old_syms_list = util.extract_or_load(args.old_syms) new_syms_list = util.extract_or_load(args.new_syms) if args.only_stdlib: old_syms_list, _ = util.filter_stdlib_symbols(old_syms_list) new_syms_list, _ = util.filter_stdlib_symbols(new_syms_list) added, removed, changed = diff.diff(old_syms_list, new_syms_list) if args.removed_only: added = {} report, is_break, is_different = diff.report_diff( added, removed, changed, names_only=args.names_only, demangle=args.demangle ) if args.output is None: print(report) else: with open(args.output, "w") as f: f.write(report + "\n") exit_code = 1 if is_break or (args.strict and is_different) else 0 sys.exit(exit_code) if __name__ == "__main__": main()