orbbec-sdk-sys 0.1.2+2.5.5

Low-level Rust bindings for https://github.com/orbbec/OrbbecSDK_v2
Documentation
# Copyright (c) Orbbec Inc. All Rights Reserved.
# Licensed under the MIT License.

cmake_minimum_required(VERSION 3.5)

set(OB_INTERFACE_DIR "${CMAKE_CURRENT_LIST_DIR}/interface")

if(OB_ENABLE_BOLT_OPENGL_COMPAT)
    if(NOT ANDROID AND NOT APPLE)
        find_package(OpenGL REQUIRED)
        if(OPENGL_FOUND)
            if(OPENGL_INCLUDE_DIR)
                include_directories(${OPENGL_INCLUDE_DIR})
                message(STATUS "OpenGL found: include directory: ${OPENGL_INCLUDE_DIR}")
            endif()
            message(STATUS "OpenGL found: libraries: ${OPENGL_gl_LIBRARY}")
            add_definitions(-DOB_BOLT_OPENGL_COMPAT)
        else()
            message(WARNING "Femto Bolt OpenGL compatibility disabled: OpenGL not found")
        endif()
    else()
        message(STATUS "Femto Bolt is not supported on Android/Apple platforms, skipping OpenGL check")
    endif()
endif()

# modules
add_subdirectory(shared) # utils, logger, etc.
add_subdirectory(core) # core library
add_subdirectory(filter)
add_subdirectory(platform)
add_subdirectory(device)
add_subdirectory(pipeline)
add_subdirectory(media) # record playback, etc.

# config version info
if(MSVC)
    set(ORBBEC_VERSIONINFO_RC "${CMAKE_BINARY_DIR}/VersionInfo.rc")
    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/VersionInfo.rc.in "${ORBBEC_VERSIONINFO_RC}")
endif()

# only support shared library for now
add_library(OrbbecSDK SHARED "" ${ORBBEC_VERSIONINFO_RC})
include(GenerateExportHeader)
generate_export_header(OrbbecSDK BASE_NAME OB EXPORT_FILE_NAME ${OB_PUBLIC_HEADERS_DIR}/libobsensor/h/Export.h)

file(GLOB_RECURSE SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/impl/*.cpp ${CMAKE_CURRENT_LIST_DIR}/context/*.cpp)
file(GLOB_RECURSE HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/impl/*.hpp ${CMAKE_CURRENT_LIST_DIR}/context/*.hpp)

target_sources(OrbbecSDK PRIVATE ${SOURCE_FILES} ${HEADER_FILES})
target_link_libraries(OrbbecSDK PRIVATE ob::shared ob::core ob::filter ob::platform ob::device ob::pipeline ob::media)
target_include_directories(OrbbecSDK PRIVATE ${CMAKE_CURRENT_LIST_DIR})
target_include_directories(
    OrbbecSDK PUBLIC "$<BUILD_INTERFACE:${OB_PUBLIC_HEADERS_DIR}>" "$<INSTALL_INTERFACE:include>"
)

if(UNIX)
    find_package(Threads REQUIRED)
    target_link_libraries(OrbbecSDK PRIVATE Threads::Threads)
endif()

# Link OpenGL libraries if found
if(OPENGL_gl_LIBRARY)
    target_link_libraries(OrbbecSDK PRIVATE ${OPENGL_gl_LIBRARY})
endif()

add_library(ob::OrbbecSDK ALIAS OrbbecSDK)
ob_source_group(ob::OrbbecSDK)

if(OB_IS_MAIN_PROJECT)
    install(
        TARGETS OrbbecSDK
        EXPORT OrbbecSDKConfig
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION lib
        ARCHIVE DESTINATION lib
    )

    install(
        DIRECTORY ${OB_PUBLIC_HEADERS_DIR}
        DESTINATION include
        FILES_MATCHING
        PATTERN "*.h"
        PATTERN "*.hpp"
    )

    install(EXPORT OrbbecSDKConfig NAMESPACE ob:: DESTINATION lib)

    include(CMakePackageConfigHelpers)
    write_basic_package_version_file(
        "${CMAKE_CURRENT_BINARY_DIR}/OrbbecSDKConfigVersion.cmake"
        VERSION "${PROJECT_VERSION}"
        COMPATIBILITY SameMajorVersion
    )
    install(
        FILES "${CMAKE_CURRENT_BINARY_DIR}/OrbbecSDKConfigVersion.cmake"
        DESTINATION lib
    )
endif()

if(OB_BUILD_SOVERSION)
    set_target_properties(${PROJECT_NAME} PROPERTIES
        VERSION ${PROJECT_VERSION}
        SOVERSION 2
    )
endif()