[mlpack-git] master: Refactor CMake to get version info from git. Instead of subversion. This has been a long time coming... (15c5546)

gitdub at big.cc.gt.atl.ga.us gitdub at big.cc.gt.atl.ga.us
Tue Mar 24 22:35:25 EDT 2015


Repository : https://github.com/mlpack/mlpack

On branch  : master
Link       : https://github.com/mlpack/mlpack/compare/cbccdc78493a4db6cf6ebbf6442674bab8d9c22c...9724d6c63e878e4cbe98cd907c5e5f39175ef1bd

>---------------------------------------------------------------

commit 15c554665576d93e571f09efe580ca9ad391a75e
Author: Ryan Curtin <ryan at ratml.org>
Date:   Tue Mar 24 22:31:31 2015 -0400

    Refactor CMake to get version info from git.
    Instead of subversion.  This has been a long time coming...


>---------------------------------------------------------------

15c554665576d93e571f09efe580ca9ad391a75e
 CMake/CreateGitVersionHeader.cmake | 29 +++++++++++++++++++++++
 CMake/CreateSVNVersionHeader.cmake | 25 --------------------
 CMakeLists.txt                     | 48 ++++++++++++++++++++------------------
 3 files changed, 54 insertions(+), 48 deletions(-)

diff --git a/CMake/CreateGitVersionHeader.cmake b/CMake/CreateGitVersionHeader.cmake
new file mode 100644
index 0000000..7de9691
--- /dev/null
+++ b/CMake/CreateGitVersionHeader.cmake
@@ -0,0 +1,29 @@
+# Using the CMake subversion tools, create svnversion.hpp, which just contains
+# the implementation of GetVersion() assuming that we are working inside of a
+# subversion repository.
+find_package(Git)
+
+execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+    OUTPUT_VARIABLE NEW_GIT_REVISION
+    OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+# Get the current version, if it exists.
+if(EXISTS ${CMAKE_SOURCE_DIR}/src/mlpack/core/util/gitversion.hpp)
+  file(READ ${CMAKE_SOURCE_DIR}/src/mlpack/core/util/gitversion.hpp
+      _OLD_GITVERSION_CONTENTS)
+  string(REGEX REPLACE ".*return \"mlpack git-([0-9a-f]+)\".*" "\\1"
+      OLD_GIT_REVISION ${_OLD_GITVERSION_CONTENTS})
+else(EXISTS ${CMAKE_SOURCE_DIR}/src/mlpack/core/util/gitversion.hpp)
+  set(OLD_GIT_REVISION "notfound")
+endif(EXISTS ${CMAKE_SOURCE_DIR}/src/mlpack/core/util/gitversion.hpp)
+
+if("${OLD_GIT_REVISION}" STREQUAL "${NEW_GIT_REVISION}")
+  message(STATUS "gitversion.hpp is already up to date.")
+else("${OLD_GIT_REVISION}" STREQUAL "${NEW_GIT_REVISION}")
+  # Remove the old version.
+  file(REMOVE ${CMAKE_SOURCE_DIR}/src/mlpack/core/util/gitversion.hpp)
+  file(WRITE ${CMAKE_SOURCE_DIR}/src/mlpack/core/util/gitversion.hpp
+      "return \"mlpack git-${NEW_GIT_REVISION}\";\n")
+  message(STATUS "Updated gitversion.hpp.")
+endif("${OLD_GIT_REVISION}" STREQUAL "${NEW_GIT_REVISION}")
diff --git a/CMake/CreateSVNVersionHeader.cmake b/CMake/CreateSVNVersionHeader.cmake
deleted file mode 100644
index 4fc2067..0000000
--- a/CMake/CreateSVNVersionHeader.cmake
+++ /dev/null
@@ -1,25 +0,0 @@
-# Using the CMake subversion tools, create svnversion.hpp, which just contains
-# the implementation of GetVersion() assuming that we are working inside of a
-# subversion repository.
-include(FindSubversion)
-Subversion_WC_INFO(${CMAKE_SOURCE_DIR} MLPACK)
-
-# Get the current version, if it exists.
-if(EXISTS ${CMAKE_SOURCE_DIR}/src/mlpack/core/util/svnversion.hpp)
-  file(READ ${CMAKE_SOURCE_DIR}/src/mlpack/core/util/svnversion.hpp
-      _OLD_SVNVERSION_CONTENTS)
-  string(REGEX REPLACE ".*return \"mlpack trunk-r([0-9]+)\".*" "\\1"
-      OLD_SVN_REVISION ${_OLD_SVNVERSION_CONTENTS})
-else(EXISTS ${CMAKE_SOURCE_DIR}/src/mlpack/core/util/svnversion.hpp)
-  set(OLD_SVN_REVISION "notfound")
-endif(EXISTS ${CMAKE_SOURCE_DIR}/src/mlpack/core/util/svnversion.hpp)
-
-if("${OLD_SVN_REVISION}" STREQUAL "${MLPACK_WC_REVISION}")
-  message(STATUS "svnversion.hpp is already up to date.")
-else("${OLD_SVN_REVISION}" STREQUAL "${MLPACK_WC_REVISION}")
-  # Remove the old version.
-  file(REMOVE ${CMAKE_SOURCE_DIR}/src/mlpack/core/util/svnversion.hpp)
-  file(WRITE ${CMAKE_SOURCE_DIR}/src/mlpack/core/util/svnversion.hpp
-      "return \"mlpack trunk-r${MLPACK_WC_REVISION}\";\n")
-  message(STATUS "Updated svnversion.hpp.")
-endif("${OLD_SVN_REVISION}" STREQUAL "${MLPACK_WC_REVISION}")
diff --git a/CMakeLists.txt b/CMakeLists.txt
index cf6e91f..1a51fbf 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -253,42 +253,44 @@ else (WIN32)
   set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/)
 endif (WIN32)
 
