mirror of
https://github.com/reactos/CMake.git
synced 2024-11-28 05:50:42 +00:00
8e756d2b9b
Since commit 183b9509
(Follow all dependencies of shared library private
dependencies, 2011-12-14) we honor LINK_INTERFACE_LIBRARIES when
following dependent shared libraries. The link interface properties may
form a cycle if set incorrectly by a project. Furthermore, the property
LINK_DEPENDENT_LIBRARIES may form a cycle if set incorrectly by hand
(though CMake should never generate one). In either case, do not follow
the cycle forever when following the dependent shared library closure.
We only need to add dependency edges to the constraint graph once.
Add "LinkInterfaceLoop" test to cover this case.
28 lines
861 B
CMake
28 lines
861 B
CMake
cmake_minimum_required (VERSION 2.8)
|
|
project(LinkInterfaceLoop C)
|
|
|
|
# Add a shared library that incorrectly names itself as a
|
|
# dependency, thus forming a cycle.
|
|
add_library(A SHARED IMPORTED)
|
|
set_target_properties(A PROPERTIES
|
|
IMPORTED_LINK_DEPENDENT_LIBRARIES A
|
|
IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/dirA/A"
|
|
)
|
|
|
|
# Add a shared library that incorrectly names itself in
|
|
# its link interface, thus forming a cycle.
|
|
add_library(B SHARED IMPORTED)
|
|
set_target_properties(B PROPERTIES
|
|
IMPORTED_LINK_INTERFACE_LIBRARIES B
|
|
IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/dirB/B"
|
|
)
|
|
|
|
# Add a shared library with an empty link interface
|
|
# that depends on two shared libraries.
|
|
add_library(C SHARED lib.c)
|
|
set_property(TARGET C PROPERTY LINK_INTERFACE_LIBRARIES "")
|
|
target_link_libraries(C B A)
|
|
|
|
add_executable(main main.c)
|
|
target_link_libraries(main C)
|