Skip to content

[bug] BazelDeps generates BUILD file that misses required .so symlinks #19190

@peakschris

Description

@peakschris

Describe the bug

Conan is generating bazel build files that do not reference the required so symlinks. At bazel test time, this results in the error:

INFO: From Testing //src/shared/test:shared_test:
==================== Test output for //src/shared/test:shared_test:
/bazel-cache/cppproject/9763da1683031e58994061fbf702ccff/sandbox/processwrapper-sandbox/1/execroot/_main/bazel-out/k8-opt/bin/src/shared/test/shared_test.runfiles/_main/src/shared/test/shared_test: error while loading shared libraries: libgmock_main.so.1.15.0: cannot open shared object file: No such file or directory
================================================================================

Environment

  • RockyLinux 9.6
  • gcc toolset 14
  • Conan 2.21
  • gtest 1.15.0

Conanprofile:

[settings]
arch=x86_64
build_type=Release
compiler=gcc
compiler.cppstd=20
compiler.libcxx=libstdc++
compiler.version=14
doxygen/*:compiler.cppstd=17
os=Linux
[options]
*:shared=True

Build file generated by conan 2.21 resulting in error:

# Components precompiled libs
cc_import(
    name = "gtest_precompiled",
    shared_library = "lib/libgtest.so",
)
cc_import(
    name = "gtest_main_precompiled",
    shared_library = "lib/libgtest_main.so",
)
cc_import(
    name = "gmock_precompiled",
    shared_library = "lib/libgmock.so",
)
cc_import(
    name = "gmock_main_precompiled",
    shared_library = "lib/libgmock_main.so",
)
# Root package precompiled libs
# Components libraries declaration
cc_library(
    name = "gtest-libgtest",
    hdrs = glob([
        "include/**",
    ]),
    includes = [
        "include",
    ],
    defines = [
        "GTEST_LINKED_AS_SHARED_LIBRARY=1",
    ],
    linkopts = [
        "-lm",
        "-lpthread",
    ],
    visibility = ["//visibility:public"],
    deps = [
        # do not sort
        ":gtest_precompiled",
    ],
)
cc_library(
    name = "gtest-gtest_main",
    hdrs = glob([
        "include/**",
    ]),
    includes = [
        "include",
    ],
    visibility = ["//visibility:public"],
    deps = [
        # do not sort
        ":gtest_main_precompiled",
        ":gtest-libgtest",
    ],
)
cc_library(
    name = "gtest-gmock",
    hdrs = glob([
        "include/**",
    ]),
    includes = [
        "include",
    ],
    visibility = ["//visibility:public"],
    deps = [
        # do not sort
        ":gmock_precompiled",
        ":gtest-libgtest",
    ],
)
cc_library(
    name = "gtest-gmock_main",
    hdrs = glob([
        "include/**",
    ]),
    includes = [
        "include",
    ],
    visibility = ["//visibility:public"],
    deps = [
        # do not sort
        ":gmock_main_precompiled",
        ":gtest-gmock",
    ],
)
# Package library declaration
cc_library(
    name = "gtest",
    hdrs = glob([
        "include/**",
    ]),
    includes = [
        "include",
    ],
    visibility = ["//visibility:public"],
    deps = [
        # do not sort
        ":gtest-libgtest",
        ":gtest-gtest_main",
        ":gtest-gmock",
        ":gtest-gmock_main",
    ],
)
# Filegroup library declaration
filegroup(
    name = "gtest_binaries",
    srcs = glob([
        "bin/**",
    ],
    allow_empty = True
    ),
    visibility = ["//visibility:public"],
)

Patched BUILD file that fixes the issue:

# Components precompiled libs
cc_import(
    name = "gtest_precompiled",
    shared_library = "lib/libgtest.so",
)
cc_import(
    name = "gtest_main_precompiled",
    shared_library = "lib/libgtest_main.so",
)
cc_import(
    name = "gmock_precompiled",
    shared_library = "lib/libgmock.so",
)
cc_import(
    name = "gmock_main_precompiled",
    shared_library = "lib/libgmock_main.so",
)
# Root package precompiled libs
# Components libraries declaration
cc_library(
    name = "gtest-libgtest",
    hdrs = glob([
        "include/**",
    ]),
    includes = [
        "include",
    ],
    defines = [
        "GTEST_LINKED_AS_SHARED_LIBRARY=1",
    ],
    linkopts = [
        "-lm",
        "-lpthread",
    ],
    visibility = ["//visibility:public"],
    deps = [
        # do not sort
        ":gtest_precompiled",
        ":gtest_symlink",
    ],
)
cc_library(
    name = "gtest-gtest_main",
    hdrs = glob([
        "include/**",
    ]),
    includes = [
        "include",
    ],
    visibility = ["//visibility:public"],
    deps = [
        # do not sort
        ":gtest_main_precompiled",
        ":gtest_main_symlink",
        ":gtest-libgtest",
    ],
)
cc_library(
    name = "gtest-gmock",
    hdrs = glob([
        "include/**",
    ]),
    includes = [
        "include",
    ],
    visibility = ["//visibility:public"],
    deps = [
        # do not sort
        ":gmock_precompiled",
        ":gmock_symlink",
        ":gtest-libgtest",
    ],
)
cc_library(
    name = "gtest-gmock_main",
    hdrs = glob([
        "include/**",
    ]),
    includes = [
        "include",
    ],
    visibility = ["//visibility:public"],
    deps = [
        # do not sort
        ":gmock_main_precompiled",
        ":gmock_main_symlink",
        ":gtest-gmock",
    ],
)
# Package library declaration
cc_library(
    name = "gtest",
    hdrs = glob([
        "include/**",
    ]),
    includes = [
        "include",
    ],
    visibility = ["//visibility:public"],
    deps = [
        # do not sort
        ":gtest-libgtest",
        ":gtest-gtest_main",
        ":gtest-gmock",
        ":gtest-gmock_main",
    ],
)
# Filegroup library declaration
filegroup(
    name = "gtest_binaries",
    srcs = glob([
        "bin/**",
    ],
    allow_empty = True
    ),
    visibility = ["//visibility:public"],
)
cc_import(
    name = "gtest_symlink",
    shared_library = "lib/libgtest.so.1.15.0",
)
cc_import(
    name = "gtest_main_symlink",
    shared_library = "lib/libgtest_main.so.1.15.0",
)
cc_import(
    name = "gmock_symlink",
    shared_library = "lib/libgmock.so.1.15.0",
)
cc_import(
    name = "gmock_main_symlink",
    shared_library = "lib/libgmock_main.so.1.15.0",
)

Related issues:

How to reproduce it

No response

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions