Warning, /graphics/krita/cmake/modules/KritaAddBrokenUnitTest.cmake is written in an unsupported language. File is not indexed.
0001 # 0002 # SPDX-License-Identifier: BSD-3-Clause 0003 # 0004 0005 include(CMakeParseArguments) 0006 include(ECMMarkAsTest) 0007 include(ECMMarkNonGuiExecutable) 0008 include(KritaTestSuite) 0009 0010 0011 # modified version of ECMAddTests.cmake in cmake-extra-modules 0012 function(KRITA_ADD_UNIT_TEST) 0013 set(options GUI BROKEN) 0014 # TARGET_NAME_VAR and TEST_NAME_VAR are undocumented args used by 0015 # kis_add_tests 0016 set(oneValueArgs TEST_NAME NAME_PREFIX TARGET_NAME_VAR TEST_NAME_VAR PCH_FILE) 0017 set(multiValueArgs LINK_LIBRARIES) 0018 cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 0019 set(_sources ${ARG_UNPARSED_ARGUMENTS}) 0020 list(LENGTH _sources _sourceCount) 0021 if(ARG_TEST_NAME) 0022 set(_targetname ${ARG_TEST_NAME}) 0023 elseif(${_sourceCount} EQUAL "1") 0024 #use the source file name without extension as the testname 0025 get_filename_component(_targetname ${_sources} NAME_WE) 0026 else() 0027 #more than one source file passed, but no test name given -> error 0028 message(FATAL_ERROR "kis_add_test() called with multiple source files but without setting \"TEST_NAME\"") 0029 endif() 0030 0031 set(_testname ${ARG_NAME_PREFIX}${_targetname}) 0032 0033 if(ARG_BROKEN) 0034 # add test to the global list of disabled tests 0035 set(KRITA_BROKEN_TESTS ${KRITA_BROKEN_TESTS} ${_testname} CACHE INTERNAL "KRITA_BROKEN_TESTS") 0036 endif() 0037 # add test to global test list so we can operate on all targets at once 0038 set(KRITA_TESTS_TARGET ${KRITA_TESTS_TARGET} ${_targetname} CACHE INTERNAL "KRITA_TESTS_TARGET") 0039 0040 set(gui_args) 0041 if(ARG_GUI) 0042 set(gui_args WIN32 MACOSX_BUNDLE) 0043 endif() 0044 add_executable(${_targetname} ${gui_args} ${_sources}) 0045 set_test_sdk_compile_definitions(${_targetname}) 0046 0047 if (KRITA_ENABLE_PCH AND ARG_PCH_FILE) 0048 set_property(TARGET ${_targetname} PROPERTY PCH_WARN_INVALID TRUE ) 0049 target_precompile_headers(${_targetname} PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_SOURCE_DIR}/pch/${LOCAL_PCH_FILE}>") 0050 endif() 0051 0052 if(NOT ARG_GUI) 0053 ecm_mark_nongui_executable(${_targetname}) 0054 endif() 0055 0056 # do not add it as test, so make test skips it unless asked for it 0057 if(NOT ARG_BROKEN OR KRITA_ENABLE_BROKEN_TESTS) 0058 add_test(NAME ${_testname} COMMAND ${_targetname}) 0059 endif() 0060 0061 target_link_libraries(${_targetname} ${ARG_LINK_LIBRARIES}) 0062 ecm_mark_as_test(${_targetname}) 0063 if (ARG_TARGET_NAME_VAR) 0064 set(${ARG_TARGET_NAME_VAR} "${_targetname}" PARENT_SCOPE) 0065 endif() 0066 if (ARG_TEST_NAME_VAR) 0067 set(${ARG_TEST_NAME_VAR} "${_testname}" PARENT_SCOPE) 0068 endif() 0069 endfunction() 0070 0071 function(KRITA_ADD_UNIT_TESTS) 0072 set(options GUI BROKEN) 0073 set(oneValueArgs NAME_PREFIX TARGET_NAMES_VAR TEST_NAMES_VAR PCH_FILE) 0074 set(multiValueArgs LINK_LIBRARIES) 0075 cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 0076 if(ARG_GUI) 0077 set(_exe_type GUI) 0078 else() 0079 set(_exe_type "") 0080 endif() 0081 0082 set(BROKEN_TOKEN) 0083 if (ARG_BROKEN) 0084 set(BROKEN_TOKEN BROKEN) 0085 endif() 0086 0087 set(test_names) 0088 set(target_names) 0089 0090 set(pch_source_target) 0091 0092 list(LENGTH ARG_UNPARSED_ARGUMENTS _testsCount) 0093 0094 foreach(_test_source ${ARG_UNPARSED_ARGUMENTS}) 0095 KRITA_ADD_UNIT_TEST(${_test_source} 0096 NAME_PREFIX ${ARG_NAME_PREFIX} 0097 LINK_LIBRARIES ${ARG_LINK_LIBRARIES} 0098 TARGET_NAME_VAR target_name 0099 TEST_NAME_VAR test_name 0100 ${_exe_type} 0101 ${BROKEN_TOKEN} 0102 ) 0103 list(APPEND _test_names "${test_name}") 0104 list(APPEND _target_names "${target_name}") 0105 0106 # if the number of tests is greater than 2 we 0107 # use the first test as a base for the PCH file 0108 # and then reuse this PCH for all other tests 0109 0110 if (KRITA_ENABLE_PCH AND ${_testsCount} GREATER "2") 0111 set_property(TARGET ${_targetname} PROPERTY PCH_WARN_INVALID TRUE ) 0112 0113 if (NOT pch_source_target) 0114 set (pch_source_target ${target_name}) 0115 0116 if (NOT ARG_PCH_FILE) 0117 krita_select_pch_file(${target_name} ARG_PCH_FILE) 0118 #file(GENERATE OUTPUT "${CMAKE_BINARY_DIR}/out/${target_name}.txt" CONTENT ${ARG_PCH_FILE}) 0119 endif() 0120 0121 target_precompile_headers(${target_name} PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_SOURCE_DIR}/pch/${ARG_PCH_FILE}>") 0122 else() 0123 target_precompile_headers(${target_name} REUSE_FROM ${pch_source_target}) 0124 endif() 0125 endif() 0126 0127 endforeach() 0128 if (ARG_TARGET_NAMES_VAR) 0129 set(${ARG_TARGET_NAMES_VAR} "${_target_names}" PARENT_SCOPE) 0130 endif() 0131 if (ARG_TEST_NAMES_VAR) 0132 set(${ARG_TEST_NAMES_VAR} "${_test_names}" PARENT_SCOPE) 0133 endif() 0134 endfunction() 0135 0136 macro(KRITA_ADD_BROKEN_UNIT_TEST) 0137 KRITA_ADD_UNIT_TEST(${ARGV} BROKEN) 0138 endmacro() 0139 0140 macro(KRITA_ADD_BROKEN_UNIT_TESTS) 0141 KRITA_ADD_UNIT_TESTS(${ARGV} BROKEN) 0142 endmacro() 0143 0144 macro(kis_add_tests) 0145 KRITA_ADD_UNIT_TESTS(${ARGV}) 0146 endmacro() 0147 0148 macro(kis_add_test) 0149 KRITA_ADD_UNIT_TEST(${ARGV}) 0150 endmacro()