annotate cmake/function/MalikaniaDefineTest.cmake @ 183:387f6b0a5420

CMake: remove vera until we get clang-tidy, #903
author David Demelier <markand@malikania.fr>
date Fri, 19 Oct 2018 20:27:02 +0200
parents 3107ce017c3a
children 74afc5a41c83
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 # MalikaniaDefineTest.cmake -- CMake build system for malikania
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 #
158
4b292c20124c Misc: update copyrights
David Demelier <markand@malikania.fr>
parents: 156
diff changeset
4 # Copyright (c) 2013-2018 David Demelier <markand@malikania.fr>
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 # Permission to use, copy, modify, and/or distribute this software for any
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 # purpose with or without fee is hereby granted, provided that the above
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 # copyright notice and this permission notice appear in all copies.
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 # malikania_create_test
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 # ---------------------
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 # malikania_create_test(
183
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
24 # NAME Test name (must be lowercase)
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
25 # SOURCES Test sources files
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
26 # LIBRARIES (Optional) Libraries to link to
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
27 # RESOURCES (Optional) Resources files to copy verbatim
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
28 # FLAGS (Optional) Add list of compile definitions
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 # )
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 # This will generate a target named test-<name> where name is the parameter NAME. The test is created
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 # under CMAKE_BINARY_DIR/test/<NAME> and resources are copied there with the same hierarchy.
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
34
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 include(CMakeParseArguments)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
36
183
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
37 function(malikania_create_test)
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
38 set(singleArgs NAME)
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
39 set(multiArgs FLAGS LIBRARIES SOURCES RESOURCES)
54
0edaba9986ba CMake: add vera++, closes 602
David Demelier <markand@malikania.fr>
parents: 49
diff changeset
40
183
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
41 cmake_parse_arguments(TEST "" "${singleArgs}" "${multiArgs}" ${ARGN})
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
42
183
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
43 if (NOT TEST_NAME)
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
44 message(FATAL_ERROR "Missing NAME parameter")
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
45 endif ()
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
46 if (NOT TEST_SOURCES)
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
47 message(FATAL_ERROR "Missing SOURCES parameter")
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
48 endif ()
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
49
183
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
50 file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/test/${TEST_NAME})
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
51
183
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
52 if (UNIX)
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
53 list(APPEND TEST_LIBRARIES pthread)
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
54 endif ()
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
55
183
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
56 # Resources files added before as custom output
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
57 foreach (f ${TEST_RESOURCES})
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
58 get_filename_component(absolute ${f} ABSOLUTE)
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
59 file(RELATIVE_PATH basename ${CMAKE_CURRENT_SOURCE_DIR} ${absolute})
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
60 set(output ${CMAKE_BINARY_DIR}/test/${TEST_NAME}/${basename})
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
183
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
62 add_custom_command(
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
63 OUTPUT ${output}
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
64 COMMAND ${CMAKE_COMMAND} -E copy ${absolute} ${output}
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
65 DEPENDS ${absolute}
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
66 )
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
67
183
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
68 list(APPEND TEST_SOURCES ${absolute})
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
69 list(APPEND outputs ${output})
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
70 endforeach ()
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
71
183
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
72 add_executable(test-${TEST_NAME} ${TEST_SOURCES} ${outputs})
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
73 source_group(private\\Resources FILES ${outputs})
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
74 target_compile_definitions(
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
75 test-${TEST_NAME}
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
76 PRIVATE
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
77 BOOST_TEST_DYN_LINK
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
78 CMAKE_CURRENT_BINARY_DIR="${CMAKE_CURRENT_BINARY_DIR}"
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
79 CMAKE_CURRENT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}"
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
80 ${TEST_FLAGS}
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
81 )
111
8963c68f023c CMake: output everything in bin, closes #691
David Demelier <markand@malikania.fr>
parents: 110
diff changeset
82
183
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
83 set_target_properties(
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
84 test-${TEST_NAME}
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
85 PROPERTIES
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
86 RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
87 )
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
88 foreach (c ${CMAKE_CONFIGURATION_TYPES})
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
89 string(TOUPPER ${c} cu)
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
90 set_target_properties(
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
91 test-${TEST_NAME}
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
92 PROPERTIES
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
93 RUNTIME_OUTPUT_DIRECTORY_${cu} ${CMAKE_BINARY_DIR}/bin/${c}
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
94 )
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
95 endforeach ()
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
96 add_test(
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
97 NAME ${TEST_NAME}
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
98 COMMAND $<TARGET_FILE:test-${TEST_NAME}>
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
99 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/test/${TEST_NAME}
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
100 )
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
101
183
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
102 target_link_libraries(
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
103 test-${TEST_NAME}
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
104 ${TEST_LIBRARIES}
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
105 Boost::boost
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
106 Boost::unit_test_framework
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
107 )
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 endfunction()