1# - Extract information from a subversion working copy 2# The module defines the following variables: 3# Subversion_SVN_EXECUTABLE - path to svn command line client 4# Subversion_VERSION_SVN - version of svn command line client 5# Subversion_FOUND - true if the command line client was found 6# If the command line client executable is found the macro 7# Subversion_WC_INFO(<dir> <var-prefix>) 8# is defined to extract information of a subversion working copy at 9# a given location. The macro defines the following variables: 10# <var-prefix>_WC_URL - url of the repository (at <dir>) 11# <var-prefix>_WC_ROOT - root url of the repository 12# <var-prefix>_WC_REVISION - current revision 13# <var-prefix>_WC_LAST_CHANGED_AUTHOR - author of last commit 14# <var-prefix>_WC_LAST_CHANGED_DATE - date of last commit 15# <var-prefix>_WC_LAST_CHANGED_REV - revision of last commit 16# <var-prefix>_WC_LAST_CHANGED_LOG - last log of base revision 17# <var-prefix>_WC_INFO - output of command `svn info <dir>' 18# Example usage: 19# FIND_PACKAGE(Subversion) 20# IF(Subversion_FOUND) 21# Subversion_WC_INFO(${PROJECT_SOURCE_DIR} Project) 22# MESSAGE("Current revision is ${Project_WC_REVISION}") 23# ENDIF(Subversion_FOUND) 24 25# Copyright (c) 2006, Tristan Carel 26# All rights reserved. 27# Redistribution and use in source and binary forms, with or without 28# modification, are permitted provided that the following conditions are met: 29# 30# * Redistributions of source code must retain the above copyright 31# notice, this list of conditions and the following disclaimer. 32# * Redistributions in binary form must reproduce the above copyright 33# notice, this list of conditions and the following disclaimer in the 34# documentation and/or other materials provided with the distribution. 35# * Neither the name of the University of California, Berkeley nor the 36# names of its contributors may be used to endorse or promote products 37# derived from this software without specific prior written permission. 38# 39# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY 40# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 41# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 42# DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY 43# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 44# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 45# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 46# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 47# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 48# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 49 50# $Id: FindSubversion.cmake,v 1.1.2.1 2006/11/13 17:59:54 hoffman Exp $ 51 52SET(Subversion_FOUND FALSE) 53SET(Subversion_SVN_FOUND FALSE) 54 55FIND_PROGRAM(Subversion_SVN_EXECUTABLE svn 56 DOC "subversion command line client") 57MARK_AS_ADVANCED(Subversion_SVN_EXECUTABLE) 58 59IF(Subversion_SVN_EXECUTABLE) 60 SET(Subversion_SVN_FOUND TRUE) 61 SET(Subversion_FOUND TRUE) 62 63 MACRO(Subversion_WC_INFO dir prefix) 64 EXECUTE_PROCESS(COMMAND ${Subversion_SVN_EXECUTABLE} --version 65 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} 66 OUTPUT_VARIABLE Subversion_VERSION_SVN 67 OUTPUT_STRIP_TRAILING_WHITESPACE) 68 MESSAGE(STATUS "Getting svn version from ${dir}") 69 70 EXECUTE_PROCESS(COMMAND ${Subversion_SVN_EXECUTABLE} info --xml . 71 WORKING_DIRECTORY ${dir} 72 OUTPUT_VARIABLE ${prefix}_WC_INFO 73 ERROR_VARIABLE Subversion_svn_info_error 74 RESULT_VARIABLE Subversion_svn_info_result 75 OUTPUT_STRIP_TRAILING_WHITESPACE) 76 77 IF(NOT ${Subversion_svn_info_result} EQUAL 0) 78 MESSAGE(SEND_ERROR "Command \"${Subversion_SVN_EXECUTABLE} info ${dir}\" failed with output:\n${Subversion_svn_info_error}") 79 ELSE(NOT ${Subversion_svn_info_result} EQUAL 0) 80 STRING(REPLACE "\n" "" ${prefix}_WC_INFO "${${prefix}_WC_INFO}") 81 STRING(REGEX REPLACE "^(.*\n)?svn, version ([.0-9]+).*" "\\2" Subversion_VERSION_SVN "${Subversion_VERSION_SVN}") 82 STRING(REGEX REPLACE ".*<url>([^<]+)</url>.*" "\\1" ${prefix}_WC_URL "${${prefix}_WC_INFO}") 83 STRING(REGEX REPLACE ".*<entry[^>]+revision=\"([0-9]+)\">.*" "\\1" ${prefix}_WC_REVISION "${${prefix}_WC_INFO}") 84 STRING(REGEX REPLACE ".*<author>([^<]+)</author>.*" "\\1" ${prefix}_WC_LAST_CHANGED_AUTHOR "${${prefix}_WC_INFO}") 85 STRING(REGEX REPLACE ".*<commit +revision=\"([0-9]+)\".*" "\\1" ${prefix}_WC_LAST_CHANGED_REV "${${prefix}_WC_INFO}") 86 STRING(REGEX REPLACE ".*<date>([^<]+)</date>.*" "\\1" ${prefix}_WC_LAST_CHANGED_DATE "${${prefix}_WC_INFO}") 87 ENDIF(NOT ${Subversion_svn_info_result} EQUAL 0) 88 89 EXECUTE_PROCESS(COMMAND 90 ${Subversion_SVN_EXECUTABLE} log -r BASE ${dir} 91 WORKING_DIRECTORY ${dir} 92 OUTPUT_VARIABLE Subversion_LAST_CHANGED_LOG 93 ERROR_VARIABLE Subversion_svn_log_error 94 RESULT_VARIABLE Subversion_svn_log_result 95 OUTPUT_STRIP_TRAILING_WHITESPACE) 96 97 IF(NOT ${Subversion_svn_log_result} EQUAL 0) 98 MESSAGE(SEND_ERROR "Command \"${Subversion_SVN_EXECUTABLE} log -r BASE ${dir}\" failed with output:\n${Subversion_svn_log_error}") 99 ENDIF(NOT ${Subversion_svn_log_result} EQUAL 0) 100 ENDMACRO(Subversion_WC_INFO) 101 102ENDIF(Subversion_SVN_EXECUTABLE) 103 104IF(NOT Subversion_FOUND) 105 IF(NOT Subversion_FIND_QUIETLY) 106 MESSAGE(STATUS "Subversion was not found.") 107 ELSE(NOT Subversion_FIND_QUIETLY) 108 IF(Subversion_FIND_REQUIRED) 109 MESSAGE(FATAL_ERROR "Subversion was not found.") 110 ENDIF(Subversion_FIND_REQUIRED) 111 ENDIF(NOT Subversion_FIND_QUIETLY) 112ENDIF(NOT Subversion_FOUND) 113 114# FindSubversion.cmake ends here. 115