cmake_minimum_required(VERSION 3.5)
project(lb_interface_manager LANGUAGES C VERSION 1.0.1)

if (BUILD_TEST)
    message(STATUS "Generating interface_manager code")
    execute_process(COMMAND lbk gen WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} RESULT_VARIABLE ret)
    if(ret AND NOT ret EQUAL 0)
        message(FATAL_ERROR "Generating interface_manager code failed")
    endif()
    add_definitions(-DBUILD_TEST)
endif()

find_package(PkgConfig REQUIRED)
pkg_check_modules(GLIB2 REQUIRED glib-2.0)
pkg_check_modules(GIO2 REQUIRED gio-2.0)
find_package(lb_interface_manager-server REQUIRED)
find_package(DBus-client REQUIRED)

# When built as a subdirectory of lb_core, use the lb_core target directly
if (TARGET lb_core)
    set(LB_CORE_FOUND TRUE)
    set(LB_CORE_INCLUDE_DIRS "")
    set(LB_CORE_LIBRARIES lb_core)
    set(LB_CORE_LIBRARY_DIRS "")
else()
    # Fallback to pkg-config for standalone builds
    pkg_check_modules(LB_CORE REQUIRED lb_core)
endif()

if (CMAKE_BUILD_TYPE STREQUAL "Release")
    add_definitions("-DG_DISABLE_ASSERT")
endif()

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

target_include_directories(${PROJECT_NAME} PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}/inc
    $<TARGET_PROPERTY:lb_core,INCLUDE_DIRECTORIES>
    ${GLIB2_INCLUDE_DIRS}
    ${GIO2_INCLUDE_DIRS}
)

target_link_libraries(${PROJECT_NAME} PUBLIC
    ${GLIB2_LIBRARIES}
    ${GIO2_LIBRARIES}
    ${LB_CORE_LIBRARIES}
    lbInterfaceManager-server:lbInterfaceManager-server
    DBus-client:DBus-client
)

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

if (BUILD_TEST)
    add_subdirectory(test_package)
endif()

# Install configuration
install(TARGETS ${PROJECT_NAME} DESTINATION opt/litebmc/apps/lb_core/)
install(DIRECTORY rootfs/ DESTINATION .)
