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
|
# 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 "${CORE_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(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()
|