# Adds version control information to the variable VERS. For

# determining the Version Control System used (if any) it inspects the

# existence of certain subdirectories under CMAKE_CURRENT_SOURCE_DIR.



function(add_version_info_from_vcs VERS)

  set(result ${${VERS}})

  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.svn" )

    set(result "${result}svn")

    # FindSubversion does not work with symlinks. See PR 8437

    if( NOT IS_SYMLINK "${CMAKE_CURRENT_SOURCE_DIR}" )

      find_package(Subversion)

    endif()

    if( Subversion_FOUND )

      subversion_wc_info( ${CMAKE_CURRENT_SOURCE_DIR} Project )

      if( Project_WC_REVISION )

        set(result "${result}-r${Project_WC_REVISION}")

      endif()

    endif()

  elseif( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git )

    set(result "${result}git")

    # Try to get a ref-id

    find_program(git_executable NAMES git git.exe git.cmd)

    if( git_executable )

      execute_process(COMMAND ${git_executable} show-ref HEAD

                      WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}

                      TIMEOUT 5

                      RESULT_VARIABLE git_result

                      OUTPUT_VARIABLE git_output)

      if( git_result EQUAL 0 )

        string(SUBSTRING ${git_output} 0 7 git_ref_id)

        set(result "${result}-${git_ref_id}")

      else()

        execute_process(COMMAND ${git_executable} svn log --limit=1 --oneline

                        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}

                        TIMEOUT 5

                        RESULT_VARIABLE git_result

                        OUTPUT_VARIABLE git_output)

        if( git_result EQUAL 0 )

          string(REGEX MATCH r[0-9]+ git_svn_rev ${git_output})

          set(result "${result}-svn-${git_svn_rev}")

        endif()

      endif()

    endif()

  endif()

  set(${VERS} ${result} PARENT_SCOPE)

endfunction(add_version_info_from_vcs)

