Mercurial > irccd
annotate cmake/IrccdSystem.cmake @ 732:e53b013c8938
Irccd: server style and cleanup
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 19 Jul 2018 12:54:00 +0200 |
parents | a17de53db29b |
children | 28f493661157 |
rev | line source |
---|---|
0 | 1 # |
2 # Config.cmake -- CMake build system for irccd | |
3 # | |
628
27587ff92a64
Misc: update copyrights
David Demelier <markand@malikania.fr>
parents:
507
diff
changeset
|
4 # Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> |
0 | 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 include(CheckFunctionExists) | |
20 include(CheckIncludeFile) | |
21 include(CheckStructHasMember) | |
22 include(CheckSymbolExists) | |
23 include(CheckTypeSize) | |
24 | |
374
e9adab218027
Misc: various code cleanup
David Demelier <markand@malikania.fr>
parents:
207
diff
changeset
|
25 # |
e9adab218027
Misc: various code cleanup
David Demelier <markand@malikania.fr>
parents:
207
diff
changeset
|
26 # Global compile flags. |
e9adab218027
Misc: various code cleanup
David Demelier <markand@malikania.fr>
parents:
207
diff
changeset
|
27 # ------------------------------------------------------------------- |
e9adab218027
Misc: various code cleanup
David Demelier <markand@malikania.fr>
parents:
207
diff
changeset
|
28 # |
0 | 29 |
30 # | |
31 # Recent versions of CMake has nice C++ feature detection for modern | |
32 # C++ but they are still a bit buggy so we use this | |
33 # instead. | |
34 # | |
35 if (CMAKE_CXX_COMPILER_ID MATCHES "GNU") | |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
36 # |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
37 # For GCC, we require at least GCC 5.1 |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
38 # |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
39 if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.1") |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
40 message(FATAL_ERROR "You need at least GCC 5.1") |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
41 endif () |
0 | 42 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
43 set(CMAKE_CXX_FLAGS "-Wall -Wextra -std=c++14 ${CMAKE_CXX_FLAGS}") |
0 | 44 elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang") |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
45 # |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
46 # LLVM/clang implemented C++14 starting from version 3.4 but the |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
47 # switch -std=c++14 was not available. |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
48 # |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
49 if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.4") |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
50 message(FATAL_ERROR "You need at least Clang 3.4") |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
51 endif () |
0 | 52 |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
53 if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.5") |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
54 set(CMAKE_CXX_FLAGS "-Wall -Wextra -std=c++1y ${CMAKE_CXX_FLAGS}") |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
55 else () |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
56 set(CMAKE_CXX_FLAGS "-Wall -Wextra -std=c++14 ${CMAKE_CXX_FLAGS}") |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
57 endif () |
138
ff26bd33a45d
CMake: improve VS2015 support, #425
David Demelier <markand@malikania.fr>
parents:
137
diff
changeset
|
58 elseif (MSVC14) |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
59 set(CMAKE_C_FLAGS "/DWIN32_LEAN_AND_MEAN /DNOMINMAX /wd4267 /wd4800 /D_CRT_SECURE_NO_WARNINGS ${CMAKE_C_FLAGS}") |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
60 set(CMAKE_CXX_FLAGS "/DWIN32_LEAN_AND_MEAN /DNOMINMAX /wd4267 /wd4800 /D_CRT_SECURE_NO_WARNINGS /EHsc ${CMAKE_CXX_FLAGS}") |
0 | 61 else () |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
62 message(WARNING "Unsupported ${CMAKE_CXX_COMPILER_ID}, may not build correctly.") |
0 | 63 endif () |
64 | |
137
bc291b131f6a
Irccd: make compile on VS2015, #425
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
65 if (MINGW) |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
66 set(CMAKE_CXX_FLAGS "-D_WIN32_WINNT=0x0600 ${CMAKE_CXX_FLAGS}") |
0 | 67 endif () |
68 | |
69 if (CMAKE_SIZEOF_VOID_P MATCHES "8") | |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
70 set(IRCCD_64BITS TRUE) |
0 | 71 else () |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
72 set(IRCCD_64BITS FALSE) |
0 | 73 endif () |
74 | |
374
e9adab218027
Misc: various code cleanup
David Demelier <markand@malikania.fr>
parents:
207
diff
changeset
|
75 # |
e9adab218027
Misc: various code cleanup
David Demelier <markand@malikania.fr>
parents:
207
diff
changeset
|
76 # Portability requirements. |
e9adab218027
Misc: various code cleanup
David Demelier <markand@malikania.fr>
parents:
207
diff
changeset
|
77 # ------------------------------------------------------------------- |
e9adab218027
Misc: various code cleanup
David Demelier <markand@malikania.fr>
parents:
207
diff
changeset
|
78 # |
0 | 79 |
80 check_type_size(int8_t HAVE_INT8) | |
81 check_type_size(uint8_t HAVE_UINT8) | |
82 check_type_size(int16_t HAVE_INT16) | |
83 check_type_size(uint16_t HAVE_UINT16) | |
84 check_type_size(int32_t HAVE_INT32) | |
85 check_type_size(uint32_t HAVE_UINT32) | |
86 check_type_size(int64_t HAVE_INT64) | |
87 check_type_size(uint64_t HAVE_UINT64) | |
88 | |
89 if (NOT HAVE_STDINT_H) | |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
90 message("irccd requires stdint.h or cstdint header") |
0 | 91 endif () |
92 | |
93 # | |
84
c67e734c9241
CMake: rename irccd-config.h to irccd/sysconfig.h, #452
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
94 # Where any of these function / feature is required, include the <irccd/sysconfig.h> file. |
0 | 95 # |
84
c67e734c9241
CMake: rename irccd-config.h to irccd/sysconfig.h, #452
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
96 # The following variables are defined in irccd/sysconfig.h |
0 | 97 # |
507
65e80d258b34
Irccd: use system username, closes #562
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
98 # HAVE_GETLOGIN True if getlogin(3) function (and unistd.h) |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
99 # HAVE_POPEN True if has popen(3) function (in stdio.h) |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
100 # HAVE_SETPROGNAME True if setprogname(3) is available from C library, |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
101 # HAVE_STAT True if has stat(2) function (and sys/types.h and sys/stat.h), |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
102 # HAVE_STAT_ST_DEV The struct stat has st_dev field, |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
103 # HAVE_STAT_ST_INO The struct stat has st_ino field, |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
104 # HAVE_STAT_ST_NLINK The struct stat has st_nlink field, |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
105 # HAVE_STAT_ST_UID The struct stat has st_uid field, |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
106 # HAVE_STAT_ST_GID The struct stat has st_gid field, |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
107 # HAVE_STAT_ST_ATIME The struct stat has st_atime field, |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
108 # HAVE_STAT_ST_MTIME The struct stat has st_mtime field, |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
109 # HAVE_STAT_ST_CTIME The struct stat has st_ctime field, |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
110 # HAVE_STAT_ST_SIZE The struct stat has st_size field, |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
111 # HAVE_STAT_ST_BLKSIZE The struct stat has st_blksize field, |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
112 # HAVE_STAT_ST_BLOCKS The struct stat has st_blocks field, |
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
113 # HAVE_SYSLOG True if syslog functions are available (and syslog.h), |
0 | 114 # |
115 | |
116 # Check for unistd.h | |
117 check_include_file(unistd.h HAVE_UNISTD_H) | |
118 | |
119 # Check for sys/types.h | |
120 check_include_file(sys/types.h HAVE_SYS_TYPES_H) | |
121 | |
122 # Check of setprogname(3) function, include: | |
123 # | |
124 # #include <cstdlib> | |
125 check_function_exists(setprogname HAVE_SETPROGNAME) | |
126 | |
507
65e80d258b34
Irccd: use system username, closes #562
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
127 # getlogin() function |
65e80d258b34
Irccd: use system username, closes #562
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
128 # |
65e80d258b34
Irccd: use system username, closes #562
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
129 # If HAVE_GETLOGIN is defined, include: |
65e80d258b34
Irccd: use system username, closes #562
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
130 # |
65e80d258b34
Irccd: use system username, closes #562
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
131 # #include <unistd.h> |
700
91bc29e87399
Irccd: use Boost.Predef, closes #805 @1h
David Demelier <markand@malikania.fr>
parents:
659
diff
changeset
|
132 check_function_exists(getlogin HAVE_GETLOGIN) |
507
65e80d258b34
Irccd: use system username, closes #562
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
133 |
700
91bc29e87399
Irccd: use Boost.Predef, closes #805 @1h
David Demelier <markand@malikania.fr>
parents:
659
diff
changeset
|
134 if (NOT HAVE_UNISTD_H) |
91bc29e87399
Irccd: use Boost.Predef, closes #805 @1h
David Demelier <markand@malikania.fr>
parents:
659
diff
changeset
|
135 set(HAVE_GETLOGIN FALSE) |
507
65e80d258b34
Irccd: use system username, closes #562
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
136 endif () |
65e80d258b34
Irccd: use system username, closes #562
David Demelier <markand@malikania.fr>
parents:
486
diff
changeset
|
137 |
0 | 138 # popen() function |
139 # | |
140 # If HAVE_POPEN is defined, include; | |
141 # | |
142 # #include <cstdio> | |
143 check_function_exists(popen HAVE_POPEN) | |
144 | |
145 # stat(2) function | |
146 # | |
147 # If HAVE_STAT is defined, include: | |
148 # | |
149 # #include <sys/types.h> | |
150 # #include <sys/stat.h> | |
151 check_include_file(sys/stat.h HAVE_SYS_STAT_H) | |
152 check_function_exists(stat HAVE_STAT) | |
153 | |
154 # If the sys/stat.h is not found, we disable stat(2) | |
155 if (NOT HAVE_SYS_STAT_H OR NOT HAVE_SYS_TYPES_H) | |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
156 set(HAVE_STAT FALSE) |
0 | 157 endif () |
158 | |
159 # syslog functions | |
160 # | |
161 # If HAVE_SYSLOG is defined, include: | |
162 # | |
163 # #include <syslog.h> | |
164 check_include_file(syslog.h HAVE_SYSLOG_H) | |
165 check_function_exists(openlog HAVE_OPENLOG) | |
166 check_function_exists(syslog HAVE_SYSLOG) | |
167 check_function_exists(closelog HAVE_CLOSELOG) | |
168 | |
169 if (NOT HAVE_SYSLOG_H OR NOT HAVE_OPENLOG OR NOT HAVE_CLOSELOG) | |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
170 set(HAVE_SYSLOG FALSE) |
0 | 171 endif () |
172 | |
173 # Check for struct stat fields. | |
174 check_struct_has_member("struct stat" st_atime sys/stat.h HAVE_STAT_ST_ATIME) | |
175 check_struct_has_member("struct stat" st_blksize sys/stat.h HAVE_STAT_ST_BLKSIZE) | |
176 check_struct_has_member("struct stat" st_blocks sys/stat.h HAVE_STAT_ST_BLOCKS) | |
177 check_struct_has_member("struct stat" st_ctime sys/stat.h HAVE_STAT_ST_CTIME) | |
178 check_struct_has_member("struct stat" st_dev sys/stat.h HAVE_STAT_ST_DEV) | |
179 check_struct_has_member("struct stat" st_gid sys/stat.h HAVE_STAT_ST_GID) | |
180 check_struct_has_member("struct stat" st_ino sys/stat.h HAVE_STAT_ST_INO) | |
181 check_struct_has_member("struct stat" st_mode sys/stat.h HAVE_STAT_ST_MODE) | |
182 check_struct_has_member("struct stat" st_mtime sys/stat.h HAVE_STAT_ST_MTIME) | |
183 check_struct_has_member("struct stat" st_nlink sys/stat.h HAVE_STAT_ST_NLINK) | |
184 check_struct_has_member("struct stat" st_rdev sys/stat.h HAVE_STAT_ST_RDEV) | |
185 check_struct_has_member("struct stat" st_size sys/stat.h HAVE_STAT_ST_SIZE) | |
186 check_struct_has_member("struct stat" st_uid sys/stat.h HAVE_STAT_ST_UID) | |
187 | |
84
c67e734c9241
CMake: rename irccd-config.h to irccd/sysconfig.h, #452
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
188 # Configuration file. |
485
daf3aa8b2ddb
CMake: get rid of fakeroot mechanism, closes #674
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
189 file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/irccd) |
daf3aa8b2ddb
CMake: get rid of fakeroot mechanism, closes #674
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
190 |
0 | 191 configure_file( |
207
6635b9187d71
Irccd: switch to 4 spaces indent, #518
David Demelier <markand@malikania.fr>
parents:
160
diff
changeset
|
192 ${CMAKE_CURRENT_LIST_DIR}/internal/sysconfig.hpp.in |
485
daf3aa8b2ddb
CMake: get rid of fakeroot mechanism, closes #674
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
193 ${CMAKE_BINARY_DIR}/irccd/sysconfig.hpp |
0 | 194 ) |
485
daf3aa8b2ddb
CMake: get rid of fakeroot mechanism, closes #674
David Demelier <markand@malikania.fr>
parents:
394
diff
changeset
|
195 |
486
0b156b82b8c1
Irccd: rework of paths, closes #611
David Demelier <markand@malikania.fr>
parents:
485
diff
changeset
|
196 include_directories( |
0b156b82b8c1
Irccd: rework of paths, closes #611
David Demelier <markand@malikania.fr>
parents:
485
diff
changeset
|
197 ${CMAKE_BINARY_DIR} |
0b156b82b8c1
Irccd: rework of paths, closes #611
David Demelier <markand@malikania.fr>
parents:
485
diff
changeset
|
198 ${CMAKE_BINARY_DIR}/irccd |
0b156b82b8c1
Irccd: rework of paths, closes #611
David Demelier <markand@malikania.fr>
parents:
485
diff
changeset
|
199 ) |
710
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
708
diff
changeset
|
200 |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
708
diff
changeset
|
201 install( |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
708
diff
changeset
|
202 FILES ${CMAKE_BINARY_DIR}/irccd/sysconfig.hpp |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
708
diff
changeset
|
203 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/irccd |
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
708
diff
changeset
|
204 ) |