cmake_minimum_required(VERSION 3.5)
# 参考package.yml的compatible_required定义，minor和patch版本号的最大值为999
project(lb_base LANGUAGES C VERSION 0.9.2)

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_packages" OFF)
if (BUILD_TEST)
add_definitions(-DBUILD_TEST)
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(GIO REQUIRED gio-2.0)
pkg_check_modules(GOBJ REQUIRED gobject-2.0)
pkg_check_modules(GMOD REQUIRED gmodule-2.0)
pkg_check_modules(LIBYAML REQUIRED libyaml)

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

target_include_directories(${PROJECT_NAME} PUBLIC ${LIBYAML_INCLUDE_DIRS} ./inc ${GLIB2_INCLUDE_DIRS} ${GOBJ_INCLUDE_DIRS} ${GMOD_INCLUDE_DIRS} ${DBUS_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PUBLIC ${LIBYAML_LIBRARIES} ${GLIB2_LIBRARIES} ${GOBJ_LIBRARIES} ${GMOD_LIBRARIES} ${DBUS_LIBRARIES})
target_link_directories(${PROJECT_NAME} PUBLIC ${LIBYAML_LIBRARY_DIRS} ${GLIB2_LIBRARY_DIRS} ${GOBJ_LIBRARY_DIRS} ${GMOD_LIBRARY_DIRS} ${DBUS_LIBRARY_DIRS})
set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${CMAKE_PROJECT_VERSION} SOVERSION ${CMAKE_PROJECT_VERSION_MAJOR})

configure_file(
    inc/lb_versionmacros.h.pc
    inc/lb_versionmacros.h
    @ONLY
)
configure_file(
    lb_base.pc.in
    .temp/lb_base.pc
    @ONLY
)
install(
    FILES .temp/lb_base.pc
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
)

if (BUILD_TEST)
add_subdirectory(test_package)
endif()

install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(DIRECTORY inc/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h")
