summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorAzat Khuzhin <a3at.mail@gmail.com>2017-03-12 23:31:59 +0300
committerAzat Khuzhin <a3at.mail@gmail.com>2017-03-13 16:20:40 +0300
commit7182c2f561570cd9ceb704623ebe9ae3608c7b43 (patch)
treee1ae95746a1b1ea2e509547ff7a8122771982f2f /cmake
parent72ef9d16522f88ea7848a52430b5f80d1174d710 (diff)
downloadlibevent-7182c2f561570cd9ceb704623ebe9ae3608c7b43.tar.gz
cmake: build SHARED and STATIC libraries (like autoconf does)
Since they are useful for debugging, and if autotools build them then cmamke has to do this too, to make migration more simple. And now: - tests: uses shared libraries (since this is upstreams one) - other binaries: uses static libraries This removes next private config: - EVENT__NEED_DLLIMPORT
Diffstat (limited to 'cmake')
-rw-r--r--cmake/AddEventLibrary.cmake82
-rw-r--r--cmake/LibeventConfig.cmake.in9
2 files changed, 87 insertions, 4 deletions
diff --git a/cmake/AddEventLibrary.cmake b/cmake/AddEventLibrary.cmake
new file mode 100644
index 00000000..bec4565f
--- /dev/null
+++ b/cmake/AddEventLibrary.cmake
@@ -0,0 +1,82 @@
+include(CMakeParseArguments)
+
+set(LIBEVENT_SHARED_LIBRARIES "")
+set(LIBEVENT_STATIC_LIBRARIES "")
+
+macro(set_event_lib_properties LIB_NAME)
+ set_target_properties("${LIB_NAME}_static" PROPERTIES ${ARGN})
+ set_target_properties("${LIB_NAME}_shared" PROPERTIES ${ARGN})
+endmacro()
+
+macro(set_event_shared_lib_flags LIB_NAME)
+ set_target_properties("${LIB_NAME}_shared" PROPERTIES
+ COMPILE_FLAGS ${ARGN})
+ set_target_properties("${LIB_NAME}_shared" PROPERTIES
+ LINK_FLAGS ${ARGN})
+endmacro()
+
+# Global variables that it uses:
+# - EVENT_ABI_LIBVERSION
+# - CMAKE_THREAD_LIBS_INIT LIB_PLATFORM
+# - HDR_PUBLIC
+# - EVENT_INSTALL_BIN_DIR
+# - EVENT_INSTALL_LIB_DIR
+# - EVENT_INSTALL_INCLUDE_DIR
+# - EVENT_SHARED_FLAGS
+#
+# Exported variables:
+# - LIBEVENT_SHARED_LIBRARIES
+# - LIBEVENT_STATIC_LIBRARIES
+macro(add_event_library LIB_NAME)
+ cmake_parse_arguments(LIB
+ "" # Options
+ "VERSION" # One val
+ "SOURCES;LIBRARIES" # Multi val
+ ${ARGN}
+ )
+
+ add_library("${LIB_NAME}_static" STATIC ${LIB_SOURCES})
+ add_library("${LIB_NAME}_shared" SHARED ${LIB_SOURCES})
+
+ target_link_libraries("${LIB_NAME}_shared"
+ ${CMAKE_THREAD_LIBS_INIT}
+ ${LIB_PLATFORM}
+ ${LIB_LIBRARIES})
+
+ if (EVENT_SHARED_FLAGS)
+ set_event_shared_lib_flags("${LIB_NAME}" "${EVENT_SHARED_FLAGS}")
+ endif()
+
+ set_event_lib_properties("${LIB_NAME}"
+ OUTPUT_NAME "${LIB_NAME}"
+ CLEAN_DIRECT_OUTPUT 1
+ )
+
+ set_target_properties(
+ "${LIB_NAME}_shared" PROPERTIES
+ PUBLIC_HEADER "${HDR_PUBLIC}")
+ set_target_properties(
+ "${LIB_NAME}_static" PROPERTIES
+ PUBLIC_HEADER "${HDR_PUBLIC}")
+
+ set_target_properties(
+ "${LIB_NAME}_shared" PROPERTIES
+ SOVERSION ${EVENT_ABI_LIBVERSION}
+ )
+
+ export(TARGETS "${LIB_NAME}_static" "${LIB_NAME}_shared"
+ FILE "${PROJECT_BINARY_DIR}/LibeventTargets.cmake"
+ )
+
+ install(TARGETS "${LIB_NAME}_static" "${LIB_NAME}_shared"
+ EXPORT LibeventTargets
+ RUNTIME DESTINATION "${EVENT_INSTALL_BIN_DIR}" COMPONENT bin
+ LIBRARY DESTINATION "${EVENT_INSTALL_LIB_DIR}" COMPONENT lib
+ ARCHIVE DESTINATION "${EVENT_INSTALL_LIB_DIR}" COMPONENT lib
+ PUBLIC_HEADER DESTINATION "${EVENT_INSTALL_INCLUDE_DIR}/event2"
+ COMPONENT dev
+ )
+
+ list(APPEND LIBEVENT_SHARED_LIBRARIES "${LIB_NAME}_shared")
+ list(APPEND LIBEVENT_STATIC_LIBRARIES "${LIB_NAME}_static")
+endmacro()
diff --git a/cmake/LibeventConfig.cmake.in b/cmake/LibeventConfig.cmake.in
index 5a9898d6..54223360 100644
--- a/cmake/LibeventConfig.cmake.in
+++ b/cmake/LibeventConfig.cmake.in
@@ -1,7 +1,8 @@
# - Config file for the Libevent package
# It defines the following variables
-# LIBEVENT_INCLUDE_DIRS - include directories for FooBar
-# LIBEVENT_LIBRARIES - libraries to link against
+# LIBEVENT_INCLUDE_DIRS - include directories
+# LIBEVENT_STATIC_LIBRARIES - libraries to link against (archive/static)
+# LIBEVENT_SHARED_LIBRARIES - libraries to link against (shared)
# Get the path of the current file.
get_filename_component(LIBEVENT_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
@@ -13,5 +14,5 @@ set(LIBEVENT_INCLUDE_DIRS "@EVENT_INSTALL_INCLUDE_DIR@")
include(${LIBEVENT_CMAKE_DIR}/LibeventTargets.cmake)
# IMPORTED targets from LibeventTargets.cmake
-set(LIBEVENT_LIBRARIES "@LIBEVENT_LIBRARIES@")
-
+set(LIBEVENT_STATIC_LIBRARIES "@LIBEVENT_STATIC_LIBRARIES@")
+set(LIBEVENT_SHARED_LIBRARIES "@LIBEVENT_SHARED_LIBRARIES@")