diff options
author | Azat Khuzhin <a3at.mail@gmail.com> | 2018-11-22 23:00:11 +0300 |
---|---|---|
committer | Azat Khuzhin <a3at.mail@gmail.com> | 2018-11-23 00:02:18 +0300 |
commit | c9a073eae8f86a74fbbb125db34b881ef40108b7 (patch) | |
tree | 3178bd86471372a9272e73e7cd71b706b69ef9d7 /cmake | |
parent | d705e8c0e924d3b815697a075c27a36298f04078 (diff) | |
download | libevent-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.cmake | 81 |
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() |