annotate cmake/function/MalikaniaDefineTest.cmake @ 200:0a285d62ace7

windows: initial VS2017 support While here, do some cleanup in CMake files for a better hierarchy.
author David Demelier <markand@malikania.fr>
date Wed, 28 Nov 2018 22:01:55 +0100
parents 74afc5a41c83
children c973501abe36
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 # FLAGS (Optional) Add list of compile definitions
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 # )
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #
200
0a285d62ace7 windows: initial VS2017 support
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
30 # This will generate a target named test-<name> where name is the parameter
0a285d62ace7 windows: initial VS2017 support
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
31 # NAME.
0a285d62ace7 windows: initial VS2017 support
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
32 #
0a285d62ace7 windows: initial VS2017 support
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
33 # The variables CMAKE_SOURCE_DIR, CMAKE_BINARY_DIR, CMAKE_CURRENT_SOURCE_DIR
0a285d62ace7 windows: initial VS2017 support
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
34 # and CMAKE_CURRENT_BINARY_DIR are automatically set.
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
36
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 include(CMakeParseArguments)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
183
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
39 function(malikania_create_test)
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
40 set(singleArgs NAME)
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
41 set(multiArgs FLAGS LIBRARIES SOURCES RESOURCES)
54
0edaba9986ba CMake: add vera++, closes 602
David Demelier <markand@malikania.fr>
parents: 49
diff changeset
42
183
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
43 cmake_parse_arguments(TEST "" "${singleArgs}" "${multiArgs}" ${ARGN})
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
44
183
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
45 if (NOT TEST_NAME)
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
46 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
47 endif ()
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
48 if (NOT TEST_SOURCES)
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
49 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
50 endif ()
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
51
200
0a285d62ace7 windows: initial VS2017 support
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
52 add_executable(test-${TEST_NAME} ${TEST_SOURCES})
183
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
53 target_compile_definitions(
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
54 test-${TEST_NAME}
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
55 PRIVATE
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
56 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
57 CMAKE_CURRENT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}"
192
74afc5a41c83 Common: rewrite socket class, closes #911 @2h
David Demelier <markand@malikania.fr>
parents: 183
diff changeset
58 CMAKE_BINARY_DIR="${CMAKE_BINARY_DIR}"
74afc5a41c83 Common: rewrite socket class, closes #911 @2h
David Demelier <markand@malikania.fr>
parents: 183
diff changeset
59 CMAKE_SOURCE_DIR="${CMAKE_SOURCE_DIR}"
183
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
60 ${TEST_FLAGS}
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
61 )
111
8963c68f023c CMake: output everything in bin, closes #691
David Demelier <markand@malikania.fr>
parents: 110
diff changeset
62
200
0a285d62ace7 windows: initial VS2017 support
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
63 set_target_properties(test-${TEST_NAME} PROPERTIES FOLDER "tests")
0a285d62ace7 windows: initial VS2017 support
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
64
183
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
65 add_test(
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
66 NAME ${TEST_NAME}
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
67 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
68 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
69 )
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
70
183
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
71 target_link_libraries(
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
72 test-${TEST_NAME}
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
73 ${TEST_LIBRARIES}
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
74 Boost::boost
200
0a285d62ace7 windows: initial VS2017 support
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
75 Boost::dynamic_linking
0a285d62ace7 windows: initial VS2017 support
David Demelier <markand@malikania.fr>
parents: 192
diff changeset
76 Boost::disable_autolinking
183
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
77 Boost::unit_test_framework
387f6b0a5420 CMake: remove vera until we get clang-tidy, #903
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
78 )
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 endfunction()