ENH: Test fake circular dependency case

A recent change fixed a case in which CMake incorrectly diagnosed a
circular dependency involving a non-linkable executable target.  This
adds a test for that case.
This commit is contained in:
Brad King 2008-08-07 10:13:15 -04:00
parent b8fc8b324d
commit c76f3ae5b5
4 changed files with 27 additions and 0 deletions

View File

@ -52,3 +52,4 @@ ADD_SUBDIRECTORY(Exec4)
ADD_SUBDIRECTORY(Case1) ADD_SUBDIRECTORY(Case1)
ADD_SUBDIRECTORY(Case2) ADD_SUBDIRECTORY(Case2)
ADD_SUBDIRECTORY(Case3) ADD_SUBDIRECTORY(Case3)
ADD_SUBDIRECTORY(Case4)

View File

@ -0,0 +1,23 @@
project(CASE4 C)
IF(CMAKE_ANSI_CFLAGS)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_ANSI_CFLAGS}")
ENDIF(CMAKE_ANSI_CFLAGS)
# This is not really a circular dependency. "case4Bar" refers to a
# third-party library that happens to match the executable name, which
# is okay when the executable is not a linkable target (ENABLE_EXPORTS
# is not set). This tests whether CMake avoids incorrectly reporting
# a circular dependency. In practice case4Foo may be a shared
# library, but we skip that here because we do not want it to actually
# have to find the third-party library.
add_library(case4Foo STATIC foo.c)
target_link_libraries(case4Foo case4Bar)
# The executable avoids linking to a library with its own name, which
# has been a CMake-ism for a long time, so we will not get a link
# failure. An imported target or executable with an OUTPUT_NAME set
# may be used if the user really wants to link a third-party library
# into an executable of the same name.
add_executable(case4Bar bar.c)
target_link_libraries(case4Bar case4Foo)

View File

@ -0,0 +1,2 @@
extern int foo();
int main() { return foo(); }

View File

@ -0,0 +1 @@
int foo() { return 0; }