cmake_minimum_required(VERSION 3.5)
project(lb_trace LANGUAGES C VERSION 1.0.0)

find_package(PkgConfig REQUIRED)
pkg_check_modules(GLIB2 REQUIRED glib-2.0)
pkg_check_modules(LB_BASE REQUIRED lb_base)

aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src LB_TRACE_SRC_LIST)
list(SORT LB_TRACE_SRC_LIST)
add_executable(${PROJECT_NAME} ${LB_TRACE_SRC_LIST})

target_include_directories(${PROJECT_NAME} PUBLIC
    $<TARGET_PROPERTY:lb_core,INCLUDE_DIRECTORIES>
    ${GLIB2_INCLUDE_DIRS}
    ${LB_BASE_INCLUDE_DIRS}
)

target_link_libraries(${PROJECT_NAME} PUBLIC
    ${GLIB2_LIBRARIES}
    ${LB_BASE_LIBRARIES}
    lb_core
)

target_link_directories(${PROJECT_NAME} PUBLIC
    $<TARGET_PROPERTY:lb_core,LINK_DIRECTORIES>
)

install(TARGETS ${PROJECT_NAME} DESTINATION opt/litebmc/apps/lb_trace)
install(DIRECTORY rootfs/ DESTINATION .)

if(BUILD_TEST)
    # 编译 LockTraceMonitor server/public 供 daemon 使用
    aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/test_package/test_interface/server MONITOR_SRV)
    aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/test_package/test_interface/public MONITOR_PUB)
    add_library(LockTraceMonitor-server SHARED ${MONITOR_SRV})
    add_library(LockTraceMonitor-public SHARED ${MONITOR_PUB})

    target_include_directories(LockTraceMonitor-server PUBLIC
        ${GLIB2_INCLUDE_DIRS}
        ${LB_BASE_INCLUDE_DIRS}
        ${CMAKE_CURRENT_SOURCE_DIR}/test_package/test_interface
    )
    target_link_libraries(LockTraceMonitor-server PUBLIC ${LB_BASE_LIBRARIES} LockTraceMonitor-public)
    target_link_directories(LockTraceMonitor-server PUBLIC ${LB_BASE_LIBRARY_DIRS})

    target_include_directories(LockTraceMonitor-public PUBLIC
        ${GLIB2_INCLUDE_DIRS}
        ${LB_BASE_INCLUDE_DIRS}
        ${CMAKE_CURRENT_SOURCE_DIR}/test_package/test_interface
    )
    target_link_libraries(LockTraceMonitor-public PUBLIC ${LB_BASE_LIBRARIES})
    target_link_directories(LockTraceMonitor-public PUBLIC ${LB_BASE_LIBRARY_DIRS})

    install(TARGETS LockTraceMonitor-public LockTraceMonitor-server
        LIBRARY DESTINATION lib)
    file(GLOB LTM_XML_FILE "${CMAKE_CURRENT_SOURCE_DIR}/test_package/test_interface/public/com.litebmc.LockTraceMonitor*.xml")
    install(FILES ${LTM_XML_FILE}
        DESTINATION usr/share/dbus-1/interfaces)

    # daemon 链接 Monitor server
    target_include_directories(${PROJECT_NAME} PUBLIC
        ${CMAKE_CURRENT_SOURCE_DIR}/test_package/test_interface
    )
    target_link_libraries(${PROJECT_NAME} PUBLIC LockTraceMonitor-server)

    add_subdirectory(test_package)
endif()
