1# Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved. 2# 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; version 2 of the License. 6# 7# This program is distributed in the hope that it will be useful, 8# but WITHOUT ANY WARRANTY; without even the implied warranty of 9# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10# GNU General Public License for more details. 11# 12# You should have received a copy of the GNU General Public License 13# along with this program; if not, write to the Free Software 14# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA 15# 16 17INCLUDE (CheckCSourceCompiles) 18INCLUDE (CheckCXXSourceCompiles) 19INCLUDE (CheckStructHasMember) 20INCLUDE (CheckLibraryExists) 21INCLUDE (CheckFunctionExists) 22INCLUDE (CheckCCompilerFlag) 23INCLUDE (CheckCSourceRuns) 24INCLUDE (CheckSymbolExists) 25 26 27# WITH_PIC options.Not of much use, PIC is taken care of on platforms 28# where it makes sense anyway. 29IF(UNIX) 30 IF(APPLE) 31 # OSX executable are always PIC 32 SET(WITH_PIC ON) 33 ELSE() 34 OPTION(WITH_PIC "Generate PIC objects" OFF) 35 IF(WITH_PIC) 36 SET(CMAKE_C_FLAGS 37 "${CMAKE_C_FLAGS} ${CMAKE_SHARED_LIBRARY_C_FLAGS}") 38 SET(CMAKE_CXX_FLAGS 39 "${CMAKE_CXX_FLAGS} ${CMAKE_SHARED_LIBRARY_CXX_FLAGS}") 40 ENDIF() 41 ENDIF() 42ENDIF() 43 44 45 46# System type affects version_compile_os variable 47IF(NOT SYSTEM_TYPE) 48 IF(PLATFORM) 49 SET(SYSTEM_TYPE ${PLATFORM}) 50 ELSE() 51 SET(SYSTEM_TYPE ${CMAKE_SYSTEM_NAME}) 52 ENDIF() 53ENDIF() 54 55IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang" AND (NOT MSVC)) 56 IF (CMAKE_EXE_LINKER_FLAGS MATCHES " -static " 57 OR CMAKE_EXE_LINKER_FLAGS MATCHES " -static$") 58 SET(HAVE_DLOPEN FALSE CACHE "Disable dlopen due to -static flag" FORCE) 59 SET(WITHOUT_DYNAMIC_PLUGINS TRUE) 60 ENDIF() 61ENDIF() 62 63# workaround for old gcc on x86, gcc atomic ops only work under -march=i686 64IF(CMAKE_SYSTEM_PROCESSOR STREQUAL "i686" AND CMAKE_COMPILER_IS_GNUCC AND 65 CMAKE_C_COMPILER_VERSION VERSION_LESS "4.4.0") 66 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=i686") 67 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=i686") 68 # query_response_time.cc causes "error: unable to find a register to spill" 69 SET(PLUGIN_QUERY_RESPONSE_TIME NO CACHE BOOL "Disabled, gcc is too old") 70ENDIF() 71 72# use runtime atomic-support detection in aarch64 73IF(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") 74 MY_CHECK_AND_SET_COMPILER_FLAG("-moutline-atomics") 75ENDIF() 76 77IF(WITHOUT_DYNAMIC_PLUGINS) 78 MESSAGE("Dynamic plugins are disabled.") 79ENDIF(WITHOUT_DYNAMIC_PLUGINS) 80 81# Large files, common flag 82SET(_LARGEFILE_SOURCE 1) 83 84# If finds the size of a type, set SIZEOF_<type> and HAVE_<type> 85FUNCTION(MY_CHECK_TYPE_SIZE type defbase) 86 CHECK_TYPE_SIZE("${type}" SIZEOF_${defbase}) 87 IF(SIZEOF_${defbase}) 88 SET(HAVE_${defbase} 1 PARENT_SCOPE) 89 ENDIF() 90ENDFUNCTION() 91 92# Same for structs, setting HAVE_STRUCT_<name> instead 93FUNCTION(MY_CHECK_STRUCT_SIZE type defbase) 94 CHECK_TYPE_SIZE("struct ${type}" SIZEOF_${defbase}) 95 IF(SIZEOF_${defbase}) 96 SET(HAVE_STRUCT_${defbase} 1 PARENT_SCOPE) 97 ENDIF() 98ENDFUNCTION() 99 100# Searches function in libraries 101# if function is found, sets output parameter result to the name of the library 102# if function is found in libc, result will be empty 103FUNCTION(MY_SEARCH_LIBS func libs result) 104 IF(${${result}}) 105 # Library is already found or was predefined 106 RETURN() 107 ENDIF() 108 CHECK_FUNCTION_EXISTS(${func} HAVE_${func}_IN_LIBC) 109 IF(HAVE_${func}_IN_LIBC) 110 SET(${result} "" PARENT_SCOPE) 111 RETURN() 112 ENDIF() 113 FOREACH(lib ${libs}) 114 CHECK_LIBRARY_EXISTS(${lib} ${func} "" HAVE_${func}_IN_${lib}) 115 IF(HAVE_${func}_IN_${lib}) 116 SET(${result} ${lib} PARENT_SCOPE) 117 SET(HAVE_${result} 1 PARENT_SCOPE) 118 RETURN() 119 ENDIF() 120 ENDFOREACH() 121ENDFUNCTION() 122 123# Find out which libraries to use. 124IF(UNIX) 125 MY_SEARCH_LIBS(floor m LIBM) 126 IF(NOT LIBM) 127 MY_SEARCH_LIBS(__infinity m LIBM) 128 ENDIF() 129 MY_SEARCH_LIBS(gethostbyname_r "nsl_r;nsl" LIBNSL) 130 MY_SEARCH_LIBS(bind "bind;socket" LIBBIND) 131 MY_SEARCH_LIBS(crypt crypt LIBCRYPT) 132 MY_SEARCH_LIBS(setsockopt socket LIBSOCKET) 133 MY_SEARCH_LIBS(sched_yield rt LIBRT) 134 IF(NOT LIBRT) 135 MY_SEARCH_LIBS(clock_gettime rt LIBRT) 136 ENDIF() 137 set(THREADS_PREFER_PTHREAD_FLAG ON) 138 FIND_PACKAGE(Threads) 139 140 SET(CMAKE_REQUIRED_LIBRARIES 141 ${LIBM} ${LIBNSL} ${LIBBIND} ${LIBCRYPT} ${LIBSOCKET} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${LIBRT} ${LIBEXECINFO}) 142 # Need explicit pthread for gcc -fsanitize=address 143 IF(CMAKE_USE_PTHREADS_INIT AND CMAKE_C_FLAGS MATCHES "-fsanitize=") 144 SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} pthread) 145 ENDIF() 146 147 IF(CMAKE_REQUIRED_LIBRARIES) 148 LIST(REMOVE_DUPLICATES CMAKE_REQUIRED_LIBRARIES) 149 ENDIF() 150 LINK_LIBRARIES(${CMAKE_THREAD_LIBS_INIT}) 151 152 OPTION(WITH_LIBWRAP "Compile with tcp wrappers support" OFF) 153 IF(WITH_LIBWRAP) 154 SET(SAVE_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) 155 SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} wrap) 156 CHECK_C_SOURCE_COMPILES( 157 " 158 #include <sys/types.h> 159 #include <tcpd.h> 160 int allow_severity = 0; 161 int deny_severity = 0; 162 int main() 163 { 164 hosts_access(0); 165 }" 166 HAVE_LIBWRAP) 167 SET(CMAKE_REQUIRED_LIBRARIES ${SAVE_CMAKE_REQUIRED_LIBRARIES}) 168 IF(HAVE_LIBWRAP) 169 SET(MYSYS_LIBWRAP_SOURCE ${CMAKE_SOURCE_DIR}/mysys/my_libwrap.c) 170 SET(LIBWRAP "wrap") 171 ENDIF() 172 ENDIF() 173 ADD_FEATURE_INFO(LIBWRAP HAVE_LIBWRAP "Support for tcp wrappers") 174ENDIF() 175 176# 177# Tests for header files 178# 179INCLUDE (CheckIncludeFiles) 180INCLUDE (CheckIncludeFileCXX) 181 182CHECK_INCLUDE_FILES ("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS) 183CHECK_INCLUDE_FILES (sys/types.h HAVE_SYS_TYPES_H) 184CHECK_INCLUDE_FILES (alloca.h HAVE_ALLOCA_H) 185CHECK_INCLUDE_FILES (arpa/inet.h HAVE_ARPA_INET_H) 186CHECK_INCLUDE_FILES (crypt.h HAVE_CRYPT_H) 187CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H) 188CHECK_INCLUDE_FILES (dlfcn.h HAVE_DLFCN_H) 189CHECK_INCLUDE_FILES (execinfo.h HAVE_EXECINFO_H) 190CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H) 191CHECK_INCLUDE_FILES (fenv.h HAVE_FENV_H) 192CHECK_INCLUDE_FILES (float.h HAVE_FLOAT_H) 193CHECK_INCLUDE_FILES (fpu_control.h HAVE_FPU_CONTROL_H) 194CHECK_INCLUDE_FILES (grp.h HAVE_GRP_H) 195CHECK_INCLUDE_FILES (ieeefp.h HAVE_IEEEFP_H) 196CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H) 197CHECK_INCLUDE_FILES (langinfo.h HAVE_LANGINFO_H) 198CHECK_INCLUDE_FILES (link.h HAVE_LINK_H) 199CHECK_INCLUDE_FILES (linux/unistd.h HAVE_LINUX_UNISTD_H) 200CHECK_INCLUDE_FILES (limits.h HAVE_LIMITS_H) 201CHECK_INCLUDE_FILES (locale.h HAVE_LOCALE_H) 202CHECK_INCLUDE_FILES (malloc.h HAVE_MALLOC_H) 203CHECK_INCLUDE_FILES (memory.h HAVE_MEMORY_H) 204CHECK_INCLUDE_FILES (ndir.h HAVE_NDIR_H) 205CHECK_INCLUDE_FILES (netinet/in.h HAVE_NETINET_IN_H) 206CHECK_INCLUDE_FILES (paths.h HAVE_PATHS_H) 207CHECK_INCLUDE_FILES (poll.h HAVE_POLL_H) 208CHECK_INCLUDE_FILES (sys/poll.h HAVE_SYS_POLL_H) 209CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H) 210CHECK_INCLUDE_FILES (sched.h HAVE_SCHED_H) 211CHECK_INCLUDE_FILES (select.h HAVE_SELECT_H) 212CHECK_INCLUDE_FILES ("sys/types.h;sys/dir.h" HAVE_SYS_DIR_H) 213CHECK_INCLUDE_FILES ("sys/types.h;sys/event.h" HAVE_SYS_EVENT_H) 214CHECK_INCLUDE_FILES (sys/ndir.h HAVE_SYS_NDIR_H) 215CHECK_INCLUDE_FILES (sys/pte.h HAVE_SYS_PTE_H) 216CHECK_INCLUDE_FILES (stddef.h HAVE_STDDEF_H) 217CHECK_INCLUDE_FILES (stdint.h HAVE_STDINT_H) 218CHECK_INCLUDE_FILES (stdlib.h HAVE_STDLIB_H) 219CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H) 220CHECK_INCLUDE_FILES (string.h HAVE_STRING_H) 221CHECK_INCLUDE_FILES (synch.h HAVE_SYNCH_H) 222CHECK_INCLUDE_FILES (sysent.h HAVE_SYSENT_H) 223CHECK_INCLUDE_FILES (sys/file.h HAVE_SYS_FILE_H) 224CHECK_INCLUDE_FILES (sys/fpu.h HAVE_SYS_FPU_H) 225CHECK_INCLUDE_FILES (sys/ioctl.h HAVE_SYS_IOCTL_H) 226CHECK_INCLUDE_FILES ("sys/types.h;sys/ipc.h" HAVE_SYS_IPC_H) 227CHECK_INCLUDE_FILES ("sys/types.h;sys/malloc.h" HAVE_SYS_MALLOC_H) 228CHECK_INCLUDE_FILES (sys/mman.h HAVE_SYS_MMAN_H) 229CHECK_INCLUDE_FILES (sys/prctl.h HAVE_SYS_PRCTL_H) 230CHECK_INCLUDE_FILES (sys/resource.h HAVE_SYS_RESOURCE_H) 231CHECK_INCLUDE_FILES (sys/select.h HAVE_SYS_SELECT_H) 232CHECK_INCLUDE_FILES ("sys/types.h;sys/shm.h" HAVE_SYS_SHM_H) 233CHECK_INCLUDE_FILES (sys/socket.h HAVE_SYS_SOCKET_H) 234CHECK_INCLUDE_FILES (sys/stat.h HAVE_SYS_STAT_H) 235CHECK_INCLUDE_FILES (sys/stream.h HAVE_SYS_STREAM_H) 236CHECK_INCLUDE_FILES (sys/syscall.h HAVE_SYS_SYSCALL_H) 237CHECK_INCLUDE_FILES (asm/termbits.h HAVE_ASM_TERMBITS_H) 238CHECK_INCLUDE_FILES (termbits.h HAVE_TERMBITS_H) 239CHECK_INCLUDE_FILES (termios.h HAVE_TERMIOS_H) 240CHECK_INCLUDE_FILES (termio.h HAVE_TERMIO_H) 241CHECK_INCLUDE_FILES (termcap.h HAVE_TERMCAP_H) 242CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H) 243CHECK_INCLUDE_FILES (utime.h HAVE_UTIME_H) 244CHECK_INCLUDE_FILES (varargs.h HAVE_VARARGS_H) 245CHECK_INCLUDE_FILES (sys/time.h HAVE_SYS_TIME_H) 246CHECK_INCLUDE_FILES (sys/utime.h HAVE_SYS_UTIME_H) 247CHECK_INCLUDE_FILES (sys/wait.h HAVE_SYS_WAIT_H) 248CHECK_INCLUDE_FILES (sys/param.h HAVE_SYS_PARAM_H) 249CHECK_INCLUDE_FILES (sys/vadvise.h HAVE_SYS_VADVISE_H) 250CHECK_INCLUDE_FILES (fnmatch.h HAVE_FNMATCH_H) 251CHECK_INCLUDE_FILES (stdarg.h HAVE_STDARG_H) 252CHECK_INCLUDE_FILES ("stdlib.h;sys/un.h" HAVE_SYS_UN_H) 253CHECK_INCLUDE_FILES (wchar.h HAVE_WCHAR_H) 254CHECK_INCLUDE_FILES (wctype.h HAVE_WCTYPE_H) 255CHECK_INCLUDE_FILES (sys/sockio.h HAVE_SYS_SOCKIO_H) 256CHECK_INCLUDE_FILES (sys/utsname.h HAVE_SYS_UTSNAME_H) 257CHECK_INCLUDE_FILES (sys/statvfs.h HAVE_SYS_STATVFS_H) 258 259SET(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} -DPACKAGE=test) # bfd.h is picky 260CHECK_INCLUDE_FILES (bfd.h BFD_H_EXISTS) 261IF(BFD_H_EXISTS) 262 IF(NOT_FOR_DISTRIBUTION) 263 SET(NON_DISTRIBUTABLE_WARNING "GPLv3" CACHE INTERNAL "") 264 SET(HAVE_BFD_H 1) 265 ENDIF() 266ENDIF() 267 268IF(HAVE_SYS_STREAM_H) 269 # Needs sys/stream.h on Solaris 270 CHECK_INCLUDE_FILES ("sys/stream.h;sys/ptem.h" HAVE_SYS_PTEM_H) 271ELSE() 272 CHECK_INCLUDE_FILES (sys/ptem.h HAVE_SYS_PTEM_H) 273ENDIF() 274 275# Figure out threading library 276# 277FIND_PACKAGE (Threads) 278 279FUNCTION(MY_CHECK_PTHREAD_ONCE_INIT) 280 MY_CHECK_C_COMPILER_FLAG("-Werror") 281 IF(NOT have_C__Werror) 282 RETURN() 283 ENDIF() 284 SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Werror") 285 CHECK_C_SOURCE_COMPILES(" 286 #include <pthread.h> 287 void foo(void) {} 288 int main() 289 { 290 pthread_once_t once_control = PTHREAD_ONCE_INIT; 291 pthread_once(&once_control, foo); 292 return 0; 293 }" 294 HAVE_PTHREAD_ONCE_INIT 295 ) 296 # http://bugs.opensolaris.org/bugdatabase/printableBug.do?bug_id=6611808 297 IF(NOT HAVE_PTHREAD_ONCE_INIT) 298 CHECK_C_SOURCE_COMPILES(" 299 #include <pthread.h> 300 void foo(void) {} 301 int main() 302 { 303 pthread_once_t once_control = { PTHREAD_ONCE_INIT }; 304 pthread_once(&once_control, foo); 305 return 0; 306 }" 307 HAVE_ARRAY_PTHREAD_ONCE_INIT 308 ) 309 ENDIF() 310 IF(HAVE_PTHREAD_ONCE_INIT) 311 SET(PTHREAD_ONCE_INITIALIZER "PTHREAD_ONCE_INIT" PARENT_SCOPE) 312 ENDIF() 313 IF(HAVE_ARRAY_PTHREAD_ONCE_INIT) 314 SET(PTHREAD_ONCE_INITIALIZER "{ PTHREAD_ONCE_INIT }" PARENT_SCOPE) 315 ENDIF() 316ENDFUNCTION() 317 318IF(CMAKE_USE_PTHREADS_INIT) 319 MY_CHECK_PTHREAD_ONCE_INIT() 320ENDIF() 321 322# 323# Tests for functions 324# 325CHECK_FUNCTION_EXISTS (accept4 HAVE_ACCEPT4) 326CHECK_FUNCTION_EXISTS (access HAVE_ACCESS) 327#CHECK_FUNCTION_EXISTS (aiowait HAVE_AIOWAIT) 328CHECK_FUNCTION_EXISTS (alarm HAVE_ALARM) 329SET(HAVE_ALLOCA 1) 330CHECK_FUNCTION_EXISTS (backtrace HAVE_BACKTRACE) 331CHECK_FUNCTION_EXISTS (backtrace_symbols HAVE_BACKTRACE_SYMBOLS) 332CHECK_FUNCTION_EXISTS (backtrace_symbols_fd HAVE_BACKTRACE_SYMBOLS_FD) 333CHECK_FUNCTION_EXISTS (printstack HAVE_PRINTSTACK) 334CHECK_FUNCTION_EXISTS (bfill HAVE_BFILL) 335CHECK_FUNCTION_EXISTS (index HAVE_INDEX) 336CHECK_FUNCTION_EXISTS (clock_gettime HAVE_CLOCK_GETTIME) 337CHECK_FUNCTION_EXISTS (cuserid HAVE_CUSERID) 338CHECK_FUNCTION_EXISTS (ftruncate HAVE_FTRUNCATE) 339CHECK_FUNCTION_EXISTS (compress HAVE_COMPRESS) 340CHECK_FUNCTION_EXISTS (crypt HAVE_CRYPT) 341CHECK_FUNCTION_EXISTS (dladdr HAVE_DLADDR) 342CHECK_FUNCTION_EXISTS (dlerror HAVE_DLERROR) 343CHECK_FUNCTION_EXISTS (dlopen HAVE_DLOPEN) 344CHECK_FUNCTION_EXISTS (fchmod HAVE_FCHMOD) 345CHECK_FUNCTION_EXISTS (fcntl HAVE_FCNTL) 346CHECK_FUNCTION_EXISTS (fdatasync HAVE_FDATASYNC) 347CHECK_SYMBOL_EXISTS(fdatasync "unistd.h" HAVE_DECL_FDATASYNC) 348CHECK_FUNCTION_EXISTS (fesetround HAVE_FESETROUND) 349CHECK_FUNCTION_EXISTS (fedisableexcept HAVE_FEDISABLEEXCEPT) 350CHECK_FUNCTION_EXISTS (fseeko HAVE_FSEEKO) 351CHECK_FUNCTION_EXISTS (fsync HAVE_FSYNC) 352CHECK_FUNCTION_EXISTS (getcwd HAVE_GETCWD) 353CHECK_FUNCTION_EXISTS (gethostbyaddr_r HAVE_GETHOSTBYADDR_R) 354CHECK_FUNCTION_EXISTS (gethrtime HAVE_GETHRTIME) 355CHECK_FUNCTION_EXISTS (getpass HAVE_GETPASS) 356CHECK_FUNCTION_EXISTS (getpassphrase HAVE_GETPASSPHRASE) 357CHECK_FUNCTION_EXISTS (getpwnam HAVE_GETPWNAM) 358CHECK_FUNCTION_EXISTS (getpwuid HAVE_GETPWUID) 359CHECK_FUNCTION_EXISTS (getrlimit HAVE_GETRLIMIT) 360CHECK_FUNCTION_EXISTS (getifaddrs HAVE_GETIFADDRS) 361CHECK_FUNCTION_EXISTS (getrusage HAVE_GETRUSAGE) 362CHECK_FUNCTION_EXISTS (getwd HAVE_GETWD) 363CHECK_FUNCTION_EXISTS (gmtime_r HAVE_GMTIME_R) 364CHECK_FUNCTION_EXISTS (initgroups HAVE_INITGROUPS) 365CHECK_FUNCTION_EXISTS (ldiv HAVE_LDIV) 366CHECK_FUNCTION_EXISTS (localtime_r HAVE_LOCALTIME_R) 367CHECK_FUNCTION_EXISTS (lstat HAVE_LSTAT) 368CHECK_FUNCTION_EXISTS (madvise HAVE_MADVISE) 369CHECK_FUNCTION_EXISTS (mallinfo HAVE_MALLINFO) 370CHECK_FUNCTION_EXISTS (mallinfo2 HAVE_MALLINFO2) 371CHECK_FUNCTION_EXISTS (memcpy HAVE_MEMCPY) 372CHECK_FUNCTION_EXISTS (memmove HAVE_MEMMOVE) 373CHECK_FUNCTION_EXISTS (mkstemp HAVE_MKSTEMP) 374CHECK_FUNCTION_EXISTS (mkostemp HAVE_MKOSTEMP) 375CHECK_FUNCTION_EXISTS (mlock HAVE_MLOCK) 376CHECK_FUNCTION_EXISTS (mlockall HAVE_MLOCKALL) 377CHECK_FUNCTION_EXISTS (mmap HAVE_MMAP) 378CHECK_FUNCTION_EXISTS (mmap64 HAVE_MMAP64) 379CHECK_FUNCTION_EXISTS (perror HAVE_PERROR) 380CHECK_FUNCTION_EXISTS (poll HAVE_POLL) 381CHECK_FUNCTION_EXISTS (posix_fallocate HAVE_POSIX_FALLOCATE) 382CHECK_FUNCTION_EXISTS (pread HAVE_PREAD) 383CHECK_FUNCTION_EXISTS (pthread_attr_create HAVE_PTHREAD_ATTR_CREATE) 384CHECK_FUNCTION_EXISTS (pthread_attr_getstacksize HAVE_PTHREAD_ATTR_GETSTACKSIZE) 385CHECK_FUNCTION_EXISTS (pthread_attr_setscope HAVE_PTHREAD_ATTR_SETSCOPE) 386CHECK_FUNCTION_EXISTS (pthread_attr_getguardsize HAVE_PTHREAD_ATTR_GETGUARDSIZE) 387CHECK_FUNCTION_EXISTS (pthread_attr_setstacksize HAVE_PTHREAD_ATTR_SETSTACKSIZE) 388CHECK_FUNCTION_EXISTS (pthread_condattr_create HAVE_PTHREAD_CONDATTR_CREATE) 389CHECK_FUNCTION_EXISTS (pthread_getaffinity_np HAVE_PTHREAD_GETAFFINITY_NP) 390CHECK_FUNCTION_EXISTS (pthread_key_delete HAVE_PTHREAD_KEY_DELETE) 391CHECK_FUNCTION_EXISTS (pthread_rwlock_rdlock HAVE_PTHREAD_RWLOCK_RDLOCK) 392CHECK_FUNCTION_EXISTS (pthread_sigmask HAVE_PTHREAD_SIGMASK) 393CHECK_FUNCTION_EXISTS (pthread_yield_np HAVE_PTHREAD_YIELD_NP) 394CHECK_FUNCTION_EXISTS (putenv HAVE_PUTENV) 395CHECK_FUNCTION_EXISTS (readlink HAVE_READLINK) 396CHECK_FUNCTION_EXISTS (realpath HAVE_REALPATH) 397CHECK_FUNCTION_EXISTS (rename HAVE_RENAME) 398CHECK_FUNCTION_EXISTS (rwlock_init HAVE_RWLOCK_INIT) 399CHECK_FUNCTION_EXISTS (sched_yield HAVE_SCHED_YIELD) 400CHECK_FUNCTION_EXISTS (setenv HAVE_SETENV) 401CHECK_FUNCTION_EXISTS (setlocale HAVE_SETLOCALE) 402CHECK_FUNCTION_EXISTS (sigaction HAVE_SIGACTION) 403CHECK_FUNCTION_EXISTS (sigthreadmask HAVE_SIGTHREADMASK) 404CHECK_FUNCTION_EXISTS (sigwait HAVE_SIGWAIT) 405CHECK_FUNCTION_EXISTS (sigwaitinfo HAVE_SIGWAITINFO) 406CHECK_FUNCTION_EXISTS (sigset HAVE_SIGSET) 407CHECK_FUNCTION_EXISTS (sleep HAVE_SLEEP) 408CHECK_FUNCTION_EXISTS (snprintf HAVE_SNPRINTF) 409CHECK_FUNCTION_EXISTS (stpcpy HAVE_STPCPY) 410CHECK_FUNCTION_EXISTS (strcoll HAVE_STRCOLL) 411CHECK_FUNCTION_EXISTS (strerror HAVE_STRERROR) 412CHECK_FUNCTION_EXISTS (strnlen HAVE_STRNLEN) 413CHECK_FUNCTION_EXISTS (strpbrk HAVE_STRPBRK) 414CHECK_FUNCTION_EXISTS (strtok_r HAVE_STRTOK_R) 415CHECK_FUNCTION_EXISTS (strtoll HAVE_STRTOLL) 416CHECK_FUNCTION_EXISTS (strtoul HAVE_STRTOUL) 417CHECK_FUNCTION_EXISTS (strtoull HAVE_STRTOULL) 418CHECK_FUNCTION_EXISTS (strcasecmp HAVE_STRCASECMP) 419CHECK_FUNCTION_EXISTS (tell HAVE_TELL) 420CHECK_FUNCTION_EXISTS (thr_setconcurrency HAVE_THR_SETCONCURRENCY) 421CHECK_FUNCTION_EXISTS (thr_yield HAVE_THR_YIELD) 422CHECK_FUNCTION_EXISTS (vasprintf HAVE_VASPRINTF) 423CHECK_FUNCTION_EXISTS (vsnprintf HAVE_VSNPRINTF) 424CHECK_FUNCTION_EXISTS (memalign HAVE_MEMALIGN) 425CHECK_FUNCTION_EXISTS (nl_langinfo HAVE_NL_LANGINFO) 426 427IF(HAVE_SYS_EVENT_H) 428CHECK_FUNCTION_EXISTS (kqueue HAVE_KQUEUE) 429ENDIF() 430 431# readdir_r might exist, but be marked deprecated 432SET(CMAKE_REQUIRED_FLAGS -Werror) 433CHECK_CXX_SOURCE_COMPILES( 434"#include <dirent.h> 435int main() { 436 readdir_r(0,0,0); 437 return 0; 438 }" HAVE_READDIR_R) 439SET(CMAKE_REQUIRED_FLAGS) 440 441#-------------------------------------------------------------------- 442# Support for WL#2373 (Use cycle counter for timing) 443#-------------------------------------------------------------------- 444 445CHECK_INCLUDE_FILES(time.h HAVE_TIME_H) 446CHECK_INCLUDE_FILES(sys/time.h HAVE_SYS_TIME_H) 447CHECK_INCLUDE_FILES(sys/times.h HAVE_SYS_TIMES_H) 448 449CHECK_INCLUDE_FILES(ia64intrin.h HAVE_IA64INTRIN_H) 450 451CHECK_FUNCTION_EXISTS(times HAVE_TIMES) 452CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY) 453CHECK_FUNCTION_EXISTS(read_real_time HAVE_READ_REAL_TIME) 454# This should work on AIX. 455 456CHECK_FUNCTION_EXISTS(ftime HAVE_FTIME) 457# This is still a normal call for milliseconds. 458 459CHECK_FUNCTION_EXISTS(time HAVE_TIME) 460# We can use time() on Macintosh if there is no ftime(). 461 462 463# 464# Tests for symbols 465# 466 467#CHECK_SYMBOL_EXISTS(sys_errlist "stdio.h" HAVE_SYS_ERRLIST) 468CHECK_SYMBOL_EXISTS(madvise "sys/mman.h" HAVE_DECL_MADVISE) 469CHECK_SYMBOL_EXISTS(tzname "time.h" HAVE_TZNAME) 470CHECK_SYMBOL_EXISTS(lrand48 "stdlib.h" HAVE_LRAND48) 471CHECK_SYMBOL_EXISTS(getpagesize "unistd.h" HAVE_GETPAGESIZE) 472CHECK_SYMBOL_EXISTS(TIOCGWINSZ "sys/ioctl.h" GWINSZ_IN_SYS_IOCTL) 473CHECK_SYMBOL_EXISTS(FIONREAD "sys/ioctl.h" FIONREAD_IN_SYS_IOCTL) 474CHECK_SYMBOL_EXISTS(TIOCSTAT "sys/ioctl.h" TIOCSTAT_IN_SYS_IOCTL) 475CHECK_SYMBOL_EXISTS(FIONREAD "sys/filio.h" FIONREAD_IN_SYS_FILIO) 476CHECK_SYMBOL_EXISTS(gettimeofday "sys/time.h" HAVE_GETTIMEOFDAY) 477 478# 479# Test for endianness 480# 481INCLUDE(TestBigEndian) 482IF(APPLE) 483 # Cannot run endian test on universal PPC/Intel binaries 484 # would return inconsistent result. 485 # config.h.cmake includes a special #ifdef for Darwin 486ELSE() 487 TEST_BIG_ENDIAN(WORDS_BIGENDIAN) 488ENDIF() 489 490# 491# Tests for type sizes (and presence) 492# 493INCLUDE (CheckTypeSize) 494set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} 495 -D_LARGEFILE_SOURCE -D_LARGE_FILES -D_FILE_OFFSET_BITS=64 496 -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS) 497SET(CMAKE_EXTRA_INCLUDE_FILES signal.h) 498MY_CHECK_TYPE_SIZE(sigset_t SIGSET_T) 499IF(NOT SIZEOF_SIGSET_T) 500 SET(sigset_t int) 501ENDIF() 502MY_CHECK_TYPE_SIZE(mode_t MODE_T) 503IF(NOT SIZEOF_MODE_T) 504 SET(mode_t int) 505ENDIF() 506MY_CHECK_TYPE_SIZE(sighandler_t SIGHANDLER_T) 507 508IF(HAVE_NETINET_IN_H) 509 SET(CMAKE_EXTRA_INCLUDE_FILES netinet/in.h) 510 MY_CHECK_TYPE_SIZE(in_addr_t IN_ADDR_T) 511ENDIF(HAVE_NETINET_IN_H) 512 513IF(HAVE_STDINT_H) 514 SET(CMAKE_EXTRA_INCLUDE_FILES stdint.h) 515ENDIF(HAVE_STDINT_H) 516 517SET(HAVE_VOIDP 1) 518SET(HAVE_CHARP 1) 519SET(HAVE_LONG 1) 520 521IF(NOT APPLE) 522MY_CHECK_TYPE_SIZE("void *" VOIDP) 523MY_CHECK_TYPE_SIZE("char *" CHARP) 524MY_CHECK_TYPE_SIZE(long LONG) 525MY_CHECK_TYPE_SIZE(size_t SIZE_T) 526ENDIF() 527 528MY_CHECK_TYPE_SIZE(short SHORT) 529MY_CHECK_TYPE_SIZE(int INT) 530MY_CHECK_TYPE_SIZE("long long" LONG_LONG) 531SET(CMAKE_EXTRA_INCLUDE_FILES stdio.h sys/types.h) 532MY_CHECK_TYPE_SIZE(off_t OFF_T) 533MY_CHECK_TYPE_SIZE(uchar UCHAR) 534MY_CHECK_TYPE_SIZE(uint UINT) 535MY_CHECK_TYPE_SIZE(ulong ULONG) 536MY_CHECK_TYPE_SIZE(int8 INT8) 537MY_CHECK_TYPE_SIZE(uint8 UINT8) 538MY_CHECK_TYPE_SIZE(int16 INT16) 539MY_CHECK_TYPE_SIZE(uint16 UINT16) 540MY_CHECK_TYPE_SIZE(int32 INT32) 541MY_CHECK_TYPE_SIZE(uint32 UINT32) 542MY_CHECK_TYPE_SIZE(int64 INT64) 543MY_CHECK_TYPE_SIZE(uint64 UINT64) 544MY_CHECK_TYPE_SIZE(time_t TIME_T) 545SET (CMAKE_EXTRA_INCLUDE_FILES sys/types.h) 546SET(CMAKE_EXTRA_INCLUDE_FILES) 547IF(HAVE_SYS_SOCKET_H) 548 SET(CMAKE_EXTRA_INCLUDE_FILES sys/socket.h) 549ENDIF(HAVE_SYS_SOCKET_H) 550SET(CMAKE_EXTRA_INCLUDE_FILES) 551 552IF(HAVE_IEEEFP_H) 553 SET(CMAKE_EXTRA_INCLUDE_FILES ieeefp.h) 554 MY_CHECK_TYPE_SIZE(fp_except FP_EXCEPT) 555ENDIF() 556 557 558# 559# Code tests 560# 561 562# check whether time_t is unsigned 563CHECK_C_SOURCE_COMPILES(" 564#include <time.h> 565int main() 566{ 567 int array[(((time_t)-1) > 0) ? 1 : -1]; 568 return 0; 569}" 570TIME_T_UNSIGNED) 571 572CHECK_C_SOURCE_COMPILES(" 573#ifdef _WIN32 574#include <winsock2.h> 575#include <ws2tcpip.h> 576#else 577#include <sys/types.h> 578#include <sys/socket.h> 579#include <netdb.h> 580#endif 581int main() 582{ 583 select(0,0,0,0,0); 584 return 0; 585}" 586HAVE_SELECT) 587 588# 589# Check if timespec has ts_sec and ts_nsec fields 590# 591 592CHECK_C_SOURCE_COMPILES(" 593#include <pthread.h> 594 595int main(int ac, char **av) 596{ 597 struct timespec abstime; 598 abstime.ts_sec = time(NULL)+1; 599 abstime.ts_nsec = 0; 600} 601" HAVE_TIMESPEC_TS_SEC) 602 603 604# 605# Check return type of qsort() 606# 607CHECK_C_SOURCE_COMPILES(" 608#include <stdlib.h> 609#ifdef __cplusplus 610extern \"C\" 611#endif 612void qsort(void *base, size_t nel, size_t width, 613 int (*compar) (const void *, const void *)); 614int main(int ac, char **av) {} 615" QSORT_TYPE_IS_VOID) 616IF(QSORT_TYPE_IS_VOID) 617 SET(RETQSORTTYPE "void") 618ELSE(QSORT_TYPE_IS_VOID) 619 SET(RETQSORTTYPE "int") 620ENDIF(QSORT_TYPE_IS_VOID) 621 622IF(WIN32) 623SET(SOCKET_SIZE_TYPE int) 624ELSE() 625CHECK_CXX_SOURCE_COMPILES(" 626#include <sys/socket.h> 627int main(int argc, char **argv) 628{ 629 getsockname(0,0,(socklen_t *) 0); 630 return 0; 631}" 632HAVE_SOCKET_SIZE_T_AS_socklen_t) 633 634IF(HAVE_SOCKET_SIZE_T_AS_socklen_t) 635 SET(SOCKET_SIZE_TYPE socklen_t) 636ELSE() 637 CHECK_CXX_SOURCE_COMPILES(" 638 #include <sys/socket.h> 639 int main(int argc, char **argv) 640 { 641 getsockname(0,0,(int *) 0); 642 return 0; 643 }" 644 HAVE_SOCKET_SIZE_T_AS_int) 645 IF(HAVE_SOCKET_SIZE_T_AS_int) 646 SET(SOCKET_SIZE_TYPE int) 647 ELSE() 648 CHECK_CXX_SOURCE_COMPILES(" 649 #include <sys/socket.h> 650 int main(int argc, char **argv) 651 { 652 getsockname(0,0,(size_t *) 0); 653 return 0; 654 }" 655 HAVE_SOCKET_SIZE_T_AS_size_t) 656 IF(HAVE_SOCKET_SIZE_T_AS_size_t) 657 SET(SOCKET_SIZE_TYPE size_t) 658 ELSE() 659 SET(SOCKET_SIZE_TYPE int) 660 ENDIF() 661 ENDIF() 662ENDIF() 663ENDIF() 664 665CHECK_CXX_SOURCE_COMPILES(" 666#include <pthread.h> 667int main() 668{ 669 pthread_yield(); 670 return 0; 671} 672" HAVE_PTHREAD_YIELD_ZERO_ARG) 673 674IF(NOT STACK_DIRECTION) 675 IF(CMAKE_CROSSCOMPILING) 676 MESSAGE(FATAL_ERROR 677 "STACK_DIRECTION is not defined. Please specify -DSTACK_DIRECTION=1 " 678 "or -DSTACK_DIRECTION=-1 when calling cmake.") 679 ELSE() 680 TRY_RUN(STACKDIR_RUN_RESULT STACKDIR_COMPILE_RESULT 681 ${CMAKE_BINARY_DIR} 682 ${CMAKE_SOURCE_DIR}/cmake/stack_direction.c 683 ) 684 # Test program returns 0 (down) or 1 (up). 685 # Convert to -1 or 1 686 IF(STACKDIR_RUN_RESULT EQUAL 0) 687 SET(STACK_DIRECTION -1 CACHE INTERNAL "Stack grows direction") 688 ELSE() 689 SET(STACK_DIRECTION 1 CACHE INTERNAL "Stack grows direction") 690 ENDIF() 691 MESSAGE(STATUS "Checking stack direction : ${STACK_DIRECTION}") 692 ENDIF() 693ENDIF() 694 695# 696# Check return type of signal handlers 697# 698CHECK_C_SOURCE_COMPILES(" 699#include <signal.h> 700#ifdef signal 701# undef signal 702#endif 703#ifdef __cplusplus 704extern \"C\" void (*signal (int, void (*)(int)))(int); 705#else 706void (*signal ()) (); 707#endif 708int main(int ac, char **av) {} 709" SIGNAL_RETURN_TYPE_IS_VOID) 710IF(SIGNAL_RETURN_TYPE_IS_VOID) 711 SET(RETSIGTYPE void) 712 SET(VOID_SIGHANDLER 1) 713ELSE(SIGNAL_RETURN_TYPE_IS_VOID) 714 SET(RETSIGTYPE int) 715ENDIF(SIGNAL_RETURN_TYPE_IS_VOID) 716 717 718CHECK_INCLUDE_FILES("time.h;sys/time.h" TIME_WITH_SYS_TIME) 719CHECK_SYMBOL_EXISTS(O_NONBLOCK "unistd.h;fcntl.h" HAVE_FCNTL_NONBLOCK) 720IF(NOT HAVE_FCNTL_NONBLOCK) 721 SET(NO_FCNTL_NONBLOCK 1) 722ENDIF() 723 724# 725# Test for how the C compiler does inline, if at all 726# 727# SunPro is weird, apparently it only supports inline at -xO3 or -xO4. 728# And if CMAKE_C_FLAGS has -xO4 but CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE} has -xO2 729# then CHECK_C_SOURCE_COMPILES will succeed but the built will fail. 730# We must test all flags here. 731# XXX actually, we can do this for all compilers, not only SunPro 732IF (CMAKE_CXX_COMPILER_ID MATCHES "SunPro" AND 733 CMAKE_GENERATOR MATCHES "Makefiles") 734 STRING(TOUPPER "CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}" flags) 735 SET(CMAKE_REQUIRED_FLAGS "${${flags}}") 736ENDIF() 737CHECK_C_SOURCE_COMPILES(" 738extern int bar(int x); 739static inline int foo(){return bar(1);} 740int main(int argc, char *argv[]){return 0;}" 741 C_HAS_inline) 742IF(NOT C_HAS_inline) 743 CHECK_C_SOURCE_COMPILES(" 744 extern int bar(int x); 745 static __inline int foo(){return bar(1);} 746 int main(int argc, char *argv[]){return 0;}" 747 C_HAS___inline) 748 IF(C_HAS___inline) 749 SET(C_INLINE __inline) 750 ElSE() 751 SET(C_INLINE) 752 MESSAGE(WARNING "C compiler does not support funcion inlining") 753 IF(NOT NOINLINE) 754 MESSAGE(FATAL_ERROR "Use -DNOINLINE=TRUE to allow compilation without inlining") 755 ENDIF() 756 ENDIF() 757ENDIF() 758 759CHECK_SYMBOL_EXISTS(tcgetattr "termios.h" HAVE_TCGETATTR 1) 760 761# 762# Check type of signal routines (posix, 4.2bsd, 4.1bsd or v7) 763# 764CHECK_C_SOURCE_COMPILES(" 765 #include <signal.h> 766 int main(int ac, char **av) 767 { 768 sigset_t ss; 769 struct sigaction sa; 770 sigemptyset(&ss); sigsuspend(&ss); 771 sigaction(SIGINT, &sa, (struct sigaction *) 0); 772 sigprocmask(SIG_BLOCK, &ss, (sigset_t *) 0); 773 }" 774 HAVE_POSIX_SIGNALS) 775 776IF(NOT HAVE_POSIX_SIGNALS) 777 CHECK_C_SOURCE_COMPILES(" 778 #include <signal.h> 779 int main(int ac, char **av) 780 { 781 int mask = sigmask(SIGINT); 782 sigsetmask(mask); sigblock(mask); sigpause(mask); 783 }" 784 HAVE_BSD_SIGNALS) 785ENDIF(NOT HAVE_POSIX_SIGNALS) 786 787# Assume regular sprintf 788SET(SPRINTFS_RETURNS_INT 1) 789 790IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") 791CHECK_CXX_SOURCE_COMPILES(" 792 #include <cxxabi.h> 793 int main(int argc, char **argv) 794 { 795 char *foo= 0; int bar= 0; 796 foo= abi::__cxa_demangle(foo, foo, 0, &bar); 797 return 0; 798 }" 799 HAVE_ABI_CXA_DEMANGLE) 800ENDIF() 801 802CHECK_C_SOURCE_COMPILES(" 803 int main() 804 { 805 extern void __attribute__((weak)) foo(void); 806 return 0; 807 }" 808 HAVE_WEAK_SYMBOL 809) 810 811CHECK_C_SOURCE_COMPILES(" 812 void foo(int *x) { } 813 int main() { 814 int a __attribute__((cleanup(foo))); 815 return 0; 816 }" 817 HAVE_ATTRIBUTE_CLEANUP 818) 819 820CHECK_CXX_SOURCE_COMPILES(" 821 #include <new> 822 int main() 823 { 824 char *c = new char; 825 return 0; 826 }" 827 HAVE_CXX_NEW 828) 829 830CHECK_CXX_SOURCE_COMPILES(" 831 #undef inline 832 #if !defined(SCO) && !defined(__osf__) && !defined(_REENTRANT) 833 #define _REENTRANT 834 #endif 835 #include <pthread.h> 836 #include <sys/types.h> 837 #include <sys/socket.h> 838 #include <netinet/in.h> 839 #include <arpa/inet.h> 840 #include <netdb.h> 841 int main() 842 { 843 844 struct hostent *foo = 845 gethostbyaddr_r((const char *) 0, 846 0, 0, (struct hostent *) 0, (char *) NULL, 0, (int *)0); 847 return 0; 848 } 849 " 850 HAVE_SOLARIS_STYLE_GETHOST) 851 852SET(NO_ALARM 1 CACHE BOOL "No need to use alarm to implement timeout") 853 854# As a consequence of ALARMs no longer being used, thread 855# notification for KILL must close the socket to wake up 856# other threads. 857SET(SIGNAL_WITH_VIO_CLOSE 1) 858 859MARK_AS_ADVANCED(NO_ALARM) 860 861 862CHECK_CXX_SOURCE_COMPILES(" 863int main() 864{ 865 char x=1; 866 short y=1; 867 int z=1; 868 long w = 1; 869 long long s = 1; 870 x = __atomic_add_fetch(&x, 1, __ATOMIC_SEQ_CST); 871 y = __atomic_add_fetch(&y, 1, __ATOMIC_SEQ_CST); 872 z = __atomic_add_fetch(&z, 1, __ATOMIC_SEQ_CST); 873 w = __atomic_add_fetch(&w, 1, __ATOMIC_SEQ_CST); 874 return (int)__atomic_load_n(&s, __ATOMIC_SEQ_CST); 875}" 876HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC) 877IF (HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC) 878 SET(HAVE_GCC_C11_ATOMICS True) 879ELSE() 880 SET(OLD_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) 881 LIST(APPEND CMAKE_REQUIRED_LIBRARIES "atomic") 882 CHECK_CXX_SOURCE_COMPILES(" 883 int main() 884 { 885 char x=1; 886 short y=1; 887 int z=1; 888 long w = 1; 889 long long s = 1; 890 x = __atomic_add_fetch(&x, 1, __ATOMIC_SEQ_CST); 891 y = __atomic_add_fetch(&y, 1, __ATOMIC_SEQ_CST); 892 z = __atomic_add_fetch(&z, 1, __ATOMIC_SEQ_CST); 893 w = __atomic_add_fetch(&w, 1, __ATOMIC_SEQ_CST); 894 return (int)__atomic_load_n(&s, __ATOMIC_SEQ_CST); 895 }" 896 HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC) 897 IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC) 898 SET(HAVE_GCC_C11_ATOMICS True) 899 ENDIF() 900 SET(CMAKE_REQUIRED_LIBRARIES ${OLD_CMAKE_REQUIRED_LIBRARIES}) 901ENDIF() 902 903IF(WITH_VALGRIND) 904 SET(HAVE_valgrind 1) 905ENDIF() 906 907CHECK_INCLUDE_FILES("valgrind/memcheck.h;valgrind/valgrind.h" 908 HAVE_VALGRIND_MEMCHECK_H) 909 910#-------------------------------------------------------------------- 911# Check for IPv6 support 912#-------------------------------------------------------------------- 913CHECK_INCLUDE_FILE(netinet/in6.h HAVE_NETINET_IN6_H) 914 915IF(UNIX) 916 SET(CMAKE_EXTRA_INCLUDE_FILES sys/types.h netinet/in.h sys/socket.h) 917 IF(HAVE_NETINET_IN6_H) 918 SET(CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES} netinet/in6.h) 919 ENDIF() 920ELSEIF(WIN32) 921 SET(CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES} winsock2.h ws2ipdef.h) 922ENDIF() 923 924MY_CHECK_STRUCT_SIZE("sockaddr_in6" SOCKADDR_IN6) 925MY_CHECK_STRUCT_SIZE("in6_addr" IN6_ADDR) 926 927IF(HAVE_STRUCT_SOCKADDR_IN6 OR HAVE_STRUCT_IN6_ADDR) 928 SET(HAVE_IPV6 TRUE CACHE INTERNAL "") 929ENDIF() 930 931 932# Check for sockaddr_storage.ss_family 933# It is called differently under OS400 and older AIX 934 935CHECK_STRUCT_HAS_MEMBER("struct sockaddr_storage" 936 ss_family "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SOCKADDR_STORAGE_SS_FAMILY) 937IF(NOT HAVE_SOCKADDR_STORAGE_SS_FAMILY) 938 CHECK_STRUCT_HAS_MEMBER("struct sockaddr_storage" 939 __ss_family "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SOCKADDR_STORAGE___SS_FAMILY) 940 IF(HAVE_SOCKADDR_STORAGE___SS_FAMILY) 941 SET(ss_family __ss_family) 942 ENDIF() 943ENDIF() 944 945# 946# Check if struct sockaddr_in::sin_len is available. 947# 948 949CHECK_STRUCT_HAS_MEMBER("struct sockaddr_in" sin_len 950 "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SOCKADDR_IN_SIN_LEN) 951 952# 953# Check if struct sockaddr_in6::sin6_len is available. 954# 955 956CHECK_STRUCT_HAS_MEMBER("struct sockaddr_in6" sin6_len 957 "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SOCKADDR_IN6_SIN6_LEN) 958 959SET(CMAKE_EXTRA_INCLUDE_FILES) 960 961CHECK_STRUCT_HAS_MEMBER("struct dirent" d_ino "dirent.h" STRUCT_DIRENT_HAS_D_INO) 962CHECK_STRUCT_HAS_MEMBER("struct dirent" d_namlen "dirent.h" STRUCT_DIRENT_HAS_D_NAMLEN) 963SET(SPRINTF_RETURNS_INT 1) 964CHECK_INCLUDE_FILE(ucontext.h HAVE_FILE_UCONTEXT_H) 965IF(NOT HAVE_FILE_UCONTEXT_H) 966 CHECK_INCLUDE_FILE(sys/ucontext.h HAVE_FILE_UCONTEXT_H) 967ENDIF() 968IF(HAVE_FILE_UCONTEXT_H) 969 CHECK_FUNCTION_EXISTS(makecontext HAVE_UCONTEXT_H) 970ENDIF() 971 972CHECK_STRUCT_HAS_MEMBER("struct timespec" tv_sec "time.h" STRUCT_TIMESPEC_HAS_TV_SEC) 973CHECK_STRUCT_HAS_MEMBER("struct timespec" tv_nsec "time.h" STRUCT_TIMESPEC_HAS_TV_NSEC) 974 975IF(NOT MSVC) 976 CHECK_C_SOURCE_COMPILES( 977 " 978 #define _GNU_SOURCE 979 #include <fcntl.h> 980 #include <linux/falloc.h> 981 int main() 982 { 983 /* Ignore the return value for now. Check if the flags exist. 984 The return value is checked at runtime. */ 985 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 986 987 return(0); 988 }" 989 HAVE_FALLOC_PUNCH_HOLE_AND_KEEP_SIZE 990 ) 991ENDIF() 992