aboutsummaryrefslogtreecommitdiffstats
path: root/external/libevent/AddEventLibrary.cmake
blob: 673c5220d8c52bfebefbbf9b1ec24897eb3761f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
include(CMakeParseArguments)

#set(LIBEVENT_SHARED_LIBRARIES "")
set(LIBEVENT_STATIC_LIBRARIES "")

macro(set_event_lib_properties LIB_NAME)
    set_target_properties("${LIB_NAME}_static" PROPERTIES ${ARGN})
    set_target_properties("${LIB_NAME}_shared" PROPERTIES ${ARGN})
endmacro()

macro(set_event_shared_lib_flags LIB_NAME)
    set_target_properties("${LIB_NAME}_shared" PROPERTIES
        COMPILE_FLAGS ${ARGN})
    set_target_properties("${LIB_NAME}_shared" PROPERTIES
        LINK_FLAGS ${ARGN})
endmacro()

macro(generate_pkgconfig LIB_NAME)
    set(prefix      ${CMAKE_INSTALL_PREFIX})
    set(exec_prefix ${CMAKE_INSTALL_PREFIX})
    set(libdir      ${CMAKE_INSTALL_PREFIX}/lib)
    set(includedir  ${CMAKE_INSTALL_PREFIX}/include)

    set(VERSION ${EVENT_ABI_LIBVERSION})

    set(LIBS         "")
    foreach (LIB ${LIB_PLATFORM})
        set(LIBS "${LIBS} -L${LIB}")
    endforeach()

    set(OPENSSL_LIBS "")
    foreach(LIB ${OPENSSL_LIBRARIES})
        set(OPENSSL_LIBS "${OPENSSL_LIBS} -L${LIB}")
    endforeach()

    configure_file("lib${LIB_NAME}.pc.in" "lib${LIB_NAME}.pc" @ONLY)
    install(
        FILES "${CMAKE_CURRENT_BINARY_DIR}/lib${LIB_NAME}.pc"
        DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig"
    )
endmacro()


# Global variables that it uses:
# - EVENT_ABI_LIBVERSION
# - CMAKE_THREAD_LIBS_INIT LIB_PLATFORM
# - OPENSSL_LIBRARIES
# - HDR_PUBLIC
# - EVENT_INSTALL_INCLUDE_DIR
# - EVENT_SHARED_FLAGS
#
# Exported variables:
# - LIBEVENT_SHARED_LIBRARIES
# - LIBEVENT_STATIC_LIBRARIES
macro(add_event_library LIB_NAME)
    cmake_parse_arguments(LIB
        "" # Options
        "VERSION" # One val
        "SOURCES;LIBRARIES" # Multi val
        ${ARGN}
    )

    add_library("${LIB_NAME}_static" STATIC ${LIB_SOURCES})
    add_library("${LIB_NAME}_shared" SHARED ${LIB_SOURCES})

    target_link_libraries("${LIB_NAME}_shared"
        ${CMAKE_THREAD_LIBS_INIT}
        ${LIB_PLATFORM}
        ${LIB_LIBRARIES})

    if (EVENT_SHARED_FLAGS)
        set_event_shared_lib_flags("${LIB_NAME}" "${EVENT_SHARED_FLAGS}")
    endif()

    set_event_lib_properties("${LIB_NAME}"
        OUTPUT_NAME "${LIB_NAME}"
        CLEAN_DIRECT_OUTPUT 1
    )

    set_target_properties(
        "${LIB_NAME}_shared" PROPERTIES
        PUBLIC_HEADER "${HDR_PUBLIC}")
    set_target_properties(
        "${LIB_NAME}_static" PROPERTIES
        PUBLIC_HEADER "${HDR_PUBLIC}")

    set_target_properties(
        "${LIB_NAME}_shared" PROPERTIES
        SOVERSION ${EVENT_ABI_LIBVERSION}
    )

    export(TARGETS "${LIB_NAME}_static" #"${LIB_NAME}_shared"
       FILE "${PROJECT_BINARY_DIR}/LibeventTargets.cmake"
       APPEND
    )

    install(TARGETS "${LIB_NAME}_static" #"${LIB_NAME}_shared"
        EXPORT LibeventTargets
        LIBRARY DESTINATION "lib" COMPONENT lib
        ARCHIVE DESTINATION "lib" COMPONENT lib
        PUBLIC_HEADER DESTINATION "include/event2"
        COMPONENT dev
    )

    #list(APPEND LIBEVENT_SHARED_LIBRARIES "${LIB_NAME}_shared")
    list(APPEND LIBEVENT_STATIC_LIBRARIES "${LIB_NAME}_static")

    generate_pkgconfig("${LIB_NAME}")
endmacro()