cmake_minimum_required(VERSION 3.10)
set(CMAKE_AUTOMOC OFF)
set(CMAKE_AUTORCC OFF)
set(CMAKE_AUTOUIC OFF)

# If do't define version number, specify the version number
set (VERSION "1.0.0" CACHE STRING "define project version")

set(BIN_NAME dfm-extension)
set(DFMEXT_GENERATED_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/include")

if (NOT VERSION)
    set(VERSION "1.0.0")
endif()

if (NOT PROJECT_VERSION_MAJOR)
    set(PROJECT_VERSION_MAJOR 1)
endif()

string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)" DFMEXT_VERSION_MATCH "${VERSION}")
if (NOT DFMEXT_VERSION_MATCH)
    message(FATAL_ERROR "dfm-extension VERSION must start with <major>.<minor>.<patch>, got: ${VERSION}")
endif()

set(DFMEXT_VERSION_MAJOR "${CMAKE_MATCH_1}")
set(DFMEXT_VERSION_MINOR "${CMAKE_MATCH_2}")
set(DFMEXT_VERSION_PATCH "${CMAKE_MATCH_3}")

configure_file(
    ${PROJECT_SOURCE_DIR}/include/${BIN_NAME}/dfm-extension-global.h.in
    ${DFMEXT_GENERATED_INCLUDE_DIR}/${BIN_NAME}/dfm-extension-global.h
    @ONLY
)

file(GLOB_RECURSE INCLUDE_FILES CONFIGURE_DEPENDS "${PROJECT_SOURCE_DIR}/include/${BIN_NAME}/*.h")
file(GLOB_RECURSE SRCS CONFIGURE_DEPENDS
    "./*.h"
    "./*.cpp"
)

add_library(${BIN_NAME} SHARED
    ${INCLUDE_FILES}
    ${SRCS}
    ${DFMEXT_GENERATED_INCLUDE_DIR}/${BIN_NAME}/dfm-extension-global.h
)

# Configure library using unified configuration function
dfm_configure_extension_library(${BIN_NAME})
target_include_directories(${BIN_NAME} BEFORE PUBLIC
    ${DFMEXT_GENERATED_INCLUDE_DIR}
)

set_target_properties(${BIN_NAME} PROPERTIES
    VERSION ${VERSION}
    SOVERSION ${PROJECT_VERSION_MAJOR}
)

add_library(DFM::extension ALIAS ${BIN_NAME})



# install dev
install(TARGETS ${BIN_NAME} LIBRARY DESTINATION ${LIB_INSTALL_DIR})
install(DIRECTORY
    ${PROJECT_SOURCE_DIR}/include/${BIN_NAME}
    DESTINATION include
    FILES_MATCHING PATTERN "*.h"
)
install(
    FILES ${DFMEXT_GENERATED_INCLUDE_DIR}/${BIN_NAME}/dfm-extension-global.h
    DESTINATION include/${BIN_NAME}
)

# config pkgconfig file
configure_file(${PROJECT_SOURCE_DIR}/assets/dev/${BIN_NAME}/${BIN_NAME}.pc.in ${BIN_NAME}.pc @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${BIN_NAME}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)

# config cmake file
configure_file(${PROJECT_SOURCE_DIR}/assets/dev/${BIN_NAME}/${BIN_NAME}Config.cmake.in ${BIN_NAME}Config.cmake @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${BIN_NAME}Config.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${BIN_NAME})
