Andrew Scull | 5e1ddfa | 2018-08-14 10:06:54 +0100 | [diff] [blame] | 1 | # Adds version control information to the variable VERS. For |
| 2 | # determining the Version Control System used (if any) it inspects the |
| 3 | # existence of certain subdirectories under SOURCE_DIR (if provided as an |
| 4 | # extra argument, otherwise uses CMAKE_CURRENT_SOURCE_DIR). |
| 5 | |
Andrew Walbran | 16937d0 | 2019-10-22 13:54:20 +0100 | [diff] [blame^] | 6 | function(get_source_info_svn path revision repository) |
| 7 | # If svn is a bat file, find_program(Subversion) doesn't find it. |
| 8 | # Explicitly search for that here; Subversion_SVN_EXECUTABLE will override |
| 9 | # the find_program call in FindSubversion.cmake. |
| 10 | find_program(Subversion_SVN_EXECUTABLE NAMES svn svn.bat) |
| 11 | find_package(Subversion) |
| 12 | |
| 13 | # Subversion module does not work with symlinks, see PR8437. |
| 14 | get_filename_component(realpath ${path} REALPATH) |
| 15 | if(Subversion_FOUND) |
| 16 | subversion_wc_info(${realpath} Project) |
| 17 | if(Project_WC_REVISION) |
| 18 | set(${revision} ${Project_WC_REVISION} PARENT_SCOPE) |
| 19 | endif() |
| 20 | if(Project_WC_URL) |
| 21 | set(${repository} ${Project_WC_URL} PARENT_SCOPE) |
| 22 | endif() |
Andrew Scull | 5e1ddfa | 2018-08-14 10:06:54 +0100 | [diff] [blame] | 23 | endif() |
Andrew Walbran | 16937d0 | 2019-10-22 13:54:20 +0100 | [diff] [blame^] | 24 | endfunction() |
Andrew Scull | 5e1ddfa | 2018-08-14 10:06:54 +0100 | [diff] [blame] | 25 | |
Andrew Walbran | 16937d0 | 2019-10-22 13:54:20 +0100 | [diff] [blame^] | 26 | function(get_source_info_git path revision repository) |
| 27 | find_package(Git) |
| 28 | if(GIT_FOUND) |
| 29 | execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --git-dir |
| 30 | WORKING_DIRECTORY ${path} |
| 31 | RESULT_VARIABLE git_result |
| 32 | OUTPUT_VARIABLE git_output |
| 33 | ERROR_QUIET) |
| 34 | if(git_result EQUAL 0) |
| 35 | string(STRIP "${git_output}" git_output) |
| 36 | get_filename_component(git_dir ${git_output} ABSOLUTE BASE_DIR ${path}) |
| 37 | if(EXISTS "${git_dir}/svn/refs") |
| 38 | execute_process(COMMAND ${GIT_EXECUTABLE} svn info |
| 39 | WORKING_DIRECTORY ${path} |
Andrew Scull | 5e1ddfa | 2018-08-14 10:06:54 +0100 | [diff] [blame] | 40 | RESULT_VARIABLE git_result |
Andrew Walbran | 16937d0 | 2019-10-22 13:54:20 +0100 | [diff] [blame^] | 41 | OUTPUT_VARIABLE git_output) |
| 42 | if(git_result EQUAL 0) |
| 43 | string(REGEX REPLACE "^(.*\n)?Revision: ([^\n]+).*" |
| 44 | "\\2" git_svn_rev "${git_output}") |
| 45 | set(${revision} ${git_svn_rev} PARENT_SCOPE) |
| 46 | string(REGEX REPLACE "^(.*\n)?URL: ([^\n]+).*" |
| 47 | "\\2" git_url "${git_output}") |
| 48 | set(${repository} ${git_url} PARENT_SCOPE) |
| 49 | endif() |
| 50 | else() |
| 51 | execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD |
| 52 | WORKING_DIRECTORY ${path} |
| 53 | RESULT_VARIABLE git_result |
| 54 | OUTPUT_VARIABLE git_output) |
| 55 | if(git_result EQUAL 0) |
| 56 | string(STRIP "${git_output}" git_output) |
| 57 | set(${revision} ${git_output} PARENT_SCOPE) |
| 58 | endif() |
| 59 | execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref --symbolic-full-name @{upstream} |
| 60 | WORKING_DIRECTORY ${path} |
| 61 | RESULT_VARIABLE git_result |
| 62 | OUTPUT_VARIABLE git_output |
| 63 | ERROR_QUIET) |
| 64 | if(git_result EQUAL 0) |
| 65 | string(REPLACE "/" ";" branch ${git_output}) |
| 66 | list(GET branch 0 remote) |
Andrew Scull | 5e1ddfa | 2018-08-14 10:06:54 +0100 | [diff] [blame] | 67 | else() |
Andrew Walbran | 16937d0 | 2019-10-22 13:54:20 +0100 | [diff] [blame^] | 68 | set(remote "origin") |
| 69 | endif() |
| 70 | execute_process(COMMAND ${GIT_EXECUTABLE} remote get-url ${remote} |
| 71 | WORKING_DIRECTORY ${path} |
| 72 | RESULT_VARIABLE git_result |
| 73 | OUTPUT_VARIABLE git_output |
| 74 | ERROR_QUIET) |
| 75 | if(git_result EQUAL 0) |
| 76 | string(STRIP "${git_output}" git_output) |
| 77 | set(${repository} ${git_output} PARENT_SCOPE) |
| 78 | else() |
| 79 | set(${repository} ${path} PARENT_SCOPE) |
Andrew Scull | 5e1ddfa | 2018-08-14 10:06:54 +0100 | [diff] [blame] | 80 | endif() |
| 81 | endif() |
| 82 | endif() |
| 83 | endif() |
Andrew Walbran | 16937d0 | 2019-10-22 13:54:20 +0100 | [diff] [blame^] | 84 | endfunction() |
| 85 | |
| 86 | function(get_source_info path revision repository) |
| 87 | if(EXISTS "${path}/.svn") |
| 88 | get_source_info_svn("${path}" revision_info repository_info) |
| 89 | else() |
| 90 | get_source_info_git("${path}" revision_info repository_info) |
| 91 | endif() |
| 92 | set(${repository} "${repository_info}" PARENT_SCOPE) |
| 93 | set(${revision} "${revision_info}" PARENT_SCOPE) |
| 94 | endfunction() |