"""Analysis tests for exporting the Windows interface library.""" load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts") load("@rules_cc//cc:defs.bzl", "cc_binary") load("//rust:defs.bzl", "rust_binary", "rust_shared_library") def _win_interface_library_test_impl(ctx): env = analysistest.begin(ctx) target = analysistest.target_under_test(env) files = target[DefaultInfo].files.to_list() cc_library = target[CcInfo].linking_context.linker_inputs.to_list()[0].libraries[0] # Make sure that we have both the `.dll` and the `.dll.lib` file in the default info's files asserts.equals(env, len(files), 2) asserts.true(env, files[0].basename.endswith(".dll")) asserts.true(env, files[1].basename.endswith(".dll.lib")) # Make sure that the cc_library has both a dynamic and interface library asserts.true(env, cc_library.dynamic_library != None) asserts.true(env, cc_library.interface_library != None) return analysistest.end(env) win_interface_library_test = analysistest.make(_win_interface_library_test_impl) def win_interface_library_analysis_test_suite(name): """Analysis tests for exporting the Windows interface library. Args: name: the test suite name """ rust_shared_library( name = "mylib", srcs = ["lib.rs"], edition = "2018", target_compatible_with = ["@platforms//os:windows"], ) cc_binary( name = "mybin", srcs = ["bin.cc"], deps = [":mylib"], target_compatible_with = ["@platforms//os:windows"], ) rust_binary( name = "myrustbin", srcs = ["main.rs"], edition = "2018", target_compatible_with = ["@platforms//os:windows"], ) win_interface_library_test( name = "win_interface_library_test", target_under_test = ":mylib", target_compatible_with = ["@platforms//os:windows"], ) native.test_suite( name = name, tests = [":win_interface_library_test"], )