浏览代码

Tests: Revise RunCMake.add_subdirectory ExcludeFromAll to avoid globbing

Also simplify the clean step.
Brad King 6 年之前
父节点
当前提交
21442d72a4

+ 7 - 0
Tests/RunCMake/add_subdirectory/ExcludeFromAll.cmake

@@ -4,3 +4,10 @@ add_subdirectory(ExcludeFromAll EXCLUDE_FROM_ALL)
 
 add_executable(main main.cpp)
 target_link_libraries(main PRIVATE foo)
+
+file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/check-$<LOWER_CASE:$<CONFIG>>.cmake CONTENT "
+set(main_exe \"$<TARGET_FILE:main>\")
+set(foo_lib \"$<TARGET_FILE:foo>\")
+set(bar_lib \"$<TARGET_FILE:bar>\")
+set(baz_lib \"$<TARGET_FILE:baz>\")
+")

+ 0 - 12
Tests/RunCMake/add_subdirectory/ExcludeFromAll/CMakeLists.txt

@@ -5,16 +5,4 @@ add_library(foo STATIC foo.cpp)
 add_library(baz STATIC foo.cpp)
 set_target_properties(baz PROPERTIES EXCLUDE_FROM_ALL OFF)
 
-file(GENERATE
-  OUTPUT "${CMAKE_BINARY_DIR}/main.txt"
-  CONTENT "$<TARGET_FILE_NAME:main>")
-
-file(GENERATE
-  OUTPUT "${CMAKE_BINARY_DIR}/bar.txt"
-  CONTENT "$<TARGET_FILE_NAME:bar>")
-
-file(GENERATE
-  OUTPUT "${CMAKE_BINARY_DIR}/baz.txt"
-  CONTENT "$<TARGET_FILE_NAME:baz>")
-
 target_include_directories(foo PUBLIC .)

+ 28 - 41
Tests/RunCMake/add_subdirectory/ExcludeFromAll/check.cmake

@@ -1,44 +1,31 @@
-# Use globbing to check if exes / libs were built because determining
-# exactly where these files will live inside a CMake -P script is
-# pretty challenging.
-
-file(READ "${RunCMake_TEST_BINARY_DIR}/main.txt" main_exe)
-file(READ "${RunCMake_TEST_BINARY_DIR}/bar.txt" bar_lib)
-file(READ "${RunCMake_TEST_BINARY_DIR}/baz.txt" baz_lib)
-
-set(found_main FALSE)
-file(GLOB_RECURSE files
-  LIST_DIRECTORIES FALSE
-  RELATIVE "${RunCMake_TEST_BINARY_DIR}"
-  "${RunCMake_TEST_BINARY_DIR}/*")
-foreach (file IN LISTS files)
-  if (file MATCHES "${main_exe}")
-    set(found_main TRUE)
+if(EXISTS ${RunCMake_TEST_BINARY_DIR}/check-debug.cmake)
+  include(${RunCMake_TEST_BINARY_DIR}/check-debug.cmake)
+  if(RunCMake_TEST_FAILED)
+    return()
   endif()
-endforeach()
-if (NOT found_main)
-  set(RunCMake_TEST_FAILED "'main' missing from ${RunCMake_TEST_BINARY_DIR}")
-endif()
 
-set(found_bar FALSE)
-set(found_baz FALSE)
-file(GLOB_RECURSE files
-  LIST_DIRECTORIES FALSE
-  RELATIVE "${RunCMake_TEST_BINARY_DIR}/ExcludeFromAll"
-  "${RunCMake_TEST_BINARY_DIR}/ExcludeFromAll/*")
-foreach (file IN LISTS files)
-  if (file MATCHES "${bar_lib}")
-    set(found_bar TRUE)
-  endif()
-  if (file MATCHES "${baz_lib}")
-    set(found_baz TRUE)
-  endif()
-endforeach()
-if (found_bar)
-  set(RunCMake_TEST_FAILED
-    "'bar' was not excluded from ${RunCMake_TEST_BINARY_DIR}/ExcludeFromAll")
-endif()
-if (NOT found_baz)
-  set(RunCMake_TEST_FAILED
-    "'baz' missing from ${RunCMake_TEST_BINARY_DIR}/ExcludeFromAll")
+  foreach(file
+      "${foo_lib}"
+      "${baz_lib}"
+      "${main_exe}"
+      )
+    if(NOT EXISTS "${file}")
+      set(RunCMake_TEST_FAILED
+        "Artifact should exist but is missing:\n  ${file}")
+      return()
+    endif()
+  endforeach()
+  foreach(file
+      "${bar_lib}"
+      )
+    if(EXISTS "${file}")
+      set(RunCMake_TEST_FAILED
+        "Artifact should be missing but exists:\n  ${file}")
+      return()
+    endif()
+  endforeach()
+else()
+  set(RunCMake_TEST_FAILED "
+ '${RunCMake_TEST_BINARY_DIR}/check-debug.cmake' missing
+")
 endif()

+ 8 - 8
Tests/RunCMake/add_subdirectory/RunCMakeTest.cmake

@@ -27,14 +27,14 @@ run_cmake_install(CMP0082-OLD -DCMP0082_VALUE=OLD)
 run_cmake_install(CMP0082-NEW -DCMP0082_VALUE=NEW)
 
 set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/ExcludeFromAll-build)
-set(RunCMake_TEST_NO_CLEAN 1)
-
-file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
-file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
-
+if(NOT RunCMake_GENERATOR_IS_MULTI_CONFIG)
+  set(RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Debug)
+endif()
 run_cmake(ExcludeFromAll)
+set(RunCMake_TEST_NO_CLEAN 1)
 set(RunCMake-check-file ExcludeFromAll/check.cmake)
-run_cmake_command(ExcludeFromAll-build ${CMAKE_COMMAND} --build .)
-
-unset(RunCMake_TEST_BINARY_DIR)
+run_cmake_command(ExcludeFromAll-build ${CMAKE_COMMAND} --build . --config Debug)
+unset(RunCMake-check-file)
 unset(RunCMake_TEST_NO_CLEAN)
+unset(RunCMake_TEST_OPTIONS)
+unset(RunCMake_TEST_BINARY_DIR)