##===- DetectArchitecture.cmake -------------------------------------------===##
#
# Performs a try_compile to determine the architecture of the target.
#
##===----------------------------------------------------------------------===##

macro(detect_architecture variable)
  try_compile(HAVE_${variable}
    ${CMAKE_BINARY_DIR}
    ${CMAKE_SOURCE_DIR}/cmake/modules/DetectArchitecture.c
    OUTPUT_VARIABLE OUTPUT
    COPY_FILE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/DetectArchitecture.bin)

  if(HAVE_${variable})
    file(STRINGS ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/DetectArchitecture.bin
      DETECT_ARCH_STRING LIMIT_COUNT 1 REGEX "ARCHITECTURE IS")
    if(DETECT_ARCH_STRING)
      string(REGEX MATCH "[^ ]*$" DETECT_ARCH_MATCH ${DETECT_ARCH_STRING})
      if(DETECT_ARCH_MATCH)
        message(STATUS "Check target system architecture: ${DETECT_ARCH_MATCH}")
        set(${variable} ${DETECT_ARCH_MATCH})
      else()
        message(SEND_ERROR "Could not detect target system architecture!")
      endif()
    else()
      message(SEND_ERROR "Could not detect target system architecture!")
    endif()
  else()
    message(STATUS "Determine the system architecture - failed")
    file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
      "Determining the system architecture fialed with the following output:\n${OUTPUT}")
    set(${variable})
  endif()
  
endmacro(detect_architecture)