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