瀏覽代碼

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.
Brad King 17 年之前
父節點
當前提交
c76f3ae5b5

+ 1 - 0
Tests/Dependency/CMakeLists.txt

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

+ 23 - 0
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)

+ 2 - 0
Tests/Dependency/Case4/bar.c

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

+ 1 - 0
Tests/Dependency/Case4/foo.c

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