1e415196aSJoakim Soderberg# 2e415196aSJoakim Soderberg# Libevent CMake project 3e415196aSJoakim Soderberg# 4e415196aSJoakim Soderberg# Based on initial work by: 5e415196aSJoakim Soderberg# Alexey Ozeritsky 6e415196aSJoakim Soderberg# 7e415196aSJoakim Soderberg# Additional changes: 8e415196aSJoakim Soderberg# Brodie Thiesfield 9e415196aSJoakim Soderberg# Joakim Soderberg 104545fa9bSTrond Norbye# Trond Norbye 1127bd9fafSSergey Nikulov# Sergei Nikulov 12e415196aSJoakim Soderberg# 13e415196aSJoakim Soderberg# Build example: 14e415196aSJoakim Soderberg# 15e415196aSJoakim Soderberg# cd libevent 16e415196aSJoakim Soderberg# md build 17e415196aSJoakim Soderberg# cd build 18e415196aSJoakim Soderberg# cmake -G "Visual Studio 10" .. 19e415196aSJoakim Soderberg# start libevent.sln 20e415196aSJoakim Soderberg# 21eb10a738SAzat Khuzhin 22c46ead5dSAzat Khuzhincmake_minimum_required(VERSION 3.1 FATAL_ERROR) 234a2373eeSlightningkay 244a2373eeSlightningkayif (POLICY CMP0054) 256f749540SAzat Khuzhin cmake_policy(SET CMP0054 NEW) 264a2373eeSlightningkayendif() 273d3d1e05SAzat Khuzhinif (POLICY CMP0074) 283d3d1e05SAzat Khuzhin cmake_policy(SET CMP0074 NEW) 293d3d1e05SAzat Khuzhinendif() 305e5de36fSAzat Khuzhinif (POLICY CMP0075) 315e5de36fSAzat Khuzhin cmake_policy(SET CMP0075 NEW) 325e5de36fSAzat Khuzhinendif() 33e415196aSJoakim Soderberg 348b228e27SMark Ellzeyif(NOT CMAKE_BUILD_TYPE) 358b228e27SMark Ellzey set(CMAKE_BUILD_TYPE Release 368b228e27SMark Ellzey CACHE STRING "Set build type to Debug o Release (default Release)" FORCE) 378b228e27SMark Ellzeyendif() 3840fbffc0SAzat Khuzhinstring(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER) 398b228e27SMark Ellzey 40e415196aSJoakim Soderberg# get rid of the extra default configurations 418b228e27SMark Ellzey# what? why would you get id of other useful build types? - Ellzey 42e415196aSJoakim Soderbergset(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Limited configurations" FORCE) 43e415196aSJoakim Soderberg 44eb10a738SAzat Khuzhinset(EVENT__LIBRARY_TYPE DEFAULT CACHE STRING 45bc7f2fd9SAzat Khuzhin "Set library type to SHARED/STATIC/BOTH (default SHARED for MSVC, otherwise BOTH)") 46eb10a738SAzat Khuzhin 474ac086abSJoakim Soderbergproject(libevent C) 48e415196aSJoakim Soderberg 4987c6f735SMichael Davidsaverlist(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/") 50050bfc7fSAzat Khuzhinstring(REGEX MATCH "SunOS" SOLARIS "${CMAKE_SYSTEM_NAME}") 514545fa9bSTrond Norbye 528b228e27SMark Ellzey 537f9646d2SMark Ellzeyinclude(CheckTypeSize) 54e415196aSJoakim Soderberginclude(CheckFileOffsetBits) 5513af9d26Syuangongjiinclude(Macros) 56e415196aSJoakim Soderberginclude(CheckVariableExists) 57e415196aSJoakim Soderberginclude(CheckSymbolExists) 58e415196aSJoakim Soderberginclude(CheckStructHasMember) 59e415196aSJoakim Soderberginclude(CheckCSourceCompiles) 60e415196aSJoakim Soderberginclude(CheckPrototypeDefinition) 618b228e27SMark Ellzeyinclude(CheckFunctionKeywords) 62a0bfe2c4SAzat Khuzhininclude(CheckConstExists) 63a9db46aeSMark Ellzeyinclude(AddCompilerFlags) 64a9db46aeSMark Ellzeyinclude(VersionViaGit) 658b228e27SMark Ellzey 66a9db46aeSMark Ellzeyevent_fuzzy_version_from_git() 678b228e27SMark Ellzey 68a9db46aeSMark Ellzeyset(EVENT_VERSION_MAJOR ${EVENT_GIT___VERSION_MAJOR}) 69a9db46aeSMark Ellzeyset(EVENT_VERSION_MINOR ${EVENT_GIT___VERSION_MINOR}) 70a9db46aeSMark Ellzeyset(EVENT_VERSION_PATCH ${EVENT_GIT___VERSION_PATCH}) 7149a53811SMark Ellzeyset(EVENT_VERSION_STAGE ${EVENT_GIT___VERSION_STAGE}) 728b228e27SMark Ellzey 73a9db46aeSMark Ellzey 74a9db46aeSMark Ellzeyset(EVENT_ABI_MAJOR ${EVENT_VERSION_MAJOR}) 75a9db46aeSMark Ellzeyset(EVENT_ABI_MINOR ${EVENT_VERSION_MINOR}) 76a9db46aeSMark Ellzeyset(EVENT_ABI_PATCH ${EVENT_VERSION_PATCH}) 77a9db46aeSMark Ellzey 78a9db46aeSMark Ellzeyset(EVENT_ABI_LIBVERSION 79a9db46aeSMark Ellzey "${EVENT_ABI_MAJOR}.${EVENT_ABI_MINOR}.${EVENT_ABI_PATCH}") 80a9db46aeSMark Ellzey 81a9db46aeSMark Ellzeyset(EVENT_PACKAGE_VERSION 82a9db46aeSMark Ellzey "${EVENT_VERSION_MAJOR}.${EVENT_VERSION_MINOR}.${EVENT_VERSION_PATCH}") 83a9db46aeSMark Ellzey 84*2cfa7ff7SAzat Khuzhinset(EVENT_NUMERIC_VERSION 0x02010c00) 85305251b9Syuangongji# equals to VERSION_INFO in Makefile.am 865b723a66SAzat Khuzhinset(EVENT_ABI_LIBVERSION_CURRENT 7) 87*2cfa7ff7SAzat Khuzhinset(EVENT_ABI_LIBVERSION_REVISION 1) 88305251b9Syuangongjiset(EVENT_ABI_LIBVERSION_AGE 0) 89305251b9Syuangongji 90305251b9Syuangongji# equals to RELEASE in Makefile.am 91305251b9Syuangongjiset(EVENT_PACKAGE_RELEASE 2.1) 92a9db46aeSMark Ellzey 93a9db46aeSMark Ellzey# only a subset of names can be used, defaults to "beta" 94d9d11cb2SAzat Khuzhinset(EVENT_STAGE_NAME ${EVENT_VERSION_STAGE}) 95a9db46aeSMark Ellzey 96a9db46aeSMark Ellzey# a list that defines what can set for EVENT_STAGE_VERSION 97a9db46aeSMark Ellzeyset(EVENT__ALLOWED_STAGE_NAMES 98a9db46aeSMark Ellzey rc 99a9db46aeSMark Ellzey beta 100a9db46aeSMark Ellzey alpha 101d9d11cb2SAzat Khuzhin alpha-dev 102d9d11cb2SAzat Khuzhin release 103d9d11cb2SAzat Khuzhin stable 104d9d11cb2SAzat Khuzhin) 105d9d11cb2SAzat Khuzhinlist( 106d9d11cb2SAzat Khuzhin FIND EVENT__ALLOWED_STAGE_NAMES 107d9d11cb2SAzat Khuzhin "${EVENT_STAGE_NAME}" 108d9d11cb2SAzat Khuzhin EVENT__STAGE_RET 109d9d11cb2SAzat Khuzhin) 110d9d11cb2SAzat Khuzhinif (EVENT__STAGE_RET EQUAL -1) 111d9d11cb2SAzat Khuzhin message(WARNING 112d9d11cb2SAzat Khuzhin "stage ${EVENT_STAGE_NAME} is not allowed, reset to beta") 113d56efd94SMark Ellzey set(EVENT_STAGE_NAME beta) 1148b228e27SMark Ellzeyendif() 115a9db46aeSMark Ellzey 116a9db46aeSMark Ellzeyset(EVENT_VERSION 11749a53811SMark Ellzey "${EVENT_VERSION_MAJOR}.${EVENT_VERSION_MINOR}.${EVENT_VERSION_PATCH}-${EVENT_STAGE_NAME}") 118a9db46aeSMark Ellzey 119a9db46aeSMark Ellzeyoption(EVENT__DISABLE_DEBUG_MODE 120a9db46aeSMark Ellzey "Define if libevent should build without support for a debug mode" OFF) 121a9db46aeSMark Ellzey 122a9db46aeSMark Ellzeyoption(EVENT__ENABLE_VERBOSE_DEBUG 123a9db46aeSMark Ellzey "Enables verbose debugging" OFF) 124a9db46aeSMark Ellzey 125a9db46aeSMark Ellzeyoption(EVENT__DISABLE_MM_REPLACEMENT 126a9db46aeSMark Ellzey "Define if libevent should not allow replacing the mm functions" OFF) 127a9db46aeSMark Ellzey 128a9db46aeSMark Ellzeyoption(EVENT__DISABLE_THREAD_SUPPORT 129a9db46aeSMark Ellzey "Define if libevent should not be compiled with thread support" OFF) 130a9db46aeSMark Ellzey 131a9db46aeSMark Ellzeyoption(EVENT__DISABLE_OPENSSL 132c264028cSFredrik Strupe "Define if libevent should build without support for OpenSSL encryption" OFF) 133a9db46aeSMark Ellzey 134a9db46aeSMark Ellzeyoption(EVENT__DISABLE_BENCHMARK 135c264028cSFredrik Strupe "Defines if libevent should build without the benchmark executables" OFF) 136a9db46aeSMark Ellzey 137a9db46aeSMark Ellzeyoption(EVENT__DISABLE_TESTS 138a9db46aeSMark Ellzey "If tests should be compiled or not" OFF) 139a9db46aeSMark Ellzey 140a9db46aeSMark Ellzeyoption(EVENT__DISABLE_REGRESS 141a9db46aeSMark Ellzey "Disable the regress tests" OFF) 142a9db46aeSMark Ellzey 143a9db46aeSMark Ellzeyoption(EVENT__DISABLE_SAMPLES 144a9db46aeSMark Ellzey "Disable sample files" OFF) 145a9db46aeSMark Ellzey 14691559607SAzat Khuzhinoption(EVENT__DISABLE_CLOCK_GETTIME 14791559607SAzat Khuzhin "Do not use clock_gettime even if it is available" OFF) 14891559607SAzat Khuzhin 149a9db46aeSMark Ellzeyoption(EVENT__FORCE_KQUEUE_CHECK 150c264028cSFredrik Strupe "When crosscompiling forces running a test program that verifies that Kqueue works with pipes. Note that this requires you to manually run the test program on the cross compilation target to verify that it works. See cmake documentation for try_run for more details" OFF) 151a9db46aeSMark Ellzey 152a9db46aeSMark Ellzey# TODO: Add --disable-largefile omit support for large files 153a9db46aeSMark Ellzeyoption(EVENT__COVERAGE 154a9db46aeSMark Ellzey"Enable running gcov to get a test coverage report (only works with GCC/CLang). Make sure to enable -DCMAKE_BUILD_TYPE=Debug as well." OFF) 155a9db46aeSMark Ellzey 156a9db46aeSMark Ellzey# Put the libaries and binaries that get built into directories at the 157a9db46aeSMark Ellzey# top of the build tree rather than in hard-to-find leaf directories. 1582db851a9SAzat Khuzhin# 1592db851a9SAzat Khuzhin# But only if this variables are not defined yet 1602db851a9SAzat Khuzhin# (i.e. libevent is used via add_subdirectory()) 1612db851a9SAzat Khuzhinif (NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY) 162a9db46aeSMark Ellzey set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) 1632db851a9SAzat Khuzhinendif() 1642db851a9SAzat Khuzhinif (NOT DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY) 165a9db46aeSMark Ellzey set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) 1662db851a9SAzat Khuzhinendif() 1672db851a9SAzat Khuzhinif (NOT DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY) 168a9db46aeSMark Ellzey set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) 1692db851a9SAzat Khuzhinendif() 170e415196aSJoakim Soderberg 171fd42e70dSJoakim Soderbergif (EVENT__ENABLE_VERBOSE_DEBUG) 172e35f2241SAzat Khuzhin add_definitions(-DUSE_DEBUG=1) 173fd42e70dSJoakim Soderbergendif() 174fd42e70dSJoakim Soderberg 1752594a96fSAzat Khuzhin# make it colorful under ninja-build 1762594a96fSAzat Khuzhinif ("${CMAKE_GENERATOR}" STREQUAL "Ninja") 1772594a96fSAzat Khuzhin add_compiler_flags(-fdiagnostics-color=always) 1782594a96fSAzat Khuzhinendif() 1792594a96fSAzat Khuzhin 180f2483f8bSJoakim Soderberg# Setup compiler flags for coverage. 181f2483f8bSJoakim Soderbergif (EVENT__COVERAGE) 18240fbffc0SAzat Khuzhin if (NOT "${CMAKE_BUILD_TYPE_LOWER}" STREQUAL "debug") 183a9db46aeSMark Ellzey message(FATAL_ERROR "Coverage requires -DCMAKE_BUILD_TYPE=Debug") 184f2483f8bSJoakim Soderberg endif() 185f2483f8bSJoakim Soderberg 1868b228e27SMark Ellzey message(STATUS "Setting coverage compiler flags") 18740fbffc0SAzat Khuzhin 18840fbffc0SAzat Khuzhin set(CMAKE_REQUIRED_LIBRARIES "--coverage") 18940fbffc0SAzat Khuzhin add_compiler_flags(-g -O0 --coverage) 19040fbffc0SAzat Khuzhin set(CMAKE_REQUIRED_LIBRARIES "") 191f2483f8bSJoakim Soderbergendif() 192f2483f8bSJoakim Soderberg 193acf4821dSAzat Khuzhinset(GNUC 0) 194acf4821dSAzat Khuzhinset(CLANG 0) 195bc7f2fd9SAzat Khuzhinset(MSVC 0) 196acf4821dSAzat Khuzhinif (("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") OR 197acf4821dSAzat Khuzhin ("${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang")) 198acf4821dSAzat Khuzhin set(CLANG 1) 199acf4821dSAzat Khuzhinendif() 200bc7f2fd9SAzat Khuzhinif (("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") OR (${CLANG})) 201acf4821dSAzat Khuzhin set(GNUC 1) 202acf4821dSAzat Khuzhinendif() 203bc7f2fd9SAzat Khuzhinif (("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC") OR (${CLANG})) 204bc7f2fd9SAzat Khuzhin set(MSVC 1) 205bc7f2fd9SAzat Khuzhinendif() 206acf4821dSAzat Khuzhin 207eb10a738SAzat Khuzhin# Detect library type 208eb10a738SAzat Khuzhinset(EVENT_LIBRARY_TYPE) 209eb10a738SAzat Khuzhinif ("${EVENT__LIBRARY_TYPE}" STREQUAL "DEFAULT") 210bc7f2fd9SAzat Khuzhin if (${MSVC}) 211bc7f2fd9SAzat Khuzhin set(EVENT_LIBRARY_TYPE SHARED) 212bc7f2fd9SAzat Khuzhin else() 213eb10a738SAzat Khuzhin set(EVENT_LIBRARY_TYPE BOTH) 214bc7f2fd9SAzat Khuzhin endif() 215eb10a738SAzat Khuzhinelse() 216eb10a738SAzat Khuzhin string(TOUPPER "${EVENT__LIBRARY_TYPE}" EVENT_LIBRARY_TYPE) 217eb10a738SAzat Khuzhinendif() 218bc7f2fd9SAzat Khuzhinif ((${MSVC}) AND ("${EVENT_LIBRARY_TYPE}" STREQUAL "BOTH")) 219bc7f2fd9SAzat Khuzhin message(WARNING 220bc7f2fd9SAzat Khuzhin "Building SHARED and STATIC is not supported for MSVC " 221bc7f2fd9SAzat Khuzhin "(due to conflicts in library name" 222bc7f2fd9SAzat Khuzhin " between STATIC library and IMPORTED library for SHARED libraries)") 223bc7f2fd9SAzat Khuzhinendif() 224eb10a738SAzat Khuzhinset(EVENT_LIBRARY_STATIC OFF) 225eb10a738SAzat Khuzhinset(EVENT_LIBRARY_SHARED OFF) 226eb10a738SAzat Khuzhinif ("${EVENT_LIBRARY_TYPE}" STREQUAL "BOTH") 227eb10a738SAzat Khuzhin set(EVENT_LIBRARY_STATIC ON) 228eb10a738SAzat Khuzhin set(EVENT_LIBRARY_SHARED ON) 229eb10a738SAzat Khuzhinelseif ("${EVENT_LIBRARY_TYPE}" STREQUAL "STATIC") 230eb10a738SAzat Khuzhin set(EVENT_LIBRARY_STATIC ON) 231eb10a738SAzat Khuzhinelseif ("${EVENT_LIBRARY_TYPE}" STREQUAL "SHARED") 232eb10a738SAzat Khuzhin set(EVENT_LIBRARY_SHARED ON) 233eb10a738SAzat Khuzhinelse() 234eb10a738SAzat Khuzhin message(FATAL_ERROR "${EVENT_LIBRARY_TYPE} is not supported") 235eb10a738SAzat Khuzhinendif() 236eb10a738SAzat Khuzhin 237c8b3ec17SAzat Khuzhinif (${MSVC}) 238c8b3ec17SAzat Khuzhin set(msvc_static_runtime OFF) 239c8b3ec17SAzat Khuzhin if ("${EVENT_LIBRARY_TYPE}" STREQUAL "STATIC") 240c8b3ec17SAzat Khuzhin set(msvc_static_runtime ON) 241c8b3ec17SAzat Khuzhin endif() 242c8b3ec17SAzat Khuzhin 243c8b3ec17SAzat Khuzhin # For more info: 244c8b3ec17SAzat Khuzhin # - https://docs.microsoft.com/en-us/cpp/build/reference/md-mt-ld-use-run-time-library?view=vs-2017 245c8b3ec17SAzat Khuzhin # - https://gitlab.kitware.com/cmake/community/wikis/FAQ#how-can-i-build-my-msvc-application-with-a-static-runtime 246c8b3ec17SAzat Khuzhin option(EVENT__MSVC_STATIC_RUNTIME 247c8b3ec17SAzat Khuzhin "Link static runtime libraries" 248c8b3ec17SAzat Khuzhin ${msvc_static_runtime}) 249c8b3ec17SAzat Khuzhin 250c8b3ec17SAzat Khuzhin if (EVENT__MSVC_STATIC_RUNTIME) 251c8b3ec17SAzat Khuzhin foreach (flag_var 252c8b3ec17SAzat Khuzhin CMAKE_C_FLAGS_DEBUG 253c8b3ec17SAzat Khuzhin CMAKE_C_FLAGS_RELEASE 254c8b3ec17SAzat Khuzhin CMAKE_C_FLAGS_MINSIZEREL 255c8b3ec17SAzat Khuzhin CMAKE_C_FLAGS_RELWITHDEBINFO 256c8b3ec17SAzat Khuzhin ) 257c8b3ec17SAzat Khuzhin if (${flag_var} MATCHES "/MD") 258c8b3ec17SAzat Khuzhin string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") 259c8b3ec17SAzat Khuzhin endif() 260c8b3ec17SAzat Khuzhin endforeach() 261c8b3ec17SAzat Khuzhin endif() 262c8b3ec17SAzat Khuzhinendif() 263c8b3ec17SAzat Khuzhin 264acf4821dSAzat Khuzhin# GNUC specific options. 265acf4821dSAzat Khuzhinif (${GNUC}) 26619222e52SJoakim Soderberg option(EVENT__DISABLE_GCC_WARNINGS "Disable verbose warnings with GCC" OFF) 26719222e52SJoakim Soderberg option(EVENT__ENABLE_GCC_HARDENING "Enable compiler security checks" OFF) 2688b228e27SMark Ellzey option(EVENT__ENABLE_GCC_FUNCTION_SECTIONS "Enable gcc function sections" OFF) 2698b228e27SMark Ellzey option(EVENT__ENABLE_GCC_WARNINGS "Make all GCC warnings into errors" OFF) 2708b228e27SMark Ellzey 271acf4821dSAzat Khuzhin set(GCC_V ${CMAKE_C_COMPILER_VERSION}) 272acf4821dSAzat Khuzhin 273acf4821dSAzat Khuzhin list(APPEND __FLAGS 274b062bf0aSAzat Khuzhin -Wall -Wextra -Wno-unused-parameter -Wstrict-aliasing -Wstrict-prototypes 275acf4821dSAzat Khuzhin 276acf4821dSAzat Khuzhin -fno-strict-aliasing # gcc 2.9.5+ 2773da21a94SAzat Khuzhin -Wmissing-prototypes 278acf4821dSAzat Khuzhin 279acf4821dSAzat Khuzhin # gcc 4 280acf4821dSAzat Khuzhin -Winit-self 281acf4821dSAzat Khuzhin -Wmissing-field-initializers 282acf4821dSAzat Khuzhin -Wdeclaration-after-statement 283acf4821dSAzat Khuzhin 284acf4821dSAzat Khuzhin # gcc 4.2 285acf4821dSAzat Khuzhin -Waddress 286acf4821dSAzat Khuzhin -Wnormalized=id 287acf4821dSAzat Khuzhin -Woverride-init 288acf4821dSAzat Khuzhin 289acf4821dSAzat Khuzhin # gcc 4.5 290acf4821dSAzat Khuzhin -Wlogical-op 291b062bf0aSAzat Khuzhin 292b062bf0aSAzat Khuzhin -Wwrite-strings 293acf4821dSAzat Khuzhin ) 2948b228e27SMark Ellzey 295b062bf0aSAzat Khuzhin if (${CLANG}) 296b062bf0aSAzat Khuzhin list(APPEND __FLAGS -Wno-unused-function) 297b062bf0aSAzat Khuzhin endif() 298b062bf0aSAzat Khuzhin 2998b228e27SMark Ellzey if (EVENT__DISABLE_GCC_WARNINGS) 3008b228e27SMark Ellzey list(APPEND __FLAGS -w) 30119222e52SJoakim Soderberg endif() 30219222e52SJoakim Soderberg 3038b228e27SMark Ellzey if (EVENT__ENABLE_GCC_HARDENING) 3048b228e27SMark Ellzey list(APPEND __FLAGS 3058b228e27SMark Ellzey -fstack-protector-all 3068b228e27SMark Ellzey -fwrapv 3078b228e27SMark Ellzey -fPIE 3088b228e27SMark Ellzey -Wstack-protector 3098b228e27SMark Ellzey "--param ssp-buffer-size=1") 3108b228e27SMark Ellzey 3118b228e27SMark Ellzey add_definitions(-D_FORTIFY_SOURCE=2) 3128b228e27SMark Ellzey endif() 3138b228e27SMark Ellzey 31419222e52SJoakim Soderberg if (EVENT__ENABLE_GCC_FUNCTION_SECTIONS) 3158b228e27SMark Ellzey list(APPEND __FLAGS -ffunction-sections) 31619222e52SJoakim Soderberg # TODO: Add --gc-sections support. We need some checks for NetBSD to ensure this works. 31719222e52SJoakim Soderberg endif() 31819222e52SJoakim Soderberg 319dd413bd1SJoakim Soderberg if (EVENT__ENABLE_GCC_WARNINGS) 3208b228e27SMark Ellzey list(APPEND __FLAGS -Werror) 321dd413bd1SJoakim Soderberg endif() 322dd413bd1SJoakim Soderberg 32336588e16SAzat Khuzhin add_compiler_flags(${__FLAGS}) 32419222e52SJoakim Soderbergendif() 32519222e52SJoakim Soderberg 32669c3516bSJoakim Söderbergif (APPLE) 32769c3516bSJoakim Söderberg # Get rid of deprecated warnings for OpenSSL on OSX 10.7 and greater. 3288b228e27SMark Ellzey add_compiler_flags( 3298b228e27SMark Ellzey -Wno-error=deprecated-declarations 33036588e16SAzat Khuzhin -Qunused-arguments 33136588e16SAzat Khuzhin ) 33269c3516bSJoakim Söderbergendif() 33369c3516bSJoakim Söderberg 33413af9d26Syuangongjiif (MINGW OR CYGWIN) 33513af9d26Syuangongji set(WIN32 TRUE) 33613af9d26Syuangongjiendif() 33713af9d26Syuangongji 338e415196aSJoakim Soderberg# Winsock. 339e415196aSJoakim Soderbergif(WIN32) 34013af9d26Syuangongji set(CMAKE_REQUIRED_LIBRARIES ws2_32 shell32 advapi32) 341dea51c2eSyuangongji set(CMAKE_REQUIRED_DEFINITIONS -FIwinsock2.h -FIws2tcpip.h -D_WIN32_WINNT=0x0600) 342e415196aSJoakim Soderbergendif() 343dc95823cSAzat Khuzhinif (SOLARIS) 344dc95823cSAzat Khuzhin set(CMAKE_REQUIRED_LIBRARIES socket nsl) 345dc95823cSAzat Khuzhinendif() 346e415196aSJoakim Soderberg 347e415196aSJoakim Soderberg# Check if _GNU_SOURCE is available. 348b52c6498SAzat Khuzhinif (NOT DEFINED _GNU_SOURCE) 349e415196aSJoakim Soderberg CHECK_SYMBOL_EXISTS(__GNU_LIBRARY__ "features.h" _GNU_SOURCE) 350e415196aSJoakim Soderberg 351a0bfe2c4SAzat Khuzhin if (NOT _GNU_SOURCE) 352a0bfe2c4SAzat Khuzhin unset(_GNU_SOURCE CACHE) 353a0bfe2c4SAzat Khuzhin CHECK_SYMBOL_EXISTS(_GNU_SOURCE "features.h" _GNU_SOURCE) 354a0bfe2c4SAzat Khuzhin endif() 355f013fc7dSKeith Smiley 356f013fc7dSKeith Smiley if (ANDROID) 357f013fc7dSKeith Smiley set(_GNU_SOURCE TRUE) 358f013fc7dSKeith Smiley endif() 359a0bfe2c4SAzat Khuzhinendif() 360a0bfe2c4SAzat Khuzhin 361e415196aSJoakim Soderbergif (_GNU_SOURCE) 36200ba9fa2SEnji Cooper add_definitions(-D_GNU_SOURCE=1) 36313af9d26Syuangongji set(CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE) 364e415196aSJoakim Soderbergendif() 365e415196aSJoakim Soderberg 36613af9d26Syuangongji# Check if header files exist 36713af9d26Syuangongjilist(APPEND FILES_TO_CHECK 36813af9d26Syuangongji fcntl.h 36913af9d26Syuangongji inttypes.h 37013af9d26Syuangongji memory.h 37113af9d26Syuangongji signal.h 37213af9d26Syuangongji stdarg.h 37313af9d26Syuangongji stddef.h 37413af9d26Syuangongji stdint.h 37513af9d26Syuangongji stdlib.h 37613af9d26Syuangongji string.h 37713af9d26Syuangongji errno.h 37813af9d26Syuangongji unistd.h 37913af9d26Syuangongji time.h 38013af9d26Syuangongji sys/types.h 38113af9d26Syuangongji sys/stat.h 38213af9d26Syuangongji sys/time.h 38313af9d26Syuangongji sys/param.h 38413af9d26Syuangongji) 3857c4da937SAzat Khuzhinif (WIN32) 38613af9d26Syuangongji list(APPEND FILES_TO_CHECK 38713af9d26Syuangongji io.h 38813af9d26Syuangongji winsock2.h 38913af9d26Syuangongji ws2tcpip.h 39013af9d26Syuangongji afunix.h 39113af9d26Syuangongji ) 39213af9d26Syuangongjielse() 39313af9d26Syuangongji list(APPEND FILES_TO_CHECK 39413af9d26Syuangongji netdb.h 39513af9d26Syuangongji dlfcn.h 39613af9d26Syuangongji arpa/inet.h 39713af9d26Syuangongji poll.h 39813af9d26Syuangongji port.h 39913af9d26Syuangongji sys/socket.h 40013af9d26Syuangongji sys/random.h 40113af9d26Syuangongji sys/un.h 40213af9d26Syuangongji sys/devpoll.h 40313af9d26Syuangongji sys/epoll.h 40413af9d26Syuangongji sys/eventfd.h 40513af9d26Syuangongji sys/event.h 40613af9d26Syuangongji sys/ioctl.h 40713af9d26Syuangongji sys/mman.h 40813af9d26Syuangongji sys/queue.h 40913af9d26Syuangongji sys/select.h 41013af9d26Syuangongji sys/sendfile.h 41113af9d26Syuangongji sys/uio.h 41213af9d26Syuangongji sys/wait.h 41313af9d26Syuangongji sys/resource.h 41413af9d26Syuangongji sys/timerfd.h 41513af9d26Syuangongji netinet/in.h 41613af9d26Syuangongji netinet/in6.h 41713af9d26Syuangongji netinet/tcp.h 41813af9d26Syuangongji ifaddrs.h 41913af9d26Syuangongji ) 420e415196aSJoakim Soderbergendif() 421e415196aSJoakim Soderberg 422d2871a37SAzat Khuzhinif (NOT "${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Linux") 42313af9d26Syuangongji list(APPEND FILES_TO_CHECK sys/sysctl.h) 424d2871a37SAzat Khuzhinendif() 425e415196aSJoakim Soderberg 42613af9d26Syuangongjiif (APPLE) 42713af9d26Syuangongji list(APPEND FILES_TO_CHECK 42813af9d26Syuangongji mach/mach_time.h 42913af9d26Syuangongji mach/mach.h 43013af9d26Syuangongji ) 431dea51c2eSyuangongjiendif() 43213af9d26Syuangongji 43313af9d26Syuangongjiforeach(FILE ${FILES_TO_CHECK}) 43413af9d26Syuangongji CHECK_INCLUDE_FILE_CONCAT(${FILE} "EVENT") 43513af9d26Syuangongjiendforeach() 43613af9d26Syuangongjiunset(FILES_TO_CHECK) 43713af9d26Syuangongji 43813af9d26Syuangongji# Check if functions exist 439dea51c2eSyuangongjilist(APPEND SYMBOLS_TO_CHECK 440dea51c2eSyuangongji getaddrinfo 441dea51c2eSyuangongji getnameinfo 442dea51c2eSyuangongji getprotobynumber 44313af9d26Syuangongji getservbyname 44413af9d26Syuangongji gethostbyname 445dea51c2eSyuangongji inet_ntop 446dea51c2eSyuangongji inet_pton 44713af9d26Syuangongji gettimeofday 44813af9d26Syuangongji signal 449dea51c2eSyuangongji strtoll 45013af9d26Syuangongji splice 45113af9d26Syuangongji strlcpy 45213af9d26Syuangongji strsep 45313af9d26Syuangongji strtok_r 45413af9d26Syuangongji vasprintf 455dea51c2eSyuangongji timerclear 456dea51c2eSyuangongji timercmp 457dea51c2eSyuangongji timerisset 45813af9d26Syuangongji timeradd 45913af9d26Syuangongji nanosleep 460dea51c2eSyuangongji putenv 46113af9d26Syuangongji umask 462dea51c2eSyuangongji) 46391559607SAzat Khuzhinif (NOT EVENT__DISABLE_CLOCK_GETTIME) 46413af9d26Syuangongji list(APPEND SYMBOLS_TO_CHECK clock_gettime) 46591559607SAzat Khuzhinendif() 46613af9d26Syuangongji 46713af9d26Syuangongjiif (WIN32) 46813af9d26Syuangongji list(APPEND SYMBOLS_TO_CHECK 46913af9d26Syuangongji _gmtime64_s 47013af9d26Syuangongji _gmtime64 47113af9d26Syuangongji ) 47213af9d26Syuangongjielse() 47313af9d26Syuangongji list(APPEND SYMBOLS_TO_CHECK 47413af9d26Syuangongji getifaddrs 47513af9d26Syuangongji select 47613af9d26Syuangongji epoll_create 47713af9d26Syuangongji epoll_create1 47813af9d26Syuangongji epoll_ctl 47913af9d26Syuangongji eventfd 48013af9d26Syuangongji poll 48113af9d26Syuangongji port_create 48213af9d26Syuangongji kqueue 48313af9d26Syuangongji fcntl 48413af9d26Syuangongji mmap 48513af9d26Syuangongji pipe 48613af9d26Syuangongji pipe2 48713af9d26Syuangongji sendfile 48813af9d26Syuangongji sigaction 48913af9d26Syuangongji strsignal 49013af9d26Syuangongji sysctl 49113af9d26Syuangongji accept4 49213af9d26Syuangongji arc4random 49313af9d26Syuangongji arc4random_buf 49413af9d26Syuangongji arc4random_addrandom 49513af9d26Syuangongji getrandom 49613af9d26Syuangongji getegid 49713af9d26Syuangongji geteuid 49813af9d26Syuangongji issetugid 49913af9d26Syuangongji usleep 50013af9d26Syuangongji timerfd_create 50113af9d26Syuangongji setenv 50213af9d26Syuangongji unsetenv 50313af9d26Syuangongji setrlimit 50413af9d26Syuangongji gethostbyname_r 50513af9d26Syuangongji ) 50613af9d26Syuangongji if (APPLE) 50713af9d26Syuangongji list(APPEND SYMBOLS_TO_CHECK mach_absolute_time) 50813af9d26Syuangongji endif() 50913af9d26Syuangongjiendif() 51013af9d26Syuangongji 51113af9d26Syuangongji# Add stdio.h for vasprintf 51213af9d26Syuangongjiset(EVENT_INCLUDES ${EVENT_INCLUDES} stdio.h) 51313af9d26SyuangongjiCHECK_SYMBOLS_EXIST("${SYMBOLS_TO_CHECK}" "${EVENT_INCLUDES}" "EVENT") 51413af9d26Syuangongjiunset(SYMBOLS_TO_CHECK) 51513af9d26Syuangongjiset(EVENT__HAVE_EPOLL ${EVENT__HAVE_EPOLL_CREATE}) 516e415196aSJoakim Soderberg 517e415196aSJoakim Soderberg# Get the gethostbyname_r prototype. 518e415196aSJoakim Soderbergif(EVENT__HAVE_GETHOSTBYNAME_R) 519e415196aSJoakim Soderberg CHECK_PROTOTYPE_DEFINITION(gethostbyname_r 520e415196aSJoakim Soderberg "int gethostbyname_r(const char *name, struct hostent *hp, struct hostent_data *hdata)" 521e415196aSJoakim Soderberg "0" 522e415196aSJoakim Soderberg "netdb.h" 523e415196aSJoakim Soderberg EVENT__HAVE_GETHOSTBYNAME_R_3_ARG) 524e415196aSJoakim Soderberg 525e415196aSJoakim Soderberg CHECK_PROTOTYPE_DEFINITION(gethostbyname_r 526e415196aSJoakim Soderberg "struct hostent *gethostbyname_r(const char *name, struct hostent *hp, char *buf, size_t buflen, int *herr)" 527e415196aSJoakim Soderberg "NULL" 528e415196aSJoakim Soderberg "netdb.h" 529e415196aSJoakim Soderberg EVENT__HAVE_GETHOSTBYNAME_R_5_ARG) 530e415196aSJoakim Soderberg 531e415196aSJoakim Soderberg CHECK_PROTOTYPE_DEFINITION(gethostbyname_r 532e415196aSJoakim Soderberg "int gethostbyname_r(const char *name, struct hostent *hp, char *buf, size_t buflen, struct hostent **result, int *herr)" 533e415196aSJoakim Soderberg "0" 534e415196aSJoakim Soderberg "netdb.h" 535e415196aSJoakim Soderberg EVENT__HAVE_GETHOSTBYNAME_R_6_ARG) 536e415196aSJoakim Soderbergendif() 537e415196aSJoakim Soderberg 538e415196aSJoakim Soderbergif(HAVE_PORT_H AND HAVE_PORT_CREATE) 539e415196aSJoakim Soderberg set(EVENT__HAVE_EVENT_PORTS 1) 540e415196aSJoakim Soderbergendif() 541e415196aSJoakim Soderberg 54213af9d26Syuangongji# Only `CHECK_TYPE_SIZE()' will use `CMAKE_EXTRA_INCLUDE_FILES' 54313af9d26Syuangongjiset(CMAKE_EXTRA_INCLUDE_FILES ${EVENT_INCLUDES}) 544e415196aSJoakim Soderberg 54513af9d26SyuangongjiCHECK_TYPE_SIZE("struct sockaddr_un" EVENT__HAVE_STRUCT_SOCKADDR_UN) 546e415196aSJoakim SoderbergCHECK_TYPE_SIZE("uint8_t" EVENT__HAVE_UINT8_T) 547e415196aSJoakim SoderbergCHECK_TYPE_SIZE("uint16_t" EVENT__HAVE_UINT16_T) 548e415196aSJoakim SoderbergCHECK_TYPE_SIZE("uint32_t" EVENT__HAVE_UINT32_T) 549e415196aSJoakim SoderbergCHECK_TYPE_SIZE("uint64_t" EVENT__HAVE_UINT64_T) 550e415196aSJoakim SoderbergCHECK_TYPE_SIZE("short" EVENT__SIZEOF_SHORT BUILTIN_TYPES_ONLY) 551e415196aSJoakim SoderbergCHECK_TYPE_SIZE("int" EVENT__SIZEOF_INT BUILTIN_TYPES_ONLY) 552e415196aSJoakim SoderbergCHECK_TYPE_SIZE("unsigned" EVENT__SIZEOF_UNSIGNED BUILTIN_TYPES_ONLY) 553e415196aSJoakim SoderbergCHECK_TYPE_SIZE("unsigned int" EVENT__SIZEOF_UNSIGNED_INT BUILTIN_TYPES_ONLY) 554e415196aSJoakim SoderbergCHECK_TYPE_SIZE("long" EVENT__SIZEOF_LONG BUILTIN_TYPES_ONLY) 555e415196aSJoakim SoderbergCHECK_TYPE_SIZE("long long" EVENT__SIZEOF_LONG_LONG BUILTIN_TYPES_ONLY) 556e415196aSJoakim Soderberg 557e415196aSJoakim Soderbergif(WIN32) 558e415196aSJoakim Soderberg # These aren't available until Windows Vista. 559e415196aSJoakim Soderberg # But you can still link them. They just won't be found when running the exe. 560e415196aSJoakim Soderberg set(EVENT__HAVE_INET_NTOP 0) 561e415196aSJoakim Soderberg set(EVENT__HAVE_INET_PTON 0) 562e415196aSJoakim Soderbergendif() 563e415196aSJoakim Soderberg 564e415196aSJoakim Soderberg# Check for different inline keyword versions. 5658b228e27SMark Ellzeycheck_function_keywords("inline" "__inline" "__inline__") 566e415196aSJoakim Soderberg 5678b228e27SMark Ellzeyif (HAVE_INLINE) 5688b228e27SMark Ellzey set(EVENT__inline inline) 5698b228e27SMark Ellzeyelseif (HAVE___INLINE) 570e415196aSJoakim Soderberg set(EVENT__inline __inline) 5718b228e27SMark Ellzeyelseif(HAVE___INLINE__) 5728b228e27SMark Ellzey set(EVENT__inline __inline__) 573e415196aSJoakim Soderbergelse() 5748b228e27SMark Ellzey set(EVENT__inline) 575e415196aSJoakim Soderbergendif() 576b3af7bddSAzat Khuzhin 577b3af7bddSAzat Khuzhin# __func__/__FUNCTION__ is not a macros in general 578b3af7bddSAzat KhuzhinCHECK_SYMBOL_EXISTS("__func__" "" EVENT__HAVE___func__) 579b3af7bddSAzat KhuzhinCHECK_SYMBOL_EXISTS("__FUNCTION__" "" EVENT__HAVE___FUNCTION__) 580e415196aSJoakim Soderberg 581e415196aSJoakim SoderbergCHECK_SYMBOL_EXISTS(TAILQ_FOREACH sys/queue.h EVENT__HAVE_TAILQFOREACH) 582a0bfe2c4SAzat KhuzhinCHECK_CONST_EXISTS(CTL_KERN sys/sysctl.h EVENT__HAVE_DECL_CTL_KERN) 583a0bfe2c4SAzat KhuzhinCHECK_CONST_EXISTS(KERN_ARND sys/sysctl.h EVENT__HAVE_DECL_KERN_ARND) 584e415196aSJoakim SoderbergCHECK_SYMBOL_EXISTS(F_SETFD fcntl.h EVENT__HAVE_SETFD) 585e415196aSJoakim Soderberg 586e415196aSJoakim SoderbergCHECK_TYPE_SIZE(fd_mask EVENT__HAVE_FD_MASK) 5878b228e27SMark Ellzey 5883375750aSAzat KhuzhinCHECK_TYPE_SIZE(size_t EVENT__SIZEOF_SIZE_T) 589e415196aSJoakim Soderbergif(NOT EVENT__SIZEOF_SIZE_T) 59049a53811SMark Ellzey set(EVENT__size_t "unsigned") 591e415196aSJoakim Soderberg set(EVENT__SIZEOF_SIZE_T ${EVENT__SIZEOF_UNSIGNED}) 5928b228e27SMark Ellzeyelse() 59349a53811SMark Ellzey set(EVENT__size_t size_t) 594e415196aSJoakim Soderbergendif() 595e415196aSJoakim Soderberg 5967f9646d2SMark EllzeyCHECK_TYPE_SIZE("off_t" EVENT__SIZEOF_OFF_T LANGUAGE C) 597e415196aSJoakim Soderberg 5987f9646d2SMark Ellzey 5997f9646d2SMark Ellzey# XXX we should functionalize these size and type sets. --elley 6007f9646d2SMark Ellzey 6017f9646d2SMark Ellzey# Winssck. 6027707f6b0SAzat Khuzhinif (_MSC_VER) 6037707f6b0SAzat Khuzhin list(APPEND CMAKE_EXTRA_INCLUDE_FILES BaseTsd.h) 6047707f6b0SAzat Khuzhinendif() 6057707f6b0SAzat KhuzhinCHECK_TYPE_SIZE("ssize_t" EVENT__SIZEOF_SSIZE_T_LOWER LANGUAGE C) 6067707f6b0SAzat KhuzhinCHECK_TYPE_SIZE("SSIZE_T" EVENT__SIZEOF_SSIZE_T_UPPER LANGUAGE C) 6077f9646d2SMark Ellzey 6087707f6b0SAzat Khuzhinif (EVENT__SIZEOF_SSIZE_T_LOWER) 6097f9646d2SMark Ellzey set(EVENT__ssize_t "ssize_t") 610dc624adfSZonr Chang set(EVENT__SIZEOF_SSIZE_T ${EVENT__SIZEOF_SSIZE_T_LOWER}) 6117707f6b0SAzat Khuzhinelseif (EVENT__SIZEOF_SSIZE_T_UPPER) 6127f9646d2SMark Ellzey set(EVENT__ssize_t "SSIZE_T") 613dc624adfSZonr Chang set(EVENT__SIZEOF_SSIZE_T ${EVENT__SIZEOF_SSIZE_T_UPPER}) 61449a53811SMark Ellzeyelse() 61549a53811SMark Ellzey set(EVENT__ssize_t "int") 616e415196aSJoakim Soderberg set(EVENT__SIZEOF_SSIZE_T ${EVENT__SIZEOF_INT}) 617e415196aSJoakim Soderbergendif() 618e415196aSJoakim Soderberg 619e415196aSJoakim SoderbergCHECK_TYPE_SIZE(socklen_t EVENT__SIZEOF_SOCKLEN_T) 620e415196aSJoakim Soderbergif(NOT EVENT__SIZEOF_SOCKLEN_T) 621e415196aSJoakim Soderberg set(EVENT__socklen_t "unsigned int") 622e415196aSJoakim Soderberg set(EVENT__SIZEOF_SOCKLEN_T ${EVENT__SIZEOF_UNSIGNED_INT}) 6238b228e27SMark Ellzeyelse() 6248b228e27SMark Ellzey set(EVENT__socklen_t "socklen_t") 625e415196aSJoakim Soderbergendif() 626e415196aSJoakim Soderberg 627e415196aSJoakim SoderbergCHECK_TYPE_SIZE(pid_t EVENT__SIZEOF_PID_T) 628e415196aSJoakim Soderbergif(NOT EVENT__SIZEOF_PID_T) 629e415196aSJoakim Soderberg set(EVENT__SIZEOF_PID_T ${EVENT__SIZEOF_INT}) 63049a53811SMark Ellzeyelse() 63149a53811SMark Ellzey set(EVENT__SIZEOF_PID_T EVENT__SIZEOF_PID_T) 632e415196aSJoakim Soderbergendif() 633e415196aSJoakim Soderberg 6348b228e27SMark Ellzeyif (NOT EVENT__DISABLE_THREAD_SUPPORT) 635ebd12e6dSAzat Khuzhin if (NOT WIN32) 636a0bfe2c4SAzat Khuzhin list(APPEND CMAKE_EXTRA_INCLUDE_FILES pthread.h) 637ebd12e6dSAzat Khuzhin endif() 638e415196aSJoakim Soderberg CHECK_TYPE_SIZE(pthread_t EVENT__SIZEOF_PTHREAD_T) 6398b228e27SMark Ellzeyendif() 640e415196aSJoakim Soderberg 641e415196aSJoakim Soderbergif(EVENT__HAVE_CLOCK_GETTIME) 642e415196aSJoakim Soderberg set(EVENT__DNS_USE_CPU_CLOCK_FOR_ID 1) 643e415196aSJoakim Soderbergendif() 644e415196aSJoakim Soderberg 6457f9646d2SMark Ellzey# we're just getting lazy now. 646e415196aSJoakim SoderbergCHECK_TYPE_SIZE("uintptr_t" EVENT__HAVE_UINTPTR_T) 647e415196aSJoakim SoderbergCHECK_TYPE_SIZE("void *" EVENT__SIZEOF_VOID_P) 6488983e511SCarlo Marcelo Arenas BelónCHECK_TYPE_SIZE("time_t" EVENT__SIZEOF_TIME_T) 649e415196aSJoakim Soderberg 650e415196aSJoakim Soderberg# Tests file offset bits. 651e415196aSJoakim Soderberg# TODO: Add AIX test for if -D_LARGE_FILES is needed. 6528b228e27SMark Ellzey 6538b228e27SMark Ellzey# XXX: Why is this here? we don't even use it. Well, we don't even use it 6548b228e27SMark Ellzey# on top of that, why is it set in the config.h?! IT_MAKES_NO_SENSE 6558b228e27SMark Ellzey# I'm commenting it out for now. 6568b228e27SMark Ellzey# - ellzey 6578b228e27SMark Ellzey 6588b228e27SMark Ellzey#CHECK_FILE_OFFSET_BITS() 659e415196aSJoakim Soderberg 6602799b359SJoakim Söderberg# Verify kqueue works with pipes. 661a831f2f7SJoakim Söderbergif (EVENT__HAVE_KQUEUE) 6623aa68a82SKeith Smiley if ((CMAKE_CROSSCOMPILING OR APPLE) AND NOT EVENT__FORCE_KQUEUE_CHECK) 6632799b359SJoakim Söderberg message(WARNING "Cannot check if kqueue works with pipes when crosscompiling, use EVENT__FORCE_KQUEUE_CHECK to be sure (this requires manually running a test program on the cross compilation target)") 664a831f2f7SJoakim Söderberg set(EVENT__HAVE_WORKING_KQUEUE 1) 6652799b359SJoakim Söderberg else() 6668b228e27SMark Ellzey message(STATUS "Checking if kqueue works with pipes...") 6672799b359SJoakim Söderberg include(CheckWorkingKqueue) 6682799b359SJoakim Söderberg endif() 669a831f2f7SJoakim Söderbergendif() 670e415196aSJoakim Soderberg 671e415196aSJoakim Soderbergif(EVENT__HAVE_NETDB_H) 672e415196aSJoakim Soderberg list(APPEND CMAKE_EXTRA_INCLUDE_FILES netdb.h) 673e415196aSJoakim Soderberg CHECK_TYPE_SIZE("struct addrinfo" EVENT__HAVE_STRUCT_ADDRINFO) 674e415196aSJoakim Soderbergelseif(WIN32) 675e415196aSJoakim Soderberg list(APPEND CMAKE_EXTRA_INCLUDE_FILES ws2tcpip.h) 676e415196aSJoakim Soderberg CHECK_TYPE_SIZE("struct addrinfo" EVENT__HAVE_STRUCT_ADDRINFO) 677e415196aSJoakim Soderbergendif() 678e415196aSJoakim Soderberg 679e415196aSJoakim Soderberg# Check for sockaddr structure sizes. 680e415196aSJoakim Soderbergset(SOCKADDR_HEADERS) 681e415196aSJoakim Soderbergif (WIN32) 682e415196aSJoakim Soderberg set(CMAKE_REQUIRED_DEFINITIONS "-DWIN32_LEAN_AND_MEAN") 683e415196aSJoakim Soderberg if (_MSC_VER LESS 1300) 684e415196aSJoakim Soderberg set(SOCKADDR_HEADERS winsock.h) 685e415196aSJoakim Soderberg else() 686e415196aSJoakim Soderberg set(SOCKADDR_HEADERS winsock2.h ws2tcpip.h) 687e415196aSJoakim Soderberg endif() 688e415196aSJoakim Soderbergelse() 689e415196aSJoakim Soderberg if (EVENT__HAVE_NETINET_IN_H) 690e415196aSJoakim Soderberg set(SOCKADDR_HEADERS ${SOCKADDR_HEADERS} netinet/in.h) 691e415196aSJoakim Soderberg endif() 692e415196aSJoakim Soderberg 693e415196aSJoakim Soderberg if (EVENT__HAVE_NETINET_IN6_H) 694e415196aSJoakim Soderberg set(SOCKADDR_HEADERS ${SOCKADDR_HEADERS} netinet/in6.h) 695e415196aSJoakim Soderberg endif() 696e415196aSJoakim Soderberg 697e415196aSJoakim Soderberg if (EVENT__HAVE_SYS_SOCKET_H) 698e415196aSJoakim Soderberg set(SOCKADDR_HEADERS ${SOCKADDR_HEADERS} sys/socket.h) 699e415196aSJoakim Soderberg endif() 700e415196aSJoakim Soderberg 701e415196aSJoakim Soderberg if (EVENT__HAVE_NETDB_H) 702e415196aSJoakim Soderberg set(SOCKADDR_HEADERS ${SOCKADDR_HEADERS} netdb.h) 703e415196aSJoakim Soderberg endif() 704e415196aSJoakim Soderbergendif() 705e415196aSJoakim Soderberg 706e415196aSJoakim SoderbergCHECK_TYPE_SIZE("struct in6_addr" EVENT__HAVE_STRUCT_IN6_ADDR) 707e415196aSJoakim Soderbergif(EVENT__HAVE_STRUCT_IN6_ADDR) 708a9db46aeSMark Ellzey CHECK_STRUCT_HAS_MEMBER("struct in6_addr" 709a9db46aeSMark Ellzey s6_addr16 "${SOCKADDR_HEADERS}" 710a9db46aeSMark Ellzey EVENT__HAVE_STRUCT_IN6_ADDR_S6_ADDR16) 711a9db46aeSMark Ellzey 712a9db46aeSMark Ellzey CHECK_STRUCT_HAS_MEMBER("struct in6_addr" 713a9db46aeSMark Ellzey s6_addr32 "${SOCKADDR_HEADERS}" 714a9db46aeSMark Ellzey EVENT__HAVE_STRUCT_IN6_ADDR_S6_ADDR32) 715e415196aSJoakim Soderbergendif() 716e415196aSJoakim Soderberg 717e415196aSJoakim SoderbergCHECK_TYPE_SIZE("sa_family_t" EVENT__HAVE_SA_FAMILY_T) 718e415196aSJoakim SoderbergCHECK_TYPE_SIZE("struct sockaddr_in6" EVENT__HAVE_STRUCT_SOCKADDR_IN6) 719a9db46aeSMark Ellzey 720e415196aSJoakim Soderbergif(EVENT__HAVE_STRUCT_SOCKADDR_IN6) 721a9db46aeSMark Ellzey CHECK_STRUCT_HAS_MEMBER("struct sockaddr_in6" 722a9db46aeSMark Ellzey sin6_len "${SOCKADDR_HEADERS}" 723a9db46aeSMark Ellzey EVENT__HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN) 724a9db46aeSMark Ellzey 725a9db46aeSMark Ellzey CHECK_STRUCT_HAS_MEMBER("struct sockaddr_in6" 726a9db46aeSMark Ellzey sin_len "${SOCKADDR_HEADERS}" 727a9db46aeSMark Ellzey EVENT__HAVE_STRUCT_SOCKADDR_IN_SIN_LEN) 728e415196aSJoakim Soderbergendif() 729e415196aSJoakim Soderberg 730e415196aSJoakim SoderbergCHECK_TYPE_SIZE("struct sockaddr_storage" EVENT__HAVE_STRUCT_SOCKADDR_STORAGE) 731e415196aSJoakim Soderbergif(EVENT__HAVE_STRUCT_SOCKADDR_STORAGE) 732a9db46aeSMark Ellzey CHECK_STRUCT_HAS_MEMBER("struct sockaddr_storage" 733a9db46aeSMark Ellzey ss_family "${SOCKADDR_HEADERS}" 734a9db46aeSMark Ellzey EVENT__HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY) 735a9db46aeSMark Ellzey 736a9db46aeSMark Ellzey CHECK_STRUCT_HAS_MEMBER("struct sockaddr_storage" 737a9db46aeSMark Ellzey __ss_family "${SOCKADDR_HEADERS}" EVENT__HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY) 738e415196aSJoakim Soderbergendif() 739e415196aSJoakim Soderberg 7408567f2f5SAzat KhuzhinCHECK_TYPE_SIZE("struct linger" EVENT__HAVE_STRUCT_LINGER) 7418567f2f5SAzat Khuzhin 742e415196aSJoakim Soderberg# Group the source files. 743e415196aSJoakim Soderbergset(HDR_PRIVATE 744e415196aSJoakim Soderberg bufferevent-internal.h 745e415196aSJoakim Soderberg changelist-internal.h 746e415196aSJoakim Soderberg defer-internal.h 74743ffcf69SNick Mathewson epolltable-internal.h 748e415196aSJoakim Soderberg evbuffer-internal.h 749e415196aSJoakim Soderberg event-internal.h 750e415196aSJoakim Soderberg evmap-internal.h 751e415196aSJoakim Soderberg evrpc-internal.h 752e415196aSJoakim Soderberg evsignal-internal.h 753e415196aSJoakim Soderberg evthread-internal.h 754e415196aSJoakim Soderberg ht-internal.h 755e415196aSJoakim Soderberg http-internal.h 756e415196aSJoakim Soderberg iocp-internal.h 757e415196aSJoakim Soderberg ipv6-internal.h 758e415196aSJoakim Soderberg log-internal.h 759e415196aSJoakim Soderberg minheap-internal.h 760e415196aSJoakim Soderberg mm-internal.h 761e415196aSJoakim Soderberg ratelim-internal.h 762e415196aSJoakim Soderberg strlcpy-internal.h 763e415196aSJoakim Soderberg util-internal.h 764e415196aSJoakim Soderberg evconfig-private.h 765a9db46aeSMark Ellzey compat/sys/queue.h) 766e415196aSJoakim Soderberg 76727bd9fafSSergey Nikulovset(HDR_COMPAT 76827bd9fafSSergey Nikulov include/evdns.h 76927bd9fafSSergey Nikulov include/evrpc.h 77027bd9fafSSergey Nikulov include/event.h 77127bd9fafSSergey Nikulov include/evhttp.h 772a9db46aeSMark Ellzey include/evutil.h) 77327bd9fafSSergey Nikulov 774e415196aSJoakim Soderbergset(HDR_PUBLIC 775e415196aSJoakim Soderberg include/event2/buffer.h 776e415196aSJoakim Soderberg include/event2/bufferevent.h 777e415196aSJoakim Soderberg include/event2/bufferevent_compat.h 778e415196aSJoakim Soderberg include/event2/bufferevent_struct.h 779e415196aSJoakim Soderberg include/event2/buffer_compat.h 780e415196aSJoakim Soderberg include/event2/dns.h 781e415196aSJoakim Soderberg include/event2/dns_compat.h 782e415196aSJoakim Soderberg include/event2/dns_struct.h 783e415196aSJoakim Soderberg include/event2/event.h 784e415196aSJoakim Soderberg include/event2/event_compat.h 785e415196aSJoakim Soderberg include/event2/event_struct.h 786e415196aSJoakim Soderberg include/event2/http.h 787e415196aSJoakim Soderberg include/event2/http_compat.h 788e415196aSJoakim Soderberg include/event2/http_struct.h 78915d90cceSTrond Norbye include/event2/keyvalq_struct.h 790e415196aSJoakim Soderberg include/event2/listener.h 791e415196aSJoakim Soderberg include/event2/rpc.h 792e415196aSJoakim Soderberg include/event2/rpc_compat.h 793e415196aSJoakim Soderberg include/event2/rpc_struct.h 794e415196aSJoakim Soderberg include/event2/tag.h 795e415196aSJoakim Soderberg include/event2/tag_compat.h 796e415196aSJoakim Soderberg include/event2/thread.h 797e415196aSJoakim Soderberg include/event2/util.h 79873474042STrond Norbye include/event2/visibility.h 799a9db46aeSMark Ellzey ${PROJECT_BINARY_DIR}/include/event2/event-config.h) 800e415196aSJoakim Soderberg 801e415196aSJoakim Soderbergset(SRC_CORE 802e415196aSJoakim Soderberg buffer.c 803e415196aSJoakim Soderberg bufferevent.c 804e415196aSJoakim Soderberg bufferevent_filter.c 805e415196aSJoakim Soderberg bufferevent_pair.c 806e415196aSJoakim Soderberg bufferevent_ratelim.c 807e415196aSJoakim Soderberg bufferevent_sock.c 808e415196aSJoakim Soderberg event.c 809e415196aSJoakim Soderberg evmap.c 810e415196aSJoakim Soderberg evthread.c 811e415196aSJoakim Soderberg evutil.c 812e415196aSJoakim Soderberg evutil_rand.c 813e415196aSJoakim Soderberg evutil_time.c 814e415196aSJoakim Soderberg listener.c 815e415196aSJoakim Soderberg log.c 816e415196aSJoakim Soderberg signal.c 817a9db46aeSMark Ellzey strlcpy.c) 818e415196aSJoakim Soderberg 819e415196aSJoakim Soderbergif(EVENT__HAVE_SELECT) 820e415196aSJoakim Soderberg list(APPEND SRC_CORE select.c) 821e415196aSJoakim Soderbergendif() 822e415196aSJoakim Soderberg 823e415196aSJoakim Soderbergif(EVENT__HAVE_POLL) 824e415196aSJoakim Soderberg list(APPEND SRC_CORE poll.c) 825e415196aSJoakim Soderbergendif() 826e415196aSJoakim Soderberg 827e415196aSJoakim Soderbergif(EVENT__HAVE_KQUEUE) 828e415196aSJoakim Soderberg list(APPEND SRC_CORE kqueue.c) 829e415196aSJoakim Soderbergendif() 830e415196aSJoakim Soderberg 831e415196aSJoakim Soderbergif(EVENT__HAVE_DEVPOLL) 832e415196aSJoakim Soderberg list(APPEND SRC_CORE devpoll.c) 833e415196aSJoakim Soderbergendif() 834e415196aSJoakim Soderberg 835e415196aSJoakim Soderbergif(EVENT__HAVE_EPOLL) 836cea61de6SAzat Khuzhin list(APPEND SRC_CORE epoll.c) 837e415196aSJoakim Soderbergendif() 838e415196aSJoakim Soderberg 839e415196aSJoakim Soderbergif(EVENT__HAVE_EVENT_PORTS) 840e415196aSJoakim Soderberg list(APPEND SRC_CORE evport.c) 841e415196aSJoakim Soderbergendif() 842e415196aSJoakim Soderberg 843e415196aSJoakim Soderbergif (NOT EVENT__DISABLE_OPENSSL) 844e415196aSJoakim Soderberg find_package(OpenSSL REQUIRED) 845a9db46aeSMark Ellzey 846e9fc014cSJoakim Soderberg set(EVENT__HAVE_OPENSSL 1) 847a9db46aeSMark Ellzey 8488b228e27SMark Ellzey message(STATUS "OpenSSL include: ${OPENSSL_INCLUDE_DIR}") 8498b228e27SMark Ellzey message(STATUS "OpenSSL lib: ${OPENSSL_LIBRARIES}") 850a9db46aeSMark Ellzey 851e9fc014cSJoakim Soderberg include_directories(${OPENSSL_INCLUDE_DIR}) 852a9db46aeSMark Ellzey 8539806b126SAzat Khuzhin list(APPEND SRC_OPENSSL bufferevent_openssl.c) 854e9fc014cSJoakim Soderberg list(APPEND HDR_PUBLIC include/event2/bufferevent_ssl.h) 85519222e52SJoakim Soderberg list(APPEND LIB_APPS ${OPENSSL_LIBRARIES}) 856e415196aSJoakim Soderbergendif() 857e415196aSJoakim Soderberg 858e9fc014cSJoakim Soderbergif (NOT EVENT__DISABLE_THREAD_SUPPORT) 859e9fc014cSJoakim Soderberg if (WIN32) 860e9fc014cSJoakim Soderberg list(APPEND SRC_CORE evthread_win32.c) 861e9fc014cSJoakim Soderberg else() 862e9fc014cSJoakim Soderberg find_package(Threads REQUIRED) 863e9fc014cSJoakim Soderberg if (NOT CMAKE_USE_PTHREADS_INIT) 864a9db46aeSMark Ellzey message(FATAL_ERROR 865a9db46aeSMark Ellzey "Failed to find Pthreads, set EVENT__DISABLE_THREAD_SUPPORT to disable") 866e9fc014cSJoakim Soderberg endif() 867a9db46aeSMark Ellzey 868e415196aSJoakim Soderberg set(EVENT__HAVE_PTHREADS 1) 86919222e52SJoakim Soderberg list(APPEND LIB_APPS ${CMAKE_THREAD_LIBS_INIT}) 870e415196aSJoakim Soderberg endif() 871e9fc014cSJoakim Soderbergendif() 872e415196aSJoakim Soderberg 873f7805939SJoakim Soderbergif (NOT EVENT__DISABLE_TESTS) 874f7805939SJoakim Soderberg # Zlib is only used for testing. 875f7805939SJoakim Soderberg find_package(ZLIB) 876f7805939SJoakim Soderberg 877c4dfb93fSAzat Khuzhin if (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR) 878a9db46aeSMark Ellzey include_directories(${ZLIB_INCLUDE_DIRS}) 879a9db46aeSMark Ellzey 880dc624adfSZonr Chang set(EVENT__HAVE_LIBZ 1) 88119222e52SJoakim Soderberg list(APPEND LIB_APPS ${ZLIB_LIBRARIES}) 882e415196aSJoakim Soderberg endif() 883f7805939SJoakim Soderbergendif() 884e415196aSJoakim Soderberg 885e415196aSJoakim Soderbergset(SRC_EXTRA 886e415196aSJoakim Soderberg event_tagging.c 887e415196aSJoakim Soderberg http.c 888e415196aSJoakim Soderberg evdns.c 889a9db46aeSMark Ellzey evrpc.c) 890e415196aSJoakim Soderberg 891e415196aSJoakim Soderbergadd_definitions(-DHAVE_CONFIG_H) 89220244671SJoakim Söderberg 89320244671SJoakim Söderberg# We use BEFORE here so we don't accidentally look in system directories 89420244671SJoakim Söderberg# first for some previous versions of the headers that are installed. 89520244671SJoakim Söderberginclude_directories(BEFORE ${PROJECT_SOURCE_DIR} 89620244671SJoakim Söderberg ${PROJECT_SOURCE_DIR}/compat 89720244671SJoakim Söderberg ${PROJECT_SOURCE_DIR}/include) 898e415196aSJoakim Soderberg 899e415196aSJoakim Soderbergif(WIN32) 900e415196aSJoakim Soderberg list(APPEND SRC_CORE 901e415196aSJoakim Soderberg buffer_iocp.c 902e415196aSJoakim Soderberg bufferevent_async.c 903e415196aSJoakim Soderberg event_iocp.c 904a9db46aeSMark Ellzey win32select.c) 905e9fc014cSJoakim Soderberg 906e9fc014cSJoakim Soderberg list(APPEND HDR_PRIVATE WIN32-Code/getopt.h) 907e9fc014cSJoakim Soderberg 908e415196aSJoakim Soderberg set(EVENT__DNS_USE_FTIME_FOR_ID 1) 909c9ce638cSAzat Khuzhin set(LIB_PLATFORM ws2_32 shell32 advapi32) 910a9db46aeSMark Ellzey add_definitions( 911a9db46aeSMark Ellzey -D_CRT_SECURE_NO_WARNINGS 912a9db46aeSMark Ellzey -D_CRT_NONSTDC_NO_DEPRECATE) 913a9db46aeSMark Ellzey 914e415196aSJoakim Soderberg include_directories(./WIN32-Code) 91558fcd428SJoakim Soderbergendif() 91658fcd428SJoakim Soderberg 917050bfc7fSAzat Khuzhinif (SOLARIS) 918050bfc7fSAzat Khuzhin list(APPEND LIB_PLATFORM socket nsl) 919050bfc7fSAzat Khuzhinendif() 920050bfc7fSAzat Khuzhin 921e415196aSJoakim Soderbergsource_group("Headers Private" FILES ${HDR_PRIVATE}) 92227bd9fafSSergey Nikulovsource_group("Header Compat" FILES ${HDR_COMPAT}) 923e415196aSJoakim Soderbergsource_group("Headers Public" FILES ${HDR_PUBLIC}) 924e415196aSJoakim Soderbergsource_group("Source Core" FILES ${SRC_CORE}) 925e415196aSJoakim Soderbergsource_group("Source Extra" FILES ${SRC_EXTRA}) 926e415196aSJoakim Soderberg 927ce14defeSJoakim Soderberg# Generate the configure headers. 928ce14defeSJoakim Soderberg# (Place them in the build dir so we don't polute the source tree with generated files). 92920244671SJoakim Söderberginclude_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}/include) 930ce14defeSJoakim Soderberg 931acf4821dSAzat Khuzhinif (${GNUC}) 9329806b126SAzat Khuzhin set(EVENT_SHARED_FLAGS -fvisibility=hidden) 9334545fa9bSTrond Norbyeelseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "SunPro") 9349806b126SAzat Khuzhin set(EVENT_SHARED_FLAGS -xldscope=hidden) 9354545fa9bSTrond Norbyeendif() 9364545fa9bSTrond Norbye 937e415196aSJoakim Soderbergconfigure_file( 938e415196aSJoakim Soderberg ${CMAKE_CURRENT_SOURCE_DIR}/event-config.h.cmake 9398b228e27SMark Ellzey ${CMAKE_CURRENT_BINARY_DIR}/include/event2/event-config.h 9408b228e27SMark Ellzey NEWLINE_STYLE UNIX) 941ce14defeSJoakim Soderberg 942ce14defeSJoakim Soderbergconfigure_file( 943ce14defeSJoakim Soderberg ${CMAKE_CURRENT_SOURCE_DIR}/evconfig-private.h.cmake 944ce14defeSJoakim Soderberg ${CMAKE_CURRENT_BINARY_DIR}/include/evconfig-private.h) 945e415196aSJoakim Soderberg 946f3446ed5SJoakim Soderberg# 947f3446ed5SJoakim Soderberg# Create the libraries. 948f3446ed5SJoakim Soderberg# 9499806b126SAzat Khuzhininclude(AddEventLibrary) 9509806b126SAzat Khuzhinadd_event_library(event_core SOURCES ${SRC_CORE}) 9519806b126SAzat Khuzhinadd_event_library(event_extra 9521c047618Syuangongji INNER_LIBRARIES event_core 9539806b126SAzat Khuzhin SOURCES ${SRC_EXTRA}) 954f3446ed5SJoakim Soderberg 9559806b126SAzat Khuzhinif (NOT EVENT__DISABLE_OPENSSL) 9569806b126SAzat Khuzhin add_event_library(event_openssl 9571c047618Syuangongji INNER_LIBRARIES event_core 9581c047618Syuangongji OUTER_INCLUDES ${OPENSSL_INCLUDE_DIR} 9591c047618Syuangongji LIBRARIES ${OPENSSL_LIBRARIES} 9609806b126SAzat Khuzhin SOURCES ${SRC_OPENSSL}) 9619806b126SAzat Khuzhinendif() 962e415196aSJoakim Soderberg 963a62ec765SPaul Osborneif (EVENT__HAVE_PTHREADS) 9649806b126SAzat Khuzhin set(SRC_PTHREADS evthread_pthread.c) 9659806b126SAzat Khuzhin add_event_library(event_pthreads 9661c047618Syuangongji INNER_LIBRARIES event_core 9679806b126SAzat Khuzhin SOURCES ${SRC_PTHREADS}) 9689806b126SAzat Khuzhinendif() 969e415196aSJoakim Soderberg 970a0dd5df2STrond Norbye# library exists for historical reasons; it contains the contents of 971a0dd5df2STrond Norbye# both libevent_core and libevent_extra. You shouldn’t use it; it may 972a0dd5df2STrond Norbye# go away in a future version of Libevent. 9739806b126SAzat Khuzhinadd_event_library(event SOURCES ${SRC_CORE} ${SRC_EXTRA}) 9744545fa9bSTrond Norbye 975d2a41a50SAzat Khuzhinset(WIN32_GETOPT) 976d2a41a50SAzat Khuzhinif (WIN32) 977f602211fSPhilip Homburg set(_TMPLIBS) 978f602211fSPhilip Homburg if (${EVENT_LIBRARY_STATIC}) 979f602211fSPhilip Homburg list(APPEND _TMPLIBS event_core_static event_static) 980f602211fSPhilip Homburg endif() 981f602211fSPhilip Homburg if (${EVENT_LIBRARY_SHARED}) 982f602211fSPhilip Homburg list(APPEND _TMPLIBS event_core_shared event_shared) 983f602211fSPhilip Homburg endif() 984f602211fSPhilip Homburg foreach(lib ${_TMPLIBS}) 985f602211fSPhilip Homburg target_link_libraries(${lib} iphlpapi) 986f602211fSPhilip Homburg endforeach() 987f602211fSPhilip Homburg unset(_TMPLIBS) 988f602211fSPhilip Homburg 989d2a41a50SAzat Khuzhin list(APPEND WIN32_GETOPT 990d2a41a50SAzat Khuzhin WIN32-Code/getopt.c 991d2a41a50SAzat Khuzhin WIN32-Code/getopt_long.c) 992d2a41a50SAzat Khuzhinendif() 993d2a41a50SAzat Khuzhin 994f3446ed5SJoakim Soderberg# 995f3446ed5SJoakim Soderberg# Samples. 996f3446ed5SJoakim Soderberg# 9979806b126SAzat Khuzhinmacro(add_sample_prog ssl name) 9989806b126SAzat Khuzhin add_executable(${name} ${ARGN}) 999f3446ed5SJoakim Soderberg 10009806b126SAzat Khuzhin target_link_libraries(${name} 1001eb10a738SAzat Khuzhin event_extra 1002eb10a738SAzat Khuzhin event_core 10039806b126SAzat Khuzhin ${LIB_APPS} 10049806b126SAzat Khuzhin ${LIB_PLATFORM}) 10059806b126SAzat Khuzhin 10069806b126SAzat Khuzhin if (${ssl}) 1007eb10a738SAzat Khuzhin target_link_libraries(${name} event_openssl) 1008e9478640Syuangongji if(WIN32) 1009e9478640Syuangongji target_link_libraries(${name} crypt32) 1010e9478640Syuangongji endif() 10119806b126SAzat Khuzhin endif() 10129806b126SAzat Khuzhinendmacro() 1013e9fc014cSJoakim Soderbergif (NOT EVENT__DISABLE_SAMPLES) 101419222e52SJoakim Soderberg set(SAMPLES 101519222e52SJoakim Soderberg event-read-fifo 101619222e52SJoakim Soderberg hello-world 101719222e52SJoakim Soderberg signal-test 10181d34498eSAzat Khuzhin http-connect 101919222e52SJoakim Soderberg time-test) 102019222e52SJoakim Soderberg 10219806b126SAzat Khuzhin foreach(SAMPLE ${SAMPLES}) 10229806b126SAzat Khuzhin add_sample_prog(OFF ${SAMPLE} sample/${SAMPLE}.c) 10239806b126SAzat Khuzhin endforeach() 10249806b126SAzat Khuzhin 10259806b126SAzat Khuzhin if (NOT EVENT__DISABLE_OPENSSL) 10269806b126SAzat Khuzhin add_sample_prog(ON https-client 102719222e52SJoakim Soderberg sample/https-client.c 102819222e52SJoakim Soderberg sample/openssl_hostname_validation.c 102919222e52SJoakim Soderberg sample/hostcheck.c) 10309806b126SAzat Khuzhin add_sample_prog(ON le-proxy 10319806b126SAzat Khuzhin sample/le-proxy.c) 103219222e52SJoakim Soderberg endif() 103319222e52SJoakim Soderberg 1034b6309bccSAzat Khuzhin set(SAMPLES_WOPT 1035b6309bccSAzat Khuzhin dns-example 1036b6309bccSAzat Khuzhin http-server 1037b6309bccSAzat Khuzhin ) 1038b6309bccSAzat Khuzhin foreach (SAMPLE ${SAMPLES_WOPT}) 1039b6309bccSAzat Khuzhin add_sample_prog(OFF ${SAMPLE} sample/${SAMPLE}.c ${WIN32_GETOPT}) 1040b6309bccSAzat Khuzhin endforeach() 1041e9fc014cSJoakim Soderbergendif() 1042e415196aSJoakim Soderberg 10439806b126SAzat Khuzhin# 10449806b126SAzat Khuzhin# Benchmarks 10459806b126SAzat Khuzhin# 10469806b126SAzat Khuzhinmacro(add_bench_prog prog) 10473e690290SAzat Khuzhin add_executable(${prog} ${ARGN}) 10483e690290SAzat Khuzhin target_link_libraries(${prog} 1049eb10a738SAzat Khuzhin event_extra 1050eb10a738SAzat Khuzhin event_core 10519806b126SAzat Khuzhin ${LIB_APPS} 1052a9db46aeSMark Ellzey ${LIB_PLATFORM}) 10539806b126SAzat Khuzhinendmacro() 10549806b126SAzat Khuzhinif (NOT EVENT__DISABLE_BENCHMARK) 10553e690290SAzat Khuzhin foreach (BENCHMARK bench_http bench_httpclient) 10563e690290SAzat Khuzhin add_bench_prog(${BENCHMARK} test/${BENCHMARK}.c) 1057e9fc014cSJoakim Soderberg endforeach() 10583e690290SAzat Khuzhin 10593e690290SAzat Khuzhin add_bench_prog(bench test/bench.c ${WIN32_GETOPT}) 10603e690290SAzat Khuzhin add_bench_prog(bench_cascade test/bench_cascade.c ${WIN32_GETOPT}) 1061e415196aSJoakim Soderbergendif() 1062e415196aSJoakim Soderberg 10639806b126SAzat Khuzhin# 10649806b126SAzat Khuzhin# Tests 10659806b126SAzat Khuzhin# 10669806b126SAzat Khuzhinmacro(add_test_prog prog) 10679806b126SAzat Khuzhin add_executable(${prog} test/${prog}.c) 10689806b126SAzat Khuzhin target_link_libraries(${prog} 10699806b126SAzat Khuzhin ${LIB_APPS} 10709806b126SAzat Khuzhin ${LIB_PLATFORM} 1071eb10a738SAzat Khuzhin event_core 1072eb10a738SAzat Khuzhin event_extra 10739806b126SAzat Khuzhin ${ARGN}) 10749806b126SAzat Khuzhinendmacro() 1075e415196aSJoakim Soderbergif (NOT EVENT__DISABLE_TESTS) 1076e9fc014cSJoakim Soderberg # 107799c1dc32SJoakim Soderberg # Generate Regress tests. 1078e9fc014cSJoakim Soderberg # 1079d38d798bSJoakim Söderberg if (NOT EVENT__DISABLE_REGRESS) 1080532a8cc3SKiyoshi Aman # (We require python to generate the regress tests) 1081532a8cc3SKiyoshi Aman find_package(PythonInterp 3) 1082a9db46aeSMark Ellzey 1083532a8cc3SKiyoshi Aman if (PYTHONINTERP_FOUND) 108427bd9fafSSergey Nikulov set(__FOUND_USABLE_PYTHON 1) 1085532a8cc3SKiyoshi Aman else() 1086532a8cc3SKiyoshi Aman find_package(PythonInterp 2) 1087532a8cc3SKiyoshi Aman if (PYTHONINTERP_FOUND) 1088532a8cc3SKiyoshi Aman set(__FOUND_USABLE_PYTHON 1) 1089532a8cc3SKiyoshi Aman else() 1090532a8cc3SKiyoshi Aman message(ERROR "No suitable Python version found, bailing...") 1091532a8cc3SKiyoshi Aman endif() 109227bd9fafSSergey Nikulov endif() 109327bd9fafSSergey Nikulov 109427bd9fafSSergey Nikulov if (__FOUND_USABLE_PYTHON) 10958b228e27SMark Ellzey message(STATUS "Generating regress tests...") 1096a9db46aeSMark Ellzey 1097e415196aSJoakim Soderberg add_definitions(-DTINYTEST_LOCAL) 1098a9db46aeSMark Ellzey 1099e415196aSJoakim Soderberg add_custom_command( 1100e415196aSJoakim Soderberg OUTPUT 1101e415196aSJoakim Soderberg ${CMAKE_CURRENT_SOURCE_DIR}/test/regress.gen.c 1102e415196aSJoakim Soderberg ${CMAKE_CURRENT_SOURCE_DIR}/test/regress.gen.h 1103e415196aSJoakim Soderberg DEPENDS 1104e415196aSJoakim Soderberg event_rpcgen.py 1105e415196aSJoakim Soderberg test/regress.rpc 11069ea60ab2SAzat Khuzhin COMMAND ${PYTHON_EXECUTABLE} ../event_rpcgen.py --quiet regress.rpc 1107a9db46aeSMark Ellzey WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test) 1108e415196aSJoakim Soderberg 1109e415196aSJoakim Soderberg list(APPEND SRC_REGRESS 1110e415196aSJoakim Soderberg test/regress.c 1111e415196aSJoakim Soderberg test/regress.gen.c 1112e415196aSJoakim Soderberg test/regress.gen.h 1113e9fc014cSJoakim Soderberg test/regress_buffer.c 1114e9fc014cSJoakim Soderberg test/regress_bufferevent.c 1115e9fc014cSJoakim Soderberg test/regress_dns.c 1116e9fc014cSJoakim Soderberg test/regress_et.c 1117e415196aSJoakim Soderberg test/regress_finalize.c 1118e9fc014cSJoakim Soderberg test/regress_http.c 1119e9fc014cSJoakim Soderberg test/regress_listener.c 1120e9fc014cSJoakim Soderberg test/regress_main.c 1121e9fc014cSJoakim Soderberg test/regress_minheap.c 1122e9fc014cSJoakim Soderberg test/regress_rpc.c 1123e9fc014cSJoakim Soderberg test/regress_testutils.c 1124e9fc014cSJoakim Soderberg test/regress_testutils.h 1125e9fc014cSJoakim Soderberg test/regress_util.c 11269806b126SAzat Khuzhin test/tinytest.c) 1127e415196aSJoakim Soderberg 1128e9fc014cSJoakim Soderberg if (WIN32) 1129e9fc014cSJoakim Soderberg list(APPEND SRC_REGRESS test/regress_iocp.c) 1130de0c1965SAzat Khuzhin if (NOT EVENT__DISABLE_THREAD_SUPPORT) 1131e9fc014cSJoakim Soderberg list(APPEND SRC_REGRESS test/regress_thread.c) 1132e9fc014cSJoakim Soderberg endif() 1133a62ec765SPaul Osborne elseif (EVENT__HAVE_PTHREADS) 1134e9fc014cSJoakim Soderberg list(APPEND SRC_REGRESS test/regress_thread.c) 1135e9fc014cSJoakim Soderberg endif() 1136e9fc014cSJoakim Soderberg 1137c4dfb93fSAzat Khuzhin if (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR) 1138e9fc014cSJoakim Soderberg list(APPEND SRC_REGRESS test/regress_zlib.c) 1139e9fc014cSJoakim Soderberg endif() 1140e9fc014cSJoakim Soderberg 11419806b126SAzat Khuzhin if (NOT EVENT__DISABLE_OPENSSL) 1142e9fc014cSJoakim Soderberg list(APPEND SRC_REGRESS test/regress_ssl.c) 1143e9fc014cSJoakim Soderberg endif() 1144e9fc014cSJoakim Soderberg 1145e415196aSJoakim Soderberg add_executable(regress ${SRC_REGRESS}) 1146a9db46aeSMark Ellzey 1147a9db46aeSMark Ellzey target_link_libraries(regress 1148a9db46aeSMark Ellzey ${LIB_APPS} 11499806b126SAzat Khuzhin ${LIB_PLATFORM} 1150eb10a738SAzat Khuzhin event_core 1151eb10a738SAzat Khuzhin event_extra) 11529806b126SAzat Khuzhin if (NOT EVENT__DISABLE_OPENSSL) 1153eb10a738SAzat Khuzhin target_link_libraries(regress event_openssl) 11549806b126SAzat Khuzhin endif() 11559806b126SAzat Khuzhin if (CMAKE_USE_PTHREADS_INIT) 1156eb10a738SAzat Khuzhin target_link_libraries(regress event_pthreads) 11579806b126SAzat Khuzhin endif() 1158e415196aSJoakim Soderberg else() 115927bd9fafSSergey Nikulov message(WARNING "No suitable Python interpreter found, cannot generate regress tests!") 1160e415196aSJoakim Soderberg endif() 1161d38d798bSJoakim Söderberg endif() 1162e415196aSJoakim Soderberg 116399c1dc32SJoakim Soderberg # 116499c1dc32SJoakim Soderberg # Test programs. 116599c1dc32SJoakim Soderberg # 11668b228e27SMark Ellzey # all of these, including the cmakelists.txt should be moved 11678b228e27SMark Ellzey # into the dirctory 'tests' first. 11688b228e27SMark Ellzey # 11698b228e27SMark Ellzey # doing this, we can remove all the DISABLE_TESTS stuff, and simply 11708b228e27SMark Ellzey # do something like: 11718b228e27SMark Ellzey # 11728b228e27SMark Ellzey # add_custom_targets(tests) 11738b228e27SMark Ellzey # add_executable(... EXCLUDE_FROM_ALL ...c) 11748b228e27SMark Ellzey # add_dependencis(tests testa testb testc) 11758b228e27SMark Ellzey # add_test(....) 11768b228e27SMark Ellzey # 11778b228e27SMark Ellzey # then you can just run 'make tests' instead of them all 11788b228e27SMark Ellzey # auto-compile|running 11798b228e27SMark Ellzey # - ellzey 118099c1dc32SJoakim Soderberg set(TESTPROGS test-changelist 118199c1dc32SJoakim Soderberg test-eof 11829ed49f2dSAzat Khuzhin test-closed 118399c1dc32SJoakim Soderberg test-fdleak 118499c1dc32SJoakim Soderberg test-init 118599c1dc32SJoakim Soderberg test-time 118699c1dc32SJoakim Soderberg test-weof) 118799c1dc32SJoakim Soderberg 11889806b126SAzat Khuzhin foreach (TESTPROG ${TESTPROGS} test-dumpevents) 11899806b126SAzat Khuzhin add_test_prog(${TESTPROG}) 11909806b126SAzat Khuzhin endforeach() 11919806b126SAzat Khuzhin if (UNIX) 11929806b126SAzat Khuzhin add_test_prog(test-ratelim m) 11939806b126SAzat Khuzhin else() 11949806b126SAzat Khuzhin add_test_prog(test-ratelim) 11959806b126SAzat Khuzhin endif() 11969806b126SAzat Khuzhin 1197a9db46aeSMark Ellzey set(ALL_TESTPROGS 1198a9db46aeSMark Ellzey ${TESTPROGS} 1199a9db46aeSMark Ellzey test-dumpevents 12009806b126SAzat Khuzhin test-ratelim 12019806b126SAzat Khuzhin ) 120299c1dc32SJoakim Soderberg 120399c1dc32SJoakim Soderberg # 120499c1dc32SJoakim Soderberg # We run all tests with the different backends turned on one at a time. 120599c1dc32SJoakim Soderberg # 120699c1dc32SJoakim Soderberg 12077ea4159dSJoakim Soderberg # Add event backends based on system introspection result. 12087ea4159dSJoakim Soderberg set(BACKENDS "") 12097ea4159dSJoakim Soderberg 12107ea4159dSJoakim Soderberg if (EVENT__HAVE_EPOLL) 12117ea4159dSJoakim Soderberg list(APPEND BACKENDS EPOLL) 12127ea4159dSJoakim Soderberg endif() 12137ea4159dSJoakim Soderberg 12147ea4159dSJoakim Soderberg if (EVENT__HAVE_SELECT) 12157ea4159dSJoakim Soderberg list(APPEND BACKENDS SELECT) 12167ea4159dSJoakim Soderberg endif() 12177ea4159dSJoakim Soderberg 12187ea4159dSJoakim Soderberg if (EVENT__HAVE_POLL) 12197ea4159dSJoakim Soderberg list(APPEND BACKENDS POLL) 12207ea4159dSJoakim Soderberg endif() 12217ea4159dSJoakim Soderberg 12227ea4159dSJoakim Soderberg if (EVENT__HAVE_KQUEUE) 12237ea4159dSJoakim Soderberg list(APPEND BACKENDS KQUEUE) 12247ea4159dSJoakim Soderberg endif() 12257ea4159dSJoakim Soderberg 12267ea4159dSJoakim Soderberg if (EVENT__HAVE_EVENT_PORTS) 12277ea4159dSJoakim Soderberg list(APPEND BACKENDS EVPORT) 12287ea4159dSJoakim Soderberg endif() 12297ea4159dSJoakim Soderberg 12307ea4159dSJoakim Soderberg if (EVENT__HAVE_DEVPOLL) 12317ea4159dSJoakim Soderberg list(APPEND BACKENDS DEVPOLL) 12327ea4159dSJoakim Soderberg endif() 12337ea4159dSJoakim Soderberg 12347ea4159dSJoakim Soderberg if (WIN32) 12357ea4159dSJoakim Soderberg list(APPEND BACKENDS WIN32) 12367ea4159dSJoakim Soderberg endif() 12377ea4159dSJoakim Soderberg 12387ea4159dSJoakim Soderberg 123999c1dc32SJoakim Soderberg # Default environment variables turns off all event systems, 124099c1dc32SJoakim Soderberg # then we enable each one, one at a time when creating the tests. 1241677378eaSAzat Khuzhin set(DEFAULT_TEST_ENV_VARS) 124299c1dc32SJoakim Soderberg foreach(BACKEND ${BACKENDS}) 1243e053c4f0SJoakim Soderberg set(BACKEND_ENV_VAR "EVENT_NO${BACKEND}=1") 1244e053c4f0SJoakim Soderberg list(APPEND DEFAULT_TEST_ENV_VARS "${BACKEND_ENV_VAR}") 124599c1dc32SJoakim Soderberg endforeach() 124699c1dc32SJoakim Soderberg 124799c1dc32SJoakim Soderberg # Macro that creates the ctest test for a backend. 124899c1dc32SJoakim Soderberg macro(add_backend_test BACKEND_TEST_NAME ENV_VARS) 12497ea4159dSJoakim Soderberg set(TEST_NAMES "") 12507ea4159dSJoakim Soderberg 125199c1dc32SJoakim Soderberg foreach (TESTPROG ${TESTPROGS}) 1252e053c4f0SJoakim Soderberg set(TEST_NAME ${TESTPROG}__${BACKEND_TEST_NAME}) 1253a9db46aeSMark Ellzey 1254a9db46aeSMark Ellzey add_test(${TEST_NAME} 1255a9db46aeSMark Ellzey ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TESTPROG}) 1256a9db46aeSMark Ellzey 12577ea4159dSJoakim Soderberg list(APPEND TEST_NAMES ${TEST_NAME}) 1258a9db46aeSMark Ellzey 1259a9db46aeSMark Ellzey set_tests_properties(${TEST_NAME} 1260a9db46aeSMark Ellzey PROPERTIES ENVIRONMENT "${ENV_VARS}") 126199c1dc32SJoakim Soderberg endforeach() 126299c1dc32SJoakim Soderberg 126399c1dc32SJoakim Soderberg # Dump events test. 126427bd9fafSSergey Nikulov if (__FOUND_USABLE_PYTHON) 1265e053c4f0SJoakim Soderberg set(TEST_NAME test-dumpevents__${BACKEND_TEST_NAME}) 1266a9db46aeSMark Ellzey 1267a9db46aeSMark Ellzey add_test(${TEST_NAME} 1268a9db46aeSMark Ellzey ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test-dumpevents | 1269a9db46aeSMark Ellzey ${PYTHON_EXECUTABLE} 1270a9db46aeSMark Ellzey ${CMAKE_CURRENT_SOURCE_DIR}/test/check-dumpevents.py) 1271a9db46aeSMark Ellzey 1272a9db46aeSMark Ellzey set_tests_properties(${TEST_NAME} 1273a9db46aeSMark Ellzey PROPERTIES ENVIRONMENT "${ENV_VARS}") 127499c1dc32SJoakim Soderberg else() 127599c1dc32SJoakim Soderberg message(WARNING "test-dumpevents will be run without output check since python was not found!") 1276e053c4f0SJoakim Soderberg set(TEST_NAME test-dumpevents__${BACKEND_TEST_NAME}_no_check) 1277a9db46aeSMark Ellzey 1278a9db46aeSMark Ellzey add_test(${TEST_NAME} 1279a9db46aeSMark Ellzey ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test-dumpevents) 1280a9db46aeSMark Ellzey 1281a9db46aeSMark Ellzey set_tests_properties(${TEST_NAME} 1282a9db46aeSMark Ellzey PROPERTIES ENVIRONMENT "${ENV_VARS}") 128399c1dc32SJoakim Soderberg endif() 128499c1dc32SJoakim Soderberg 128599c1dc32SJoakim Soderberg # Regress tests. 128627bd9fafSSergey Nikulov if (NOT EVENT__DISABLE_REGRESS AND __FOUND_USABLE_PYTHON) 1287e053c4f0SJoakim Soderberg set(TEST_NAME regress__${BACKEND_TEST_NAME}) 1288cf2cf2a0SAzat Khuzhin 1289a9db46aeSMark Ellzey add_test(${TEST_NAME} 129070ac2144SAzat Khuzhin ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/regress --quiet) 1291a9db46aeSMark Ellzey 1292a9db46aeSMark Ellzey set_tests_properties(${TEST_NAME} 1293a9db46aeSMark Ellzey PROPERTIES ENVIRONMENT "${ENV_VARS}") 1294a9db46aeSMark Ellzey 1295a9db46aeSMark Ellzey add_test(${TEST_NAME}_debug 129670ac2144SAzat Khuzhin ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/regress --quiet) 1297a9db46aeSMark Ellzey 1298a9db46aeSMark Ellzey set_tests_properties(${TEST_NAME}_debug 1299a9db46aeSMark Ellzey PROPERTIES ENVIRONMENT "${ENV_VARS};EVENT_DEBUG_MODE=1") 130099c1dc32SJoakim Soderberg endif() 130199c1dc32SJoakim Soderberg endmacro() 130299c1dc32SJoakim Soderberg 130399c1dc32SJoakim Soderberg # Add the tests for each backend. 130499c1dc32SJoakim Soderberg foreach(BACKEND ${BACKENDS}) 130599c1dc32SJoakim Soderberg # Enable this backend only. 130699c1dc32SJoakim Soderberg set(BACKEND_ENV_VARS ${DEFAULT_TEST_ENV_VARS}) 130719222e52SJoakim Soderberg list(REMOVE_ITEM BACKEND_ENV_VARS EVENT_NO${BACKEND}=1) 130899c1dc32SJoakim Soderberg 130999c1dc32SJoakim Soderberg # Epoll has some extra settings. 131099c1dc32SJoakim Soderberg if (${BACKEND} STREQUAL "EPOLL") 1311a9db46aeSMark Ellzey add_backend_test(timerfd_${BACKEND} 1312a9db46aeSMark Ellzey "${BACKEND_ENV_VARS};EVENT_PRECISE_TIMER=1") 1313a9db46aeSMark Ellzey 1314a9db46aeSMark Ellzey add_backend_test(changelist_${BACKEND} 1315a9db46aeSMark Ellzey "${BACKEND_ENV_VARS};EVENT_EPOLL_USE_CHANGELIST=yes") 1316a9db46aeSMark Ellzey 1317a9db46aeSMark Ellzey add_backend_test(timerfd_changelist_${BACKEND} 1318a9db46aeSMark Ellzey "${BACKEND_ENV_VARS};EVENT_EPOLL_USE_CHANGELIST=yes;EVENT_PRECISE_TIMER=1") 131999c1dc32SJoakim Soderberg else() 13207ea4159dSJoakim Soderberg add_backend_test(${BACKEND} "${BACKEND_ENV_VARS}") 132199c1dc32SJoakim Soderberg endif() 132299c1dc32SJoakim Soderberg endforeach() 132399c1dc32SJoakim Soderberg 132499c1dc32SJoakim Soderberg # 132599c1dc32SJoakim Soderberg # Rate limiter tests. 132699c1dc32SJoakim Soderberg # 132799c1dc32SJoakim Soderberg 132899c1dc32SJoakim Soderberg # Group limits, no connection limit. 1329a9db46aeSMark Ellzey set(RL_BIN ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test-ratelim) 1330a9db46aeSMark Ellzey 1331a9db46aeSMark Ellzey add_test(test-ratelim__group_lim 1332a9db46aeSMark Ellzey ${RL_BIN} 1333a9db46aeSMark Ellzey -g 30000 1334a9db46aeSMark Ellzey -n 30 1335a9db46aeSMark Ellzey -t 100 1336a9db46aeSMark Ellzey --check-grouplimit 1000 1337a9db46aeSMark Ellzey --check-stddev 100) 133899c1dc32SJoakim Soderberg 133999c1dc32SJoakim Soderberg # Connection limit, no group limit. 1340a9db46aeSMark Ellzey add_test(test-ratelim__con_lim 1341a9db46aeSMark Ellzey ${RL_BIN} 1342a9db46aeSMark Ellzey -c 1000 1343a9db46aeSMark Ellzey -n 30 1344a9db46aeSMark Ellzey -t 100 1345a9db46aeSMark Ellzey --check-connlimit 50 1346a9db46aeSMark Ellzey --check-stddev 50) 134799c1dc32SJoakim Soderberg 134899c1dc32SJoakim Soderberg # Connection limit and group limit. 1349a9db46aeSMark Ellzey add_test(test-ratelim__group_con_lim 1350a9db46aeSMark Ellzey ${RL_BIN} 1351a9db46aeSMark Ellzey -c 1000 1352a9db46aeSMark Ellzey -g 30000 1353a9db46aeSMark Ellzey -n 30 1354a9db46aeSMark Ellzey -t 100 1355a9db46aeSMark Ellzey --check-grouplimit 1000 1356a9db46aeSMark Ellzey --check-connlimit 50 1357a9db46aeSMark Ellzey --check-stddev 50) 135899c1dc32SJoakim Soderberg 135999c1dc32SJoakim Soderberg # Connection limit and group limit with independent drain. 1360a9db46aeSMark Ellzey add_test(test-ratelim__group_con_lim_drain 1361a9db46aeSMark Ellzey ${RL_BIN} 1362a9db46aeSMark Ellzey -c 1000 1363a9db46aeSMark Ellzey -g 35000 1364a9db46aeSMark Ellzey -n 30 1365a9db46aeSMark Ellzey -t 100 1366a9db46aeSMark Ellzey -G 500 1367a9db46aeSMark Ellzey --check-grouplimit 1000 1368a9db46aeSMark Ellzey --check-connlimit 50 1369a9db46aeSMark Ellzey --check-stddev 50) 137099c1dc32SJoakim Soderberg 1371e053c4f0SJoakim Soderberg # Add a "make verify" target, same as for autoconf. 1372e053c4f0SJoakim Soderberg # (Important! This will unset all EVENT_NO* environment variables. 1373e053c4f0SJoakim Soderberg # If they are set in the shell the tests are running using simply "ctest" or "make test" will fail) 137467e5d749SJoakim Soderberg if (WIN32) 1375f1715b47SJoakim Soderberg # Windows doesn't have "unset". But you can use "set VAR=" instead. 1376f1715b47SJoakim Soderberg # We need to guard against the possibility taht EVENT_NOWIN32 is set, and all test failing 1377f1715b47SJoakim Soderberg # since no event backend being available. 1378f1715b47SJoakim Soderberg file(TO_NATIVE_PATH ${CMAKE_CTEST_COMMAND} WINDOWS_CTEST_COMMAND) 1379f1715b47SJoakim Soderberg 1380f1715b47SJoakim Soderberg file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/tmp/verify_tests.bat 1381f1715b47SJoakim Soderberg " 1382f1715b47SJoakim Soderberg set EVENT_NOWIN32= 1383f1715b47SJoakim Soderberg \"${WINDOWS_CTEST_COMMAND}\" 1384f1715b47SJoakim Soderberg ") 1385f1715b47SJoakim Soderberg 13868b228e27SMark Ellzey message(STATUS "${WINDOWS_CTEST_COMMAND}") 1387f1715b47SJoakim Soderberg 1388a9db46aeSMark Ellzey file(COPY ${CMAKE_CURRENT_BINARY_DIR}/tmp/verify_tests.bat 13899806b126SAzat Khuzhin DESTINATION ${CMAKE_CURRENT_BINARY_DIR} 1390a9db46aeSMark Ellzey FILE_PERMISSIONS 1391a9db46aeSMark Ellzey OWNER_READ 1392a9db46aeSMark Ellzey OWNER_WRITE 1393a9db46aeSMark Ellzey OWNER_EXECUTE 1394a9db46aeSMark Ellzey GROUP_READ 1395a9db46aeSMark Ellzey GROUP_EXECUTE 1396a9db46aeSMark Ellzey WORLD_READ WORLD_EXECUTE) 1397a9db46aeSMark Ellzey 1398a9db46aeSMark Ellzey file(TO_NATIVE_PATH 1399a9db46aeSMark Ellzey "${CMAKE_CURRENT_BINARY_DIR}/verify_tests.bat" VERIFY_PATH) 1400f1715b47SJoakim Soderberg 1401f1715b47SJoakim Soderberg add_custom_target(verify COMMAND "${VERIFY_PATH}" 140267e5d749SJoakim Soderberg DEPENDS event ${ALL_TESTPROGS}) 140367e5d749SJoakim Soderberg else() 14044ac086abSJoakim Soderberg # On some platforms doing exec(unset) as CMake does won't work, so make sure 14054ac086abSJoakim Soderberg # we run the unset command in a shell instead. 14064ac086abSJoakim Soderberg # First we write the script contents. 14074ac086abSJoakim Soderberg file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/tmp/verify_tests.sh 14084ac086abSJoakim Soderberg " 14094ac086abSJoakim Soderberg #!/bin/bash 14104ac086abSJoakim Soderberg unset EVENT_NOEPOLL; unset EVENT_NOPOLL; unset EVENT_NOSELECT; unset EVENT_NOWIN32; unset EVENT_NOEVPORT; unset EVENT_NOKQUEUE; unset EVENT_NODEVPOLL 14114ac086abSJoakim Soderberg ${CMAKE_CTEST_COMMAND} 14124ac086abSJoakim Soderberg ") 14134ac086abSJoakim Soderberg 14144ac086abSJoakim Soderberg # Then we copy the file (this allows us to set execute permission on it) 14154ac086abSJoakim Soderberg file(COPY ${CMAKE_CURRENT_BINARY_DIR}/tmp/verify_tests.sh 14164ac086abSJoakim Soderberg DESTINATION ${CMAKE_CURRENT_BINARY_DIR} 1417a9db46aeSMark Ellzey FILE_PERMISSIONS 1418a9db46aeSMark Ellzey OWNER_READ 1419a9db46aeSMark Ellzey OWNER_WRITE 1420a9db46aeSMark Ellzey OWNER_EXECUTE 1421a9db46aeSMark Ellzey GROUP_READ 1422a9db46aeSMark Ellzey GROUP_EXECUTE 1423a9db46aeSMark Ellzey WORLD_READ 1424a9db46aeSMark Ellzey WORLD_EXECUTE) 14254ac086abSJoakim Soderberg 14264ac086abSJoakim Soderberg # Create the target that runs the script. 1427a9db46aeSMark Ellzey add_custom_target(verify 14289806b126SAzat Khuzhin COMMAND ${CMAKE_CURRENT_BINARY_DIR}/verify_tests.sh 14299806b126SAzat Khuzhin DEPENDS event ${ALL_TESTPROGS}) 143067e5d749SJoakim Soderberg endif() 1431e053c4f0SJoakim Soderberg 143227bd9fafSSergey Nikulov if (NOT EVENT__DISABLE_REGRESS AND __FOUND_USABLE_PYTHON) 1433e053c4f0SJoakim Soderberg add_dependencies(verify regress) 1434e053c4f0SJoakim Soderberg endif() 1435e053c4f0SJoakim Soderberg 1436f2483f8bSJoakim Soderberg if (EVENT__COVERAGE) 1437f2483f8bSJoakim Soderberg include(CodeCoverage) 1438f2483f8bSJoakim Soderberg 1439f2483f8bSJoakim Soderberg setup_target_for_coverage( 1440f2483f8bSJoakim Soderberg verify_coverage # Coverage target name "make verify_coverage" 1441f2483f8bSJoakim Soderberg make # Test runner. 1442f2483f8bSJoakim Soderberg coverage # Output directory. 1443f2483f8bSJoakim Soderberg verify) # Arguments passed to test runner. "make verify" 1444f2483f8bSJoakim Soderberg endif() 1445f2483f8bSJoakim Soderberg 1446e415196aSJoakim Soderberg enable_testing() 1447e415196aSJoakim Soderberg 1448e415196aSJoakim Soderberg include(CTest) 1449e415196aSJoakim Soderbergendif() 1450f3446ed5SJoakim Soderberg 1451f3446ed5SJoakim Soderberg# 1452f3446ed5SJoakim Soderberg# Installation preparation. 1453f3446ed5SJoakim Soderberg# 1454f3446ed5SJoakim Soderberg 14559806b126SAzat Khuzhinset(EVENT_INSTALL_CMAKE_DIR 14561c047618Syuangongji "${CMAKE_INSTALL_PREFIX}/lib/cmake/libevent") 1457f3446ed5SJoakim Soderberg 1458f3446ed5SJoakim Soderbergexport(PACKAGE libevent) 1459f3446ed5SJoakim Soderberg 14601c047618Syuangongjifunction(gen_package_config forinstall) 14611c047618Syuangongji if(${forinstall}) 14621c047618Syuangongji set(CONFIG_FOR_INSTALL_TREE 1) 14631c047618Syuangongji set(dir "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}") 14641c047618Syuangongji else() 14651c047618Syuangongji set(CONFIG_FOR_INSTALL_TREE 0) 14661c047618Syuangongji set(dir "${PROJECT_BINARY_DIR}") 14671c047618Syuangongji endif() 14681c047618Syuangongji configure_file(${PROJECT_SOURCE_DIR}/cmake/LibeventConfig.cmake.in 14691c047618Syuangongji "${dir}/LibeventConfig.cmake" 14701c047618Syuangongji @ONLY) 14711c047618Syuangongjiendfunction() 14721c047618Syuangongji 1473f3446ed5SJoakim Soderberg# Generate the config file for the build-tree. 1474f3446ed5SJoakim Soderbergset(EVENT__INCLUDE_DIRS 1475f3446ed5SJoakim Soderberg "${PROJECT_SOURCE_DIR}/include" 1476f3446ed5SJoakim Soderberg "${PROJECT_BINARY_DIR}/include") 1477a9db46aeSMark Ellzey 1478a9db46aeSMark Ellzeyset(LIBEVENT_INCLUDE_DIRS 1479a9db46aeSMark Ellzey ${EVENT__INCLUDE_DIRS} 1480a9db46aeSMark Ellzey CACHE PATH "Libevent include directories") 1481a9db46aeSMark Ellzey 14821c047618Syuangongjigen_package_config(0) 1483f3446ed5SJoakim Soderberg 1484f3446ed5SJoakim Soderberg# Generate the config file for the installation tree. 14851c047618Syuangongjigen_package_config(1) 1486f3446ed5SJoakim Soderberg 1487f3446ed5SJoakim Soderberg# Generate version info for both build-tree and install-tree. 1488f3446ed5SJoakim Soderbergconfigure_file(${PROJECT_SOURCE_DIR}/cmake/LibeventConfigVersion.cmake.in 1489f3446ed5SJoakim Soderberg ${PROJECT_BINARY_DIR}/LibeventConfigVersion.cmake 1490f3446ed5SJoakim Soderberg @ONLY) 1491f3446ed5SJoakim Soderberg 149227bd9fafSSergey Nikulov# Install compat headers 149327bd9fafSSergey Nikulovinstall(FILES ${HDR_COMPAT} 14949806b126SAzat Khuzhin DESTINATION "include" 149527bd9fafSSergey Nikulov COMPONENT dev) 1496f3446ed5SJoakim Soderberg 1497a9d1121dSyuangongji# Install public headers 1498a9d1121dSyuangongjiinstall(FILES ${HDR_PUBLIC} 1499a9d1121dSyuangongji DESTINATION "include/event2" 1500a9d1121dSyuangongji COMPONENT dev) 1501a9d1121dSyuangongji 1502f3446ed5SJoakim Soderberg# Install the configs. 1503f3446ed5SJoakim Soderberginstall(FILES 1504f3446ed5SJoakim Soderberg ${PROJECT_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/LibeventConfig.cmake 15054b754df9SJoakim Soderberg ${PROJECT_BINARY_DIR}/LibeventConfigVersion.cmake 15069806b126SAzat Khuzhin DESTINATION "${EVENT_INSTALL_CMAKE_DIR}" 1507a9db46aeSMark Ellzey COMPONENT dev) 1508f3446ed5SJoakim Soderberg 1509f3446ed5SJoakim Soderberg# Install exports for the install-tree. 15101c047618Syuangongjimacro(install_export type) 15111c047618Syuangongji install(EXPORT LibeventTargets-${type} 15121c047618Syuangongji NAMESPACE ${PROJECT_NAME}:: 15131c047618Syuangongji DESTINATION "${EVENT_INSTALL_CMAKE_DIR}" 1514a9db46aeSMark Ellzey COMPONENT dev) 15151c047618Syuangongjiendmacro() 15161c047618Syuangongji 15171c047618Syuangongjiif (${EVENT_LIBRARY_STATIC}) 15181c047618Syuangongji install_export(static) 15191c047618Syuangongjiendif() 15201c047618Syuangongjiif (${EVENT_LIBRARY_SHARED}) 15211c047618Syuangongji install_export(shared) 15221c047618Syuangongjiendif() 152349ab3632SJoakim Soderberg 15242d65071cSyuangongji# Install the scripts. 15252d65071cSyuangongjiinstall(PROGRAMS 15262d65071cSyuangongji ${CMAKE_CURRENT_SOURCE_DIR}/event_rpcgen.py 15272d65071cSyuangongji DESTINATION "bin" 15282d65071cSyuangongji COMPONENT runtime) 15292d65071cSyuangongji 15302d65071cSyuangongji# Create documents with doxygen. 15317a85300aSyuangongjioption(EVENT__DOXYGEN 15327a85300aSyuangongji "Enables doxygen documentation" OFF) 15337a85300aSyuangongjiif (EVENT__DOXYGEN) 15347a85300aSyuangongji include(UseDoxygen) 15357a85300aSyuangongji UseDoxygen() 15362d65071cSyuangongjiendif() 15372d65071cSyuangongji 15382d65071cSyuangongji 15393f1fb1f9SDimo Markovif (NOT TARGET uninstall) 15402d65071cSyuangongji # Create the uninstall target. 15412d65071cSyuangongji # https://gitlab.kitware.com/cmake/community/wikis/FAQ#can-i-do-make-uninstall-with-cmake 15422d65071cSyuangongji configure_file(${PROJECT_SOURCE_DIR}/cmake/Uninstall.cmake.in 15432d65071cSyuangongji ${PROJECT_BINARY_DIR}/Uninstall.cmake 15442d65071cSyuangongji @ONLY) 15452d65071cSyuangongji 15462d65071cSyuangongji add_custom_target(uninstall 15472d65071cSyuangongji COMMAND ${CMAKE_COMMAND} -P ${PROJECT_BINARY_DIR}/Uninstall.cmake) 15483f1fb1f9SDimo Markovendif() 15492d65071cSyuangongji 155038716c65SAzat Khuzhinmessage(STATUS "") 155138716c65SAzat Khuzhinmessage(STATUS " ---( Libevent " ${EVENT_VERSION} " )---") 155238716c65SAzat Khuzhinmessage(STATUS "") 15538b228e27SMark Ellzeymessage(STATUS "Available event backends: ${BACKENDS}") 1554acf4821dSAzat Khuzhinmessage(STATUS "CMAKE_BINARY_DIR: ${CMAKE_BINARY_DIR}") 1555acf4821dSAzat Khuzhinmessage(STATUS "CMAKE_CURRENT_BINARY_DIR: ${CMAKE_CURRENT_BINARY_DIR}") 1556acf4821dSAzat Khuzhinmessage(STATUS "CMAKE_SOURCE_DIR: ${CMAKE_SOURCE_DIR}") 1557acf4821dSAzat Khuzhinmessage(STATUS "CMAKE_CURRENT_SOURCE_DIR: ${CMAKE_CURRENT_SOURCE_DIR}") 1558acf4821dSAzat Khuzhinmessage(STATUS "PROJECT_BINARY_DIR: ${PROJECT_BINARY_DIR}") 1559acf4821dSAzat Khuzhinmessage(STATUS "PROJECT_SOURCE_DIR: ${PROJECT_SOURCE_DIR}") 1560acf4821dSAzat Khuzhinmessage(STATUS "CMAKE_MODULE_PATH: ${CMAKE_MODULE_PATH}") 1561acf4821dSAzat Khuzhinmessage(STATUS "CMAKE_COMMAND: ${CMAKE_COMMAND}") 1562acf4821dSAzat Khuzhinmessage(STATUS "CMAKE_ROOT: ${CMAKE_ROOT}") 1563acf4821dSAzat Khuzhinmessage(STATUS "CMAKE_SYSTEM: ${CMAKE_SYSTEM}") 1564acf4821dSAzat Khuzhinmessage(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") 1565acf4821dSAzat Khuzhinmessage(STATUS "CMAKE_SYSTEM_VERSION: ${CMAKE_SYSTEM_VERSION}") 1566acf4821dSAzat Khuzhinmessage(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") 1567acf4821dSAzat Khuzhinmessage(STATUS "CMAKE_SKIP_RPATH: ${CMAKE_SKIP_RPATH}") 1568acf4821dSAzat Khuzhinmessage(STATUS "CMAKE_VERBOSE_MAKEFILE: ${CMAKE_VERBOSE_MAKEFILE}") 1569acf4821dSAzat Khuzhinmessage(STATUS "CMAKE_C_FLAGS: ${CMAKE_C_FLAGS}") 1570acf4821dSAzat Khuzhinmessage(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") 1571acf4821dSAzat Khuzhinmessage(STATUS "CMAKE_C_COMPILER: ${CMAKE_C_COMPILER} (id ${CMAKE_C_COMPILER_ID}, clang ${CLANG}, GNUC ${GNUC})") 1572acf4821dSAzat Khuzhinmessage(STATUS "CMAKE_AR: ${CMAKE_AR}") 1573acf4821dSAzat Khuzhinmessage(STATUS "CMAKE_RANLIB: ${CMAKE_RANLIB}") 157438716c65SAzat Khuzhinmessage(STATUS "") 1575a9db46aeSMark Ellzey 1576