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()