Mercurial > irccd
annotate cmake/function/IrccdDefineTest.cmake @ 150:81dd79ec1e99
CMake: add optional FLAGS in irccd_define_test macro
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 20 May 2016 12:56:28 +0200 |
parents | ff26bd33a45d |
children | 70ed0753ce0d |
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( | |
24 # NAME the test name | |
25 # SOURCES the sources files | |
26 # LIBRARIES (Optional) libraries to link | |
27 # RESOURCES (Optional) some resources file to copy | |
150
81dd79ec1e99
CMake: add optional FLAGS in irccd_define_test macro
David Demelier <markand@malikania.fr>
parents:
138
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) | |
37 set(oneValueArgs NAME) | |
150
81dd79ec1e99
CMake: add optional FLAGS in irccd_define_test macro
David Demelier <markand@malikania.fr>
parents:
138
diff
changeset
|
38 set(multiValueArgs SOURCES LIBRARIES RESOURCES FLAGS) |
0 | 39 |
40 cmake_parse_arguments(TEST "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) | |
41 | |
42 if (NOT TEST_NAME) | |
43 message(FATAL_ERROR "Please set NAME") | |
44 endif () | |
45 if (NOT TEST_SOURCES) | |
46 message(FATAL_ERROR "Please set SOURCES") | |
47 endif () | |
48 | |
49 foreach (r ${TEST_RESOURCES}) | |
50 file(RELATIVE_PATH output ${CMAKE_CURRENT_SOURCE_DIR} ${r}) | |
51 | |
52 add_custom_command( | |
53 OUTPUT ${CMAKE_BINARY_DIR}/tests/${output} | |
54 COMMAND ${CMAKE_COMMAND} -E copy ${r} ${CMAKE_BINARY_DIR}/tests/${output} | |
55 DEPENDS ${r} | |
56 ) | |
57 | |
58 list(APPEND RESOURCES ${CMAKE_BINARY_DIR}/tests/${output}) | |
59 endforeach () | |
60 | |
61 # Always link to googletest | |
62 list(APPEND TEST_LIBRARIES extern-gtest) | |
63 | |
64 # Executable | |
65 add_executable(test-${TEST_NAME} ${TEST_SOURCES} ${TEST_RESOURCES} ${RESOURCES}) | |
66 target_link_libraries(test-${TEST_NAME} ${TEST_LIBRARIES}) | |
67 source_group(Auto-generated FILES ${RESOURCES}) | |
68 | |
69 target_include_directories( | |
70 test-${TEST_NAME} | |
71 PRIVATE | |
72 ${irccd_SOURCE_DIR} | |
73 ) | |
74 | |
75 target_compile_definitions( | |
76 test-${TEST_NAME} | |
77 PRIVATE | |
150
81dd79ec1e99
CMake: add optional FLAGS in irccd_define_test macro
David Demelier <markand@malikania.fr>
parents:
138
diff
changeset
|
78 ${TEST_FLAGS} |
81dd79ec1e99
CMake: add optional FLAGS in irccd_define_test macro
David Demelier <markand@malikania.fr>
parents:
138
diff
changeset
|
79 SOURCEDIR="${CMAKE_CURRENT_SOURCE_DIR}" |
0 | 80 IRCCD_TESTS_DIRECTORY="${CMAKE_BINARY_DIR}/tests" |
81 ) | |
82 | |
83 # Tests are all in the same directory | |
84 set_target_properties( | |
85 test-${TEST_NAME} | |
86 PROPERTIES | |
138
ff26bd33a45d
CMake: improve VS2015 support, #425
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
87 PROJECT_LABEL ${TEST_NAME} |
ff26bd33a45d
CMake: improve VS2015 support, #425
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
88 FOLDER test |
0 | 89 RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/tests |
90 RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/tests | |
91 RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/tests | |
92 RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_BINARY_DIR}/tests | |
93 RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_BINARY_DIR}/tests | |
94 ) | |
95 | |
96 if (UNIX) | |
97 set_target_properties(test-${TEST_NAME} PROPERTIES LINK_FLAGS -pthread) | |
98 endif () | |
99 | |
100 # And test | |
101 add_test( | |
102 NAME test-${TEST_NAME} | |
103 COMMAND test-${TEST_NAME} | |
104 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/tests | |
105 ) | |
106 endfunction() |