# The utility function DetermineOSVersion aims at providing an
# improved version of the CMake variable ${CMAKE_SYSTEM} on Windows
# machines.
#
# Usage:
#  include(EigenDetermineOSVersion)
#  DetermineOSVersion(OS_VERSION)
#  message("OS: ${OS_VERSION}")

# - A little helper variable which should not be directly called
function(DetermineShortWindowsName WIN_VERSION win_num_version)
   if    (${win_num_version} VERSION_EQUAL "6.1")
       set(_version "win7")
   elseif(${win_num_version} VERSION_EQUAL "6.0")
       set(_version "winVista")
   elseif(${win_num_version} VERSION_EQUAL "5.2")
       set(_version "winXpProf")
   elseif(${win_num_version} VERSION_EQUAL "5.1")
       set(_version "winXp")
   elseif(${win_num_version} VERSION_EQUAL "5.0")
       set(_version "win2000Prof")
   else()
       set(_version "unknownWin")
   endif()
   set(${WIN_VERSION} ${_version} PARENT_SCOPE)
endfunction()

function(DetermineOSVersion OS_VERSION)
  if (WIN32)
    file (TO_NATIVE_PATH "$ENV{COMSPEC}" SHELL)
    exec_program( ${SHELL} ARGS "/c" "ver" OUTPUT_VARIABLE ver_output)
				
      string(REGEX MATCHALL "[0-9]+"
           ver_list "${ver_output}")
      list(GET ver_list 0 _major)		   
      list(GET ver_list 1 _minor)
				
    set(win_num_version ${_major}.${_minor})
    DetermineShortWindowsName(win_version "${win_num_version}")
    if(win_version)
      set(${OS_VERSION} ${win_version} PARENT_SCOPE)
    endif()
  else()
    set(${OS_VERSION} ${CMAKE_SYSTEM} PARENT_SCOPE)
  endif()
endfunction()
