1include(CMakeParseArguments) 2 3set(LIBEVENT_SHARED_LIBRARIES "") 4set(LIBEVENT_STATIC_LIBRARIES "") 5 6macro(set_event_shared_lib_flags LIB_NAME) 7 set_target_properties("${LIB_NAME}_shared" PROPERTIES 8 COMPILE_FLAGS ${ARGN}) 9 set_target_properties("${LIB_NAME}_shared" PROPERTIES 10 LINK_FLAGS ${ARGN}) 11endmacro() 12 13macro(generate_pkgconfig LIB_NAME) 14 set(prefix ${CMAKE_INSTALL_PREFIX}) 15 set(exec_prefix ${CMAKE_INSTALL_PREFIX}) 16 set(libdir ${CMAKE_INSTALL_PREFIX}/lib) 17 set(includedir ${CMAKE_INSTALL_PREFIX}/include) 18 19 set(VERSION ${EVENT_ABI_LIBVERSION}) 20 21 set(LIBS "") 22 foreach (LIB ${LIB_PLATFORM}) 23 set(LIBS "${LIBS} -L${LIB}") 24 endforeach() 25 26 set(OPENSSL_LIBS "") 27 foreach(LIB ${OPENSSL_LIBRARIES}) 28 set(OPENSSL_LIBS "${OPENSSL_LIBS} -L${LIB}") 29 endforeach() 30 31 configure_file("lib${LIB_NAME}.pc.in" "lib${LIB_NAME}.pc" @ONLY) 32 install( 33 FILES "${CMAKE_CURRENT_BINARY_DIR}/lib${LIB_NAME}.pc" 34 DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig" 35 ) 36endmacro() 37 38 39# Global variables that it uses: 40# - EVENT_ABI_LIBVERSION 41# - CMAKE_THREAD_LIBS_INIT LIB_PLATFORM 42# - OPENSSL_LIBRARIES 43# - HDR_PUBLIC 44# - EVENT_INSTALL_INCLUDE_DIR 45# - EVENT_SHARED_FLAGS 46# - EVENT_LIBRARY_STATIC 47# - EVENT_LIBRARY_SHARED 48# 49# Exported variables: 50# - LIBEVENT_SHARED_LIBRARIES 51# - LIBEVENT_STATIC_LIBRARIES 52macro(add_event_library LIB_NAME) 53 cmake_parse_arguments(LIB 54 "" # Options 55 "VERSION" # One val 56 "SOURCES;LIBRARIES" # Multi val 57 ${ARGN} 58 ) 59 60 set(ADD_EVENT_LIBRARY_TARGETS) 61 set(ADD_EVENT_LIBRARY_INTERFACE) 62 63 if (${EVENT_LIBRARY_STATIC}) 64 add_library("${LIB_NAME}_static" STATIC ${LIB_SOURCES}) 65 set_target_properties("${LIB_NAME}_static" PROPERTIES 66 OUTPUT_NAME "${LIB_NAME}" 67 CLEAN_DIRECT_OUTPUT 1) 68 set_target_properties( 69 "${LIB_NAME}_static" PROPERTIES 70 PUBLIC_HEADER "${HDR_PUBLIC}") 71 72 list(APPEND LIBEVENT_STATIC_LIBRARIES "${LIB_NAME}_static") 73 list(APPEND ADD_EVENT_LIBRARY_TARGETS "${LIB_NAME}_static") 74 75 set(ADD_EVENT_LIBRARY_INTERFACE "${LIB_NAME}_static") 76 endif() 77 78 if (${EVENT_LIBRARY_SHARED}) 79 add_library("${LIB_NAME}_shared" SHARED ${LIB_SOURCES}) 80 81 target_link_libraries("${LIB_NAME}_shared" 82 ${CMAKE_THREAD_LIBS_INIT} 83 ${LIB_PLATFORM} 84 ${LIB_LIBRARIES}) 85 86 if (EVENT_SHARED_FLAGS) 87 set_event_shared_lib_flags("${LIB_NAME}" "${EVENT_SHARED_FLAGS}") 88 endif() 89 90 set_target_properties("${LIB_NAME}_shared" PROPERTIES 91 OUTPUT_NAME "${LIB_NAME}" 92 CLEAN_DIRECT_OUTPUT 1) 93 set_target_properties( 94 "${LIB_NAME}_shared" PROPERTIES 95 PUBLIC_HEADER "${HDR_PUBLIC}") 96 set_target_properties( 97 "${LIB_NAME}_shared" PROPERTIES 98 SOVERSION ${EVENT_ABI_LIBVERSION} 99 ) 100 101 list(APPEND LIBEVENT_SHARED_LIBRARIES "${LIB_NAME}_shared") 102 list(APPEND ADD_EVENT_LIBRARY_TARGETS "${LIB_NAME}_shared") 103 104 set(ADD_EVENT_LIBRARY_INTERFACE "${LIB_NAME}_shared") 105 endif() 106 107 export(TARGETS ${ADD_EVENT_LIBRARY_TARGETS} 108 FILE "${PROJECT_BINARY_DIR}/LibeventTargets.cmake" 109 APPEND 110 ) 111 112 install(TARGETS ${ADD_EVENT_LIBRARY_TARGETS} 113 EXPORT LibeventTargets 114 LIBRARY DESTINATION "lib" COMPONENT lib 115 ARCHIVE DESTINATION "lib" COMPONENT lib 116 RUNTIME DESTINATION "lib" COMPONENT lib 117 PUBLIC_HEADER DESTINATION "include/event2" 118 COMPONENT dev 119 ) 120 121 add_library(${LIB_NAME} INTERFACE) 122 target_link_libraries(${LIB_NAME} INTERFACE ${ADD_EVENT_LIBRARY_INTERFACE}) 123 124 generate_pkgconfig("${LIB_NAME}") 125endmacro() 126