Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CMake: Fix abseil_dll target name when using find_package(absl) #12978

Closed
wants to merge 1 commit into from

Conversation

traversaro
Copy link
Contributor

This additional if is necessary as of abseil 20230125.3 when abseil is consumed via add_subdirectory,
the abseil_dll target is named abseil_dll, while if abseil is consumed via find_package, the target is called absl::abseil_dll .

Once abseil/abseil-cpp#1466 is merged and released in the minimum version of abseil required by protobuf, it is possible to always link absl::abseil_dll and absl::abseil_test_dll and remove the if.

You may wonder how linking worked at all before when protobuf_ABSL_PROVIDER STREQUAL "package", as abseil_dll was not an imported target defined by find_package(absl). The reason behind this is that if a name that is not an imported target is passed to target_link_libraries, it is just regarded as a C++ library name. So, in the end the abseil_dll library was correctly linked, simply all the transitive usage requirements defined by the absl::abseil_dll target were not propagated, that could lead to compilation errors if abseil was compiled with the ABSL_PROPAGATE_CXX_STD CMake option enabled.

@mkruskal-google mkruskal-google added the 🅰️ safe for tests Mark a commit as safe to run presubmits over label Jun 5, 2023
@github-actions github-actions bot removed the 🅰️ safe for tests Mark a commit as safe to run presubmits over label Jun 5, 2023
@mkruskal-google mkruskal-google added the 🅰️ safe for tests Mark a commit as safe to run presubmits over label Jun 5, 2023
@github-actions github-actions bot removed the 🅰️ safe for tests Mark a commit as safe to run presubmits over label Jun 5, 2023
@copybara-service copybara-service bot closed this in 87b3bc7 Jun 5, 2023
copybara-service bot pushed a commit that referenced this pull request Jun 5, 2023
This additional if  is necessary as of abseil 20230125.3 when abseil is consumed via add_subdirectory,
the abseil_dll target  is named abseil_dll, while if abseil is consumed via find_package, the target is called `absl::abseil_dll` .

Once abseil/abseil-cpp#1466 is merged and released in the minimum version of  abseil required by protobuf, it is possible to always link `absl::abseil_dll` and `absl::abseil_test_dll` and remove the if.

You may wonder how linking worked at all before when `protobuf_ABSL_PROVIDER STREQUAL "package"`, as `abseil_dll` was not an imported target defined by `find_package(absl)`. The reason behind this is that if a name that is not an imported target is passed to `target_link_libraries`, it is just regarded as a C++ library name. So, in the end the `abseil_dll` library was correctly linked, simply all the transitive usage requirements defined by the `absl::abseil_dll` target were not propagated, that could lead to compilation errors if abseil was compiled with the `ABSL_PROPAGATE_CXX_STD` CMake option enabled.

Closes #12978

COPYBARA_INTEGRATE_REVIEW=#12978 from traversaro:patch-1 39dd074
FUTURE_COPYBARA_INTEGRATE_REVIEW=#12978 from traversaro:patch-1 39dd074
PiperOrigin-RevId: 537953985
h-vetinari pushed a commit to h-vetinari/protobuf that referenced this pull request Jun 5, 2023
…ocolbuffers#12978)

This additional if  is necessary as of abseil 20230125.3 when abseil is consumed via add_subdirectory,
the abseil_dll target  is named abseil_dll, while if abseil is consumed via find_package, the target is called `absl::abseil_dll` .

Once abseil/abseil-cpp#1466 is merged and released in the minimum version of  abseil required by protobuf, it is possible to always link `absl::abseil_dll` and `absl::abseil_test_dll` and remove the if.

You may wonder how linking worked at all before when `protobuf_ABSL_PROVIDER STREQUAL "package"`, as `abseil_dll` was not an imported target defined by `find_package(absl)`. The reason behind this is that if a name that is not an imported target is passed to `target_link_libraries`, it is just regarded as a C++ library name. So, in the end the `abseil_dll` library was correctly linked, simply all the transitive usage requirements defined by the `absl::abseil_dll` target were not propagated, that could lead to compilation errors if abseil was compiled with the `ABSL_PROPAGATE_CXX_STD` CMake option enabled.

Closes protocolbuffers#12978

COPYBARA_INTEGRATE_REVIEW=protocolbuffers#12978 from traversaro:patch-1 39dd074
PiperOrigin-RevId: 537990391
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants