Mercurial > code
annotate CMakeLists.txt @ 650:ff73f2dd1c82
json_util: split and style
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 23 Oct 2018 21:10:00 +0200 |
parents | 5bd9424a523a |
children | 6739771fba29 |
rev | line source |
---|---|
219 | 1 # |
2 # CMakeLists.txt -- code building for common code | |
3 # | |
628
b327391f6a62
Misc: update copyrights
David Demelier <markand@malikania.fr>
parents:
621
diff
changeset
|
4 # Copyright (c) 2013-2018 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 | |
642
18aa7181e0c3
to_int: use std::optional instead of boost
David Demelier <markand@malikania.fr>
parents:
630
diff
changeset
|
22 set(CMAKE_CXX_STANDARD 17) |
547
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") |
648
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
26 set(CMAKE_CXX_FLAGS "-Wall -Wextra -pedantic ${CMAKE_CXX_FLAGS}") |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
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 |
361 | 30 find_package(Doxygen) |
612
18ec7f4fc3de
Js: new style, closes #685
David Demelier <markand@malikania.fr>
parents:
606
diff
changeset
|
31 find_package(Boost REQUIRED COMPONENTS unit_test_framework) |
361 | 32 |
630
04dffcdb8e1a
json_util: initial import, closes #776 @1h
David Demelier <markand@malikania.fr>
parents:
628
diff
changeset
|
33 add_subdirectory(extern/json) |
04dffcdb8e1a
json_util: initial import, closes #776 @1h
David Demelier <markand@malikania.fr>
parents:
628
diff
changeset
|
34 |
621
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
35 enable_testing() |
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 # |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
38 # code_define_module |
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 # |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
41 # code_define_module( |
648
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
42 # NAME lowercase name |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
43 # SOURCES source files |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
44 # LIBRARIES (Optional) libraries |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
45 # INCLUDES (Optional) include directories |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
46 # FLAGS (Optional) flags |
621
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 # |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
49 # Create a test for the given module. |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
50 # |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
51 # 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
|
52 # |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
53 # 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
|
54 # |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
55 function(code_define_module) |
648
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
56 set(oneValueArgs NAME) |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
57 set(multiValueArgs SOURCES LIBRARIES INCLUDES FLAGS) |
621
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
58 |
648
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
59 cmake_parse_arguments(MOD "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) |
621
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
60 |
648
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
61 if (NOT MOD_NAME) |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
62 message(FATAL_ERROR "Argument NAME is not set") |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
63 endif () |
621
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
64 |
648
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
65 # Create the option for enabling the test. |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
66 string(TOUPPER ${MOD_NAME} optionname) |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
67 option(WITH_${optionname} "Enable ${MOD_NAME}" On) |
621
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
68 |
648
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
69 if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/test/main.cpp AND WITH_${optionname}) |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
70 add_executable(test-${MOD_NAME} ${MOD_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/test/main.cpp) |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
71 set_target_properties( |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
72 test-${MOD_NAME} |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
73 PROPERTIES |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
74 RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
75 RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR} |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
76 RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR} |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
77 RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_BINARY_DIR} |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
78 RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_BINARY_DIR} |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
79 ) |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
80 target_compile_definitions( |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
81 test-${MOD_NAME} |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
82 PRIVATE |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
83 BOOST_TEST_DYN_LINK |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
84 ${MOD_FLAGS} |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
85 ) |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
86 target_include_directories( |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
87 test-${MOD_NAME} |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
88 PRIVATE |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
89 ${CMAKE_CURRENT_SOURCE_DIR} |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
90 ${MOD_INCLUDES} |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
91 ) |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
92 target_link_libraries( |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
93 test-${MOD_NAME} |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
94 Boost::unit_test_framework |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
95 ${MOD_LIBRARIES} |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
96 ) |
621
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
97 |
648
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
98 # Register the test. |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
99 add_test( |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
100 NAME ${MOD_NAME} |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
101 COMMAND test-${MOD_NAME} |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
102 WORKING_DIRECTORY ${CMAKE_BINARY_DIR} |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
103 ) |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
104 endif () |
621
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) |
648
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
108 set(DOXYGEN_PROJECT_NAME code) |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
109 set(DOXYGEN_STRIP_FROM_PATH ${code_SOURCE_DIR}/cpp) |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
110 set(DOXYGEN_FILE_PATTERNS "*.hpp") |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
111 set(DOXYGEN_WARN_NO_PARAMDOC YES) |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
112 set(DOXYGEN_WARN_AS_ERROR YES) |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
113 set(DOXYGEN_QUIET YES) |
644
0a947aec477c
doxygen: use CMake macro
David Demelier <markand@malikania.fr>
parents:
642
diff
changeset
|
114 |
648
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
115 doxygen_add_docs( |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
116 doxygen |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
117 ${code_SOURCE_DIR}/cpp |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
118 WORKING_DIRECTORY ${code_SOURCE_DIR} |
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
119 ) |
361 | 120 |
648
5bd9424a523a
misc: extreme cleanup
David Demelier <markand@malikania.fr>
parents:
644
diff
changeset
|
121 add_custom_target(docs ALL DEPENDS doxygen) |
361 | 122 endif () |
123 | |
621
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
124 add_subdirectory(cpp) |