[Bf-blender-cvs] [729da8bfac0] master: CTest: Fix blender_test not working on windows.

Ray Molenkamp noreply at git.blender.org
Mon Jul 27 18:55:38 CEST 2020


Commit: 729da8bfac05b3f71cb2cbb9992aa505920fb5e6
Author: Ray Molenkamp
Date:   Mon Jul 27 10:55:34 2020 -0600
Branches: master
https://developer.blender.org/rB729da8bfac05b3f71cb2cbb9992aa505920fb5e6

CTest: Fix blender_test not working on windows.

MSVC does need the wholearchive flag but it was not set,
so no tests were actually linked into the binary.

Reviewed By: sybren

Differential Revision: https://developer.blender.org/D8404

===================================================================

M	tests/gtests/runner/CMakeLists.txt

===================================================================

diff --git a/tests/gtests/runner/CMakeLists.txt b/tests/gtests/runner/CMakeLists.txt
index 4da0bce09a4..8f9bc225678 100644
--- a/tests/gtests/runner/CMakeLists.txt
+++ b/tests/gtests/runner/CMakeLists.txt
@@ -36,7 +36,7 @@ endif()
 # directly referenced from other code.
 get_property(_test_libs GLOBAL PROPERTY BLENDER_TEST_LIBS)
 if(WIN32)
-  list(APPEND TEST_LIBS ${_test_libs})
+  # Win32 is set using target_link_options after target creation.
 elseif(APPLE)
   list(APPEND TEST_LIBS "-Wl,-force_load" ${_test_libs})
 elseif(UNIX)
@@ -44,7 +44,6 @@ elseif(UNIX)
 else()
   message(FATAL_ERROR "Unknown how to link whole-archive with your compiler ${CMAKE_CXX_COMPILER_ID}")
 endif()
-unset(_test_libs)
 
 # This builds `bin/tests/blender_test`, but does not add it as a single test.
 setup_libdirs()
@@ -56,6 +55,18 @@ BLENDER_SRC_GTEST_EX(
 )
 setup_liblinks(blender_test)
 
+if(WIN32)
+  foreach(_lib ${_test_libs})
+    # Both target_link_libraries and target_link_options are required here
+    # target_link_libraries will add any dependend libraries, while just setting
+    # the wholearchive flag in target link options will not.
+    target_link_libraries(blender_test ${_lib})
+    target_link_options(blender_test PRIVATE /wholearchive:$<TARGET_FILE:${_lib}>)
+  endforeach()
+endif()
+
+unset(_test_libs)
+
 # This runs the blender_test executable with `--gtest_list_tests`, then
 # exposes those tests individually to the ctest runner.
 # See https://cmake.org/cmake/help/v3.18/module/GoogleTest.html
@@ -66,7 +77,9 @@ set(_GOOGLETEST_DISCOVER_TESTS_SCRIPT
 )
 
 gtest_discover_tests(blender_test
-  # So that unit tests know where to find files:
+# So that the binary can find its shared libs on window.
+  WORKING_DIRECTORY "$<TARGET_FILE_DIR:blender>"
+# So that unit tests know where to find files:
   EXTRA_ARGS
     --test-assets-dir "${CMAKE_SOURCE_DIR}/../lib/tests"
     --test-release-dir "$<TARGET_FILE_DIR:blender>/${BLENDER_VERSION}"



More information about the Bf-blender-cvs mailing list