1dnl 2dnl Zabbix 3dnl Copyright (C) 2001-2021 Zabbix SIA 4dnl 5dnl This program is free software; you can redistribute it and/or modify 6dnl it under the terms of the GNU General Public License as published by 7dnl the Free Software Foundation; either version 2 of the License, or 8dnl (at your option) any later version. 9dnl 10dnl This program is distributed in the hope that it will be useful, 11dnl but WITHOUT ANY WARRANTY; without even the implied warranty of 12dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13dnl GNU General Public License for more details. 14dnl 15dnl You should have received a copy of the GNU General Public License 16dnl along with this program; if not, write to the Free Software 17dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18dnl 19 20dnl Process this file with autoconf to produce a configure script. 21 22AC_INIT([Zabbix],[5.0.19]) 23AC_CONFIG_SRCDIR(src/zabbix_server/server.c) 24AM_INIT_AUTOMAKE([subdir-objects filename-length-max=99]) 25 26AC_MSG_NOTICE([Configuring $PACKAGE_NAME $PACKAGE_VERSION]) 27 28AC_PROG_MAKE_SET 29 30AM_CONFIG_HEADER(include/config.h) 31 32AC_CANONICAL_HOST 33 34dnl ***************************************************************** 35dnl * * 36dnl * Checks for programs * 37dnl * * 38dnl ***************************************************************** 39 40AC_PROG_CC([cc c99 gcc clang]) 41AM_PROG_CC_C_O 42 43dnl ***************************************************************** 44dnl * * 45dnl * Checks for header files * 46dnl * * 47dnl ***************************************************************** 48 49AC_HEADER_STDC 50AC_CHECK_HEADERS(stdio.h stdlib.h string.h unistd.h netdb.h signal.h \ 51 syslog.h time.h errno.h sys/types.h sys/stat.h netinet/in.h \ 52 math.h sys/socket.h dirent.h ctype.h \ 53 mtent.h fcntl.h sys/param.h arpa/inet.h \ 54 sys/vfs.h sys/pstat.h sys/sysinfo.h sys/statvfs.h sys/statfs.h \ 55 sys/socket.h sys/loadavg.h arpa/inet.h \ 56 sys/vmmeter.h strings.h vm/vm_param.h \ 57 sys/time.h kstat.h sys/syscall.h sys/sysmacros.h \ 58 stdint.h mach/host_info.h mach/mach_host.h knlist.h pwd.h \ 59 sys/var.h arpa/nameser.h assert.h sys/dkstat.h sys/disk.h sys/sched.h \ 60 zone.h nlist.h kvm.h linux/kernel.h procinfo.h sys/dk.h \ 61 sys/resource.h pthread.h windows.h process.h conio.h sys/wait.h \ 62 stdarg.h winsock2.h pdh.h psapi.h sys/sem.h sys/ipc.h sys/shm.h Winldap.h \ 63 Winber.h lber.h ws2tcpip.h inttypes.h sys/file.h grp.h \ 64 execinfo.h sys/systemcfg.h sys/mnttab.h mntent.h sys/times.h \ 65 dlfcn.h sys/utsname.h sys/un.h sys/protosw.h stddef.h limits.h float.h) 66AC_CHECK_HEADERS(resolv.h, [], [], [ 67#ifdef HAVE_SYS_TYPES_H 68# include <sys/types.h> 69#endif 70#ifdef HAVE_NETINET_IN_H 71# include <netinet/in.h> 72#endif 73#ifdef HAVE_ARPA_NAMESER_H 74# include <arpa/nameser.h> 75#endif 76#ifdef HAVE_NETDB_H 77# include <netdb.h> 78#endif 79]) 80AC_CHECK_HEADERS(net/if.h net/if_mib.h, [], [], [ 81#include <stdio.h> 82#ifdef STDC_HEADERS 83# include <stdlib.h> 84# include <stddef.h> 85#else 86# ifdef HAVE_STDLIB_H 87# include <stdlib.h> 88# endif 89#endif 90#ifdef HAVE_SYS_TYPES_H 91# include <sys/types.h> 92#endif 93#ifdef HAVE_SYS_SOCKET_H 94# include <sys/socket.h> 95#endif 96/* for net/if_mib.h */ 97#ifdef HAVE_NET_IF_H 98# include <net/if.h> 99#endif 100]) 101 102AC_MSG_CHECKING(whether compiler supports -Werror=cpp) 103checked_werror_cpp_CFLAGS="" 104saved_CFLAGS="$CFLAGS" 105CFLAGS="$CFLAGS -Werror=cpp" 106AC_TRY_COMPILE(,[ 107 void f() {}; 108],checked_werror_cpp_CFLAGS="-Werror=cpp" 109 AC_MSG_RESULT(yes), 110 AC_MSG_RESULT(no) 111) 112CFLAGS="$saved_CFLAGS" 113 114saved_CFLAGS="$CFLAGS" 115CFLAGS="$checked_werror_cpp_CFLAGS $CFLAGS" 116AC_CHECK_HEADERS(sys/mount.h sys/proc.h sys/sysctl.h sys/user.h, [], [], [ 117#ifdef HAVE_SYS_TYPES_H 118# include <sys/types.h> 119#endif 120#ifdef HAVE_SYS_PARAM_H 121# include <sys/param.h> 122#endif 123]) 124CFLAGS="$saved_CFLAGS" 125 126AC_CHECK_HEADERS(sys/swap.h, [], [], [ 127#ifdef HAVE_SYS_PARAM_H 128# include <sys/param.h> 129#endif 130]) 131AC_CHECK_HEADERS(sys/ucontext.h, [], [], [ 132#ifdef HAVE_SIGNAL_H 133# include <signal.h> 134#endif 135]) 136AC_CHECK_HEADERS(devstat.h, [], [], [ 137#ifdef HAVE_SYS_DKSTAT_H 138# include <sys/dkstat.h> 139#endif 140]) 141AC_CHECK_HEADERS(linux/netlink.h, [ 142 AC_CHECK_HEADERS(linux/inet_diag.h, [ 143 AC_DEFINE([HAVE_INET_DIAG], 1, [Define to 1 if you have NETLINK INET_DIAG support.]) 144 ]) 145], [], [ 146#ifdef HAVE_SYS_SOCKET_H 147# include <sys/socket.h> 148#endif 149]) 150AC_CHECK_HEADERS(libperfstat.h, [], [], [ 151#ifdef HAVE_SYS_PROTOSW_H 152# include <sys/protosw.h> 153#endif 154]) 155 156dnl ***************************************************************** 157dnl * * 158dnl * Checks for libraries * 159dnl * * 160dnl ***************************************************************** 161 162AC_SEARCH_LIBS(socket, socket) 163AC_SEARCH_LIBS(kstat_open, kstat) 164AC_SEARCH_LIBS(gethostbyname, nsl) 165AC_SEARCH_LIBS(clock_gettime, rt) 166AC_SEARCH_LIBS(dlopen, dl) 167 168dnl AIX 169AC_SEARCH_LIBS(perfstat_memory_total, perfstat, [AC_DEFINE([HAVE_LIBPERFSTAT], 1, [Define to 1 if you have the 'libperfstat' library (-lperfstat)])]) 170AC_SEARCH_LIBS(devstat_getdevs, devstat, [AC_DEFINE([HAVE_LIBDEVSTAT], 1, [Define to 1 if you have the 'libdevstat' library (-ldevstat)])]) 171AC_SEARCH_LIBS(getdevs, devstat, [AC_DEFINE([HAVE_LIBDEVSTAT], 1, [Define to 1 if you have the 'libdevstat' library (-ldevstat)])]) 172 173dnl on FreeBSD we have to link with -lexecinfo to get backtraces 174AC_SEARCH_LIBS(backtrace_symbols, execinfo, [AC_DEFINE([HAVE_LIBEXECINFO], 1, [Define to 1 if you have the 'libexecinfo' library (-lexecinfo)])]) 175 176AC_CHECK_LIB(m, main) 177AC_CHECK_LIB(kvm, main) 178 179dnl check for DNS lookup functions 180found_resolv="no" 181LIBRESOLV_CHECK_CONFIG([no]) 182if test "x$found_resolv" != "xyes"; then 183 AC_MSG_ERROR([Unable to do DNS lookups (libresolv check failed)]) 184fi 185LIBS="${LIBS} ${RESOLV_LIBS}" 186 187dnl ***************************************************************** 188dnl * * 189dnl * Checks for type definitions and structures * 190dnl * * 191dnl ***************************************************************** 192 193dnl large file support 194largefile=yes 195 196dnl disable large file support on 32-bit Solaris as it's incompatible with procfs and swapctl 197case "${host_os}" in 198 solaris*) 199 largefile=no 200 ;; 201esac 202 203if test "x$largefile" = "xyes"; then 204 AC_SYS_LARGEFILE 205fi 206 207AC_C_CONST 208AC_TYPE_PID_T 209 210AC_MSG_CHECKING(for socklen_t) 211AC_TRY_COMPILE([ 212#include <sys/types.h> 213#include <unistd.h> 214#include <sys/socket.h> 215],[socklen_t s;], 216AC_MSG_RESULT(yes), 217[AC_DEFINE(socklen_t, int, [Define socklen_t type.]) 218AC_MSG_RESULT(no)]) 219 220AC_MSG_CHECKING(for actual socklen_t parameter type in socket functions) 221zbx_socklen_t= 222for arg2 in "struct sockaddr" void; do 223 for arg3 in socklen_t size_t int; do 224 AC_TRY_COMPILE([ 225#ifdef HAVE_SYS_TYPES_H 226# include <sys/types.h> 227#endif 228#ifdef HAVE_SYS_SOCKET_H 229# include <sys/socket.h> 230#endif 231 extern int getpeername(int sockfd, $arg2 *addr, $arg3 *addrlen); 232 ],[ 233 $arg3 addrlen; 234 getpeername(0, 0, &addrlen); 235 ],[ 236 zbx_socklen_t="$arg3" 237 break 2 238 ]) 239 done 240done 241if test "x$zbx_socklen_t" != "x"; then 242 AC_MSG_RESULT($zbx_socklen_t) 243 AC_DEFINE_UNQUOTED(ZBX_SOCKLEN_T, $zbx_socklen_t, [Define actual socklen_t parameter type in socket functions.]) 244else 245 AC_MSG_RESULT(leaving undefined) 246fi 247 248AC_MSG_CHECKING(for integer field name in union sigval of struct siginfo_t) 249zbx_sival_int= 250for field in sival_int sigval_int; do 251 AC_TRY_COMPILE([ 252#ifdef HAVE_SIGNAL_H 253# include <signal.h> 254#endif 255 ],[ 256 siginfo_t siginfo; 257 siginfo.si_value.$field = 0; 258 ],[ 259 zbx_sival_int="$field" 260 break 261 ]) 262done 263if test "x$zbx_sival_int" != "x"; then 264 AC_MSG_RESULT($zbx_sival_int) 265 AC_DEFINE_UNQUOTED(ZBX_SIVAL_INT, $zbx_sival_int, [Define integer field name in union 'sigval' of struct 'siginfo_t']) 266else 267 AC_MSG_ERROR(Unable to find integer field name in union sigval of struct siginfo_t) 268fi 269 270AC_MSG_CHECKING(for res_ninit) 271AC_TRY_LINK( 272[ 273#ifdef HAVE_SYS_TYPES_H 274# include <sys/types.h> 275#endif 276#ifdef HAVE_NETINET_IN_H 277# include <netinet/in.h> 278#endif 279#ifdef HAVE_ARPA_NAMESER_H 280# include <arpa/nameser.h> 281#endif 282#ifdef HAVE_RESOLV_H 283# include <resolv.h> 284#endif 285#ifndef C_IN 286# define C_IN ns_c_in 287#endif /* C_IN */ 288#ifndef T_SOA 289# define T_SOA ns_t_soa 290#endif /* T_SOA */ 291], 292[ 293 struct __res_state res_state_local; 294 295 res_ninit(&res_state_local); 296], 297AC_DEFINE(HAVE_RES_NINIT,1,[Define to 1 if 'res_ninit' exists.]) 298AC_MSG_RESULT(yes), 299AC_MSG_RESULT(no)) 300 301AC_MSG_CHECKING(for res_ndestroy) 302AC_TRY_LINK( 303[ 304#ifdef HAVE_SYS_TYPES_H 305# include <sys/types.h> 306#endif 307#ifdef HAVE_NETINET_IN_H 308# include <netinet/in.h> 309#endif 310#ifdef HAVE_ARPA_NAMESER_H 311# include <arpa/nameser.h> 312#endif 313#ifdef HAVE_RESOLV_H 314# include <resolv.h> 315#endif 316#ifndef C_IN 317# define C_IN ns_c_in 318#endif /* C_IN */ 319#ifndef T_SOA 320# define T_SOA ns_t_soa 321#endif /* T_SOA */ 322], 323[ 324 struct __res_state res_state_local; 325 326 res_ninit(&res_state_local); 327 res_ndestroy(&res_state_local); 328], 329AC_DEFINE(HAVE_RES_NDESTROY,1,[Define to 1 if 'res_ndestroy' exists.]) 330AC_MSG_RESULT(yes), 331AC_MSG_RESULT(no)) 332 333AC_MSG_CHECKING(for _res._u._ext.nsaddrs[]) 334AC_TRY_LINK( 335[ 336#ifdef HAVE_SYS_TYPES_H 337# include <sys/types.h> 338#endif 339#ifdef HAVE_NETINET_IN_H 340# include <netinet/in.h> 341#endif 342#ifdef HAVE_ARPA_NAMESER_H 343# include <arpa/nameser.h> 344#endif 345#ifdef HAVE_RESOLV_H 346# include <resolv.h> 347#endif 348#ifndef C_IN 349# define C_IN ns_c_in 350#endif /* C_IN */ 351#ifndef T_SOA 352# define T_SOA ns_t_soa 353#endif /* T_SOA */ 354], 355[ 356 struct sockaddr_in6 *sockaddrin6; 357 358 sockaddrin6 = _res._u._ext.nsaddrs[0]; 359], 360AC_DEFINE(HAVE_RES_U_EXT,1,[Define to 1 if '_res._u._ext.nsaddrs[]' exists. /Linux/]) 361AC_MSG_RESULT(yes), 362AC_MSG_RESULT(no)) 363 364AC_MSG_CHECKING(for _res._u._ext.ext) 365AC_TRY_LINK( 366[ 367#ifdef HAVE_SYS_TYPES_H 368# include <sys/types.h> 369#endif 370#ifdef HAVE_NETINET_IN_H 371# include <netinet/in.h> 372#endif 373#ifdef HAVE_ARPA_NAMESER_H 374# include <arpa/nameser.h> 375#endif 376#ifdef HAVE_RESOLV_H 377# include <resolv.h> 378#endif 379#ifndef C_IN 380# define C_IN ns_c_in 381#endif /* C_IN */ 382#ifndef T_SOA 383# define T_SOA ns_t_soa 384#endif /* T_SOA */ 385], 386[ 387 struct __res_state_ext *ext; 388 389 ext = _res._u._ext.ext; 390], 391AC_DEFINE(HAVE_RES_U_EXT_EXT,1,[Define to 1 if '_res._u._ext.ext' exists. /BSD/]) 392AC_MSG_RESULT(yes), 393AC_MSG_RESULT(no)) 394 395AC_MSG_CHECKING(for _res._ext.ext.nsaddrs[]) 396AC_TRY_LINK( 397[ 398#ifdef HAVE_SYS_TYPES_H 399# include <sys/types.h> 400#endif 401#ifdef HAVE_NETINET_IN_H 402# include <netinet/in.h> 403#endif 404#ifdef HAVE_ARPA_NAMESER_H 405# include <arpa/nameser.h> 406#endif 407#ifdef HAVE_RESOLV_H 408# include <resolv.h> 409#endif 410#ifndef C_IN 411# define C_IN ns_c_in 412#endif /* C_IN */ 413#ifndef T_SOA 414# define T_SOA ns_t_soa 415#endif /* T_SOA */ 416], 417[ 418 union res_sockaddr_union *na; 419 420 na = &_res._ext.ext.nsaddrs[0]; 421], 422AC_DEFINE(HAVE_RES_EXT_EXT,1,[Define to 1 if '_res._ext.ext.nsaddrs[]' exists. /AIX/]) 423AC_MSG_RESULT(yes), 424AC_MSG_RESULT(no)) 425 426AC_MSG_CHECKING(for struct sockaddr_in6.sin6_len) 427AC_TRY_LINK( 428[ 429#ifdef HAVE_SYS_TYPES_H 430# include <sys/types.h> 431#endif 432#ifdef HAVE_NETINET_IN_H 433# include <netinet/in.h> 434#endif 435#ifdef HAVE_ARPA_NAMESER_H 436# include <arpa/nameser.h> 437#endif 438#ifdef HAVE_RESOLV_H 439# include <resolv.h> 440#endif 441#ifndef C_IN 442# define C_IN ns_c_in 443#endif /* C_IN */ 444#ifndef T_SOA 445# define T_SOA ns_t_soa 446#endif /* T_SOA */ 447], 448[ 449 struct sockaddr_in6 sin6; 450 unsigned int len; 451 452 len = sin6.sin6_len; 453], 454AC_DEFINE(HAVE_RES_SIN6_LEN,1,[Define to 1 if 'sockaddr_in6.sin6_len' exists. /BSD/]) 455AC_MSG_RESULT(yes), 456AC_MSG_RESULT(no)) 457 458AC_MSG_CHECKING(for union semun) 459AC_TRY_COMPILE( 460[ 461#include <sys/types.h> 462#include <sys/ipc.h> 463#include <sys/sem.h> 464], 465[union semun foo;], 466AC_DEFINE(HAVE_SEMUN, 1, [Define to 1 if union 'semun' exists.]) 467AC_MSG_RESULT(yes), 468AC_MSG_RESULT(no)) 469 470AC_MSG_CHECKING(for struct swaptable in sys/swap.h) 471AC_TRY_COMPILE( 472[ 473#include <stdlib.h> 474#include <sys/types.h> 475#include <sys/syscall.h> 476#include <sys/swap.h> 477 478#ifndef NULL 479#define NULL (void *)0 480#endif 481], 482[ 483 register int cnt, i; 484 register int t, f; 485 struct swaptable *swt; 486 struct swapent *ste; 487 static char path[256]; 488 489 /* get total number of swap entries */ 490 cnt = swapctl(SC_GETNSWP, 0); 491 492 /* allocate enough space to hold count + n swapents */ 493 swt = (struct swaptable *)malloc(sizeof(int) + 494 cnt * sizeof(struct swapent)); 495 if (swt == NULL) 496 { 497 return; 498 } 499 swt->swt_n = cnt; 500 501 /* fill in ste_path pointers: we do not care about the paths, so we 502point 503 them all to the same buffer */ 504 ste = &(swt->swt_ent[0]); 505 i = cnt; 506 while (--i >= 0) 507 { 508 ste++->ste_path = path; 509 } 510 511 /* grab all swap info */ 512 swapctl(SC_LIST, swt); 513 514 /* walk through the structs and sum up the fields */ 515 t = f = 0; 516 ste = &(swt->swt_ent[0]); 517 i = cnt; 518 while (--i >= 0) 519 { 520 /* do not count slots being deleted */ 521 if (!(ste->ste_flags & ST_INDEL) && 522 !(ste->ste_flags & ST_DOINGDEL)) 523 { 524 t += ste->ste_pages; 525 f += ste->ste_free; 526 } ste++; 527 } 528 529 /* fill in the results */ 530 free(swt); 531 532], 533AC_DEFINE(HAVE_SYS_SWAP_SWAPTABLE,1,[Define to 1 if struct 'swaptable' exists.]) 534AC_MSG_RESULT(yes), 535AC_MSG_RESULT(no)) 536 537AC_MSG_CHECKING(for struct sensordev in sys/sensors.h) 538AC_TRY_COMPILE([ 539#include <stdlib.h> 540#include <sys/queue.h> 541#include <sys/sensors.h>], 542[struct sensordev sensordev; 543sensordev.xname[0]='\0'; 544sensordev.maxnumt[0]=0; 545], 546AC_DEFINE(HAVE_SENSORDEV,1,[Define to 1 if struct 'sensordev' exists.]) 547AC_MSG_RESULT(yes), 548AC_MSG_RESULT(no)) 549 550AC_MSG_CHECKING(for struct statvfs64 in sys/statvfs.h) 551AC_TRY_COMPILE( 552[ 553#ifdef HAVE_SYS_TYPES_H 554# include <sys/types.h> 555#endif 556#ifdef HAVE_SYS_STATVFS_H 557# include <sys/statvfs.h> 558#endif 559], 560[ 561 struct statvfs64 s; 562 s.f_frsize = s.f_blocks = s.f_bfree = s.f_bavail = 0; 563 statvfs64("/", &s); 564], 565AC_DEFINE(HAVE_SYS_STATVFS64, 1, [Define to 1 if struct 'statvfs64' exists.]) 566AC_MSG_RESULT(yes), 567AC_MSG_RESULT(no)) 568 569AC_MSG_CHECKING(for struct statfs64 in sys/statfs.h) 570AC_TRY_COMPILE( 571[ 572#ifdef HAVE_SYS_TYPES_H 573# include <sys/types.h> 574#endif 575#ifdef HAVE_SYS_STATFS_H 576# include <sys/statfs.h> 577#endif 578], 579[ 580 struct statfs64 s; 581 s.f_bsize = s.f_blocks = s.f_bfree = s.f_bavail = 0; 582 statfs64("/", &s); 583], 584AC_DEFINE(HAVE_SYS_STATFS64, 1, [Define to 1 if struct 'statfs64' exists.]) 585AC_MSG_RESULT(yes), 586AC_MSG_RESULT(no)) 587 588AC_MSG_CHECKING(for field ss_family in struct sockaddr_storage) 589AC_TRY_COMPILE([#include <sys/socket.h>], 590[struct sockaddr_storage ss; 591ss.ss_family = 0; 592], 593AC_DEFINE(HAVE_SOCKADDR_STORAGE_SS_FAMILY, 1, [Define to 1 if 'sockaddr_storage.ss_family' exists.]) 594AC_MSG_RESULT(yes), 595AC_MSG_RESULT(no)) 596 597AC_MSG_CHECKING(for field mem_unit in struct sysinfo) 598AC_TRY_COMPILE([#include <sys/sysinfo.h>], 599[struct sysinfo sysinfo; 600sysinfo.mem_unit=0; 601], 602AC_DEFINE(HAVE_SYSINFO_MEM_UNIT,1,[Define to 1 if 'sysinfo.mem_unit' exists.]) 603AC_MSG_RESULT(yes), 604AC_MSG_RESULT(no)) 605 606AC_MSG_CHECKING(for field freeswap in struct sysinfo) 607AC_TRY_COMPILE([#include <sys/sysinfo.h>], 608[struct sysinfo sysinfo; 609sysinfo.freeswap=0; 610], 611AC_DEFINE(HAVE_SYSINFO_FREESWAP,1,[Define to 1 if 'sysinfo.freeswap' exists.]) 612AC_MSG_RESULT(yes), 613AC_MSG_RESULT(no)) 614 615AC_MSG_CHECKING(for field totalswap in struct sysinfo) 616AC_TRY_COMPILE([#include <sys/sysinfo.h>], 617[struct sysinfo sysinfo; 618sysinfo.totalswap=0; 619], 620AC_DEFINE(HAVE_SYSINFO_TOTALSWAP,1,[Define to 1 if 'sysinfo.totalswap' exists.]) 621AC_MSG_RESULT(yes), 622AC_MSG_RESULT(no)) 623 624AC_MSG_CHECKING(for field totalram in struct sysinfo) 625AC_TRY_COMPILE([#include <sys/sysinfo.h>], 626[struct sysinfo sysinfo; 627sysinfo.totalram=0; 628], 629AC_DEFINE(HAVE_SYSINFO_TOTALRAM,1,[Define to 1 if 'sysinfo.totalram' exists.]) 630AC_MSG_RESULT(yes), 631AC_MSG_RESULT(no)) 632 633AC_MSG_CHECKING(for field sharedram in struct sysinfo) 634AC_TRY_COMPILE([#include <sys/sysinfo.h>], 635[struct sysinfo sysinfo; 636sysinfo.sharedram=0; 637], 638AC_DEFINE(HAVE_SYSINFO_SHAREDRAM,1,[Define to 1 if 'sysinfo.sharedram' exists.]) 639AC_MSG_RESULT(yes), 640AC_MSG_RESULT(no)) 641 642AC_MSG_CHECKING(for field bufferram in struct sysinfo) 643AC_TRY_COMPILE([#include <sys/sysinfo.h>], 644[struct sysinfo sysinfo; 645sysinfo.bufferram=0; 646], 647AC_DEFINE(HAVE_SYSINFO_BUFFERRAM,1,[Define to 1 if 'sysinfo.bufferram' exists.]) 648AC_MSG_RESULT(yes), 649AC_MSG_RESULT(no)) 650 651AC_MSG_CHECKING(for field freeram in struct sysinfo) 652AC_TRY_COMPILE([#include <sys/sysinfo.h>], 653[struct sysinfo sysinfo; 654sysinfo.freeram=0; 655], 656AC_DEFINE(HAVE_SYSINFO_FREERAM,1,[Define to 1 if 'sysinfo.freeram' exists.]) 657AC_MSG_RESULT(yes), 658AC_MSG_RESULT(no)) 659 660AC_MSG_CHECKING(for field uptime in struct sysinfo) 661AC_TRY_COMPILE([#include <sys/sysinfo.h>], 662[struct sysinfo sysinfo; 663sysinfo.uptime=0; 664], 665AC_DEFINE(HAVE_SYSINFO_UPTIME,1,[Define to 1 if 'sysinfo.uptime' exists.]) 666AC_MSG_RESULT(yes), 667AC_MSG_RESULT(no)) 668 669AC_MSG_CHECKING(for field procs in struct sysinfo) 670AC_TRY_COMPILE([#include <sys/sysinfo.h>], 671[struct sysinfo sysinfo; 672sysinfo.procs=0; 673], 674AC_DEFINE(HAVE_SYSINFO_PROCS,1,[Define to 1 if 'sysinfo.procs' exists.]) 675AC_MSG_RESULT(yes), 676AC_MSG_RESULT(no)) 677 678AC_MSG_CHECKING(for field tm_gmtoff in struct tm) 679AC_TRY_COMPILE([ 680#ifdef HAVE_SYS_TIME_H 681#include <sys/time.h> 682#endif /* HAVE_SYS_TIME_H */ 683 684#ifdef HAVE_TIME_H 685#include <time.h> 686#endif /* HAVE_TIME_H */ 687], 688[ 689 struct tm tm; 690 tm.tm_gmtoff; 691], 692AC_DEFINE(HAVE_TM_TM_GMTOFF,1,[Define to 1 if 'tm.tm_gmtoff' exists.]) 693AC_MSG_RESULT(yes), 694AC_MSG_RESULT(no)) 695 696AC_MSG_CHECKING(for linker options --start-group/--end-group) 697saved_LDFLAGS="$LDFLAGS" 698LDFLAGS="-Wl,--start-group -Wl,--end-group" 699AC_TRY_LINK([], [], 700HAVE_START_GROUP="yes" 701AC_MSG_RESULT(yes), 702AC_MSG_RESULT(no) 703) 704LDFLAGS="$saved_LDFLAGS" 705 706AC_MSG_CHECKING(for '__thread' compiler support) 707AC_TRY_COMPILE([#include <stdio.h>],[static __thread int a = 0;], 708AC_DEFINE(HAVE_THREAD_LOCAL,1,[Define to 1 if compiler keyword '__thread' supported.]) 709AC_MSG_RESULT(yes), 710AC_MSG_RESULT(no) 711HAVE_THREAD_LOCAL="no") 712 713AC_MSG_CHECKING(for field updates in struct vminfo_t) 714AC_TRY_COMPILE([ 715#include <sys/sysinfo.h> 716], 717[ 718 vminfo_t vminfo; 719 vminfo.updates; 720], 721AC_DEFINE(HAVE_VMINFO_T_UPDATES,1,[Define to 1 if 'vminfo.updates' exists.]) 722AC_MSG_RESULT(yes), 723AC_MSG_RESULT(no)) 724 725dnl ***************************************************************** 726dnl * * 727dnl * Checks for functions * 728dnl * * 729dnl ***************************************************************** 730 731AC_MSG_CHECKING(for function sysconf() in unistd.h) 732AC_TRY_COMPILE( 733[ 734#include <unistd.h> 735], 736[ int i; 737 738 i=sysconf(_SC_PHYS_PAGES)*sysconf(_SC_PHYS_PAGES); 739 i=sysconf(_SC_AVPHYS_PAGES)*sysconf(_SC_PHYS_PAGES); 740], 741AC_DEFINE(HAVE_UNISTD_SYSCONF,1,[Define to 1 if function 'sysconf' exists.]) 742AC_MSG_RESULT(yes), 743AC_MSG_RESULT(no)) 744 745AC_MSG_CHECKING(for function initgroups()) 746AC_TRY_LINK( 747[ 748#include <sys/types.h> 749#include <grp.h> 750], 751[ 752 char *user = "zabbix"; 753 initgroups(user, 0); 754], 755AC_DEFINE(HAVE_FUNCTION_INITGROUPS,1,[Define to 1 if function 'initgroups' exists.]) 756AC_MSG_RESULT(yes), 757AC_MSG_RESULT(no)) 758 759AC_MSG_CHECKING(for functions seteuid() and setegid()) 760AC_TRY_LINK( 761[ 762#include <sys/types.h> 763#include <unistd.h> 764], 765[ 766 seteuid(0); 767 setegid(0); 768], 769AC_DEFINE(HAVE_FUNCTION_SETEUID,1,[Define to 1 if functions 'seteuid' and 'setegid' exist.]) 770AC_MSG_RESULT(yes), 771AC_MSG_RESULT(no)) 772 773AC_MSG_CHECKING(for function setproctitle()) 774AC_TRY_LINK( 775[ 776#include <sys/types.h> 777#include <unistd.h> 778], 779[ 780 setproctitle("Test %d", 1); 781], 782AC_DEFINE(HAVE_FUNCTION_SETPROCTITLE,1,[Define to 1 if function 'setproctitle' exists.]) 783AC_MSG_RESULT(yes), 784AC_MSG_RESULT(no)) 785 786AC_MSG_CHECKING(for function sysctlbyname()) 787AC_TRY_LINK( 788[ 789#ifdef HAVE_SYS_TYPES_H 790#include <sys/types.h> 791#endif /* HAVE_SYS_TYPES_H */ 792 793#ifdef HAVE_SYS_PARAM_H 794#include <sys/param.h> 795#endif /* HAVE_SYS_PARAM_H */ 796 797#include <sys/sysctl.h> 798], 799[ 800 sysctlbyname("", 0, 0, 0, 0); 801], 802AC_DEFINE(HAVE_FUNCTION_SYSCTLBYNAME,1,[Define to 1 if 'sysctlbyname' exists.]) 803AC_MSG_RESULT(yes), 804AC_MSG_RESULT(no)) 805 806AC_MSG_CHECKING(for function sysctl (KERN_BOOTTIME)) 807AC_TRY_COMPILE( 808[ 809#ifdef HAVE_SYS_TYPES_H 810#include <sys/types.h> 811#endif /* HAVE_SYS_TYPES_H */ 812 813#ifdef HAVE_SYS_PARAM_H 814#include <sys/param.h> 815#endif /* HAVE_SYS_PARAM_H */ 816 817#include <sys/sysctl.h> 818#include <unistd.h> 819#include <time.h> 820#include <sys/time.h> 821], 822[ 823 size_t len; 824 struct timeval uptime; 825 int mib[2]; 826 827 mib[0] = CTL_KERN; 828 mib[1] = KERN_BOOTTIME; 829 830 len = sizeof(uptime); 831 sysctl(mib, 2, &uptime, &len, 0, 0); 832], 833AC_DEFINE(HAVE_FUNCTION_SYSCTL_KERN_BOOTTIME,1,[Define to 1 if 'KERN_BOOTTIME' exists.]) 834AC_MSG_RESULT(yes), 835AC_MSG_RESULT(no)) 836 837AC_MSG_CHECKING(for function sysctl (HW_NCPU)) 838AC_TRY_COMPILE( 839[ 840#ifdef HAVE_SYS_TYPES_H 841#include <sys/types.h> 842#endif /* HAVE_SYS_TYPES_H */ 843 844#ifdef HAVE_SYS_PARAM_H 845#include <sys/param.h> 846#endif /* HAVE_SYS_PARAM_H */ 847 848#include <sys/sysctl.h> 849], 850[ 851 size_t len; 852 int mib[2], ncpu; 853 854 mib[0] = CTL_HW; 855 mib[1] = HW_NCPU; 856 857 len = sizeof(ncpu); 858 sysctl(mib, 2, &ncpu, &len, 0, 0); 859], 860AC_DEFINE(HAVE_FUNCTION_SYSCTL_HW_NCPU,1,[Define to 1 if 'HW_NCPU' exists.]) 861AC_MSG_RESULT(yes), 862AC_MSG_RESULT(no)) 863 864AC_MSG_CHECKING(for function sysctl (KERN_MAXFILES)) 865AC_TRY_COMPILE( 866[ 867#ifdef HAVE_SYS_TYPES_H 868#include <sys/types.h> 869#endif /* HAVE_SYS_TYPES_H */ 870 871#ifdef HAVE_SYS_PARAM_H 872#include <sys/param.h> 873#endif /* HAVE_SYS_PARAM_H */ 874 875#include <sys/sysctl.h> 876], 877[ 878 size_t len; 879 int mib[2], maxfiles; 880 881 mib[0] = CTL_KERN; 882 mib[1] = KERN_MAXFILES; 883 884 len = sizeof(maxfiles); 885 sysctl(mib, 2, &maxfiles, &len, 0, 0); 886], 887AC_DEFINE(HAVE_FUNCTION_SYSCTL_KERN_MAXFILES,1,[Define to 1 if 'KERN_MAXFILES' exists.]) 888AC_MSG_RESULT(yes), 889AC_MSG_RESULT(no)) 890 891AC_MSG_CHECKING(for function sysctl (KERN_MAXPROC)) 892AC_TRY_COMPILE( 893[ 894#ifdef HAVE_SYS_TYPES_H 895#include <sys/types.h> 896#endif /* HAVE_SYS_TYPES_H */ 897 898#ifdef HAVE_SYS_PARAM_H 899#include <sys/param.h> 900#endif /* HAVE_SYS_PARAM_H */ 901 902#include <sys/sysctl.h> 903], 904[ 905 size_t len; 906 int mib[2], maxproc; 907 908 mib[0] = CTL_KERN; 909 mib[1] = KERN_MAXPROC; 910 911 len = sizeof(maxproc); 912 sysctl(mib, 2, &maxproc, &len, 0, 0); 913], 914AC_DEFINE(HAVE_FUNCTION_SYSCTL_KERN_MAXPROC,1,[Define to 1 if 'KERN_MAXPROC' exists.]) 915AC_MSG_RESULT(yes), 916AC_MSG_RESULT(no)) 917 918AC_MSG_CHECKING(for function sysctl (KERN_CPTIME,KERN_CPTIME2)) 919AC_TRY_COMPILE( 920[ 921#include <sys/param.h> 922#include <sys/sysctl.h> 923#if defined(HAVE_SYS_DKSTAT_H) 924# include <sys/dkstat.h> 925#elif defined(HAVE_SYS_SCHED_H) 926# include <sys/sched.h> 927#endif 928], 929[ 930size_t sz; 931int i[] = {CP_USER, CP_NICE, CP_SYS, CP_INTR, CP_IDLE}; 932 933{ 934 long states[CPUSTATES]; 935 int mib[2] = {CTL_KERN, KERN_CPTIME}; 936 937 sz = sizeof(states); 938 sysctl(mib, 2, &states, &sz, NULL, 0); 939} 940 941{ 942 u_int64_t states[CPUSTATES]; 943 int mib[3] = {CTL_KERN, KERN_CPTIME2, 0}; 944 945 sz = sizeof(states); 946 sysctl(mib, 3, &states, &sz, NULL, 0); 947} 948], 949AC_DEFINE(HAVE_FUNCTION_SYSCTL_KERN_CPTIME,1,[Define to 1 if 'KERN_CPTIME,KERN_CPTIME2' exists.]) 950AC_MSG_RESULT(yes), 951AC_MSG_RESULT(no)) 952 953AC_MSG_CHECKING(for function clock_gettime in time.h) 954AC_TRY_LINK([ 955#ifdef HAVE_TIME_H 956# include <time.h> 957#elif HAVE_SYS_TIME_H 958# include <sys/time.h> 959#endif /* HAVE_SYS_TIME_H */ 960], 961[struct timespec tp; 962clock_gettime(CLOCK_REALTIME, &tp); 963], 964AC_DEFINE(HAVE_TIME_CLOCK_GETTIME,1,[Define to 1 if function 'clock_gettime' exists.]) 965AC_MSG_RESULT(yes), 966AC_MSG_RESULT(no)) 967 968dnl ***************************************************************** 969dnl * * 970dnl * Checks for macros * 971dnl * * 972dnl ***************************************************************** 973 974AC_MSG_CHECKING(for macro __va_copy() in stdarg.h) 975AC_TRY_COMPILE( 976[ 977#include <stdarg.h> 978], 979[ 980 va_list src,dst; 981 982 __va_copy(dst,src); 983], 984AC_DEFINE(HAVE___VA_COPY,1,[Define to 1 if macro '__va_copy' exists.]) 985AC_MSG_RESULT(yes), 986AC_MSG_RESULT(no)) 987 988AC_MSG_CHECKING(for macro __VA_ARGS__) 989AC_TRY_COMPILE( 990[ 991#define ZBX_CONST_STRING(str) str 992int test(const char *fmt, ...) { return 0; } 993], 994[ 995#define TEST(fmt, ...) test(ZBX_CONST_STRING(fmt), ##__VA_ARGS__) 996TEST("%s","test"); 997TEST("test"); 998], 999AC_DEFINE(HAVE___VA_ARGS__,1,[Define to 1 if macro '__VA_ARGS__' exists.]) 1000AC_MSG_RESULT(yes), 1001AC_MSG_RESULT(no)) 1002 1003dnl ***************************************************************** 1004dnl * * 1005dnl * Checks for library functions * 1006dnl * * 1007dnl ***************************************************************** 1008 1009AC_TYPE_SIGNAL 1010AC_REPLACE_FUNCS(getloadavg) 1011AC_CHECK_FUNCS(hstrerror) 1012AC_CHECK_FUNCS(getenv) 1013AC_CHECK_FUNCS(putenv) 1014AC_CHECK_FUNCS(sigqueue) 1015AC_CHECK_FUNCS(round) 1016 1017dnl ***************************************************************** 1018dnl * * 1019dnl * Checks for file system characteristics * 1020dnl * * 1021dnl ***************************************************************** 1022 1023AC_MSG_CHECKING(for /proc filesystem) 1024if test -d /proc; then 1025 AC_MSG_RESULT(yes) 1026 AC_DEFINE(HAVE_PROC,1,[Define to 1 if '/proc' file system should be used.]) 1027else 1028 AC_MSG_RESULT(no) 1029fi 1030 1031AC_MSG_CHECKING(for file /proc/stat) 1032if test -r /proc/stat; then 1033 AC_MSG_RESULT(yes) 1034 AC_DEFINE(HAVE_PROC_STAT,1,[Define to 1 if file '/proc/stat' should be used.]) 1035else 1036 AC_MSG_RESULT(no) 1037fi 1038 1039AC_MSG_CHECKING(for file /proc/cpuinfo) 1040if test -r /proc/cpuinfo; then 1041 AC_MSG_RESULT(yes) 1042 AC_DEFINE(HAVE_PROC_CPUINFO,1,[Define to 1 if file '/proc/cpuinfo' should be used.]) 1043else 1044 AC_MSG_RESULT(no) 1045fi 1046 1047dnl Solaris 1048AC_MSG_CHECKING(for file /proc/0/psinfo) 1049if test -r /proc/0/psinfo; then 1050 AC_MSG_RESULT(yes) 1051 AC_DEFINE(HAVE_PROC_0_PSINFO,1,[Define to 1 if file '/proc/0/psinfo' should be used.]) 1052else 1053 AC_MSG_RESULT(no) 1054fi 1055 1056AC_MSG_CHECKING(for file /proc/loadavg) 1057if test -r /proc/loadavg; then 1058 AC_MSG_RESULT(yes) 1059 AC_DEFINE(HAVE_PROC_LOADAVG,1,[Define to 1 if file '/proc/loadavg' should be used.]) 1060else 1061 AC_MSG_RESULT(no) 1062fi 1063 1064AC_MSG_CHECKING(for file /proc/net/dev) 1065if test -r /proc/net/dev; then 1066 AC_MSG_RESULT(yes) 1067 AC_DEFINE(HAVE_PROC_NET_DEV,1,[Define to 1 if file '/proc/net/dev' should be used.]) 1068else 1069 AC_MSG_RESULT(no) 1070fi 1071 1072dnl ***************************************************************** 1073dnl * * 1074dnl * Checks for compiler characteristics * 1075dnl * * 1076dnl ***************************************************************** 1077 1078dnl Check for %qu format (FreeBSD 4.x) 1079dnl FreeBSD 4.x does not support %llu 1080AC_MSG_CHECKING(for long long format) 1081AC_TRY_RUN( 1082[ 1083#include <sys/types.h> 1084int main() 1085{ 1086 uint64_t i; 1087 1088 sscanf("200000000010020", "%qu", &i); 1089 1090 if (i == 200000000010020) return 0; 1091 else return -1; 1092} 1093], 1094AC_DEFINE(HAVE_LONG_LONG_QU, 1 ,[Define to 1 if format '%qu' exists.]) 1095AC_MSG_RESULT(yes), 1096AC_MSG_RESULT(no), 1097AC_MSG_RESULT(no)) 1098 1099dnl option -rdynamic is needed for readable backtraces 1100AC_MSG_CHECKING(for -rdynamic linking option) 1101saved_LDFLAGS="$LDFLAGS" 1102LDFLAGS="-rdynamic $LDFLAGS" 1103AC_TRY_LINK([#include <execinfo.h>], 1104[void *bcktrc[6]; 1105(void)backtrace(bcktrc, 6); 1106], 1107LDFLAGS="-rdynamic $saved_LDFLAGS" 1108AC_MSG_RESULT(yes), 1109LDFLAGS="$saved_LDFLAGS" 1110AC_MSG_RESULT(no)) 1111 1112dnl ***************************************************************** 1113dnl * * 1114dnl * Checks for operating systems * 1115dnl * * 1116dnl ***************************************************************** 1117 1118AC_MSG_CHECKING(for libperfstat 5.2.0.40 fileset) 1119AC_TRY_COMPILE([#include <sys/protosw.h> 1120#include <libperfstat.h>], 1121[perfstat_memory_total_t memstats; 1122memstats.virt_active = 0; 1123], 1124AC_DEFINE(HAVE_AIXOSLEVEL_520004,1,[Define to 1 if libperfstat 5.2.0.40 fileset exists.]) 1125AC_MSG_RESULT(yes), 1126AC_MSG_RESULT(no)) 1127 1128AC_MSG_CHECKING(for libperfstat 5.3.0.60 fileset) 1129AC_TRY_COMPILE([#include <sys/protosw.h> 1130#include <libperfstat.h>], 1131[perfstat_partition_total_t lparstats; 1132lparstats.type.b.donate_enabled = 0; 1133lparstats.idle_donated_purr = 0; 1134lparstats.busy_donated_purr = 0; 1135lparstats.idle_stolen_purr = 0; 1136lparstats.busy_stolen_purr = 0; 1137], 1138AC_DEFINE(HAVE_AIXOSLEVEL_530006,1,[Define to 1 if libperfstat 5.3.0.60 fileset exists.]) 1139AC_MSG_RESULT(yes), 1140AC_MSG_RESULT(no)) 1141 1142case "$host_os" in 1143linux*) 1144 ARCH="linux" 1145 ;; 1146aix*) 1147 ARCH="aix" 1148 ;; 1149darwin*|rhapsody*) 1150 ARCH="osx" 1151 AC_DEFINE([MAC_OS_X], 1, [Define to 1 if you are using Mac OS X.]) 1152 ;; 1153*solaris*) 1154 ARCH="solaris" 1155 ;; 1156hpux*) 1157 ARCH="hpux" 1158 ;; 1159freebsd*) 1160 ARCH="freebsd" 1161 ;; 1162netbsd*) 1163 ARCH="netbsd" 1164 ;; 1165osf*) 1166 ARCH="osf" 1167 ;; 1168openbsd*) 1169 ARCH="openbsd" 1170 ;; 1171*) 1172 ARCH="unknown" 1173 ;; 1174esac 1175 1176AC_MSG_CHECKING(for architecture) 1177AC_MSG_RESULT([$ARCH ($host_os)]) 1178 1179if test "x$ARCH" = "xlinux"; then 1180 AC_MSG_CHECKING([for the linux kernel version]) 1181 1182 kernel=`uname -r` 1183 1184 case "${kernel}" in 1185 2.6.*) 1186 AC_MSG_RESULT([2.6 family (${kernel})]) 1187 AC_DEFINE([KERNEL_2_6], 1, [Define to 1 if you are using Linux 2.6.x]) 1188 ;; 1189 2.4.*) 1190 AC_MSG_RESULT([2.4 family (${kernel})]) 1191 AC_DEFINE([KERNEL_2_4], 1, [Define to 1 if you are using Linux 2.4.x]) 1192 ;; 1193 *) 1194 AC_MSG_RESULT([unknown family (${kernel})]) 1195 ;; 1196 esac 1197fi 1198 1199if test "x$ARCH" = "xsolaris"; then 1200 dnl Forcing a 64-bit application for a 64-bit Solaris 1201 dnl A 32-bit program that uses /proc is able to look at 32-bit processes, 1202 dnl but is not able to understand all attributes of a 64-bit process. 1203 AC_MSG_CHECKING(for -m64 compilation flag) 1204 saved_CFLAGS="$CFLAGS" 1205 CFLAGS="-m64" 1206 AC_TRY_RUN( 1207 [int main(void) {return 0;}], 1208 CFLAGS="-m64 $saved_CFLAGS" 1209 AC_MSG_RESULT(yes), 1210 CFLAGS="$saved_CFLAGS" 1211 AC_MSG_RESULT(no)) 1212 CFLAGS="${CFLAGS} -DZBX_OLD_SOLARIS" 1213fi 1214 1215if test "x$ARCH" = "xhpux"; then 1216 dnl Low Level Discovery needs a way to get the list of network 1217 dnl interfaces available on the monitored system. On HP-UX systems 1218 dnl that way depends on the OS version. 1219 hpux_version=${host_os#hpux} 1220 hpux_major=${hpux_version%.*} 1221 hpux_minor=${hpux_version#*.} 1222 1223 AC_DEFINE_UNQUOTED([HPUX_VERSION], $hpux_major$hpux_minor, [Define to HP-UX version]) 1224 1225 dnl This API level is needed so that "utsname.nodename" is not truncated. 1226 AC_MSG_CHECKING(for -D_HPUX_API_LEVEL=20040821 compilation flag) 1227 saved_CFLAGS="$CFLAGS" 1228 CFLAGS="-D_HPUX_API_LEVEL=20040821" 1229 AC_TRY_RUN( 1230[ 1231#ifdef HAVE_DLFCN_H 1232# include <dlfcn.h> 1233#endif 1234#ifdef HAVE_SYS_UTSNAME_H 1235# include <sys/utsname.h> 1236#endif 1237 1238int main(void) 1239{ 1240 void *p1, *p2; 1241 struct utsname name; 1242 1243 /* check that the compiler (e.g., GCC 4.3.0 and above) supports function-level versioning */ 1244 1245 p1 = uname; 1246 p2 = dlsym(RTLD_DEFAULT, "uname{20040821}"); 1247 1248 if (p1 != p2) 1249 return 1; 1250 1251 /* uname() fails with EFAULT on HP-UX systems that were only partially upgraded to this API level */ 1252 1253 return -1 == uname(&name) ? 1 : 0; 1254} 1255], 1256 CFLAGS="-D_HPUX_API_LEVEL=20040821 $saved_CFLAGS" 1257 AC_MSG_RESULT(yes), 1258 CFLAGS="$saved_CFLAGS" 1259 AC_MSG_RESULT(no)) 1260fi 1261 1262AC_DEFINE_UNQUOTED([ARCH], "${ARCH}", [Define to OS name for code managing]) 1263AC_SUBST(ARCH) 1264 1265AC_CHECK_SIZEOF([void *]) 1266 1267dnl ***************************************************************** 1268dnl * * 1269dnl * Checks for options given on the command line * 1270dnl * * 1271dnl ***************************************************************** 1272 1273AC_ARG_ENABLE(static,[ --enable-static Build statically linked binaries], 1274[case "${enableval}" in 1275 yes) 1276 LDFLAGS="${LDFLAGS} -static" 1277 AC_MSG_CHECKING(if static linking is possible) 1278 AC_LINK_IFELSE([AC_LANG_PROGRAM(,)], 1279 [AC_MSG_RESULT([yes]) 1280 static_linking=yes], 1281 [AC_MSG_RESULT([no]) 1282 static_linking=no]) 1283 if test "x$static_linking" = "xno"; then 1284 AC_MSG_ERROR([static linking is not possible on this system]) 1285 fi 1286 ;; 1287 no) ;; 1288 *) AC_MSG_ERROR([bad value ${enableval} for --enable-static]) ;; 1289esac]) 1290 1291AC_ARG_ENABLE(static-libs,[ --enable-static-libs Build statically linked binaries with selected libs from default folders], 1292[case "${enableval}" in 1293 yes) 1294 static_linking_libs=yes 1295 saved_LIBS="$LIBS" 1296 LIBS="${saved_LIBS} -Wl,-bstatic -Wl,-bdynamic" 1297 AC_MSG_CHECKING([if libs static linking with "-Wl,-b" is possible]) 1298 AC_LINK_IFELSE([AC_LANG_PROGRAM(,)], 1299 [AC_MSG_RESULT([yes]) 1300 static_linking_support="-Wl,-b"], 1301 [AC_MSG_RESULT([no]) 1302 static_linking_support=no]) 1303 LIBS="$saved_LIBS" 1304 1305 if test "x$static_linking_support" = "xno"; then 1306 LIBS="${saved_LIBS} -Wl,-Bstatic -Wl,-Bdynamic" 1307 AC_MSG_CHECKING([if libs static linking with "-Wl,-B" is possible]) 1308 AC_LINK_IFELSE([AC_LANG_PROGRAM(,)], 1309 [AC_MSG_RESULT([yes]) 1310 static_linking_support="-Wl,-B"], 1311 [AC_MSG_RESULT([no]) 1312 static_linking_support=no]) 1313 LIBS="$saved_LIBS" 1314 fi 1315 ;; 1316 no) ;; 1317 *) AC_MSG_ERROR([bad value ${enableval} for --enable-static-libs]) ;; 1318esac]) 1319 1320AC_ARG_ENABLE(server,[ --enable-server Turn on build of Zabbix server], 1321[case "${enableval}" in 1322 yes) server=yes ;; 1323 no) server=no ;; 1324 *) AC_MSG_ERROR([bad value ${enableval} for --enable-server]) ;; 1325esac], 1326[server=no]) 1327AM_CONDITIONAL(SERVER, test "x$server" = "xyes") 1328 1329AC_ARG_ENABLE(proxy,[ --enable-proxy Turn on build of Zabbix proxy], 1330[case "${enableval}" in 1331 yes) proxy=yes ;; 1332 no) proxy=no ;; 1333 *) AC_MSG_ERROR([bad value ${enableval} for --enable-proxy]) ;; 1334esac], 1335[proxy=no]) 1336AM_CONDITIONAL(PROXY, test "x$proxy" = "xyes") 1337 1338AC_ARG_ENABLE(agent,[ --enable-agent Turn on build of Zabbix agent and client utilities], 1339[case "${enableval}" in 1340 yes) agent=yes ;; 1341 no) agent=no ;; 1342 *) AC_MSG_ERROR([bad value ${enableval} for --enable-agent]) ;; 1343esac], 1344[agent=no]) 1345AM_CONDITIONAL(AGENT, test "x$agent" = "xyes") 1346 1347AC_ARG_ENABLE(agent2,[ --enable-agent2 Turn on build of Zabbix agent 2], 1348[case "${enableval}" in 1349 yes) agent2=yes ;; 1350 no) agent2=no ;; 1351 *) AC_MSG_ERROR([bad value ${enableval} for --enable-agent2]) ;; 1352esac 1353test "x$agent2" = "xyes" -a "x$HAVE_THREAD_LOCAL" = "xno" && AC_MSG_ERROR([C compiler is not compatible with agent2 assembly]) 1354], 1355[agent2=no]) 1356AM_CONDITIONAL(AGENT2, test "x$agent2" = "xyes") 1357 1358AC_ARG_ENABLE(java,[ --enable-java Turn on build of Zabbix Java gateway], 1359[case "${enableval}" in 1360 yes) java=yes ;; 1361 no) java=no ;; 1362 *) AC_MSG_ERROR([bad value ${enableval} for --enable-java]) ;; 1363esac], 1364[java=no]) 1365AM_CONDITIONAL(JAVA, test "x$java" = "xyes") 1366 1367AC_ARG_ENABLE(ipv6,[ --enable-ipv6 Turn on support of IPv6], 1368[case "${enableval}" in 1369 yes) ipv6=yes ;; 1370 no) ipv6=no ;; 1371 *) AC_MSG_ERROR([bad value ${enableval} for --enable-ipv6]) ;; 1372esac], 1373[ipv6=no]) 1374AM_CONDITIONAL(IPV6, test "x$ipv6" = "xyes") 1375 1376AM_CONDITIONAL([DBSCHEMA], [test -d create]) 1377 1378AM_CONDITIONAL([ZBXCMOCKA], [(test -d tests/) && (test "x$server" = "xyes" || test "x$proxy" = "xyes" || test "x$agent" = "xyes")]) 1379 1380have_db="no" 1381have_unixodbc="no" 1382have_web_monitoring="no" 1383have_snmp="no" 1384have_ipmi="no" 1385have_ipv6="no" 1386have_ssh="no" 1387have_tls="no" 1388 1389 1390if test "x$ipv6" = "xyes"; then 1391 AC_DEFINE(HAVE_IPV6,1,[Define to 1 if IPv6 should be enabled.]) 1392 have_ipv6="yes" 1393fi 1394 1395if test "x$server" = "xyes" || test "x$proxy" = "xyes"; then 1396 1397 1398 dnl Checking for MySQL support 1399 AX_LIB_MYSQL() 1400 if test "x$want_mysql" = "xyes"; then 1401 if test "x$have_db" != "xno"; then 1402 AC_MSG_ERROR([You can configure for only one database.]) 1403 fi 1404 1405 if test "x$found_mysql" = "xyes"; then 1406 have_db="MySQL" 1407 have_multirow_insert="yes" 1408 else 1409 AC_MSG_ERROR([MySQL library not found]) 1410 fi 1411 fi 1412 1413 dnl Checking for Oracle support 1414 AX_LIB_ORACLE_OCI([10.0]) 1415 if test "x$want_oracle_oci" = "xyes"; then 1416 if test "x$have_db" != "xno"; then 1417 AC_MSG_ERROR([You can configure for only one database.]) 1418 fi 1419 1420 if test "x$HAVE_ORACLE_OCI" = "xyes"; then 1421 have_db="Oracle" 1422 1423 ORACLE_CPPFLAGS="$ORACLE_OCI_CFLAGS" 1424 ORACLE_LDFLAGS="$ORACLE_OCI_LDFLAGS" 1425 ORACLE_LIBS="$ORACLE_OCI_LIBS" 1426 1427 AC_DEFINE(HAVE_ORACLE,1,[Define to 1 if Oracle should be enabled.]) 1428 else 1429 AC_MSG_ERROR([Oracle OCI library not found]) 1430 fi 1431 fi 1432 1433 dnl Checking for PostgreSQL support 1434 AX_LIB_POSTGRESQL("9.2") 1435 if test "x$want_postgresql" = "xyes"; then 1436 if test "x$have_db" != "xno"; then 1437 AC_MSG_ERROR([You can configure for only one database.]) 1438 fi 1439 1440 if test "x$found_postgresql" = "xyes"; then 1441 if test "$postgresql_version_check" != "1"; then 1442 AC_MSG_ERROR([PostgreSQL version mismatch]) 1443 fi 1444 1445 have_db="PostgreSQL" 1446 1447 if test "$postgresql_version_number" -ge 8002000; then 1448 have_multirow_insert="yes" 1449 fi 1450 1451 else 1452 AC_MSG_ERROR([PostgreSQL library not found]) 1453 fi 1454 fi 1455 1456 dnl Checking for SQLite3 support 1457 AX_LIB_SQLITE3() 1458 if test "x$want_sqlite3" = "xyes"; then 1459 if test "x$server" = "xyes"; then 1460 AC_MSG_ERROR([SQLite is not supported as a main Zabbix database backend.]) 1461 fi 1462 1463 if test "x$have_db" != "xno"; then 1464 AC_MSG_ERROR([You can configure for only one database.]) 1465 fi 1466 1467 if test "x$found_sqlite3" = "xyes"; then 1468 have_db="SQLite v3.x" 1469 1470 saved_CPPFLAGS="$CPPFLAGS" 1471 saved_LDFLAGS="$LDFLAGS" 1472 1473 CPPFLAGS="$CPPFLAGS $SQLITE3_CPPFLAGS" 1474 LDFLAGS="$LDFLAGS $SQLITE3_LDFLAGS $SQLITE3_LIBS" 1475 1476 AC_MSG_CHECKING([for function sqlite3_open_v2() in sqlite3.h]) 1477 AC_TRY_LINK([#include <sqlite3.h>], 1478 [sqlite3 *conn = 0; 1479 sqlite3_open_v2("dbname", &conn, SQLITE_OPEN_READWRITE, 0); 1480 ], 1481 AC_DEFINE(HAVE_FUNCTION_SQLITE3_OPEN_V2,1,[Define to 1 if function 'sqlite3_open_v2' exists.]) 1482 AC_MSG_RESULT(yes), 1483 AC_MSG_RESULT(no)) 1484 1485 CPPFLAGS="$saved_CPPFLAGS" 1486 LDFLAGS="$saved_LDFLAGS" 1487 else 1488 AC_MSG_ERROR([SQLite3 library not found]) 1489 fi 1490 fi 1491 1492 AC_MSG_CHECKING(for Zabbix server/proxy database selection) 1493 if test "x$have_db" = "xno"; then 1494 AC_MSG_RESULT(error) 1495 AC_MSG_ERROR([No database selected for Zabbix server/proxy. Use --with-mysql or --with-oracle or --with-postgresql or --with-sqlite3.]) 1496 else 1497 AC_MSG_RESULT(ok) 1498 fi 1499 1500 AC_MSG_CHECKING(for multirow insert statements) 1501 if test "x$have_multirow_insert" = "xyes"; then 1502 AC_DEFINE(HAVE_MULTIROW_INSERT,1,[Define to 1 if database supports multirow insert statements.]) 1503 AC_MSG_RESULT(yes) 1504 else 1505 AC_MSG_RESULT(no) 1506 fi 1507 1508 DB_CFLAGS="$MYSQL_CFLAGS $ORACLE_CPPFLAGS $POSTGRESQL_CFLAGS $SQLITE3_CPPFLAGS" 1509 DB_LDFLAGS="$MYSQL_LDFLAGS $ORACLE_LDFLAGS $POSTGRESQL_LDFLAGS $SQLITE3_LDFLAGS" 1510 DB_LIBS="$MYSQL_LIBS $ORACLE_LIBS $POSTGRESQL_LIBS $SQLITE3_LIBS" 1511 1512 AC_SUBST(DB_CFLAGS) 1513 AC_SUBST(DB_LDFLAGS) 1514 AC_SUBST(DB_LIBS) 1515 1516 SERVER_LDFLAGS="${SERVER_LDFLAGS} ${DB_LDFLAGS}" 1517 SERVER_LIBS="${SERVER_LIBS} ${DB_LIBS}" 1518 1519 PROXY_LDFLAGS="${PROXY_LDFLAGS} ${DB_LDFLAGS}" 1520 PROXY_LIBS="${PROXY_LIBS} ${DB_LIBS}" 1521 1522 dnl Check for LIBXML2 [by default - skip] 1523 LIBXML2_CHECK_CONFIG([no]) 1524 if test "x$want_libxml2" = "xyes"; then 1525 if test "x$found_libxml2" != "xyes"; then 1526 AC_MSG_ERROR([LIBXML2 library not found]) 1527 else 1528 have_libxml2="yes" 1529 fi 1530 fi 1531 SERVER_LDFLAGS="$SERVER_LDFLAGS $LIBXML2_LDFLAGS" 1532 SERVER_LIBS="$SERVER_LIBS $LIBXML2_LIBS" 1533 1534 PROXY_LDFLAGS="$PROXY_LDFLAGS $LIBXML2_LDFLAGS" 1535 PROXY_LIBS="$PROXY_LIBS $LIBXML2_LIBS" 1536 1537 AC_SUBST(LIBXML2_CFLAGS) 1538 1539 dnl Checking for unixODBC support 1540 LIBUNIXODBC_CHECK_CONFIG([no]) 1541 if test "x$want_unixodbc" = "xyes"; then 1542 if test "x$unixodbc_error" != "x"; then 1543 AC_MSG_ERROR($unixodbc_error) 1544 fi 1545 have_unixodbc="yes" 1546 fi 1547 SERVER_LDFLAGS="$SERVER_LDFLAGS $UNIXODBC_LDFLAGS" 1548 SERVER_LIBS="$SERVER_LIBS $UNIXODBC_LIBS" 1549 1550 PROXY_LDFLAGS="$PROXY_LDFLAGS $UNIXODBC_LDFLAGS" 1551 PROXY_LIBS="$PROXY_LIBS $UNIXODBC_LIBS" 1552 1553 AC_SUBST(UNIXODBC_CFLAGS) 1554 1555 dnl Check for Net-SNMP [by default - skip] 1556 LIBNETSNMP_CHECK_CONFIG([no], "5.3.0") 1557 1558 if test "x$want_netsnmp" = "xyes"; then 1559 if test "x$found_netsnmp" != "xyes"; then 1560 AC_MSG_ERROR([Invalid Net-SNMP directory - unable to find net-snmp-config]) 1561 else 1562 have_snmp="yes" 1563 fi 1564 fi 1565 SERVER_LDFLAGS="$SERVER_LDFLAGS $SNMP_LDFLAGS" 1566 SERVER_LIBS="$SERVER_LIBS $SNMP_LIBS" 1567 1568 PROXY_LDFLAGS="$PROXY_LDFLAGS $SNMP_LDFLAGS" 1569 PROXY_LIBS="$PROXY_LIBS $SNMP_LIBS" 1570 1571 AC_SUBST(SNMP_CFLAGS) 1572 1573 dnl Check for LIBSSH2 [by default - skip] at least of version 1.0.0. 1574 LIBSSH2_CHECK_CONFIG([no]) 1575 LIBSSH_CHECK_CONFIG([no]) 1576 if test "x$want_ssh2" = "xyes"; then 1577 if test "x$want_ssh" != "xno"; then 1578 AC_MSG_ERROR([You can configure for only one SSH library (--with-ssh or --with-ssh2).]) 1579 fi 1580 1581 if test "x$found_ssh2" != "xyes"; then 1582 AC_MSG_ERROR([SSH2 library not found]) 1583 elif test "x$accept_ssh2_version" != "xyes"; then 1584 AC_MSG_ERROR([SSH2 library version requirement not met (>= 1.0.0)]) 1585 else 1586 have_ssh="yes (libssh2)" 1587 fi 1588 fi 1589 SERVER_LDFLAGS="$SERVER_LDFLAGS $SSH2_LDFLAGS" 1590 SERVER_LIBS="$SERVER_LIBS $SSH2_LIBS" 1591 1592 PROXY_LDFLAGS="$PROXY_LDFLAGS $SSH2_LDFLAGS" 1593 PROXY_LIBS="$PROXY_LIBS $SSH2_LIBS" 1594 1595 AC_SUBST(SSH2_CFLAGS) 1596 1597 dnl Check for LIBSSH [by default - skip] at least of version 0.7.0. 1598 if test "x$want_ssh" = "xyes"; then 1599 if test "x$found_ssh" != "xyes"; then 1600 AC_MSG_ERROR([SSH library not found]) 1601 elif test "x$accept_ssh_version" != "xyes"; then 1602 AC_MSG_ERROR([SSH library version requirement not met (>= 0.6.0)]) 1603 else 1604 have_ssh="yes (libssh)" 1605 fi 1606 fi 1607 SERVER_LDFLAGS="$SERVER_LDFLAGS $SSH_LDFLAGS" 1608 SERVER_LIBS="$SERVER_LIBS $SSH_LIBS" 1609 1610 PROXY_LDFLAGS="$PROXY_LDFLAGS $SSH_LDFLAGS" 1611 PROXY_LIBS="$PROXY_LIBS $SSH_LIBS" 1612 1613 AC_SUBST(SSH_CFLAGS) 1614 1615 found_openipmi="no" 1616 dnl Check for libOpenIPMI [by default - skip] 1617 LIBOPENIPMI_CHECK_CONFIG([no]) 1618 if test "x$want_openipmi" = "xyes"; then 1619 if test "x$found_openipmi" != "xyes"; then 1620 AC_MSG_ERROR([Invalid OPENIPMI directory - unable to find ipmiif.h]) 1621 else 1622 have_ipmi="yes" 1623 fi 1624 fi 1625 1626 SERVER_LDFLAGS="$SERVER_LDFLAGS $OPENIPMI_LDFLAGS" 1627 SERVER_LIBS="$SERVER_LIBS $OPENIPMI_LIBS" 1628 1629 PROXY_LDFLAGS="$PROXY_LDFLAGS $OPENIPMI_LDFLAGS" 1630 PROXY_LIBS="$PROXY_LIBS $OPENIPMI_LIBS" 1631 1632 AC_SUBST(OPENIPMI_CFLAGS) 1633 1634 dnl Check for zlib, used by Zabbix server-proxy communications 1635 ZLIB_CHECK_CONFIG([no]) 1636 if test "x$found_zlib" != "xyes"; then 1637 AC_MSG_ERROR([Unable to use zlib (zlib check failed)]) 1638 fi 1639 1640 AC_SUBST(ZLIB_CFLAGS) 1641 1642 dnl Check for 'libpthread' library that supports PTHREAD_PROCESS_SHARED flag 1643 LIBPTHREAD_CHECK_CONFIG([no]) 1644 if test "x$found_libpthread" != "xyes"; then 1645 AC_MSG_ERROR([Unable to use libpthread (libpthread check failed)]) 1646 fi 1647fi 1648 1649SERVER_LDFLAGS="$SERVER_LDFLAGS $ZLIB_LDFLAGS $LIBPTHREAD_LDFLAGS" 1650SERVER_LIBS="$SERVER_LIBS $ZLIB_LIBS $LIBPTHREAD_LIBS" 1651 1652PROXY_LDFLAGS="$PROXY_LDFLAGS $ZLIB_LDFLAGS $LIBPTHREAD_LDFLAGS" 1653PROXY_LIBS="$PROXY_LIBS $ZLIB_LIBS $LIBPTHREAD_LIBS" 1654 1655AGENT_LDFLAGS="$AGENT_LDFLAGS $ZLIB_LDFLAGS $LIBPTHREAD_LDFLAGS" 1656AGENT_LIBS="$AGENT_LIBS $ZLIB_LIBS $LIBPTHREAD_LIBS" 1657 1658AGENT2_LDFLAGS="$AGENT2_LDFLAGS $ZLIB_LDFLAGS $LIBPTHREAD_LDFLAGS" 1659AGENT2_LIBS="$AGENT2_LIBS $ZLIB_LIBS $LIBPTHREAD_LIBS" 1660 1661ZBXGET_LDFLAGS="$ZBXGET_LDFLAGS $ZLIB_LDFLAGS $LIBPTHREAD_LDFLAGS" 1662ZBXGET_LIBS="$ZBXGET_LIBS $ZLIB_LIBS $LIBPTHREAD_LIBS" 1663 1664SENDER_LDFLAGS="$SENDER_LDFLAGS $ZLIB_LDFLAGS $LIBPTHREAD_LDFLAGS" 1665SENDER_LIBS="$SENDER_LIBS $ZLIB_LIBS $LIBPTHREAD_LIBS" 1666 1667ZBXJS_LDFLAGS="$ZBXJS_LDFLAGS $ZLIB_LDFLAGS $LIBPTHREAD_LDFLAGS" 1668ZBXJS_LIBS="$ZBXJS_LIBS $ZLIB_LIBS $LIBPTHREAD_LIBS" 1669 1670AM_CONDITIONAL(HAVE_IPMI, [test "x$have_ipmi" = "xyes"]) 1671AM_CONDITIONAL(HAVE_LIBXML2, test "x$have_libxml2" = "xyes") 1672 1673dnl Check if Zabbix internal IPC services are used 1674have_ipcservice="no" 1675if test "x$have_ipmi" = "xyes"; then 1676 have_ipcservice="yes" 1677fi 1678 1679if test "x$server" = "xyes"; then 1680 have_ipcservice="yes" 1681fi 1682 1683if test "x$proxy" = "xyes"; then 1684 have_ipcservice="yes" 1685fi 1686 1687AM_CONDITIONAL(PROXY_IPCSERVICE, [test "x$have_ipmi" = "xyes"]) 1688 1689dnl Check for libevent, used by Zabbix IPC services 1690if test "x$have_ipcservice" = "xyes"; then 1691 AC_DEFINE([HAVE_IPCSERVICE], 1, [Define to 1 if Zabbix IPC services are used]) 1692 1693 LIBEVENT_CHECK_CONFIG([no]) 1694 if test "x$found_libevent" != "xyes"; then 1695 AC_MSG_ERROR([Unable to use libevent (libevent check failed)]) 1696 fi 1697 1698 SERVER_LDFLAGS="$SERVER_LDFLAGS $LIBEVENT_LDFLAGS" 1699 SERVER_LIBS="$SERVER_LIBS $LIBEVENT_LIBS" 1700 1701 PROXY_LDFLAGS="$PROXY_LDFLAGS $LIBEVENT_LDFLAGS" 1702 PROXY_LIBS="$PROXY_LIBS $LIBEVENT_LIBS" 1703fi 1704 1705dnl Check for GnuTLS libgnutls [by default - skip] 1706LIBGNUTLS_CHECK_CONFIG([no]) 1707if test "x$want_gnutls" = "xyes"; then 1708 if test "x$have_tls" != "xno"; then 1709 AC_MSG_ERROR([You can configure for only one TLS library (--with-gnutls or --with-openssl).]) 1710 fi 1711 1712 if test "x$found_gnutls" != "xyes"; then 1713 AC_MSG_ERROR([GnuTLS library libgnutls not found]) 1714 elif test "x$accept_gnutls_version" != "xyes"; then 1715 AC_MSG_ERROR([GnuTLS library version requirement not met (>= 3.1.18)]) 1716 else 1717 have_tls="GnuTLS" 1718 fi 1719 TLS_CFLAGS="$GNUTLS_CFLAGS" 1720 TLS_LDFLAGS="$GNUTLS_LDFLAGS" 1721 TLS_LIBS="$GNUTLS_LIBS" 1722fi 1723 1724dnl Check for OpenSSL libssl and libcrypto [by default - skip] 1725LIBOPENSSL_CHECK_CONFIG([no]) 1726if test "x$want_openssl" = "xyes"; then 1727 if test "x$have_tls" != "xno"; then 1728 AC_MSG_ERROR([You can configure for only one TLS library (--with-gnutls or --with-openssl).]) 1729 fi 1730 1731 if test "x$found_openssl" != "xOpenSSL" -a "x$found_openssl" != "xOpenSSL (PSK not supported)"; then 1732 AC_MSG_ERROR([OpenSSL library libssl or libcrypto not found]) 1733 elif test "x$accept_openssl_version" != "xyes"; then 1734 AC_MSG_ERROR([OpenSSL library version requirement not met (>= 1.0.1)]) 1735 else 1736 have_tls=$found_openssl 1737 fi 1738 TLS_CFLAGS="$OPENSSL_CFLAGS" 1739 TLS_LDFLAGS="$OPENSSL_LDFLAGS" 1740 TLS_LIBS="$OPENSSL_LIBS" 1741fi 1742AC_SUBST(TLS_CFLAGS) 1743 1744SERVER_LDFLAGS="$SERVER_LDFLAGS $TLS_LDFLAGS" 1745SERVER_LIBS="$SERVER_LIBS $TLS_LIBS" 1746 1747PROXY_LDFLAGS="$PROXY_LDFLAGS $TLS_LDFLAGS" 1748PROXY_LIBS="$PROXY_LIBS $TLS_LIBS" 1749 1750AGENT_LDFLAGS="$AGENT_LDFLAGS $TLS_LDFLAGS" 1751AGENT_LIBS="$AGENT_LIBS $TLS_LIBS" 1752 1753AGENT2_LDFLAGS="$AGENT2_LDFLAGS $TLS_LDFLAGS" 1754AGENT2_LIBS="$AGENT2_LIBS $TLS_LIBS" 1755 1756ZBXGET_LDFLAGS="$ZBXGET_LDFLAGS $TLS_LDFLAGS" 1757ZBXGET_LIBS="$ZBXGET_LIBS $TLS_LIBS" 1758 1759SENDER_LDFLAGS="$SENDER_LDFLAGS $TLS_LDFLAGS" 1760SENDER_LIBS="$SENDER_LIBS $TLS_LIBS" 1761 1762ZBXJS_LDFLAGS="$ZLIB_LDFLAGS $TLS_LDFLAGS" 1763ZBXJS_LIBS="$ZBXJS_LIBS $TLS_LIBS" 1764 1765if test "x$agent2" = "xyes"; then 1766 AC_CHECK_PROGS([GO], [go], [no]) 1767 if test "x$GO" = "xno"; then 1768 AC_MSG_ERROR([Unable to find "go" executable in path]) 1769 fi 1770 AC_DEFINE(ZBX_BUILD_AGENT2,1,[Define to 1 if Agent2 is being built.]) 1771fi 1772 1773if test "x$java" = "xyes"; then 1774 AC_CHECK_PROGS([JAVAC], [javac], [no]) 1775 if test "x$JAVAC" = "xno"; then 1776 AC_MSG_ERROR([Unable to find "javac" executable in path]) 1777 fi 1778 AC_CHECK_PROGS([JAR], [jar], [no]) 1779 if test "x$JAR" = "xno"; then 1780 AC_MSG_ERROR([Unable to find "jar" executable in path]) 1781 fi 1782fi 1783 1784found_ldap="no" 1785dnl Check for libLDAP [by default - skip] 1786LIBLDAP_CHECK_CONFIG([no]) 1787if test "x$want_ldap" = "xyes"; then 1788 if test "x$found_ldap" != "xyes"; then 1789 AC_MSG_ERROR([Invalid LDAP directory - unable to find ldap.h]) 1790 fi 1791fi 1792SERVER_LDFLAGS="$SERVER_LDFLAGS $LDAP_LDFLAGS" 1793SERVER_LIBS="$SERVER_LIBS $LDAP_LIBS" 1794 1795PROXY_LDFLAGS="$PROXY_LDFLAGS $LDAP_LDFLAGS" 1796PROXY_LIBS="$PROXY_LIBS $LDAP_LIBS" 1797 1798AGENT_LDFLAGS="$AGENT_LDFLAGS $LDAP_LDFLAGS" 1799AGENT_LIBS="$AGENT_LIBS $LDAP_LIBS" 1800 1801AC_SUBST(LDAP_CPPFLAGS) 1802 1803found_curl="no" 1804dnl Checking for libCurl [by default - skip] 1805LIBCURL_CHECK_CONFIG(, [7.13.1], [],[]) 1806if test "x$want_curl" = "xyes"; then 1807 if test "x$found_curl" != "xyes"; then 1808 AC_MSG_ERROR([Curl library not found]) 1809 fi 1810fi 1811if test "x$found_curl" = "xyes"; then 1812 have_web_monitoring="cURL" 1813fi 1814CFLAGS="$LIBCURL_CFLAGS $CFLAGS" 1815 1816SERVER_LDFLAGS="$SERVER_LDFLAGS $LIBCURL_LDFLAGS" 1817SERVER_LIBS="$SERVER_LIBS $LIBCURL_LIBS" 1818 1819PROXY_LDFLAGS="$PROXY_LDFLAGS $LIBCURL_LDFLAGS" 1820PROXY_LIBS="$PROXY_LIBS $LIBCURL_LIBS" 1821 1822AM_CONDITIONAL(HAVE_LIBCURL, test "x$found_curl" = "xyes") 1823 1824dnl Starting from 2.0 agent can do web monitoring 1825AGENT_LDFLAGS="$AGENT_LDFLAGS $LIBCURL_LDFLAGS" 1826AGENT_LIBS="$AGENT_LIBS $LIBCURL_LIBS" 1827 1828ZBXGET_LDFLAGS="$ZBXGET_LDFLAGS $ZLIB_LDFLAGS $LIBPTHREAD_LDFLAGS" 1829ZBXGET_LIBS="$ZBXGET_LIBS $ZLIB_LIBS $LIBPTHREAD_LIBS" 1830 1831SENDER_LDFLAGS="$SENDER_LDFLAGS $ZLIB_LDFLAGS $LIBPTHREAD_LDFLAGS" 1832SENDER_LIBS="$SENDER_LIBS $ZLIB_LIBS $LIBPTHREAD_LIBS" 1833 1834ZBXJS_LDFLAGS="$ZBXJS_LDFLAGS $LIBCURL_LDFLAGS" 1835ZBXJS_LIBS="$ZBXJS_LIBS $LIBCURL_LIBS" 1836 1837dnl Check for libpcre, used by Zabbix for regular expressions 1838if test "x$server" = "xyes" || test "x$proxy" = "xyes" || test "x$agent" = "xyes" || test "x$agent2" = "xyes"; then 1839 LIBPCRE_CHECK_CONFIG([no]) 1840 if test "x$found_libpcre" != "xyes"; then 1841 AC_MSG_ERROR([Unable to use libpcre (libpcre check failed)]) 1842 fi 1843fi 1844 1845CFLAGS="$CFLAGS $LIBPCRE_CFLAGS" 1846LDFLAGS="$LDFLAGS $LIBPCRE_LDFLAGS" 1847if test "x$ARCH" = "xosx"; then 1848 LIBS="$LIBPCRE_LIBS $LIBS" 1849else 1850 LIBS="$LIBS $LIBPCRE_LIBS" 1851fi 1852 1853found_iconv="no" 1854dnl Check for libiconv [by default - skip] 1855LIBICONV_CHECK_CONFIG([no]) 1856if test "x$found_iconv" != "xyes"; then 1857 AC_MSG_ERROR([Unable to use iconv (libiconv check failed)]) 1858fi 1859LDFLAGS="$LDFLAGS $ICONV_LDFLAGS" 1860LIBS="$LIBS $ICONV_LIBS" 1861 1862RANLIB="ranlib" 1863AC_SUBST(RANLIB) 1864 1865SERVER_CONFIG_FILE="${sysconfdir}/zabbix_server.conf" 1866PROXY_CONFIG_FILE="${sysconfdir}/zabbix_proxy.conf" 1867AGENT_CONFIG_FILE="${sysconfdir}/zabbix_agentd.conf" 1868AGENT2_CONFIG_FILE="${sysconfdir}/zabbix_agent2.conf" 1869 1870EXTERNAL_SCRIPTS_PATH="${datadir}/zabbix/externalscripts" 1871ALERT_SCRIPTS_PATH="${datadir}/zabbix/alertscripts" 1872 1873CURL_SSL_CERT_LOCATION="${datadir}/zabbix/ssl/certs" 1874CURL_SSL_KEY_LOCATION="${datadir}/zabbix/ssl/keys" 1875 1876LOAD_MODULE_PATH="${libdir}/modules" 1877 1878AC_SUBST(SERVER_LDFLAGS) 1879AC_SUBST(SERVER_LIBS) 1880 1881AC_SUBST(PROXY_LDFLAGS) 1882AC_SUBST(PROXY_LIBS) 1883 1884AC_SUBST(AGENT_LDFLAGS) 1885AC_SUBST(AGENT_LIBS) 1886 1887AC_SUBST(AGENT2_LDFLAGS) 1888AC_SUBST(AGENT2_LIBS) 1889 1890if test "x$HAVE_START_GROUP" = "xyes"; then 1891 LD_START_GROUP=-Wl,--start-group 1892 LD_END_GROUP=-Wl,--end-group 1893fi 1894 1895CGO_CFLAGS=$TLS_CFLAGS 1896CGO_LDFLAGS="$AGENT2_LDFLAGS $LD_START_GROUP \ 1897 \${abs_top_builddir}/src/zabbix_agent/logfiles/libzbxlogfiles.a \ 1898 \${abs_top_builddir}/src/libs/zbxcomms/libzbxcomms.a \ 1899 \${abs_top_builddir}/src/libs/zbxcommon/libzbxcommon.a \ 1900 \${abs_top_builddir}/src/libs/zbxcrypto/libzbxcrypto.a \ 1901 \${abs_top_builddir}/src/libs/zbxsys/libzbxsys.a \ 1902 \${abs_top_builddir}/src/libs/zbxnix/libzbxnix.a \ 1903 \${abs_top_builddir}/src/libs/zbxconf/libzbxconf.a \ 1904 \${abs_top_builddir}/src/libs/zbxhttp/libzbxhttp.a \ 1905 \${abs_top_builddir}/src/libs/zbxcompress/libzbxcompress.a \ 1906 \${abs_top_builddir}/src/libs/zbxregexp/libzbxregexp.a \ 1907 \${abs_top_builddir}/src/libs/zbxsysinfo/libzbxagent2sysinfo.a \ 1908 \${abs_top_builddir}/src/libs/zbxsysinfo/common/libcommonsysinfo.a \ 1909 \${abs_top_builddir}/src/libs/zbxsysinfo/simple/libsimplesysinfo.a \ 1910 \${abs_top_builddir}/src/libs/zbxsysinfo/"$ARCH"/libspechostnamesysinfo.a \ 1911 \${abs_top_builddir}/src/libs/zbxsysinfo/"$ARCH"/libspecsysinfo.a \ 1912 \${abs_top_builddir}/src/libs/zbxexec/libzbxexec.a \ 1913 \${abs_top_builddir}/src/libs/zbxalgo/libzbxalgo.a \ 1914 \${abs_top_builddir}/src/libs/zbxjson/libzbxjson.a \ 1915 $LIBS $AGENT2_LIBS $LD_END_GROUP" 1916 1917AC_SUBST(CGO_CFLAGS) 1918AC_SUBST(CGO_LDFLAGS) 1919 1920AC_SUBST(ZBXGET_LDFLAGS) 1921AC_SUBST(ZBXGET_LIBS) 1922 1923AC_SUBST(SENDER_LDFLAGS) 1924AC_SUBST(SENDER_LIBS) 1925 1926AC_SUBST(ZBXJS_LDFLAGS) 1927AC_SUBST(ZBXJS_LIBS) 1928 1929AC_SUBST(SERVER_CONFIG_FILE) 1930AC_SUBST(PROXY_CONFIG_FILE) 1931AC_SUBST(AGENT_CONFIG_FILE) 1932AC_SUBST(AGENT2_CONFIG_FILE) 1933 1934AC_SUBST(EXTERNAL_SCRIPTS_PATH) 1935AC_SUBST(ALERT_SCRIPTS_PATH) 1936 1937AC_SUBST(CURL_SSL_CERT_LOCATION) 1938AC_SUBST(CURL_SSL_KEY_LOCATION) 1939 1940AC_SUBST(LOAD_MODULE_PATH) 1941 1942GOBIN=${sbindir} 1943GOCMD=go 1944GOWORKDIR=$ac_abs_confdir/go/src/zabbix 1945 1946export GOBIN=${GOBIN} 1947AC_SUBST(GOBIN) 1948AC_SUBST(GOCMD) 1949AC_SUBST(GOWORKDIR) 1950 1951dnl ***************************************************************** 1952dnl * * 1953dnl * Other checks * 1954dnl * * 1955dnl ***************************************************************** 1956 1957dnl Automake 1.8 to 1.9.6 sets mkdir_p macro (lower-cased). 1958AC_MSG_CHECKING(for mkdir -p candidate) 1959if test "x${MKDIR_P}" = "x"; then 1960 if test "x${mkdir_p}" = "x"; then 1961 AC_MSG_ERROR([No suitable "mkdir -p" candidate found.]) 1962 fi 1963 AC_SUBST([MKDIR_P], ${mkdir_p}) 1964fi 1965AC_MSG_RESULT([ok (${MKDIR_P})]) 1966 1967dnl Check if process statistics collector should be enabled 1968case "x$ARCH" in 1969 xlinux|xsolaris) 1970 AC_DEFINE(ZBX_PROCSTAT_COLLECTOR, 1 , [Define to 1 on linux and solaris platforms]) 1971 ;; 1972esac 1973 1974dnl ***************************************************************** 1975dnl * * 1976dnl * Output configuration results * 1977dnl * * 1978dnl ***************************************************************** 1979 1980m4_ifdef([CONF_TESTS],[CONF_TESTS(ZBXCMOCKA)]) 1981 1982AC_OUTPUT([ 1983 Makefile 1984 database/Makefile 1985 database/mysql/Makefile 1986 database/oracle/Makefile 1987 database/postgresql/Makefile 1988 database/sqlite3/Makefile 1989 misc/Makefile 1990 src/Makefile 1991 src/go/Makefile 1992 src/libs/Makefile 1993 src/libs/zbxlog/Makefile 1994 src/libs/zbxalgo/Makefile 1995 src/libs/zbxmemory/Makefile 1996 src/libs/zbxcrypto/Makefile 1997 src/libs/zbxconf/Makefile 1998 src/libs/zbxdbcache/Makefile 1999 src/libs/zbxdbhigh/Makefile 2000 src/libs/zbxmedia/Makefile 2001 src/libs/zbxsysinfo/Makefile 2002 src/libs/zbxcommon/Makefile 2003 src/libs/zbxsysinfo/agent/Makefile 2004 src/libs/zbxsysinfo/common/Makefile 2005 src/libs/zbxsysinfo/simple/Makefile 2006 src/libs/zbxsysinfo/linux/Makefile 2007 src/libs/zbxsysinfo/aix/Makefile 2008 src/libs/zbxsysinfo/freebsd/Makefile 2009 src/libs/zbxsysinfo/hpux/Makefile 2010 src/libs/zbxsysinfo/openbsd/Makefile 2011 src/libs/zbxsysinfo/osx/Makefile 2012 src/libs/zbxsysinfo/solaris/Makefile 2013 src/libs/zbxsysinfo/osf/Makefile 2014 src/libs/zbxsysinfo/netbsd/Makefile 2015 src/libs/zbxsysinfo/unknown/Makefile 2016 src/libs/zbxnix/Makefile 2017 src/libs/zbxsys/Makefile 2018 src/libs/zbxcomms/Makefile 2019 src/libs/zbxcommshigh/Makefile 2020 src/libs/zbxdb/Makefile 2021 src/libs/zbxdbupgrade/Makefile 2022 src/libs/zbxjson/Makefile 2023 src/libs/zbxhttp/Makefile 2024 src/libs/zbxserver/Makefile 2025 src/libs/zbxicmpping/Makefile 2026 src/libs/zbxexec/Makefile 2027 src/libs/zbxself/Makefile 2028 src/libs/zbxmodules/Makefile 2029 src/libs/zbxregexp/Makefile 2030 src/libs/zbxtasks/Makefile 2031 src/libs/zbxipcservice/Makefile 2032 src/libs/zbxhistory/Makefile 2033 src/libs/zbxcompress/Makefile 2034 src/libs/zbxembed/Makefile 2035 src/libs/zbxprometheus/Makefile 2036 src/libs/zbxdiag/Makefile 2037 src/libs/zbxxml/Makefile 2038 src/zabbix_agent/Makefile 2039 src/zabbix_agent/logfiles/Makefile 2040 src/zabbix_get/Makefile 2041 src/zabbix_js/Makefile 2042 src/zabbix_sender/Makefile 2043 src/zabbix_server/Makefile 2044 src/zabbix_server/alerter/Makefile 2045 src/zabbix_server/dbsyncer/Makefile 2046 src/zabbix_server/dbconfig/Makefile 2047 src/zabbix_server/discoverer/Makefile 2048 src/zabbix_server/housekeeper/Makefile 2049 src/zabbix_server/httppoller/Makefile 2050 src/zabbix_server/pinger/Makefile 2051 src/zabbix_server/poller/Makefile 2052 src/zabbix_server/snmptrapper/Makefile 2053 src/zabbix_server/timer/Makefile 2054 src/zabbix_server/trapper/Makefile 2055 src/zabbix_server/escalator/Makefile 2056 src/zabbix_server/proxypoller/Makefile 2057 src/zabbix_server/selfmon/Makefile 2058 src/zabbix_server/vmware/Makefile 2059 src/zabbix_server/taskmanager/Makefile 2060 src/zabbix_server/ipmi/Makefile 2061 src/zabbix_server/odbc/Makefile 2062 src/zabbix_server/scripts/Makefile 2063 src/zabbix_server/preprocessor/Makefile 2064 src/zabbix_server/lld/Makefile 2065 src/zabbix_proxy/Makefile 2066 src/zabbix_proxy/heart/Makefile 2067 src/zabbix_proxy/housekeeper/Makefile 2068 src/zabbix_proxy/proxyconfig/Makefile 2069 src/zabbix_proxy/datasender/Makefile 2070 src/zabbix_proxy/taskmanager/Makefile 2071 src/zabbix_java/Makefile 2072 man/Makefile 2073 ]) 2074 2075dnl The following variables use autoconf variables such as 2076dnl ${sysconfdir} and ${datadir} . Which in turn contain 2077dnl variables such as ${prefix}. In order to completely 2078dnl substitute all variables and output end-value in 2079dnl Configuration output below it is required to perform 2 2080dnl substitutions. 2081 2082SERVER_CONFIG_FILE=`eval echo "${SERVER_CONFIG_FILE}"` 2083SERVER_CONFIG_FILE=`eval echo "${SERVER_CONFIG_FILE}"` 2084 2085PROXY_CONFIG_FILE=`eval echo "${PROXY_CONFIG_FILE}"` 2086PROXY_CONFIG_FILE=`eval echo "${PROXY_CONFIG_FILE}"` 2087 2088AGENT_CONFIG_FILE=`eval echo "${AGENT_CONFIG_FILE}"` 2089AGENT_CONFIG_FILE=`eval echo "${AGENT_CONFIG_FILE}"` 2090 2091AGENT2_CONFIG_FILE=`eval echo "${AGENT2_CONFIG_FILE}"` 2092AGENT2_CONFIG_FILE=`eval echo "${AGENT2_CONFIG_FILE}"` 2093 2094EXTERNAL_SCRIPTS_PATH=`eval echo "${EXTERNAL_SCRIPTS_PATH}"` 2095EXTERNAL_SCRIPTS_PATH=`eval echo "${EXTERNAL_SCRIPTS_PATH}"` 2096 2097ALERT_SCRIPTS_PATH=`eval echo "${ALERT_SCRIPTS_PATH}"` 2098ALERT_SCRIPTS_PATH=`eval echo "${ALERT_SCRIPTS_PATH}"` 2099 2100CURL_SSL_CERT_LOCATION=`eval echo "${CURL_SSL_CERT_LOCATION}"` 2101CURL_SSL_CERT_LOCATION=`eval echo "${CURL_SSL_CERT_LOCATION}"` 2102 2103CURL_SSL_KEY_LOCATION=`eval echo "${CURL_SSL_KEY_LOCATION}"` 2104CURL_SSL_KEY_LOCATION=`eval echo "${CURL_SSL_KEY_LOCATION}"` 2105 2106LOAD_MODULE_PATH=`eval echo "${LOAD_MODULE_PATH}"` 2107LOAD_MODULE_PATH=`eval echo "${LOAD_MODULE_PATH}"` 2108 2109echo " 2110 2111Configuration: 2112 2113 Detected OS: ${host_os} 2114 Install path: ${prefix} 2115 Compilation arch: ${ARCH} 2116 2117 Compiler: ${CC} 2118 Compiler flags: ${CFLAGS} 2119 2120 Library-specific flags:" 2121 2122if test "x$DB_CFLAGS" != "x"; then 2123 echo " database: ${DB_CFLAGS}" 2124fi 2125 2126if test "x$LIBXML2_CFLAGS" != "x"; then 2127 echo " libXML2: ${LIBXML2_CFLAGS}" 2128fi 2129 2130if test "x$UNIXODBC_CFLAGS" != "x"; then 2131 echo " unixODBC: ${UNIXODBC_CFLAGS}" 2132fi 2133 2134if test "x$SNMP_CFLAGS" != "x"; then 2135 echo " Net-SNMP: ${SNMP_CFLAGS}" 2136fi 2137 2138if test "x$OPENIPMI_CFLAGS" != "x"; then 2139 echo " OpenIPMI: ${OPENIPMI_CFLAGS}" 2140fi 2141 2142if test "x$SSH2_CFLAGS" != "x"; then 2143 echo " libssh2: ${SSH2_CFLAGS}" 2144fi 2145 2146if test "x$SSH_CFLAGS" != "x"; then 2147 echo " libssh: ${SSH_CFLAGS}" 2148fi 2149 2150if test "x$TLS_CFLAGS" != "x"; then 2151 echo " TLS: ${TLS_CFLAGS}" 2152fi 2153 2154if test "x$LDAP_CPPFLAGS" != "x"; then 2155 echo " LDAP: ${LDAP_CPPFLAGS}" 2156fi 2157 2158if test "x$ICONV_CFLAGS" != "x"; then 2159 echo " iconv: ${ICONV_CFLAGS}" 2160fi 2161 2162if test "x$LIBEVENT_CFLAGS" != "x"; then 2163 echo " libevent: ${LIBEVENT_CFLAGS}" 2164fi 2165 2166echo " 2167 Enable server: ${server}" 2168 2169if test "x$server" != "xno"; then 2170 2171echo " Server details: 2172 With database: ${have_db} 2173 WEB Monitoring: ${have_web_monitoring}" 2174 2175if test "x$have_web_monitoring" = "xcURL"; then 2176echo " SSL certificates: ${CURL_SSL_CERT_LOCATION} 2177 SSL keys: ${CURL_SSL_KEY_LOCATION}" 2178fi 2179 2180echo " SNMP: ${have_snmp} 2181 IPMI: ${have_ipmi} 2182 SSH: ${have_ssh} 2183 TLS: ${have_tls} 2184 ODBC: ${have_unixodbc} 2185 Linker flags: ${SERVER_LDFLAGS} ${LDFLAGS} 2186 Libraries: ${SERVER_LIBS} ${LIBS} 2187 Configuration file: ${SERVER_CONFIG_FILE} 2188 External scripts: ${EXTERNAL_SCRIPTS_PATH} 2189 Alert scripts: ${ALERT_SCRIPTS_PATH} 2190 Modules: ${LOAD_MODULE_PATH}" 2191 2192fi 2193 2194echo " 2195 Enable proxy: ${proxy}" 2196 2197if test "x$proxy" != "xno"; then 2198 2199echo " Proxy details: 2200 With database: ${have_db} 2201 WEB Monitoring: ${have_web_monitoring}" 2202 2203if test "x$have_web_monitoring" = "xcURL"; then 2204echo " SSL certificates: ${CURL_SSL_CERT_LOCATION} 2205 SSL keys: ${CURL_SSL_KEY_LOCATION}" 2206fi 2207 2208echo " SNMP: ${have_snmp} 2209 IPMI: ${have_ipmi} 2210 SSH: ${have_ssh} 2211 TLS: ${have_tls} 2212 ODBC: ${have_unixodbc} 2213 Linker flags: ${PROXY_LDFLAGS} ${LDFLAGS} 2214 Libraries: ${PROXY_LIBS} ${LIBS} 2215 Configuration file: ${PROXY_CONFIG_FILE} 2216 External scripts: ${EXTERNAL_SCRIPTS_PATH} 2217 Modules: ${LOAD_MODULE_PATH}" 2218 2219fi 2220 2221echo " 2222 Enable agent: ${agent}" 2223 2224if test "x$agent" != "xno"; then 2225 2226echo " Agent details: 2227 TLS: ${have_tls} 2228 Linker flags: ${AGENT_LDFLAGS} ${LDFLAGS} 2229 Libraries: ${AGENT_LIBS} ${LIBS} 2230 Configuration file: ${AGENT_CONFIG_FILE} 2231 Modules: ${LOAD_MODULE_PATH}" 2232 2233fi 2234 2235echo " 2236 Enable agent 2: ${agent2}" 2237 2238echo " 2239 Enable Java gateway: ${java}" 2240 2241if test "x$java" != "xno"; then 2242 2243echo " Java gateway details: 2244 Java compiler: ${JAVAC} 2245 Java archiver: ${JAR}" 2246 2247fi 2248 2249echo " 2250 LDAP support: ${found_ldap} 2251 IPv6 support: ${have_ipv6}" 2252 2253echo 2254echo "***********************************************************" 2255echo "* Now run '${am_make} install' *" 2256echo "* *" 2257echo "* Thank you for using Zabbix! *" 2258echo "* <http://www.zabbix.com> *" 2259echo "***********************************************************" 2260echo 2261