VersionConfig.cmake 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. set(OBS_COMPANY_NAME "OBS Project")
  2. set(OBS_PRODUCT_NAME "OBS Studio")
  3. set(OBS_WEBSITE "https://www.obsproject.com")
  4. set(OBS_COMMENTS "Free and open source software for video recording and live streaming")
  5. set(OBS_LEGAL_COPYRIGHT "(C) Lain Bailey")
  6. # Configure default version strings
  7. set(_OBS_DEFAULT_VERSION "0" "0" "1")
  8. set(_OBS_RELEASE_CANDIDATE "0" "0" "0" "0")
  9. set(_OBS_BETA "0" "0" "0" "0")
  10. # Set full and canonical OBS version from current git tag or manual override
  11. if(NOT DEFINED OBS_VERSION_OVERRIDE)
  12. if(NOT DEFINED RELEASE_CANDIDATE
  13. AND NOT DEFINED BETA
  14. AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
  15. execute_process(
  16. COMMAND git describe --always --tags --dirty=-modified
  17. OUTPUT_VARIABLE _OBS_VERSION
  18. ERROR_VARIABLE _GIT_DESCRIBE_ERR
  19. WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
  20. RESULT_VARIABLE _OBS_VERSION_RESULT
  21. OUTPUT_STRIP_TRAILING_WHITESPACE)
  22. if(_GIT_DESCRIBE_ERR)
  23. message(FATAL_ERROR "Could not fetch OBS version tag from git.\n" ${_GIT_DESCRIBE_ERR})
  24. endif()
  25. if(_OBS_VERSION_RESULT EQUAL 0)
  26. if(${_OBS_VERSION} MATCHES "rc[0-9]+$")
  27. set(RELEASE_CANDIDATE ${_OBS_VERSION})
  28. elseif(${_OBS_VERSION} MATCHES "beta[0-9]+$")
  29. set(BETA ${_OBS_VERSION})
  30. else()
  31. string(REPLACE "-" "." _CANONICAL_SPLIT ${_OBS_VERSION})
  32. string(REPLACE "." ";" _CANONICAL_SPLIT ${_CANONICAL_SPLIT})
  33. list(GET _CANONICAL_SPLIT 0 1 2 _OBS_VERSION_CANONICAL)
  34. string(REPLACE "." ";" _OBS_VERSION ${_OBS_VERSION})
  35. # Get 8-character commit hash without "g" prefix
  36. foreach(VERSION_PART ${_CANONICAL_SPLIT})
  37. if(VERSION_PART MATCHES "^g")
  38. string(SUBSTRING ${VERSION_PART}, 1, 8, OBS_COMMIT)
  39. break()
  40. endif()
  41. endforeach()
  42. endif()
  43. endif()
  44. endif()
  45. # Set release candidate version information Must be a string in the format of "x.x.x-rcx"
  46. if(DEFINED RELEASE_CANDIDATE)
  47. string(REPLACE "-rc" "." _OBS_RELEASE_CANDIDATE ${RELEASE_CANDIDATE})
  48. string(REPLACE "." ";" _OBS_VERSION ${RELEASE_CANDIDATE})
  49. string(REPLACE "." ";" _OBS_RELEASE_CANDIDATE ${_OBS_RELEASE_CANDIDATE})
  50. list(GET _OBS_RELEASE_CANDIDATE 0 1 2 _OBS_VERSION_CANONICAL)
  51. # Set beta version information Must be a string in the format of "x.x.x-betax"
  52. elseif(DEFINED BETA)
  53. string(REPLACE "-beta" "." _OBS_BETA ${BETA})
  54. string(REPLACE "." ";" _OBS_VERSION ${BETA})
  55. string(REPLACE "." ";" _OBS_BETA ${_OBS_BETA})
  56. list(GET _OBS_BETA 0 1 2 _OBS_VERSION_CANONICAL)
  57. elseif(NOT DEFINED _OBS_VERSION)
  58. set(_OBS_VERSION ${_OBS_DEFAULT_VERSION})
  59. set(_OBS_VERSION_CANONICAL ${_OBS_DEFAULT_VERSION})
  60. endif()
  61. else()
  62. string(REPLACE "." ";" _OBS_VERSION "${OBS_VERSION_OVERRIDE}")
  63. string(REPLACE "-" ";" _OBS_VERSION_CANONICAL "${OBS_VERSION_OVERRIDE}")
  64. list(GET _OBS_VERSION_CANONICAL 0 _OBS_VERSION_CANONICAL)
  65. string(REPLACE "." ";" _OBS_VERSION_CANONICAL "${_OBS_VERSION_CANONICAL}")
  66. endif()
  67. list(GET _OBS_VERSION_CANONICAL 0 OBS_VERSION_MAJOR)
  68. list(GET _OBS_VERSION_CANONICAL 1 OBS_VERSION_MINOR)
  69. list(GET _OBS_VERSION_CANONICAL 2 OBS_VERSION_PATCH)
  70. list(GET _OBS_RELEASE_CANDIDATE 0 OBS_RELEASE_CANDIDATE_MAJOR)
  71. list(GET _OBS_RELEASE_CANDIDATE 1 OBS_RELEASE_CANDIDATE_MINOR)
  72. list(GET _OBS_RELEASE_CANDIDATE 2 OBS_RELEASE_CANDIDATE_PATCH)
  73. list(GET _OBS_RELEASE_CANDIDATE 3 OBS_RELEASE_CANDIDATE)
  74. list(GET _OBS_BETA 0 OBS_BETA_MAJOR)
  75. list(GET _OBS_BETA 1 OBS_BETA_MINOR)
  76. list(GET _OBS_BETA 2 OBS_BETA_PATCH)
  77. list(GET _OBS_BETA 3 OBS_BETA)
  78. string(REPLACE ";" "." OBS_VERSION_CANONICAL "${_OBS_VERSION_CANONICAL}")
  79. string(REPLACE ";" "." OBS_VERSION "${_OBS_VERSION}")
  80. if(OBS_RELEASE_CANDIDATE GREATER 0)
  81. message(
  82. AUTHOR_WARNING
  83. "******************************************************************************\n"
  84. " + OBS-Studio - Release candidate detected, OBS_VERSION is now: ${OBS_VERSION}\n"
  85. "******************************************************************************")
  86. elseif(OBS_BETA GREATER 0)
  87. message(
  88. AUTHOR_WARNING
  89. "******************************************************************************\n"
  90. " + OBS-Studio - Beta detected, OBS_VERSION is now: ${OBS_VERSION}\n"
  91. "******************************************************************************")
  92. endif()
  93. # Define build number cache file
  94. set(BUILD_NUMBER_CACHE
  95. ${CMAKE_SOURCE_DIR}/cmake/.CMakeBuildNumber
  96. CACHE INTERNAL "OBS build number cache file")
  97. # Read build number from cache file or manual override
  98. if(NOT DEFINED OBS_BUILD_NUMBER)
  99. if(EXISTS ${BUILD_NUMBER_CACHE})
  100. file(READ ${BUILD_NUMBER_CACHE} OBS_BUILD_NUMBER)
  101. math(EXPR OBS_BUILD_NUMBER "${OBS_BUILD_NUMBER}+1")
  102. else()
  103. set(OBS_BUILD_NUMBER "1")
  104. endif()
  105. file(WRITE ${BUILD_NUMBER_CACHE} "${OBS_BUILD_NUMBER}")
  106. endif()
  107. message(STATUS "OBS: Application Version: ${OBS_VERSION} - Build Number: ${OBS_BUILD_NUMBER}")