2 # Libevent CMake project
4 # Based on initial work by:
18 # cmake -G "Visual Studio 10" ..
22 cmake_minimum_required(VERSION 3.1.2 FATAL_ERROR)
25 cmake_policy(SET CMP0054 NEW)
28 cmake_policy(SET CMP0074 NEW)
31 cmake_policy(SET CMP0075 NEW)
34 if(NOT CMAKE_BUILD_TYPE)
35 set(CMAKE_BUILD_TYPE Release
36 CACHE STRING "Set build type to Debug or Release (default Release)" FORCE)
38 string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
40 set(CMAKE_DEBUG_POSTFIX d)
42 set(EVENT__LIBRARY_TYPE DEFAULT CACHE STRING
43 "Set library type to SHARED/STATIC/BOTH (default SHARED for MSVC, otherwise BOTH)")
47 list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/")
48 string(REGEX MATCH "SunOS" SOLARIS "${CMAKE_SYSTEM_NAME}")
51 include(CheckTypeSize)
52 include(CheckFileOffsetBits)
54 include(CheckVariableExists)
55 include(CheckSymbolExists)
56 include(CheckStructHasMember)
57 include(CheckCSourceCompiles)
58 include(CheckPrototypeDefinition)
59 include(CheckFunctionKeywords)
60 include(CheckConstExists)
61 include(AddCompilerFlags)
62 include(VersionViaGit)
64 event_fuzzy_version_from_git()
66 set(EVENT_VERSION_MAJOR ${EVENT_GIT___VERSION_MAJOR})
67 set(EVENT_VERSION_MINOR ${EVENT_GIT___VERSION_MINOR})
68 set(EVENT_VERSION_PATCH ${EVENT_GIT___VERSION_PATCH})
69 set(EVENT_VERSION_STAGE ${EVENT_GIT___VERSION_STAGE})
72 set(EVENT_ABI_MAJOR ${EVENT_VERSION_MAJOR})
73 set(EVENT_ABI_MINOR ${EVENT_VERSION_MINOR})
74 set(EVENT_ABI_PATCH ${EVENT_VERSION_PATCH})
76 set(EVENT_ABI_LIBVERSION
77 "${EVENT_ABI_MAJOR}.${EVENT_ABI_MINOR}.${EVENT_ABI_PATCH}")
79 set(EVENT_PACKAGE_VERSION
80 "${EVENT_VERSION_MAJOR}.${EVENT_VERSION_MINOR}.${EVENT_VERSION_PATCH}")
82 # equals to VERSION_INFO in Makefile.am
83 set(EVENT_ABI_LIBVERSION_CURRENT 1)
84 set(EVENT_ABI_LIBVERSION_REVISION 0)
85 set(EVENT_ABI_LIBVERSION_AGE 0)
87 # equals to RELEASE in Makefile.am
88 set(EVENT_PACKAGE_RELEASE 2.2)
90 set(EVENT_NUMERIC_VERSION 0x02020001)
92 # only a subset of names can be used, defaults to "beta"
93 set(EVENT_STAGE_NAME ${EVENT_VERSION_STAGE})
95 # a list that defines what can set for EVENT_STAGE_VERSION
96 set(EVENT__ALLOWED_STAGE_NAMES
105 FIND EVENT__ALLOWED_STAGE_NAMES
106 "${EVENT_STAGE_NAME}"
109 if (EVENT__STAGE_RET EQUAL -1)
111 "stage ${EVENT_STAGE_NAME} is not allowed, reset to beta")
112 set(EVENT_STAGE_NAME beta)
116 "${EVENT_VERSION_MAJOR}.${EVENT_VERSION_MINOR}.${EVENT_VERSION_PATCH}-${EVENT_STAGE_NAME}")
118 option(EVENT__DISABLE_DEBUG_MODE
119 "Define if libevent should build without support for a debug mode" OFF)
121 option(EVENT__ENABLE_VERBOSE_DEBUG
122 "Enables verbose debugging" OFF)
124 option(EVENT__DISABLE_MM_REPLACEMENT
125 "Define if libevent should not allow replacing the mm functions" OFF)
127 option(EVENT__DISABLE_THREAD_SUPPORT
128 "Define if libevent should not be compiled with thread support" OFF)
130 option(EVENT__DISABLE_OPENSSL
131 "Define if libevent should build without support for OpenSSL encryption" OFF)
133 option(EVENT__DISABLE_MBEDTLS
134 "Define if libevent should build without support for mbed TLS encryption" OFF)
136 option(EVENT__DISABLE_BENCHMARK
137 "Defines if libevent should build without the benchmark executables" OFF)
139 option(EVENT__DISABLE_TESTS
140 "If tests should be compiled or not" OFF)
142 option(EVENT__DISABLE_REGRESS
143 "Disable the regress tests" OFF)
145 option(EVENT__DISABLE_SAMPLES
146 "Disable sample files" OFF)
148 option(EVENT__DISABLE_CLOCK_GETTIME
149 "Do not use clock_gettime even if it is available" OFF)
151 option(EVENT__FORCE_KQUEUE_CHECK
152 "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)
154 # TODO: Add --disable-largefile omit support for large files
155 option(EVENT__COVERAGE
156 "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)
158 # Put the libaries and binaries that get built into directories at the
159 # top of the build tree rather than in hard-to-find leaf directories.
161 # But only if this variables are not defined yet
162 # (i.e. libevent is used via add_subdirectory())
163 if (NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY)
164 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
166 if (NOT DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY)
167 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
169 if (NOT DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
170 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
173 # The RPATH to be used when installing, but only if it's not a system directory
175 # Refs: https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/RPATH-handling
176 macro(Configure_RPATH)
177 # NOTE: that CMAKE_INSTALL_PREFIX not always normalized correctly, i.e.:
179 # - "/////usr///" -> "//usr"
180 # So it should be normalized again.
182 get_filename_component(CMAKE_INSTALL_PREFIX_NORMALIZED "${CMAKE_INSTALL_PREFIX}" REALPATH)
183 list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX_NORMALIZED}/lib" isSystemDir)
185 if("${isSystemDir}" STREQUAL "-1")
186 set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX_NORMALIZED}/lib")
191 if (EVENT__ENABLE_VERBOSE_DEBUG)
192 add_definitions(-DUSE_DEBUG=1)
195 # make it colorful under ninja-build
196 if ("${CMAKE_GENERATOR}" STREQUAL "Ninja")
197 add_compiler_flags(-fdiagnostics-color=always)
200 # Setup compiler flags for coverage.
202 if (NOT "${CMAKE_BUILD_TYPE_LOWER}" STREQUAL "debug")
203 message(FATAL_ERROR "Coverage requires -DCMAKE_BUILD_TYPE=Debug")
206 message(STATUS "Setting coverage compiler flags")
208 list(APPEND CMAKE_REQUIRED_LIBRARIES "--coverage")
209 add_compiler_flags(-g -O0 --coverage)
210 list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES "--coverage")
216 if (("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") OR
217 ("${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang"))
220 if (("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") OR (${CLANG}))
223 if (("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC") OR ("${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC"))
227 # Detect library type
228 set(EVENT_LIBRARY_TYPE)
229 if ("${EVENT__LIBRARY_TYPE}" STREQUAL "DEFAULT")
231 set(EVENT_LIBRARY_TYPE SHARED)
233 set(EVENT_LIBRARY_TYPE BOTH)
236 string(TOUPPER "${EVENT__LIBRARY_TYPE}" EVENT_LIBRARY_TYPE)
238 if ((${MSVC}) AND ("${EVENT_LIBRARY_TYPE}" STREQUAL "BOTH"))
240 "Building SHARED and STATIC is not supported for MSVC "
241 "(due to conflicts in library name"
242 " between STATIC library and IMPORTED library for SHARED libraries)")
244 set(EVENT_LIBRARY_STATIC OFF)
245 set(EVENT_LIBRARY_SHARED OFF)
246 if ("${EVENT_LIBRARY_TYPE}" STREQUAL "BOTH")
247 set(EVENT_LIBRARY_STATIC ON)
248 set(EVENT_LIBRARY_SHARED ON)
249 elseif ("${EVENT_LIBRARY_TYPE}" STREQUAL "STATIC")
250 set(EVENT_LIBRARY_STATIC ON)
251 elseif ("${EVENT_LIBRARY_TYPE}" STREQUAL "SHARED")
252 set(EVENT_LIBRARY_SHARED ON)
254 message(FATAL_ERROR "${EVENT_LIBRARY_TYPE} is not supported")
259 find_program(BREW brew)
263 set(msvc_static_runtime OFF)
264 if ("${EVENT_LIBRARY_TYPE}" STREQUAL "STATIC")
265 set(msvc_static_runtime ON)
269 # - https://docs.microsoft.com/en-us/cpp/build/reference/md-mt-ld-use-run-time-library?view=vs-2017
270 # - https://gitlab.kitware.com/cmake/community/wikis/FAQ#how-can-i-build-my-msvc-application-with-a-static-runtime
271 option(EVENT__MSVC_STATIC_RUNTIME
272 "Link static runtime libraries"
273 ${msvc_static_runtime})
275 if (EVENT__MSVC_STATIC_RUNTIME)
278 CMAKE_C_FLAGS_RELEASE
279 CMAKE_C_FLAGS_MINSIZEREL
280 CMAKE_C_FLAGS_RELWITHDEBINFO
282 if (${flag_var} MATCHES "/MD")
283 string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
289 # GNUC specific options.
291 option(EVENT__DISABLE_GCC_WARNINGS "Disable verbose warnings with GCC" OFF)
292 option(EVENT__ENABLE_GCC_HARDENING "Enable compiler security checks" OFF)
293 option(EVENT__ENABLE_GCC_FUNCTION_SECTIONS "Enable gcc function sections" OFF)
294 option(EVENT__ENABLE_GCC_WARNINGS "Make all GCC warnings into errors" OFF)
297 -Wall -Wextra -Wno-unused-parameter -Wstrict-aliasing -Wstrict-prototypes
300 -fno-strict-aliasing # gcc 2.9.5+
305 -Wmissing-field-initializers
306 -Wdeclaration-after-statement
318 # Disable unused-function warnings. These trigger for minheap-internal.h.
326 # we use this hack in tests
327 -Wno-void-pointer-to-enum-cast)
330 if (EVENT__DISABLE_GCC_WARNINGS)
331 list(APPEND __FLAGS -w)
334 if (EVENT__ENABLE_GCC_HARDENING)
336 -fstack-protector-all
340 "--param ssp-buffer-size=1")
342 add_definitions(-D_FORTIFY_SOURCE=2)
345 if (EVENT__ENABLE_GCC_FUNCTION_SECTIONS)
346 list(APPEND __FLAGS -ffunction-sections)
347 # TODO: Add --gc-sections support. We need some checks for NetBSD to ensure this works.
350 if (EVENT__ENABLE_GCC_WARNINGS)
351 list(APPEND __FLAGS -Werror)
354 add_compiler_flags(${__FLAGS})
358 # Clang on macOS emits warnings for each directory specified which isn't used
370 list(APPEND CMAKE_REQUIRED_LIBRARIES
376 set(CMAKE_REQUIRED_DEFINITIONS -FIwinsock2.h -FIws2tcpip.h -D_WIN32_WINNT=0x0600)
379 list(APPEND CMAKE_REQUIRED_LIBRARIES
385 # Check if _GNU_SOURCE is available.
386 if (NOT DEFINED _GNU_SOURCE)
387 CHECK_SYMBOL_EXISTS(__GNU_LIBRARY__ "features.h" _GNU_SOURCE)
390 unset(_GNU_SOURCE CACHE)
391 CHECK_SYMBOL_EXISTS(_GNU_SOURCE "features.h" _GNU_SOURCE)
395 set(_GNU_SOURCE TRUE)
400 add_definitions(-D_GNU_SOURCE=1)
401 set(CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
404 # Check if header files exist
405 list(APPEND FILES_TO_CHECK
424 list(APPEND FILES_TO_CHECK
431 list(APPEND FILES_TO_CHECK
461 if (NOT "${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Linux")
462 list(APPEND FILES_TO_CHECK sys/sysctl.h)
466 list(APPEND FILES_TO_CHECK
472 if (NOT EVENT__DISABLE_THREAD_SUPPORT AND NOT WIN32)
473 list(APPEND FILES_TO_CHECK pthread.h)
474 # (Only `CHECK_TYPE_SIZE()' will use `CMAKE_EXTRA_INCLUDE_FILES')
475 list(APPEND CMAKE_EXTRA_INCLUDE_FILES pthread.h)
478 # Fills EVENT_INCLUDES
479 foreach(FILE ${FILES_TO_CHECK})
480 CHECK_INCLUDE_FILE_CONCAT(${FILE} "EVENT")
482 unset(FILES_TO_CHECK)
484 # Check if functions exist
485 list(APPEND SYMBOLS_TO_CHECK
507 if (NOT EVENT__DISABLE_CLOCK_GETTIME)
508 list(APPEND SYMBOLS_TO_CHECK clock_gettime)
512 list(APPEND SYMBOLS_TO_CHECK
517 list(APPEND SYMBOLS_TO_CHECK
553 list(APPEND SYMBOLS_TO_CHECK mach_absolute_time)
557 if (NOT EVENT__DISABLE_THREAD_SUPPORT)
559 list(APPEND SRC_CORE evthread_win32.c)
561 # pthreads is built in to bionic
562 set(EVENT__HAVE_PTHREADS 1)
563 CHECK_TYPE_SIZE(pthread_t EVENT__SIZEOF_PTHREAD_T)
564 list(APPEND SYMBOLS_TO_CHECK pthread_mutexattr_setprotocol)
566 find_package(Threads REQUIRED)
567 if (NOT CMAKE_USE_PTHREADS_INIT)
569 "Failed to find Pthreads, set EVENT__DISABLE_THREAD_SUPPORT to disable")
572 set(EVENT__HAVE_PTHREADS 1)
573 list(APPEND LIB_APPS ${CMAKE_THREAD_LIBS_INIT})
575 # for CHECK_SYMBOLS_EXIST()
576 list(APPEND CMAKE_REQUIRED_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
578 CHECK_TYPE_SIZE(pthread_t EVENT__SIZEOF_PTHREAD_T)
579 list(APPEND SYMBOLS_TO_CHECK pthread_mutexattr_setprotocol)
583 list(APPEND CMAKE_EXTRA_INCLUDE_FILES ${EVENT_INCLUDES} stdio.h)
584 CHECK_SYMBOLS_EXIST("${SYMBOLS_TO_CHECK}" "${CMAKE_EXTRA_INCLUDE_FILES}" "EVENT")
585 unset(SYMBOLS_TO_CHECK)
586 set(EVENT__HAVE_EPOLL ${EVENT__HAVE_EPOLL_CREATE})
587 set(EVENT__HAVE_SIGNALFD ${EVENT__HAVE_SYS_SIGNALFD_H})
588 if(WIN32 AND NOT CYGWIN)
589 set(EVENT__HAVE_WEPOLL 1)
592 # Get the gethostbyname_r prototype.
593 if(EVENT__HAVE_GETHOSTBYNAME_R)
594 CHECK_PROTOTYPE_DEFINITION(gethostbyname_r
595 "int gethostbyname_r(const char *name, struct hostent *hp, struct hostent_data *hdata)"
598 EVENT__HAVE_GETHOSTBYNAME_R_3_ARG)
600 CHECK_PROTOTYPE_DEFINITION(gethostbyname_r
601 "struct hostent *gethostbyname_r(const char *name, struct hostent *hp, char *buf, size_t buflen, int *herr)"
604 EVENT__HAVE_GETHOSTBYNAME_R_5_ARG)
606 CHECK_PROTOTYPE_DEFINITION(gethostbyname_r
607 "int gethostbyname_r(const char *name, struct hostent *hp, char *buf, size_t buflen, struct hostent **result, int *herr)"
610 EVENT__HAVE_GETHOSTBYNAME_R_6_ARG)
613 if(HAVE_PORT_H AND HAVE_PORT_CREATE)
614 set(EVENT__HAVE_EVENT_PORTS 1)
617 CHECK_TYPE_SIZE("struct sockaddr_un" EVENT__HAVE_STRUCT_SOCKADDR_UN)
618 CHECK_TYPE_SIZE("uint8_t" EVENT__HAVE_UINT8_T)
619 CHECK_TYPE_SIZE("uint16_t" EVENT__HAVE_UINT16_T)
620 CHECK_TYPE_SIZE("uint32_t" EVENT__HAVE_UINT32_T)
621 CHECK_TYPE_SIZE("uint64_t" EVENT__HAVE_UINT64_T)
622 CHECK_TYPE_SIZE("short" EVENT__SIZEOF_SHORT BUILTIN_TYPES_ONLY)
623 CHECK_TYPE_SIZE("int" EVENT__SIZEOF_INT BUILTIN_TYPES_ONLY)
624 CHECK_TYPE_SIZE("unsigned" EVENT__SIZEOF_UNSIGNED BUILTIN_TYPES_ONLY)
625 CHECK_TYPE_SIZE("unsigned int" EVENT__SIZEOF_UNSIGNED_INT BUILTIN_TYPES_ONLY)
626 CHECK_TYPE_SIZE("long" EVENT__SIZEOF_LONG BUILTIN_TYPES_ONLY)
627 CHECK_TYPE_SIZE("long long" EVENT__SIZEOF_LONG_LONG BUILTIN_TYPES_ONLY)
630 # These aren't available until Windows Vista.
631 # But you can still link them. They just won't be found when running the exe.
632 set(EVENT__HAVE_INET_NTOP 0)
633 set(EVENT__HAVE_INET_PTON 0)
636 # Check for different inline keyword versions.
637 check_function_keywords("inline" "__inline" "__inline__")
640 set(EVENT__inline inline)
641 elseif (HAVE___INLINE)
642 set(EVENT__inline __inline)
643 elseif(HAVE___INLINE__)
644 set(EVENT__inline __inline__)
649 # __func__/__FUNCTION__ is not a macros in general
650 CHECK_SYMBOL_EXISTS("__func__" "" EVENT__HAVE___func__)
651 CHECK_SYMBOL_EXISTS("__FUNCTION__" "" EVENT__HAVE___FUNCTION__)
653 CHECK_SYMBOL_EXISTS(TAILQ_FOREACH sys/queue.h EVENT__HAVE_TAILQFOREACH)
654 CHECK_CONST_EXISTS(CTL_KERN sys/sysctl.h EVENT__HAVE_DECL_CTL_KERN)
655 CHECK_CONST_EXISTS(KERN_ARND sys/sysctl.h EVENT__HAVE_DECL_KERN_ARND)
656 CHECK_SYMBOL_EXISTS(F_SETFD fcntl.h EVENT__HAVE_SETFD)
658 CHECK_TYPE_SIZE(fd_mask EVENT__HAVE_FD_MASK)
660 CHECK_TYPE_SIZE(size_t EVENT__SIZEOF_SIZE_T)
661 if(NOT EVENT__SIZEOF_SIZE_T)
662 set(EVENT__size_t "unsigned")
663 set(EVENT__SIZEOF_SIZE_T ${EVENT__SIZEOF_UNSIGNED})
665 set(EVENT__size_t size_t)
668 CHECK_TYPE_SIZE("off_t" EVENT__SIZEOF_OFF_T LANGUAGE C)
671 # XXX we should functionalize these size and type sets. --elley
675 list(APPEND CMAKE_EXTRA_INCLUDE_FILES BaseTsd.h)
677 CHECK_TYPE_SIZE("ssize_t" EVENT__SIZEOF_SSIZE_T_LOWER LANGUAGE C)
678 CHECK_TYPE_SIZE("SSIZE_T" EVENT__SIZEOF_SSIZE_T_UPPER LANGUAGE C)
680 if (EVENT__SIZEOF_SSIZE_T_LOWER)
681 set(EVENT__ssize_t "ssize_t")
682 set(EVENT__SIZEOF_SSIZE_T ${EVENT__SIZEOF_SSIZE_T_LOWER})
683 elseif (EVENT__SIZEOF_SSIZE_T_UPPER)
684 set(EVENT__ssize_t "SSIZE_T")
685 set(EVENT__SIZEOF_SSIZE_T ${EVENT__SIZEOF_SSIZE_T_UPPER})
687 set(EVENT__ssize_t "int")
688 set(EVENT__SIZEOF_SSIZE_T ${EVENT__SIZEOF_INT})
691 CHECK_TYPE_SIZE(socklen_t EVENT__SIZEOF_SOCKLEN_T)
692 if(NOT EVENT__SIZEOF_SOCKLEN_T)
693 set(EVENT__socklen_t "unsigned int")
694 set(EVENT__SIZEOF_SOCKLEN_T ${EVENT__SIZEOF_UNSIGNED_INT})
696 set(EVENT__socklen_t "socklen_t")
699 CHECK_TYPE_SIZE(pid_t EVENT__SIZEOF_PID_T)
700 if(NOT EVENT__SIZEOF_PID_T)
701 set(EVENT__SIZEOF_PID_T ${EVENT__SIZEOF_INT})
703 set(EVENT__SIZEOF_PID_T EVENT__SIZEOF_PID_T)
706 if(EVENT__HAVE_CLOCK_GETTIME)
707 set(EVENT__DNS_USE_CPU_CLOCK_FOR_ID 1)
710 # we're just getting lazy now.
711 CHECK_TYPE_SIZE("uintptr_t" EVENT__HAVE_UINTPTR_T)
712 CHECK_TYPE_SIZE("void *" EVENT__SIZEOF_VOID_P)
713 CHECK_TYPE_SIZE("time_t" EVENT__SIZEOF_TIME_T)
715 # Tests file offset bits.
716 # TODO: Add AIX test for if -D_LARGE_FILES is needed.
718 # XXX: Why is this here? we don't even use it. Well, we don't even use it
719 # on top of that, why is it set in the config.h?! IT_MAKES_NO_SENSE
720 # I'm commenting it out for now.
723 #CHECK_FILE_OFFSET_BITS()
725 # Verify kqueue works with pipes.
726 if (EVENT__HAVE_KQUEUE)
727 if ((CMAKE_CROSSCOMPILING OR APPLE) AND NOT EVENT__FORCE_KQUEUE_CHECK)
728 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)")
729 set(EVENT__HAVE_WORKING_KQUEUE 1)
731 message(STATUS "Checking if kqueue works with pipes...")
732 include(CheckWorkingKqueue)
736 if(EVENT__HAVE_NETDB_H)
737 list(APPEND CMAKE_EXTRA_INCLUDE_FILES netdb.h)
738 CHECK_TYPE_SIZE("struct addrinfo" EVENT__HAVE_STRUCT_ADDRINFO)
740 list(APPEND CMAKE_EXTRA_INCLUDE_FILES ws2tcpip.h)
741 CHECK_TYPE_SIZE("struct addrinfo" EVENT__HAVE_STRUCT_ADDRINFO)
744 # Check for sockaddr structure sizes.
745 set(SOCKADDR_HEADERS)
747 set(CMAKE_REQUIRED_DEFINITIONS "-DWIN32_LEAN_AND_MEAN")
748 if (_MSC_VER LESS 1300)
749 set(SOCKADDR_HEADERS winsock.h)
751 set(SOCKADDR_HEADERS winsock2.h ws2tcpip.h)
754 if (EVENT__HAVE_NETINET_IN_H)
755 set(SOCKADDR_HEADERS ${SOCKADDR_HEADERS} netinet/in.h)
758 if (EVENT__HAVE_NETINET_IN6_H)
759 set(SOCKADDR_HEADERS ${SOCKADDR_HEADERS} netinet/in6.h)
762 if (EVENT__HAVE_SYS_SOCKET_H)
763 set(SOCKADDR_HEADERS ${SOCKADDR_HEADERS} sys/socket.h)
766 if (EVENT__HAVE_NETDB_H)
767 set(SOCKADDR_HEADERS ${SOCKADDR_HEADERS} netdb.h)
771 CHECK_TYPE_SIZE("struct in6_addr" EVENT__HAVE_STRUCT_IN6_ADDR)
772 if(EVENT__HAVE_STRUCT_IN6_ADDR)
773 CHECK_STRUCT_HAS_MEMBER("struct in6_addr"
774 s6_addr16 "${SOCKADDR_HEADERS}"
775 EVENT__HAVE_STRUCT_IN6_ADDR_S6_ADDR16)
777 CHECK_STRUCT_HAS_MEMBER("struct in6_addr"
778 s6_addr32 "${SOCKADDR_HEADERS}"
779 EVENT__HAVE_STRUCT_IN6_ADDR_S6_ADDR32)
782 CHECK_TYPE_SIZE("sa_family_t" EVENT__HAVE_SA_FAMILY_T)
783 CHECK_TYPE_SIZE("struct sockaddr_in6" EVENT__HAVE_STRUCT_SOCKADDR_IN6)
785 if(EVENT__HAVE_STRUCT_SOCKADDR_IN6)
786 CHECK_STRUCT_HAS_MEMBER("struct sockaddr_in6"
787 sin6_len "${SOCKADDR_HEADERS}"
788 EVENT__HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN)
790 CHECK_STRUCT_HAS_MEMBER("struct sockaddr_in6"
791 sin_len "${SOCKADDR_HEADERS}"
792 EVENT__HAVE_STRUCT_SOCKADDR_IN_SIN_LEN)
795 CHECK_TYPE_SIZE("struct sockaddr_storage" EVENT__HAVE_STRUCT_SOCKADDR_STORAGE)
796 if(EVENT__HAVE_STRUCT_SOCKADDR_STORAGE)
797 CHECK_STRUCT_HAS_MEMBER("struct sockaddr_storage"
798 ss_family "${SOCKADDR_HEADERS}"
799 EVENT__HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY)
801 CHECK_STRUCT_HAS_MEMBER("struct sockaddr_storage"
802 __ss_family "${SOCKADDR_HEADERS}" EVENT__HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY)
805 CHECK_TYPE_SIZE("struct linger" EVENT__HAVE_STRUCT_LINGER)
807 # Group the source files.
809 bufferevent-internal.h
810 changelist-internal.h
812 epolltable-internal.h
842 include/event2/buffer.h
843 include/event2/bufferevent.h
844 include/event2/bufferevent_compat.h
845 include/event2/bufferevent_struct.h
846 include/event2/buffer_compat.h
848 include/event2/dns_compat.h
849 include/event2/dns_struct.h
850 include/event2/event.h
851 include/event2/event_compat.h
852 include/event2/event_struct.h
853 include/event2/watch.h
854 include/event2/http.h
855 include/event2/http_compat.h
856 include/event2/http_struct.h
857 include/event2/keyvalq_struct.h
858 include/event2/listener.h
860 include/event2/rpc_compat.h
861 include/event2/rpc_struct.h
863 include/event2/tag_compat.h
864 include/event2/thread.h
865 include/event2/util.h
867 include/event2/visibility.h
868 ${PROJECT_BINARY_DIR}/include/event2/event-config.h)
875 bufferevent_ratelim.c
889 if(EVENT__HAVE_SELECT)
890 list(APPEND SRC_CORE select.c)
894 list(APPEND SRC_CORE poll.c)
897 if(EVENT__HAVE_KQUEUE)
898 list(APPEND SRC_CORE kqueue.c)
901 if(EVENT__HAVE_DEVPOLL)
902 list(APPEND SRC_CORE devpoll.c)
905 if(EVENT__HAVE_EPOLL)
906 list(APPEND SRC_CORE epoll.c)
909 if(EVENT__HAVE_SIGNALFD)
910 list(APPEND SRC_CORE signalfd.c)
913 if(EVENT__HAVE_WEPOLL)
919 if(EVENT__HAVE_EVENT_PORTS)
920 list(APPEND SRC_CORE evport.c)
923 if (NOT EVENT__DISABLE_OPENSSL)
924 # only if OPENSSL_ROOT_DIR is not set yet
925 if (BREW AND NOT OPENSSL_ROOT_DIR AND NOT "$ENV{OPENSSL_ROOT_DIR}")
926 execute_process(COMMAND ${BREW} --prefix openssl
927 OUTPUT_VARIABLE BREW_OPENSSL_PREFIX
928 RESULT_VARIABLE BREW_OPENSSL_RESULT
930 OUTPUT_STRIP_TRAILING_WHITESPACE
932 if (BREW_OPENSSL_RESULT EQUAL 0)
933 message(STATUS "Set OPENSSL_ROOT_DIR=${BREW_OPENSSL_PREFIX} (from brew)")
934 set(OPENSSL_ROOT_DIR "${BREW_OPENSSL_PREFIX}" CACHE PATH "")
938 find_package(OpenSSL REQUIRED)
940 set(EVENT__HAVE_OPENSSL 1)
942 message(STATUS "OpenSSL include: ${OPENSSL_INCLUDE_DIR}")
943 message(STATUS "OpenSSL lib: ${OPENSSL_LIBRARIES}")
945 include_directories(${OPENSSL_INCLUDE_DIR})
947 list(APPEND SRC_OPENSSL bufferevent_openssl.c bufferevent_ssl.c)
948 list(APPEND HDR_PUBLIC include/event2/bufferevent_ssl.h)
949 list(APPEND LIB_APPS ${OPENSSL_LIBRARIES})
952 if (NOT EVENT__DISABLE_MBEDTLS)
953 find_package(MbedTLS REQUIRED)
955 set(EVENT__HAVE_MBEDTLS 1)
957 message(STATUS "mbed TLS include: ${MBEDTLS_INCLUDE_DIR}")
958 message(STATUS "mbed TLS lib: ${MBEDTLS_LIBRARIES}")
960 include_directories(${MBEDTLS_INCLUDE_DIR})
962 list(APPEND SRC_MBEDTLS bufferevent_mbedtls.c bufferevent_ssl.c)
963 list(APPEND HDR_PUBLIC include/event2/bufferevent_ssl.h)
964 list(APPEND LIB_APPS ${MBEDTLS_LIBRARIES})
967 if (NOT EVENT__DISABLE_TESTS)
968 # Zlib is only used for testing.
971 if (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR)
972 include_directories(${ZLIB_INCLUDE_DIRS})
974 set(EVENT__HAVE_LIBZ 1)
975 list(APPEND LIB_APPS ${ZLIB_LIBRARIES})
987 if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 3.20)
988 include(TestBigEndian)
989 TEST_BIG_ENDIAN(IS_BIG_ENDIAN)
991 set(CMAKE_C_BYTE_ORDER BIG_ENDIAN)
993 set(CMAKE_C_BYTE_ORDER LITTLE_ENDIAN)
996 set_source_files_properties(sha1.c PROPERTIES COMPILE_FLAGS
997 -D${CMAKE_C_BYTE_ORDER}=1)
998 add_definitions(-DHAVE_CONFIG_H)
1000 # We use BEFORE here so we don't accidentally look in system directories
1001 # first for some previous versions of the headers that are installed.
1002 include_directories(BEFORE ${PROJECT_SOURCE_DIR}
1003 ${PROJECT_SOURCE_DIR}/compat
1004 ${PROJECT_SOURCE_DIR}/include)
1007 list(APPEND SRC_CORE
1013 list(APPEND HDR_PRIVATE WIN32-Code/getopt.h)
1015 set(EVENT__DNS_USE_FTIME_FOR_ID 1)
1016 set(LIB_PLATFORM ws2_32 shell32 advapi32 bcrypt)
1018 -D_CRT_SECURE_NO_WARNINGS
1019 -D_CRT_NONSTDC_NO_DEPRECATE)
1021 include_directories(./WIN32-Code)
1025 list(APPEND LIB_PLATFORM socket nsl)
1028 source_group("Headers Private" FILES ${HDR_PRIVATE})
1029 source_group("Header Compat" FILES ${HDR_COMPAT})
1030 source_group("Headers Public" FILES ${HDR_PUBLIC})
1031 source_group("Source Core" FILES ${SRC_CORE})
1032 source_group("Source Extra" FILES ${SRC_EXTRA})
1034 # Generate the configure headers.
1035 # (Place them in the build dir so we don't polute the source tree with generated files).
1036 include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}/include)
1039 set(EVENT_SHARED_FLAGS -fvisibility=hidden)
1040 elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "SunPro")
1041 set(EVENT_SHARED_FLAGS -xldscope=hidden)
1045 ${CMAKE_CURRENT_SOURCE_DIR}/event-config.h.cmake
1046 ${CMAKE_CURRENT_BINARY_DIR}/include/event2/event-config.h
1050 ${CMAKE_CURRENT_SOURCE_DIR}/evconfig-private.h.cmake
1051 ${CMAKE_CURRENT_BINARY_DIR}/include/evconfig-private.h)
1054 # Create the libraries.
1056 include(AddEventLibrary)
1057 add_event_library(event_core SOURCES ${SRC_CORE})
1058 add_event_library(event_extra
1059 INNER_LIBRARIES event_core
1060 SOURCES ${SRC_EXTRA})
1062 if (NOT EVENT__DISABLE_OPENSSL)
1063 add_event_library(event_openssl
1064 INNER_LIBRARIES event_core
1065 OUTER_INCLUDES ${OPENSSL_INCLUDE_DIR}
1066 LIBRARIES ${OPENSSL_LIBRARIES}
1067 SOURCES ${SRC_OPENSSL})
1070 if (NOT EVENT__DISABLE_MBEDTLS)
1071 add_event_library(event_mbedtls
1072 INNER_LIBRARIES event_core
1073 OUTER_INCLUDES ${MBEDTLS_INCLUDE_DIR}
1074 LIBRARIES ${MBEDTLS_LIBRARIES}
1075 SOURCES ${SRC_MBEDTLS})
1078 if (EVENT__HAVE_PTHREADS)
1079 set(SRC_PTHREADS evthread_pthread.c)
1080 add_event_library(event_pthreads
1081 INNER_LIBRARIES event_core
1082 SOURCES ${SRC_PTHREADS})
1085 # library exists for historical reasons; it contains the contents of
1086 # both libevent_core and libevent_extra. You shouldn’t use it; it may
1087 # go away in a future version of Libevent.
1088 add_event_library(event SOURCES ${SRC_CORE} ${SRC_EXTRA})
1093 if (${EVENT_LIBRARY_STATIC})
1094 list(APPEND _TMPLIBS event_core_static event_static)
1096 if (${EVENT_LIBRARY_SHARED})
1097 list(APPEND _TMPLIBS event_core_shared event_shared)
1099 foreach(lib ${_TMPLIBS})
1100 target_link_libraries(${lib} iphlpapi)
1104 list(APPEND WIN32_GETOPT
1106 WIN32-Code/getopt_long.c)
1112 macro(add_sample_prog ssl name)
1113 add_executable(${name} ${ARGN})
1115 target_link_libraries(${name}
1122 target_link_libraries(${name} ${ssl})
1124 target_link_libraries(${name} crypt32)
1128 if (NOT EVENT__DISABLE_SAMPLES)
1137 foreach(SAMPLE ${SAMPLES})
1138 add_sample_prog(OFF ${SAMPLE} sample/${SAMPLE}.c)
1141 target_link_libraries(watch-timing m)
1144 if (NOT EVENT__DISABLE_OPENSSL)
1145 add_sample_prog(event_openssl https-client
1146 sample/https-client.c
1147 sample/openssl_hostname_validation.c
1149 add_sample_prog(event_openssl le-proxy
1151 add_sample_prog(event_openssl becat sample/becat.c ${WIN32_GETOPT})
1154 if (NOT EVENT__DISABLE_MBEDTLS)
1155 add_sample_prog(event_mbedtls https-client-mbedtls
1156 sample/https-client.c)
1157 target_compile_definitions(https-client-mbedtls PRIVATE USE_MBEDTLS)
1158 add_sample_prog(event_mbedtls ssl-client-mbedtls
1159 sample/ssl-client-mbedtls.c)
1167 foreach (SAMPLE ${SAMPLES_WOPT})
1168 add_sample_prog(OFF ${SAMPLE} sample/${SAMPLE}.c ${WIN32_GETOPT})
1175 macro(add_bench_prog prog)
1176 add_executable(${prog} ${ARGN})
1177 target_link_libraries(${prog}
1183 if (NOT EVENT__DISABLE_BENCHMARK)
1184 foreach (BENCHMARK bench_http bench_httpclient)
1185 add_bench_prog(${BENCHMARK} test/${BENCHMARK}.c)
1188 add_bench_prog(bench test/bench.c ${WIN32_GETOPT})
1189 add_bench_prog(bench_cascade test/bench_cascade.c ${WIN32_GETOPT})
1195 macro(add_test_prog prog)
1196 add_executable(${prog} test/${prog}.c)
1197 target_link_libraries(${prog}
1204 if (NOT EVENT__DISABLE_TESTS)
1206 # Generate Regress tests.
1208 if (NOT EVENT__DISABLE_REGRESS)
1209 # (We require python to generate the regress tests)
1210 find_package(PythonInterp 3)
1212 if (PYTHONINTERP_FOUND)
1213 set(__FOUND_USABLE_PYTHON 1)
1215 find_package(PythonInterp 2)
1216 if (PYTHONINTERP_FOUND)
1217 set(__FOUND_USABLE_PYTHON 1)
1219 message(ERROR "No suitable Python version found, bailing...")
1223 if (__FOUND_USABLE_PYTHON)
1224 message(STATUS "Generating regress tests...")
1226 add_definitions(-DTINYTEST_LOCAL)
1230 ${CMAKE_CURRENT_SOURCE_DIR}/test/regress.gen.c
1231 ${CMAKE_CURRENT_SOURCE_DIR}/test/regress.gen.h
1235 COMMAND ${PYTHON_EXECUTABLE} ../event_rpcgen.py --quiet regress.rpc
1236 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test)
1238 list(APPEND SRC_REGRESS
1242 test/regress_buffer.c
1243 test/regress_bufferevent.c
1246 test/regress_finalize.c
1249 test/regress_listener.c
1251 test/regress_minheap.c
1253 test/regress_testutils.c
1254 test/regress_testutils.h
1256 test/regress_watch.c
1262 list(APPEND SRC_REGRESS test/regress_iocp.c)
1263 if (NOT EVENT__DISABLE_THREAD_SUPPORT)
1264 list(APPEND SRC_REGRESS test/regress_thread.c)
1266 elseif (EVENT__HAVE_PTHREADS)
1267 list(APPEND SRC_REGRESS test/regress_thread.c)
1270 if (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR)
1271 list(APPEND SRC_REGRESS test/regress_zlib.c)
1274 if (NOT EVENT__DISABLE_OPENSSL)
1275 list(APPEND SRC_REGRESS test/regress_openssl.c)
1278 if (NOT EVENT__DISABLE_MBEDTLS)
1279 list(APPEND SRC_REGRESS test/regress_mbedtls.c)
1282 add_executable(regress ${SRC_REGRESS})
1284 target_link_libraries(regress
1289 if (NOT EVENT__DISABLE_OPENSSL)
1290 target_link_libraries(regress event_openssl)
1292 if (NOT EVENT__DISABLE_MBEDTLS)
1293 target_link_libraries(regress event_mbedtls)
1295 if (CMAKE_USE_PTHREADS_INIT)
1296 target_link_libraries(regress event_pthreads)
1299 message(WARNING "No suitable Python interpreter found, cannot generate regress tests!")
1306 # all of these, including the cmakelists.txt should be moved
1307 # into the dirctory 'tests' first.
1309 # doing this, we can remove all the DISABLE_TESTS stuff, and simply
1310 # do something like:
1312 # add_custom_targets(tests)
1313 # add_executable(... EXCLUDE_FROM_ALL ...c)
1314 # add_dependencis(tests testa testb testc)
1317 # then you can just run 'make tests' instead of them all
1318 # auto-compile|running
1320 set(TESTPROGS test-changelist
1328 foreach (TESTPROG ${TESTPROGS} test-dumpevents)
1329 add_test_prog(${TESTPROG})
1332 add_test_prog(test-ratelim m)
1334 add_test_prog(test-ratelim)
1344 # We run all tests with the different backends turned on one at a time.
1347 # Add event backends based on system introspection result.
1350 if (EVENT__HAVE_EPOLL)
1351 list(APPEND BACKENDS EPOLL)
1354 if (EVENT__HAVE_SELECT)
1355 list(APPEND BACKENDS SELECT)
1358 if (EVENT__HAVE_POLL)
1359 list(APPEND BACKENDS POLL)
1362 if (EVENT__HAVE_KQUEUE)
1363 list(APPEND BACKENDS KQUEUE)
1366 if (EVENT__HAVE_EVENT_PORTS)
1367 list(APPEND BACKENDS EVPORT)
1370 if (EVENT__HAVE_DEVPOLL)
1371 list(APPEND BACKENDS DEVPOLL)
1374 if (EVENT__HAVE_WEPOLL)
1375 list(APPEND BACKENDS WEPOLL)
1379 list(APPEND BACKENDS WIN32)
1383 # Default environment variables turns off all event systems,
1384 # then we enable each one, one at a time when creating the tests.
1385 set(DEFAULT_TEST_ENV_VARS)
1386 foreach(BACKEND ${BACKENDS})
1387 set(BACKEND_ENV_VAR "EVENT_NO${BACKEND}=1")
1388 list(APPEND DEFAULT_TEST_ENV_VARS "${BACKEND_ENV_VAR}")
1391 # Macro that creates the ctest test for a backend.
1392 macro(add_backend_test BACKEND_TEST_NAME ENV_VARS)
1395 foreach (TESTPROG ${TESTPROGS})
1396 set(TEST_NAME ${TESTPROG}__${BACKEND_TEST_NAME})
1398 add_test(${TEST_NAME}
1399 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TESTPROG})
1401 list(APPEND TEST_NAMES ${TEST_NAME})
1403 set_tests_properties(${TEST_NAME}
1404 PROPERTIES ENVIRONMENT "${ENV_VARS}")
1408 if (__FOUND_USABLE_PYTHON)
1409 set(TEST_NAME test-dumpevents__${BACKEND_TEST_NAME})
1411 add_test(${TEST_NAME}
1412 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test-dumpevents |
1413 ${PYTHON_EXECUTABLE}
1414 ${CMAKE_CURRENT_SOURCE_DIR}/test/check-dumpevents.py)
1416 set_tests_properties(${TEST_NAME}
1417 PROPERTIES ENVIRONMENT "${ENV_VARS}")
1419 message(WARNING "test-dumpevents will be run without output check since python was not found!")
1420 set(TEST_NAME test-dumpevents__${BACKEND_TEST_NAME}_no_check)
1422 add_test(${TEST_NAME}
1423 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test-dumpevents)
1425 set_tests_properties(${TEST_NAME}
1426 PROPERTIES ENVIRONMENT "${ENV_VARS}")
1430 if (NOT EVENT__DISABLE_REGRESS AND __FOUND_USABLE_PYTHON)
1431 set(TEST_NAME regress__${BACKEND_TEST_NAME})
1433 add_test(${TEST_NAME}
1434 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/regress --quiet)
1436 set_tests_properties(${TEST_NAME}
1437 PROPERTIES ENVIRONMENT "${ENV_VARS}")
1439 add_test(${TEST_NAME}_debug
1440 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/regress --quiet)
1442 set_tests_properties(${TEST_NAME}_debug
1443 PROPERTIES ENVIRONMENT "${ENV_VARS};EVENT_DEBUG_MODE=1")
1447 # Add the tests for each backend.
1448 foreach(BACKEND ${BACKENDS})
1449 # Enable this backend only.
1450 set(BACKEND_ENV_VARS ${DEFAULT_TEST_ENV_VARS})
1451 list(REMOVE_ITEM BACKEND_ENV_VARS EVENT_NO${BACKEND}=1)
1453 # Epoll has some extra settings.
1454 if (${BACKEND} STREQUAL "EPOLL")
1455 add_backend_test(timerfd_${BACKEND}
1456 "${BACKEND_ENV_VARS};EVENT_PRECISE_TIMER=1")
1458 add_backend_test(changelist_${BACKEND}
1459 "${BACKEND_ENV_VARS};EVENT_EPOLL_USE_CHANGELIST=yes")
1461 add_backend_test(timerfd_changelist_${BACKEND}
1462 "${BACKEND_ENV_VARS};EVENT_EPOLL_USE_CHANGELIST=yes;EVENT_PRECISE_TIMER=1")
1464 add_backend_test(${BACKEND} "${BACKEND_ENV_VARS}")
1469 # Rate limiter tests.
1472 # Group limits, no connection limit.
1473 set(RL_BIN ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test-ratelim)
1475 add_test(test-ratelim__group_lim
1480 --check-grouplimit 1000
1483 # Connection limit, no group limit.
1484 add_test(test-ratelim__con_lim
1489 --check-connlimit 50
1492 # Connection limit and group limit.
1493 add_test(test-ratelim__group_con_lim
1499 --check-grouplimit 1000
1500 --check-connlimit 50
1503 # Connection limit and group limit with independent drain.
1504 add_test(test-ratelim__group_con_lim_drain
1511 --check-grouplimit 1000
1512 --check-connlimit 50
1515 # Add a "make verify" target, same as for autoconf.
1516 # (Important! This will unset all EVENT_NO* environment variables.
1517 # If they are set in the shell the tests are running using simply "ctest" or "make test" will fail)
1519 # Windows doesn't have "unset". But you can use "set VAR=" instead.
1520 file(TO_NATIVE_PATH ${CMAKE_CTEST_COMMAND} WINDOWS_CTEST_COMMAND)
1522 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/tmp/verify_tests.bat
1526 \"${WINDOWS_CTEST_COMMAND}\"
1529 message(STATUS "${WINDOWS_CTEST_COMMAND}")
1531 file(COPY ${CMAKE_CURRENT_BINARY_DIR}/tmp/verify_tests.bat
1532 DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
1539 WORLD_READ WORLD_EXECUTE)
1542 "${CMAKE_CURRENT_BINARY_DIR}/verify_tests.bat" VERIFY_PATH)
1544 add_custom_target(verify COMMAND "${VERIFY_PATH}"
1545 DEPENDS event ${ALL_TESTPROGS})
1547 # On some platforms doing exec(unset) as CMake doesn't work, so make sure
1548 # we run the unset command in a shell instead.
1549 # First we write the script contents.
1550 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/tmp/verify_tests.sh
1553 unset EVENT_NOEPOLL; unset EVENT_NOPOLL; unset EVENT_NOSELECT; unset EVENT_NOWIN32; unset EVENT_NOEVPORT; unset EVENT_NOKQUEUE; unset EVENT_NODEVPOLL
1554 ${CMAKE_CTEST_COMMAND}
1557 # Then we copy the file (this allows us to set execute permission on it)
1558 file(COPY ${CMAKE_CURRENT_BINARY_DIR}/tmp/verify_tests.sh
1559 DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
1569 # Create the target that runs the script.
1570 add_custom_target(verify
1571 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/verify_tests.sh
1572 DEPENDS event ${ALL_TESTPROGS})
1575 if (NOT EVENT__DISABLE_REGRESS AND __FOUND_USABLE_PYTHON)
1576 add_dependencies(verify regress)
1579 if (EVENT__COVERAGE)
1580 include(CodeCoverage)
1582 setup_target_for_coverage(
1583 verify_coverage # Coverage target name "make verify_coverage"
1585 coverage # Output directory.
1586 verify) # Arguments passed to test runner. "make verify"
1595 # Installation preparation.
1598 set(EVENT_INSTALL_CMAKE_DIR
1599 "${CMAKE_INSTALL_PREFIX}/lib/cmake/libevent")
1601 export(PACKAGE libevent)
1603 function(gen_package_config forinstall)
1605 set(CONFIG_FOR_INSTALL_TREE 1)
1606 set(dir "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}")
1608 set(CONFIG_FOR_INSTALL_TREE 0)
1609 set(dir "${PROJECT_BINARY_DIR}")
1611 configure_file(${PROJECT_SOURCE_DIR}/cmake/LibeventConfig.cmake.in
1612 "${dir}/LibeventConfig.cmake"
1616 # Generate the config file for the build-tree.
1617 set(EVENT__INCLUDE_DIRS
1618 "${PROJECT_SOURCE_DIR}/include"
1619 "${PROJECT_BINARY_DIR}/include")
1621 set(LIBEVENT_INCLUDE_DIRS
1622 ${EVENT__INCLUDE_DIRS}
1623 CACHE PATH "Libevent include directories")
1625 gen_package_config(0)
1627 # Generate the config file for the installation tree.
1628 gen_package_config(1)
1630 # Generate version info for both build-tree and install-tree.
1631 configure_file(${PROJECT_SOURCE_DIR}/cmake/LibeventConfigVersion.cmake.in
1632 ${PROJECT_BINARY_DIR}/LibeventConfigVersion.cmake
1635 # Install compat headers
1636 install(FILES ${HDR_COMPAT}
1637 DESTINATION "include"
1640 # Install public headers
1641 install(FILES ${HDR_PUBLIC}
1642 DESTINATION "include/event2"
1645 # Install the configs.
1647 ${PROJECT_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/LibeventConfig.cmake
1648 ${PROJECT_BINARY_DIR}/LibeventConfigVersion.cmake
1649 DESTINATION "${EVENT_INSTALL_CMAKE_DIR}"
1652 # Install exports for the install-tree.
1653 macro(install_export type)
1654 install(EXPORT LibeventTargets-${type}
1655 NAMESPACE ${PROJECT_NAME}::
1656 DESTINATION "${EVENT_INSTALL_CMAKE_DIR}"
1660 if (${EVENT_LIBRARY_STATIC})
1661 install_export(static)
1663 if (${EVENT_LIBRARY_SHARED})
1664 install_export(shared)
1667 # Install the scripts.
1669 ${CMAKE_CURRENT_SOURCE_DIR}/event_rpcgen.py
1673 # Create documents with doxygen.
1674 option(EVENT__DOXYGEN
1675 "Enables doxygen documentation" OFF)
1682 if (NOT TARGET uninstall)
1683 # Create the uninstall target.
1684 # https://gitlab.kitware.com/cmake/community/wikis/FAQ#can-i-do-make-uninstall-with-cmake
1685 configure_file(${PROJECT_SOURCE_DIR}/cmake/Uninstall.cmake.in
1686 ${PROJECT_BINARY_DIR}/Uninstall.cmake
1689 add_custom_target(uninstall
1690 COMMAND ${CMAKE_COMMAND} -P ${PROJECT_BINARY_DIR}/Uninstall.cmake)
1694 message(STATUS " ---( Libevent " ${EVENT_VERSION} " )---")
1696 message(STATUS "Available event backends: ${BACKENDS}")
1697 message(STATUS "CMAKE_BINARY_DIR: ${CMAKE_BINARY_DIR}")
1698 message(STATUS "CMAKE_CURRENT_BINARY_DIR: ${CMAKE_CURRENT_BINARY_DIR}")
1699 message(STATUS "CMAKE_SOURCE_DIR: ${CMAKE_SOURCE_DIR}")
1700 message(STATUS "CMAKE_CURRENT_SOURCE_DIR: ${CMAKE_CURRENT_SOURCE_DIR}")
1701 message(STATUS "PROJECT_BINARY_DIR: ${PROJECT_BINARY_DIR}")
1702 message(STATUS "PROJECT_SOURCE_DIR: ${PROJECT_SOURCE_DIR}")
1703 message(STATUS "CMAKE_MODULE_PATH: ${CMAKE_MODULE_PATH}")
1704 message(STATUS "CMAKE_COMMAND: ${CMAKE_COMMAND}")
1705 message(STATUS "CMAKE_ROOT: ${CMAKE_ROOT}")
1706 message(STATUS "CMAKE_SYSTEM: ${CMAKE_SYSTEM}")
1707 message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}")
1708 message(STATUS "CMAKE_SYSTEM_VERSION: ${CMAKE_SYSTEM_VERSION}")
1709 message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
1710 message(STATUS "CMAKE_SKIP_RPATH: ${CMAKE_SKIP_RPATH}")
1711 message(STATUS "CMAKE_SKIP_INSTALL_RPATH: ${CMAKE_SKIP_INSTALL_RPATH}")
1712 message(STATUS "CMAKE_INSTALL_RPATH: ${CMAKE_INSTALL_RPATH}")
1713 message(STATUS "CMAKE_VERBOSE_MAKEFILE: ${CMAKE_VERBOSE_MAKEFILE}")
1714 message(STATUS "CMAKE_C_FLAGS: ${CMAKE_C_FLAGS}")
1715 message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
1716 message(STATUS "CMAKE_C_COMPILER: ${CMAKE_C_COMPILER} (id ${CMAKE_C_COMPILER_ID}, clang ${CLANG}, GNUC ${GNUC}, version ${CMAKE_C_COMPILER_VERSION})")
1717 message(STATUS "CMAKE_AR: ${CMAKE_AR}")
1718 message(STATUS "CMAKE_RANLIB: ${CMAKE_RANLIB}")
1719 message(STATUS "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")