blob: 4545b14e133a73b2424aa8b6bdab1886aabd1659 [file] [log] [blame]
"""Analysis tests for getting the link name of a versioned library."""
load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
load("@bazel_skylib//rules:copy_file.bzl", "copy_file")
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_import")
load("//rust:defs.bzl", "rust_shared_library")
LIBNAMES = ["sterling", "cheryl", "lana", "pam", "malory", "cyril"]
def _is_in_argv(argv, version = None):
return any(["-ldylib={}{}".format(name, version or "") in argv for name in LIBNAMES])
def _no_version_test_impl(ctx):
env = analysistest.begin(ctx)
tut = analysistest.target_under_test(env)
argv = tut.actions[0].argv
asserts.true(env, _is_in_argv(argv))
return analysistest.end(env)
def _prefix_version_test_impl(ctx):
env = analysistest.begin(ctx)
tut = analysistest.target_under_test(env)
argv = tut.actions[0].argv
asserts.true(env, _is_in_argv(argv, "3.8"))
return analysistest.end(env)
def _suffix_version_test_impl(ctx):
env = analysistest.begin(ctx)
tut = analysistest.target_under_test(env)
argv = tut.actions[0].argv
asserts.true(env, _is_in_argv(argv))
return analysistest.end(env)
no_version_test = analysistest.make(_no_version_test_impl)
prefix_version_test = analysistest.make(_prefix_version_test_impl)
suffix_version_test = analysistest.make(_suffix_version_test_impl)
def _test_linux():
rust_shared_library(
name = "linux_no_version",
srcs = ["a.rs"],
edition = "2018",
deps = [":import_libsterling.so"],
target_compatible_with = ["@platforms//os:linux"],
)
cc_import(
name = "import_libsterling.so",
shared_library = "libsterling.so",
)
cc_binary(
name = "libsterling.so",
srcs = ["b.c"],
linkshared = True,
)
no_version_test(
name = "linux_no_version_test",
target_under_test = ":linux_no_version",
target_compatible_with = ["@platforms//os:linux"],
)
rust_shared_library(
name = "linux_suffix_version",
srcs = ["a.rs"],
edition = "2018",
deps = [":import_libcheryl.so.3.8", ":import_libcheryl.so"],
target_compatible_with = ["@platforms//os:linux"],
)
cc_import(
name = "import_libcheryl.so.3.8",
shared_library = "libcheryl.so.3.8",
)
cc_binary(
name = "libcheryl.so.3.8",
srcs = ["b.c"],
linkshared = True,
)
cc_import(
name = "import_libcheryl.so",
shared_library = "libcheryl.so",
)
copy_file(
name = "copy_unversioned",
src = ":libcheryl.so.3.8",
out = "libcheryl.so",
)
suffix_version_test(
name = "linux_suffix_version_test",
target_under_test = ":linux_suffix_version",
target_compatible_with = ["@platforms//os:linux"],
)
return [
":linux_no_version_test",
":linux_suffix_version_test",
]
def _test_macos():
rust_shared_library(
name = "no_version",
srcs = ["a.rs"],
edition = "2018",
deps = [":import_liblana.dylib"],
target_compatible_with = ["@platforms//os:macos"],
)
cc_import(
name = "import_liblana.dylib",
shared_library = "liblana.dylib",
)
cc_binary(
name = "liblana.dylib",
srcs = ["b.c"],
linkshared = True,
)
no_version_test(
name = "macos_no_version_test",
target_under_test = ":no_version",
target_compatible_with = ["@platforms//os:macos"],
)
rust_shared_library(
name = "prefix_version",
srcs = ["a.rs"],
edition = "2018",
deps = [":import_libpam3.8.dylib"],
target_compatible_with = ["@platforms//os:macos"],
)
cc_import(
name = "import_libpam3.8.dylib",
shared_library = "libpam3.8.dylib",
)
cc_binary(
name = "libpam3.8.dylib",
srcs = ["b.c"],
linkshared = True,
)
prefix_version_test(
name = "macos_prefix_version_test",
target_under_test = ":prefix_version",
target_compatible_with = ["@platforms//os:macos"],
)
return [
":macos_no_version_test",
":macos_prefix_version_test",
]
def _test_windows():
rust_shared_library(
name = "windows_no_version",
srcs = ["a.rs"],
edition = "2018",
deps = [":import_malory.dll"],
target_compatible_with = ["@platforms//os:windows"],
)
cc_import(
name = "import_malory.dll",
interface_library = ":malory.lib",
shared_library = "malory.dll",
)
cc_binary(
name = "malory.dll",
srcs = ["b.c"],
linkshared = True,
)
native.filegroup(
name = "malory_interface_lib",
srcs = [":malory.dll"],
output_group = "interface_library",
)
copy_file(
name = "copy_malory_interface_lib",
src = ":malory_interface_lib",
out = "malory.lib",
)
no_version_test(
name = "windows_no_version_test",
target_under_test = ":windows_no_version",
target_compatible_with = ["@platforms//os:windows"],
)
rust_shared_library(
name = "windows_prefix_version",
srcs = ["a.rs"],
edition = "2018",
deps = [":import_cyril3.8.dll"],
target_compatible_with = ["@platforms//os:windows"],
)
cc_import(
name = "import_cyril3.8.dll",
interface_library = ":cyril3.8.lib",
shared_library = "cyril3.8.dll",
)
cc_binary(
name = "cyril3.8.dll",
srcs = ["b.c"],
linkshared = True,
)
native.filegroup(
name = "cyril_interface_lib",
srcs = [":cyril3.8.dll"],
output_group = "interface_library",
)
copy_file(
name = "copy_cyril_interface_lib",
src = ":cyril_interface_lib",
out = "cyril3.8.lib",
)
prefix_version_test(
name = "windows_prefix_version_test",
target_under_test = ":windows_prefix_version",
target_compatible_with = ["@platforms//os:windows"],
)
return [
":windows_no_version_test",
":windows_prefix_version_test",
]
def versioned_libs_analysis_test_suite(name):
"""Analysis tests for getting the link name of a versioned library.
Args:
name: the test suite name
"""
tests = []
tests += _test_linux()
tests += _test_macos()
tests += _test_windows()
native.test_suite(
name = name,
tests = tests,
)