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