-
-
Notifications
You must be signed in to change notification settings - Fork 69
/
Copy pathCMakeLists.txt
73 lines (58 loc) · 2.27 KB
/
CMakeLists.txt
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
# Utils
# =====
find_package(Qt5Core)
find_package(Qt5Concurrent)
find_package(Qt5Qml)
find_package(Qt5Quick)
function(lager_target_name_for out_target out_file file)
get_filename_component(_extension ${_file} EXT)
file(RELATIVE_PATH _relative ${PROJECT_SOURCE_DIR} ${file})
string(REPLACE "${_extension}" "" _name ${_relative})
string(REGEX REPLACE "/" "-" _name ${_name})
set(${out_target} "${_name}" PARENT_SCOPE)
string(REPLACE "${_extension}" "" _name ${_relative})
string(REGEX REPLACE "/" "-" _name ${_name})
set(${out_file} "${_name}" PARENT_SCOPE)
endfunction()
function(lager_get_qt_libs out_qt_required out_qt_libs target)
set(${out_qt_required} FALSE PARENT_SCOPE)
unset(${out_qt_libs} PARENT_SCOPE)
string(FIND ${target} "qt" _qt_required)
if(${_qt_required} GREATER 0)
set(${out_qt_required} TRUE PARENT_SCOPE)
if(${Qt5Core_FOUND} AND ${Qt5Concurrent_FOUND})
set(${out_qt_libs} PRIVATE Qt5::Core Qt5::Concurrent PARENT_SCOPE)
endif()
endif()
string(FIND ${target} "qml" _qml_required)
if(${_qml_required} GREATER 0)
set(${out_required} TRUE PARENT_SCOPE)
if(${Qt5Core_FOUND} AND ${Qt5Quick_FOUND})
set(${out_qt_libs} PRIVATE Qt5::Core Qt5::Quick PARENT_SCOPE)
endif()
endif()
endfunction()
# Targets
# =======
find_package(Qt5 COMPONENTS Core Concurrent)
add_custom_target(tests COMMENT "Build all the unit tests.")
add_dependencies(check tests)
file(GLOB lager_unit_tests "*.cpp" "cereal/*.cpp" "event_loop/*.cpp" "extra/*.cpp" "detail/*.cpp")
foreach(_file IN LISTS lager_unit_tests)
message("found unit test: " ${_file})
lager_target_name_for(_target _output "${_file}")
lager_get_qt_libs(_qt_required _qt_libs ${_target})
if(${_qt_required} AND (NOT DEFINED _qt_libs))
message(WARNING "Qt dependency not found - skipping target ${_target}")
continue()
endif()
add_executable(${_target} EXCLUDE_FROM_ALL "${_file}")
set_target_properties(${_target} PROPERTIES OUTPUT_NAME ${_output})
add_dependencies(tests ${_target})
target_compile_definitions(${_target} PUBLIC CATCH_CONFIG_MAIN)
target_link_libraries(${_target} PUBLIC lager-dev Catch2::Catch2 ${_qt_libs})
add_test("test/${_output}" ${_output})
endforeach()
if (lager_BUILD_FAILURE_TESTS)
add_subdirectory(build_failure)
endif()