OpusPackageVersion.cmake 2.42 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
if(__opus_version)
  return()
endif()
set(__opus_version INCLUDED)

function(get_package_version PACKAGE_VERSION PROJECT_VERSION)

  find_package(Git)
  if(GIT_FOUND AND EXISTS "${CMAKE_CURRENT_LIST_DIR}/.git")
    execute_process(COMMAND ${GIT_EXECUTABLE}
                    --git-dir=${CMAKE_CURRENT_LIST_DIR}/.git describe
                    --tags --match "v*" OUTPUT_VARIABLE OPUS_PACKAGE_VERSION)
    if(OPUS_PACKAGE_VERSION)
      string(STRIP ${OPUS_PACKAGE_VERSION}, OPUS_PACKAGE_VERSION)
      string(REPLACE \n
                     ""
                     OPUS_PACKAGE_VERSION
                     ${OPUS_PACKAGE_VERSION})
      string(REPLACE ,
                     ""
                     OPUS_PACKAGE_VERSION
                     ${OPUS_PACKAGE_VERSION})

      string(SUBSTRING ${OPUS_PACKAGE_VERSION}
                       1
                       -1
                       OPUS_PACKAGE_VERSION)
      message(STATUS "Opus package version from git repo: ${OPUS_PACKAGE_VERSION}")
    endif()

  elseif(EXISTS "${CMAKE_CURRENT_LIST_DIR}/package_version"
         AND NOT OPUS_PACKAGE_VERSION)
    # Not a git repo, lets' try to parse it from package_version file if exists
    file(STRINGS package_version OPUS_PACKAGE_VERSION
         LIMIT_COUNT 1
         REGEX "PACKAGE_VERSION=")
    string(REPLACE "PACKAGE_VERSION="
                   ""
                   OPUS_PACKAGE_VERSION
                   ${OPUS_PACKAGE_VERSION})
    string(REPLACE "\""
                   ""
                   OPUS_PACKAGE_VERSION
                   ${OPUS_PACKAGE_VERSION})
    # In case we have a unknown dist here we just replace it with 0
    string(REPLACE "unknown"
                   "0"
                   OPUS_PACKAGE_VERSION
                   ${OPUS_PACKAGE_VERSION})
      message(STATUS "Opus package version from package_version file: ${OPUS_PACKAGE_VERSION}")
  endif()

  if(OPUS_PACKAGE_VERSION)
    string(REGEX
      REPLACE "^([0-9]+.[0-9]+\\.?([0-9]+)?).*"
               "\\1"
               OPUS_PROJECT_VERSION
               ${OPUS_PACKAGE_VERSION})
  else()
    # fail to parse version from git and package version
    message(WARNING "Could not get package version.")
    set(OPUS_PACKAGE_VERSION 0)
    set(OPUS_PROJECT_VERSION 0)
  endif()

  message(STATUS "Opus project version: ${OPUS_PROJECT_VERSION}")

  set(PACKAGE_VERSION ${OPUS_PACKAGE_VERSION} PARENT_SCOPE)
  set(PROJECT_VERSION ${OPUS_PROJECT_VERSION} PARENT_SCOPE)
endfunction()