summaryrefslogtreecommitdiff
path: root/CMake
diff options
context:
space:
mode:
authorGravatar Abseil Team <absl-team@google.com>2022-10-10 11:49:54 -0700
committerGravatar Copybara-Service <copybara-worker@google.com>2022-10-10 11:50:46 -0700
commit2ed6963f2b67a68d94303cafb571d3d039a49f9a (patch)
tree8b0fac270ec3c44dfd895d9d2c0c4fcc5f558157 /CMake
parent76466b85fb9c86be56bfe773667ee6ad4fc3b87f (diff)
CMake: Remove check_target calls which can be problematic in case of dependency cycle
Also renames `_target_compile_features_if_available` CMake function to `_absl_target_compile_features_if_available` since CMake's function namespace is global. The dependency cycle can occur if absl is configured with test helpers enabled, and googletest is configured to use absl. In the case that both projects are being built from source via FetchContent with OVERRIDE_FIND_PACKAGE, depending on the order in which the two projects are added to the build, the check_target calls may fail even though the build would have otherwise succeeded. The existing `check_target` calls seem to have been originally added to detect missing gtest targets when the `GTest::` prefix was not yet in use. For target names without "::", CMake does not warn if they are undefined, and just assumes they refer to system library names. However, CMake does fail during build generation if a target name with "::" is missing; thus the check_taget calls are redundant. PiperOrigin-RevId: 480140797 Change-Id: Ic51631e4a36dd8b6f569ad6424bea15a4af0b875
Diffstat (limited to 'CMake')
-rw-r--r--CMake/AbseilHelpers.cmake16
1 files changed, 4 insertions, 12 deletions
diff --git a/CMake/AbseilHelpers.cmake b/CMake/AbseilHelpers.cmake
index e1196fd7..6d402872 100644
--- a/CMake/AbseilHelpers.cmake
+++ b/CMake/AbseilHelpers.cmake
@@ -32,7 +32,7 @@ else()
set(ABSL_INTERNAL_INCLUDE_WARNING_GUARD "")
endif()
-function(_target_compile_features_if_available TARGET TYPE FEATURE)
+function(_absl_target_compile_features_if_available TARGET TYPE FEATURE)
if(FEATURE IN_LIST CMAKE_CXX_COMPILE_FEATURES)
target_compile_features(${TARGET} ${TYPE} ${FEATURE})
else()
@@ -300,7 +300,7 @@ Cflags: -I\${includedir}${PC_CFLAGS}\n")
# Abseil libraries require C++14 as the current minimum standard.
# Top-level application CMake projects should ensure a consistent C++
# standard for all compiled sources by setting CMAKE_CXX_STANDARD.
- _target_compile_features_if_available(${_NAME} PUBLIC ${ABSL_INTERNAL_CXX_STD_FEATURE})
+ _absl_target_compile_features_if_available(${_NAME} PUBLIC ${ABSL_INTERNAL_CXX_STD_FEATURE})
else()
# Note: This is legacy (before CMake 3.8) behavior. Setting the
# target-level CXX_STANDARD property to ABSL_CXX_STANDARD (which is
@@ -348,7 +348,7 @@ Cflags: -I\${includedir}${PC_CFLAGS}\n")
# Abseil libraries require C++14 as the current minimum standard.
# Top-level application CMake projects should ensure a consistent C++
# standard for all compiled sources by setting CMAKE_CXX_STANDARD.
- _target_compile_features_if_available(${_NAME} INTERFACE ${ABSL_INTERNAL_CXX_STD_FEATURE})
+ _absl_target_compile_features_if_available(${_NAME} INTERFACE ${ABSL_INTERNAL_CXX_STD_FEATURE})
# (INTERFACE libraries can't have the CXX_STANDARD property set, so there
# is no legacy behavior else case).
@@ -460,7 +460,7 @@ function(absl_cc_test)
# Abseil libraries require C++14 as the current minimum standard.
# Top-level application CMake projects should ensure a consistent C++
# standard for all compiled sources by setting CMAKE_CXX_STANDARD.
- _target_compile_features_if_available(${_NAME} PUBLIC ${ABSL_INTERNAL_CXX_STD_FEATURE})
+ _absl_target_compile_features_if_available(${_NAME} PUBLIC ${ABSL_INTERNAL_CXX_STD_FEATURE})
else()
# Note: This is legacy (before CMake 3.8) behavior. Setting the
# target-level CXX_STANDARD property to ABSL_CXX_STANDARD (which is
@@ -476,11 +476,3 @@ function(absl_cc_test)
add_test(NAME ${_NAME} COMMAND ${_NAME})
endfunction()
-
-
-function(check_target my_target)
- if(NOT TARGET ${my_target})
- message(FATAL_ERROR " ABSL: compiling absl requires a ${my_target} CMake target in your project,
- see CMake/README.md for more details")
- endif(NOT TARGET ${my_target})
-endfunction()