Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Buildsystem/CMake: Fix an issue with MSVC not finding git-binary when…

… updating the revisionhash/revisiondate + rename DISABLEGITCHECK parameter to WITHOUT_GIT (to adhere to our standard)

Also cleaned up the checks slightly + moved git-specific testing to its own macro (minor changes to shaurens original patch applied)
  • Loading branch information...
commit 9bd8baf1ab80e7a2f8431fb9d8f02bfc88e25ad2 1 parent 620a43b
@click click authored
View
4 CMakeLists.txt
@@ -61,6 +61,10 @@ if( UNIX )
find_package(BZip2)
endif()
+if( NOT DISABLEGITCHECK )
+ find_package(Git)
+endif()
+
# Find revision ID and hash of the sourcetree
include(cmake/genrev.cmake)
View
89 cmake/genrev.cmake
@@ -8,92 +8,59 @@
# 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}/cmake/macros/EnsureVersion.cmake)
-
-# User has manually chosen to ignore the git-tests, so we create an arbitrary string for the revisionhash/date as well
-if(DISABLEGITCHECK)
+# 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.
+if(WITHOUT_GIT)
message(STATUS "
- By choosing the DISABLEGITCHECK option, you waive all rights for support, and accept
+ By choosing the WITHOUT_GIT option, you waive all rights for support, and accept
that any or all requests for assistance by you to core developers will be rejected.
-
You, as user, take full responsibility for issues, problems etc that might arise
from using the core, as we we can not properly detect what codebase you're using.
-
We remind you that you need to use the repository and a proper version of git for
the revision/hash to work, and thus get our support if the need arises.
")
-
- # Set an arbitrary date and hash, so we can match on that
- set(rev_date "0000-00-00 00:00:00 +0000")
- set(rev_hash "TC-COPY-WITH-NO-GIT-SUPPORT")
+ set(rev_date "1970-01-01 00:00:00 +0000")
+ set(rev_hash "Archived")
else()
- set(_REQUIRED_GIT_VERSION "1.7")
- find_program(GIT_EXEC
- NAMES
- git git.cmd
- HINTS
- ENV PATH
- DOC "Full path to git commandline client"
- )
- MARK_AS_ADVANCED(GIT_EXEC)
-
- if(NOT GIT_EXEC)
- message(FATAL_ERROR "
- Git was NOT FOUND on your system - did you forget to install a recent version, or setting the path to it?
- Observe that for revision hash/date to work you need at least version ${_REQUIRED_GIT_VERSION}")
- else()
- execute_process(
- COMMAND "${GIT_EXEC}" --version
- WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
- OUTPUT_VARIABLE _GIT_VERSION
- ERROR_QUIET
- )
-
- # make sure we're using minimum the required version of git, so the "dirty-testing" will work properly
- ensure_version( "${_REQUIRED_GIT_VERSION}" "${_GIT_VERSION}" _GIT_VERSION_OK)
-
- # throw an error if we don't have a recent enough version of git...
- if(NOT _GIT_VERSION_OK)
- message(FATAL_ERROR "
- Git was found but is OUTDATED - did you forget to install a recent version, or setting the path to it?
- Observe that for revision hash/date to work you need at least version ${_REQUIRED_GIT_VERSION}")
- endif()
+ # Workaround for funny MSVC behaviour - this segment only run during compile
+ if(NOT BUILDDIR)
+ set(BUILDDIR ${CMAKE_BINARY_DIR})
+ set(_GIT_EXEC ${GIT_EXECUTABLE})
endif()
- if(_GIT_VERSION_OK)
+ if(_GIT_EXEC)
+ # Create a revision-string that we can use
execute_process(
- COMMAND "${GIT_EXEC}" describe --match init --dirty=+ --abbrev=12
+ COMMAND "${_GIT_EXEC}" describe --match init --dirty=+ --abbrev=12
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE rev_info
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
+
+ # And grab the commits timestamp
execute_process(
- COMMAND "${GIT_EXEC}" show -s --format=%ci
+ COMMAND "${_GIT_EXEC}" show -s --format=%ci
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE rev_date
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 "WARNING - Missing repository tags - you may need to pull tags with git fetch -t")
- message(STATUS "WARNING - Continuing anyway - note that the versionstring will be set to 0000-00-00 00:00:00 (Archived)")
- set(rev_date "0000-00-00 00:00:00 +0000")
- set(rev_hash "Archived")
- else()
- # Extract information required to build a proper versionstring
- string(REGEX REPLACE init-|[0-9]+-g "" rev_hash ${rev_info})
- endif()
endif()
-# Its not set during initial run
-if(NOT BUILDDIR)
- set(BUILDDIR ${CMAKE_BINARY_DIR})
+# 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 "WARNING - Missing repository tags - you may need to pull tags with git fetch -t")
+ message(STATUS "WARNING - Continuing anyway - note that the versionstring will be set to 0000-00-00 00:00:00 (Archived)")
+ set(rev_date "1970-01-01 00:00:00 +0000")
+ set(rev_hash "Archived")
+else()
+ # Extract information required to build a proper versionstring
+ string(REGEX REPLACE init-|[0-9]+-g "" rev_hash ${rev_info})
endif()
# Create the actual revision.h file from the above params
View
46 cmake/macros/FindGit.cmake
@@ -0,0 +1,46 @@
+# Copyright (C) 2008-2013 Trinity <http://www.trinitycore.org/>
+#
+# This file is free software; as a special exception the author gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# This program is distributed in the hope that it will be useful, but
+# 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}/cmake/macros/EnsureVersion.cmake)
+
+set(_REQUIRED_GIT_VERSION "1.7")
+
+find_program(GIT_EXECUTABLE
+ NAMES
+ git git.cmd
+ HINTS
+ ENV PATH
+ DOC "Full path to git commandline client"
+)
+MARK_AS_ADVANCED(GIT_EXECUTABLE)
+
+if(NOT GIT_EXECUTABLE)
+ message(FATAL_ERROR "
+ Git was NOT FOUND on your system - did you forget to install a recent version, or setting the path to it?
+ Observe that for revision hash/date to work you need at least version ${_REQUIRED_GIT_VERSION}")
+else()
+ message(STATUS "Found git binary : ${GIT_EXECUTABLE}")
+ execute_process(
+ COMMAND "${GIT_EXECUTABLE}" --version
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+ OUTPUT_VARIABLE _GIT_VERSION
+ ERROR_QUIET
+ )
+
+ # make sure we're using minimum the required version of git, so the "dirty-testing" will work properly
+ ensure_version( "${_REQUIRED_GIT_VERSION}" "${_GIT_VERSION}" _GIT_VERSION_OK)
+
+ # throw an error if we don't have a recent enough version of git...
+ if(NOT _GIT_VERSION_OK)
+ message(STATUS "Git version too old : ${_GIT_VERSION}")
+ message(FATAL_ERROR "
+ Git was found but is OUTDATED - did you forget to install a recent version, or setting the path to it?
+ Observe that for revision hash/date to work you need at least version ${_REQUIRED_GIT_VERSION}")
+ endif()
+endif()
View
2  cmake/options.cmake
@@ -15,4 +15,4 @@ option(USE_SCRIPTPCH "Use precompiled headers when compiling scripts"
option(USE_COREPCH "Use precompiled headers when compiling servers" 1)
option(WITH_WARNINGS "Show all warnings during compile" 0)
option(WITH_COREDEBUG "Include additional debug-code in core" 0)
-option(DISABLEGITCHECK "Disable the GIT testing routines" 0)
+option(WITHOUT_GIT "Disable the GIT testing routines" 0)
View
2  src/genrev/CMakeLists.txt
@@ -10,6 +10,6 @@
# Need to pass old ${CMAKE_BINARY_DIR} as param because its different at build stage
add_custom_target(revision.h ALL
- COMMAND ${CMAKE_COMMAND} -DBUILDDIR=${CMAKE_BINARY_DIR} -P ${CMAKE_SOURCE_DIR}/cmake/genrev.cmake
+ COMMAND ${CMAKE_COMMAND} -DGIT_EXEC=${GIT_EXECUTABLE} -DBUILDDIR=${CMAKE_BINARY_DIR} -P ${CMAKE_SOURCE_DIR}/cmake/genrev.cmake
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
Please sign in to comment.
Something went wrong with that request. Please try again.