summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorAzat Khuzhin <a3at.mail@gmail.com>2018-11-22 23:00:11 +0300
committerAzat Khuzhin <a3at.mail@gmail.com>2018-11-23 00:02:18 +0300
commitc9a073eae8f86a74fbbb125db34b881ef40108b7 (patch)
tree3178bd86471372a9272e73e7cd71b706b69ef9d7 /cmake
parentd705e8c0e924d3b815697a075c27a36298f04078 (diff)
downloadlibevent-c9a073eae8f86a74fbbb125db34b881ef40108b7.tar.gz
cmake: introduce EVENT__LIBRARY_TYPE option
Long time ago in [1] cmake build was forced to compile both libraries (SHARED and STATIC), since this is how our autotools build works. [1]: 7182c2f561570cd9ceb704623ebe9ae3608c7b43 ("cmake: build SHARED and STATIC libraries (like autoconf does)") And there is no way to configure this (and indeed you need to do this for MSVC for example), so let's introduce option for this -- EVENT__LIBRARY_TYPE. Plus now we have INTERFACE libraries, that we can use internally in libevent's cmake rules to avoid strict to _shared/_static variant of the libraries to link with samples/tests (we prefer SHARED over STATIC for linking). Also bump minimal cmake required version to 3.1 by the following reasons: - 3.1 is required for RPATH configuration under APPLE - 3.0 is required for add_library(INTERFACE) (did not found it in 2.8.x documentation) - remove extra conditions (anyway 3.1 was release 4 years ago, so I guess that most of the systems will have it)
Diffstat (limited to 'cmake')
-rw-r--r--cmake/AddEventLibrary.cmake81
1 files changed, 48 insertions, 33 deletions
diff --git a/cmake/AddEventLibrary.cmake b/cmake/AddEventLibrary.cmake
index 3f4e800e..9de4484c 100644
--- a/cmake/AddEventLibrary.cmake
+++ b/cmake/AddEventLibrary.cmake
@@ -3,11 +3,6 @@ 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})
@@ -48,6 +43,8 @@ endmacro()
# - HDR_PUBLIC
# - EVENT_INSTALL_INCLUDE_DIR
# - EVENT_SHARED_FLAGS
+# - EVENT_LIBRARY_STATIC
+# - EVENT_LIBRARY_SHARED
#
# Exported variables:
# - LIBEVENT_SHARED_LIBRARIES
@@ -60,41 +57,59 @@ macro(add_event_library LIB_NAME)
${ARGN}
)
- add_library("${LIB_NAME}_static" STATIC ${LIB_SOURCES})
- add_library("${LIB_NAME}_shared" SHARED ${LIB_SOURCES})
+ set(ADD_EVENT_LIBRARY_TARGETS)
+ set(ADD_EVENT_LIBRARY_INTERFACE)
- 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()
+ if (${EVENT_LIBRARY_STATIC})
+ add_library("${LIB_NAME}_static" STATIC ${LIB_SOURCES})
+ 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}")
- set_event_lib_properties("${LIB_NAME}"
- OUTPUT_NAME "${LIB_NAME}"
- CLEAN_DIRECT_OUTPUT 1
- )
+ list(APPEND LIBEVENT_STATIC_LIBRARIES "${LIB_NAME}_static")
+ list(APPEND ADD_EVENT_LIBRARY_TARGETS "${LIB_NAME}_static")
- set_target_properties(
- "${LIB_NAME}_shared" PROPERTIES
- PUBLIC_HEADER "${HDR_PUBLIC}")
- set_target_properties(
- "${LIB_NAME}_static" PROPERTIES
- PUBLIC_HEADER "${HDR_PUBLIC}")
+ set(ADD_EVENT_LIBRARY_INTERFACE "${LIB_NAME}_static")
+ endif()
- set_target_properties(
- "${LIB_NAME}_shared" PROPERTIES
- SOVERSION ${EVENT_ABI_LIBVERSION}
- )
+ if (${EVENT_LIBRARY_SHARED})
+ 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_target_properties("${LIB_NAME}_shared" PROPERTIES
+ OUTPUT_NAME "${LIB_NAME}"
+ CLEAN_DIRECT_OUTPUT 1)
+ set_target_properties(
+ "${LIB_NAME}_shared" PROPERTIES
+ PUBLIC_HEADER "${HDR_PUBLIC}")
+ set_target_properties(
+ "${LIB_NAME}_shared" PROPERTIES
+ SOVERSION ${EVENT_ABI_LIBVERSION}
+ )
+
+ list(APPEND LIBEVENT_SHARED_LIBRARIES "${LIB_NAME}_shared")
+ list(APPEND ADD_EVENT_LIBRARY_TARGETS "${LIB_NAME}_shared")
+
+ set(ADD_EVENT_LIBRARY_INTERFACE "${LIB_NAME}_shared")
+ endif()
- export(TARGETS "${LIB_NAME}_static" "${LIB_NAME}_shared"
+ export(TARGETS ${ADD_EVENT_LIBRARY_TARGETS}
FILE "${PROJECT_BINARY_DIR}/LibeventTargets.cmake"
APPEND
)
- install(TARGETS "${LIB_NAME}_static" "${LIB_NAME}_shared"
+ install(TARGETS ${ADD_EVENT_LIBRARY_TARGETS}
EXPORT LibeventTargets
LIBRARY DESTINATION "lib" COMPONENT lib
ARCHIVE DESTINATION "lib" COMPONENT lib
@@ -103,8 +118,8 @@ macro(add_event_library LIB_NAME)
COMPONENT dev
)
- list(APPEND LIBEVENT_SHARED_LIBRARIES "${LIB_NAME}_shared")
- list(APPEND LIBEVENT_STATIC_LIBRARIES "${LIB_NAME}_static")
+ add_library(${LIB_NAME} INTERFACE)
+ target_link_libraries(${LIB_NAME} INTERFACE ${ADD_EVENT_LIBRARY_INTERFACE})
generate_pkgconfig("${LIB_NAME}")
endmacro()