# Пример нативной библиотеки A4 Office для C.
#
#   cmake -S . -B build && cmake --build build
#   cmake -S . -B build -DA4OFFICE_ROOT=/opt/a4-c-2026.4.5-linux-x64
#
# Задаёт импортированные цели A4Office::f1, A4Office::a4, A4Office::p2 - их можно
# перенести в свой проект.
cmake_minimum_required(VERSION 3.16)
project(a4office_open_save C)

set(A4OFFICE_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../.." CACHE PATH "Папка комплекта A4 Office для C")
get_filename_component(A4OFFICE_ROOT "${A4OFFICE_ROOT}" ABSOLUTE)

foreach(core f1 a4 p2)
  add_library(A4Office::${core} SHARED IMPORTED)
  set_target_properties(A4Office::${core} PROPERTIES
    INTERFACE_INCLUDE_DIRECTORIES "${A4OFFICE_ROOT}/include")
  if(WIN32)
    set_target_properties(A4Office::${core} PROPERTIES
      IMPORTED_LOCATION "${A4OFFICE_ROOT}/lib/${core}.dll"
      IMPORTED_IMPLIB "${A4OFFICE_ROOT}/lib/${core}.lib")
  else()
    set_target_properties(A4Office::${core} PROPERTIES
      IMPORTED_LOCATION "${A4OFFICE_ROOT}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}${core}${CMAKE_SHARED_LIBRARY_SUFFIX}")
  endif()
endforeach()

add_executable(open_save open_save.c)
target_link_libraries(open_save PRIVATE A4Office::f1 A4Office::a4 A4Office::p2)
if(MSVC)
  # Исходник и русские строки в нём - в UTF-8.
  target_compile_options(open_save PRIVATE /utf-8)
else()
  target_compile_options(open_save PRIVATE -Wall -Wextra)
endif()
set_property(TARGET open_save PROPERTY C_STANDARD 11)

# Запуск из папки сборки без установки: папка lib/ комплекта попадает в rpath.
set_target_properties(open_save PROPERTIES BUILD_RPATH "${A4OFFICE_ROOT}/lib")

if(WIN32)
  # В Windows rpath нет: кладём DLL рядом с исполняемым файлом.
  add_custom_command(TARGET open_save POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_if_different
      "${A4OFFICE_ROOT}/lib/f1.dll" "${A4OFFICE_ROOT}/lib/a4.dll"
      "${A4OFFICE_ROOT}/lib/p2.dll" $<TARGET_FILE_DIR:open_save>)
endif()
