Mercurial > code
annotate CMakeLists.txt @ 621:ca5912ad2909
Misc: massive refactoring, closes #717
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 20 Oct 2017 12:36:51 +0200 |
parents | 1ae8106369e5 |
children | b327391f6a62 |
rev | line source |
---|---|
219 | 1 # |
2 # CMakeLists.txt -- code building for common code | |
3 # | |
617
266f32919d0a
Misc: update copyright headers, closes #686
David Demelier <markand@malikania.fr>
parents:
616
diff
changeset
|
4 # Copyright (c) 2013-2017 David Demelier <markand@malikania.fr> |
219 | 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 | |
516
cc50a80dc163
CMake: change code_define_module and rename the CMake file
David Demelier <markand@malikania.fr>
parents:
513
diff
changeset
|
19 cmake_minimum_required(VERSION 3.5) |
219 | 20 project(code) |
21 | |
547
ecf5fb9319da
Fs: switch to spaces, add FS_EXPORT
David Demelier <markand@malikania.fr>
parents:
538
diff
changeset
|
22 set(CMAKE_CXX_STANDARD 14) |
ecf5fb9319da
Fs: switch to spaces, add FS_EXPORT
David Demelier <markand@malikania.fr>
parents:
538
diff
changeset
|
23 set(CMAKE_CXX_STANDARD_REQUIRED On) |
ecf5fb9319da
Fs: switch to spaces, add FS_EXPORT
David Demelier <markand@malikania.fr>
parents:
538
diff
changeset
|
24 |
573
db2934ac95c7
Net: fix some warnings
David Demelier <markand@malikania.fr>
parents:
568
diff
changeset
|
25 if (CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang") |
db2934ac95c7
Net: fix some warnings
David Demelier <markand@malikania.fr>
parents:
568
diff
changeset
|
26 set(CMAKE_CXX_FLAGS "-Wall -Wextra -pedantic ${CMAKE_CXX_FLAGS}") |
621
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
27 set(CMAKE_CXX_FLAGS_DEBUG "-Werror ${CMAKE_CXX_FLAGS_DEBUG}") |
573
db2934ac95c7
Net: fix some warnings
David Demelier <markand@malikania.fr>
parents:
568
diff
changeset
|
28 endif () |
db2934ac95c7
Net: fix some warnings
David Demelier <markand@malikania.fr>
parents:
568
diff
changeset
|
29 |
516
cc50a80dc163
CMake: change code_define_module and rename the CMake file
David Demelier <markand@malikania.fr>
parents:
513
diff
changeset
|
30 # Doxygen target. |
361 | 31 find_package(Doxygen) |
612
18ec7f4fc3de
Js: new style, closes #685
David Demelier <markand@malikania.fr>
parents:
606
diff
changeset
|
32 find_package(Boost REQUIRED COMPONENTS unit_test_framework) |
361 | 33 |
621
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
34 enable_testing() |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
35 |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
36 # |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
37 # code_define_module |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
38 # ------------------------------------------------------------------- |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
39 # |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
40 # code_define_module( |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
41 # NAME lowercase name |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
42 # SOURCES source files |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
43 # LIBRARIES (Optional) libraries |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
44 # INCLUDES (Optional) include directories |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
45 # FLAGS (Optional) flags |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
46 # ) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
47 # |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
48 # Create a test for the given module. |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
49 # |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
50 # This macro adds a new option WITH_<uppercase NAME> to test the module. |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
51 # |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
52 # If the module has a file test/main.cpp in its directory, a target test-<NAME> is created. |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
53 # |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
54 function(code_define_module) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
55 set(oneValueArgs NAME) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
56 set(multiValueArgs SOURCES LIBRARIES INCLUDES FLAGS) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
57 |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
58 cmake_parse_arguments(MOD "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
59 |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
60 if (NOT MOD_NAME) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
61 message(FATAL_ERROR "Argument NAME is not set") |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
62 endif () |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
63 |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
64 # Create the option for enabling the test. |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
65 string(TOUPPER ${MOD_NAME} optionname) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
66 option(WITH_${optionname} "Enable ${MOD_NAME}" On) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
67 |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
68 if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/test/main.cpp AND WITH_${optionname}) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
69 # Create test executable. |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
70 add_executable(test-${MOD_NAME} ${MOD_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/test/main.cpp) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
71 set_target_properties( |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
72 test-${MOD_NAME} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
73 PROPERTIES |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
74 RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
75 RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
76 RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
77 RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_BINARY_DIR} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
78 RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_BINARY_DIR} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
79 ) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
80 target_compile_definitions( |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
81 test-${MOD_NAME} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
82 PRIVATE |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
83 BOOST_TEST_DYN_LINK |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
84 ${MOD_FLAGS} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
85 ) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
86 target_include_directories( |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
87 test-${MOD_NAME} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
88 PRIVATE |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
89 ${CMAKE_CURRENT_SOURCE_DIR} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
90 ${MOD_INCLUDES} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
91 ) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
92 target_link_libraries( |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
93 test-${MOD_NAME} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
94 Boost::unit_test_framework |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
95 ${MOD_LIBRARIES} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
96 ) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
97 |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
98 # Register the test. |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
99 add_test( |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
100 NAME ${MOD_NAME} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
101 COMMAND test-${MOD_NAME} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
102 WORKING_DIRECTORY ${CMAKE_BINARY_DIR} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
103 ) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
104 endif () |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
105 endfunction() |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
106 |
361 | 107 if (DOXYGEN_FOUND) |
548
f48bb09bccc7
Misc: huge cleanup, switch to spaces
David Demelier <markand@malikania.fr>
parents:
547
diff
changeset
|
108 configure_file( |
621
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
109 ${CMAKE_SOURCE_DIR}/doxygen/Doxyfile.in |
548
f48bb09bccc7
Misc: huge cleanup, switch to spaces
David Demelier <markand@malikania.fr>
parents:
547
diff
changeset
|
110 ${CMAKE_BINARY_DIR}/Doxyfile |
f48bb09bccc7
Misc: huge cleanup, switch to spaces
David Demelier <markand@malikania.fr>
parents:
547
diff
changeset
|
111 ) |
361 | 112 |
548
f48bb09bccc7
Misc: huge cleanup, switch to spaces
David Demelier <markand@malikania.fr>
parents:
547
diff
changeset
|
113 add_custom_target( |
f48bb09bccc7
Misc: huge cleanup, switch to spaces
David Demelier <markand@malikania.fr>
parents:
547
diff
changeset
|
114 doxygen ALL |
f48bb09bccc7
Misc: huge cleanup, switch to spaces
David Demelier <markand@malikania.fr>
parents:
547
diff
changeset
|
115 COMMENT "Generating doxygen documentation" |
f48bb09bccc7
Misc: huge cleanup, switch to spaces
David Demelier <markand@malikania.fr>
parents:
547
diff
changeset
|
116 COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile |
f48bb09bccc7
Misc: huge cleanup, switch to spaces
David Demelier <markand@malikania.fr>
parents:
547
diff
changeset
|
117 WORKING_DIRECTORY ${CMAKE_BINARY_DIR} |
f48bb09bccc7
Misc: huge cleanup, switch to spaces
David Demelier <markand@malikania.fr>
parents:
547
diff
changeset
|
118 VERBATIM |
f48bb09bccc7
Misc: huge cleanup, switch to spaces
David Demelier <markand@malikania.fr>
parents:
547
diff
changeset
|
119 ) |
361 | 120 endif () |
121 | |
621
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
122 add_subdirectory(cpp) |