aboutsummaryrefslogtreecommitdiff
path: root/tools/migration/cc_toolchain_config_comparator.bzl
diff options
context:
space:
mode:
Diffstat (limited to 'tools/migration/cc_toolchain_config_comparator.bzl')
-rw-r--r--tools/migration/cc_toolchain_config_comparator.bzl53
1 files changed, 53 insertions, 0 deletions
diff --git a/tools/migration/cc_toolchain_config_comparator.bzl b/tools/migration/cc_toolchain_config_comparator.bzl
new file mode 100644
index 0000000..66746b3
--- /dev/null
+++ b/tools/migration/cc_toolchain_config_comparator.bzl
@@ -0,0 +1,53 @@
+"""A test rule that compares two C++ toolchain configuration rules in proto format."""
+
+def _impl(ctx):
+ first_toolchain_config_proto = ctx.actions.declare_file(
+ ctx.label.name + "_first_toolchain_config.proto",
+ )
+ ctx.actions.write(
+ first_toolchain_config_proto,
+ ctx.attr.first[CcToolchainConfigInfo].proto,
+ )
+
+ second_toolchain_config_proto = ctx.actions.declare_file(
+ ctx.label.name + "_second_toolchain_config.proto",
+ )
+ ctx.actions.write(
+ second_toolchain_config_proto,
+ ctx.attr.second[CcToolchainConfigInfo].proto,
+ )
+
+ script = ("%s --before='%s' --after='%s'" % (
+ ctx.executable._comparator.short_path,
+ first_toolchain_config_proto.short_path,
+ second_toolchain_config_proto.short_path,
+ ))
+ test_executable = ctx.actions.declare_file(ctx.label.name)
+ ctx.actions.write(test_executable, script, is_executable = True)
+
+ runfiles = ctx.runfiles(files = [first_toolchain_config_proto, second_toolchain_config_proto])
+ runfiles = runfiles.merge(ctx.attr._comparator[DefaultInfo].default_runfiles)
+
+ return DefaultInfo(runfiles = runfiles, executable = test_executable)
+
+cc_toolchain_config_compare_test = rule(
+ implementation = _impl,
+ attrs = {
+ "first": attr.label(
+ mandatory = True,
+ providers = [CcToolchainConfigInfo],
+ doc = "A C++ toolchain config rule",
+ ),
+ "second": attr.label(
+ mandatory = True,
+ providers = [CcToolchainConfigInfo],
+ doc = "A C++ toolchain config rule",
+ ),
+ "_comparator": attr.label(
+ default = ":ctoolchain_comparator",
+ executable = True,
+ cfg = "exec",
+ ),
+ },
+ test = True,
+)