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# - EVENT_ABI_LIBVERSION_CURRENT 42# - EVENT_ABI_LIBVERSION_REVISION 43# - EVENT_ABI_LIBVERSION_AGE 44# - EVENT_PACKAGE_RELEASE 45# - CMAKE_THREAD_LIBS_INIT LIB_PLATFORM 46# - OPENSSL_LIBRARIES 47# - EVENT_SHARED_FLAGS 48# - EVENT_LIBRARY_STATIC 49# - EVENT_LIBRARY_SHARED 50# 51# Exported variables: 52# - LIBEVENT_SHARED_LIBRARIES 53# - LIBEVENT_STATIC_LIBRARIES 54macro(add_event_library LIB_NAME) 55 cmake_parse_arguments(LIB 56 "" # Options 57 "VERSION" # One val 58 "SOURCES;LIBRARIES" # Multi val 59 ${ARGN} 60 ) 61 62 set(ADD_EVENT_LIBRARY_TARGETS) 63 set(ADD_EVENT_LIBRARY_INTERFACE) 64 65 if (${EVENT_LIBRARY_STATIC}) 66 add_library("${LIB_NAME}_static" STATIC ${LIB_SOURCES}) 67 set_target_properties("${LIB_NAME}_static" PROPERTIES 68 OUTPUT_NAME "${LIB_NAME}" 69 CLEAN_DIRECT_OUTPUT 1) 70 71 list(APPEND LIBEVENT_STATIC_LIBRARIES "${LIB_NAME}_static") 72 list(APPEND ADD_EVENT_LIBRARY_TARGETS "${LIB_NAME}_static") 73 74 set(ADD_EVENT_LIBRARY_INTERFACE "${LIB_NAME}_static") 75 endif() 76 77 if (${EVENT_LIBRARY_SHARED}) 78 add_library("${LIB_NAME}_shared" SHARED ${LIB_SOURCES}) 79 80 target_link_libraries("${LIB_NAME}_shared" 81 ${CMAKE_THREAD_LIBS_INIT} 82 ${LIB_PLATFORM} 83 ${LIB_LIBRARIES}) 84 85 if (EVENT_SHARED_FLAGS) 86 set_event_shared_lib_flags("${LIB_NAME}" "${EVENT_SHARED_FLAGS}") 87 endif() 88 89 if (WIN32) 90 set_target_properties( 91 "${LIB_NAME}_shared" PROPERTIES 92 OUTPUT_NAME "${LIB_NAME}" 93 SOVERSION ${EVENT_ABI_LIBVERSION}) 94 elseif (APPLE) 95 math(EXPR COMPATIBILITY_VERSION "${EVENT_ABI_LIBVERSION_CURRENT}+1") 96 math(EXPR CURRENT_MINUS_AGE "${EVENT_ABI_LIBVERSION_CURRENT}-${EVENT_ABI_LIBVERSION_AGE}") 97 set_target_properties( 98 "${LIB_NAME}_shared" PROPERTIES 99 OUTPUT_NAME "${LIB_NAME}-${EVENT_PACKAGE_RELEASE}.${CURRENT_MINUS_AGE}" 100 INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib" 101 LINK_FLAGS "-compatibility_version ${COMPATIBILITY_VERSION} -current_version ${COMPATIBILITY_VERSION}.${EVENT_ABI_LIBVERSION_REVISION}") 102 else() 103 math(EXPR CURRENT_MINUS_AGE "${EVENT_ABI_LIBVERSION_CURRENT}-${EVENT_ABI_LIBVERSION_AGE}") 104 set_target_properties( 105 "${LIB_NAME}_shared" PROPERTIES 106 OUTPUT_NAME "${LIB_NAME}-${EVENT_PACKAGE_RELEASE}" 107 VERSION "${CURRENT_MINUS_AGE}.${EVENT_ABI_LIBVERSION_AGE}.${EVENT_ABI_LIBVERSION_REVISION}" 108 SOVERSION "${CURRENT_MINUS_AGE}") 109 endif() 110 111 if (NOT WIN32) 112 set(LIB_LINK_NAME 113 "${CMAKE_SHARED_LIBRARY_PREFIX}${LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}") 114 115 add_custom_command(TARGET ${LIB_NAME}_shared 116 POST_BUILD 117 COMMAND ${CMAKE_COMMAND} -E create_symlink 118 "$<TARGET_FILE_NAME:${LIB_NAME}_shared>" 119 "${LIB_LINK_NAME}" 120 WORKING_DIRECTORY "lib") 121 endif() 122 123 list(APPEND LIBEVENT_SHARED_LIBRARIES "${LIB_NAME}_shared") 124 list(APPEND ADD_EVENT_LIBRARY_TARGETS "${LIB_NAME}_shared") 125 126 set(ADD_EVENT_LIBRARY_INTERFACE "${LIB_NAME}_shared") 127 endif() 128 129 export(TARGETS ${ADD_EVENT_LIBRARY_TARGETS} 130 FILE "${PROJECT_BINARY_DIR}/LibeventTargets.cmake" 131 APPEND 132 ) 133 134 install(TARGETS ${ADD_EVENT_LIBRARY_TARGETS} 135 EXPORT LibeventTargets 136 LIBRARY DESTINATION "lib" COMPONENT lib 137 ARCHIVE DESTINATION "lib" COMPONENT lib 138 RUNTIME DESTINATION "lib" COMPONENT lib 139 COMPONENT dev 140 ) 141 if (NOT WIN32 AND ${EVENT_LIBRARY_SHARED}) 142 install(FILES 143 "$<TARGET_FILE_DIR:${LIB_NAME}_shared>/${LIB_LINK_NAME}" 144 DESTINATION "lib" 145 COMPONENT lib) 146 endif() 147 148 add_library(${LIB_NAME} INTERFACE) 149 target_link_libraries(${LIB_NAME} INTERFACE ${ADD_EVENT_LIBRARY_INTERFACE}) 150 151 generate_pkgconfig("${LIB_NAME}") 152endmacro() 153