cmake_minimum_required(VERSION 3.5)
project(lb_core LANGUAGES C VERSION 0.7.4)

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()

include(GNUInstallDirs)

option(BUILD_TEST "Build test_package" OFF)

if (BUILD_TEST)
add_definitions(-DBUILD_TEST)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-update=atomic")
endif()

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

find_package(PkgConfig REQUIRED)
pkg_check_modules(GLIB2 REQUIRED glib-2.0)
pkg_check_modules(DBUS REQUIRED libsystemd)
pkg_check_modules(GIO REQUIRED gio-2.0)
pkg_check_modules(MUPARSER REQUIRED muparser)
pkg_check_modules(LB_BASE REQUIRED lb_base)
pkg_check_modules(CONN_SRV REQUIRED lbConnector-server)
pkg_check_modules(EXPR_SRV REQUIRED lbExpression-server)
pkg_check_modules(FMAT_SRV REQUIRED lbFormatter-server)
pkg_check_modules(IM_CLI REQUIRED lbInterfaceManager-client)
pkg_check_modules(OBJ_MGR_SRV REQUIRED DBusObjectManager-server)
pkg_check_modules(DBUS_CLI REQUIRED DBus-client)

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

include(service/service.cmake)

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

target_include_directories(${PROJECT_NAME} PUBLIC
    ${GLIB2_INCLUDE_DIRS}
    ${GIO_INCLUDE_DIRS}
    ${DBUS_INCLUDE_DIRS}
    ${MUPARSER_INCLUDE_DIRS}
    ${LB_BASE_INCLUDE_DIRS}
    ${CONN_SRV_INCLUDE_DIRS}
    ${EXPR_SRV_INCLUDE_DIRS}
    ${FMAT_SRV_INCLUDE_DIRS}
    ${OBJ_MGR_SRV_INCLUDE_DIRS}
    ${IM_CLI_INCLUDE_DIRS}
    ${DBUS_CLI_INCLUDE_DIRS}
    ./inc
    ./src
    service
)
target_link_libraries(${PROJECT_NAME} PUBLIC
    ${GLIB2_LIBRARIES}
    ${GIO_LIBRARIES}
    ${DBUS_LIBRARIES}
    ${MUPARSER_LIBRARIES}
    ${LB_BASE_LIBRARIES}
    ${CONN_SRV_LIBRARIES}
    ${EXPR_SRV_LIBRARIES}
    ${FMAT_SRV_LIBRARIES}
    ${OBJ_MGR_SRV_LIBRARIES}
    ${IM_CLI_LIBRARIES}
    ${DBUS_CLI_LIBRARIES}
)
target_link_directories(${PROJECT_NAME} PUBLIC
    ${MUPARSER_LIBRARY_DIRS}
    ${LB_BASE_LIBRARY_DIRS}
    ${CONN_SRV_LIBRARY_DIRS}
    ${EXPR_SRV_LIBRARY_DIRS}
    ${FMAT_SRV_LIBRARY_DIRS}
    ${OBJ_MGR_SRV_LIBRARY_DIRS}
    ${IM_CLI_LIBRARY_DIRS}
    ${DBUS_CLI_LIBRARY_DIRS}
)
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES VERSION ${CMAKE_PROJECT_VERSION} SOVERSION ${CMAKE_PROJECT_VERSION_MAJOR})

configure_file(
    lb_core.pc.in
    lb_core.pc
    @ONLY
)
install(
    FILES lb_core.pc
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
)

if (BUILD_TEST)
add_subdirectory(test_package)
endif()

# Build interface_manager as a subdirectory
add_subdirectory(interface_manager)

# Build odf_validator as a subdirectory
add_subdirectory(odf_validator)

# Build lb_trace as a subdirectory (debug only)
if (NOT CMAKE_BUILD_TYPE STREQUAL "Release")
add_subdirectory(lb_trace)
endif()

install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(DIRECTORY inc/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(DIRECTORY DESTINATION opt/data/persistence/power_off)
install(DIRECTORY DESTINATION opt/data/persistence/reboot)
