Index: third_party/class-dump/class-dump.gni |
diff --git a/third_party/class-dump/class-dump.gni b/third_party/class-dump/class-dump.gni |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a87d84d947543ce91354aca61128c1eaca6ea7ff |
--- /dev/null |
+++ b/third_party/class-dump/class-dump.gni |
@@ -0,0 +1,96 @@ |
+# 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. |
+ |
+# Given a framework, generates a header file declaring the classes from that |
+# framework using class-dump tool. |
+# |
+# Arguments: |
+# |
+# framework_name |
+# string, short name of the framework. |
+# |
+# framework_path |
+# string, location of the framework, usually a sub-directory of |
+# Xcode application bundle. |
+# |
+# framework_version |
+# (optional) string, version of the framework to dump class for, |
+# defaults to "Current" if omitted. |
+# |
+# class_dump_filter |
+# regexp, only display classes matching this regular expression. |
+# |
+# topological_sort |
+# (optional) boolean, sort classes, categories, and protocols by |
+# inheritance, defaults to false if omitted. |
+# |
+# All common target arugments ("visibility", "deps", ...) are forwarded by |
+# the template. |
+template("class_dump") { |
+ assert(defined(invoker.framework_name), |
+ "framework_name must be defined for $target_name") |
+ assert(defined(invoker.framework_path), |
+ "framework_path must be defined for $target_name") |
+ assert(defined(invoker.class_dump_filter), |
+ "class_dump_filter must be defined for $target_name") |
+ |
+ framework_version = "Current" |
+ if (defined(invoker.framework_version)) { |
+ framework_version = invoker.framework_version |
+ } |
+ |
+ sort_args = [] |
+ if (defined(invoker.topological_sort) && invoker.topological_sort) { |
+ sort_args = [ "-I" ] |
+ } |
+ |
+ class_dump = "//third_party/class-dump(${host_toolchain})" |
+ class_dump_bin = get_label_info(class_dump, "root_out_dir") + "/class-dump" |
+ framework = "${invoker.framework_path}/${invoker.framework_name}.framework" |
+ |
+ _config_name = target_name + "_config" |
+ |
+ config(_config_name) { |
+ visibility = [ ":$target_name" ] |
+ include_dirs = [ "$target_gen_dir" ] |
+ } |
+ |
+ action(target_name) { |
+ forward_variables_from(invoker, |
+ "*", |
+ [ |
+ "args", |
+ "class_dump_filter", |
+ "framework_name", |
+ "framework_path", |
+ "framework_version", |
+ "script", |
+ "sources", |
+ ]) |
+ if (!defined(deps)) { |
+ deps = [] |
+ } |
+ deps += [ class_dump ] |
+ public_configs = [ ":$_config_name" ] |
+ |
+ script = "//third_party/class-dump/class-dump.py" |
+ inputs = [ |
+ class_dump_bin, |
+ ] |
+ sources = [ |
+ "${framework}/Versions/${framework_version}/${invoker.framework_name}", |
+ ] |
+ outputs = [ |
+ "$target_gen_dir/${invoker.framework_name}.h", |
+ ] |
+ args = [ |
+ "-t=" + rebase_path(class_dump_bin, root_build_dir), |
+ "-o=" + rebase_path(outputs[0], root_build_dir), |
+ "--", |
+ "-C${invoker.class_dump_filter}", |
+ "${framework}", |
+ ] |
+ args += sort_args |
+ } |
+} |