From c76f3ae5b5b9709fc2cd97d838e52c52412bf5c5 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 7 Aug 2008 10:13:15 -0400 Subject: [PATCH] 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. --- Tests/Dependency/CMakeLists.txt | 1 + Tests/Dependency/Case4/CMakeLists.txt | 23 +++++++++++++++++++++++ Tests/Dependency/Case4/bar.c | 2 ++ Tests/Dependency/Case4/foo.c | 1 + 4 files changed, 27 insertions(+) create mode 100644 Tests/Dependency/Case4/CMakeLists.txt create mode 100644 Tests/Dependency/Case4/bar.c create mode 100644 Tests/Dependency/Case4/foo.c diff --git a/Tests/Dependency/CMakeLists.txt b/Tests/Dependency/CMakeLists.txt index d2c1c1a25..d700374b0 100644 --- a/Tests/Dependency/CMakeLists.txt +++ b/Tests/Dependency/CMakeLists.txt @@ -52,3 +52,4 @@ ADD_SUBDIRECTORY(Exec4) ADD_SUBDIRECTORY(Case1) ADD_SUBDIRECTORY(Case2) ADD_SUBDIRECTORY(Case3) +ADD_SUBDIRECTORY(Case4) diff --git a/Tests/Dependency/Case4/CMakeLists.txt b/Tests/Dependency/Case4/CMakeLists.txt new file mode 100644 index 000000000..87ab50722 --- /dev/null +++ b/Tests/Dependency/Case4/CMakeLists.txt @@ -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) diff --git a/Tests/Dependency/Case4/bar.c b/Tests/Dependency/Case4/bar.c new file mode 100644 index 000000000..d0bb0c43c --- /dev/null +++ b/Tests/Dependency/Case4/bar.c @@ -0,0 +1,2 @@ +extern int foo(); +int main() { return foo(); } diff --git a/Tests/Dependency/Case4/foo.c b/Tests/Dependency/Case4/foo.c new file mode 100644 index 000000000..9fe07f82f --- /dev/null +++ b/Tests/Dependency/Case4/foo.c @@ -0,0 +1 @@ +int foo() { return 0; }