blob: 94b9fed9a15dfa41404439df1c58fbcb917ab029 [file] [edit]
set -euo pipefail
source "$(rlocation rules_cc/tests/test_utils.sh)"
source "$(rlocation rules_cc/tests/unittest.bash)"
function test_cc_static_library_duplicate_symbol() {
mkdir -p pkg
cat > pkg/BUILD<<'EOF'
load("@rules_cc//cc:cc_library.bzl", "cc_library")
load("@rules_cc//cc:cc_static_library.bzl", "cc_static_library")
cc_static_library(
name = "static",
deps = [
":direct1",
":direct2",
],
)
cc_library(
name = "direct1",
srcs = ["direct1.cc"],
)
cc_library(
name = "direct2",
srcs = ["direct2.cc"],
deps = [":indirect"],
)
cc_library(
name = "indirect",
srcs = ["indirect.cc"],
)
EOF
cat > pkg/direct1.cc<<'EOF'
int foo() { return 42; }
EOF
cat > pkg/direct2.cc<<'EOF'
int bar() { return 21; }
EOF
cat > pkg/indirect.cc<<'EOF'
int foo() { return 21; }
EOF
bazel build //pkg:static \
&> $TEST_log && fail "Expected build to fail"
if is_windows; then
expect_log "direct1.obj"
expect_log "indirect.obj"
expect_log " foo("
elif is_darwin; then
expect_log "Duplicate symbols found in .*/pkg/libstatic.a:"
expect_log "direct1.o: T foo()"
expect_log "indirect.o: T foo()"
else
expect_log "Duplicate symbols found in .*/pkg/libstatic.a:"
expect_log "direct1.pic.o: T foo()"
expect_log "indirect.pic.o: T foo()"
fi
bazel build //pkg:static \
--features=-symbol_check \
&> $TEST_log || fail "Expected build to succeed"
}
function test_cc_static_library_duplicate_symbol_mixed_type() {
mkdir -p pkg
cat > pkg/BUILD<<'EOF'
load("@rules_cc//cc:cc_library.bzl", "cc_library")
load("@rules_cc//cc:cc_static_library.bzl", "cc_static_library")
cc_static_library(
name = "static",
deps = [
":direct1",
":direct2",
],
)
cc_library(
name = "direct1",
srcs = ["direct1.cc"],
)
cc_library(
name = "direct2",
srcs = ["direct2.cc"],
deps = [":indirect"],
)
cc_library(
name = "indirect",
srcs = ["indirect.cc"],
)
EOF
cat > pkg/direct1.cc<<'EOF'
int foo;
EOF
cat > pkg/direct2.cc<<'EOF'
int bar = 21;
EOF
cat > pkg/indirect.cc<<'EOF'
int foo = 21;
EOF
bazel build //pkg:static \
&> $TEST_log && fail "Expected build to fail"
if is_windows; then
expect_log "direct1.obj"
expect_log "indirect.obj"
expect_log " foo"
elif is_darwin; then
expect_log "Duplicate symbols found in .*/pkg/libstatic.a:"
expect_log "direct1.o: S _foo"
expect_log "indirect.o: D _foo"
else
expect_log "Duplicate symbols found in .*/pkg/libstatic.a:"
expect_log "direct1.pic.o: B foo"
expect_log "indirect.pic.o: D foo"
fi
bazel build //pkg:static \
--features=-symbol_check \
&> $TEST_log || fail "Expected build to succeed"
}
run_suite "Failure tests for cc_static_library"