#[=======================================================================[.rst:
myx_generate_git_info_header
----------------------------------

Вспомогательная функция для автоматической генерации заголовочного
файла, содержащего информацию о текущем состоянии репозитория git::

    myx_generate_git_info_header(TARGET_NAME BASE_FILENAME
      [ PREFIX prefix ] )

    Обязательные параметры: `TARGET_NAME` - имя цели, с которой связан
заголовочный файл, и `BASE_FILENAME` - имя генерируемого заголовочного
файла. Дополнительный аргумент `PREFIX` добавляет префикс к генерируемым
именам переменных.

#]=======================================================================]

include_guard(GLOBAL)

if(${CMAKE_VERSION} VERSION_LESS "3.17.0")
  set(MYX_CMAKE_LIB_GENERATORS_DIR_BACKPORT "${CMAKE_CURRENT_LIST_DIR}")
endif()

function(myx_generate_git_info_header TARGET_NAME BASE_FILENAME)
  if(${CMAKE_VERSION} VERSION_LESS "3.17.0")
    set(CMAKE_CURRENT_FUNCTION_LIST_DIR ${MYX_CMAKE_LIB_GENERATORS_DIR_BACKPORT})
  endif()

  set(options)
  set(oneValueArgs PREFIX)
  set(multiValueArgs)
  cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

  set(__filename "${PROJECT_BINARY_DIR}/include/${BASE_FILENAME}")
  file(APPEND ${__filename} "")

  set(__prefix "")
  if(ARG_PREFIX)
    string(APPEND ARG_PREFIX "_")
    string(REPLACE "-" "_" __prefix ${ARG_PREFIX})
  endif()

# cmake-format: off
  if(NOT TARGET ${TARGET_NAME}-git-info-header)
    add_custom_target(${TARGET_NAME}-git-info-header ALL
      ${CMAKE_COMMAND} -DGIT_INFO_FILE=${__filename} -DPREFIX=${__prefix}
                       -P ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/GitInfo.cmake
      BYPRODUCTS ${__filename}
      WORKING_DIRECTORY ${CMAKE_CURRENT_FUNCTION_LIST_DIR})
  endif()
# cmake-format: on

  set_property(TARGET ${TARGET_NAME} APPEND PROPERTY PRIVATE_HEADER_FILES ${__filename})
  target_sources(${TARGET_NAME} PRIVATE ${__filename})
  add_dependencies(${TARGET_NAME} ${TARGET_NAME}-git-info-header)
endfunction()