
FIND_PACKAGE(CyrusSASL REQUIRED)

ADD_LIBRARY(${LIBNAME}-sasl src/SimpleLoginManager.cpp)

TARGET_LINK_LIBRARIES(${LIBNAME}-sasl PUBLIC ${LIBNAME} PRIVATE sasl2)
SET_TARGET_PROPERTIES ( ${LIBNAME}-sasl PROPERTIES
    SOVERSION "${SOVERSION}"
    CLEAN_DIRECT_OUTPUT 1
    VERSION "${SOVERSION}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}"
    POSITION_INDEPENDENT_CODE ${BUILD_POSITION_INDEPENDENT}
    PUBLIC_HEADER "include/pdcom5/SimpleLoginManager.h"
)


TARGET_COMPILE_FEATURES(${LIBNAME}-sasl PUBLIC cxx_std_11)

IF (BUILD_SHARED_LIBS)
    SET_TARGET_PROPERTIES ( ${LIBNAME}-sasl PROPERTIES
        CXX_VISIBILITY_PRESET "hidden"
        VISIBILITY_INLINES_HIDDEN 1
    )
ENDIF()

TARGET_INCLUDE_DIRECTORIES(${LIBNAME}-sasl PUBLIC
    "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
    "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
    "$<INSTALL_INTERFACE:include>"
)

GENERATE_EXPORT_HEADER(${LIBNAME}-sasl)

INSTALL (TARGETS ${LIBNAME}-sasl
    EXPORT ${LIBNAME}-saslTargets
    ARCHIVE DESTINATION  "${CMAKE_INSTALL_LIBDIR}"
    LIBRARY DESTINATION  "${CMAKE_INSTALL_LIBDIR}"
    RUNTIME DESTINATION  "${CMAKE_INSTALL_BINDIR}"
    PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${LIBNAME}"
    COMPONENT sasl
)

INSTALL (FILES "${CMAKE_CURRENT_BINARY_DIR}/${LIBNAME}-sasl_export.h"
    DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${LIBNAME}")


INSTALL(EXPORT ${LIBNAME}-saslTargets
    NAMESPACE EtherLab::
    FILE ${LIBNAME}-saslTargets.cmake
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${LIBNAME}
)

EXPORT(EXPORT ${LIBNAME}-saslTargets
    FILE "${CMAKE_CURRENT_BINARY_DIR}/../src/${LIBNAME}/${LIBNAME}-saslTargets.cmake"
    NAMESPACE EtherLab::
)

if (USE_SYMBOL_VERSIONING)
    math(EXPR VERSCRIPT_ARCH "8 * ${CMAKE_SIZEOF_VOID_P}")
    string(FIND "${CMAKE_CXX_FLAGS}" "-flto" LTO_POS)
    set(LTO_ARCH "")
    if (NOT LTO_POS EQUAL "-1")
        set(LTO_ARCH "-lto")
    endif()
    add_custom_command(OUTPUT pdcom-sasl.map
        COMMAND "${PYTHON_EXECUTABLE}"
        ARGS "${CMAKE_CURRENT_SOURCE_DIR}/../symbol-versioning/symbol_version_tool.py"
                -i "${CMAKE_CURRENT_SOURCE_DIR}/pdcom-sasl.map.yaml"
                -o "${CMAKE_CURRENT_BINARY_DIR}/pdcom-sasl.map"
                --arch "generic${VERSCRIPT_ARCH}${LTO_ARCH}"
                GenerateLinkerVersionScript
        MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/pdcom-sasl.map.yaml"
        DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/../symbol-versioning/symbol_version_tool.py"
    )
    # to force relinking upon changing the map file,
    # we add an OBJECT_DEPENDS
    set(SLM_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/pdcom-sasl.map")
    set_source_files_properties(src/SimpleLoginManager.cpp PROPERTIES
        OBJECT_DEPENDS "${SLM_DEPENDS}"
    )
    # inform linker about version script
    set_target_properties(${LIBNAME}-sasl PROPERTIES
        LINK_FLAGS " -Wl,-version-script=${CMAKE_CURRENT_BINARY_DIR}/pdcom-sasl.map"
    )

    if (CHECK_SYMBOL_VERSIONING)
        add_custom_target(CheckPdComSaslVersionScript ALL
            "${PYTHON_EXECUTABLE}"
            "${CMAKE_CURRENT_SOURCE_DIR}/../symbol-versioning/symbol_version_tool.py"
            -i "${CMAKE_CURRENT_SOURCE_DIR}/pdcom-sasl.map.yaml"
            --arch "generic${VERSCRIPT_ARCH}${LTO_ARCH}"
            --library $<TARGET_FILE:${LIBNAME}-sasl>
            CheckGeneratedLibraries
            COMMENT "Checking whether all symbols are versioned correctly..."
        )
    endif()
endif()
