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