# Copyright 2016 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # Wrapper around class-dump to allow gn build to run the tool (as action # target can only run python scripts). Also filters the output to remove # all cxx_destruct lines that are not understood from class-dump output. import argparse import errno import os import subprocess import sys def Main(args): parser = argparse.ArgumentParser('wrapper around class-dump') parser.add_argument( '-o', '--output', required=True, help='name of the output file') parser.add_argument( '-t', '--class-dump-path', required=True, help='path to class-dump executable') parser.add_argument( 'args', nargs='*', help='arguments to pass to class-dump') args = parser.parse_args(args) try: os.makedirs(os.path.dirname(args.output)) except OSError, e: if e.errno != errno.EEXIST: raise process = subprocess.Popen( [args.class_dump_path] + args.args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = process.communicate() if process.returncode != 0: sys.stderr.write(stderr) sys.exit(process.returncode) with open(args.output, 'wb') as output: output.write("// Treat class-dump output as a system header.\n") output.write("#pragma clang system_header\n") for line in stdout.splitlines(): if 'cxx_destruct' in line: continue output.write(line) output.write('\n') if __name__ == '__main__': Main(sys.argv[1:])