From 56895ee07a76366e2e9e003c8b5f14358415828e Mon Sep 17 00:00:00 2001 From: Nathan Dorfman Date: Wed, 23 Oct 2019 14:54:00 -0600 Subject: [PATCH] cmake: Fix generation of version.cpp --- cmake/{GenVersion.cmake => GitVersion.cmake} | 68 +++++++++++--------- cmake/Version.cmake | 20 +++--- 2 files changed, 46 insertions(+), 42 deletions(-) rename cmake/{GenVersion.cmake => GitVersion.cmake} (52%) diff --git a/cmake/GenVersion.cmake b/cmake/GitVersion.cmake similarity index 52% rename from cmake/GenVersion.cmake rename to cmake/GitVersion.cmake index 992539507..a367787f1 100644 --- a/cmake/GenVersion.cmake +++ b/cmake/GitVersion.cmake @@ -29,40 +29,46 @@ # Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers # Check what commit we're on -execute_process(COMMAND "${GIT}" rev-parse --short=9 HEAD RESULT_VARIABLE RET OUTPUT_VARIABLE COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE) -if(RET) - # Something went wrong, set the version tag to -unknown - - message(WARNING "Cannot determine current commit. Make sure that you are building either from a Git working tree or from a source archive.") - set(VERSIONTAG "unknown") - set(VERSION_IS_RELEASE "false") - configure_file("src/version.cpp.in" "${TO}") -else() - string(SUBSTRING ${COMMIT} 0 9 COMMIT) - message(STATUS "You are currently on commit ${COMMIT}") - - # Get all the tags - execute_process(COMMAND "${GIT}" rev-list --tags --max-count=1 --abbrev-commit RESULT_VARIABLE RET OUTPUT_VARIABLE TAGGEDCOMMIT OUTPUT_STRIP_TRAILING_WHITESPACE) - - if(NOT TAGGEDCOMMIT) - message(WARNING "Cannot determine most recent tag. Make sure that you are building either from a Git working tree or from a source archive.") - set(VERSIONTAG "${COMMIT}") +function (get_version_tag_from_git GIT) + execute_process(COMMAND "${GIT}" rev-parse --short=9 HEAD + RESULT_VARIABLE RET + OUTPUT_VARIABLE COMMIT + OUTPUT_STRIP_TRAILING_WHITESPACE) + + if(RET) + # Something went wrong, set the version tag to -unknown + + message(WARNING "Cannot determine current commit. Make sure that you are building either from a Git working tree or from a source archive.") + set(VERSIONTAG "unknown") set(VERSION_IS_RELEASE "false") else() - message(STATUS "The most recent tag was at ${TAGGEDCOMMIT}") - - # Check if we're building that tagged commit or a different one - if(COMMIT STREQUAL TAGGEDCOMMIT) - message(STATUS "You are building a tagged release") - set(VERSIONTAG "release") - set(VERSION_IS_RELEASE "true") - else() - message(STATUS "You are ahead of or behind a tagged release") + string(SUBSTRING ${COMMIT} 0 9 COMMIT) + message(STATUS "You are currently on commit ${COMMIT}") + + # Get all the tags + execute_process(COMMAND "${GIT}" rev-list --tags --max-count=1 --abbrev-commit RESULT_VARIABLE RET OUTPUT_VARIABLE TAGGEDCOMMIT OUTPUT_STRIP_TRAILING_WHITESPACE) + + if(NOT TAGGEDCOMMIT) + message(WARNING "Cannot determine most recent tag. Make sure that you are building either from a Git working tree or from a source archive.") set(VERSIONTAG "${COMMIT}") set(VERSION_IS_RELEASE "false") - endif() - endif() + else() + message(STATUS "The most recent tag was at ${TAGGEDCOMMIT}") - configure_file("src/version.cpp.in" "${TO}") -endif() + # Check if we're building that tagged commit or a different one + if(COMMIT STREQUAL TAGGEDCOMMIT) + message(STATUS "You are building a tagged release") + set(VERSIONTAG "release") + set(VERSION_IS_RELEASE "true") + else() + message(STATUS "You are ahead of or behind a tagged release") + set(VERSIONTAG "${COMMIT}") + set(VERSION_IS_RELEASE "false") + endif() + endif() + endif() + + set(VERSIONTAG "${VERSIONTAG}" PARENT_SCOPE) + set(VERSION_IS_RELEASE "${VERSION_IS_RELEASE}" PARENT_SCOPE) +endfunction() diff --git a/cmake/Version.cmake b/cmake/Version.cmake index 632c1431c..26c2e2a1d 100644 --- a/cmake/Version.cmake +++ b/cmake/Version.cmake @@ -26,27 +26,25 @@ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -function (write_static_version_header hash) - set(VERSIONTAG "${hash}") +function (write_version tag) + set(VERSIONTAG "${tag}" CACHE STRING "The tag portion of the Monero software version" FORCE) configure_file("${CMAKE_SOURCE_DIR}/src/version.cpp.in" "${CMAKE_BINARY_DIR}/version.cpp") endfunction () find_package(Git QUIET) if ("$Format:$" STREQUAL "") # We're in a tarball; use hard-coded variables. - write_static_version_header("release") + set(VERSION_IS_RELEASE "true") + write_version("release") elseif (GIT_FOUND OR Git_FOUND) message(STATUS "Found Git: ${GIT_EXECUTABLE}") - add_custom_command( - OUTPUT "${CMAKE_BINARY_DIR}/version.cpp" - COMMAND "${CMAKE_COMMAND}" - "-D" "GIT=${GIT_EXECUTABLE}" - "-D" "TO=${CMAKE_BINARY_DIR}/version.cpp" - "-P" "cmake/GenVersion.cmake" - WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}") + include(GitVersion) + get_version_tag_from_git("${GIT_EXECUTABLE}") + write_version("${VERSIONTAG}") else() message(STATUS "WARNING: Git was not found!") - write_static_version_header("unknown") + set(VERSION_IS_RELEASE "false") + write_version("unknown") endif () add_custom_target(genversion ALL DEPENDS "${CMAKE_BINARY_DIR}/version.cpp")