include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_BINARY_DIR})

# ------------------- Source files --------------------

add_library(
  PastisUtils
  BacktraceManager.cpp
  ConsoleManager.cpp
  FPEManager.cpp
  PastisUtils.cpp
  RevisionInfo.cpp
  SignalManager.cpp)

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

# Generates revision header file
add_custom_target(
  PastisGitRevison
  ALL
  DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision.hpp
)

set_source_files_properties(
  ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision.hpp
  PROPERTIES
  GENERATED TRUE
  HEADER_FILE_ONLY TRUE
  )

# --------- check git revision info at build ----------

add_custom_command(TARGET PastisGitRevison
  COMMAND ${CMAKE_COMMAND} -E remove -f
  ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision
  DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision.hpp
  COMMENT ""
  )

add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision.hpp
  PRE_BUILD
  COMMAND ${CMAKE_COMMAND} -E copy_if_different
  ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision
  ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision.hpp
  COMMENT ""
  DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision
  VERBATIM
  )

add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision
  PRE_BUILD
  COMMAND ${CMAKE_COMMAND} -DCMAKE_PASTIS_VERSION=${Pastis_VERSION} -DPASTIS_SOURCE_DIR=${PASTIS_SOURCE_DIR} -P ${PASTIS_SOURCE_DIR}/cmake/GetPastisGitRevision.cmake
  COMMENT "Check pastis git status"
  VERBATIM
  )

# ----------------- get version info ------------------

configure_file("${CMAKE_CURRENT_SOURCE_DIR}/pastis_version.hpp.in"
  "${CMAKE_CURRENT_BINARY_DIR}/pastis_version.hpp"
  @ONLY)


list(
  APPEND
  SOURCES
  ${CMAKE_CURRENT_BINARY_DIR}/pastis_git_revision.hpp
  ${CMAKE_CURRENT_BINARY_DIR}/pastis_version.hpp
  ${PASTIS_BINARY_DIR}/pastis_config.hpp
  )

include_directories(${CMAKE_CURRENT_BINARY_DIR})
include_directories(${PASTIS_BINARY_DIR})
include_directories(${PASTIS_SOURCE_DIR}/packages/rang/include)

# Additional dependencies
add_dependencies(
  PastisUtils
  PastisGitRevison)

# ---------------- Checks for includes ----------------

# Checks for FPE
include(CheckIncludeFile)
check_include_file(fenv.h PASTIS_HAS_FENV_H)

# Checks for host system name
if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
  set(SYSTEM_IS_LINUX 1)
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
  set(SYSTEM_IS_DARWIN 1)
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
  set(SYSTEM_IS_WINDOWS 1)
else()
  message(WARNMSG "Your system is ${CMAKE_HOST_SYSTEM_NAME} which may not be managed!")
endif()

# Generates pastis_config.hpp
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/pastis_config.hpp.in"
  "${CMAKE_CURRENT_BINARY_DIR}/pastis_config.hpp"
  @ONLY)