annotate cmake/IrccdSystem.cmake @ 0:1158cffe5a5e

Initial import
author David Demelier <markand@malikania.fr>
date Mon, 08 Feb 2016 16:43:14 +0100
parents
children c67e734c9241
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 # Config.cmake -- CMake build system for irccd
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 # Copyright (c) 2013-2016 David Demelier <markand@malikania.fr>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 # Permission to use, copy, modify, and/or distribute this software for any
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 # purpose with or without fee is hereby granted, provided that the above
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 # copyright notice and this permission notice appear in all copies.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 include(CheckFunctionExists)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 include(CheckIncludeFile)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 include(CheckStructHasMember)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 include(CheckSymbolExists)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 include(CheckTypeSize)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
24
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 # ---------------------------------------------------------
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 # Global compile flags
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 # ---------------------------------------------------------
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
28
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 # Recent versions of CMake has nice C++ feature detection for modern
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 # C++ but they are still a bit buggy so we use this
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 # instead.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 # For GCC, we require at least GCC 5.1
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.1")
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 message(FATAL_ERROR "You need at least GCC 5.1")
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 endif ()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
41
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 set(CMAKE_CXX_FLAGS "-Wall -Wextra -std=c++14 ${CMAKE_CXX_FLAGS}")
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 # LLVM/clang implemented C++14 starting from version 3.4 but the
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 # switch -std=c++14 was not available.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.4")
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 message(FATAL_ERROR "You need at least Clang 3.4")
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 endif ()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
51
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.5")
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 set(CMAKE_CXX_FLAGS "-Wall -Wextra -std=c++1y ${CMAKE_CXX_FLAGS}")
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 else ()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 set(CMAKE_CXX_FLAGS "-Wall -Wextra -std=c++14 ${CMAKE_CXX_FLAGS}")
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 endif ()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 else ()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 message(WARNING "Unsupported ${CMAKE_CXX_COMPILER_ID}, may not build correctly.")
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 endif ()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
60
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 if (WIN32)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 set(CMAKE_CXX_FLAGS "-D_WIN32_WINNT=0x0600 ${CMAKE_CXX_FLAGS}")
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 endif ()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
64
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 if (CMAKE_SIZEOF_VOID_P MATCHES "8")
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 set(IRCCD_64BITS TRUE)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 else ()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 set(IRCCD_64BITS FALSE)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 endif ()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
70
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 # ---------------------------------------------------------
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 # System identification
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 # ---------------------------------------------------------
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
74
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 if (WIN32)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 set(IRCCD_SYSTEM_WINDOWS TRUE)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 elseif (APPLE)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 set(IRCCD_SYSTEM_MAC TRUE)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 elseif (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 set(IRCCD_SYSTEM_FREEBSD TRUE)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 elseif (CMAKE_SYSTEM_NAME MATCHES "NetBSD")
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 set(IRCCD_SYSTEM_NETBSD TRUE)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 elseif (CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 set(IRCCD_SYSTEM_OPENBSD TRUE)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 elseif (CMAKE_SYSTEM_NAME MATCHES "Linux")
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 set(IRCCD_SYSTEM_LINUX TRUE)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 endif ()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
88
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 # ---------------------------------------------------------
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 # Portability requirements
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 # ---------------------------------------------------------
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
92
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 check_type_size(int8_t HAVE_INT8)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 check_type_size(uint8_t HAVE_UINT8)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 check_type_size(int16_t HAVE_INT16)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 check_type_size(uint16_t HAVE_UINT16)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 check_type_size(int32_t HAVE_INT32)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 check_type_size(uint32_t HAVE_UINT32)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 check_type_size(int64_t HAVE_INT64)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 check_type_size(uint64_t HAVE_UINT64)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
101
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 if (NOT HAVE_STDINT_H)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 message("irccd requires stdint.h or cstdint header")
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 endif ()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
105
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 # Where any of these function / feature is required, include the <irccd-config.h> file.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 # The following variables are defined in irccd-config.h
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 # HAVE_ACCESS - True if has access(2) function (and sys/types.h and sys/stat.h),
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 # HAVE_DAEMON - True if daemon(3),
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 # HAVE_GETPID - True if has getpid(2) function (and sys/types.h and unistd.h and grp.h),
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 # HAVE_POPEN - True if has popen(3) function (in stdio.h)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 # HAVE_SETGID - True if has setgid(2) function and getgrnam(3) (and sys/types.h and unistd.h and pwd.h),
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 # HAVE_SETPROGNAME - True if setprogname(3) is available from C library,
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 # HAVE_SETUID - True if has setuid(2) function and getpwnam(3) (and sys/types.h and unistd.h and pwd.h),
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 # HAVE_STAT - True if has stat(2) function (and sys/types.h and sys/stat.h),
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 # HAVE_STAT_ST_DEV - The struct stat has st_dev field,
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 # HAVE_STAT_ST_INO - The struct stat has st_ino field,
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 # HAVE_STAT_ST_NLINK - The struct stat has st_nlink field,
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
122 # HAVE_STAT_ST_UID - The struct stat has st_uid field,
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 # HAVE_STAT_ST_GID - The struct stat has st_gid field,
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
124 # HAVE_STAT_ST_ATIME - The struct stat has st_atime field,
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 # HAVE_STAT_ST_MTIME - The struct stat has st_mtime field,
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 # HAVE_STAT_ST_CTIME - The struct stat has st_ctime field,
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 # HAVE_STAT_ST_SIZE - The struct stat has st_size field,
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 # HAVE_STAT_ST_BLKSIZE - The struct stat has st_blksize field,
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 # HAVE_STAT_ST_BLOCKS - The struct stat has st_blocks field,
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 # HAVE_SYSLOG - True if syslog functions are available (and syslog.h),
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
132
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 # Check for unistd.h
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 check_include_file(unistd.h HAVE_UNISTD_H)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
135
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 # Check for sys/types.h
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 check_include_file(sys/types.h HAVE_SYS_TYPES_H)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
138
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
139 # Check for daemon(3) function, include:
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
140 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 # #include <cstdlib>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 check_function_exists(daemon HAVE_DAEMON)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
143
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 # Check of setprogname(3) function, include:
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
146 # #include <cstdlib>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 check_function_exists(setprogname HAVE_SETPROGNAME)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
148
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 # access() POSIX function
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 # If HAVE_ACCESS is defined, include:
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
153 # #include <unistd.h>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
154 check_function_exists(access HAVE_ACCESS)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
155
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 if (NOT HAVE_UNISTD_H)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 set(HAVE_ACCESS FALSE)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
158 endif ()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
159
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
160 # getpid() function
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
161 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 # If HAVE_GETPID is defined, include:
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
164 # #include <sys/types.h>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
165 # #include <unistd.h>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 check_function_exists(getpid HAVE_GETPID)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
167
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
168 if (NOT HAVE_UNISTD_H OR NOT HAVE_SYS_TYPES_H)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 set(HAVE_GETPID FALSE)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
170 endif ()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
171
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
172 # setgid() function (and getgrnam)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
174 # If HAVE_SETGID is defined, include:
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
175 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 # #include <sys/types.h>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 # #include <unistd.h>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 # #include <grp.h> // only for getgrnam
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 check_include_file(grp.h HAVE_GRP_H)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 check_function_exists(getgrnam HAVE_GETGRNAM)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 check_function_exists(setgid HAVE_SETGID)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
182
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 if (NOT HAVE_UNISTD_H OR NOT HAVE_SYS_TYPES_H OR NOT HAVE_GETGRNAM OR NOT HAVE_GRP_H)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 set(HAVE_SETGID FALSE)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 endif ()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
186
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 # popen() function
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 # If HAVE_POPEN is defined, include;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
190 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 # #include <cstdio>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 check_function_exists(popen HAVE_POPEN)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
193
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 # setuid() function (and getpwnam)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
195 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
196 # If HAVE_SETUID is defined, include:
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
198 # #include <sys/types.h>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 # #include <unistd.h>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
200 # #include <pwd.h> // only for getpwnam
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
201 check_include_file(pwd.h HAVE_PWD_H)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 check_function_exists(getpwnam HAVE_GETPWNAM)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
203 check_function_exists(setuid HAVE_SETUID)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
204
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
205 if (NOT HAVE_UNISTD_H OR NOT HAVE_SYS_TYPES_H OR NOT HAVE_GETPWNAM OR NOT HAVE_PWD_H)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 set(HAVE_SETUID FALSE)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 endif ()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
208
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
209 # stat(2) function
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
210 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 # If HAVE_STAT is defined, include:
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
212 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
213 # #include <sys/types.h>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
214 # #include <sys/stat.h>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
215 check_include_file(sys/stat.h HAVE_SYS_STAT_H)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
216 check_function_exists(stat HAVE_STAT)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
217
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
218 # If the sys/stat.h is not found, we disable stat(2)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
219 if (NOT HAVE_SYS_STAT_H OR NOT HAVE_SYS_TYPES_H)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
220 set(HAVE_STAT FALSE)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
221 endif ()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
222
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
223 # syslog functions
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
224 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
225 # If HAVE_SYSLOG is defined, include:
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
226 #
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
227 # #include <syslog.h>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
228 check_include_file(syslog.h HAVE_SYSLOG_H)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
229 check_function_exists(openlog HAVE_OPENLOG)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
230 check_function_exists(syslog HAVE_SYSLOG)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
231 check_function_exists(closelog HAVE_CLOSELOG)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
232
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
233 if (NOT HAVE_SYSLOG_H OR NOT HAVE_OPENLOG OR NOT HAVE_CLOSELOG)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
234 set(HAVE_SYSLOG FALSE)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
235 endif ()
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
236
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
237 # Check for struct stat fields.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
238 check_struct_has_member("struct stat" st_atime sys/stat.h HAVE_STAT_ST_ATIME)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
239 check_struct_has_member("struct stat" st_blksize sys/stat.h HAVE_STAT_ST_BLKSIZE)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
240 check_struct_has_member("struct stat" st_blocks sys/stat.h HAVE_STAT_ST_BLOCKS)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
241 check_struct_has_member("struct stat" st_ctime sys/stat.h HAVE_STAT_ST_CTIME)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
242 check_struct_has_member("struct stat" st_dev sys/stat.h HAVE_STAT_ST_DEV)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
243 check_struct_has_member("struct stat" st_gid sys/stat.h HAVE_STAT_ST_GID)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
244 check_struct_has_member("struct stat" st_ino sys/stat.h HAVE_STAT_ST_INO)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
245 check_struct_has_member("struct stat" st_mode sys/stat.h HAVE_STAT_ST_MODE)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
246 check_struct_has_member("struct stat" st_mtime sys/stat.h HAVE_STAT_ST_MTIME)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
247 check_struct_has_member("struct stat" st_nlink sys/stat.h HAVE_STAT_ST_NLINK)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
248 check_struct_has_member("struct stat" st_rdev sys/stat.h HAVE_STAT_ST_RDEV)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
249 check_struct_has_member("struct stat" st_size sys/stat.h HAVE_STAT_ST_SIZE)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
250 check_struct_has_member("struct stat" st_uid sys/stat.h HAVE_STAT_ST_UID)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
251
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
252 # Configuration file
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
253 configure_file(
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
254 ${CMAKE_CURRENT_LIST_DIR}/internal/irccd-config.h.in
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
255 ${CMAKE_BINARY_DIR}/irccd-config.h
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
256 )