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