cmake_minimum_required(VERSION 3.5)
# 参考package.yml的compatible_required定义，minor和patch版本号的最大值为999
project(
  lb_base
  LANGUAGES C
  VERSION 0.10.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)
pkg_check_modules(YYJSON REQUIRED yyjson)

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}
         ${YYJSON_INCLUDE_DIRS}
         ./inc
         ${GLIB2_INCLUDE_DIRS}
         ${GOBJ_INCLUDE_DIRS}
         ${GMOD_INCLUDE_DIRS}
         ${DBUS_INCLUDE_DIRS}
)
# gio-2.0 transitively requires glib-2.0, gobject-2.0, gmodule-2.0
target_link_libraries(
  ${PROJECT_NAME} PUBLIC ${LIBYAML_LIBRARIES} ${YYJSON_LIBRARIES} ${GIO_LIBRARIES}
                         ${DBUS_LIBRARIES}
)
target_link_directories(
  ${PROJECT_NAME}
  PUBLIC
  ${LIBYAML_LIBRARY_DIRS}
  ${YYJSON_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"
)
