19806b126SAzat Khuzhininclude(CMakeParseArguments) 29806b126SAzat Khuzhin 39806b126SAzat Khuzhinset(LIBEVENT_SHARED_LIBRARIES "") 49806b126SAzat Khuzhinset(LIBEVENT_STATIC_LIBRARIES "") 59806b126SAzat Khuzhin 69806b126SAzat Khuzhinmacro(set_event_shared_lib_flags LIB_NAME) 79806b126SAzat Khuzhin set_target_properties("${LIB_NAME}_shared" PROPERTIES 89806b126SAzat Khuzhin COMPILE_FLAGS ${ARGN}) 99806b126SAzat Khuzhin set_target_properties("${LIB_NAME}_shared" PROPERTIES 109806b126SAzat Khuzhin LINK_FLAGS ${ARGN}) 119806b126SAzat Khuzhinendmacro() 129806b126SAzat Khuzhin 139806b126SAzat Khuzhinmacro(generate_pkgconfig LIB_NAME) 149806b126SAzat Khuzhin set(prefix ${CMAKE_INSTALL_PREFIX}) 159806b126SAzat Khuzhin set(exec_prefix ${CMAKE_INSTALL_PREFIX}) 169806b126SAzat Khuzhin set(libdir ${CMAKE_INSTALL_PREFIX}/lib) 179806b126SAzat Khuzhin set(includedir ${CMAKE_INSTALL_PREFIX}/include) 189806b126SAzat Khuzhin 199806b126SAzat Khuzhin set(VERSION ${EVENT_ABI_LIBVERSION}) 209806b126SAzat Khuzhin 219806b126SAzat Khuzhin set(LIBS "") 229806b126SAzat Khuzhin foreach (LIB ${LIB_PLATFORM}) 23cc554d87SAzat Khuzhin set(LIBS "${LIBS} -L${LIB}") 249806b126SAzat Khuzhin endforeach() 259806b126SAzat Khuzhin 269806b126SAzat Khuzhin set(OPENSSL_LIBS "") 279806b126SAzat Khuzhin foreach(LIB ${OPENSSL_LIBRARIES}) 28cc554d87SAzat Khuzhin set(OPENSSL_LIBS "${OPENSSL_LIBS} -L${LIB}") 299806b126SAzat Khuzhin endforeach() 309806b126SAzat Khuzhin 319806b126SAzat Khuzhin configure_file("lib${LIB_NAME}.pc.in" "lib${LIB_NAME}.pc" @ONLY) 329806b126SAzat Khuzhin install( 339806b126SAzat Khuzhin FILES "${CMAKE_CURRENT_BINARY_DIR}/lib${LIB_NAME}.pc" 349806b126SAzat Khuzhin DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig" 359806b126SAzat Khuzhin ) 369806b126SAzat Khuzhinendmacro() 379806b126SAzat Khuzhin 381c047618Syuangongji# LIB_NAME maybe event_core, event_extra, event_openssl, event_pthreads or event. 391c047618Syuangongji# Targets whose LIB_NAME is not 'event' should be exported and installed. 401c047618Syuangongjimacro(export_install_target TYPE LIB_NAME OUTER_INCLUDES) 411c047618Syuangongji if("${LIB_NAME}" STREQUAL "event") 421c047618Syuangongji install(TARGETS "${LIB_NAME}_${TYPE}" 431c047618Syuangongji LIBRARY DESTINATION "lib" COMPONENT lib 441c047618Syuangongji ARCHIVE DESTINATION "lib" COMPONENT lib 451c047618Syuangongji RUNTIME DESTINATION "lib" COMPONENT lib 461c047618Syuangongji COMPONENT dev 471c047618Syuangongji ) 481c047618Syuangongji else() 491c047618Syuangongji string(REPLACE "event_" "" PURE_NAME ${LIB_NAME}) 501c047618Syuangongji string(TOUPPER ${TYPE} UPPER_TYPE) 511c047618Syuangongji list(APPEND LIBEVENT_${UPPER_TYPE}_LIBRARIES "${PURE_NAME}") 521c047618Syuangongji set(OUTER_INCS) 531c047618Syuangongji if (NOT "${OUTER_INCLUDES}" STREQUAL "NONE") 541c047618Syuangongji set(OUTER_INCS ${OUTER_INCLUDES}) 551c047618Syuangongji endif() 561c047618Syuangongji target_include_directories("${LIB_NAME}_${TYPE}" 571c047618Syuangongji PUBLIC "$<INSTALL_INTERFACE:include>" 581c047618Syuangongji "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>" 591c047618Syuangongji "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>" 601c047618Syuangongji ${OUTER_INCS} 611c047618Syuangongji ) 621c047618Syuangongji set_target_properties("${LIB_NAME}_${TYPE}" PROPERTIES EXPORT_NAME ${PURE_NAME}) 631c047618Syuangongji export(TARGETS "${LIB_NAME}_${TYPE}" 641c047618Syuangongji NAMESPACE ${PROJECT_NAME}:: 651c047618Syuangongji FILE "${PROJECT_BINARY_DIR}/LibeventTargets-${TYPE}.cmake" 661c047618Syuangongji APPEND 671c047618Syuangongji ) 681c047618Syuangongji install(TARGETS "${LIB_NAME}_${TYPE}" 691c047618Syuangongji EXPORT LibeventTargets-${TYPE} 701c047618Syuangongji LIBRARY DESTINATION "lib" COMPONENT lib 711c047618Syuangongji ARCHIVE DESTINATION "lib" COMPONENT lib 721c047618Syuangongji RUNTIME DESTINATION "lib" COMPONENT lib 731c047618Syuangongji COMPONENT dev 741c047618Syuangongji ) 751c047618Syuangongji endif() 761c047618Syuangongjiendmacro() 779806b126SAzat Khuzhin 789806b126SAzat Khuzhin# Global variables that it uses: 799806b126SAzat Khuzhin# - EVENT_ABI_LIBVERSION 80305251b9Syuangongji# - EVENT_ABI_LIBVERSION_CURRENT 81305251b9Syuangongji# - EVENT_ABI_LIBVERSION_REVISION 82305251b9Syuangongji# - EVENT_ABI_LIBVERSION_AGE 83305251b9Syuangongji# - EVENT_PACKAGE_RELEASE 849806b126SAzat Khuzhin# - CMAKE_THREAD_LIBS_INIT LIB_PLATFORM 859806b126SAzat Khuzhin# - OPENSSL_LIBRARIES 869806b126SAzat Khuzhin# - EVENT_SHARED_FLAGS 87eb10a738SAzat Khuzhin# - EVENT_LIBRARY_STATIC 88eb10a738SAzat Khuzhin# - EVENT_LIBRARY_SHARED 899806b126SAzat Khuzhin# 909806b126SAzat Khuzhin# Exported variables: 919806b126SAzat Khuzhin# - LIBEVENT_SHARED_LIBRARIES 929806b126SAzat Khuzhin# - LIBEVENT_STATIC_LIBRARIES 939806b126SAzat Khuzhinmacro(add_event_library LIB_NAME) 949806b126SAzat Khuzhin cmake_parse_arguments(LIB 959806b126SAzat Khuzhin "" # Options 969806b126SAzat Khuzhin "VERSION" # One val 971c047618Syuangongji "SOURCES;LIBRARIES;INNER_LIBRARIES;OUTER_INCLUDES" # Multi val 989806b126SAzat Khuzhin ${ARGN} 999806b126SAzat Khuzhin ) 1009806b126SAzat Khuzhin 1011c047618Syuangongji if ("${LIB_OUTER_INCLUDES}" STREQUAL "") 1021c047618Syuangongji set(LIB_OUTER_INCLUDES NONE) 1031c047618Syuangongji endif() 104eb10a738SAzat Khuzhin set(ADD_EVENT_LIBRARY_INTERFACE) 105eb10a738SAzat Khuzhin 106eb10a738SAzat Khuzhin if (${EVENT_LIBRARY_STATIC}) 1079806b126SAzat Khuzhin add_library("${LIB_NAME}_static" STATIC ${LIB_SOURCES}) 108eb10a738SAzat Khuzhin set_target_properties("${LIB_NAME}_static" PROPERTIES 109eb10a738SAzat Khuzhin OUTPUT_NAME "${LIB_NAME}" 110eb10a738SAzat Khuzhin CLEAN_DIRECT_OUTPUT 1) 111eb10a738SAzat Khuzhin 1121c047618Syuangongji if(LIB_INNER_LIBRARIES) 1131c047618Syuangongji set(INNER_LIBRARIES "${LIB_INNER_LIBRARIES}_static") 1141c047618Syuangongji endif() 1151c047618Syuangongji target_link_libraries("${LIB_NAME}_static" 1161c047618Syuangongji ${CMAKE_THREAD_LIBS_INIT} 1171c047618Syuangongji ${LIB_PLATFORM} 1181c047618Syuangongji ${INNER_LIBRARIES} 1191c047618Syuangongji ${LIB_LIBRARIES}) 1201c047618Syuangongji 1211c047618Syuangongji export_install_target(static "${LIB_NAME}" "${LIB_OUTER_INCLUDES}") 122eb10a738SAzat Khuzhin 123eb10a738SAzat Khuzhin set(ADD_EVENT_LIBRARY_INTERFACE "${LIB_NAME}_static") 124eb10a738SAzat Khuzhin endif() 125eb10a738SAzat Khuzhin 126eb10a738SAzat Khuzhin if (${EVENT_LIBRARY_SHARED}) 1279806b126SAzat Khuzhin add_library("${LIB_NAME}_shared" SHARED ${LIB_SOURCES}) 1289806b126SAzat Khuzhin 1291c047618Syuangongji if(LIB_INNER_LIBRARIES) 1301c047618Syuangongji set(INNER_LIBRARIES "${LIB_INNER_LIBRARIES}_shared") 1311c047618Syuangongji endif() 1329806b126SAzat Khuzhin target_link_libraries("${LIB_NAME}_shared" 1339806b126SAzat Khuzhin ${CMAKE_THREAD_LIBS_INIT} 1349806b126SAzat Khuzhin ${LIB_PLATFORM} 1351c047618Syuangongji ${INNER_LIBRARIES} 1369806b126SAzat Khuzhin ${LIB_LIBRARIES}) 1379806b126SAzat Khuzhin 1389806b126SAzat Khuzhin if (EVENT_SHARED_FLAGS) 1399806b126SAzat Khuzhin set_event_shared_lib_flags("${LIB_NAME}" "${EVENT_SHARED_FLAGS}") 1409806b126SAzat Khuzhin endif() 1419806b126SAzat Khuzhin 142305251b9Syuangongji if (WIN32) 143305251b9Syuangongji set_target_properties( 144305251b9Syuangongji "${LIB_NAME}_shared" PROPERTIES 1459806b126SAzat Khuzhin OUTPUT_NAME "${LIB_NAME}" 146305251b9Syuangongji SOVERSION ${EVENT_ABI_LIBVERSION}) 147305251b9Syuangongji elseif (APPLE) 148305251b9Syuangongji math(EXPR COMPATIBILITY_VERSION "${EVENT_ABI_LIBVERSION_CURRENT}+1") 149305251b9Syuangongji math(EXPR CURRENT_MINUS_AGE "${EVENT_ABI_LIBVERSION_CURRENT}-${EVENT_ABI_LIBVERSION_AGE}") 150305251b9Syuangongji set_target_properties( 151305251b9Syuangongji "${LIB_NAME}_shared" PROPERTIES 152305251b9Syuangongji OUTPUT_NAME "${LIB_NAME}-${EVENT_PACKAGE_RELEASE}.${CURRENT_MINUS_AGE}" 153305251b9Syuangongji INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib" 154305251b9Syuangongji LINK_FLAGS "-compatibility_version ${COMPATIBILITY_VERSION} -current_version ${COMPATIBILITY_VERSION}.${EVENT_ABI_LIBVERSION_REVISION}") 155305251b9Syuangongji else() 156305251b9Syuangongji math(EXPR CURRENT_MINUS_AGE "${EVENT_ABI_LIBVERSION_CURRENT}-${EVENT_ABI_LIBVERSION_AGE}") 157305251b9Syuangongji set_target_properties( 158305251b9Syuangongji "${LIB_NAME}_shared" PROPERTIES 159305251b9Syuangongji OUTPUT_NAME "${LIB_NAME}-${EVENT_PACKAGE_RELEASE}" 160305251b9Syuangongji VERSION "${CURRENT_MINUS_AGE}.${EVENT_ABI_LIBVERSION_AGE}.${EVENT_ABI_LIBVERSION_REVISION}" 161*813cc739Syuangongji SOVERSION "${CURRENT_MINUS_AGE}" 162*813cc739Syuangongji INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") 163305251b9Syuangongji endif() 164305251b9Syuangongji 165305251b9Syuangongji if (NOT WIN32) 166305251b9Syuangongji set(LIB_LINK_NAME 167305251b9Syuangongji "${CMAKE_SHARED_LIBRARY_PREFIX}${LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}") 168305251b9Syuangongji 169305251b9Syuangongji add_custom_command(TARGET ${LIB_NAME}_shared 170305251b9Syuangongji POST_BUILD 171305251b9Syuangongji COMMAND ${CMAKE_COMMAND} -E create_symlink 172305251b9Syuangongji "$<TARGET_FILE_NAME:${LIB_NAME}_shared>" 173305251b9Syuangongji "${LIB_LINK_NAME}" 17447eb8c12SAzat Khuzhin WORKING_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") 175305251b9Syuangongji endif() 1769806b126SAzat Khuzhin 1771c047618Syuangongji export_install_target(shared "${LIB_NAME}" "${LIB_OUTER_INCLUDES}") 178eb10a738SAzat Khuzhin 179eb10a738SAzat Khuzhin set(ADD_EVENT_LIBRARY_INTERFACE "${LIB_NAME}_shared") 180eb10a738SAzat Khuzhin 1811c047618Syuangongji if (NOT WIN32) 182305251b9Syuangongji install(FILES 183305251b9Syuangongji "$<TARGET_FILE_DIR:${LIB_NAME}_shared>/${LIB_LINK_NAME}" 184305251b9Syuangongji DESTINATION "lib" 185305251b9Syuangongji COMPONENT lib) 186305251b9Syuangongji endif() 1871c047618Syuangongji endif() 1889806b126SAzat Khuzhin 189eb10a738SAzat Khuzhin add_library(${LIB_NAME} INTERFACE) 190eb10a738SAzat Khuzhin target_link_libraries(${LIB_NAME} INTERFACE ${ADD_EVENT_LIBRARY_INTERFACE}) 1919806b126SAzat Khuzhin 1929806b126SAzat Khuzhin generate_pkgconfig("${LIB_NAME}") 1939806b126SAzat Khuzhinendmacro() 194