The basic tests now run on Windows correctly without needing to manually copy any files -- the executables are output in the same location as the necessary DLLs. However, tests that require *.pyd files (all code in the Mod subdirectory, basically) still do not work on Windows as the test executables cannot find those files. This is a work in progress.
161 lines
4.8 KiB
CMake
161 lines
4.8 KiB
CMake
if(FREECAD_USE_EXTERNAL_GTEST)
|
|
find_package(GTest REQUIRED)
|
|
set(Google_Tests_LIBS ${GTEST_LIBRARIES} ${GMOCK_LIBRARIES})
|
|
else()
|
|
if ( EXISTS "${CMAKE_SOURCE_DIR}/tests/lib/googletest" )
|
|
include_directories( ${CMAKE_SOURCE_DIR}/tests/lib/googletest/include/ )
|
|
include_directories( ${CMAKE_SOURCE_DIR}/tests/lib/googlemock/include/ )
|
|
else()
|
|
message( SEND_ERROR "The Google Test submodule is not available. Please run git submodule update --init" )
|
|
endif()
|
|
endif()
|
|
|
|
if(MSVC)
|
|
add_compile_options(/wd4251)
|
|
|
|
option(
|
|
gtest_force_shared_crt
|
|
"Use shared (DLL) run-time lib even when Google Test is built as static lib."
|
|
ON)
|
|
option(gtest_disable_pthreads "Disable uses of pthreads in gtest." ON)
|
|
|
|
set(Google_Tests_LIBS
|
|
oldnames.lib
|
|
debug msvcrtd.lib
|
|
debug msvcprtd.lib
|
|
optimized msvcrt.lib
|
|
optimized msvcprt.lib
|
|
)
|
|
|
|
# Universal C runtime introduced in VS 2015 (cl version 19)
|
|
if(NOT(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "19"))
|
|
list(APPEND Google_Tests_LIBS
|
|
debug vcruntimed.lib
|
|
debug ucrtd.lib
|
|
debug concrtd.lib
|
|
optimized vcruntime.lib
|
|
optimized ucrt.lib
|
|
optimized concrt.lib
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
if(WIN32)
|
|
add_definitions(-DCOIN_DLL)
|
|
endif(WIN32)
|
|
|
|
if(NOT BUILD_DYNAMIC_LINK_PYTHON)
|
|
list(APPEND Google_Tests_LIBS
|
|
${Python3_LIBRARIES}
|
|
)
|
|
endif()
|
|
|
|
include_directories(
|
|
${CMAKE_CURRENT_SOURCE_DIR}
|
|
)
|
|
|
|
set(CMAKE_AUTOMOC ON)
|
|
|
|
function(setup_qt_test)
|
|
foreach(_testname ${ARGN})
|
|
add_executable(${_testname}_Tests_run ${_testname}.cpp)
|
|
add_test(NAME ${_testname}_Tests_run COMMAND ${_testname}_Tests_run)
|
|
|
|
if(NOT BUILD_DYNAMIC_LINK_PYTHON)
|
|
list(APPEND ${_testname}_LIBS
|
|
${Python3_LIBRARIES}
|
|
)
|
|
endif()
|
|
|
|
target_include_directories(${_testname}_Tests_run PUBLIC
|
|
SYSTEM
|
|
${QtTest_INCLUDE_DIRS})
|
|
target_link_libraries(${_testname}_Tests_run
|
|
FreeCADApp
|
|
FreeCADGui
|
|
${QtTest_LIBRARIES}
|
|
${${_testname}_LIBS})
|
|
endforeach()
|
|
endfunction()
|
|
|
|
set(TestExecutables
|
|
App_tests_run
|
|
Base_tests_run
|
|
Misc_tests_run
|
|
Zipios_tests_run
|
|
)
|
|
|
|
# NOTE: The following tests don't yet run on Windows because they can't find the *.pyd files needed by each FreeCAD
|
|
# module.
|
|
|
|
if(BUILD_GUI)
|
|
list (APPEND TestExecutables Gui_tests_run)
|
|
endif()
|
|
if(BUILD_ASSEMBLY)
|
|
list (APPEND TestExecutables Assembly_tests_run)
|
|
endif(BUILD_ASSEMBLY)
|
|
if(BUILD_MATERIAL)
|
|
list (APPEND TestExecutables Material_tests_run)
|
|
endif(BUILD_MATERIAL)
|
|
if(BUILD_MEASURE)
|
|
list (APPEND TestExecutables Measure_tests_run)
|
|
endif(BUILD_MEASURE)
|
|
if(BUILD_MESH)
|
|
list (APPEND TestExecutables Mesh_tests_run)
|
|
endif(BUILD_MESH)
|
|
if(BUILD_MESH_PART)
|
|
list (APPEND TestExecutables MeshPart_tests_run)
|
|
endif(BUILD_MESH_PART)
|
|
if(BUILD_PART)
|
|
list (APPEND TestExecutables Part_tests_run)
|
|
endif(BUILD_PART)
|
|
if(BUILD_PART_DESIGN)
|
|
list (APPEND TestExecutables PartDesign_tests_run)
|
|
endif(BUILD_PART_DESIGN)
|
|
if(BUILD_POINTS)
|
|
list (APPEND TestExecutables Points_tests_run)
|
|
endif(BUILD_POINTS)
|
|
if(BUILD_SKETCHER)
|
|
list (APPEND TestExecutables Sketcher_tests_run)
|
|
endif(BUILD_SKETCHER)
|
|
if(BUILD_SPREADSHEET)
|
|
list (APPEND TestExecutables Spreadsheet_tests_run)
|
|
endif()
|
|
if(BUILD_START)
|
|
list (APPEND TestExecutables Start_tests_run)
|
|
endif()
|
|
|
|
# -------------------------
|
|
|
|
if ( NOT FREECAD_USE_EXTERNAL_GTEST )
|
|
if(WIN32)
|
|
set(BUILD_SHARED_LIBS OFF)
|
|
endif()
|
|
add_subdirectory(lib)
|
|
endif()
|
|
add_subdirectory(src)
|
|
|
|
include(GoogleTest)
|
|
set(CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE PRE_TEST)
|
|
|
|
foreach (exe ${TestExecutables})
|
|
if(WIN32)
|
|
# On Windows the test executables need to be in the same place as all the other DLLs that are getting built
|
|
if(CMAKE_CONFIGURATION_TYPES)
|
|
# Visual Studio solution file, supports switching configs on the fly in the IDE
|
|
set(OUTPUT_DIR ${CMAKE_BINARY_DIR}/bin)
|
|
foreach(OUTPUT_CONFIG Debug Release RelWithDebInfo MinSizeRel)
|
|
string(TOUPPER "${OUTPUT_CONFIG}" UPPER_CONFIG)
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${UPPER_CONFIG} ${OUTPUT_DIR}/${OUTPUT_CONFIG})
|
|
endforeach()
|
|
else()
|
|
# Ninja (usually), e.g. when using CLion with MSVC toolchain, etc. is actually single-config
|
|
set_target_properties(${exe} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
set_target_properties(${exe} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
endif()
|
|
else()
|
|
set_target_properties(${exe} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/tests)
|
|
endif()
|
|
gtest_discover_tests(${exe})
|
|
endforeach()
|