cmake_minimum_required(VERSION 3.21)

# set the project name
project(connecttoreader VERSION 1.0 LANGUAGES CXX)

option(USE_SHARED_ILR "Create with shared ILReaders otherwise static" ON)
option(USE_PKGCONFIG "Use PkgConfig to connect the library" OFF)
# Обнаруживать утечки памяти, переполнение стека и кучи
option(BUILD_WITH_ASAN "Build with address sanitizer" $<$<CONFIG:Debug>:ON>$<$<CONFIG:Release>:OFF>)

# add the executable
add_executable(${PROJECT_NAME} 
    ${PROJECT_SOURCE_DIR}/main.cpp
    ../ilr_cpp_helpers.cpp)

# Find and link library
# find_library(ILREADERS NAMES ilreaders PATHS ${CMAKE_BINARY_DIR})
if(USE_PKGCONFIG)
    if(PROJECT_IS_TOP_LEVEL)
        find_package(PkgConfig REQUIRED)

        if(USE_SHARED_ILR)
            pkg_check_modules(ILREADERS REQUIRED IMPORTED_TARGET ilreaders)
        else()
            # pkg_check_modules(ILREADERS STATIC REQUIRED IMPORTED_TARGET ilreaders)
            # Включаем режим статики для pkg_check_modules
            set(old_static ${PKG_CONFIG_ARGN})
            set(PKG_CONFIG_ARGN "--static") # Добавляет флаг --static ко всем вызовам
            pkg_check_modules(ILREADERS REQUIRED IMPORTED_TARGET ilreaders)
            # Возвращаем настройки обратно
            set(PKG_CONFIG_ARGN ${old_static})
        endif(USE_SHARED_ILR)
    endif(PROJECT_IS_TOP_LEVEL)
    target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::ILREADERS)
else()
    if(PROJECT_IS_TOP_LEVEL)
        find_package(ilreaders REQUIRED)
    endif()
    target_link_libraries(${PROJECT_NAME} ilreaders::ilreaders)
endif(USE_PKGCONFIG)

target_compile_definitions(${PROJECT_NAME} PRIVATE $<$<CONFIG:DEBUG>:_DEBUG>)
if(NOT USE_SHARED_ILR)
    target_compile_definitions(${PROJECT_NAME} PRIVATE ILR_STATIC_DEFINE)
endif()

if(BUILD_WITH_ASAN)
    target_compile_options(${PROJECT_NAME} PUBLIC 
        -fsanitize=address
        -fno-omit-frame-pointer)
    target_link_options(${PROJECT_NAME} PUBLIC 
        -fsanitize=address)
endif(BUILD_WITH_ASAN)
