Index: third_party/class-dump/class-dump.py |
diff --git a/third_party/class-dump/class-dump.py b/third_party/class-dump/class-dump.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..42c13978bf8df07af693c40e1bbf91e717fa7305 |
--- /dev/null |
+++ b/third_party/class-dump/class-dump.py |
@@ -0,0 +1,55 @@ |
+# 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:]) |