Imported Upstream version 2.1.10
[platform/upstream/libevent.git] / cmake / AddEventLibrary.cmake
1 include(CMakeParseArguments)
2
3 set(LIBEVENT_SHARED_LIBRARIES "")
4 set(LIBEVENT_STATIC_LIBRARIES "")
5
6 macro(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})
11 endmacro()
12
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)
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     )
36 endmacro()
37
38
39 # Global variables that it uses:
40 # - EVENT_ABI_LIBVERSION
41 # - CMAKE_THREAD_LIBS_INIT LIB_PLATFORM
42 # - OPENSSL_LIBRARIES
43 # - HDR_PUBLIC
44 # - EVENT_INSTALL_INCLUDE_DIR
45 # - EVENT_SHARED_FLAGS
46 # - EVENT_LIBRARY_STATIC
47 # - EVENT_LIBRARY_SHARED
48 #
49 # Exported variables:
50 # - LIBEVENT_SHARED_LIBRARIES
51 # - LIBEVENT_STATIC_LIBRARIES
52 macro(add_event_library LIB_NAME)
53     cmake_parse_arguments(LIB
54         "" # Options
55         "VERSION" # One val
56         "SOURCES;LIBRARIES" # Multi val
57         ${ARGN}
58     )
59
60     set(ADD_EVENT_LIBRARY_TARGETS)
61     set(ADD_EVENT_LIBRARY_INTERFACE)
62
63     if (${EVENT_LIBRARY_STATIC})
64         add_library("${LIB_NAME}_static" STATIC ${LIB_SOURCES})
65         set_target_properties("${LIB_NAME}_static" PROPERTIES
66             OUTPUT_NAME "${LIB_NAME}"
67             CLEAN_DIRECT_OUTPUT 1)
68         set_target_properties(
69             "${LIB_NAME}_static" PROPERTIES
70             PUBLIC_HEADER "${HDR_PUBLIC}")
71
72         list(APPEND LIBEVENT_STATIC_LIBRARIES "${LIB_NAME}_static")
73         list(APPEND ADD_EVENT_LIBRARY_TARGETS "${LIB_NAME}_static")
74
75         set(ADD_EVENT_LIBRARY_INTERFACE "${LIB_NAME}_static")
76     endif()
77
78     if (${EVENT_LIBRARY_SHARED})
79         add_library("${LIB_NAME}_shared" SHARED ${LIB_SOURCES})
80
81         target_link_libraries("${LIB_NAME}_shared"
82             ${CMAKE_THREAD_LIBS_INIT}
83             ${LIB_PLATFORM}
84             ${LIB_LIBRARIES})
85
86         if (EVENT_SHARED_FLAGS)
87             set_event_shared_lib_flags("${LIB_NAME}" "${EVENT_SHARED_FLAGS}")
88         endif()
89
90         set_target_properties("${LIB_NAME}_shared" PROPERTIES
91             OUTPUT_NAME "${LIB_NAME}"
92             CLEAN_DIRECT_OUTPUT 1)
93         set_target_properties(
94             "${LIB_NAME}_shared" PROPERTIES
95             PUBLIC_HEADER "${HDR_PUBLIC}")
96         set_target_properties(
97             "${LIB_NAME}_shared" PROPERTIES
98             SOVERSION ${EVENT_ABI_LIBVERSION}
99         )
100
101         list(APPEND LIBEVENT_SHARED_LIBRARIES "${LIB_NAME}_shared")
102         list(APPEND ADD_EVENT_LIBRARY_TARGETS "${LIB_NAME}_shared")
103
104         set(ADD_EVENT_LIBRARY_INTERFACE "${LIB_NAME}_shared")
105     endif()
106
107     export(TARGETS ${ADD_EVENT_LIBRARY_TARGETS}
108        FILE "${PROJECT_BINARY_DIR}/LibeventTargets.cmake"
109        APPEND
110     )
111
112     install(TARGETS ${ADD_EVENT_LIBRARY_TARGETS}
113         EXPORT LibeventTargets
114         LIBRARY DESTINATION "lib" COMPONENT lib
115         ARCHIVE DESTINATION "lib" COMPONENT lib
116         RUNTIME DESTINATION "lib" COMPONENT lib
117         PUBLIC_HEADER DESTINATION "include/event2"
118         COMPONENT dev
119     )
120
121     add_library(${LIB_NAME} INTERFACE)
122     target_link_libraries(${LIB_NAME} INTERFACE ${ADD_EVENT_LIBRARY_INTERFACE})
123
124     generate_pkgconfig("${LIB_NAME}")
125 endmacro()