# --------------- get git revision info ---------------

list(APPEND CMAKE_MODULE_PATH "${PASTIS_SOURCE_DIR}/cmake/cmake-modules")
include(GetGitRevisionDescription)

set(HAS_PASTIS_GIT_INFO "TRUE")

find_package(Git QUIET)

if(GIT_FOUND)
  execute_process(
    COMMAND "${GIT_EXECUTABLE}" describe "--abbrev=0"
    WORKING_DIRECTORY "${PASTIS_SOURCE_DIR}"
    OUTPUT_VARIABLE PASTIS_GIT_TAG
    RESULT_VARIABLE FOUND_PASTIS_GIT_INFO
    OUTPUT_STRIP_TRAILING_WHITESPACE)

  if(FOUND_PASTIS_GIT_INFO EQUAL 0)
    execute_process(
      COMMAND "${GIT_EXECUTABLE}" reflog -1 "--format=%H"
      WORKING_DIRECTORY "${PASTIS_SOURCE_DIR}"
      OUTPUT_VARIABLE PASTIS_GIT_HASH
      OUTPUT_STRIP_TRAILING_WHITESPACE)

    execute_process(
      COMMAND "${GIT_EXECUTABLE}" symbolic-ref HEAD
      WORKING_DIRECTORY "${PASTIS_SOURCE_DIR}"
      OUTPUT_VARIABLE PASTIS_GIT_HEAD
      OUTPUT_STRIP_TRAILING_WHITESPACE)

    execute_process(
      COMMAND "${GIT_EXECUTABLE}" diff-index --quiet HEAD
      WORKING_DIRECTORY "${PASTIS_SOURCE_DIR}"
      RESULT_VARIABLE STATE
      OUTPUT_STRIP_TRAILING_WHITESPACE)

    if(STATE EQUAL 0)
      set(PASTIS_GIT_HAS_LOCAL_CHANGES "CLEAN")
      set(PASTIS_GIT_IS_CLEAN true)
    else()
      set(PASTIS_GIT_IS_CLEAN false)
      set(PASTIS_GIT_HAS_LOCAL_CHANGES "DIRTY")
    endif()
  else()
    unset(HAS_PASTIS_GIT_INFO)
  endif()
else()
  unset(HAS_PASTIS_GIT_INFO)
endif()

string(FIND "${PASTIS_GIT_TAG}" "${CMAKE_PASTIS_VERSION}" FOUND_VERSION_SUBSTR)

if("${FOUND_VERSION_SUBSTR}" STREQUAL "-1")
  message("")
  message ("######  CMake code version  ${CMAKE_PASTIS_VERSION} and")
  message ("######  git revision info  ${PASTIS_GIT_TAG} do not match!")
  message("")
endif()

# Generates revision header file candidate
configure_file("${PASTIS_SOURCE_DIR}/utils/pastis_git_revision.hpp.in"
  "${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision"
  @ONLY)