Mercurial > irccd
annotate cmake/function/IrccdDefineTest.cmake @ 207:6635b9187d71
Irccd: switch to 4 spaces indent, #518
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 21 Jun 2016 20:52:17 +0200 |
parents | 70ed0753ce0d |
children | 6bf457b71e0c |
rev | line source |
---|---|
0 | 1 # |
2 # IrccdDefineTest.cmake -- CMake build system for irccd | |
3 # | |
4 # Copyright (c) 2013-2016 David Demelier <markand@malikania.fr> | |
5 # | |
6 # Permission to use, copy, modify, and/or distribute this software for any | |
7 # purpose with or without fee is hereby granted, provided that the above | |
8 # copyright notice and this permission notice appear in all copies. | |
9 # | |
10 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 # | |
18 | |
19 # | |
20 # irccd_define_test | |
21 # ------------------------------------------------------------------- | |
22 # | |
23 # irccd_define_test( | |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
24 # NAME the test name |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
25 # SOURCES the sources files |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
26 # LIBRARIES (Optional) libraries to link |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
27 # RESOURCES (Optional) some resources file to copy |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
28 # FLAGS (Optional) compilation flags |
0 | 29 # ) |
30 # | |
31 # Create a unit test named test-${NAME} | |
32 # | |
33 # Resources files are copied VERBATIM into the same directory. | |
34 # | |
35 | |
36 function(irccd_define_test) | |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
37 set(oneValueArgs NAME) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
38 set(multiValueArgs SOURCES LIBRARIES RESOURCES FLAGS) |
0 | 39 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
40 cmake_parse_arguments(TEST "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) |
0 | 41 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
42 if (NOT TEST_NAME) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
43 message(FATAL_ERROR "Please set NAME") |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
44 endif () |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
45 if (NOT TEST_SOURCES) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
46 message(FATAL_ERROR "Please set SOURCES") |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
47 endif () |
0 | 48 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
49 foreach (r ${TEST_RESOURCES}) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
50 file(RELATIVE_PATH output ${CMAKE_CURRENT_SOURCE_DIR} ${r}) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
51 |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
52 add_custom_command( |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
53 OUTPUT ${CMAKE_BINARY_DIR}/tests/${output} |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
54 COMMAND ${CMAKE_COMMAND} -E copy ${r} ${CMAKE_BINARY_DIR}/tests/${output} |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
55 DEPENDS ${r} |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
56 ) |
0 | 57 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
58 list(APPEND RESOURCES ${CMAKE_BINARY_DIR}/tests/${output}) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
59 endforeach () |
0 | 60 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
61 # Always link to googletest |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
62 list(APPEND TEST_LIBRARIES extern-gtest) |
0 | 63 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
64 # Executable |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
65 add_executable(test-${TEST_NAME} ${TEST_SOURCES} ${TEST_RESOURCES} ${RESOURCES}) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
66 target_link_libraries(test-${TEST_NAME} ${TEST_LIBRARIES}) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
67 source_group(Auto-generated FILES ${RESOURCES}) |
0 | 68 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
69 target_include_directories( |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
70 test-${TEST_NAME} |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
71 PRIVATE |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
72 ${irccd_SOURCE_DIR} |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
73 ) |
0 | 74 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
75 target_compile_definitions( |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
76 test-${TEST_NAME} |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
77 PRIVATE |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
78 ${TEST_FLAGS} |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
79 SOURCEDIR="${CMAKE_CURRENT_SOURCE_DIR}" |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
80 BINARYDIR="${CMAKE_CURRENT_BINARY_DIR}" |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
81 IRCCD_TESTS_DIRECTORY="${CMAKE_BINARY_DIR}/tests" |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
82 ) |
0 | 83 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
84 # Tests are all in the same directory |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
85 set_target_properties( |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
86 test-${TEST_NAME} |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
87 PROPERTIES |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
88 PROJECT_LABEL ${TEST_NAME} |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
89 FOLDER test |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
90 RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/tests |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
91 RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/tests |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
92 RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/tests |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
93 RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_BINARY_DIR}/tests |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
94 RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_BINARY_DIR}/tests |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
95 ) |
0 | 96 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
97 if (UNIX) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
98 set_target_properties(test-${TEST_NAME} PROPERTIES LINK_FLAGS -pthread) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
99 endif () |
0 | 100 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
101 # And test |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
102 add_test( |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
103 NAME test-${TEST_NAME} |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
104 COMMAND test-${TEST_NAME} |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
105 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/tests |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
159
diff
changeset
|
106 ) |
0 | 107 endfunction() |