-# Determine whether or not this is a subversion repository, so that we can set
-# the trunk revision if necessary for --version (#309).
-find_package(Subversion)
-set (USING_SVNVERSION "NO")
-if (Subversion_FOUND)
+# Determine whether or not this is a git repository, so that we can set the
+# version number if necessary.
+
+find_package(Git)
+set (USING_GIT "NO")
+if (GIT_FOUND)
   # Run svn info to find out if this is a working copy.  If the return code is
   # not 0, then it isn't.  The following line is taken from
   # FindSubversion.cmake...
-  execute_process(COMMAND ${Subversion_SVN_EXECUTABLE} info ${CMAKE_SOURCE_DIR}
-      OUTPUT_VARIABLE MLPACK_TMP_WC_INFO
-      ERROR_VARIABLE MLPACK_TMP_WC_INFO_ERROR
-      RESULT_VARIABLE MLPACK_TMP_WC_INFO_RESULT
+  execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
+      WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+      OUTPUT_VARIABLE MLPACK_TMP_REV_INFO
+      ERROR_VARIABLE MLPACK_TMP_REV_INFO_ERROR
+      RESULT_VARIABLE MLPACK_TMP_REV_INFO_RESULT
       OUTPUT_STRIP_TRAILING_WHITESPACE)
-  if (${MLPACK_TMP_WC_INFO_RESULT} EQUAL 0)
-    set (USING_SVNVERSION "YES")
-    add_definitions(-D__MLPACK_SUBVERSION)
-    include(CMake/CreateSVNVersionHeader.cmake)
+  if (${MLPACK_TMP_REV_INFO_RESULT} EQUAL 0)
+    set (USING_GIT "YES")
+    add_definitions(-D__MLPACK_GIT_VERSION)
+    include(CMake/CreateGitVersionHeader.cmake)
 
-    add_custom_target(mlpack_svnversion ALL
-        COMMAND ${CMAKE_COMMAND} -P CMake/CreateSVNVersionHeader.cmake
+    add_custom_target(mlpack_gitversion ALL
+        COMMAND ${CMAKE_COMMAND} -P CMake/CreateGitVersionHeader.cmake
         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-        COMMENT "Updating svnversion.hpp (if necessary)")
+        COMMENT "Updating gitnversion.hpp (if necessary)")
   # Add svnversion.hpp to the list of sources.
   set(MLPACK_SRCS ${MLPACK_SRCS}
-      "${CMAKE_CURRENT_SOURCE_DIR}/src/mlpack/core/util/svnversion.hpp")
-  endif (${MLPACK_TMP_WC_INFO_RESULT} EQUAL 0)
-endif (Subversion_FOUND)
+      "${CMAKE_CURRENT_SOURCE_DIR}/src/mlpack/core/util/gitversion.hpp")
+  endif (${MLPACK_TMP_REV_INFO_RESULT} EQUAL 0)
+endif (GIT_FOUND)
 
 # Recurse into the rest of the project.
 add_subdirectory(src/mlpack)
 
-if (USING_SVNVERSION STREQUAL "YES")
-  add_dependencies(mlpack mlpack_svnversion)
-endif (USING_SVNVERSION STREQUAL "YES")
+if (USING_GIT STREQUAL "YES")
+  add_dependencies(mlpack mlpack_gitversion)
+endif (USING_GIT STREQUAL "YES")
 
-# If we need to keep svnversion.hpp up to date, then make sure the mlpack target
+# If we need to keep gitversion.hpp up to date, then make sure the mlpack target
 # depends on it.
 
 # Make a target to generate the documentation.  If Doxygen isn't installed, then



More information about the mlpack-git mailing list