diff --git a/cmake/modules/GetSVN.cmake b/cmake/modules/GetSVN.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..c9609a0f3e1fd0fa72b8ba62a68df2801f188bbf
--- /dev/null
+++ b/cmake/modules/GetSVN.cmake
@@ -0,0 +1,73 @@
+if( GENERATE_DUMMY )
+  file( WRITE svnrevision.h.in "\n" )
+else()
+  include( FindSubversion )
+
+  if( SUBVERSION_FOUND )
+    # Copied from FindSubversion: need to change to fix the SEND_ERROR problem
+
+    # the subversion commands should be executed with the C locale, otherwise
+    # the message (which are parsed) may be translated, Alex
+    set( _Subversion_SAVED_LC_ALL "$ENV{LC_ALL}" )
+    set( ENV{LC_ALL} C )
+
+    execute_process( COMMAND ${Subversion_SVN_EXECUTABLE} info ${SOURCE_DIR}
+      OUTPUT_VARIABLE NEXT_WC_INFO
+      ERROR_VARIABLE Subversion_svn_info_error
+      RESULT_VARIABLE Subversion_svn_info_result
+      OUTPUT_STRIP_TRAILING_WHITESPACE )
+
+    if( NOT ${Subversion_svn_info_result} EQUAL 0 )
+      message( "${SOURCE_DIR} is not a subversion directory" )
+      file( WRITE svnrevision.h.in "\n" )
+    else()
+      string( REGEX REPLACE "^(.*\n)?URL: ([^\n]+).*"
+        "\\2" NEXT_WC_URL "${NEXT_WC_INFO}" )
+      string( REGEX REPLACE "^(.*\n)?Repository Root: ([^\n]+).*"
+        "\\2" NEXT_WC_ROOT "${NEXT_WC_INFO}" )
+      string( REGEX REPLACE "^(.*\n)?Revision: ([^\n]+).*"
+        "\\2" NEXT_WC_REVISION "${NEXT_WC_INFO}" )
+      string( REGEX REPLACE "^(.*\n)?Last Changed Author: ([^\n]+).*"
+        "\\2" NEXT_WC_LAST_CHANGED_AUTHOR "${NEXT_WC_INFO}" )
+      string( REGEX REPLACE "^(.*\n)?Last Changed Rev: ([^\n]+).*"
+        "\\2" NEXT_WC_LAST_CHANGED_REV "${NEXT_WC_INFO}" )
+      string( REGEX REPLACE "^(.*\n)?Last Changed Date: ([^\n]+).*"
+        "\\2" NEXT_WC_LAST_CHANGED_DATE "${NEXT_WC_INFO}" )
+      
+      string( REGEX REPLACE "^(.*)?:(.*)"
+        "\\2" NEXT_WC_URL_PATH "${NEXT_WC_URL}" )
+      string( REGEX REPLACE "^(.*)?:(.*)"
+        "\\2" NEXT_WC_ROOT_PATH "${NEXT_WC_ROOT}" )
+      
+      file( RELATIVE_PATH NEXT_WC_RELATIVE_URL "${NEXT_WC_ROOT_PATH}" "${NEXT_WC_URL_PATH}" )
+        
+      execute_process( COMMAND ${Subversion_SVN_EXECUTABLE} status ${SOURCE_DIR}
+        OUTPUT_VARIABLE NEXT_WC_STATUS
+        ERROR_VARIABLE Subversion_svn_status_error
+        RESULT_VARIABLE Subversion_svn_status_result
+        OUTPUT_STRIP_TRAILING_WHITESPACE )
+      
+      if( ${Subversion_svn_status_result} EQUAL 0 )
+        if( NEXT_WC_STATUS )
+          set( NEXT_WC_STATUS "M" )
+        else()
+          set( NEXT_WC_STATUS "" )
+        endif()
+      endif()
+        
+      # write a file with the SVNVERSION define
+      file( WRITE  svnrevision.h.in "#define SVNREVISION    \"${NEXT_WC_LAST_CHANGED_REV}${NEXT_WC_STATUS}\"\n" )
+      file( APPEND svnrevision.h.in "#define SVNRELATIVEURL \"${NEXT_WC_RELATIVE_URL}\"\n" )
+    endif()
+
+    # restore the previous LC_ALL
+    set( ENV{LC_ALL} ${_Subversion_SAVED_LC_ALL} )
+  else()
+    message( "Subversion executable not found!" )
+    file( WRITE svnrevision.h.in "\n" )
+  endif()
+endif()
+
+# copy the file to the final header only if the version changes
+# reduces needless rebuilds
+execute_process( COMMAND ${CMAKE_COMMAND} -E copy_if_different svnrevision.h.in svnrevision.h )