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        PUBLIC_HEADER DESTINATION "include/event2"
102        COMPONENT dev
103    )
104
105    list(APPEND LIBEVENT_SHARED_LIBRARIES "${LIB_NAME}_shared")
106    list(APPEND LIBEVENT_STATIC_LIBRARIES "${LIB_NAME}_static")
107
108    generate_pkgconfig("${LIB_NAME}")
109endmacro()
110