Merge branch 'collectd-4.4'
[collectd.git] / src / collectd.h
1 /**
2  * collectd - src/collectd.h
3  * Copyright (C) 2005,2006  Florian octo Forster
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License as published by the
7  * Free Software Foundation; only version 2 of the License is applicable.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License along
15  * with this program; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
17  *
18  * Authors:
19  *   Florian octo Forster <octo at verplant.org>
20  **/
21
22 #ifndef COLLECTD_H
23 #define COLLECTD_H
24
25 #if HAVE_CONFIG_H
26 # include "config.h"
27 #endif
28
29 #include <stdio.h>
30 #if HAVE_SYS_TYPES_H
31 # include <sys/types.h>
32 #endif
33 #if HAVE_SYS_STAT_H
34 # include <sys/stat.h>
35 #endif
36 #if STDC_HEADERS
37 # include <stdlib.h>
38 # include <stddef.h>
39 #else
40 # if HAVE_STDLIB_H
41 #  include <stdlib.h>
42 # endif
43 #endif
44 #if HAVE_STRING_H
45 # if !STDC_HEADERS && HAVE_MEMORY_H
46 #  include <memory.h>
47 # endif
48 # include <string.h>
49 #endif
50 #if HAVE_STRINGS_H
51 # include <strings.h>
52 #endif
53 #if HAVE_INTTYPES_H
54 # include <inttypes.h>
55 #endif
56 #if HAVE_STDINT_H
57 # include <stdint.h>
58 #endif
59 #if HAVE_UNISTD_H
60 # include <unistd.h>
61 #endif
62 #if HAVE_SYS_WAIT_H
63 # include <sys/wait.h>
64 #endif
65 #ifndef WEXITSTATUS
66 # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
67 #endif
68 #ifndef WIFEXITED
69 # define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
70 #endif
71 #if HAVE_SIGNAL_H
72 # include <signal.h>
73 #endif
74 #if HAVE_FCNTL_H
75 # include <fcntl.h>
76 #endif
77 #if HAVE_ERRNO_H
78 # include <errno.h>
79 #endif
80 #if HAVE_LIMITS_H
81 # include <limits.h>
82 #endif
83 #if TIME_WITH_SYS_TIME
84 # include <sys/time.h>
85 # include <time.h>
86 #else
87 # if HAVE_SYS_TIME_H
88 #  include <sys/time.h>
89 # else
90 #  include <time.h>
91 # endif
92 #endif
93
94 #if HAVE_ASSERT_H
95 # include <assert.h>
96 #else
97 # define assert(...) /* nop */
98 #endif
99
100 #if NAN_STATIC_DEFAULT
101 # include <math.h>
102 /* #endif NAN_STATIC_DEFAULT*/
103 #elif NAN_STATIC_ISOC
104 # ifndef __USE_ISOC99
105 #  define DISABLE_ISOC99 1
106 #  define __USE_ISOC99 1
107 # endif /* !defined(__USE_ISOC99) */
108 # include <math.h>
109 # if DISABLE_ISOC99
110 #  undef DISABLE_ISOC99
111 #  undef __USE_ISOC99
112 # endif /* DISABLE_ISOC99 */
113 /* #endif NAN_STATIC_ISOC */
114 #elif NAN_ZERO_ZERO
115 # include <math.h>
116 # ifdef NAN
117 #  undef NAN
118 # endif
119 # define NAN (0.0 / 0.0)
120 # ifndef isnan
121 #  define isnan(f) ((f) != (f))
122 # endif /* !defined(isnan) */
123 #endif /* NAN_ZERO_ZERO */
124
125 /* Try really, really hard to determine endianess. Under NexentaStor 1.0.2 this
126  * information is in <sys/isa_defs.h>, possibly some other Solaris versions do
127  * this too.. */
128 #if HAVE_ENDIAN_H
129 # include <endian.h>
130 #elif HAVE_SYS_ISA_DEFS_H
131 # include <sys/isa_defs.h>
132 #endif
133
134 #ifndef BYTE_ORDER
135 # if defined(_BYTE_ORDER)
136 #  define BYTE_ORDER _BYTE_ORDER
137 # elif defined(__BYTE_ORDER)
138 #  define BYTE_ORDER __BYTE_ORDER
139 # endif
140 #endif
141 #ifndef BIG_ENDIAN
142 # if defined(_BIG_ENDIAN)
143 #  define BIG_ENDIAN _BIG_ENDIAN
144 # elif defined(__BIG_ENDIAN)
145 #  define BIG_ENDIAN __BIG_ENDIAN
146 # endif
147 #endif
148 #ifndef LITTLE_ENDIAN
149 # if defined(_LITTLE_ENDIAN)
150 #  define LITTLE_ENDIAN _LITTLE_ENDIAN
151 # elif defined(__LITTLE_ENDIAN)
152 #  define LITTLE_ENDIAN __LITTLE_ENDIAN
153 # endif
154 #endif
155 #ifndef BYTE_ORDER
156 # if defined(BIG_ENDIAN) && !defined(LITTLE_ENDIAN)
157 #  undef BIG_ENDIAN
158 #  define BIG_ENDIAN 4321
159 #  define LITTLE_ENDIAN 1234
160 #  define BYTE_ORDER BIG_ENDIAN
161 # elif !defined(BIG_ENDIAN) && defined(LITTLE_ENDIAN)
162 #  undef LITTLE_ENDIAN
163 #  define BIG_ENDIAN 4321
164 #  define LITTLE_ENDIAN 1234
165 #  define BYTE_ORDER LITTLE_ENDIAN
166 # endif
167 #endif
168 #if !defined(BYTE_ORDER) || !defined(BIG_ENDIAN)
169 # error "Cannot determine byte order"
170 #endif
171
172 #if HAVE_DIRENT_H
173 # include <dirent.h>
174 # define NAMLEN(dirent) strlen((dirent)->d_name)
175 #else
176 # define dirent direct
177 # define NAMLEN(dirent) (dirent)->d_namlen
178 # if HAVE_SYS_NDIR_H
179 #  include <sys/ndir.h>
180 # endif
181 # if HAVE_SYS_DIR_H
182 #  include <sys/dir.h>
183 # endif
184 # if HAVE_NDIR_H
185 #  include <ndir.h>
186 # endif
187 #endif
188
189 #if HAVE_STDARG_H
190 # include <stdarg.h>
191 #endif
192 #if HAVE_CTYPE_H
193 # include <ctype.h>
194 #endif
195 #if HAVE_SYS_PARAM_H
196 # include <sys/param.h>
197 #endif
198
199 #if HAVE_KSTAT_H
200 # include <kstat.h>
201 #endif
202
203 #if HAVE_PTH_H
204 # include <pth.h>
205 #endif
206 #if HAVE_SENSORS_SENSORS_H
207 # include <sensors/sensors.h>
208 #endif
209
210 #ifndef PACKAGE_NAME
211 #define PACKAGE_NAME "collectd"
212 #endif
213
214 #ifndef PREFIX
215 #define PREFIX "/opt/" PACKAGE_NAME
216 #endif
217
218 #ifndef SYSCONFDIR
219 #define SYSCONFDIR PREFIX "/etc"
220 #endif
221
222 #ifndef CONFIGFILE
223 #define CONFIGFILE SYSCONFDIR"/collectd.conf"
224 #endif
225
226 #ifndef LOCALSTATEDIR
227 #define LOCALSTATEDIR PREFIX "/var"
228 #endif
229
230 #ifndef PKGLOCALSTATEDIR
231 #define PKGLOCALSTATEDIR PREFIX "/var/lib/" PACKAGE_NAME
232 #endif
233
234 #ifndef PIDFILE
235 #define PIDFILE PREFIX "/var/run/" PACKAGE_NAME ".pid"
236 #endif
237
238 #ifndef PLUGINDIR
239 #define PLUGINDIR PREFIX "/lib/" PACKAGE_NAME
240 #endif
241
242 #ifndef COLLECTD_GRP_NAME
243 # define COLLECTD_GRP_NAME "collectd"
244 #endif
245
246 #define STATIC_ARRAY_LEN(array) (sizeof (array) / sizeof ((array)[0]))
247
248 /* Remove GNU specific __attribute__ settings when using another compiler */
249 #if !__GNUC__
250 # define __attribute__(x) /**/
251 #endif
252
253 extern char hostname_g[];
254 extern int  interval_g;
255
256 #endif /* COLLECTD_H */