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