diff options
author | ShinDarth <borzifrancesco@gmail.com> | 2016-08-09 16:09:37 +0200 |
---|---|---|
committer | ShinDarth <borzifrancesco@gmail.com> | 2016-08-09 16:09:37 +0200 |
commit | 7e14d05f719767f6af364e0f4b955fd49ead8a9f (patch) | |
tree | 234d205e25cacebe09c4a105028164ebb88240c2 /src/cmake/genrev.cmake | |
parent | 43381567452ef7540e4bb7e01c2fa4be5524dace (diff) |
CMake: fixed git informations
Diffstat (limited to 'src/cmake/genrev.cmake')
-rw-r--r-- | src/cmake/genrev.cmake | 86 |
1 files changed, 64 insertions, 22 deletions
diff --git a/src/cmake/genrev.cmake b/src/cmake/genrev.cmake index 23a72aa27b..edd31590a5 100644 --- a/src/cmake/genrev.cmake +++ b/src/cmake/genrev.cmake @@ -1,4 +1,4 @@ -# Copyright (C) +# Copyright (C) TrinityCore, AzerothCore # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without @@ -8,34 +8,76 @@ # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -include(${CMAKE_SOURCE_DIR}/src/cmake/macros/EnsureVersion.cmake) +# User has manually chosen to ignore the git-tests, so throw them a warning. +# This is done EACH compile so they can be alerted about the consequences. -set(_REQUIRED_GIT_VERSION "1.7") - -# Its not set during initial run if(NOT BUILDDIR) + # Workaround for funny MSVC behaviour - this segment is only used when using cmake gui set(BUILDDIR ${CMAKE_BINARY_DIR}) endif() -FIND_PROGRAM(SVN_EXECUTABLE svn DOC "subversion command line client") +if(WITHOUT_GIT) + set(rev_date "1970-01-01 00:00:00 +0000") + set(rev_hash "unknown") + set(rev_branch "Archived") +else() + # Workaround for not correctly detecting git + if (NOT GIT_EXECUTABLE) + set(GIT_EXECUTABLE "git") + endif() + + if(GIT_EXECUTABLE) + # Create a revision-string that we can use + execute_process( + COMMAND "${GIT_EXECUTABLE}" describe --long --match 0.1 --dirty=+ --abbrev=12 + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + OUTPUT_VARIABLE rev_info + OUTPUT_STRIP_TRAILING_WHITESPACE -# only do this if we have an svn client. -if (SVN_EXECUTABLE) - MACRO(Subversion_GET_REVISION dir variable) - EXECUTE_PROCESS(COMMAND ${SVN_EXECUTABLE} info ${dir} - OUTPUT_VARIABLE ${variable} - OUTPUT_STRIP_TRAILING_WHITESPACE) - STRING(REGEX REPLACE "^(.*\n)?Revision: ([^\n]+).*" - "\\2" ${variable} "${${variable}}") - ENDMACRO(Subversion_GET_REVISION) + ) - Subversion_GET_REVISION(${CMAKE_SOURCE_DIR} REV2) -endif () + # And grab the commits timestamp + execute_process( + COMMAND "${GIT_EXECUTABLE}" show -s --format=%ci + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + OUTPUT_VARIABLE rev_date + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + ) - set(rev_hash_str ${REV2}) - set(rev_hash ${REV2}) - set(rev_id_str ${REV2}) - set(rev_id ${REV2}) + # Also retrieve branch name + execute_process( + COMMAND "${GIT_EXECUTABLE}" rev-parse --abbrev-ref HEAD + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + OUTPUT_VARIABLE rev_branch + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + ) + endif() + # Last minute check - ensure that we have a proper revision + # If everything above fails (means the user has erased the git revision control directory or removed the origin/HEAD tag) + if(NOT rev_info) + # No valid ways available to find/set the revision/hash, so let's force some defaults + message(STATUS " + Could not find a proper repository signature (hash) - you may need to pull tags with git fetch -t + Continuing anyway - note that the versionstring will be set to \"unknown 1970-01-01 00:00:00 (Archived)\"") + set(rev_date "1970-01-01 00:00:00 +0000") + set(rev_hash "unknown") + set(rev_branch "Archived") + else() + # Extract information required to build a proper versionstring + string(REGEX REPLACE 0.1-|[0-9]+-g "" rev_hash ${rev_info}) + endif() +endif() - configure_file ( ${CMAKE_SOURCE_DIR}/revision.h.in.cmake ${BUILDDIR}/revision.h ) +# Create the actual revision.h file from the above params +if(NOT "${rev_hash_cached}" MATCHES "${rev_hash}" OR NOT "${rev_branch_cached}" MATCHES "${rev_branch}" OR NOT EXISTS "${BUILDDIR}/revision_data.h") + configure_file( + "${CMAKE_SOURCE_DIR}/revision.h.in.cmake" + "${BUILDDIR}/revision.h" + @ONLY + ) + set(rev_hash_cached "${rev_hash}" CACHE INTERNAL "Cached commit-hash") + set(rev_branch_cached "${rev_branch}" CACHE INTERNAL "Cached branch name") +endif() |