tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

AddEventLibrary.cmake (6978B)


      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 # 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
     46            COMPONENT dev
     47        )
     48    else()
     49        string(REPLACE "event_" "" PURE_NAME ${LIB_NAME})
     50        string(TOUPPER ${TYPE} UPPER_TYPE)
     51        list(APPEND LIBEVENT_${UPPER_TYPE}_LIBRARIES "${PURE_NAME}")
     52        set(OUTER_INCS)
     53        if (NOT "${OUTER_INCLUDES}" STREQUAL "NONE")
     54            set(OUTER_INCS ${OUTER_INCLUDES})
     55        endif()
     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>"
     60                    ${OUTER_INCS}
     61        )
     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"
     66            APPEND
     67        )
     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
     73            COMPONENT dev
     74        )
     75    endif()
     76 endmacro()
     77 
     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
     85 # - OPENSSL_LIBRARIES
     86 # - EVENT_SHARED_FLAGS
     87 # - EVENT_LIBRARY_STATIC
     88 # - EVENT_LIBRARY_SHARED
     89 #
     90 # Exported variables:
     91 # - LIBEVENT_SHARED_LIBRARIES
     92 # - LIBEVENT_STATIC_LIBRARIES
     93 macro(add_event_library LIB_NAME)
     94    cmake_parse_arguments(LIB
     95        "" # Options
     96        "VERSION" # One val
     97        "SOURCES;LIBRARIES;INNER_LIBRARIES;OUTER_INCLUDES" # Multi val
     98        ${ARGN}
     99    )
    100 
    101    if ("${LIB_OUTER_INCLUDES}" STREQUAL "")
    102        set(LIB_OUTER_INCLUDES NONE)
    103    endif()
    104    set(ADD_EVENT_LIBRARY_INTERFACE)
    105 
    106    if (${EVENT_LIBRARY_STATIC})
    107        add_library("${LIB_NAME}_static" STATIC ${LIB_SOURCES})
    108        set_target_properties("${LIB_NAME}_static" PROPERTIES
    109            OUTPUT_NAME "${LIB_NAME}"
    110            CLEAN_DIRECT_OUTPUT 1)
    111 
    112        if(LIB_INNER_LIBRARIES)
    113            set(INNER_LIBRARIES "${LIB_INNER_LIBRARIES}_static")
    114        endif()
    115        target_link_libraries("${LIB_NAME}_static"
    116            ${CMAKE_THREAD_LIBS_INIT}
    117            ${LIB_PLATFORM}
    118            ${INNER_LIBRARIES}
    119            ${LIB_LIBRARIES})
    120 
    121        export_install_target(static "${LIB_NAME}" "${LIB_OUTER_INCLUDES}")
    122 
    123        set(ADD_EVENT_LIBRARY_INTERFACE "${LIB_NAME}_static")
    124    endif()
    125 
    126    if (${EVENT_LIBRARY_SHARED})
    127        add_library("${LIB_NAME}_shared" SHARED ${LIB_SOURCES})
    128 
    129        if(LIB_INNER_LIBRARIES)
    130            set(INNER_LIBRARIES "${LIB_INNER_LIBRARIES}_shared")
    131        endif()
    132        target_link_libraries("${LIB_NAME}_shared"
    133            ${CMAKE_THREAD_LIBS_INIT}
    134            ${LIB_PLATFORM}
    135            ${INNER_LIBRARIES}
    136            ${LIB_LIBRARIES})
    137 
    138        if (EVENT_SHARED_FLAGS)
    139            set_event_shared_lib_flags("${LIB_NAME}" "${EVENT_SHARED_FLAGS}")
    140        endif()
    141 
    142        if (WIN32)
    143            set_target_properties(
    144                "${LIB_NAME}_shared" PROPERTIES
    145                OUTPUT_NAME "${LIB_NAME}"
    146                SOVERSION ${EVENT_ABI_LIBVERSION})
    147        elseif (APPLE)
    148            math(EXPR COMPATIBILITY_VERSION "${EVENT_ABI_LIBVERSION_CURRENT}+1")
    149            math(EXPR CURRENT_MINUS_AGE "${EVENT_ABI_LIBVERSION_CURRENT}-${EVENT_ABI_LIBVERSION_AGE}")
    150            set_target_properties(
    151                "${LIB_NAME}_shared" PROPERTIES
    152                OUTPUT_NAME "${LIB_NAME}-${EVENT_PACKAGE_RELEASE}.${CURRENT_MINUS_AGE}"
    153                INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib"
    154                LINK_FLAGS "-compatibility_version ${COMPATIBILITY_VERSION} -current_version ${COMPATIBILITY_VERSION}.${EVENT_ABI_LIBVERSION_REVISION}")
    155        else()
    156            math(EXPR CURRENT_MINUS_AGE "${EVENT_ABI_LIBVERSION_CURRENT}-${EVENT_ABI_LIBVERSION_AGE}")
    157            set_target_properties(
    158                "${LIB_NAME}_shared" PROPERTIES
    159                OUTPUT_NAME "${LIB_NAME}-${EVENT_PACKAGE_RELEASE}"
    160                VERSION "${CURRENT_MINUS_AGE}.${EVENT_ABI_LIBVERSION_AGE}.${EVENT_ABI_LIBVERSION_REVISION}"
    161                SOVERSION "${CURRENT_MINUS_AGE}"
    162                INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
    163        endif()
    164 
    165        if (NOT WIN32)
    166            set(LIB_LINK_NAME
    167                "${CMAKE_SHARED_LIBRARY_PREFIX}${LIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}")
    168 
    169            add_custom_command(TARGET ${LIB_NAME}_shared
    170                POST_BUILD
    171                COMMAND ${CMAKE_COMMAND} -E create_symlink
    172                    "$<TARGET_FILE_NAME:${LIB_NAME}_shared>"
    173                    "${LIB_LINK_NAME}"
    174                WORKING_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
    175        endif()
    176 
    177        export_install_target(shared "${LIB_NAME}" "${LIB_OUTER_INCLUDES}")
    178 
    179        set(ADD_EVENT_LIBRARY_INTERFACE "${LIB_NAME}_shared")
    180 
    181        if (NOT WIN32)
    182            install(FILES
    183                "$<TARGET_FILE_DIR:${LIB_NAME}_shared>/${LIB_LINK_NAME}"
    184                DESTINATION "lib"
    185                COMPONENT lib)
    186        endif()
    187    endif()
    188 
    189    add_library(${LIB_NAME} INTERFACE)
    190    target_link_libraries(${LIB_NAME} INTERFACE ${ADD_EVENT_LIBRARY_INTERFACE})
    191 
    192    generate_pkgconfig("${LIB_NAME}")
    193 endmacro()