/3rd_party/llvm/cmake/modules/VersionFromVCS.cmake

https://code.google.com/p/softart/ · CMake · 72 lines · 64 code · 2 blank · 6 comment · 10 complexity · a8e0dae14b6c9866b0ad699d9a300003 MD5 · raw file

  1. # Adds version control information to the variable VERS. For
  2. # determining the Version Control System used (if any) it inspects the
  3. # existence of certain subdirectories under CMAKE_CURRENT_SOURCE_DIR.
  4. function(add_version_info_from_vcs VERS)
  5. string(REPLACE "svn" "" result "${${VERS}}")
  6. if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.svn" )
  7. set(result "${result}svn")
  8. # FindSubversion does not work with symlinks. See PR 8437
  9. if( NOT IS_SYMLINK "${CMAKE_CURRENT_SOURCE_DIR}" )
  10. find_package(Subversion)
  11. endif()
  12. if( Subversion_FOUND )
  13. subversion_wc_info( ${CMAKE_CURRENT_SOURCE_DIR} Project )
  14. if( Project_WC_REVISION )
  15. set(SVN_REVISION ${Project_WC_REVISION} PARENT_SCOPE)
  16. set(result "${result}-r${Project_WC_REVISION}")
  17. endif()
  18. endif()
  19. elseif( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git )
  20. set(result "${result}git")
  21. # Try to get a ref-id
  22. if( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git/svn )
  23. find_program(git_executable NAMES git git.exe git.cmd)
  24. if( git_executable )
  25. set(is_git_svn_rev_exact false)
  26. execute_process(COMMAND ${git_executable} svn log --limit=1 --oneline
  27. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  28. TIMEOUT 5
  29. RESULT_VARIABLE git_result
  30. OUTPUT_VARIABLE git_output)
  31. if( git_result EQUAL 0 )
  32. string(REGEX MATCH r[0-9]+ git_svn_rev ${git_output})
  33. string(LENGTH "${git_svn_rev}" rev_length)
  34. math(EXPR rev_length "${rev_length}-1")
  35. string(SUBSTRING "${git_svn_rev}" 1 ${rev_length} git_svn_rev_number)
  36. set(SVN_REVISION ${git_svn_rev_number} PARENT_SCOPE)
  37. set(git_svn_rev "-svn-${git_svn_rev}")
  38. # Determine if the HEAD points directly at a subversion revision.
  39. execute_process(COMMAND ${git_executable} svn find-rev HEAD
  40. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  41. TIMEOUT 5
  42. RESULT_VARIABLE git_result
  43. OUTPUT_VARIABLE git_output)
  44. if( git_result EQUAL 0 )
  45. string(STRIP "${git_output}" git_head_svn_rev_number)
  46. if( git_head_svn_rev_number EQUAL git_svn_rev_number )
  47. set(is_git_svn_rev_exact true)
  48. endif()
  49. endif()
  50. else()
  51. set(git_svn_rev "")
  52. endif()
  53. execute_process(COMMAND
  54. ${git_executable} rev-parse --short HEAD
  55. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  56. TIMEOUT 5
  57. RESULT_VARIABLE git_result
  58. OUTPUT_VARIABLE git_output)
  59. if( git_result EQUAL 0 AND NOT is_git_svn_rev_exact )
  60. string(STRIP "${git_output}" git_ref_id)
  61. set(GIT_COMMIT ${git_ref_id} PARENT_SCOPE)
  62. set(result "${result}${git_svn_rev}-${git_ref_id}")
  63. else()
  64. set(result "${result}${git_svn_rev}")
  65. endif()
  66. endif()
  67. endif()
  68. endif()
  69. set(${VERS} ${result} PARENT_SCOPE)
  70. endfunction(add_version_info_from_vcs)