diff options
Diffstat (limited to 'cmake')
| -rw-r--r-- | cmake/AddEventLibrary.cmake | 104 | ||||
| -rw-r--r-- | cmake/CheckFunctionExistsEx.c | 28 | ||||
| -rw-r--r-- | cmake/CheckFunctionExistsEx.cmake | 69 | ||||
| -rw-r--r-- | cmake/FindGit.cmake | 45 | ||||
| -rw-r--r-- | cmake/LibeventConfig.cmake.in | 181 | ||||
| -rw-r--r-- | cmake/LibeventConfigBuildTree.cmake.in | 17 | ||||
| -rw-r--r-- | cmake/Macros.cmake | 36 | ||||
| -rw-r--r-- | cmake/Uninstall.cmake.in | 23 | ||||
| -rw-r--r-- | cmake/UseDoxygen.cmake | 111 | ||||
| -rw-r--r-- | cmake/VersionViaGit.cmake | 8 |
10 files changed, 415 insertions, 207 deletions
diff --git a/cmake/AddEventLibrary.cmake b/cmake/AddEventLibrary.cmake index 352c86b..04f5837 100644 --- a/cmake/AddEventLibrary.cmake +++ b/cmake/AddEventLibrary.cmake @@ -35,6 +35,45 @@ macro(generate_pkgconfig LIB_NAME) ) endmacro() +# LIB_NAME maybe event_core, event_extra, event_openssl, event_pthreads or event. +# Targets whose LIB_NAME is not 'event' should be exported and installed. +macro(export_install_target TYPE LIB_NAME OUTER_INCLUDES) + if("${LIB_NAME}" STREQUAL "event") + install(TARGETS "${LIB_NAME}_${TYPE}" + LIBRARY DESTINATION "lib" COMPONENT lib + ARCHIVE DESTINATION "lib" COMPONENT lib + RUNTIME DESTINATION "lib" COMPONENT lib + COMPONENT dev + ) + else() + string(REPLACE "event_" "" PURE_NAME ${LIB_NAME}) + string(TOUPPER ${TYPE} UPPER_TYPE) + list(APPEND LIBEVENT_${UPPER_TYPE}_LIBRARIES "${PURE_NAME}") + set(OUTER_INCS) + if (NOT "${OUTER_INCLUDES}" STREQUAL "NONE") + set(OUTER_INCS ${OUTER_INCLUDES}) + endif() + target_include_directories("${LIB_NAME}_${TYPE}" + PUBLIC "$<INSTALL_INTERFACE:include>" + "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>" + "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>" + ${OUTER_INCS} + ) + set_target_properties("${LIB_NAME}_${TYPE}" PROPERTIES EXPORT_NAME ${PURE_NAME}) + export(TARGETS "${LIB_NAME}_${TYPE}" + NAMESPACE ${PROJECT_NAME}:: + FILE "${PROJECT_BINARY_DIR}/LibeventTargets-${TYPE}.cmake" + APPEND + ) + install(TARGETS "${LIB_NAME}_${TYPE}" + EXPORT LibeventTargets-${TYPE} + LIBRARY DESTINATION "lib" COMPONENT lib + ARCHIVE DESTINATION "lib" COMPONENT lib + RUNTIME DESTINATION "lib" COMPONENT lib + COMPONENT dev + ) + endif() +endmacro() # Global variables that it uses: # - EVENT_ABI_LIBVERSION @@ -44,8 +83,6 @@ endmacro() # - EVENT_PACKAGE_RELEASE # - CMAKE_THREAD_LIBS_INIT LIB_PLATFORM # - OPENSSL_LIBRARIES -# - HDR_PUBLIC -# - EVENT_INSTALL_INCLUDE_DIR # - EVENT_SHARED_FLAGS # - EVENT_LIBRARY_STATIC # - EVENT_LIBRARY_SHARED @@ -57,11 +94,13 @@ macro(add_event_library LIB_NAME) cmake_parse_arguments(LIB "" # Options "VERSION" # One val - "SOURCES;LIBRARIES" # Multi val + "SOURCES;LIBRARIES;INNER_LIBRARIES;OUTER_INCLUDES" # Multi val ${ARGN} ) - set(ADD_EVENT_LIBRARY_TARGETS) + if ("${LIB_OUTER_INCLUDES}" STREQUAL "") + set(LIB_OUTER_INCLUDES NONE) + endif() set(ADD_EVENT_LIBRARY_INTERFACE) if (${EVENT_LIBRARY_STATIC}) @@ -69,12 +108,17 @@ macro(add_event_library LIB_NAME) set_target_properties("${LIB_NAME}_static" PROPERTIES OUTPUT_NAME "${LIB_NAME}" CLEAN_DIRECT_OUTPUT 1) - set_target_properties( - "${LIB_NAME}_static" PROPERTIES - PUBLIC_HEADER "${HDR_PUBLIC}") - list(APPEND LIBEVENT_STATIC_LIBRARIES "${LIB_NAME}_static") - list(APPEND ADD_EVENT_LIBRARY_TARGETS "${LIB_NAME}_static") + if(LIB_INNER_LIBRARIES) + set(INNER_LIBRARIES "${LIB_INNER_LIBRARIES}_static") + endif() + target_link_libraries("${LIB_NAME}_static" + ${CMAKE_THREAD_LIBS_INIT} + ${LIB_PLATFORM} + ${INNER_LIBRARIES} + ${LIB_LIBRARIES}) + + export_install_target(static "${LIB_NAME}" "${LIB_OUTER_INCLUDES}") set(ADD_EVENT_LIBRARY_INTERFACE "${LIB_NAME}_static") endif() @@ -82,9 +126,13 @@ macro(add_event_library LIB_NAME) if (${EVENT_LIBRARY_SHARED}) add_library("${LIB_NAME}_shared" SHARED ${LIB_SOURCES}) + if(LIB_INNER_LIBRARIES) + set(INNER_LIBRARIES "${LIB_INNER_LIBRARIES}_shared") + endif() target_link_libraries("${LIB_NAME}_shared" ${CMAKE_THREAD_LIBS_INIT} ${LIB_PLATFORM} + ${INNER_LIBRARIES} ${LIB_LIBRARIES}) if (EVENT_SHARED_FLAGS) @@ -110,14 +158,10 @@ macro(add_event_library LIB_NAME) "${LIB_NAME}_shared" PROPERTIES OUTPUT_NAME "${LIB_NAME}-${EVENT_PACKAGE_RELEASE}" VERSION "${CURRENT_MINUS_AGE}.${EVENT_ABI_LIBVERSION_AGE}.${EVENT_ABI_LIBVERSION_REVISION}" - SOVERSION "${CURRENT_MINUS_AGE}") + SOVERSION "${CURRENT_MINUS_AGE}" + INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") endif() - set_target_properties( - "${LIB_NAME}_shared" PROPERTIES - PUBLIC_HEADER "${HDR_PUBLIC}" - CLEAN_DIRECT_OUTPUT 1) - if (NOT WIN32) set(LIB_LINK_NAME "${CMAKE_SHARED_LIBRARY_PREFIX}${LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}") @@ -127,33 +171,19 @@ macro(add_event_library LIB_NAME) COMMAND ${CMAKE_COMMAND} -E create_symlink "$<TARGET_FILE_NAME:${LIB_NAME}_shared>" "${LIB_LINK_NAME}" - WORKING_DIRECTORY "lib") + WORKING_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") endif() - list(APPEND LIBEVENT_SHARED_LIBRARIES "${LIB_NAME}_shared") - list(APPEND ADD_EVENT_LIBRARY_TARGETS "${LIB_NAME}_shared") + export_install_target(shared "${LIB_NAME}" "${LIB_OUTER_INCLUDES}") set(ADD_EVENT_LIBRARY_INTERFACE "${LIB_NAME}_shared") - endif() - export(TARGETS ${ADD_EVENT_LIBRARY_TARGETS} - FILE "${PROJECT_BINARY_DIR}/LibeventTargets.cmake" - APPEND - ) - - install(TARGETS ${ADD_EVENT_LIBRARY_TARGETS} - EXPORT LibeventTargets - LIBRARY DESTINATION "lib" COMPONENT lib - ARCHIVE DESTINATION "lib" COMPONENT lib - RUNTIME DESTINATION "lib" COMPONENT lib - PUBLIC_HEADER DESTINATION "include/event2" - COMPONENT dev - ) - if (NOT WIN32 AND ${EVENT_LIBRARY_SHARED}) - install(FILES - "$<TARGET_FILE_DIR:${LIB_NAME}_shared>/${LIB_LINK_NAME}" - DESTINATION "lib" - COMPONENT lib) + if (NOT WIN32) + install(FILES + "$<TARGET_FILE_DIR:${LIB_NAME}_shared>/${LIB_LINK_NAME}" + DESTINATION "lib" + COMPONENT lib) + endif() endif() add_library(${LIB_NAME} INTERFACE) diff --git a/cmake/CheckFunctionExistsEx.c b/cmake/CheckFunctionExistsEx.c deleted file mode 100644 index 224e340..0000000 --- a/cmake/CheckFunctionExistsEx.c +++ /dev/null @@ -1,28 +0,0 @@ -#ifdef CHECK_FUNCTION_EXISTS - -#ifdef __cplusplus -extern "C" -#endif - char - CHECK_FUNCTION_EXISTS(void); -#ifdef __CLASSIC_C__ -int main() -{ - int ac; - char* av[]; -#else -int main(int ac, char* av[]) -{ -#endif - CHECK_FUNCTION_EXISTS(); - if (ac > 1000) { - return *av[0]; - } - return 0; -} - -#else /* CHECK_FUNCTION_EXISTS */ - -#error "CHECK_FUNCTION_EXISTS has to specify the function" - -#endif /* CHECK_FUNCTION_EXISTS */ diff --git a/cmake/CheckFunctionExistsEx.cmake b/cmake/CheckFunctionExistsEx.cmake deleted file mode 100644 index 78bc2ec..0000000 --- a/cmake/CheckFunctionExistsEx.cmake +++ /dev/null @@ -1,69 +0,0 @@ -# - Check if a C function can be linked -# CHECK_FUNCTION_EXISTS(<function> <variable>) -# -# Check that the <function> is provided by libraries on the system and -# store the result in a <variable>. This does not verify that any -# system header file declares the function, only that it can be found -# at link time (considure using CheckSymbolExists). -# -# The following variables may be set before calling this macro to -# modify the way the check is run: -# -# CMAKE_REQUIRED_FLAGS = string of compile command line flags -# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) -# CMAKE_REQUIRED_INCLUDES = list of include directories -# CMAKE_REQUIRED_LIBRARIES = list of libraries to link - -#============================================================================= -# Copyright 2002-2011 Kitware, Inc. -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - -MACRO(CHECK_FUNCTION_EXISTS_EX FUNCTION VARIABLE) - IF(${VARIABLE} MATCHES "^${VARIABLE}$") - SET(MACRO_CHECK_FUNCTION_DEFINITIONS - "-DCHECK_FUNCTION_EXISTS=${FUNCTION} ${CMAKE_REQUIRED_FLAGS}") - MESSAGE(STATUS "Looking for ${FUNCTION}") - IF(CMAKE_REQUIRED_LIBRARIES) - SET(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES - "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}") - ELSE(CMAKE_REQUIRED_LIBRARIES) - SET(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES) - ENDIF(CMAKE_REQUIRED_LIBRARIES) - IF(CMAKE_REQUIRED_INCLUDES) - SET(CHECK_FUNCTION_EXISTS_ADD_INCLUDES - "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") - ELSE(CMAKE_REQUIRED_INCLUDES) - SET(CHECK_FUNCTION_EXISTS_ADD_INCLUDES) - ENDIF(CMAKE_REQUIRED_INCLUDES) - TRY_COMPILE(${VARIABLE} - ${CMAKE_BINARY_DIR} - ${PROJECT_SOURCE_DIR}/cmake/CheckFunctionExistsEx.c - COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} - CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS} - "${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES}" - "${CHECK_FUNCTION_EXISTS_ADD_INCLUDES}" - OUTPUT_VARIABLE OUTPUT) - IF(${VARIABLE}) - SET(${VARIABLE} 1 CACHE INTERNAL "Have function ${FUNCTION}") - MESSAGE(STATUS "Looking for ${FUNCTION} - found") - FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log - "Determining if the function ${FUNCTION} exists passed with the following output:\n" - "${OUTPUT}\n\n") - ELSE(${VARIABLE}) - MESSAGE(STATUS "Looking for ${FUNCTION} - not found") - SET(${VARIABLE} "" CACHE INTERNAL "Have function ${FUNCTION}") - FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log - "Determining if the function ${FUNCTION} exists failed with the following output:\n" - "${OUTPUT}\n\n") - ENDIF(${VARIABLE}) - ENDIF() -ENDMACRO(CHECK_FUNCTION_EXISTS_EX) diff --git a/cmake/FindGit.cmake b/cmake/FindGit.cmake deleted file mode 100644 index 2abbfe4..0000000 --- a/cmake/FindGit.cmake +++ /dev/null @@ -1,45 +0,0 @@ -# The module defines the following variables: -# GIT_EXECUTABLE - path to git command line client -# GIT_FOUND - true if the command line client was found -# Example usage: -# find_package(Git) -# if(GIT_FOUND) -# message("git found: ${GIT_EXECUTABLE}") -# endif() - -#============================================================================= -# Copyright 2010 Kitware, Inc. -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distributed this file outside of CMake, substitute the full -# License text for the above reference.) - -# Look for 'git' or 'eg' (easy git) -set(git_names git eg) - -# Prefer .cmd variants on Windows unless running in a Makefile -# in the MSYS shell. -if(WIN32) - if(NOT CMAKE_GENERATOR MATCHES "MSYS") - set(git_names git.cmd git eg.cmd eg) - endif() -endif() - -find_program(GIT_EXECUTABLE - NAMES ${git_names} - DOC "git command line client") - -mark_as_advanced(GIT_EXECUTABLE) - -# Handle the QUIETLY and REQUIRED arguments and set GIT_FOUND to TRUE if -# all listed variables are TRUE - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Git DEFAULT_MSG GIT_EXECUTABLE) - diff --git a/cmake/LibeventConfig.cmake.in b/cmake/LibeventConfig.cmake.in index 5422336..7b808c3 100644 --- a/cmake/LibeventConfig.cmake.in +++ b/cmake/LibeventConfig.cmake.in @@ -1,18 +1,183 @@ # - Config file for the Libevent package # It defines the following variables -# LIBEVENT_INCLUDE_DIRS - include directories +# LIBEVENT_FOUND - true if libevent and all required components found on the system +# LIBEVENT_xxx_FOUND - true if component xxx(see available components) found on the system +# LIBEVENT_VERSION - libevent version in format Major.Minor.Patch +# LIBEVENT_INCLUDE_DIRS - directories where libevent header is located. +# LIBEVENT_INCLUDE_DIR - same as DIRS +# LIBEVENT_LIBRARIES - libevent library to link against. +# LIBEVENT_LIBRARY - same as LIBRARIES +# +# These variables are deprecated, don't use them. # LIBEVENT_STATIC_LIBRARIES - libraries to link against (archive/static) # LIBEVENT_SHARED_LIBRARIES - libraries to link against (shared) +# +# When you try to locate the libevent libraries, you should specify which components you want to use. +# The following table lists all available components. If none is given, all imported targets will used. +# core - the core functons of libevent +# extra - extra functions, contains http, dns and rpc +# pthreads - multiple threads for libevent, not exists on Windows +# openssl - openssl support for libevent +# +# By default, the shared libraries of libevent will be found. To find the static ones instead, +# you must set the LIBEVENT_STATIC_LINK variable to TRUE before calling find_package(Libevent ...). +# If no component provided, all components will be used. +# example: +# set(LIBEVENT_STATIC_LINK TRUE) +# find_package(Libevent 2.2 REQUIRED COMPONENTS core) +# include_directories(${LIBEVENT_INCLUDE_DIRS}) # Can be omitted +# target_link_libraries(myapp ${LIBEVENT_LIBRARIES}) +# or target_link_libraries(myapp libevent::core) +# +# find_package() can handle dependencies automatically. For example, given the 'openssl' component, +# all dependencies (libevent_core, libssl, libcrypto and openssl include directories) will be found. -# Get the path of the current file. -get_filename_component(LIBEVENT_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) - -# Set the include directories. -set(LIBEVENT_INCLUDE_DIRS "@EVENT_INSTALL_INCLUDE_DIR@") +set(CONFIG_FOR_INSTALL_TREE @CONFIG_FOR_INSTALL_TREE@) -# Include the project Targets file, this contains definitions for IMPORTED targets. -include(${LIBEVENT_CMAKE_DIR}/LibeventTargets.cmake) +set(LIBEVENT_VERSION @EVENT_PACKAGE_VERSION@) # IMPORTED targets from LibeventTargets.cmake set(LIBEVENT_STATIC_LIBRARIES "@LIBEVENT_STATIC_LIBRARIES@") set(LIBEVENT_SHARED_LIBRARIES "@LIBEVENT_SHARED_LIBRARIES@") + +# Default to the same type as libevent was built: +if(NOT DEFINED LIBEVENT_STATIC_LINK) + set(LIBEVENT_STATIC_LINK NOT @EVENT_LIBRARY_SHARED@) +endif() + +set(CMAKE_FIND_LIBRARY_SUFFIXES_SAVE "${CMAKE_FIND_LIBRARY_SUFFIXES}") +if(${LIBEVENT_STATIC_LINK}) + set(_LIB_TYPE static) + set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX}) + set(_AVAILABLE_LIBS "${LIBEVENT_STATIC_LIBRARIES}") +else() + set(_LIB_TYPE shared) + set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_LIBRARY_SUFFIX}) + set(_AVAILABLE_LIBS "${LIBEVENT_SHARED_LIBRARIES}") +endif() + +# Get the path of the current file. +get_filename_component(LIBEVENT_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_INSTALL_PREFIX "${LIBEVENT_CMAKE_DIR}/../../.." ABSOLUTE) + +macro(message_if_needed _flag _msg) + if (NOT ${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY) + message(${_flag} "${_msg}") + endif() +endmacro() + +macro(no_component_msg _comp) + if(${CMAKE_FIND_PACKAGE_NAME}_FIND_REQUIRED_${_comp}) + set(pthreadlib) + if(NOT WIN32) + set(pthreadlib ", pthreads") + endif() + message(FATAL_ERROR "Your libevent library does not contain a ${_comp} component!\n" + "The valid components are core, extra${pthreadlib} and openssl.") + else() + message_if_needed(WARNING "Your libevent library does not contain a ${_comp} component!") + endif() +endmacro() + +set(_EVENT_COMPONENTS) +if(${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS) + list(REMOVE_DUPLICATES ${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS) + foreach(_comp ${${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS}) + list(FIND _AVAILABLE_LIBS ${_comp} _INDEX) + if(_INDEX GREATER -1) + list(APPEND _EVENT_COMPONENTS ${_comp}) + else() + no_component_msg(${_comp}) + endif() + endforeach() +else() + set(_EVENT_COMPONENTS ${_AVAILABLE_LIBS}) +endif() + +set(_POSSIBLE_PKG_NAMES) +list(APPEND _POSSIBLE_PKG_NAMES ${CMAKE_FIND_PACKAGE_NAME} LIBEVENT Libevent libevent) +list(REMOVE_DUPLICATES _POSSIBLE_PKG_NAMES) + +macro(set_case_insensitive_found _comp) + foreach(name ${_POSSIBLE_PKG_NAMES}) + if("${_comp}" STREQUAL "") + set(${name}_FOUND TRUE) + set(${name}_NOTFOUND FALSE) + else() + set(${name}_${_comp}_FOUND TRUE) + set(${name}_${_comp}_NOTFOUND FALSE) + endif() + endforeach() +endmacro() + +if(CONFIG_FOR_INSTALL_TREE) + ## Config for install tree ---------------------------------------- + # Find includes + unset(_event_h CACHE) + find_path(_event_h + NAMES event2/event.h + PATHS "${_INSTALL_PREFIX}/include" + NO_DEFAULT_PATH) + if(_event_h) + set(LIBEVENT_INCLUDE_DIRS "${_event_h}") + message_if_needed(STATUS "Found libevent include directory: ${_event_h}") + else() + message_if_needed(WARNING "Your libevent library does not contain header files!") + endif() + + # Find libraries + macro(find_event_lib _comp) + unset(_event_lib CACHE) + find_library(_event_lib + NAMES "event_${_comp}" + PATHS "${_INSTALL_PREFIX}/lib" + NO_DEFAULT_PATH) + if(_event_lib) + list(APPEND LIBEVENT_LIBRARIES "libevent::${_comp}") + set_case_insensitive_found(${_comp}) + message_if_needed(STATUS "Found libevent component: ${_event_lib}") + else() + no_component_msg(${_comp}) + endif() + endmacro() + + foreach(comp ${_EVENT_COMPONENTS}) + find_event_lib(${comp}) + endforeach() +else() + ## Config for build tree ---------------------------------------- + set(LIBEVENT_INCLUDE_DIRS "@EVENT__INCLUDE_DIRS@") + foreach(_comp ${_EVENT_COMPONENTS}) + list(APPEND LIBEVENT_LIBRARIES "libevent::${_comp}") + set_case_insensitive_found(${_comp}) + endforeach() +endif() + +set(LIBEVENT_INCLUDE_DIR ${LIBEVENT_INCLUDE_DIRS}) +if(LIBEVENT_LIBRARIES) + set(LIBEVENT_LIBRARY ${LIBEVENT_LIBRARIES}) + if(CONFIG_FOR_INSTALL_TREE) + message_if_needed(STATUS "Found libevent ${LIBEVENT_VERSION} in ${_INSTALL_PREFIX}") + else() + message_if_needed(STATUS "Found libevent ${LIBEVENT_VERSION} in ${LIBEVENT_CMAKE_DIR}") + endif() + + # Avoid including targets more than one times + if(NOT TARGET event_core_${_LIB_TYPE}) + # Include the project Targets file, this contains definitions for IMPORTED targets. + include(${LIBEVENT_CMAKE_DIR}/LibeventTargets-${_LIB_TYPE}.cmake) + endif() +else() + if(${CMAKE_FIND_PACKAGE_NAME}_FIND_REQUIRED) + message(FATAL_ERROR "Can not find any libraries for libevent.") + else() + message_if_needed(WARNING "Can not find any libraries for libevent.") + endif() +endif() + +set(CMAKE_FIND_LIBRARY_SUFFIXES "${CMAKE_FIND_LIBRARY_SUFFIXES_SAVE}") +unset(_LIB_TYPE) +unset(_AVAILABLE_LIBS) +unset(_EVENT_COMPONENTS) +unset(_POSSIBLE_PKG_NAMES) +unset(_INSTALL_PREFIX) diff --git a/cmake/LibeventConfigBuildTree.cmake.in b/cmake/LibeventConfigBuildTree.cmake.in deleted file mode 100644 index 02edef3..0000000 --- a/cmake/LibeventConfigBuildTree.cmake.in +++ /dev/null @@ -1,17 +0,0 @@ -# - Config file for the Libevent package -# It defines the following variables -# LIBEVENT_INCLUDE_DIRS - include directories for FooBar -# LIBEVENT_LIBRARIES - libraries to link against - -# Get the path of the current file. -get_filename_component(LIBEVENT_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) - -# Set the include directories. -set(LIBEVENT_INCLUDE_DIRS "@EVENT__INCLUDE_DIRS@") - -# Include the project Targets file, this contains definitions for IMPORTED targets. -include(${LIBEVENT_CMAKE_DIR}/LibeventTargets.cmake) - -# IMPORTED targets from LibeventTargets.cmake -set(LIBEVENT_LIBRARIES event event_core event_extra) - diff --git a/cmake/Macros.cmake b/cmake/Macros.cmake new file mode 100644 index 0000000..e480bbf --- /dev/null +++ b/cmake/Macros.cmake @@ -0,0 +1,36 @@ +include(CheckSymbolExists) +include(CheckIncludeFiles) + +# Check if each symbol in the symbol list exists, +# and define PREFIX__HAVE_SYMNAME to 1 if yes. +# +# SYMLIST: list of symbols to check +# HEADERS: header files to be included in check code +# PREFIX: the prefix of definition +macro(CHECK_SYMBOLS_EXIST SYMLIST HEADERS PREFIX) + foreach(SYMNAME ${SYMLIST}) + string(TOUPPER "${SYMNAME}" SYMNAME_UPPER) + if ("${PREFIX}" STREQUAL "") + set(HAVE_SYM_DEF "HAVE_${SYMNAME_UPPER}") + else() + set(HAVE_SYM_DEF "${PREFIX}__HAVE_${SYMNAME_UPPER}") + endif() + CHECK_SYMBOL_EXISTS(${SYMNAME} "${HEADERS}" ${HAVE_SYM_DEF}) + endforeach() +endmacro() + +# Check if file exists, define PREFIX__HAVE_FILE to 1 if yes, +# and collect file to EVENT_INCLUDES +macro(CHECK_INCLUDE_FILE_CONCAT FILE PREFIX) + string(REGEX REPLACE "[./]" "_" FILE_UL ${FILE}) + string(TOUPPER "${FILE_UL}" FILE_UL_UPPER) + if ("${PREFIX}" STREQUAL "") + set(HAVE_FILE_DEF "HAVE_${FILE_UL_UPPER}") + else() + set(HAVE_FILE_DEF "${PREFIX}__HAVE_${FILE_UL_UPPER}") + endif() + CHECK_INCLUDE_FILES("${EVENT_INCLUDES};${FILE}" ${HAVE_FILE_DEF}) + if(${HAVE_FILE_DEF}) + set(EVENT_INCLUDES ${EVENT_INCLUDES} ${FILE}) + endif() +endmacro() diff --git a/cmake/Uninstall.cmake.in b/cmake/Uninstall.cmake.in new file mode 100644 index 0000000..c6dc09e --- /dev/null +++ b/cmake/Uninstall.cmake.in @@ -0,0 +1,23 @@ +# https://gitlab.kitware.com/cmake/community/wikis/FAQ#can-i-do-make-uninstall-with-cmake + +if(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt") + message(FATAL_ERROR "Cannot find install manifest: @CMAKE_BINARY_DIR@/install_manifest.txt") +endif(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt") + +file(READ "@CMAKE_BINARY_DIR@/install_manifest.txt" files) +string(REGEX REPLACE "\n" ";" files "${files}") +foreach(file ${files}) + message(STATUS "Uninstalling $ENV{DESTDIR}${file}") + if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + exec_program( + "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" + OUTPUT_VARIABLE rm_out + RETURN_VALUE rm_retval + ) + if(NOT "${rm_retval}" STREQUAL 0) + message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") + endif(NOT "${rm_retval}" STREQUAL 0) + else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + message(STATUS "File $ENV{DESTDIR}${file} does not exist.") + endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") +endforeach(file) diff --git a/cmake/UseDoxygen.cmake b/cmake/UseDoxygen.cmake new file mode 100644 index 0000000..3b60d5a --- /dev/null +++ b/cmake/UseDoxygen.cmake @@ -0,0 +1,111 @@ +# Use FindDoxygen.cmake to generate documentation. + +option(DOXYGEN_GENERATE_HTML "Generate HTML" ON) +option(DOXYGEN_GENERATE_MAN "Generate man pages" OFF) +option(DOXYGEN_MAN_LINKS "Generate man links" ON) +option(DOXYGEN_GENERATE_LATEX "Generate LaTeX" OFF) + +# If the case-insensitive value of the cmake option is one of +# "off, no, false" or 0, it is equal to false, otherwise true. +# And the values of the doxygen config does not exactly match it. +# So we need to convert the cmake option to a doxygen config. +macro(_convert_to_dx_cfg CMK_OPTION) + if (${CMK_OPTION}) + set(${CMK_OPTION} YES) + else() + set(${CMK_OPTION} NO) + endif() +endmacro() + +macro(UseDoxygen) + if (${CMAKE_VERSION} VERSION_LESS "3.9") + # Old versions of cmake have poor support for Doxygen generation. + message(FATAL_ERROR "Doxygen generation only enabled for cmake 3.9 and higher") + else() + find_package(Doxygen) + if (DOXYGEN_FOUND) + set(DOXYGEN_PROJECT_NAME ${PROJECT_NAME}) + set(DOXYGEN_PROJECT_NUMBER ${EVENT_PACKAGE_VERSION}) + set(DOXYGEN_PROJECT_BRIEF "Event notification library") + set(DOXYGEN_OUTPUT_DIRECTORY doxygen) + set(DOXYGEN_STRIP_FROM_PATH include) + set(DOXYGEN_JAVADOC_AUTOBRIEF YES) + set(DOXYGEN_OPTIMIZE_OUTPUT_FOR_C YES) + set(DOXYGEN_SORT_BRIEF_DOCS YES) + set(DOXYGEN_RECURSIVE NO) + + _convert_to_dx_cfg(DOXYGEN_GENERATE_HTML) + _convert_to_dx_cfg(DOXYGEN_GENERATE_MAN) + _convert_to_dx_cfg(DOXYGEN_MAN_LINKS) + _convert_to_dx_cfg(DOXYGEN_GENERATE_LATEX) + + set(DOXYGEN_LATEX_CMD_NAME latex) + set(DOXYGEN_PAPER_TYPE a4wide) + set(DOXYGEN_PDF_HYPERLINKS NO) + + set(DOXYGEN_GENERATE_RTF NO) + set(DOXYGEN_GENERATE_XML NO) + set(DOXYGEN_GENERATE_CHI NO) + + set(DOXYGEN_PREDEFINED TAILQ_ENTRY + RB_ENTRY + EVENT_DEFINED_TQENTRY_ + EVENT_IN_DOXYGEN_ + ) + + set(DOX_INPUT include/event2/buffer.h + include/event2/buffer_compat.h + include/event2/bufferevent.h + include/event2/bufferevent_compat.h + include/event2/bufferevent_ssl.h + include/event2/dns.h + include/event2/dns_compat.h + include/event2/event.h + include/event2/event_compat.h + include/event2/http.h + include/event2/http_compat.h + include/event2/listener.h + include/event2/rpc.h + include/event2/rpc_compat.h + include/event2/tag.h + include/event2/tag_compat.h + include/event2/thread.h + include/event2/util.h + ) + # Add 'doxygen' target + doxygen_add_docs(doxygen + ${DOX_INPUT} + ALL + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMENT "Generating doxygen documentation for ${PROJECT_NAME}..." + ) + + # Use 'make clean' to remove the generated directory + set_property(DIRECTORY + PROPERTY ADDITIONAL_MAKE_CLEAN_FILES + "${PROJECT_BINARY_DIR}/${DOXYGEN_OUTPUT_DIRECTORY}" + ) + + # Install html into <prefix>/share/doc/<project> + if ("${DOXYGEN_GENERATE_HTML}" STREQUAL "YES") + install(DIRECTORY + ${PROJECT_BINARY_DIR}/${DOXYGEN_OUTPUT_DIRECTORY}/html + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME} + COMPONENT doc + ) + endif() + + # Install manual into <prefix>/share/man/man3 + if ("${DOXYGEN_GENERATE_MAN}" STREQUAL "YES") + install(DIRECTORY + ${PROJECT_BINARY_DIR}/${DOXYGEN_OUTPUT_DIRECTORY}/man/man3 + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man + COMPONENT doc + ) + endif() + + else(DOXYGEN_FOUND) + message(FATAL_ERROR "Doxygen command not found, set EVENT__DOXYGEN to disable") + endif (DOXYGEN_FOUND) + endif() +endmacro() diff --git a/cmake/VersionViaGit.cmake b/cmake/VersionViaGit.cmake index 504980a..24eb6af 100644 --- a/cmake/VersionViaGit.cmake +++ b/cmake/VersionViaGit.cmake @@ -23,7 +23,7 @@ macro(event_fuzzy_version_from_git) # set our defaults. set(EVENT_GIT___VERSION_MAJOR 2) set(EVENT_GIT___VERSION_MINOR 1) - set(EVENT_GIT___VERSION_PATCH 11) + set(EVENT_GIT___VERSION_PATCH 12) set(EVENT_GIT___VERSION_STAGE "stable") find_package(Git) @@ -31,7 +31,7 @@ macro(event_fuzzy_version_from_git) if (GIT_FOUND) execute_process( COMMAND - ${GIT_EXECUTABLE} describe --abbrev=0 + ${GIT_EXECUTABLE} describe --abbrev=0 --always WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} RESULT_VARIABLE @@ -42,7 +42,9 @@ macro(event_fuzzy_version_from_git) ) string(REGEX REPLACE "[\\._-]" ";" VERSION_LIST "${GITVERSION}") - list(LENGTH VERSION_LIST VERSION_LIST_LENGTH) + if(VERSION_LIST) + list(LENGTH VERSION_LIST VERSION_LIST_LENGTH) + endif() if ((GITRET EQUAL 0) AND (VERSION_LIST_LENGTH EQUAL 5)) list(GET VERSION_LIST 1 _MAJOR) |
