Open Source Tomb Raider Engine
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

GetGitRevisionDescription.cmake 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. # - Returns a version string from Git
  2. #
  3. # These functions force a re-configure on each git commit so that you can
  4. # trust the values of the variables in your build system.
  5. #
  6. # get_git_head_revision(<refspecvar> <hashvar> [<additional arguments to git describe> ...])
  7. #
  8. # Returns the refspec and sha hash of the current head revision
  9. #
  10. # git_describe(<var> [<additional arguments to git describe> ...])
  11. #
  12. # Returns the results of git describe on the source tree, and adjusting
  13. # the output so that it tests false if an error occurs.
  14. #
  15. # git_get_exact_tag(<var> [<additional arguments to git describe> ...])
  16. #
  17. # Returns the results of git describe --exact-match on the source tree,
  18. # and adjusting the output so that it tests false if there was no exact
  19. # matching tag.
  20. #
  21. # Requires CMake 2.6 or newer (uses the 'function' command)
  22. #
  23. # Original Author:
  24. # 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
  25. # http://academic.cleardefinition.com
  26. # Iowa State University HCI Graduate Program/VRAC
  27. #
  28. # Copyright Iowa State University 2009-2010.
  29. # Distributed under the Boost Software License, Version 1.0.
  30. # (See accompanying file LICENSE_1_0.txt or copy at
  31. # http://www.boost.org/LICENSE_1_0.txt)
  32. if(__get_git_revision_description)
  33. return()
  34. endif()
  35. set(__get_git_revision_description YES)
  36. # We must run the following at "include" time, not at function call time,
  37. # to find the path to this module rather than the path to a calling list file
  38. get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
  39. function(get_git_head_revision _refspecvar _hashvar)
  40. set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
  41. set(GIT_DIR "${GIT_PARENT_DIR}/.git")
  42. while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories
  43. set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
  44. get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)
  45. if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)
  46. # We have reached the root directory, we are not in git
  47. set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
  48. set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
  49. return()
  50. endif()
  51. set(GIT_DIR "${GIT_PARENT_DIR}/.git")
  52. endwhile()
  53. # check if this is a submodule
  54. if(NOT IS_DIRECTORY ${GIT_DIR})
  55. file(READ ${GIT_DIR} submodule)
  56. string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule})
  57. get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
  58. get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)
  59. endif()
  60. set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
  61. if(NOT EXISTS "${GIT_DATA}")
  62. file(MAKE_DIRECTORY "${GIT_DATA}")
  63. endif()
  64. if(NOT EXISTS "${GIT_DIR}/HEAD")
  65. return()
  66. endif()
  67. set(HEAD_FILE "${GIT_DATA}/HEAD")
  68. configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY)
  69. configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
  70. "${GIT_DATA}/grabRef.cmake"
  71. @ONLY)
  72. include("${GIT_DATA}/grabRef.cmake")
  73. set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE)
  74. set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE)
  75. endfunction()
  76. function(git_describe _var)
  77. if(NOT GIT_FOUND)
  78. find_package(Git QUIET)
  79. endif()
  80. get_git_head_revision(refspec hash)
  81. if(NOT GIT_FOUND)
  82. set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
  83. return()
  84. endif()
  85. if(NOT hash)
  86. set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE)
  87. return()
  88. endif()
  89. # TODO sanitize
  90. #if((${ARGN}" MATCHES "&&") OR
  91. # (ARGN MATCHES "||") OR
  92. # (ARGN MATCHES "\\;"))
  93. # message("Please report the following error to the project!")
  94. # message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
  95. #endif()
  96. #message(STATUS "Arguments to execute_process: ${ARGN}")
  97. execute_process(COMMAND
  98. "${GIT_EXECUTABLE}"
  99. describe
  100. ${hash}
  101. ${ARGN}
  102. WORKING_DIRECTORY
  103. "${CMAKE_SOURCE_DIR}"
  104. RESULT_VARIABLE
  105. res
  106. OUTPUT_VARIABLE
  107. out
  108. ERROR_QUIET
  109. OUTPUT_STRIP_TRAILING_WHITESPACE)
  110. if(NOT res EQUAL 0)
  111. set(out "${out}-${res}-NOTFOUND")
  112. endif()
  113. set(${_var} "${out}" PARENT_SCOPE)
  114. endfunction()
  115. function(git_get_exact_tag _var)
  116. git_describe(out --exact-match ${ARGN})
  117. set(${_var} "${out}" PARENT_SCOPE)
  118. endfunction()