diff options
author | Azat Khuzhin <a3at.mail@gmail.com> | 2017-03-12 23:31:59 +0300 |
---|---|---|
committer | Azat Khuzhin <a3at.mail@gmail.com> | 2017-03-13 16:20:40 +0300 |
commit | 7182c2f561570cd9ceb704623ebe9ae3608c7b43 (patch) | |
tree | e1ae95746a1b1ea2e509547ff7a8122771982f2f /cmake | |
parent | 72ef9d16522f88ea7848a52430b5f80d1174d710 (diff) | |
download | libevent-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.cmake | 82 | ||||
-rw-r--r-- | cmake/LibeventConfig.cmake.in | 9 |
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@") |