cmake_minimum_required(VERSION 3.12)
project(lb_hwmon LANGUAGES C VERSION 0.4.1)

include(GNUInstallDirs)

option(BUILD_TEST "Build test_package" OFF)
option(BUILD_ENABLE_DBUS_SYSTEM "Run with DBus system bus" ON)
option(BUILD_ENABLE_DBUS_SESSION "Run with DBus session bus" ON)

if(BUILD_TEST)
    message(STATUS "Start generating code")
    execute_process(COMMAND lbk gen RESULT_VARIABLE ret)
    if(ret AND NOT ret EQUAL 0)
        message(FATAL_ERROR "Generating code failed")
    endif()
endif()

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__FILENAME__='\"$(notdir $(abspath $(patsubst %.o,%,$@)))\"'")

find_package(PkgConfig REQUIRED)
pkg_check_modules(LB_CORE REQUIRED IMPORTED_TARGET lb_core)
pkg_check_modules(GLIB2 REQUIRED IMPORTED_TARGET glib-2.0)
pkg_check_modules(GIO2 REQUIRED IMPORTED_TARGET gio-2.0)
pkg_check_modules(FDT REQUIRED IMPORTED_TARGET libfdt)
pkg_check_modules(HWMON_SRV REQUIRED IMPORTED_TARGET lbFdt-server)

aux_source_directory(./src SRC_LIST)
list(SORT SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})

target_compile_definitions(${PROJECT_NAME} PRIVATE
    $<$<BOOL:${BUILD_TEST}>:BUILD_TEST>
    $<$<CONFIG:Release>:G_DISABLE_ASSERT>
)

target_include_directories(${PROJECT_NAME} PRIVATE inc)

target_link_libraries(${PROJECT_NAME} PRIVATE
    PkgConfig::GLIB2
    PkgConfig::GIO2
    PkgConfig::LB_CORE
    PkgConfig::FDT
    PkgConfig::HWMON_SRV
)

if(BUILD_TEST)
    add_subdirectory(test_package)
endif()

install(TARGETS ${PROJECT_NAME} DESTINATION opt/litebmc/apps/lb_hwmon/)
install(DIRECTORY rootfs/ DESTINATION .)
install(DIRECTORY DESTINATION ${CMAKE_INSTALL_PREFIX}/etc/systemd/system/multi-user.target.wants)
if(BUILD_ENABLE_DBUS_SESSION)
    install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E
        create_symlink /usr/lib/systemd/system/${PROJECT_NAME}@.service
        ${CMAKE_INSTALL_PREFIX}/etc/systemd/system/multi-user.target.wants/${PROJECT_NAME}@session.service)")
endif()
if(BUILD_ENABLE_DBUS_SYSTEM)
    install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E
        create_symlink /usr/lib/systemd/system/${PROJECT_NAME}@.service
        ${CMAKE_INSTALL_PREFIX}/etc/systemd/system/multi-user.target.wants/${PROJECT_NAME}@system.service)")
endif()
