1 include(CMakeParseArguments)
3 set(LIBEVENT_SHARED_LIBRARIES "")
4 set(LIBEVENT_STATIC_LIBRARIES "")
6 macro(set_event_shared_lib_flags LIB_NAME)
7 set_target_properties("${LIB_NAME}_shared" PROPERTIES
9 set_target_properties("${LIB_NAME}_shared" PROPERTIES
13 macro(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)
19 set(VERSION ${EVENT_ABI_LIBVERSION})
22 foreach (LIB ${LIB_PLATFORM})
23 set(LIBS "${LIBS} -l${LIB}")
27 foreach(LIB ${OPENSSL_LIBRARIES})
28 set(OPENSSL_LIBS "${OPENSSL_LIBS} -l${LIB}")
31 configure_file("lib${LIB_NAME}.pc.in" "lib${LIB_NAME}.pc" @ONLY)
33 FILES "${CMAKE_CURRENT_BINARY_DIR}/lib${LIB_NAME}.pc"
34 DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig"
38 # LIB_NAME maybe event_core, event_extra, event_openssl, event_pthreads or event.
39 # Targets whose LIB_NAME is not 'event' should be exported and installed.
40 macro(export_install_target TYPE LIB_NAME OUTER_INCLUDES)
41 if("${LIB_NAME}" STREQUAL "event")
42 install(TARGETS "${LIB_NAME}_${TYPE}"
43 LIBRARY DESTINATION "lib" COMPONENT lib
44 ARCHIVE DESTINATION "lib" COMPONENT lib
45 RUNTIME DESTINATION "lib" COMPONENT lib
49 string(REPLACE "event_" "" PURE_NAME ${LIB_NAME})
50 string(TOUPPER ${TYPE} UPPER_TYPE)
51 list(APPEND LIBEVENT_${UPPER_TYPE}_LIBRARIES "${PURE_NAME}")
53 if (NOT "${OUTER_INCLUDES}" STREQUAL "NONE")
54 set(OUTER_INCS ${OUTER_INCLUDES})
56 target_include_directories("${LIB_NAME}_${TYPE}"
57 PUBLIC "$<INSTALL_INTERFACE:include>"
58 "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>"
59 "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>"
62 set_target_properties("${LIB_NAME}_${TYPE}" PROPERTIES EXPORT_NAME ${PURE_NAME})
63 export(TARGETS "${LIB_NAME}_${TYPE}"
64 NAMESPACE ${PROJECT_NAME}::
65 FILE "${PROJECT_BINARY_DIR}/LibeventTargets-${TYPE}.cmake"
68 install(TARGETS "${LIB_NAME}_${TYPE}"
69 EXPORT LibeventTargets-${TYPE}
70 LIBRARY DESTINATION "lib" COMPONENT lib
71 ARCHIVE DESTINATION "lib" COMPONENT lib
72 RUNTIME DESTINATION "lib" COMPONENT lib
78 # Global variables that it uses:
79 # - EVENT_ABI_LIBVERSION
80 # - EVENT_ABI_LIBVERSION_CURRENT
81 # - EVENT_ABI_LIBVERSION_REVISION
82 # - EVENT_ABI_LIBVERSION_AGE
83 # - EVENT_PACKAGE_RELEASE
84 # - CMAKE_THREAD_LIBS_INIT LIB_PLATFORM
86 # - EVENT_SHARED_FLAGS
87 # - EVENT_LIBRARY_STATIC
88 # - EVENT_LIBRARY_SHARED
91 # - LIBEVENT_SHARED_LIBRARIES
92 # - LIBEVENT_STATIC_LIBRARIES
93 macro(add_event_library LIB_NAME)
94 cmake_parse_arguments(LIB
97 "SOURCES;LIBRARIES;INNER_LIBRARIES;OUTER_INCLUDES" # Multi val
101 if ("${LIB_OUTER_INCLUDES}" STREQUAL "")
102 set(LIB_OUTER_INCLUDES NONE)
104 set(ADD_EVENT_LIBRARY_INTERFACE)
107 if (${EVENT_LIBRARY_STATIC})
108 add_library("${LIB_NAME}_static" STATIC ${LIB_SOURCES})
109 set_target_properties("${LIB_NAME}_static" PROPERTIES
110 OUTPUT_NAME "${LIB_NAME}"
111 CLEAN_DIRECT_OUTPUT 1)
113 if(LIB_INNER_LIBRARIES)
114 set(INNER_LIBRARIES "${LIB_INNER_LIBRARIES}_static")
116 target_link_libraries("${LIB_NAME}_static"
117 ${CMAKE_THREAD_LIBS_INIT}
122 export_install_target(static "${LIB_NAME}" "${LIB_OUTER_INCLUDES}")
124 set(ADD_EVENT_LIBRARY_INTERFACE "${LIB_NAME}_static")
127 if (${EVENT_LIBRARY_SHARED})
128 add_library("${LIB_NAME}_shared" SHARED ${LIB_SOURCES})
130 if(LIB_INNER_LIBRARIES)
131 set(INNER_LIBRARIES "${LIB_INNER_LIBRARIES}_shared")
133 target_link_libraries("${LIB_NAME}_shared"
134 ${CMAKE_THREAD_LIBS_INIT}
139 if (EVENT_SHARED_FLAGS)
140 set_event_shared_lib_flags("${LIB_NAME}" "${EVENT_SHARED_FLAGS}")
144 set_target_properties(
145 "${LIB_NAME}_shared" PROPERTIES
146 OUTPUT_NAME "${LIB_NAME}"
147 SOVERSION ${EVENT_ABI_LIBVERSION})
149 math(EXPR COMPATIBILITY_VERSION "${EVENT_ABI_LIBVERSION_CURRENT}+1")
150 math(EXPR CURRENT_MINUS_AGE "${EVENT_ABI_LIBVERSION_CURRENT}-${EVENT_ABI_LIBVERSION_AGE}")
151 set_target_properties(
152 "${LIB_NAME}_shared" PROPERTIES
153 OUTPUT_NAME "${LIB_NAME}-${EVENT_PACKAGE_RELEASE}.${CURRENT_MINUS_AGE}"
154 INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib"
155 LINK_FLAGS "-compatibility_version ${COMPATIBILITY_VERSION} -current_version ${COMPATIBILITY_VERSION}.${EVENT_ABI_LIBVERSION_REVISION}")
157 math(EXPR CURRENT_MINUS_AGE "${EVENT_ABI_LIBVERSION_CURRENT}-${EVENT_ABI_LIBVERSION_AGE}")
158 set_target_properties(
159 "${LIB_NAME}_shared" PROPERTIES
160 OUTPUT_NAME "${LIB_NAME}-${EVENT_PACKAGE_RELEASE}"
161 VERSION "${CURRENT_MINUS_AGE}.${EVENT_ABI_LIBVERSION_AGE}.${EVENT_ABI_LIBVERSION_REVISION}"
162 SOVERSION "${CURRENT_MINUS_AGE}")
167 "${CMAKE_SHARED_LIBRARY_PREFIX}${LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}")
169 add_custom_command(TARGET ${LIB_NAME}_shared
171 COMMAND ${CMAKE_COMMAND} -E create_symlink
172 "$<TARGET_FILE_NAME:${LIB_NAME}_shared>"
174 WORKING_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
177 export_install_target(shared "${LIB_NAME}" "${LIB_OUTER_INCLUDES}")
179 set(ADD_EVENT_LIBRARY_INTERFACE "${LIB_NAME}_shared")
183 "$<TARGET_FILE_DIR:${LIB_NAME}_shared>/${LIB_LINK_NAME}"
189 add_library(${LIB_NAME} INTERFACE)
190 target_link_libraries(${LIB_NAME} INTERFACE ${ADD_EVENT_LIBRARY_INTERFACE})
192 generate_pkgconfig("${LIB_NAME}")