summaryrefslogtreecommitdiff
path: root/cmake/VersionControl.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/VersionControl.cmake')
-rw-r--r--cmake/VersionControl.cmake82
1 files changed, 82 insertions, 0 deletions
diff --git a/cmake/VersionControl.cmake b/cmake/VersionControl.cmake
new file mode 100644
index 0000000..aa7f4ff
--- /dev/null
+++ b/cmake/VersionControl.cmake
@@ -0,0 +1,82 @@
+# -*- cmake -*-
+#
+# Utility macros for getting info from the version control system.
+# Originally taken from http://emeraldviewer.googlecode.com (GPLv2)
+
+set (PROJECT_SOURCE_DIR .)
+
+FIND_PACKAGE(Subversion)
+
+if (WIN32 AND NOT Subversion_FOUND)
+ # The official subversion client is not available, so fall back to
+ # tortoise if it is installed.
+ find_program(TORTOISE_WCREV_EXECUTABLE
+ NAMES SubWCRev.exe
+ PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\TortoiseSVN;Directory]/bin"
+ )
+
+ if (NOT TORTOISE_WCREV_EXECUTABLE)
+ message(INFO "TortoiseSVN was not found.")
+ endif (NOT TORTOISE_WCREV_EXECUTABLE)
+endif (WIN32 AND NOT Subversion_FOUND)
+
+# Use this macro on all platforms to set _output_variable to the current SVN
+# revision.
+macro(vcs_get_revision _output_variable)
+ if (Subversion_FOUND)
+ # The included Subversion macros performs operations that require auth,
+ # which breaks when building under fakeroot. Replacing with a custom
+ # command. --Ambroff
+ # Subversion_WC_INFO(${PROJECT_SOURCE_DIR} _Indra)
+ # set(${_output_variable} ${_Indra_WC_LAST_CHANGED_REV})
+
+ execute_process(
+ COMMAND ${Subversion_SVN_EXECUTABLE} info ../
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ OUTPUT_VARIABLE _svn_info_output
+ ERROR_VARIABLE _svn_info_error
+ RESULT_VARIABLE _svn_info_result
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_STRIP_TRAILING_WHITESPACE
+ )
+
+ if (NOT ${_svn_info_result} EQUAL 0)
+ message(STATUS "svn info failed: ${_svn_info_error}")
+ set(${_output_variable} 0)
+ else (NOT ${_svn_info_result} EQUAL 0)
+ string(REGEX REPLACE
+ "(.*)?Last Changed Rev: ([0-9]+).*$"
+ "\\2"
+ ${_output_variable}
+ ${_svn_info_output})
+ endif (NOT ${_svn_info_result} EQUAL 0)
+ else (Subversion_FOUND)
+ if (WIN32 AND TORTOISE_WCREV_EXECUTABLE)
+ # try to find TortoisSVN if we are on windows.
+ execute_process(
+ COMMAND ${TORTOISE_WCREV_EXECUTABLE} ../
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ OUTPUT_VARIABLE _tortoise_rev_info
+ ERROR_VARIABLE _tortoise_rev_info_error
+ RESULT_VARIABLE _tortoise_rev_info_result
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_STRIP_TRAILING_WHITESPACE
+ )
+
+ if (NOT ${_tortoise_rev_info_result} EQUAL 0)
+ message(STATUS "Command '${_tortoise_rev_info_error} ${PROJECT_SOURCE_DIR}' failed: ${_tortoise_rev_info_error}")
+ set(${_output_variable} 0)
+ else (NOT ${_tortoise_rev_info_result} EQUAL 0)
+ string(REGEX REPLACE
+ "(.*\n)?Last committed at revision ([0-9]+).*$"
+ "\\2"
+ ${_output_variable} "${_tortoise_rev_info}")
+ endif (NOT ${_tortoise_rev_info_result} EQUAL 0)
+ else (WIN32 AND TORTOISE_WCREV_EXECUTABLE)
+ # Ruh-roh... we can't get the revision, so set it to '0'
+ message(STATUS
+ "No subversion client is installed. Setting build number to 0.")
+ set(${_output_variable} 0)
+ endif (WIN32 AND TORTOISE_WCREV_EXECUTABLE)
+ endif (Subversion_FOUND)
+endmacro(vcs_get_revision)