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