1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
# This script holds macros which are project specific
# Pack a skin xbt file
# Arguments:
# input input directory to pack
# output ouput xbt file
# On return:
# xbt is added to ${XBT_FILES}
function(pack_xbt input output)
file(GLOB_RECURSE MEDIA_FILES ${input}/*)
get_filename_component(dir ${output} DIRECTORY)
add_custom_command(OUTPUT ${output}
COMMAND ${CMAKE_COMMAND} -E make_directory ${dir}
COMMAND TexturePacker::TexturePacker
ARGS -input ${input}
-output ${output}
-dupecheck
DEPENDS ${MEDIA_FILES})
list(APPEND XBT_FILES ${output})
set(XBT_FILES ${XBT_FILES} PARENT_SCOPE)
endfunction()
# Add a skin to installation list, mirroring it in build tree, packing textures
# Arguments:
# skin skin directory
# On return:
# xbt is added to ${XBT_FILES}, data added to ${install_data}, mirror in build tree
function(copy_skin_to_buildtree skin)
file(GLOB_RECURSE FILES ${skin}/*)
file(GLOB_RECURSE MEDIA_FILES ${skin}/media/*)
list(REMOVE_ITEM FILES ${MEDIA_FILES})
foreach(file ${FILES})
copy_file_to_buildtree(${file})
endforeach()
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/${dest}/media)
string(REPLACE "${CMAKE_SOURCE_DIR}/" "" dest ${skin})
pack_xbt(${skin}/media ${CMAKE_BINARY_DIR}/${dest}/media/Textures.xbt)
file(GLOB THEMES RELATIVE ${skin}/themes ${skin}/themes/*)
foreach(theme ${THEMES})
pack_xbt(${skin}/themes/${theme} ${CMAKE_BINARY_DIR}/${dest}/media/${theme}.xbt)
endforeach()
set(XBT_FILES ${XBT_FILES} PARENT_SCOPE)
set(install_data ${install_data} PARENT_SCOPE)
endfunction()
# Get GTest tests as CMake tests.
# Copied from FindGTest.cmake
# Thanks to Daniel Blezek <blezek@gmail.com> for the GTEST_ADD_TESTS code
function(GTEST_ADD_TESTS executable extra_args)
if(NOT ARGN)
message(FATAL_ERROR "Missing ARGN: Read the documentation for GTEST_ADD_TESTS")
endif()
foreach(source ${ARGN})
# This assumes that every source file passed in exists. Consider using
# SUPPORT_SOURCES for source files which do not contain tests and might
# have to be generated.
file(READ "${source}" contents)
string(REGEX MATCHALL "TEST_?[F]?\\(([A-Za-z_0-9 ,]+)\\)" found_tests ${contents})
foreach(hit ${found_tests})
string(REGEX REPLACE ".*\\( *([A-Za-z_0-9]+), *([A-Za-z_0-9]+) *\\).*" "\\1.\\2" test_name ${hit})
add_test(${test_name} ${executable} --gtest_filter=${test_name} ${extra_args})
endforeach()
# Groups parametrized tests under a single ctest entry
string(REGEX MATCHALL "INSTANTIATE_TEST_CASE_P\\(([^,]+), *([^,]+)" found_tests2 ${contents})
foreach(hit ${found_tests2})
string(SUBSTRING ${hit} 24 -1 test_name)
string(REPLACE "," ";" test_name "${test_name}")
list(GET test_name 0 filter_name)
list(GET test_name 1 test_prefix)
string(STRIP ${test_prefix} test_prefix)
add_test(${test_prefix}.${filter_name} ${executable} --gtest_filter=${filter_name}* ${extra_args})
endforeach()
endforeach()
endfunction()
function(sca_add_tests)
find_program(CLANGCHECK_COMMAND clang-check)
find_program(CPPCHECK_EXECUTABLE cppcheck)
if(CLANGCHECK_COMMAND AND CMAKE_EXPORT_COMPILE_COMMANDS)
configure_file(${PROJECT_SOURCE_DIR}/cmake/scripts/linux/clang-check-test.sh.in
${CORE_BUILD_DIR}/clang-check-test.sh)
endif()
if(CPPCHECK_EXECUTABLE)
configure_file(${PROJECT_SOURCE_DIR}/cmake/scripts/linux/cppcheck-test.sh.in
${CORE_BUILD_DIR}/cppcheck-test.sh)
set(CPPCHECK_INCLUDES)
foreach(inc ${INCLUDES})
list(APPEND CPPCHECK_INCLUDES -I ${inc})
endforeach()
endif()
foreach(src ${sca_sources})
file(RELATIVE_PATH name ${PROJECT_SOURCE_DIR} ${src})
get_filename_component(EXT ${src} EXT)
if(EXT STREQUAL .cpp)
if(CLANGCHECK_COMMAND AND CMAKE_EXPORT_COMPILE_COMMANDS)
add_test(NAME clang-check+${name}
COMMAND ${CORE_BUILD_DIR}/clang-check-test.sh ${CLANGCHECK_COMMAND} ${src}
CONFIGURATIONS analyze clang-check)
endif()
if(CPPCHECK_EXECUTABLE)
add_test(NAME cppcheck+${name}
COMMAND ${CORE_BUILD_DIR}/cppcheck-test.sh ${CPPCHECK_EXECUTABLE} ${src} ${CPPCHECK_INCLUDES}
CONFIGURATIONS analyze cppcheck)
endif()
endif()
endforeach()
endfunction()
function(whole_archive output)
if(CMAKE_CXX_COMPILER_ID STREQUAL GNU OR CMAKE_CXX_COMPILER_ID STREQUAL Clang)
set(${output} -Wl,--whole-archive ${ARGN} -Wl,--no-whole-archive PARENT_SCOPE)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL AppleClang)
foreach(library ${ARGN})
list(APPEND ${output} -Wl,-force_load ${library})
set(${output} ${${output}} PARENT_SCOPE)
endforeach()
else()
set(${output} ${ARGN} PARENT_SCOPE)
endif()
endfunction()
|