xref: /aosp_15_r20/external/libevent/CMakeLists.txt (revision 663afb9b963571284e0f0a60f257164ab54f64bf)
1*663afb9bSAndroid Build Coastguard Worker#
2*663afb9bSAndroid Build Coastguard Worker# Libevent CMake project
3*663afb9bSAndroid Build Coastguard Worker#
4*663afb9bSAndroid Build Coastguard Worker# Based on initial work by:
5*663afb9bSAndroid Build Coastguard Worker#    Alexey Ozeritsky
6*663afb9bSAndroid Build Coastguard Worker#
7*663afb9bSAndroid Build Coastguard Worker# Additional changes:
8*663afb9bSAndroid Build Coastguard Worker#   Brodie Thiesfield
9*663afb9bSAndroid Build Coastguard Worker#   Joakim Soderberg
10*663afb9bSAndroid Build Coastguard Worker#   Trond Norbye
11*663afb9bSAndroid Build Coastguard Worker#   Sergei Nikulov
12*663afb9bSAndroid Build Coastguard Worker#
13*663afb9bSAndroid Build Coastguard Worker#   Build example:
14*663afb9bSAndroid Build Coastguard Worker#
15*663afb9bSAndroid Build Coastguard Worker#       cd libevent
16*663afb9bSAndroid Build Coastguard Worker#       md build
17*663afb9bSAndroid Build Coastguard Worker#       cd build
18*663afb9bSAndroid Build Coastguard Worker#       cmake -G "Visual Studio 10" ..
19*663afb9bSAndroid Build Coastguard Worker#       start libevent.sln
20*663afb9bSAndroid Build Coastguard Worker#
21*663afb9bSAndroid Build Coastguard Worker
22*663afb9bSAndroid Build Coastguard Workercmake_minimum_required(VERSION 3.1 FATAL_ERROR)
23*663afb9bSAndroid Build Coastguard Worker
24*663afb9bSAndroid Build Coastguard Workerif (POLICY CMP0054)
25*663afb9bSAndroid Build Coastguard Worker    cmake_policy(SET CMP0054 NEW)
26*663afb9bSAndroid Build Coastguard Workerendif()
27*663afb9bSAndroid Build Coastguard Workerif (POLICY CMP0074)
28*663afb9bSAndroid Build Coastguard Worker    cmake_policy(SET CMP0074 NEW)
29*663afb9bSAndroid Build Coastguard Workerendif()
30*663afb9bSAndroid Build Coastguard Workerif (POLICY CMP0075)
31*663afb9bSAndroid Build Coastguard Worker    cmake_policy(SET CMP0075 NEW)
32*663afb9bSAndroid Build Coastguard Workerendif()
33*663afb9bSAndroid Build Coastguard Worker
34*663afb9bSAndroid Build Coastguard Workerif(NOT CMAKE_BUILD_TYPE)
35*663afb9bSAndroid Build Coastguard Worker    set(CMAKE_BUILD_TYPE Release
36*663afb9bSAndroid Build Coastguard Worker        CACHE STRING "Set build type to Debug o Release (default Release)" FORCE)
37*663afb9bSAndroid Build Coastguard Workerendif()
38*663afb9bSAndroid Build Coastguard Workerstring(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
39*663afb9bSAndroid Build Coastguard Worker
40*663afb9bSAndroid Build Coastguard Worker# get rid of the extra default configurations
41*663afb9bSAndroid Build Coastguard Worker# what? why would you get id of other useful build types? - Ellzey
42*663afb9bSAndroid Build Coastguard Workerset(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Limited configurations" FORCE)
43*663afb9bSAndroid Build Coastguard Worker
44*663afb9bSAndroid Build Coastguard Workerset(EVENT__LIBRARY_TYPE DEFAULT CACHE STRING
45*663afb9bSAndroid Build Coastguard Worker    "Set library type to SHARED/STATIC/BOTH (default SHARED for MSVC, otherwise BOTH)")
46*663afb9bSAndroid Build Coastguard Worker
47*663afb9bSAndroid Build Coastguard Workerproject(libevent C)
48*663afb9bSAndroid Build Coastguard Worker
49*663afb9bSAndroid Build Coastguard Workerlist(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/")
50*663afb9bSAndroid Build Coastguard Workerstring(REGEX MATCH "SunOS" SOLARIS "${CMAKE_SYSTEM_NAME}")
51*663afb9bSAndroid Build Coastguard Worker
52*663afb9bSAndroid Build Coastguard Worker
53*663afb9bSAndroid Build Coastguard Workerinclude(CheckTypeSize)
54*663afb9bSAndroid Build Coastguard Workerinclude(CheckFileOffsetBits)
55*663afb9bSAndroid Build Coastguard Workerinclude(Macros)
56*663afb9bSAndroid Build Coastguard Workerinclude(CheckVariableExists)
57*663afb9bSAndroid Build Coastguard Workerinclude(CheckSymbolExists)
58*663afb9bSAndroid Build Coastguard Workerinclude(CheckStructHasMember)
59*663afb9bSAndroid Build Coastguard Workerinclude(CheckCSourceCompiles)
60*663afb9bSAndroid Build Coastguard Workerinclude(CheckPrototypeDefinition)
61*663afb9bSAndroid Build Coastguard Workerinclude(CheckFunctionKeywords)
62*663afb9bSAndroid Build Coastguard Workerinclude(CheckConstExists)
63*663afb9bSAndroid Build Coastguard Workerinclude(AddCompilerFlags)
64*663afb9bSAndroid Build Coastguard Workerinclude(VersionViaGit)
65*663afb9bSAndroid Build Coastguard Worker
66*663afb9bSAndroid Build Coastguard Workerevent_fuzzy_version_from_git()
67*663afb9bSAndroid Build Coastguard Worker
68*663afb9bSAndroid Build Coastguard Workerset(EVENT_VERSION_MAJOR ${EVENT_GIT___VERSION_MAJOR})
69*663afb9bSAndroid Build Coastguard Workerset(EVENT_VERSION_MINOR ${EVENT_GIT___VERSION_MINOR})
70*663afb9bSAndroid Build Coastguard Workerset(EVENT_VERSION_PATCH ${EVENT_GIT___VERSION_PATCH})
71*663afb9bSAndroid Build Coastguard Workerset(EVENT_VERSION_STAGE ${EVENT_GIT___VERSION_STAGE})
72*663afb9bSAndroid Build Coastguard Worker
73*663afb9bSAndroid Build Coastguard Worker
74*663afb9bSAndroid Build Coastguard Workerset(EVENT_ABI_MAJOR ${EVENT_VERSION_MAJOR})
75*663afb9bSAndroid Build Coastguard Workerset(EVENT_ABI_MINOR ${EVENT_VERSION_MINOR})
76*663afb9bSAndroid Build Coastguard Workerset(EVENT_ABI_PATCH ${EVENT_VERSION_PATCH})
77*663afb9bSAndroid Build Coastguard Worker
78*663afb9bSAndroid Build Coastguard Workerset(EVENT_ABI_LIBVERSION
79*663afb9bSAndroid Build Coastguard Worker    "${EVENT_ABI_MAJOR}.${EVENT_ABI_MINOR}.${EVENT_ABI_PATCH}")
80*663afb9bSAndroid Build Coastguard Worker
81*663afb9bSAndroid Build Coastguard Workerset(EVENT_PACKAGE_VERSION
82*663afb9bSAndroid Build Coastguard Worker    "${EVENT_VERSION_MAJOR}.${EVENT_VERSION_MINOR}.${EVENT_VERSION_PATCH}")
83*663afb9bSAndroid Build Coastguard Worker
84*663afb9bSAndroid Build Coastguard Workerset(EVENT_NUMERIC_VERSION 0x02010c00)
85*663afb9bSAndroid Build Coastguard Worker# equals to VERSION_INFO in Makefile.am
86*663afb9bSAndroid Build Coastguard Workerset(EVENT_ABI_LIBVERSION_CURRENT   7)
87*663afb9bSAndroid Build Coastguard Workerset(EVENT_ABI_LIBVERSION_REVISION  1)
88*663afb9bSAndroid Build Coastguard Workerset(EVENT_ABI_LIBVERSION_AGE       0)
89*663afb9bSAndroid Build Coastguard Worker
90*663afb9bSAndroid Build Coastguard Worker# equals to RELEASE in Makefile.am
91*663afb9bSAndroid Build Coastguard Workerset(EVENT_PACKAGE_RELEASE 2.1)
92*663afb9bSAndroid Build Coastguard Worker
93*663afb9bSAndroid Build Coastguard Worker# only a subset of names can be used, defaults to "beta"
94*663afb9bSAndroid Build Coastguard Workerset(EVENT_STAGE_NAME ${EVENT_VERSION_STAGE})
95*663afb9bSAndroid Build Coastguard Worker
96*663afb9bSAndroid Build Coastguard Worker# a list that defines what can set for EVENT_STAGE_VERSION
97*663afb9bSAndroid Build Coastguard Workerset(EVENT__ALLOWED_STAGE_NAMES
98*663afb9bSAndroid Build Coastguard Worker	rc
99*663afb9bSAndroid Build Coastguard Worker	beta
100*663afb9bSAndroid Build Coastguard Worker	alpha
101*663afb9bSAndroid Build Coastguard Worker	alpha-dev
102*663afb9bSAndroid Build Coastguard Worker	release
103*663afb9bSAndroid Build Coastguard Worker	stable
104*663afb9bSAndroid Build Coastguard Worker)
105*663afb9bSAndroid Build Coastguard Workerlist(
106*663afb9bSAndroid Build Coastguard Worker	FIND EVENT__ALLOWED_STAGE_NAMES
107*663afb9bSAndroid Build Coastguard Worker	"${EVENT_STAGE_NAME}"
108*663afb9bSAndroid Build Coastguard Worker	EVENT__STAGE_RET
109*663afb9bSAndroid Build Coastguard Worker)
110*663afb9bSAndroid Build Coastguard Workerif (EVENT__STAGE_RET EQUAL -1)
111*663afb9bSAndroid Build Coastguard Worker	message(WARNING
112*663afb9bSAndroid Build Coastguard Worker		"stage ${EVENT_STAGE_NAME} is not allowed, reset to beta")
113*663afb9bSAndroid Build Coastguard Worker	set(EVENT_STAGE_NAME beta)
114*663afb9bSAndroid Build Coastguard Workerendif()
115*663afb9bSAndroid Build Coastguard Worker
116*663afb9bSAndroid Build Coastguard Workerset(EVENT_VERSION
117*663afb9bSAndroid Build Coastguard Worker	"${EVENT_VERSION_MAJOR}.${EVENT_VERSION_MINOR}.${EVENT_VERSION_PATCH}-${EVENT_STAGE_NAME}")
118*663afb9bSAndroid Build Coastguard Worker
119*663afb9bSAndroid Build Coastguard Workeroption(EVENT__DISABLE_DEBUG_MODE
120*663afb9bSAndroid Build Coastguard Worker    "Define if libevent should build without support for a debug mode" OFF)
121*663afb9bSAndroid Build Coastguard Worker
122*663afb9bSAndroid Build Coastguard Workeroption(EVENT__ENABLE_VERBOSE_DEBUG
123*663afb9bSAndroid Build Coastguard Worker    "Enables verbose debugging" OFF)
124*663afb9bSAndroid Build Coastguard Worker
125*663afb9bSAndroid Build Coastguard Workeroption(EVENT__DISABLE_MM_REPLACEMENT
126*663afb9bSAndroid Build Coastguard Worker    "Define if libevent should not allow replacing the mm functions" OFF)
127*663afb9bSAndroid Build Coastguard Worker
128*663afb9bSAndroid Build Coastguard Workeroption(EVENT__DISABLE_THREAD_SUPPORT
129*663afb9bSAndroid Build Coastguard Worker    "Define if libevent should not be compiled with thread support" OFF)
130*663afb9bSAndroid Build Coastguard Worker
131*663afb9bSAndroid Build Coastguard Workeroption(EVENT__DISABLE_OPENSSL
132*663afb9bSAndroid Build Coastguard Worker    "Define if libevent should build without support for OpenSSL encryption" OFF)
133*663afb9bSAndroid Build Coastguard Worker
134*663afb9bSAndroid Build Coastguard Workeroption(EVENT__DISABLE_BENCHMARK
135*663afb9bSAndroid Build Coastguard Worker    "Defines if libevent should build without the benchmark executables" OFF)
136*663afb9bSAndroid Build Coastguard Worker
137*663afb9bSAndroid Build Coastguard Workeroption(EVENT__DISABLE_TESTS
138*663afb9bSAndroid Build Coastguard Worker    "If tests should be compiled or not" OFF)
139*663afb9bSAndroid Build Coastguard Worker
140*663afb9bSAndroid Build Coastguard Workeroption(EVENT__DISABLE_REGRESS
141*663afb9bSAndroid Build Coastguard Worker    "Disable the regress tests" OFF)
142*663afb9bSAndroid Build Coastguard Worker
143*663afb9bSAndroid Build Coastguard Workeroption(EVENT__DISABLE_SAMPLES
144*663afb9bSAndroid Build Coastguard Worker    "Disable sample files" OFF)
145*663afb9bSAndroid Build Coastguard Worker
146*663afb9bSAndroid Build Coastguard Workeroption(EVENT__DISABLE_CLOCK_GETTIME
147*663afb9bSAndroid Build Coastguard Worker    "Do not use clock_gettime even if it is available" OFF)
148*663afb9bSAndroid Build Coastguard Worker
149*663afb9bSAndroid Build Coastguard Workeroption(EVENT__FORCE_KQUEUE_CHECK
150*663afb9bSAndroid Build Coastguard Worker    "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)
151*663afb9bSAndroid Build Coastguard Worker
152*663afb9bSAndroid Build Coastguard Worker# TODO: Add --disable-largefile     omit support for large files
153*663afb9bSAndroid Build Coastguard Workeroption(EVENT__COVERAGE
154*663afb9bSAndroid Build Coastguard Worker"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)
155*663afb9bSAndroid Build Coastguard Worker
156*663afb9bSAndroid Build Coastguard Worker# Put the libaries and binaries that get built into directories at the
157*663afb9bSAndroid Build Coastguard Worker# top of the build tree rather than in hard-to-find leaf directories.
158*663afb9bSAndroid Build Coastguard Worker#
159*663afb9bSAndroid Build Coastguard Worker# But only if this variables are not defined yet
160*663afb9bSAndroid Build Coastguard Worker# (i.e. libevent is used via add_subdirectory())
161*663afb9bSAndroid Build Coastguard Workerif (NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY)
162*663afb9bSAndroid Build Coastguard Worker    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
163*663afb9bSAndroid Build Coastguard Workerendif()
164*663afb9bSAndroid Build Coastguard Workerif (NOT DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY)
165*663afb9bSAndroid Build Coastguard Worker    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
166*663afb9bSAndroid Build Coastguard Workerendif()
167*663afb9bSAndroid Build Coastguard Workerif (NOT DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
168*663afb9bSAndroid Build Coastguard Worker    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
169*663afb9bSAndroid Build Coastguard Workerendif()
170*663afb9bSAndroid Build Coastguard Worker
171*663afb9bSAndroid Build Coastguard Workerif (EVENT__ENABLE_VERBOSE_DEBUG)
172*663afb9bSAndroid Build Coastguard Worker    add_definitions(-DUSE_DEBUG=1)
173*663afb9bSAndroid Build Coastguard Workerendif()
174*663afb9bSAndroid Build Coastguard Worker
175*663afb9bSAndroid Build Coastguard Worker# make it colorful under ninja-build
176*663afb9bSAndroid Build Coastguard Workerif ("${CMAKE_GENERATOR}" STREQUAL "Ninja")
177*663afb9bSAndroid Build Coastguard Worker    add_compiler_flags(-fdiagnostics-color=always)
178*663afb9bSAndroid Build Coastguard Workerendif()
179*663afb9bSAndroid Build Coastguard Worker
180*663afb9bSAndroid Build Coastguard Worker# Setup compiler flags for coverage.
181*663afb9bSAndroid Build Coastguard Workerif (EVENT__COVERAGE)
182*663afb9bSAndroid Build Coastguard Worker    if (NOT "${CMAKE_BUILD_TYPE_LOWER}" STREQUAL "debug")
183*663afb9bSAndroid Build Coastguard Worker        message(FATAL_ERROR "Coverage requires -DCMAKE_BUILD_TYPE=Debug")
184*663afb9bSAndroid Build Coastguard Worker    endif()
185*663afb9bSAndroid Build Coastguard Worker
186*663afb9bSAndroid Build Coastguard Worker    message(STATUS "Setting coverage compiler flags")
187*663afb9bSAndroid Build Coastguard Worker
188*663afb9bSAndroid Build Coastguard Worker    set(CMAKE_REQUIRED_LIBRARIES "--coverage")
189*663afb9bSAndroid Build Coastguard Worker    add_compiler_flags(-g -O0 --coverage)
190*663afb9bSAndroid Build Coastguard Worker    set(CMAKE_REQUIRED_LIBRARIES "")
191*663afb9bSAndroid Build Coastguard Workerendif()
192*663afb9bSAndroid Build Coastguard Worker
193*663afb9bSAndroid Build Coastguard Workerset(GNUC 0)
194*663afb9bSAndroid Build Coastguard Workerset(CLANG 0)
195*663afb9bSAndroid Build Coastguard Workerset(MSVC 0)
196*663afb9bSAndroid Build Coastguard Workerif (("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") OR
197*663afb9bSAndroid Build Coastguard Worker    ("${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang"))
198*663afb9bSAndroid Build Coastguard Worker    set(CLANG 1)
199*663afb9bSAndroid Build Coastguard Workerendif()
200*663afb9bSAndroid Build Coastguard Workerif (("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") OR (${CLANG}))
201*663afb9bSAndroid Build Coastguard Worker    set(GNUC 1)
202*663afb9bSAndroid Build Coastguard Workerendif()
203*663afb9bSAndroid Build Coastguard Workerif (("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC") OR (${CLANG}))
204*663afb9bSAndroid Build Coastguard Worker    set(MSVC 1)
205*663afb9bSAndroid Build Coastguard Workerendif()
206*663afb9bSAndroid Build Coastguard Worker
207*663afb9bSAndroid Build Coastguard Worker# Detect library type
208*663afb9bSAndroid Build Coastguard Workerset(EVENT_LIBRARY_TYPE)
209*663afb9bSAndroid Build Coastguard Workerif ("${EVENT__LIBRARY_TYPE}" STREQUAL "DEFAULT")
210*663afb9bSAndroid Build Coastguard Worker    if (${MSVC})
211*663afb9bSAndroid Build Coastguard Worker        set(EVENT_LIBRARY_TYPE SHARED)
212*663afb9bSAndroid Build Coastguard Worker    else()
213*663afb9bSAndroid Build Coastguard Worker        set(EVENT_LIBRARY_TYPE BOTH)
214*663afb9bSAndroid Build Coastguard Worker    endif()
215*663afb9bSAndroid Build Coastguard Workerelse()
216*663afb9bSAndroid Build Coastguard Worker    string(TOUPPER "${EVENT__LIBRARY_TYPE}" EVENT_LIBRARY_TYPE)
217*663afb9bSAndroid Build Coastguard Workerendif()
218*663afb9bSAndroid Build Coastguard Workerif ((${MSVC}) AND ("${EVENT_LIBRARY_TYPE}" STREQUAL "BOTH"))
219*663afb9bSAndroid Build Coastguard Worker    message(WARNING
220*663afb9bSAndroid Build Coastguard Worker      "Building SHARED and STATIC is not supported for MSVC "
221*663afb9bSAndroid Build Coastguard Worker      "(due to conflicts in library name"
222*663afb9bSAndroid Build Coastguard Worker      " between STATIC library and IMPORTED library for SHARED libraries)")
223*663afb9bSAndroid Build Coastguard Workerendif()
224*663afb9bSAndroid Build Coastguard Workerset(EVENT_LIBRARY_STATIC OFF)
225*663afb9bSAndroid Build Coastguard Workerset(EVENT_LIBRARY_SHARED OFF)
226*663afb9bSAndroid Build Coastguard Workerif ("${EVENT_LIBRARY_TYPE}" STREQUAL "BOTH")
227*663afb9bSAndroid Build Coastguard Worker    set(EVENT_LIBRARY_STATIC ON)
228*663afb9bSAndroid Build Coastguard Worker    set(EVENT_LIBRARY_SHARED ON)
229*663afb9bSAndroid Build Coastguard Workerelseif ("${EVENT_LIBRARY_TYPE}" STREQUAL "STATIC")
230*663afb9bSAndroid Build Coastguard Worker    set(EVENT_LIBRARY_STATIC ON)
231*663afb9bSAndroid Build Coastguard Workerelseif ("${EVENT_LIBRARY_TYPE}" STREQUAL "SHARED")
232*663afb9bSAndroid Build Coastguard Worker    set(EVENT_LIBRARY_SHARED ON)
233*663afb9bSAndroid Build Coastguard Workerelse()
234*663afb9bSAndroid Build Coastguard Worker    message(FATAL_ERROR "${EVENT_LIBRARY_TYPE} is not supported")
235*663afb9bSAndroid Build Coastguard Workerendif()
236*663afb9bSAndroid Build Coastguard Worker
237*663afb9bSAndroid Build Coastguard Workerif (${MSVC})
238*663afb9bSAndroid Build Coastguard Worker    set(msvc_static_runtime OFF)
239*663afb9bSAndroid Build Coastguard Worker    if ("${EVENT_LIBRARY_TYPE}" STREQUAL "STATIC")
240*663afb9bSAndroid Build Coastguard Worker        set(msvc_static_runtime ON)
241*663afb9bSAndroid Build Coastguard Worker    endif()
242*663afb9bSAndroid Build Coastguard Worker
243*663afb9bSAndroid Build Coastguard Worker    # For more info:
244*663afb9bSAndroid Build Coastguard Worker    # - https://docs.microsoft.com/en-us/cpp/build/reference/md-mt-ld-use-run-time-library?view=vs-2017
245*663afb9bSAndroid Build Coastguard Worker    # - https://gitlab.kitware.com/cmake/community/wikis/FAQ#how-can-i-build-my-msvc-application-with-a-static-runtime
246*663afb9bSAndroid Build Coastguard Worker    option(EVENT__MSVC_STATIC_RUNTIME
247*663afb9bSAndroid Build Coastguard Worker           "Link static runtime libraries"
248*663afb9bSAndroid Build Coastguard Worker           ${msvc_static_runtime})
249*663afb9bSAndroid Build Coastguard Worker
250*663afb9bSAndroid Build Coastguard Worker    if (EVENT__MSVC_STATIC_RUNTIME)
251*663afb9bSAndroid Build Coastguard Worker        foreach (flag_var
252*663afb9bSAndroid Build Coastguard Worker                 CMAKE_C_FLAGS_DEBUG
253*663afb9bSAndroid Build Coastguard Worker                 CMAKE_C_FLAGS_RELEASE
254*663afb9bSAndroid Build Coastguard Worker                 CMAKE_C_FLAGS_MINSIZEREL
255*663afb9bSAndroid Build Coastguard Worker                 CMAKE_C_FLAGS_RELWITHDEBINFO
256*663afb9bSAndroid Build Coastguard Worker        )
257*663afb9bSAndroid Build Coastguard Worker            if (${flag_var} MATCHES "/MD")
258*663afb9bSAndroid Build Coastguard Worker                string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
259*663afb9bSAndroid Build Coastguard Worker            endif()
260*663afb9bSAndroid Build Coastguard Worker        endforeach()
261*663afb9bSAndroid Build Coastguard Worker    endif()
262*663afb9bSAndroid Build Coastguard Workerendif()
263*663afb9bSAndroid Build Coastguard Worker
264*663afb9bSAndroid Build Coastguard Worker# GNUC specific options.
265*663afb9bSAndroid Build Coastguard Workerif (${GNUC})
266*663afb9bSAndroid Build Coastguard Worker    option(EVENT__DISABLE_GCC_WARNINGS "Disable verbose warnings with GCC" OFF)
267*663afb9bSAndroid Build Coastguard Worker    option(EVENT__ENABLE_GCC_HARDENING "Enable compiler security checks" OFF)
268*663afb9bSAndroid Build Coastguard Worker    option(EVENT__ENABLE_GCC_FUNCTION_SECTIONS "Enable gcc function sections" OFF)
269*663afb9bSAndroid Build Coastguard Worker    option(EVENT__ENABLE_GCC_WARNINGS "Make all GCC warnings into errors" OFF)
270*663afb9bSAndroid Build Coastguard Worker
271*663afb9bSAndroid Build Coastguard Worker    set(GCC_V ${CMAKE_C_COMPILER_VERSION})
272*663afb9bSAndroid Build Coastguard Worker
273*663afb9bSAndroid Build Coastguard Worker    list(APPEND __FLAGS
274*663afb9bSAndroid Build Coastguard Worker         -Wall -Wextra -Wno-unused-parameter -Wstrict-aliasing -Wstrict-prototypes
275*663afb9bSAndroid Build Coastguard Worker
276*663afb9bSAndroid Build Coastguard Worker         -fno-strict-aliasing # gcc 2.9.5+
277*663afb9bSAndroid Build Coastguard Worker         -Wmissing-prototypes
278*663afb9bSAndroid Build Coastguard Worker
279*663afb9bSAndroid Build Coastguard Worker         # gcc 4
280*663afb9bSAndroid Build Coastguard Worker         -Winit-self
281*663afb9bSAndroid Build Coastguard Worker         -Wmissing-field-initializers
282*663afb9bSAndroid Build Coastguard Worker         -Wdeclaration-after-statement
283*663afb9bSAndroid Build Coastguard Worker
284*663afb9bSAndroid Build Coastguard Worker         # gcc 4.2
285*663afb9bSAndroid Build Coastguard Worker         -Waddress
286*663afb9bSAndroid Build Coastguard Worker         -Wnormalized=id
287*663afb9bSAndroid Build Coastguard Worker         -Woverride-init
288*663afb9bSAndroid Build Coastguard Worker
289*663afb9bSAndroid Build Coastguard Worker         # gcc 4.5
290*663afb9bSAndroid Build Coastguard Worker         -Wlogical-op
291*663afb9bSAndroid Build Coastguard Worker
292*663afb9bSAndroid Build Coastguard Worker         -Wwrite-strings
293*663afb9bSAndroid Build Coastguard Worker    )
294*663afb9bSAndroid Build Coastguard Worker
295*663afb9bSAndroid Build Coastguard Worker    if (${CLANG})
296*663afb9bSAndroid Build Coastguard Worker        list(APPEND __FLAGS -Wno-unused-function)
297*663afb9bSAndroid Build Coastguard Worker    endif()
298*663afb9bSAndroid Build Coastguard Worker
299*663afb9bSAndroid Build Coastguard Worker    if (EVENT__DISABLE_GCC_WARNINGS)
300*663afb9bSAndroid Build Coastguard Worker        list(APPEND __FLAGS -w)
301*663afb9bSAndroid Build Coastguard Worker    endif()
302*663afb9bSAndroid Build Coastguard Worker
303*663afb9bSAndroid Build Coastguard Worker    if (EVENT__ENABLE_GCC_HARDENING)
304*663afb9bSAndroid Build Coastguard Worker        list(APPEND __FLAGS
305*663afb9bSAndroid Build Coastguard Worker             -fstack-protector-all
306*663afb9bSAndroid Build Coastguard Worker             -fwrapv
307*663afb9bSAndroid Build Coastguard Worker             -fPIE
308*663afb9bSAndroid Build Coastguard Worker             -Wstack-protector
309*663afb9bSAndroid Build Coastguard Worker             "--param ssp-buffer-size=1")
310*663afb9bSAndroid Build Coastguard Worker
311*663afb9bSAndroid Build Coastguard Worker        add_definitions(-D_FORTIFY_SOURCE=2)
312*663afb9bSAndroid Build Coastguard Worker    endif()
313*663afb9bSAndroid Build Coastguard Worker
314*663afb9bSAndroid Build Coastguard Worker    if (EVENT__ENABLE_GCC_FUNCTION_SECTIONS)
315*663afb9bSAndroid Build Coastguard Worker        list(APPEND __FLAGS -ffunction-sections)
316*663afb9bSAndroid Build Coastguard Worker        # TODO: Add --gc-sections support. We need some checks for NetBSD to ensure this works.
317*663afb9bSAndroid Build Coastguard Worker    endif()
318*663afb9bSAndroid Build Coastguard Worker
319*663afb9bSAndroid Build Coastguard Worker    if (EVENT__ENABLE_GCC_WARNINGS)
320*663afb9bSAndroid Build Coastguard Worker        list(APPEND __FLAGS -Werror)
321*663afb9bSAndroid Build Coastguard Worker    endif()
322*663afb9bSAndroid Build Coastguard Worker
323*663afb9bSAndroid Build Coastguard Worker    add_compiler_flags(${__FLAGS})
324*663afb9bSAndroid Build Coastguard Workerendif()
325*663afb9bSAndroid Build Coastguard Worker
326*663afb9bSAndroid Build Coastguard Workerif (APPLE)
327*663afb9bSAndroid Build Coastguard Worker    # Get rid of deprecated warnings for OpenSSL on OSX 10.7 and greater.
328*663afb9bSAndroid Build Coastguard Worker    add_compiler_flags(
329*663afb9bSAndroid Build Coastguard Worker        -Wno-error=deprecated-declarations
330*663afb9bSAndroid Build Coastguard Worker        -Qunused-arguments
331*663afb9bSAndroid Build Coastguard Worker    )
332*663afb9bSAndroid Build Coastguard Workerendif()
333*663afb9bSAndroid Build Coastguard Worker
334*663afb9bSAndroid Build Coastguard Workerif (MINGW OR CYGWIN)
335*663afb9bSAndroid Build Coastguard Worker    set(WIN32 TRUE)
336*663afb9bSAndroid Build Coastguard Workerendif()
337*663afb9bSAndroid Build Coastguard Worker
338*663afb9bSAndroid Build Coastguard Worker# Winsock.
339*663afb9bSAndroid Build Coastguard Workerif(WIN32)
340*663afb9bSAndroid Build Coastguard Worker    set(CMAKE_REQUIRED_LIBRARIES  ws2_32 shell32 advapi32)
341*663afb9bSAndroid Build Coastguard Worker    set(CMAKE_REQUIRED_DEFINITIONS -FIwinsock2.h -FIws2tcpip.h -D_WIN32_WINNT=0x0600)
342*663afb9bSAndroid Build Coastguard Workerendif()
343*663afb9bSAndroid Build Coastguard Workerif (SOLARIS)
344*663afb9bSAndroid Build Coastguard Worker    set(CMAKE_REQUIRED_LIBRARIES socket nsl)
345*663afb9bSAndroid Build Coastguard Workerendif()
346*663afb9bSAndroid Build Coastguard Worker
347*663afb9bSAndroid Build Coastguard Worker# Check if _GNU_SOURCE is available.
348*663afb9bSAndroid Build Coastguard Workerif (NOT DEFINED _GNU_SOURCE)
349*663afb9bSAndroid Build Coastguard Worker  CHECK_SYMBOL_EXISTS(__GNU_LIBRARY__ "features.h" _GNU_SOURCE)
350*663afb9bSAndroid Build Coastguard Worker
351*663afb9bSAndroid Build Coastguard Worker  if (NOT _GNU_SOURCE)
352*663afb9bSAndroid Build Coastguard Worker    unset(_GNU_SOURCE CACHE)
353*663afb9bSAndroid Build Coastguard Worker    CHECK_SYMBOL_EXISTS(_GNU_SOURCE "features.h" _GNU_SOURCE)
354*663afb9bSAndroid Build Coastguard Worker  endif()
355*663afb9bSAndroid Build Coastguard Worker
356*663afb9bSAndroid Build Coastguard Worker  if (ANDROID)
357*663afb9bSAndroid Build Coastguard Worker    set(_GNU_SOURCE TRUE)
358*663afb9bSAndroid Build Coastguard Worker  endif()
359*663afb9bSAndroid Build Coastguard Workerendif()
360*663afb9bSAndroid Build Coastguard Worker
361*663afb9bSAndroid Build Coastguard Workerif (_GNU_SOURCE)
362*663afb9bSAndroid Build Coastguard Worker    add_definitions(-D_GNU_SOURCE=1)
363*663afb9bSAndroid Build Coastguard Worker    set(CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
364*663afb9bSAndroid Build Coastguard Workerendif()
365*663afb9bSAndroid Build Coastguard Worker
366*663afb9bSAndroid Build Coastguard Worker# Check if header files exist
367*663afb9bSAndroid Build Coastguard Workerlist(APPEND FILES_TO_CHECK
368*663afb9bSAndroid Build Coastguard Worker    fcntl.h
369*663afb9bSAndroid Build Coastguard Worker    inttypes.h
370*663afb9bSAndroid Build Coastguard Worker    memory.h
371*663afb9bSAndroid Build Coastguard Worker    signal.h
372*663afb9bSAndroid Build Coastguard Worker    stdarg.h
373*663afb9bSAndroid Build Coastguard Worker    stddef.h
374*663afb9bSAndroid Build Coastguard Worker    stdint.h
375*663afb9bSAndroid Build Coastguard Worker    stdlib.h
376*663afb9bSAndroid Build Coastguard Worker    string.h
377*663afb9bSAndroid Build Coastguard Worker    errno.h
378*663afb9bSAndroid Build Coastguard Worker    unistd.h
379*663afb9bSAndroid Build Coastguard Worker    time.h
380*663afb9bSAndroid Build Coastguard Worker    sys/types.h
381*663afb9bSAndroid Build Coastguard Worker    sys/stat.h
382*663afb9bSAndroid Build Coastguard Worker    sys/time.h
383*663afb9bSAndroid Build Coastguard Worker    sys/param.h
384*663afb9bSAndroid Build Coastguard Worker)
385*663afb9bSAndroid Build Coastguard Workerif (WIN32)
386*663afb9bSAndroid Build Coastguard Worker    list(APPEND FILES_TO_CHECK
387*663afb9bSAndroid Build Coastguard Worker        io.h
388*663afb9bSAndroid Build Coastguard Worker        winsock2.h
389*663afb9bSAndroid Build Coastguard Worker        ws2tcpip.h
390*663afb9bSAndroid Build Coastguard Worker        afunix.h
391*663afb9bSAndroid Build Coastguard Worker    )
392*663afb9bSAndroid Build Coastguard Workerelse()
393*663afb9bSAndroid Build Coastguard Worker    list(APPEND FILES_TO_CHECK
394*663afb9bSAndroid Build Coastguard Worker        netdb.h
395*663afb9bSAndroid Build Coastguard Worker        dlfcn.h
396*663afb9bSAndroid Build Coastguard Worker        arpa/inet.h
397*663afb9bSAndroid Build Coastguard Worker        poll.h
398*663afb9bSAndroid Build Coastguard Worker        port.h
399*663afb9bSAndroid Build Coastguard Worker        sys/socket.h
400*663afb9bSAndroid Build Coastguard Worker        sys/random.h
401*663afb9bSAndroid Build Coastguard Worker        sys/un.h
402*663afb9bSAndroid Build Coastguard Worker        sys/devpoll.h
403*663afb9bSAndroid Build Coastguard Worker        sys/epoll.h
404*663afb9bSAndroid Build Coastguard Worker        sys/eventfd.h
405*663afb9bSAndroid Build Coastguard Worker        sys/event.h
406*663afb9bSAndroid Build Coastguard Worker        sys/ioctl.h
407*663afb9bSAndroid Build Coastguard Worker        sys/mman.h
408*663afb9bSAndroid Build Coastguard Worker        sys/queue.h
409*663afb9bSAndroid Build Coastguard Worker        sys/select.h
410*663afb9bSAndroid Build Coastguard Worker        sys/sendfile.h
411*663afb9bSAndroid Build Coastguard Worker        sys/uio.h
412*663afb9bSAndroid Build Coastguard Worker        sys/wait.h
413*663afb9bSAndroid Build Coastguard Worker        sys/resource.h
414*663afb9bSAndroid Build Coastguard Worker        sys/timerfd.h
415*663afb9bSAndroid Build Coastguard Worker        netinet/in.h
416*663afb9bSAndroid Build Coastguard Worker        netinet/in6.h
417*663afb9bSAndroid Build Coastguard Worker        netinet/tcp.h
418*663afb9bSAndroid Build Coastguard Worker        ifaddrs.h
419*663afb9bSAndroid Build Coastguard Worker    )
420*663afb9bSAndroid Build Coastguard Workerendif()
421*663afb9bSAndroid Build Coastguard Worker
422*663afb9bSAndroid Build Coastguard Workerif (NOT "${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Linux")
423*663afb9bSAndroid Build Coastguard Worker    list(APPEND FILES_TO_CHECK sys/sysctl.h)
424*663afb9bSAndroid Build Coastguard Workerendif()
425*663afb9bSAndroid Build Coastguard Worker
426*663afb9bSAndroid Build Coastguard Workerif (APPLE)
427*663afb9bSAndroid Build Coastguard Worker    list(APPEND FILES_TO_CHECK
428*663afb9bSAndroid Build Coastguard Worker        mach/mach_time.h
429*663afb9bSAndroid Build Coastguard Worker        mach/mach.h
430*663afb9bSAndroid Build Coastguard Worker    )
431*663afb9bSAndroid Build Coastguard Workerendif()
432*663afb9bSAndroid Build Coastguard Worker
433*663afb9bSAndroid Build Coastguard Workerforeach(FILE ${FILES_TO_CHECK})
434*663afb9bSAndroid Build Coastguard Worker    CHECK_INCLUDE_FILE_CONCAT(${FILE} "EVENT")
435*663afb9bSAndroid Build Coastguard Workerendforeach()
436*663afb9bSAndroid Build Coastguard Workerunset(FILES_TO_CHECK)
437*663afb9bSAndroid Build Coastguard Worker
438*663afb9bSAndroid Build Coastguard Worker# Check if functions exist
439*663afb9bSAndroid Build Coastguard Workerlist(APPEND SYMBOLS_TO_CHECK
440*663afb9bSAndroid Build Coastguard Worker    getaddrinfo
441*663afb9bSAndroid Build Coastguard Worker    getnameinfo
442*663afb9bSAndroid Build Coastguard Worker    getprotobynumber
443*663afb9bSAndroid Build Coastguard Worker    getservbyname
444*663afb9bSAndroid Build Coastguard Worker    gethostbyname
445*663afb9bSAndroid Build Coastguard Worker    inet_ntop
446*663afb9bSAndroid Build Coastguard Worker    inet_pton
447*663afb9bSAndroid Build Coastguard Worker    gettimeofday
448*663afb9bSAndroid Build Coastguard Worker    signal
449*663afb9bSAndroid Build Coastguard Worker    strtoll
450*663afb9bSAndroid Build Coastguard Worker    splice
451*663afb9bSAndroid Build Coastguard Worker    strlcpy
452*663afb9bSAndroid Build Coastguard Worker    strsep
453*663afb9bSAndroid Build Coastguard Worker    strtok_r
454*663afb9bSAndroid Build Coastguard Worker    vasprintf
455*663afb9bSAndroid Build Coastguard Worker    timerclear
456*663afb9bSAndroid Build Coastguard Worker    timercmp
457*663afb9bSAndroid Build Coastguard Worker    timerisset
458*663afb9bSAndroid Build Coastguard Worker    timeradd
459*663afb9bSAndroid Build Coastguard Worker    nanosleep
460*663afb9bSAndroid Build Coastguard Worker    putenv
461*663afb9bSAndroid Build Coastguard Worker    umask
462*663afb9bSAndroid Build Coastguard Worker)
463*663afb9bSAndroid Build Coastguard Workerif (NOT EVENT__DISABLE_CLOCK_GETTIME)
464*663afb9bSAndroid Build Coastguard Worker    list(APPEND SYMBOLS_TO_CHECK clock_gettime)
465*663afb9bSAndroid Build Coastguard Workerendif()
466*663afb9bSAndroid Build Coastguard Worker
467*663afb9bSAndroid Build Coastguard Workerif (WIN32)
468*663afb9bSAndroid Build Coastguard Worker    list(APPEND SYMBOLS_TO_CHECK
469*663afb9bSAndroid Build Coastguard Worker        _gmtime64_s
470*663afb9bSAndroid Build Coastguard Worker        _gmtime64
471*663afb9bSAndroid Build Coastguard Worker    )
472*663afb9bSAndroid Build Coastguard Workerelse()
473*663afb9bSAndroid Build Coastguard Worker    list(APPEND SYMBOLS_TO_CHECK
474*663afb9bSAndroid Build Coastguard Worker        getifaddrs
475*663afb9bSAndroid Build Coastguard Worker        select
476*663afb9bSAndroid Build Coastguard Worker        epoll_create
477*663afb9bSAndroid Build Coastguard Worker        epoll_create1
478*663afb9bSAndroid Build Coastguard Worker        epoll_ctl
479*663afb9bSAndroid Build Coastguard Worker        eventfd
480*663afb9bSAndroid Build Coastguard Worker        poll
481*663afb9bSAndroid Build Coastguard Worker        port_create
482*663afb9bSAndroid Build Coastguard Worker        kqueue
483*663afb9bSAndroid Build Coastguard Worker        fcntl
484*663afb9bSAndroid Build Coastguard Worker        mmap
485*663afb9bSAndroid Build Coastguard Worker        pipe
486*663afb9bSAndroid Build Coastguard Worker        pipe2
487*663afb9bSAndroid Build Coastguard Worker        sendfile
488*663afb9bSAndroid Build Coastguard Worker        sigaction
489*663afb9bSAndroid Build Coastguard Worker        strsignal
490*663afb9bSAndroid Build Coastguard Worker        sysctl
491*663afb9bSAndroid Build Coastguard Worker        accept4
492*663afb9bSAndroid Build Coastguard Worker        arc4random
493*663afb9bSAndroid Build Coastguard Worker        arc4random_buf
494*663afb9bSAndroid Build Coastguard Worker        arc4random_addrandom
495*663afb9bSAndroid Build Coastguard Worker        getrandom
496*663afb9bSAndroid Build Coastguard Worker        getegid
497*663afb9bSAndroid Build Coastguard Worker        geteuid
498*663afb9bSAndroid Build Coastguard Worker        issetugid
499*663afb9bSAndroid Build Coastguard Worker        usleep
500*663afb9bSAndroid Build Coastguard Worker        timerfd_create
501*663afb9bSAndroid Build Coastguard Worker        setenv
502*663afb9bSAndroid Build Coastguard Worker        unsetenv
503*663afb9bSAndroid Build Coastguard Worker        setrlimit
504*663afb9bSAndroid Build Coastguard Worker        gethostbyname_r
505*663afb9bSAndroid Build Coastguard Worker    )
506*663afb9bSAndroid Build Coastguard Worker    if (APPLE)
507*663afb9bSAndroid Build Coastguard Worker        list(APPEND SYMBOLS_TO_CHECK mach_absolute_time)
508*663afb9bSAndroid Build Coastguard Worker    endif()
509*663afb9bSAndroid Build Coastguard Workerendif()
510*663afb9bSAndroid Build Coastguard Worker
511*663afb9bSAndroid Build Coastguard Worker# Add stdio.h for vasprintf
512*663afb9bSAndroid Build Coastguard Workerset(EVENT_INCLUDES ${EVENT_INCLUDES} stdio.h)
513*663afb9bSAndroid Build Coastguard WorkerCHECK_SYMBOLS_EXIST("${SYMBOLS_TO_CHECK}" "${EVENT_INCLUDES}" "EVENT")
514*663afb9bSAndroid Build Coastguard Workerunset(SYMBOLS_TO_CHECK)
515*663afb9bSAndroid Build Coastguard Workerset(EVENT__HAVE_EPOLL ${EVENT__HAVE_EPOLL_CREATE})
516*663afb9bSAndroid Build Coastguard Worker
517*663afb9bSAndroid Build Coastguard Worker# Get the gethostbyname_r prototype.
518*663afb9bSAndroid Build Coastguard Workerif(EVENT__HAVE_GETHOSTBYNAME_R)
519*663afb9bSAndroid Build Coastguard Worker    CHECK_PROTOTYPE_DEFINITION(gethostbyname_r
520*663afb9bSAndroid Build Coastguard Worker        "int gethostbyname_r(const char *name, struct hostent *hp, struct hostent_data *hdata)"
521*663afb9bSAndroid Build Coastguard Worker        "0"
522*663afb9bSAndroid Build Coastguard Worker        "netdb.h"
523*663afb9bSAndroid Build Coastguard Worker        EVENT__HAVE_GETHOSTBYNAME_R_3_ARG)
524*663afb9bSAndroid Build Coastguard Worker
525*663afb9bSAndroid Build Coastguard Worker    CHECK_PROTOTYPE_DEFINITION(gethostbyname_r
526*663afb9bSAndroid Build Coastguard Worker        "struct hostent *gethostbyname_r(const char *name, struct hostent *hp, char *buf, size_t buflen, int *herr)"
527*663afb9bSAndroid Build Coastguard Worker        "NULL"
528*663afb9bSAndroid Build Coastguard Worker        "netdb.h"
529*663afb9bSAndroid Build Coastguard Worker        EVENT__HAVE_GETHOSTBYNAME_R_5_ARG)
530*663afb9bSAndroid Build Coastguard Worker
531*663afb9bSAndroid Build Coastguard Worker    CHECK_PROTOTYPE_DEFINITION(gethostbyname_r
532*663afb9bSAndroid Build Coastguard Worker        "int gethostbyname_r(const char *name, struct hostent *hp, char *buf, size_t buflen, struct hostent **result, int *herr)"
533*663afb9bSAndroid Build Coastguard Worker        "0"
534*663afb9bSAndroid Build Coastguard Worker        "netdb.h"
535*663afb9bSAndroid Build Coastguard Worker        EVENT__HAVE_GETHOSTBYNAME_R_6_ARG)
536*663afb9bSAndroid Build Coastguard Workerendif()
537*663afb9bSAndroid Build Coastguard Worker
538*663afb9bSAndroid Build Coastguard Workerif(HAVE_PORT_H AND HAVE_PORT_CREATE)
539*663afb9bSAndroid Build Coastguard Worker    set(EVENT__HAVE_EVENT_PORTS 1)
540*663afb9bSAndroid Build Coastguard Workerendif()
541*663afb9bSAndroid Build Coastguard Worker
542*663afb9bSAndroid Build Coastguard Worker# Only `CHECK_TYPE_SIZE()' will use `CMAKE_EXTRA_INCLUDE_FILES'
543*663afb9bSAndroid Build Coastguard Workerset(CMAKE_EXTRA_INCLUDE_FILES ${EVENT_INCLUDES})
544*663afb9bSAndroid Build Coastguard Worker
545*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("struct sockaddr_un" EVENT__HAVE_STRUCT_SOCKADDR_UN)
546*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("uint8_t" EVENT__HAVE_UINT8_T)
547*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("uint16_t" EVENT__HAVE_UINT16_T)
548*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("uint32_t" EVENT__HAVE_UINT32_T)
549*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("uint64_t" EVENT__HAVE_UINT64_T)
550*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("short" EVENT__SIZEOF_SHORT BUILTIN_TYPES_ONLY)
551*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("int" EVENT__SIZEOF_INT BUILTIN_TYPES_ONLY)
552*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("unsigned" EVENT__SIZEOF_UNSIGNED BUILTIN_TYPES_ONLY)
553*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("unsigned int" EVENT__SIZEOF_UNSIGNED_INT BUILTIN_TYPES_ONLY)
554*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("long" EVENT__SIZEOF_LONG BUILTIN_TYPES_ONLY)
555*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("long long" EVENT__SIZEOF_LONG_LONG BUILTIN_TYPES_ONLY)
556*663afb9bSAndroid Build Coastguard Worker
557*663afb9bSAndroid Build Coastguard Workerif(WIN32)
558*663afb9bSAndroid Build Coastguard Worker    # These aren't available until Windows Vista.
559*663afb9bSAndroid Build Coastguard Worker    # But you can still link them. They just won't be found when running the exe.
560*663afb9bSAndroid Build Coastguard Worker    set(EVENT__HAVE_INET_NTOP 0)
561*663afb9bSAndroid Build Coastguard Worker    set(EVENT__HAVE_INET_PTON 0)
562*663afb9bSAndroid Build Coastguard Workerendif()
563*663afb9bSAndroid Build Coastguard Worker
564*663afb9bSAndroid Build Coastguard Worker# Check for different inline keyword versions.
565*663afb9bSAndroid Build Coastguard Workercheck_function_keywords("inline" "__inline" "__inline__")
566*663afb9bSAndroid Build Coastguard Worker
567*663afb9bSAndroid Build Coastguard Workerif (HAVE_INLINE)
568*663afb9bSAndroid Build Coastguard Worker    set(EVENT__inline inline)
569*663afb9bSAndroid Build Coastguard Workerelseif (HAVE___INLINE)
570*663afb9bSAndroid Build Coastguard Worker    set(EVENT__inline __inline)
571*663afb9bSAndroid Build Coastguard Workerelseif(HAVE___INLINE__)
572*663afb9bSAndroid Build Coastguard Worker    set(EVENT__inline __inline__)
573*663afb9bSAndroid Build Coastguard Workerelse()
574*663afb9bSAndroid Build Coastguard Worker    set(EVENT__inline)
575*663afb9bSAndroid Build Coastguard Workerendif()
576*663afb9bSAndroid Build Coastguard Worker
577*663afb9bSAndroid Build Coastguard Worker# __func__/__FUNCTION__ is not a macros in general
578*663afb9bSAndroid Build Coastguard WorkerCHECK_SYMBOL_EXISTS("__func__"     "" EVENT__HAVE___func__)
579*663afb9bSAndroid Build Coastguard WorkerCHECK_SYMBOL_EXISTS("__FUNCTION__" "" EVENT__HAVE___FUNCTION__)
580*663afb9bSAndroid Build Coastguard Worker
581*663afb9bSAndroid Build Coastguard WorkerCHECK_SYMBOL_EXISTS(TAILQ_FOREACH sys/queue.h EVENT__HAVE_TAILQFOREACH)
582*663afb9bSAndroid Build Coastguard WorkerCHECK_CONST_EXISTS(CTL_KERN sys/sysctl.h EVENT__HAVE_DECL_CTL_KERN)
583*663afb9bSAndroid Build Coastguard WorkerCHECK_CONST_EXISTS(KERN_ARND sys/sysctl.h EVENT__HAVE_DECL_KERN_ARND)
584*663afb9bSAndroid Build Coastguard WorkerCHECK_SYMBOL_EXISTS(F_SETFD fcntl.h EVENT__HAVE_SETFD)
585*663afb9bSAndroid Build Coastguard Worker
586*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE(fd_mask EVENT__HAVE_FD_MASK)
587*663afb9bSAndroid Build Coastguard Worker
588*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE(size_t EVENT__SIZEOF_SIZE_T)
589*663afb9bSAndroid Build Coastguard Workerif(NOT EVENT__SIZEOF_SIZE_T)
590*663afb9bSAndroid Build Coastguard Worker  set(EVENT__size_t "unsigned")
591*663afb9bSAndroid Build Coastguard Worker  set(EVENT__SIZEOF_SIZE_T ${EVENT__SIZEOF_UNSIGNED})
592*663afb9bSAndroid Build Coastguard Workerelse()
593*663afb9bSAndroid Build Coastguard Worker    set(EVENT__size_t size_t)
594*663afb9bSAndroid Build Coastguard Workerendif()
595*663afb9bSAndroid Build Coastguard Worker
596*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("off_t" EVENT__SIZEOF_OFF_T LANGUAGE C)
597*663afb9bSAndroid Build Coastguard Worker
598*663afb9bSAndroid Build Coastguard Worker
599*663afb9bSAndroid Build Coastguard Worker# XXX we should functionalize these size and type sets. --elley
600*663afb9bSAndroid Build Coastguard Worker
601*663afb9bSAndroid Build Coastguard Worker# Winssck.
602*663afb9bSAndroid Build Coastguard Workerif (_MSC_VER)
603*663afb9bSAndroid Build Coastguard Worker    list(APPEND CMAKE_EXTRA_INCLUDE_FILES BaseTsd.h)
604*663afb9bSAndroid Build Coastguard Workerendif()
605*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("ssize_t" EVENT__SIZEOF_SSIZE_T_LOWER LANGUAGE C)
606*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("SSIZE_T" EVENT__SIZEOF_SSIZE_T_UPPER LANGUAGE C)
607*663afb9bSAndroid Build Coastguard Worker
608*663afb9bSAndroid Build Coastguard Workerif (EVENT__SIZEOF_SSIZE_T_LOWER)
609*663afb9bSAndroid Build Coastguard Worker    set(EVENT__ssize_t "ssize_t")
610*663afb9bSAndroid Build Coastguard Worker    set(EVENT__SIZEOF_SSIZE_T ${EVENT__SIZEOF_SSIZE_T_LOWER})
611*663afb9bSAndroid Build Coastguard Workerelseif (EVENT__SIZEOF_SSIZE_T_UPPER)
612*663afb9bSAndroid Build Coastguard Worker    set(EVENT__ssize_t "SSIZE_T")
613*663afb9bSAndroid Build Coastguard Worker    set(EVENT__SIZEOF_SSIZE_T ${EVENT__SIZEOF_SSIZE_T_UPPER})
614*663afb9bSAndroid Build Coastguard Workerelse()
615*663afb9bSAndroid Build Coastguard Worker    set(EVENT__ssize_t "int")
616*663afb9bSAndroid Build Coastguard Worker    set(EVENT__SIZEOF_SSIZE_T ${EVENT__SIZEOF_INT})
617*663afb9bSAndroid Build Coastguard Workerendif()
618*663afb9bSAndroid Build Coastguard Worker
619*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE(socklen_t EVENT__SIZEOF_SOCKLEN_T)
620*663afb9bSAndroid Build Coastguard Workerif(NOT EVENT__SIZEOF_SOCKLEN_T)
621*663afb9bSAndroid Build Coastguard Worker  set(EVENT__socklen_t "unsigned int")
622*663afb9bSAndroid Build Coastguard Worker  set(EVENT__SIZEOF_SOCKLEN_T ${EVENT__SIZEOF_UNSIGNED_INT})
623*663afb9bSAndroid Build Coastguard Workerelse()
624*663afb9bSAndroid Build Coastguard Worker    set(EVENT__socklen_t "socklen_t")
625*663afb9bSAndroid Build Coastguard Workerendif()
626*663afb9bSAndroid Build Coastguard Worker
627*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE(pid_t EVENT__SIZEOF_PID_T)
628*663afb9bSAndroid Build Coastguard Workerif(NOT EVENT__SIZEOF_PID_T)
629*663afb9bSAndroid Build Coastguard Worker  set(EVENT__SIZEOF_PID_T ${EVENT__SIZEOF_INT})
630*663afb9bSAndroid Build Coastguard Workerelse()
631*663afb9bSAndroid Build Coastguard Worker	set(EVENT__SIZEOF_PID_T EVENT__SIZEOF_PID_T)
632*663afb9bSAndroid Build Coastguard Workerendif()
633*663afb9bSAndroid Build Coastguard Worker
634*663afb9bSAndroid Build Coastguard Workerif (NOT EVENT__DISABLE_THREAD_SUPPORT)
635*663afb9bSAndroid Build Coastguard Worker    if (NOT WIN32)
636*663afb9bSAndroid Build Coastguard Worker        list(APPEND CMAKE_EXTRA_INCLUDE_FILES pthread.h)
637*663afb9bSAndroid Build Coastguard Worker    endif()
638*663afb9bSAndroid Build Coastguard Worker    CHECK_TYPE_SIZE(pthread_t EVENT__SIZEOF_PTHREAD_T)
639*663afb9bSAndroid Build Coastguard Workerendif()
640*663afb9bSAndroid Build Coastguard Worker
641*663afb9bSAndroid Build Coastguard Workerif(EVENT__HAVE_CLOCK_GETTIME)
642*663afb9bSAndroid Build Coastguard Worker  set(EVENT__DNS_USE_CPU_CLOCK_FOR_ID 1)
643*663afb9bSAndroid Build Coastguard Workerendif()
644*663afb9bSAndroid Build Coastguard Worker
645*663afb9bSAndroid Build Coastguard Worker# we're just getting lazy now.
646*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("uintptr_t" EVENT__HAVE_UINTPTR_T)
647*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("void *" EVENT__SIZEOF_VOID_P)
648*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("time_t" EVENT__SIZEOF_TIME_T)
649*663afb9bSAndroid Build Coastguard Worker
650*663afb9bSAndroid Build Coastguard Worker# Tests file offset bits.
651*663afb9bSAndroid Build Coastguard Worker# TODO: Add AIX test for if -D_LARGE_FILES is needed.
652*663afb9bSAndroid Build Coastguard Worker
653*663afb9bSAndroid Build Coastguard Worker# XXX: Why is this here? we don't even use it. Well, we don't even use it
654*663afb9bSAndroid Build Coastguard Worker#      on top of that, why is it set in the config.h?! IT_MAKES_NO_SENSE
655*663afb9bSAndroid Build Coastguard Worker#      I'm commenting it out for now.
656*663afb9bSAndroid Build Coastguard Worker#      - ellzey
657*663afb9bSAndroid Build Coastguard Worker
658*663afb9bSAndroid Build Coastguard Worker#CHECK_FILE_OFFSET_BITS()
659*663afb9bSAndroid Build Coastguard Worker
660*663afb9bSAndroid Build Coastguard Worker# Verify kqueue works with pipes.
661*663afb9bSAndroid Build Coastguard Workerif (EVENT__HAVE_KQUEUE)
662*663afb9bSAndroid Build Coastguard Worker    if ((CMAKE_CROSSCOMPILING OR APPLE) AND NOT EVENT__FORCE_KQUEUE_CHECK)
663*663afb9bSAndroid Build Coastguard Worker        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)")
664*663afb9bSAndroid Build Coastguard Worker        set(EVENT__HAVE_WORKING_KQUEUE 1)
665*663afb9bSAndroid Build Coastguard Worker    else()
666*663afb9bSAndroid Build Coastguard Worker        message(STATUS "Checking if kqueue works with pipes...")
667*663afb9bSAndroid Build Coastguard Worker        include(CheckWorkingKqueue)
668*663afb9bSAndroid Build Coastguard Worker    endif()
669*663afb9bSAndroid Build Coastguard Workerendif()
670*663afb9bSAndroid Build Coastguard Worker
671*663afb9bSAndroid Build Coastguard Workerif(EVENT__HAVE_NETDB_H)
672*663afb9bSAndroid Build Coastguard Worker    list(APPEND CMAKE_EXTRA_INCLUDE_FILES netdb.h)
673*663afb9bSAndroid Build Coastguard Worker    CHECK_TYPE_SIZE("struct addrinfo" EVENT__HAVE_STRUCT_ADDRINFO)
674*663afb9bSAndroid Build Coastguard Workerelseif(WIN32)
675*663afb9bSAndroid Build Coastguard Worker    list(APPEND CMAKE_EXTRA_INCLUDE_FILES ws2tcpip.h)
676*663afb9bSAndroid Build Coastguard Worker    CHECK_TYPE_SIZE("struct addrinfo" EVENT__HAVE_STRUCT_ADDRINFO)
677*663afb9bSAndroid Build Coastguard Workerendif()
678*663afb9bSAndroid Build Coastguard Worker
679*663afb9bSAndroid Build Coastguard Worker# Check for sockaddr structure sizes.
680*663afb9bSAndroid Build Coastguard Workerset(SOCKADDR_HEADERS)
681*663afb9bSAndroid Build Coastguard Workerif (WIN32)
682*663afb9bSAndroid Build Coastguard Worker    set(CMAKE_REQUIRED_DEFINITIONS "-DWIN32_LEAN_AND_MEAN")
683*663afb9bSAndroid Build Coastguard Worker    if (_MSC_VER LESS 1300)
684*663afb9bSAndroid Build Coastguard Worker        set(SOCKADDR_HEADERS winsock.h)
685*663afb9bSAndroid Build Coastguard Worker    else()
686*663afb9bSAndroid Build Coastguard Worker        set(SOCKADDR_HEADERS winsock2.h ws2tcpip.h)
687*663afb9bSAndroid Build Coastguard Worker    endif()
688*663afb9bSAndroid Build Coastguard Workerelse()
689*663afb9bSAndroid Build Coastguard Worker    if (EVENT__HAVE_NETINET_IN_H)
690*663afb9bSAndroid Build Coastguard Worker        set(SOCKADDR_HEADERS ${SOCKADDR_HEADERS} netinet/in.h)
691*663afb9bSAndroid Build Coastguard Worker    endif()
692*663afb9bSAndroid Build Coastguard Worker
693*663afb9bSAndroid Build Coastguard Worker    if (EVENT__HAVE_NETINET_IN6_H)
694*663afb9bSAndroid Build Coastguard Worker        set(SOCKADDR_HEADERS ${SOCKADDR_HEADERS} netinet/in6.h)
695*663afb9bSAndroid Build Coastguard Worker    endif()
696*663afb9bSAndroid Build Coastguard Worker
697*663afb9bSAndroid Build Coastguard Worker    if (EVENT__HAVE_SYS_SOCKET_H)
698*663afb9bSAndroid Build Coastguard Worker        set(SOCKADDR_HEADERS ${SOCKADDR_HEADERS} sys/socket.h)
699*663afb9bSAndroid Build Coastguard Worker    endif()
700*663afb9bSAndroid Build Coastguard Worker
701*663afb9bSAndroid Build Coastguard Worker    if (EVENT__HAVE_NETDB_H)
702*663afb9bSAndroid Build Coastguard Worker        set(SOCKADDR_HEADERS ${SOCKADDR_HEADERS} netdb.h)
703*663afb9bSAndroid Build Coastguard Worker    endif()
704*663afb9bSAndroid Build Coastguard Workerendif()
705*663afb9bSAndroid Build Coastguard Worker
706*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("struct in6_addr" EVENT__HAVE_STRUCT_IN6_ADDR)
707*663afb9bSAndroid Build Coastguard Workerif(EVENT__HAVE_STRUCT_IN6_ADDR)
708*663afb9bSAndroid Build Coastguard Worker    CHECK_STRUCT_HAS_MEMBER("struct in6_addr"
709*663afb9bSAndroid Build Coastguard Worker            s6_addr16 "${SOCKADDR_HEADERS}"
710*663afb9bSAndroid Build Coastguard Worker            EVENT__HAVE_STRUCT_IN6_ADDR_S6_ADDR16)
711*663afb9bSAndroid Build Coastguard Worker
712*663afb9bSAndroid Build Coastguard Worker    CHECK_STRUCT_HAS_MEMBER("struct in6_addr"
713*663afb9bSAndroid Build Coastguard Worker            s6_addr32 "${SOCKADDR_HEADERS}"
714*663afb9bSAndroid Build Coastguard Worker            EVENT__HAVE_STRUCT_IN6_ADDR_S6_ADDR32)
715*663afb9bSAndroid Build Coastguard Workerendif()
716*663afb9bSAndroid Build Coastguard Worker
717*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("sa_family_t" EVENT__HAVE_SA_FAMILY_T)
718*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("struct sockaddr_in6" EVENT__HAVE_STRUCT_SOCKADDR_IN6)
719*663afb9bSAndroid Build Coastguard Worker
720*663afb9bSAndroid Build Coastguard Workerif(EVENT__HAVE_STRUCT_SOCKADDR_IN6)
721*663afb9bSAndroid Build Coastguard Worker    CHECK_STRUCT_HAS_MEMBER("struct sockaddr_in6"
722*663afb9bSAndroid Build Coastguard Worker            sin6_len "${SOCKADDR_HEADERS}"
723*663afb9bSAndroid Build Coastguard Worker            EVENT__HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN)
724*663afb9bSAndroid Build Coastguard Worker
725*663afb9bSAndroid Build Coastguard Worker    CHECK_STRUCT_HAS_MEMBER("struct sockaddr_in6"
726*663afb9bSAndroid Build Coastguard Worker            sin_len "${SOCKADDR_HEADERS}"
727*663afb9bSAndroid Build Coastguard Worker            EVENT__HAVE_STRUCT_SOCKADDR_IN_SIN_LEN)
728*663afb9bSAndroid Build Coastguard Workerendif()
729*663afb9bSAndroid Build Coastguard Worker
730*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("struct sockaddr_storage" EVENT__HAVE_STRUCT_SOCKADDR_STORAGE)
731*663afb9bSAndroid Build Coastguard Workerif(EVENT__HAVE_STRUCT_SOCKADDR_STORAGE)
732*663afb9bSAndroid Build Coastguard Worker    CHECK_STRUCT_HAS_MEMBER("struct sockaddr_storage"
733*663afb9bSAndroid Build Coastguard Worker            ss_family "${SOCKADDR_HEADERS}"
734*663afb9bSAndroid Build Coastguard Worker            EVENT__HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY)
735*663afb9bSAndroid Build Coastguard Worker
736*663afb9bSAndroid Build Coastguard Worker    CHECK_STRUCT_HAS_MEMBER("struct sockaddr_storage"
737*663afb9bSAndroid Build Coastguard Worker            __ss_family "${SOCKADDR_HEADERS}" EVENT__HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY)
738*663afb9bSAndroid Build Coastguard Workerendif()
739*663afb9bSAndroid Build Coastguard Worker
740*663afb9bSAndroid Build Coastguard WorkerCHECK_TYPE_SIZE("struct linger" EVENT__HAVE_STRUCT_LINGER)
741*663afb9bSAndroid Build Coastguard Worker
742*663afb9bSAndroid Build Coastguard Worker# Group the source files.
743*663afb9bSAndroid Build Coastguard Workerset(HDR_PRIVATE
744*663afb9bSAndroid Build Coastguard Worker    bufferevent-internal.h
745*663afb9bSAndroid Build Coastguard Worker    changelist-internal.h
746*663afb9bSAndroid Build Coastguard Worker    defer-internal.h
747*663afb9bSAndroid Build Coastguard Worker    epolltable-internal.h
748*663afb9bSAndroid Build Coastguard Worker    evbuffer-internal.h
749*663afb9bSAndroid Build Coastguard Worker    event-internal.h
750*663afb9bSAndroid Build Coastguard Worker    evmap-internal.h
751*663afb9bSAndroid Build Coastguard Worker    evrpc-internal.h
752*663afb9bSAndroid Build Coastguard Worker    evsignal-internal.h
753*663afb9bSAndroid Build Coastguard Worker    evthread-internal.h
754*663afb9bSAndroid Build Coastguard Worker    ht-internal.h
755*663afb9bSAndroid Build Coastguard Worker    http-internal.h
756*663afb9bSAndroid Build Coastguard Worker    iocp-internal.h
757*663afb9bSAndroid Build Coastguard Worker    ipv6-internal.h
758*663afb9bSAndroid Build Coastguard Worker    log-internal.h
759*663afb9bSAndroid Build Coastguard Worker    minheap-internal.h
760*663afb9bSAndroid Build Coastguard Worker    mm-internal.h
761*663afb9bSAndroid Build Coastguard Worker    ratelim-internal.h
762*663afb9bSAndroid Build Coastguard Worker    strlcpy-internal.h
763*663afb9bSAndroid Build Coastguard Worker    util-internal.h
764*663afb9bSAndroid Build Coastguard Worker    evconfig-private.h
765*663afb9bSAndroid Build Coastguard Worker    compat/sys/queue.h)
766*663afb9bSAndroid Build Coastguard Worker
767*663afb9bSAndroid Build Coastguard Workerset(HDR_COMPAT
768*663afb9bSAndroid Build Coastguard Worker    include/evdns.h
769*663afb9bSAndroid Build Coastguard Worker    include/evrpc.h
770*663afb9bSAndroid Build Coastguard Worker    include/event.h
771*663afb9bSAndroid Build Coastguard Worker    include/evhttp.h
772*663afb9bSAndroid Build Coastguard Worker    include/evutil.h)
773*663afb9bSAndroid Build Coastguard Worker
774*663afb9bSAndroid Build Coastguard Workerset(HDR_PUBLIC
775*663afb9bSAndroid Build Coastguard Worker    include/event2/buffer.h
776*663afb9bSAndroid Build Coastguard Worker    include/event2/bufferevent.h
777*663afb9bSAndroid Build Coastguard Worker    include/event2/bufferevent_compat.h
778*663afb9bSAndroid Build Coastguard Worker    include/event2/bufferevent_struct.h
779*663afb9bSAndroid Build Coastguard Worker    include/event2/buffer_compat.h
780*663afb9bSAndroid Build Coastguard Worker    include/event2/dns.h
781*663afb9bSAndroid Build Coastguard Worker    include/event2/dns_compat.h
782*663afb9bSAndroid Build Coastguard Worker    include/event2/dns_struct.h
783*663afb9bSAndroid Build Coastguard Worker    include/event2/event.h
784*663afb9bSAndroid Build Coastguard Worker    include/event2/event_compat.h
785*663afb9bSAndroid Build Coastguard Worker    include/event2/event_struct.h
786*663afb9bSAndroid Build Coastguard Worker    include/event2/http.h
787*663afb9bSAndroid Build Coastguard Worker    include/event2/http_compat.h
788*663afb9bSAndroid Build Coastguard Worker    include/event2/http_struct.h
789*663afb9bSAndroid Build Coastguard Worker    include/event2/keyvalq_struct.h
790*663afb9bSAndroid Build Coastguard Worker    include/event2/listener.h
791*663afb9bSAndroid Build Coastguard Worker    include/event2/rpc.h
792*663afb9bSAndroid Build Coastguard Worker    include/event2/rpc_compat.h
793*663afb9bSAndroid Build Coastguard Worker    include/event2/rpc_struct.h
794*663afb9bSAndroid Build Coastguard Worker    include/event2/tag.h
795*663afb9bSAndroid Build Coastguard Worker    include/event2/tag_compat.h
796*663afb9bSAndroid Build Coastguard Worker    include/event2/thread.h
797*663afb9bSAndroid Build Coastguard Worker    include/event2/util.h
798*663afb9bSAndroid Build Coastguard Worker    include/event2/visibility.h
799*663afb9bSAndroid Build Coastguard Worker    ${PROJECT_BINARY_DIR}/include/event2/event-config.h)
800*663afb9bSAndroid Build Coastguard Worker
801*663afb9bSAndroid Build Coastguard Workerset(SRC_CORE
802*663afb9bSAndroid Build Coastguard Worker    buffer.c
803*663afb9bSAndroid Build Coastguard Worker    bufferevent.c
804*663afb9bSAndroid Build Coastguard Worker    bufferevent_filter.c
805*663afb9bSAndroid Build Coastguard Worker    bufferevent_pair.c
806*663afb9bSAndroid Build Coastguard Worker    bufferevent_ratelim.c
807*663afb9bSAndroid Build Coastguard Worker    bufferevent_sock.c
808*663afb9bSAndroid Build Coastguard Worker    event.c
809*663afb9bSAndroid Build Coastguard Worker    evmap.c
810*663afb9bSAndroid Build Coastguard Worker    evthread.c
811*663afb9bSAndroid Build Coastguard Worker    evutil.c
812*663afb9bSAndroid Build Coastguard Worker    evutil_rand.c
813*663afb9bSAndroid Build Coastguard Worker    evutil_time.c
814*663afb9bSAndroid Build Coastguard Worker    listener.c
815*663afb9bSAndroid Build Coastguard Worker    log.c
816*663afb9bSAndroid Build Coastguard Worker    signal.c
817*663afb9bSAndroid Build Coastguard Worker    strlcpy.c)
818*663afb9bSAndroid Build Coastguard Worker
819*663afb9bSAndroid Build Coastguard Workerif(EVENT__HAVE_SELECT)
820*663afb9bSAndroid Build Coastguard Worker    list(APPEND SRC_CORE select.c)
821*663afb9bSAndroid Build Coastguard Workerendif()
822*663afb9bSAndroid Build Coastguard Worker
823*663afb9bSAndroid Build Coastguard Workerif(EVENT__HAVE_POLL)
824*663afb9bSAndroid Build Coastguard Worker    list(APPEND SRC_CORE poll.c)
825*663afb9bSAndroid Build Coastguard Workerendif()
826*663afb9bSAndroid Build Coastguard Worker
827*663afb9bSAndroid Build Coastguard Workerif(EVENT__HAVE_KQUEUE)
828*663afb9bSAndroid Build Coastguard Worker    list(APPEND SRC_CORE kqueue.c)
829*663afb9bSAndroid Build Coastguard Workerendif()
830*663afb9bSAndroid Build Coastguard Worker
831*663afb9bSAndroid Build Coastguard Workerif(EVENT__HAVE_DEVPOLL)
832*663afb9bSAndroid Build Coastguard Worker    list(APPEND SRC_CORE devpoll.c)
833*663afb9bSAndroid Build Coastguard Workerendif()
834*663afb9bSAndroid Build Coastguard Worker
835*663afb9bSAndroid Build Coastguard Workerif(EVENT__HAVE_EPOLL)
836*663afb9bSAndroid Build Coastguard Worker    list(APPEND SRC_CORE epoll.c)
837*663afb9bSAndroid Build Coastguard Workerendif()
838*663afb9bSAndroid Build Coastguard Worker
839*663afb9bSAndroid Build Coastguard Workerif(EVENT__HAVE_EVENT_PORTS)
840*663afb9bSAndroid Build Coastguard Worker    list(APPEND SRC_CORE evport.c)
841*663afb9bSAndroid Build Coastguard Workerendif()
842*663afb9bSAndroid Build Coastguard Worker
843*663afb9bSAndroid Build Coastguard Workerif (NOT EVENT__DISABLE_OPENSSL)
844*663afb9bSAndroid Build Coastguard Worker    find_package(OpenSSL REQUIRED)
845*663afb9bSAndroid Build Coastguard Worker
846*663afb9bSAndroid Build Coastguard Worker    set(EVENT__HAVE_OPENSSL 1)
847*663afb9bSAndroid Build Coastguard Worker
848*663afb9bSAndroid Build Coastguard Worker    message(STATUS "OpenSSL include: ${OPENSSL_INCLUDE_DIR}")
849*663afb9bSAndroid Build Coastguard Worker    message(STATUS "OpenSSL lib: ${OPENSSL_LIBRARIES}")
850*663afb9bSAndroid Build Coastguard Worker
851*663afb9bSAndroid Build Coastguard Worker    include_directories(${OPENSSL_INCLUDE_DIR})
852*663afb9bSAndroid Build Coastguard Worker
853*663afb9bSAndroid Build Coastguard Worker    list(APPEND SRC_OPENSSL bufferevent_openssl.c)
854*663afb9bSAndroid Build Coastguard Worker    list(APPEND HDR_PUBLIC include/event2/bufferevent_ssl.h)
855*663afb9bSAndroid Build Coastguard Worker    list(APPEND LIB_APPS ${OPENSSL_LIBRARIES})
856*663afb9bSAndroid Build Coastguard Workerendif()
857*663afb9bSAndroid Build Coastguard Worker
858*663afb9bSAndroid Build Coastguard Workerif (NOT EVENT__DISABLE_THREAD_SUPPORT)
859*663afb9bSAndroid Build Coastguard Worker    if (WIN32)
860*663afb9bSAndroid Build Coastguard Worker        list(APPEND SRC_CORE evthread_win32.c)
861*663afb9bSAndroid Build Coastguard Worker    else()
862*663afb9bSAndroid Build Coastguard Worker        find_package(Threads REQUIRED)
863*663afb9bSAndroid Build Coastguard Worker        if (NOT CMAKE_USE_PTHREADS_INIT)
864*663afb9bSAndroid Build Coastguard Worker            message(FATAL_ERROR
865*663afb9bSAndroid Build Coastguard Worker                    "Failed to find Pthreads, set EVENT__DISABLE_THREAD_SUPPORT to disable")
866*663afb9bSAndroid Build Coastguard Worker        endif()
867*663afb9bSAndroid Build Coastguard Worker
868*663afb9bSAndroid Build Coastguard Worker        set(EVENT__HAVE_PTHREADS 1)
869*663afb9bSAndroid Build Coastguard Worker        list(APPEND LIB_APPS ${CMAKE_THREAD_LIBS_INIT})
870*663afb9bSAndroid Build Coastguard Worker    endif()
871*663afb9bSAndroid Build Coastguard Workerendif()
872*663afb9bSAndroid Build Coastguard Worker
873*663afb9bSAndroid Build Coastguard Workerif (NOT EVENT__DISABLE_TESTS)
874*663afb9bSAndroid Build Coastguard Worker    # Zlib is only used for testing.
875*663afb9bSAndroid Build Coastguard Worker    find_package(ZLIB)
876*663afb9bSAndroid Build Coastguard Worker
877*663afb9bSAndroid Build Coastguard Worker    if (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR)
878*663afb9bSAndroid Build Coastguard Worker        include_directories(${ZLIB_INCLUDE_DIRS})
879*663afb9bSAndroid Build Coastguard Worker
880*663afb9bSAndroid Build Coastguard Worker        set(EVENT__HAVE_LIBZ 1)
881*663afb9bSAndroid Build Coastguard Worker        list(APPEND LIB_APPS ${ZLIB_LIBRARIES})
882*663afb9bSAndroid Build Coastguard Worker    endif()
883*663afb9bSAndroid Build Coastguard Workerendif()
884*663afb9bSAndroid Build Coastguard Worker
885*663afb9bSAndroid Build Coastguard Workerset(SRC_EXTRA
886*663afb9bSAndroid Build Coastguard Worker    event_tagging.c
887*663afb9bSAndroid Build Coastguard Worker    http.c
888*663afb9bSAndroid Build Coastguard Worker    evdns.c
889*663afb9bSAndroid Build Coastguard Worker    evrpc.c)
890*663afb9bSAndroid Build Coastguard Worker
891*663afb9bSAndroid Build Coastguard Workeradd_definitions(-DHAVE_CONFIG_H)
892*663afb9bSAndroid Build Coastguard Worker
893*663afb9bSAndroid Build Coastguard Worker# We use BEFORE here so we don't accidentally look in system directories
894*663afb9bSAndroid Build Coastguard Worker# first for some previous versions of the headers that are installed.
895*663afb9bSAndroid Build Coastguard Workerinclude_directories(BEFORE ${PROJECT_SOURCE_DIR}
896*663afb9bSAndroid Build Coastguard Worker    ${PROJECT_SOURCE_DIR}/compat
897*663afb9bSAndroid Build Coastguard Worker    ${PROJECT_SOURCE_DIR}/include)
898*663afb9bSAndroid Build Coastguard Worker
899*663afb9bSAndroid Build Coastguard Workerif(WIN32)
900*663afb9bSAndroid Build Coastguard Worker    list(APPEND SRC_CORE
901*663afb9bSAndroid Build Coastguard Worker        buffer_iocp.c
902*663afb9bSAndroid Build Coastguard Worker        bufferevent_async.c
903*663afb9bSAndroid Build Coastguard Worker        event_iocp.c
904*663afb9bSAndroid Build Coastguard Worker        win32select.c)
905*663afb9bSAndroid Build Coastguard Worker
906*663afb9bSAndroid Build Coastguard Worker    list(APPEND HDR_PRIVATE WIN32-Code/getopt.h)
907*663afb9bSAndroid Build Coastguard Worker
908*663afb9bSAndroid Build Coastguard Worker    set(EVENT__DNS_USE_FTIME_FOR_ID 1)
909*663afb9bSAndroid Build Coastguard Worker    set(LIB_PLATFORM ws2_32 shell32 advapi32)
910*663afb9bSAndroid Build Coastguard Worker    add_definitions(
911*663afb9bSAndroid Build Coastguard Worker            -D_CRT_SECURE_NO_WARNINGS
912*663afb9bSAndroid Build Coastguard Worker            -D_CRT_NONSTDC_NO_DEPRECATE)
913*663afb9bSAndroid Build Coastguard Worker
914*663afb9bSAndroid Build Coastguard Worker    include_directories(./WIN32-Code)
915*663afb9bSAndroid Build Coastguard Workerendif()
916*663afb9bSAndroid Build Coastguard Worker
917*663afb9bSAndroid Build Coastguard Workerif (SOLARIS)
918*663afb9bSAndroid Build Coastguard Worker    list(APPEND LIB_PLATFORM socket nsl)
919*663afb9bSAndroid Build Coastguard Workerendif()
920*663afb9bSAndroid Build Coastguard Worker
921*663afb9bSAndroid Build Coastguard Workersource_group("Headers Private"  FILES ${HDR_PRIVATE})
922*663afb9bSAndroid Build Coastguard Workersource_group("Header Compat"    FILES ${HDR_COMPAT})
923*663afb9bSAndroid Build Coastguard Workersource_group("Headers Public"   FILES ${HDR_PUBLIC})
924*663afb9bSAndroid Build Coastguard Workersource_group("Source Core"      FILES ${SRC_CORE})
925*663afb9bSAndroid Build Coastguard Workersource_group("Source Extra"     FILES ${SRC_EXTRA})
926*663afb9bSAndroid Build Coastguard Worker
927*663afb9bSAndroid Build Coastguard Worker# Generate the configure headers.
928*663afb9bSAndroid Build Coastguard Worker# (Place them in the build dir so we don't polute the source tree with generated files).
929*663afb9bSAndroid Build Coastguard Workerinclude_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}/include)
930*663afb9bSAndroid Build Coastguard Worker
931*663afb9bSAndroid Build Coastguard Workerif (${GNUC})
932*663afb9bSAndroid Build Coastguard Worker    set(EVENT_SHARED_FLAGS -fvisibility=hidden)
933*663afb9bSAndroid Build Coastguard Workerelseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "SunPro")
934*663afb9bSAndroid Build Coastguard Worker    set(EVENT_SHARED_FLAGS -xldscope=hidden)
935*663afb9bSAndroid Build Coastguard Workerendif()
936*663afb9bSAndroid Build Coastguard Worker
937*663afb9bSAndroid Build Coastguard Workerconfigure_file(
938*663afb9bSAndroid Build Coastguard Worker    ${CMAKE_CURRENT_SOURCE_DIR}/event-config.h.cmake
939*663afb9bSAndroid Build Coastguard Worker    ${CMAKE_CURRENT_BINARY_DIR}/include/event2/event-config.h
940*663afb9bSAndroid Build Coastguard Worker        NEWLINE_STYLE UNIX)
941*663afb9bSAndroid Build Coastguard Worker
942*663afb9bSAndroid Build Coastguard Workerconfigure_file(
943*663afb9bSAndroid Build Coastguard Worker    ${CMAKE_CURRENT_SOURCE_DIR}/evconfig-private.h.cmake
944*663afb9bSAndroid Build Coastguard Worker    ${CMAKE_CURRENT_BINARY_DIR}/include/evconfig-private.h)
945*663afb9bSAndroid Build Coastguard Worker
946*663afb9bSAndroid Build Coastguard Worker#
947*663afb9bSAndroid Build Coastguard Worker# Create the libraries.
948*663afb9bSAndroid Build Coastguard Worker#
949*663afb9bSAndroid Build Coastguard Workerinclude(AddEventLibrary)
950*663afb9bSAndroid Build Coastguard Workeradd_event_library(event_core SOURCES ${SRC_CORE})
951*663afb9bSAndroid Build Coastguard Workeradd_event_library(event_extra
952*663afb9bSAndroid Build Coastguard Worker    INNER_LIBRARIES event_core
953*663afb9bSAndroid Build Coastguard Worker    SOURCES ${SRC_EXTRA})
954*663afb9bSAndroid Build Coastguard Worker
955*663afb9bSAndroid Build Coastguard Workerif (NOT EVENT__DISABLE_OPENSSL)
956*663afb9bSAndroid Build Coastguard Worker    add_event_library(event_openssl
957*663afb9bSAndroid Build Coastguard Worker        INNER_LIBRARIES event_core
958*663afb9bSAndroid Build Coastguard Worker        OUTER_INCLUDES ${OPENSSL_INCLUDE_DIR}
959*663afb9bSAndroid Build Coastguard Worker        LIBRARIES ${OPENSSL_LIBRARIES}
960*663afb9bSAndroid Build Coastguard Worker        SOURCES ${SRC_OPENSSL})
961*663afb9bSAndroid Build Coastguard Workerendif()
962*663afb9bSAndroid Build Coastguard Worker
963*663afb9bSAndroid Build Coastguard Workerif (EVENT__HAVE_PTHREADS)
964*663afb9bSAndroid Build Coastguard Worker    set(SRC_PTHREADS evthread_pthread.c)
965*663afb9bSAndroid Build Coastguard Worker    add_event_library(event_pthreads
966*663afb9bSAndroid Build Coastguard Worker        INNER_LIBRARIES event_core
967*663afb9bSAndroid Build Coastguard Worker        SOURCES ${SRC_PTHREADS})
968*663afb9bSAndroid Build Coastguard Workerendif()
969*663afb9bSAndroid Build Coastguard Worker
970*663afb9bSAndroid Build Coastguard Worker# library exists for historical reasons; it contains the contents of
971*663afb9bSAndroid Build Coastguard Worker# both libevent_core and libevent_extra. You shouldn’t use it; it may
972*663afb9bSAndroid Build Coastguard Worker# go away in a future version of Libevent.
973*663afb9bSAndroid Build Coastguard Workeradd_event_library(event SOURCES ${SRC_CORE} ${SRC_EXTRA})
974*663afb9bSAndroid Build Coastguard Worker
975*663afb9bSAndroid Build Coastguard Workerset(WIN32_GETOPT)
976*663afb9bSAndroid Build Coastguard Workerif (WIN32)
977*663afb9bSAndroid Build Coastguard Worker    set(_TMPLIBS)
978*663afb9bSAndroid Build Coastguard Worker    if (${EVENT_LIBRARY_STATIC})
979*663afb9bSAndroid Build Coastguard Worker        list(APPEND _TMPLIBS event_core_static event_static)
980*663afb9bSAndroid Build Coastguard Worker    endif()
981*663afb9bSAndroid Build Coastguard Worker    if (${EVENT_LIBRARY_SHARED})
982*663afb9bSAndroid Build Coastguard Worker        list(APPEND _TMPLIBS event_core_shared event_shared)
983*663afb9bSAndroid Build Coastguard Worker    endif()
984*663afb9bSAndroid Build Coastguard Worker    foreach(lib ${_TMPLIBS})
985*663afb9bSAndroid Build Coastguard Worker        target_link_libraries(${lib} iphlpapi)
986*663afb9bSAndroid Build Coastguard Worker    endforeach()
987*663afb9bSAndroid Build Coastguard Worker    unset(_TMPLIBS)
988*663afb9bSAndroid Build Coastguard Worker
989*663afb9bSAndroid Build Coastguard Worker    list(APPEND WIN32_GETOPT
990*663afb9bSAndroid Build Coastguard Worker         WIN32-Code/getopt.c
991*663afb9bSAndroid Build Coastguard Worker         WIN32-Code/getopt_long.c)
992*663afb9bSAndroid Build Coastguard Workerendif()
993*663afb9bSAndroid Build Coastguard Worker
994*663afb9bSAndroid Build Coastguard Worker#
995*663afb9bSAndroid Build Coastguard Worker# Samples.
996*663afb9bSAndroid Build Coastguard Worker#
997*663afb9bSAndroid Build Coastguard Workermacro(add_sample_prog ssl name)
998*663afb9bSAndroid Build Coastguard Worker    add_executable(${name} ${ARGN})
999*663afb9bSAndroid Build Coastguard Worker
1000*663afb9bSAndroid Build Coastguard Worker    target_link_libraries(${name}
1001*663afb9bSAndroid Build Coastguard Worker                          event_extra
1002*663afb9bSAndroid Build Coastguard Worker                          event_core
1003*663afb9bSAndroid Build Coastguard Worker                          ${LIB_APPS}
1004*663afb9bSAndroid Build Coastguard Worker                          ${LIB_PLATFORM})
1005*663afb9bSAndroid Build Coastguard Worker
1006*663afb9bSAndroid Build Coastguard Worker    if (${ssl})
1007*663afb9bSAndroid Build Coastguard Worker        target_link_libraries(${name} event_openssl)
1008*663afb9bSAndroid Build Coastguard Worker        if(WIN32)
1009*663afb9bSAndroid Build Coastguard Worker            target_link_libraries(${name} crypt32)
1010*663afb9bSAndroid Build Coastguard Worker        endif()
1011*663afb9bSAndroid Build Coastguard Worker    endif()
1012*663afb9bSAndroid Build Coastguard Workerendmacro()
1013*663afb9bSAndroid Build Coastguard Workerif (NOT EVENT__DISABLE_SAMPLES)
1014*663afb9bSAndroid Build Coastguard Worker    set(SAMPLES
1015*663afb9bSAndroid Build Coastguard Worker        event-read-fifo
1016*663afb9bSAndroid Build Coastguard Worker        hello-world
1017*663afb9bSAndroid Build Coastguard Worker        signal-test
1018*663afb9bSAndroid Build Coastguard Worker        http-connect
1019*663afb9bSAndroid Build Coastguard Worker        time-test)
1020*663afb9bSAndroid Build Coastguard Worker
1021*663afb9bSAndroid Build Coastguard Worker    foreach(SAMPLE ${SAMPLES})
1022*663afb9bSAndroid Build Coastguard Worker        add_sample_prog(OFF ${SAMPLE} sample/${SAMPLE}.c)
1023*663afb9bSAndroid Build Coastguard Worker    endforeach()
1024*663afb9bSAndroid Build Coastguard Worker
1025*663afb9bSAndroid Build Coastguard Worker    if (NOT EVENT__DISABLE_OPENSSL)
1026*663afb9bSAndroid Build Coastguard Worker        add_sample_prog(ON https-client
1027*663afb9bSAndroid Build Coastguard Worker                        sample/https-client.c
1028*663afb9bSAndroid Build Coastguard Worker                        sample/openssl_hostname_validation.c
1029*663afb9bSAndroid Build Coastguard Worker                        sample/hostcheck.c)
1030*663afb9bSAndroid Build Coastguard Worker        add_sample_prog(ON le-proxy
1031*663afb9bSAndroid Build Coastguard Worker                        sample/le-proxy.c)
1032*663afb9bSAndroid Build Coastguard Worker    endif()
1033*663afb9bSAndroid Build Coastguard Worker
1034*663afb9bSAndroid Build Coastguard Worker    set(SAMPLES_WOPT
1035*663afb9bSAndroid Build Coastguard Worker        dns-example
1036*663afb9bSAndroid Build Coastguard Worker        http-server
1037*663afb9bSAndroid Build Coastguard Worker    )
1038*663afb9bSAndroid Build Coastguard Worker    foreach (SAMPLE ${SAMPLES_WOPT})
1039*663afb9bSAndroid Build Coastguard Worker        add_sample_prog(OFF ${SAMPLE} sample/${SAMPLE}.c ${WIN32_GETOPT})
1040*663afb9bSAndroid Build Coastguard Worker    endforeach()
1041*663afb9bSAndroid Build Coastguard Workerendif()
1042*663afb9bSAndroid Build Coastguard Worker
1043*663afb9bSAndroid Build Coastguard Worker#
1044*663afb9bSAndroid Build Coastguard Worker# Benchmarks
1045*663afb9bSAndroid Build Coastguard Worker#
1046*663afb9bSAndroid Build Coastguard Workermacro(add_bench_prog prog)
1047*663afb9bSAndroid Build Coastguard Worker    add_executable(${prog} ${ARGN})
1048*663afb9bSAndroid Build Coastguard Worker    target_link_libraries(${prog}
1049*663afb9bSAndroid Build Coastguard Worker                          event_extra
1050*663afb9bSAndroid Build Coastguard Worker                          event_core
1051*663afb9bSAndroid Build Coastguard Worker                          ${LIB_APPS}
1052*663afb9bSAndroid Build Coastguard Worker                          ${LIB_PLATFORM})
1053*663afb9bSAndroid Build Coastguard Workerendmacro()
1054*663afb9bSAndroid Build Coastguard Workerif (NOT EVENT__DISABLE_BENCHMARK)
1055*663afb9bSAndroid Build Coastguard Worker    foreach (BENCHMARK bench_http bench_httpclient)
1056*663afb9bSAndroid Build Coastguard Worker        add_bench_prog(${BENCHMARK} test/${BENCHMARK}.c)
1057*663afb9bSAndroid Build Coastguard Worker    endforeach()
1058*663afb9bSAndroid Build Coastguard Worker
1059*663afb9bSAndroid Build Coastguard Worker    add_bench_prog(bench test/bench.c ${WIN32_GETOPT})
1060*663afb9bSAndroid Build Coastguard Worker    add_bench_prog(bench_cascade test/bench_cascade.c ${WIN32_GETOPT})
1061*663afb9bSAndroid Build Coastguard Workerendif()
1062*663afb9bSAndroid Build Coastguard Worker
1063*663afb9bSAndroid Build Coastguard Worker#
1064*663afb9bSAndroid Build Coastguard Worker# Tests
1065*663afb9bSAndroid Build Coastguard Worker#
1066*663afb9bSAndroid Build Coastguard Workermacro(add_test_prog prog)
1067*663afb9bSAndroid Build Coastguard Worker    add_executable(${prog} test/${prog}.c)
1068*663afb9bSAndroid Build Coastguard Worker    target_link_libraries(${prog}
1069*663afb9bSAndroid Build Coastguard Worker                          ${LIB_APPS}
1070*663afb9bSAndroid Build Coastguard Worker                          ${LIB_PLATFORM}
1071*663afb9bSAndroid Build Coastguard Worker                          event_core
1072*663afb9bSAndroid Build Coastguard Worker                          event_extra
1073*663afb9bSAndroid Build Coastguard Worker                          ${ARGN})
1074*663afb9bSAndroid Build Coastguard Workerendmacro()
1075*663afb9bSAndroid Build Coastguard Workerif (NOT EVENT__DISABLE_TESTS)
1076*663afb9bSAndroid Build Coastguard Worker    #
1077*663afb9bSAndroid Build Coastguard Worker    # Generate Regress tests.
1078*663afb9bSAndroid Build Coastguard Worker    #
1079*663afb9bSAndroid Build Coastguard Worker    if (NOT EVENT__DISABLE_REGRESS)
1080*663afb9bSAndroid Build Coastguard Worker        # (We require python to generate the regress tests)
1081*663afb9bSAndroid Build Coastguard Worker        find_package(PythonInterp 3)
1082*663afb9bSAndroid Build Coastguard Worker
1083*663afb9bSAndroid Build Coastguard Worker        if (PYTHONINTERP_FOUND)
1084*663afb9bSAndroid Build Coastguard Worker            set(__FOUND_USABLE_PYTHON 1)
1085*663afb9bSAndroid Build Coastguard Worker        else()
1086*663afb9bSAndroid Build Coastguard Worker            find_package(PythonInterp 2)
1087*663afb9bSAndroid Build Coastguard Worker            if (PYTHONINTERP_FOUND)
1088*663afb9bSAndroid Build Coastguard Worker                set(__FOUND_USABLE_PYTHON 1)
1089*663afb9bSAndroid Build Coastguard Worker            else()
1090*663afb9bSAndroid Build Coastguard Worker                message(ERROR "No suitable Python version found, bailing...")
1091*663afb9bSAndroid Build Coastguard Worker            endif()
1092*663afb9bSAndroid Build Coastguard Worker        endif()
1093*663afb9bSAndroid Build Coastguard Worker
1094*663afb9bSAndroid Build Coastguard Worker        if (__FOUND_USABLE_PYTHON)
1095*663afb9bSAndroid Build Coastguard Worker            message(STATUS "Generating regress tests...")
1096*663afb9bSAndroid Build Coastguard Worker
1097*663afb9bSAndroid Build Coastguard Worker            add_definitions(-DTINYTEST_LOCAL)
1098*663afb9bSAndroid Build Coastguard Worker
1099*663afb9bSAndroid Build Coastguard Worker            add_custom_command(
1100*663afb9bSAndroid Build Coastguard Worker                OUTPUT
1101*663afb9bSAndroid Build Coastguard Worker                    ${CMAKE_CURRENT_SOURCE_DIR}/test/regress.gen.c
1102*663afb9bSAndroid Build Coastguard Worker                    ${CMAKE_CURRENT_SOURCE_DIR}/test/regress.gen.h
1103*663afb9bSAndroid Build Coastguard Worker                DEPENDS
1104*663afb9bSAndroid Build Coastguard Worker                    event_rpcgen.py
1105*663afb9bSAndroid Build Coastguard Worker                    test/regress.rpc
1106*663afb9bSAndroid Build Coastguard Worker                COMMAND ${PYTHON_EXECUTABLE} ../event_rpcgen.py --quiet regress.rpc
1107*663afb9bSAndroid Build Coastguard Worker                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test)
1108*663afb9bSAndroid Build Coastguard Worker
1109*663afb9bSAndroid Build Coastguard Worker            list(APPEND SRC_REGRESS
1110*663afb9bSAndroid Build Coastguard Worker                 test/regress.c
1111*663afb9bSAndroid Build Coastguard Worker                 test/regress.gen.c
1112*663afb9bSAndroid Build Coastguard Worker                 test/regress.gen.h
1113*663afb9bSAndroid Build Coastguard Worker                 test/regress_buffer.c
1114*663afb9bSAndroid Build Coastguard Worker                 test/regress_bufferevent.c
1115*663afb9bSAndroid Build Coastguard Worker                 test/regress_dns.c
1116*663afb9bSAndroid Build Coastguard Worker                 test/regress_et.c
1117*663afb9bSAndroid Build Coastguard Worker                 test/regress_finalize.c
1118*663afb9bSAndroid Build Coastguard Worker                 test/regress_http.c
1119*663afb9bSAndroid Build Coastguard Worker                 test/regress_listener.c
1120*663afb9bSAndroid Build Coastguard Worker                 test/regress_main.c
1121*663afb9bSAndroid Build Coastguard Worker                 test/regress_minheap.c
1122*663afb9bSAndroid Build Coastguard Worker                 test/regress_rpc.c
1123*663afb9bSAndroid Build Coastguard Worker                 test/regress_testutils.c
1124*663afb9bSAndroid Build Coastguard Worker                 test/regress_testutils.h
1125*663afb9bSAndroid Build Coastguard Worker                 test/regress_util.c
1126*663afb9bSAndroid Build Coastguard Worker                 test/tinytest.c)
1127*663afb9bSAndroid Build Coastguard Worker
1128*663afb9bSAndroid Build Coastguard Worker            if (WIN32)
1129*663afb9bSAndroid Build Coastguard Worker                list(APPEND SRC_REGRESS test/regress_iocp.c)
1130*663afb9bSAndroid Build Coastguard Worker                if (NOT EVENT__DISABLE_THREAD_SUPPORT)
1131*663afb9bSAndroid Build Coastguard Worker                    list(APPEND SRC_REGRESS test/regress_thread.c)
1132*663afb9bSAndroid Build Coastguard Worker                endif()
1133*663afb9bSAndroid Build Coastguard Worker            elseif (EVENT__HAVE_PTHREADS)
1134*663afb9bSAndroid Build Coastguard Worker                list(APPEND SRC_REGRESS test/regress_thread.c)
1135*663afb9bSAndroid Build Coastguard Worker            endif()
1136*663afb9bSAndroid Build Coastguard Worker
1137*663afb9bSAndroid Build Coastguard Worker            if (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR)
1138*663afb9bSAndroid Build Coastguard Worker                list(APPEND SRC_REGRESS test/regress_zlib.c)
1139*663afb9bSAndroid Build Coastguard Worker            endif()
1140*663afb9bSAndroid Build Coastguard Worker
1141*663afb9bSAndroid Build Coastguard Worker            if (NOT EVENT__DISABLE_OPENSSL)
1142*663afb9bSAndroid Build Coastguard Worker                list(APPEND SRC_REGRESS test/regress_ssl.c)
1143*663afb9bSAndroid Build Coastguard Worker            endif()
1144*663afb9bSAndroid Build Coastguard Worker
1145*663afb9bSAndroid Build Coastguard Worker            add_executable(regress ${SRC_REGRESS})
1146*663afb9bSAndroid Build Coastguard Worker
1147*663afb9bSAndroid Build Coastguard Worker            target_link_libraries(regress
1148*663afb9bSAndroid Build Coastguard Worker                                  ${LIB_APPS}
1149*663afb9bSAndroid Build Coastguard Worker                                  ${LIB_PLATFORM}
1150*663afb9bSAndroid Build Coastguard Worker                                  event_core
1151*663afb9bSAndroid Build Coastguard Worker                                  event_extra)
1152*663afb9bSAndroid Build Coastguard Worker            if (NOT EVENT__DISABLE_OPENSSL)
1153*663afb9bSAndroid Build Coastguard Worker                target_link_libraries(regress event_openssl)
1154*663afb9bSAndroid Build Coastguard Worker            endif()
1155*663afb9bSAndroid Build Coastguard Worker            if (CMAKE_USE_PTHREADS_INIT)
1156*663afb9bSAndroid Build Coastguard Worker                target_link_libraries(regress event_pthreads)
1157*663afb9bSAndroid Build Coastguard Worker            endif()
1158*663afb9bSAndroid Build Coastguard Worker        else()
1159*663afb9bSAndroid Build Coastguard Worker            message(WARNING "No suitable Python interpreter found, cannot generate regress tests!")
1160*663afb9bSAndroid Build Coastguard Worker        endif()
1161*663afb9bSAndroid Build Coastguard Worker    endif()
1162*663afb9bSAndroid Build Coastguard Worker
1163*663afb9bSAndroid Build Coastguard Worker    #
1164*663afb9bSAndroid Build Coastguard Worker    # Test programs.
1165*663afb9bSAndroid Build Coastguard Worker    #
1166*663afb9bSAndroid Build Coastguard Worker    # all of these, including the cmakelists.txt should be moved
1167*663afb9bSAndroid Build Coastguard Worker    # into the dirctory 'tests' first.
1168*663afb9bSAndroid Build Coastguard Worker    #
1169*663afb9bSAndroid Build Coastguard Worker    # doing this, we can remove all the DISABLE_TESTS stuff, and simply
1170*663afb9bSAndroid Build Coastguard Worker    # do something like:
1171*663afb9bSAndroid Build Coastguard Worker    #
1172*663afb9bSAndroid Build Coastguard Worker    # add_custom_targets(tests)
1173*663afb9bSAndroid Build Coastguard Worker    # add_executable(... EXCLUDE_FROM_ALL ...c)
1174*663afb9bSAndroid Build Coastguard Worker    # add_dependencis(tests testa testb testc)
1175*663afb9bSAndroid Build Coastguard Worker    # add_test(....)
1176*663afb9bSAndroid Build Coastguard Worker    #
1177*663afb9bSAndroid Build Coastguard Worker    # then you can just run 'make tests' instead of them all
1178*663afb9bSAndroid Build Coastguard Worker    # auto-compile|running
1179*663afb9bSAndroid Build Coastguard Worker    # - ellzey
1180*663afb9bSAndroid Build Coastguard Worker    set(TESTPROGS test-changelist
1181*663afb9bSAndroid Build Coastguard Worker                  test-eof
1182*663afb9bSAndroid Build Coastguard Worker                  test-closed
1183*663afb9bSAndroid Build Coastguard Worker                  test-fdleak
1184*663afb9bSAndroid Build Coastguard Worker                  test-init
1185*663afb9bSAndroid Build Coastguard Worker                  test-time
1186*663afb9bSAndroid Build Coastguard Worker                  test-weof)
1187*663afb9bSAndroid Build Coastguard Worker
1188*663afb9bSAndroid Build Coastguard Worker    foreach (TESTPROG ${TESTPROGS} test-dumpevents)
1189*663afb9bSAndroid Build Coastguard Worker        add_test_prog(${TESTPROG})
1190*663afb9bSAndroid Build Coastguard Worker    endforeach()
1191*663afb9bSAndroid Build Coastguard Worker    if (UNIX)
1192*663afb9bSAndroid Build Coastguard Worker        add_test_prog(test-ratelim m)
1193*663afb9bSAndroid Build Coastguard Worker    else()
1194*663afb9bSAndroid Build Coastguard Worker        add_test_prog(test-ratelim)
1195*663afb9bSAndroid Build Coastguard Worker    endif()
1196*663afb9bSAndroid Build Coastguard Worker
1197*663afb9bSAndroid Build Coastguard Worker    set(ALL_TESTPROGS
1198*663afb9bSAndroid Build Coastguard Worker        ${TESTPROGS}
1199*663afb9bSAndroid Build Coastguard Worker        test-dumpevents
1200*663afb9bSAndroid Build Coastguard Worker        test-ratelim
1201*663afb9bSAndroid Build Coastguard Worker    )
1202*663afb9bSAndroid Build Coastguard Worker
1203*663afb9bSAndroid Build Coastguard Worker    #
1204*663afb9bSAndroid Build Coastguard Worker    # We run all tests with the different backends turned on one at a time.
1205*663afb9bSAndroid Build Coastguard Worker    #
1206*663afb9bSAndroid Build Coastguard Worker
1207*663afb9bSAndroid Build Coastguard Worker    # Add event backends based on system introspection result.
1208*663afb9bSAndroid Build Coastguard Worker    set(BACKENDS "")
1209*663afb9bSAndroid Build Coastguard Worker
1210*663afb9bSAndroid Build Coastguard Worker    if (EVENT__HAVE_EPOLL)
1211*663afb9bSAndroid Build Coastguard Worker        list(APPEND BACKENDS EPOLL)
1212*663afb9bSAndroid Build Coastguard Worker    endif()
1213*663afb9bSAndroid Build Coastguard Worker
1214*663afb9bSAndroid Build Coastguard Worker    if (EVENT__HAVE_SELECT)
1215*663afb9bSAndroid Build Coastguard Worker        list(APPEND BACKENDS SELECT)
1216*663afb9bSAndroid Build Coastguard Worker    endif()
1217*663afb9bSAndroid Build Coastguard Worker
1218*663afb9bSAndroid Build Coastguard Worker    if (EVENT__HAVE_POLL)
1219*663afb9bSAndroid Build Coastguard Worker        list(APPEND BACKENDS POLL)
1220*663afb9bSAndroid Build Coastguard Worker    endif()
1221*663afb9bSAndroid Build Coastguard Worker
1222*663afb9bSAndroid Build Coastguard Worker    if (EVENT__HAVE_KQUEUE)
1223*663afb9bSAndroid Build Coastguard Worker        list(APPEND BACKENDS KQUEUE)
1224*663afb9bSAndroid Build Coastguard Worker    endif()
1225*663afb9bSAndroid Build Coastguard Worker
1226*663afb9bSAndroid Build Coastguard Worker    if (EVENT__HAVE_EVENT_PORTS)
1227*663afb9bSAndroid Build Coastguard Worker        list(APPEND BACKENDS EVPORT)
1228*663afb9bSAndroid Build Coastguard Worker    endif()
1229*663afb9bSAndroid Build Coastguard Worker
1230*663afb9bSAndroid Build Coastguard Worker    if (EVENT__HAVE_DEVPOLL)
1231*663afb9bSAndroid Build Coastguard Worker        list(APPEND BACKENDS DEVPOLL)
1232*663afb9bSAndroid Build Coastguard Worker    endif()
1233*663afb9bSAndroid Build Coastguard Worker
1234*663afb9bSAndroid Build Coastguard Worker    if (WIN32)
1235*663afb9bSAndroid Build Coastguard Worker        list(APPEND BACKENDS WIN32)
1236*663afb9bSAndroid Build Coastguard Worker    endif()
1237*663afb9bSAndroid Build Coastguard Worker
1238*663afb9bSAndroid Build Coastguard Worker
1239*663afb9bSAndroid Build Coastguard Worker    # Default environment variables turns off all event systems,
1240*663afb9bSAndroid Build Coastguard Worker    # then we enable each one, one at a time when creating the tests.
1241*663afb9bSAndroid Build Coastguard Worker    set(DEFAULT_TEST_ENV_VARS)
1242*663afb9bSAndroid Build Coastguard Worker    foreach(BACKEND ${BACKENDS})
1243*663afb9bSAndroid Build Coastguard Worker        set(BACKEND_ENV_VAR "EVENT_NO${BACKEND}=1")
1244*663afb9bSAndroid Build Coastguard Worker        list(APPEND DEFAULT_TEST_ENV_VARS "${BACKEND_ENV_VAR}")
1245*663afb9bSAndroid Build Coastguard Worker    endforeach()
1246*663afb9bSAndroid Build Coastguard Worker
1247*663afb9bSAndroid Build Coastguard Worker    # Macro that creates the ctest test for a backend.
1248*663afb9bSAndroid Build Coastguard Worker    macro(add_backend_test BACKEND_TEST_NAME ENV_VARS)
1249*663afb9bSAndroid Build Coastguard Worker        set(TEST_NAMES "")
1250*663afb9bSAndroid Build Coastguard Worker
1251*663afb9bSAndroid Build Coastguard Worker        foreach (TESTPROG ${TESTPROGS})
1252*663afb9bSAndroid Build Coastguard Worker            set(TEST_NAME ${TESTPROG}__${BACKEND_TEST_NAME})
1253*663afb9bSAndroid Build Coastguard Worker
1254*663afb9bSAndroid Build Coastguard Worker            add_test(${TEST_NAME}
1255*663afb9bSAndroid Build Coastguard Worker                     ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TESTPROG})
1256*663afb9bSAndroid Build Coastguard Worker
1257*663afb9bSAndroid Build Coastguard Worker            list(APPEND TEST_NAMES ${TEST_NAME})
1258*663afb9bSAndroid Build Coastguard Worker
1259*663afb9bSAndroid Build Coastguard Worker            set_tests_properties(${TEST_NAME}
1260*663afb9bSAndroid Build Coastguard Worker                                 PROPERTIES ENVIRONMENT "${ENV_VARS}")
1261*663afb9bSAndroid Build Coastguard Worker        endforeach()
1262*663afb9bSAndroid Build Coastguard Worker
1263*663afb9bSAndroid Build Coastguard Worker        # Dump events test.
1264*663afb9bSAndroid Build Coastguard Worker        if (__FOUND_USABLE_PYTHON)
1265*663afb9bSAndroid Build Coastguard Worker            set(TEST_NAME test-dumpevents__${BACKEND_TEST_NAME})
1266*663afb9bSAndroid Build Coastguard Worker
1267*663afb9bSAndroid Build Coastguard Worker            add_test(${TEST_NAME}
1268*663afb9bSAndroid Build Coastguard Worker                     ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test-dumpevents |
1269*663afb9bSAndroid Build Coastguard Worker                     ${PYTHON_EXECUTABLE}
1270*663afb9bSAndroid Build Coastguard Worker                     ${CMAKE_CURRENT_SOURCE_DIR}/test/check-dumpevents.py)
1271*663afb9bSAndroid Build Coastguard Worker
1272*663afb9bSAndroid Build Coastguard Worker            set_tests_properties(${TEST_NAME}
1273*663afb9bSAndroid Build Coastguard Worker                                 PROPERTIES ENVIRONMENT "${ENV_VARS}")
1274*663afb9bSAndroid Build Coastguard Worker        else()
1275*663afb9bSAndroid Build Coastguard Worker            message(WARNING "test-dumpevents will be run without output check since python was not found!")
1276*663afb9bSAndroid Build Coastguard Worker            set(TEST_NAME test-dumpevents__${BACKEND_TEST_NAME}_no_check)
1277*663afb9bSAndroid Build Coastguard Worker
1278*663afb9bSAndroid Build Coastguard Worker            add_test(${TEST_NAME}
1279*663afb9bSAndroid Build Coastguard Worker                     ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test-dumpevents)
1280*663afb9bSAndroid Build Coastguard Worker
1281*663afb9bSAndroid Build Coastguard Worker            set_tests_properties(${TEST_NAME}
1282*663afb9bSAndroid Build Coastguard Worker                                 PROPERTIES ENVIRONMENT "${ENV_VARS}")
1283*663afb9bSAndroid Build Coastguard Worker        endif()
1284*663afb9bSAndroid Build Coastguard Worker
1285*663afb9bSAndroid Build Coastguard Worker        # Regress tests.
1286*663afb9bSAndroid Build Coastguard Worker        if (NOT EVENT__DISABLE_REGRESS AND __FOUND_USABLE_PYTHON)
1287*663afb9bSAndroid Build Coastguard Worker            set(TEST_NAME regress__${BACKEND_TEST_NAME})
1288*663afb9bSAndroid Build Coastguard Worker
1289*663afb9bSAndroid Build Coastguard Worker            add_test(${TEST_NAME}
1290*663afb9bSAndroid Build Coastguard Worker                     ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/regress --quiet)
1291*663afb9bSAndroid Build Coastguard Worker
1292*663afb9bSAndroid Build Coastguard Worker            set_tests_properties(${TEST_NAME}
1293*663afb9bSAndroid Build Coastguard Worker                                 PROPERTIES ENVIRONMENT "${ENV_VARS}")
1294*663afb9bSAndroid Build Coastguard Worker
1295*663afb9bSAndroid Build Coastguard Worker            add_test(${TEST_NAME}_debug
1296*663afb9bSAndroid Build Coastguard Worker                     ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/regress --quiet)
1297*663afb9bSAndroid Build Coastguard Worker
1298*663afb9bSAndroid Build Coastguard Worker            set_tests_properties(${TEST_NAME}_debug
1299*663afb9bSAndroid Build Coastguard Worker                                 PROPERTIES ENVIRONMENT "${ENV_VARS};EVENT_DEBUG_MODE=1")
1300*663afb9bSAndroid Build Coastguard Worker        endif()
1301*663afb9bSAndroid Build Coastguard Worker    endmacro()
1302*663afb9bSAndroid Build Coastguard Worker
1303*663afb9bSAndroid Build Coastguard Worker    # Add the tests for each backend.
1304*663afb9bSAndroid Build Coastguard Worker    foreach(BACKEND ${BACKENDS})
1305*663afb9bSAndroid Build Coastguard Worker        # Enable this backend only.
1306*663afb9bSAndroid Build Coastguard Worker        set(BACKEND_ENV_VARS ${DEFAULT_TEST_ENV_VARS})
1307*663afb9bSAndroid Build Coastguard Worker        list(REMOVE_ITEM BACKEND_ENV_VARS EVENT_NO${BACKEND}=1)
1308*663afb9bSAndroid Build Coastguard Worker
1309*663afb9bSAndroid Build Coastguard Worker        # Epoll has some extra settings.
1310*663afb9bSAndroid Build Coastguard Worker        if (${BACKEND} STREQUAL "EPOLL")
1311*663afb9bSAndroid Build Coastguard Worker            add_backend_test(timerfd_${BACKEND}
1312*663afb9bSAndroid Build Coastguard Worker                            "${BACKEND_ENV_VARS};EVENT_PRECISE_TIMER=1")
1313*663afb9bSAndroid Build Coastguard Worker
1314*663afb9bSAndroid Build Coastguard Worker            add_backend_test(changelist_${BACKEND}
1315*663afb9bSAndroid Build Coastguard Worker                            "${BACKEND_ENV_VARS};EVENT_EPOLL_USE_CHANGELIST=yes")
1316*663afb9bSAndroid Build Coastguard Worker
1317*663afb9bSAndroid Build Coastguard Worker            add_backend_test(timerfd_changelist_${BACKEND}
1318*663afb9bSAndroid Build Coastguard Worker                            "${BACKEND_ENV_VARS};EVENT_EPOLL_USE_CHANGELIST=yes;EVENT_PRECISE_TIMER=1")
1319*663afb9bSAndroid Build Coastguard Worker        else()
1320*663afb9bSAndroid Build Coastguard Worker            add_backend_test(${BACKEND} "${BACKEND_ENV_VARS}")
1321*663afb9bSAndroid Build Coastguard Worker        endif()
1322*663afb9bSAndroid Build Coastguard Worker    endforeach()
1323*663afb9bSAndroid Build Coastguard Worker
1324*663afb9bSAndroid Build Coastguard Worker    #
1325*663afb9bSAndroid Build Coastguard Worker    # Rate limiter tests.
1326*663afb9bSAndroid Build Coastguard Worker    #
1327*663afb9bSAndroid Build Coastguard Worker
1328*663afb9bSAndroid Build Coastguard Worker    # Group limits, no connection limit.
1329*663afb9bSAndroid Build Coastguard Worker    set(RL_BIN ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test-ratelim)
1330*663afb9bSAndroid Build Coastguard Worker
1331*663afb9bSAndroid Build Coastguard Worker    add_test(test-ratelim__group_lim
1332*663afb9bSAndroid Build Coastguard Worker             ${RL_BIN}
1333*663afb9bSAndroid Build Coastguard Worker             -g 30000
1334*663afb9bSAndroid Build Coastguard Worker             -n 30
1335*663afb9bSAndroid Build Coastguard Worker             -t 100
1336*663afb9bSAndroid Build Coastguard Worker             --check-grouplimit 1000
1337*663afb9bSAndroid Build Coastguard Worker             --check-stddev 100)
1338*663afb9bSAndroid Build Coastguard Worker
1339*663afb9bSAndroid Build Coastguard Worker    # Connection limit, no group limit.
1340*663afb9bSAndroid Build Coastguard Worker    add_test(test-ratelim__con_lim
1341*663afb9bSAndroid Build Coastguard Worker             ${RL_BIN}
1342*663afb9bSAndroid Build Coastguard Worker             -c 1000
1343*663afb9bSAndroid Build Coastguard Worker             -n 30
1344*663afb9bSAndroid Build Coastguard Worker             -t 100
1345*663afb9bSAndroid Build Coastguard Worker             --check-connlimit 50
1346*663afb9bSAndroid Build Coastguard Worker             --check-stddev 50)
1347*663afb9bSAndroid Build Coastguard Worker
1348*663afb9bSAndroid Build Coastguard Worker    # Connection limit and group limit.
1349*663afb9bSAndroid Build Coastguard Worker    add_test(test-ratelim__group_con_lim
1350*663afb9bSAndroid Build Coastguard Worker             ${RL_BIN}
1351*663afb9bSAndroid Build Coastguard Worker             -c 1000
1352*663afb9bSAndroid Build Coastguard Worker             -g 30000
1353*663afb9bSAndroid Build Coastguard Worker             -n 30
1354*663afb9bSAndroid Build Coastguard Worker             -t 100
1355*663afb9bSAndroid Build Coastguard Worker             --check-grouplimit 1000
1356*663afb9bSAndroid Build Coastguard Worker             --check-connlimit 50
1357*663afb9bSAndroid Build Coastguard Worker             --check-stddev 50)
1358*663afb9bSAndroid Build Coastguard Worker
1359*663afb9bSAndroid Build Coastguard Worker    # Connection limit and group limit with independent drain.
1360*663afb9bSAndroid Build Coastguard Worker    add_test(test-ratelim__group_con_lim_drain
1361*663afb9bSAndroid Build Coastguard Worker             ${RL_BIN}
1362*663afb9bSAndroid Build Coastguard Worker             -c 1000
1363*663afb9bSAndroid Build Coastguard Worker             -g 35000
1364*663afb9bSAndroid Build Coastguard Worker             -n 30
1365*663afb9bSAndroid Build Coastguard Worker             -t 100
1366*663afb9bSAndroid Build Coastguard Worker             -G 500
1367*663afb9bSAndroid Build Coastguard Worker             --check-grouplimit 1000
1368*663afb9bSAndroid Build Coastguard Worker             --check-connlimit 50
1369*663afb9bSAndroid Build Coastguard Worker             --check-stddev 50)
1370*663afb9bSAndroid Build Coastguard Worker
1371*663afb9bSAndroid Build Coastguard Worker    # Add a "make verify" target, same as for autoconf.
1372*663afb9bSAndroid Build Coastguard Worker    # (Important! This will unset all EVENT_NO* environment variables.
1373*663afb9bSAndroid Build Coastguard Worker    #  If they are set in the shell the tests are running using simply "ctest" or "make test" will fail)
1374*663afb9bSAndroid Build Coastguard Worker    if (WIN32)
1375*663afb9bSAndroid Build Coastguard Worker        # Windows doesn't have "unset". But you can use "set VAR=" instead.
1376*663afb9bSAndroid Build Coastguard Worker        # We need to guard against the possibility taht EVENT_NOWIN32 is set, and all test failing
1377*663afb9bSAndroid Build Coastguard Worker        # since no event backend being available.
1378*663afb9bSAndroid Build Coastguard Worker        file(TO_NATIVE_PATH ${CMAKE_CTEST_COMMAND} WINDOWS_CTEST_COMMAND)
1379*663afb9bSAndroid Build Coastguard Worker
1380*663afb9bSAndroid Build Coastguard Worker        file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/tmp/verify_tests.bat
1381*663afb9bSAndroid Build Coastguard Worker            "
1382*663afb9bSAndroid Build Coastguard Worker            set EVENT_NOWIN32=
1383*663afb9bSAndroid Build Coastguard Worker            \"${WINDOWS_CTEST_COMMAND}\"
1384*663afb9bSAndroid Build Coastguard Worker            ")
1385*663afb9bSAndroid Build Coastguard Worker
1386*663afb9bSAndroid Build Coastguard Worker        message(STATUS "${WINDOWS_CTEST_COMMAND}")
1387*663afb9bSAndroid Build Coastguard Worker
1388*663afb9bSAndroid Build Coastguard Worker        file(COPY ${CMAKE_CURRENT_BINARY_DIR}/tmp/verify_tests.bat
1389*663afb9bSAndroid Build Coastguard Worker             DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
1390*663afb9bSAndroid Build Coastguard Worker             FILE_PERMISSIONS
1391*663afb9bSAndroid Build Coastguard Worker                             OWNER_READ
1392*663afb9bSAndroid Build Coastguard Worker                             OWNER_WRITE
1393*663afb9bSAndroid Build Coastguard Worker                             OWNER_EXECUTE
1394*663afb9bSAndroid Build Coastguard Worker                             GROUP_READ
1395*663afb9bSAndroid Build Coastguard Worker                             GROUP_EXECUTE
1396*663afb9bSAndroid Build Coastguard Worker                             WORLD_READ WORLD_EXECUTE)
1397*663afb9bSAndroid Build Coastguard Worker
1398*663afb9bSAndroid Build Coastguard Worker        file(TO_NATIVE_PATH
1399*663afb9bSAndroid Build Coastguard Worker                    "${CMAKE_CURRENT_BINARY_DIR}/verify_tests.bat" VERIFY_PATH)
1400*663afb9bSAndroid Build Coastguard Worker
1401*663afb9bSAndroid Build Coastguard Worker        add_custom_target(verify COMMAND "${VERIFY_PATH}"
1402*663afb9bSAndroid Build Coastguard Worker                          DEPENDS event ${ALL_TESTPROGS})
1403*663afb9bSAndroid Build Coastguard Worker    else()
1404*663afb9bSAndroid Build Coastguard Worker        # On some platforms doing exec(unset) as CMake does won't work, so make sure
1405*663afb9bSAndroid Build Coastguard Worker        # we run the unset command in a shell instead.
1406*663afb9bSAndroid Build Coastguard Worker        # First we write the script contents.
1407*663afb9bSAndroid Build Coastguard Worker        file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/tmp/verify_tests.sh
1408*663afb9bSAndroid Build Coastguard Worker            "
1409*663afb9bSAndroid Build Coastguard Worker            #!/bin/bash
1410*663afb9bSAndroid Build Coastguard Worker            unset EVENT_NOEPOLL; unset EVENT_NOPOLL; unset EVENT_NOSELECT; unset EVENT_NOWIN32; unset EVENT_NOEVPORT; unset EVENT_NOKQUEUE; unset EVENT_NODEVPOLL
1411*663afb9bSAndroid Build Coastguard Worker            ${CMAKE_CTEST_COMMAND}
1412*663afb9bSAndroid Build Coastguard Worker            ")
1413*663afb9bSAndroid Build Coastguard Worker
1414*663afb9bSAndroid Build Coastguard Worker        # Then we copy the file (this allows us to set execute permission on it)
1415*663afb9bSAndroid Build Coastguard Worker        file(COPY ${CMAKE_CURRENT_BINARY_DIR}/tmp/verify_tests.sh
1416*663afb9bSAndroid Build Coastguard Worker             DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
1417*663afb9bSAndroid Build Coastguard Worker             FILE_PERMISSIONS
1418*663afb9bSAndroid Build Coastguard Worker                             OWNER_READ
1419*663afb9bSAndroid Build Coastguard Worker                             OWNER_WRITE
1420*663afb9bSAndroid Build Coastguard Worker                             OWNER_EXECUTE
1421*663afb9bSAndroid Build Coastguard Worker                             GROUP_READ
1422*663afb9bSAndroid Build Coastguard Worker                             GROUP_EXECUTE
1423*663afb9bSAndroid Build Coastguard Worker                             WORLD_READ
1424*663afb9bSAndroid Build Coastguard Worker                             WORLD_EXECUTE)
1425*663afb9bSAndroid Build Coastguard Worker
1426*663afb9bSAndroid Build Coastguard Worker        # Create the target that runs the script.
1427*663afb9bSAndroid Build Coastguard Worker        add_custom_target(verify
1428*663afb9bSAndroid Build Coastguard Worker                          COMMAND ${CMAKE_CURRENT_BINARY_DIR}/verify_tests.sh
1429*663afb9bSAndroid Build Coastguard Worker                          DEPENDS event ${ALL_TESTPROGS})
1430*663afb9bSAndroid Build Coastguard Worker    endif()
1431*663afb9bSAndroid Build Coastguard Worker
1432*663afb9bSAndroid Build Coastguard Worker    if (NOT EVENT__DISABLE_REGRESS AND __FOUND_USABLE_PYTHON)
1433*663afb9bSAndroid Build Coastguard Worker        add_dependencies(verify regress)
1434*663afb9bSAndroid Build Coastguard Worker    endif()
1435*663afb9bSAndroid Build Coastguard Worker
1436*663afb9bSAndroid Build Coastguard Worker    if (EVENT__COVERAGE)
1437*663afb9bSAndroid Build Coastguard Worker        include(CodeCoverage)
1438*663afb9bSAndroid Build Coastguard Worker
1439*663afb9bSAndroid Build Coastguard Worker        setup_target_for_coverage(
1440*663afb9bSAndroid Build Coastguard Worker            verify_coverage # Coverage target name "make verify_coverage"
1441*663afb9bSAndroid Build Coastguard Worker            make            # Test runner.
1442*663afb9bSAndroid Build Coastguard Worker            coverage        # Output directory.
1443*663afb9bSAndroid Build Coastguard Worker            verify)         # Arguments passed to test runner. "make verify"
1444*663afb9bSAndroid Build Coastguard Worker    endif()
1445*663afb9bSAndroid Build Coastguard Worker
1446*663afb9bSAndroid Build Coastguard Worker    enable_testing()
1447*663afb9bSAndroid Build Coastguard Worker
1448*663afb9bSAndroid Build Coastguard Worker    include(CTest)
1449*663afb9bSAndroid Build Coastguard Workerendif()
1450*663afb9bSAndroid Build Coastguard Worker
1451*663afb9bSAndroid Build Coastguard Worker#
1452*663afb9bSAndroid Build Coastguard Worker# Installation preparation.
1453*663afb9bSAndroid Build Coastguard Worker#
1454*663afb9bSAndroid Build Coastguard Worker
1455*663afb9bSAndroid Build Coastguard Workerset(EVENT_INSTALL_CMAKE_DIR
1456*663afb9bSAndroid Build Coastguard Worker    "${CMAKE_INSTALL_PREFIX}/lib/cmake/libevent")
1457*663afb9bSAndroid Build Coastguard Worker
1458*663afb9bSAndroid Build Coastguard Workerexport(PACKAGE libevent)
1459*663afb9bSAndroid Build Coastguard Worker
1460*663afb9bSAndroid Build Coastguard Workerfunction(gen_package_config forinstall)
1461*663afb9bSAndroid Build Coastguard Worker    if(${forinstall})
1462*663afb9bSAndroid Build Coastguard Worker        set(CONFIG_FOR_INSTALL_TREE 1)
1463*663afb9bSAndroid Build Coastguard Worker        set(dir "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}")
1464*663afb9bSAndroid Build Coastguard Worker    else()
1465*663afb9bSAndroid Build Coastguard Worker        set(CONFIG_FOR_INSTALL_TREE 0)
1466*663afb9bSAndroid Build Coastguard Worker        set(dir "${PROJECT_BINARY_DIR}")
1467*663afb9bSAndroid Build Coastguard Worker    endif()
1468*663afb9bSAndroid Build Coastguard Worker    configure_file(${PROJECT_SOURCE_DIR}/cmake/LibeventConfig.cmake.in
1469*663afb9bSAndroid Build Coastguard Worker                "${dir}/LibeventConfig.cmake"
1470*663afb9bSAndroid Build Coastguard Worker                @ONLY)
1471*663afb9bSAndroid Build Coastguard Workerendfunction()
1472*663afb9bSAndroid Build Coastguard Worker
1473*663afb9bSAndroid Build Coastguard Worker# Generate the config file for the build-tree.
1474*663afb9bSAndroid Build Coastguard Workerset(EVENT__INCLUDE_DIRS
1475*663afb9bSAndroid Build Coastguard Worker    "${PROJECT_SOURCE_DIR}/include"
1476*663afb9bSAndroid Build Coastguard Worker    "${PROJECT_BINARY_DIR}/include")
1477*663afb9bSAndroid Build Coastguard Worker
1478*663afb9bSAndroid Build Coastguard Workerset(LIBEVENT_INCLUDE_DIRS
1479*663afb9bSAndroid Build Coastguard Worker    ${EVENT__INCLUDE_DIRS}
1480*663afb9bSAndroid Build Coastguard Worker    CACHE PATH "Libevent include directories")
1481*663afb9bSAndroid Build Coastguard Worker
1482*663afb9bSAndroid Build Coastguard Workergen_package_config(0)
1483*663afb9bSAndroid Build Coastguard Worker
1484*663afb9bSAndroid Build Coastguard Worker# Generate the config file for the installation tree.
1485*663afb9bSAndroid Build Coastguard Workergen_package_config(1)
1486*663afb9bSAndroid Build Coastguard Worker
1487*663afb9bSAndroid Build Coastguard Worker# Generate version info for both build-tree and install-tree.
1488*663afb9bSAndroid Build Coastguard Workerconfigure_file(${PROJECT_SOURCE_DIR}/cmake/LibeventConfigVersion.cmake.in
1489*663afb9bSAndroid Build Coastguard Worker               ${PROJECT_BINARY_DIR}/LibeventConfigVersion.cmake
1490*663afb9bSAndroid Build Coastguard Worker               @ONLY)
1491*663afb9bSAndroid Build Coastguard Worker
1492*663afb9bSAndroid Build Coastguard Worker# Install compat headers
1493*663afb9bSAndroid Build Coastguard Workerinstall(FILES ${HDR_COMPAT}
1494*663afb9bSAndroid Build Coastguard Worker        DESTINATION "include"
1495*663afb9bSAndroid Build Coastguard Worker        COMPONENT dev)
1496*663afb9bSAndroid Build Coastguard Worker
1497*663afb9bSAndroid Build Coastguard Worker# Install public headers
1498*663afb9bSAndroid Build Coastguard Workerinstall(FILES ${HDR_PUBLIC}
1499*663afb9bSAndroid Build Coastguard Worker        DESTINATION "include/event2"
1500*663afb9bSAndroid Build Coastguard Worker        COMPONENT dev)
1501*663afb9bSAndroid Build Coastguard Worker
1502*663afb9bSAndroid Build Coastguard Worker# Install the configs.
1503*663afb9bSAndroid Build Coastguard Workerinstall(FILES
1504*663afb9bSAndroid Build Coastguard Worker        ${PROJECT_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/LibeventConfig.cmake
1505*663afb9bSAndroid Build Coastguard Worker        ${PROJECT_BINARY_DIR}/LibeventConfigVersion.cmake
1506*663afb9bSAndroid Build Coastguard Worker        DESTINATION "${EVENT_INSTALL_CMAKE_DIR}"
1507*663afb9bSAndroid Build Coastguard Worker        COMPONENT dev)
1508*663afb9bSAndroid Build Coastguard Worker
1509*663afb9bSAndroid Build Coastguard Worker# Install exports for the install-tree.
1510*663afb9bSAndroid Build Coastguard Workermacro(install_export type)
1511*663afb9bSAndroid Build Coastguard Worker    install(EXPORT LibeventTargets-${type}
1512*663afb9bSAndroid Build Coastguard Worker        NAMESPACE ${PROJECT_NAME}::
1513*663afb9bSAndroid Build Coastguard Worker        DESTINATION "${EVENT_INSTALL_CMAKE_DIR}"
1514*663afb9bSAndroid Build Coastguard Worker        COMPONENT dev)
1515*663afb9bSAndroid Build Coastguard Workerendmacro()
1516*663afb9bSAndroid Build Coastguard Worker
1517*663afb9bSAndroid Build Coastguard Workerif (${EVENT_LIBRARY_STATIC})
1518*663afb9bSAndroid Build Coastguard Worker    install_export(static)
1519*663afb9bSAndroid Build Coastguard Workerendif()
1520*663afb9bSAndroid Build Coastguard Workerif (${EVENT_LIBRARY_SHARED})
1521*663afb9bSAndroid Build Coastguard Worker    install_export(shared)
1522*663afb9bSAndroid Build Coastguard Workerendif()
1523*663afb9bSAndroid Build Coastguard Worker
1524*663afb9bSAndroid Build Coastguard Worker# Install the scripts.
1525*663afb9bSAndroid Build Coastguard Workerinstall(PROGRAMS
1526*663afb9bSAndroid Build Coastguard Worker       ${CMAKE_CURRENT_SOURCE_DIR}/event_rpcgen.py
1527*663afb9bSAndroid Build Coastguard Worker       DESTINATION "bin"
1528*663afb9bSAndroid Build Coastguard Worker       COMPONENT runtime)
1529*663afb9bSAndroid Build Coastguard Worker
1530*663afb9bSAndroid Build Coastguard Worker# Create documents with doxygen.
1531*663afb9bSAndroid Build Coastguard Workeroption(EVENT__DOXYGEN
1532*663afb9bSAndroid Build Coastguard Worker    "Enables doxygen documentation" OFF)
1533*663afb9bSAndroid Build Coastguard Workerif (EVENT__DOXYGEN)
1534*663afb9bSAndroid Build Coastguard Worker    include(UseDoxygen)
1535*663afb9bSAndroid Build Coastguard Worker    UseDoxygen()
1536*663afb9bSAndroid Build Coastguard Workerendif()
1537*663afb9bSAndroid Build Coastguard Worker
1538*663afb9bSAndroid Build Coastguard Worker
1539*663afb9bSAndroid Build Coastguard Workerif (NOT TARGET uninstall)
1540*663afb9bSAndroid Build Coastguard Worker	# Create the uninstall target.
1541*663afb9bSAndroid Build Coastguard Worker	# https://gitlab.kitware.com/cmake/community/wikis/FAQ#can-i-do-make-uninstall-with-cmake
1542*663afb9bSAndroid Build Coastguard Worker	configure_file(${PROJECT_SOURCE_DIR}/cmake/Uninstall.cmake.in
1543*663afb9bSAndroid Build Coastguard Worker				   ${PROJECT_BINARY_DIR}/Uninstall.cmake
1544*663afb9bSAndroid Build Coastguard Worker				   @ONLY)
1545*663afb9bSAndroid Build Coastguard Worker
1546*663afb9bSAndroid Build Coastguard Worker	add_custom_target(uninstall
1547*663afb9bSAndroid Build Coastguard Worker					  COMMAND ${CMAKE_COMMAND} -P ${PROJECT_BINARY_DIR}/Uninstall.cmake)
1548*663afb9bSAndroid Build Coastguard Workerendif()
1549*663afb9bSAndroid Build Coastguard Worker
1550*663afb9bSAndroid Build Coastguard Workermessage(STATUS "")
1551*663afb9bSAndroid Build Coastguard Workermessage(STATUS "        ---( Libevent " ${EVENT_VERSION} " )---")
1552*663afb9bSAndroid Build Coastguard Workermessage(STATUS "")
1553*663afb9bSAndroid Build Coastguard Workermessage(STATUS "Available event backends: ${BACKENDS}")
1554*663afb9bSAndroid Build Coastguard Workermessage(STATUS "CMAKE_BINARY_DIR:         ${CMAKE_BINARY_DIR}")
1555*663afb9bSAndroid Build Coastguard Workermessage(STATUS "CMAKE_CURRENT_BINARY_DIR: ${CMAKE_CURRENT_BINARY_DIR}")
1556*663afb9bSAndroid Build Coastguard Workermessage(STATUS "CMAKE_SOURCE_DIR:         ${CMAKE_SOURCE_DIR}")
1557*663afb9bSAndroid Build Coastguard Workermessage(STATUS "CMAKE_CURRENT_SOURCE_DIR: ${CMAKE_CURRENT_SOURCE_DIR}")
1558*663afb9bSAndroid Build Coastguard Workermessage(STATUS "PROJECT_BINARY_DIR:       ${PROJECT_BINARY_DIR}")
1559*663afb9bSAndroid Build Coastguard Workermessage(STATUS "PROJECT_SOURCE_DIR:       ${PROJECT_SOURCE_DIR}")
1560*663afb9bSAndroid Build Coastguard Workermessage(STATUS "CMAKE_MODULE_PATH:        ${CMAKE_MODULE_PATH}")
1561*663afb9bSAndroid Build Coastguard Workermessage(STATUS "CMAKE_COMMAND:            ${CMAKE_COMMAND}")
1562*663afb9bSAndroid Build Coastguard Workermessage(STATUS "CMAKE_ROOT:               ${CMAKE_ROOT}")
1563*663afb9bSAndroid Build Coastguard Workermessage(STATUS "CMAKE_SYSTEM:             ${CMAKE_SYSTEM}")
1564*663afb9bSAndroid Build Coastguard Workermessage(STATUS "CMAKE_SYSTEM_NAME:        ${CMAKE_SYSTEM_NAME}")
1565*663afb9bSAndroid Build Coastguard Workermessage(STATUS "CMAKE_SYSTEM_VERSION:     ${CMAKE_SYSTEM_VERSION}")
1566*663afb9bSAndroid Build Coastguard Workermessage(STATUS "CMAKE_SYSTEM_PROCESSOR:   ${CMAKE_SYSTEM_PROCESSOR}")
1567*663afb9bSAndroid Build Coastguard Workermessage(STATUS "CMAKE_SKIP_RPATH:         ${CMAKE_SKIP_RPATH}")
1568*663afb9bSAndroid Build Coastguard Workermessage(STATUS "CMAKE_VERBOSE_MAKEFILE:   ${CMAKE_VERBOSE_MAKEFILE}")
1569*663afb9bSAndroid Build Coastguard Workermessage(STATUS "CMAKE_C_FLAGS:            ${CMAKE_C_FLAGS}")
1570*663afb9bSAndroid Build Coastguard Workermessage(STATUS "CMAKE_BUILD_TYPE:         ${CMAKE_BUILD_TYPE}")
1571*663afb9bSAndroid Build Coastguard Workermessage(STATUS "CMAKE_C_COMPILER:         ${CMAKE_C_COMPILER} (id ${CMAKE_C_COMPILER_ID}, clang ${CLANG}, GNUC ${GNUC})")
1572*663afb9bSAndroid Build Coastguard Workermessage(STATUS "CMAKE_AR:                 ${CMAKE_AR}")
1573*663afb9bSAndroid Build Coastguard Workermessage(STATUS "CMAKE_RANLIB:             ${CMAKE_RANLIB}")
1574*663afb9bSAndroid Build Coastguard Workermessage(STATUS "")
1575*663afb9bSAndroid Build Coastguard Worker
1576