1*897be3a4Schristosinclude(CMakeParseArguments) 2*897be3a4Schristos 3*897be3a4Schristosset(LIBEVENT_SHARED_LIBRARIES "") 4*897be3a4Schristosset(LIBEVENT_STATIC_LIBRARIES "") 5*897be3a4Schristos 6*897be3a4Schristosmacro(set_event_shared_lib_flags LIB_NAME) 7*897be3a4Schristos set_target_properties("${LIB_NAME}_shared" PROPERTIES 8*897be3a4Schristos COMPILE_FLAGS ${ARGN}) 9*897be3a4Schristos set_target_properties("${LIB_NAME}_shared" PROPERTIES 10*897be3a4Schristos LINK_FLAGS ${ARGN}) 11*897be3a4Schristosendmacro() 12*897be3a4Schristos 13*897be3a4Schristosmacro(generate_pkgconfig LIB_NAME) 14*897be3a4Schristos set(prefix ${CMAKE_INSTALL_PREFIX}) 15*897be3a4Schristos set(exec_prefix ${CMAKE_INSTALL_PREFIX}) 16*897be3a4Schristos set(libdir ${CMAKE_INSTALL_PREFIX}/lib) 17*897be3a4Schristos set(includedir ${CMAKE_INSTALL_PREFIX}/include) 18*897be3a4Schristos 19*897be3a4Schristos set(VERSION ${EVENT_ABI_LIBVERSION}) 20*897be3a4Schristos 21*897be3a4Schristos set(LIBS "") 22*897be3a4Schristos foreach (LIB ${LIB_PLATFORM}) 23*897be3a4Schristos set(LIBS "${LIBS} -L${LIB}") 24*897be3a4Schristos endforeach() 25*897be3a4Schristos 26*897be3a4Schristos set(OPENSSL_LIBS "") 27*897be3a4Schristos foreach(LIB ${OPENSSL_LIBRARIES}) 28*897be3a4Schristos set(OPENSSL_LIBS "${OPENSSL_LIBS} -L${LIB}") 29*897be3a4Schristos endforeach() 30*897be3a4Schristos 31*897be3a4Schristos configure_file("lib${LIB_NAME}.pc.in" "lib${LIB_NAME}.pc" @ONLY) 32*897be3a4Schristos install( 33*897be3a4Schristos FILES "${CMAKE_CURRENT_BINARY_DIR}/lib${LIB_NAME}.pc" 34*897be3a4Schristos DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig" 35*897be3a4Schristos ) 36*897be3a4Schristosendmacro() 37*897be3a4Schristos 38*897be3a4Schristos# LIB_NAME maybe event_core, event_extra, event_openssl, event_pthreads or event. 39*897be3a4Schristos# Targets whose LIB_NAME is not 'event' should be exported and installed. 40*897be3a4Schristosmacro(export_install_target TYPE LIB_NAME OUTER_INCLUDES) 41*897be3a4Schristos if("${LIB_NAME}" STREQUAL "event") 42*897be3a4Schristos install(TARGETS "${LIB_NAME}_${TYPE}" 43*897be3a4Schristos LIBRARY DESTINATION "lib" COMPONENT lib 44*897be3a4Schristos ARCHIVE DESTINATION "lib" COMPONENT lib 45*897be3a4Schristos RUNTIME DESTINATION "lib" COMPONENT lib 46*897be3a4Schristos COMPONENT dev 47*897be3a4Schristos ) 48*897be3a4Schristos else() 49*897be3a4Schristos string(REPLACE "event_" "" PURE_NAME ${LIB_NAME}) 50*897be3a4Schristos string(TOUPPER ${TYPE} UPPER_TYPE) 51*897be3a4Schristos list(APPEND LIBEVENT_${UPPER_TYPE}_LIBRARIES "${PURE_NAME}") 52*897be3a4Schristos set(OUTER_INCS) 53*897be3a4Schristos if (NOT "${OUTER_INCLUDES}" STREQUAL "NONE") 54*897be3a4Schristos set(OUTER_INCS ${OUTER_INCLUDES}) 55*897be3a4Schristos endif() 56*897be3a4Schristos target_include_directories("${LIB_NAME}_${TYPE}" 57*897be3a4Schristos PUBLIC "$<INSTALL_INTERFACE:include>" 58*897be3a4Schristos "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>" 59*897be3a4Schristos "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>" 60*897be3a4Schristos ${OUTER_INCS} 61*897be3a4Schristos ) 62*897be3a4Schristos set_target_properties("${LIB_NAME}_${TYPE}" PROPERTIES EXPORT_NAME ${PURE_NAME}) 63*897be3a4Schristos export(TARGETS "${LIB_NAME}_${TYPE}" 64*897be3a4Schristos NAMESPACE ${PROJECT_NAME}:: 65*897be3a4Schristos FILE "${PROJECT_BINARY_DIR}/LibeventTargets-${TYPE}.cmake" 66*897be3a4Schristos APPEND 67*897be3a4Schristos ) 68*897be3a4Schristos install(TARGETS "${LIB_NAME}_${TYPE}" 69*897be3a4Schristos EXPORT LibeventTargets-${TYPE} 70*897be3a4Schristos LIBRARY DESTINATION "lib" COMPONENT lib 71*897be3a4Schristos ARCHIVE DESTINATION "lib" COMPONENT lib 72*897be3a4Schristos RUNTIME DESTINATION "lib" COMPONENT lib 73*897be3a4Schristos COMPONENT dev 74*897be3a4Schristos ) 75*897be3a4Schristos endif() 76*897be3a4Schristosendmacro() 77*897be3a4Schristos 78*897be3a4Schristos# Global variables that it uses: 79*897be3a4Schristos# - EVENT_ABI_LIBVERSION 80*897be3a4Schristos# - EVENT_ABI_LIBVERSION_CURRENT 81*897be3a4Schristos# - EVENT_ABI_LIBVERSION_REVISION 82*897be3a4Schristos# - EVENT_ABI_LIBVERSION_AGE 83*897be3a4Schristos# - EVENT_PACKAGE_RELEASE 84*897be3a4Schristos# - CMAKE_THREAD_LIBS_INIT LIB_PLATFORM 85*897be3a4Schristos# - OPENSSL_LIBRARIES 86*897be3a4Schristos# - EVENT_SHARED_FLAGS 87*897be3a4Schristos# - EVENT_LIBRARY_STATIC 88*897be3a4Schristos# - EVENT_LIBRARY_SHARED 89*897be3a4Schristos# 90*897be3a4Schristos# Exported variables: 91*897be3a4Schristos# - LIBEVENT_SHARED_LIBRARIES 92*897be3a4Schristos# - LIBEVENT_STATIC_LIBRARIES 93*897be3a4Schristosmacro(add_event_library LIB_NAME) 94*897be3a4Schristos cmake_parse_arguments(LIB 95*897be3a4Schristos "" # Options 96*897be3a4Schristos "VERSION" # One val 97*897be3a4Schristos "SOURCES;LIBRARIES;INNER_LIBRARIES;OUTER_INCLUDES" # Multi val 98*897be3a4Schristos ${ARGN} 99*897be3a4Schristos ) 100*897be3a4Schristos 101*897be3a4Schristos if ("${LIB_OUTER_INCLUDES}" STREQUAL "") 102*897be3a4Schristos set(LIB_OUTER_INCLUDES NONE) 103*897be3a4Schristos endif() 104*897be3a4Schristos set(ADD_EVENT_LIBRARY_INTERFACE) 105*897be3a4Schristos 106*897be3a4Schristos if (${EVENT_LIBRARY_STATIC}) 107*897be3a4Schristos add_library("${LIB_NAME}_static" STATIC ${LIB_SOURCES}) 108*897be3a4Schristos set_target_properties("${LIB_NAME}_static" PROPERTIES 109*897be3a4Schristos OUTPUT_NAME "${LIB_NAME}" 110*897be3a4Schristos CLEAN_DIRECT_OUTPUT 1) 111*897be3a4Schristos 112*897be3a4Schristos if(LIB_INNER_LIBRARIES) 113*897be3a4Schristos set(INNER_LIBRARIES "${LIB_INNER_LIBRARIES}_static") 114*897be3a4Schristos endif() 115*897be3a4Schristos target_link_libraries("${LIB_NAME}_static" 116*897be3a4Schristos ${CMAKE_THREAD_LIBS_INIT} 117*897be3a4Schristos ${LIB_PLATFORM} 118*897be3a4Schristos ${INNER_LIBRARIES} 119*897be3a4Schristos ${LIB_LIBRARIES}) 120*897be3a4Schristos 121*897be3a4Schristos export_install_target(static "${LIB_NAME}" "${LIB_OUTER_INCLUDES}") 122*897be3a4Schristos 123*897be3a4Schristos set(ADD_EVENT_LIBRARY_INTERFACE "${LIB_NAME}_static") 124*897be3a4Schristos endif() 125*897be3a4Schristos 126*897be3a4Schristos if (${EVENT_LIBRARY_SHARED}) 127*897be3a4Schristos add_library("${LIB_NAME}_shared" SHARED ${LIB_SOURCES}) 128*897be3a4Schristos 129*897be3a4Schristos if(LIB_INNER_LIBRARIES) 130*897be3a4Schristos set(INNER_LIBRARIES "${LIB_INNER_LIBRARIES}_shared") 131*897be3a4Schristos endif() 132*897be3a4Schristos target_link_libraries("${LIB_NAME}_shared" 133*897be3a4Schristos ${CMAKE_THREAD_LIBS_INIT} 134*897be3a4Schristos ${LIB_PLATFORM} 135*897be3a4Schristos ${INNER_LIBRARIES} 136*897be3a4Schristos ${LIB_LIBRARIES}) 137*897be3a4Schristos 138*897be3a4Schristos if (EVENT_SHARED_FLAGS) 139*897be3a4Schristos set_event_shared_lib_flags("${LIB_NAME}" "${EVENT_SHARED_FLAGS}") 140*897be3a4Schristos endif() 141*897be3a4Schristos 142*897be3a4Schristos if (WIN32) 143*897be3a4Schristos set_target_properties( 144*897be3a4Schristos "${LIB_NAME}_shared" PROPERTIES 145*897be3a4Schristos OUTPUT_NAME "${LIB_NAME}" 146*897be3a4Schristos SOVERSION ${EVENT_ABI_LIBVERSION}) 147*897be3a4Schristos elseif (APPLE) 148*897be3a4Schristos math(EXPR COMPATIBILITY_VERSION "${EVENT_ABI_LIBVERSION_CURRENT}+1") 149*897be3a4Schristos math(EXPR CURRENT_MINUS_AGE "${EVENT_ABI_LIBVERSION_CURRENT}-${EVENT_ABI_LIBVERSION_AGE}") 150*897be3a4Schristos set_target_properties( 151*897be3a4Schristos "${LIB_NAME}_shared" PROPERTIES 152*897be3a4Schristos OUTPUT_NAME "${LIB_NAME}-${EVENT_PACKAGE_RELEASE}.${CURRENT_MINUS_AGE}" 153*897be3a4Schristos INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib" 154*897be3a4Schristos LINK_FLAGS "-compatibility_version ${COMPATIBILITY_VERSION} -current_version ${COMPATIBILITY_VERSION}.${EVENT_ABI_LIBVERSION_REVISION}") 155*897be3a4Schristos else() 156*897be3a4Schristos math(EXPR CURRENT_MINUS_AGE "${EVENT_ABI_LIBVERSION_CURRENT}-${EVENT_ABI_LIBVERSION_AGE}") 157*897be3a4Schristos set_target_properties( 158*897be3a4Schristos "${LIB_NAME}_shared" PROPERTIES 159*897be3a4Schristos OUTPUT_NAME "${LIB_NAME}-${EVENT_PACKAGE_RELEASE}" 160*897be3a4Schristos VERSION "${CURRENT_MINUS_AGE}.${EVENT_ABI_LIBVERSION_AGE}.${EVENT_ABI_LIBVERSION_REVISION}" 161*897be3a4Schristos SOVERSION "${CURRENT_MINUS_AGE}" 162*897be3a4Schristos INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") 163*897be3a4Schristos endif() 164*897be3a4Schristos 165*897be3a4Schristos if (NOT WIN32) 166*897be3a4Schristos set(LIB_LINK_NAME 167*897be3a4Schristos "${CMAKE_SHARED_LIBRARY_PREFIX}${LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}") 168*897be3a4Schristos 169*897be3a4Schristos add_custom_command(TARGET ${LIB_NAME}_shared 170*897be3a4Schristos POST_BUILD 171*897be3a4Schristos COMMAND ${CMAKE_COMMAND} -E create_symlink 172*897be3a4Schristos "$<TARGET_FILE_NAME:${LIB_NAME}_shared>" 173*897be3a4Schristos "${LIB_LINK_NAME}" 174*897be3a4Schristos WORKING_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") 175*897be3a4Schristos endif() 176*897be3a4Schristos 177*897be3a4Schristos export_install_target(shared "${LIB_NAME}" "${LIB_OUTER_INCLUDES}") 178*897be3a4Schristos 179*897be3a4Schristos set(ADD_EVENT_LIBRARY_INTERFACE "${LIB_NAME}_shared") 180*897be3a4Schristos 181*897be3a4Schristos if (NOT WIN32) 182*897be3a4Schristos install(FILES 183*897be3a4Schristos "$<TARGET_FILE_DIR:${LIB_NAME}_shared>/${LIB_LINK_NAME}" 184*897be3a4Schristos DESTINATION "lib" 185*897be3a4Schristos COMPONENT lib) 186*897be3a4Schristos endif() 187*897be3a4Schristos endif() 188*897be3a4Schristos 189*897be3a4Schristos add_library(${LIB_NAME} INTERFACE) 190*897be3a4Schristos target_link_libraries(${LIB_NAME} INTERFACE ${ADD_EVENT_LIBRARY_INTERFACE}) 191*897be3a4Schristos 192*897be3a4Schristos generate_pkgconfig("${LIB_NAME}") 193*897be3a4Schristosendmacro() 194