mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
ec05af2652
Previously, there were two different scripts for generating VCS headers: one used by LLVM and one used by Clang and lldb. They were both similar, but different. They were both broken in their own ways, for example the one used by Clang didn't properly handle monorepo resulting in an incorrect version information reported by Clang. This change unifies two the scripts by introducing a new script that's used from both LLVM, Clang and lldb, ensures that the new script supports both monorepo and standalone SVN and Git setups, and removes the old scripts. Differential Revision: https://reviews.llvm.org/D57063 llvm-svn: 353268
95 lines
3.5 KiB
CMake
95 lines
3.5 KiB
CMake
# Adds version control information to the variable VERS. For
|
|
# determining the Version Control System used (if any) it inspects the
|
|
# existence of certain subdirectories under SOURCE_DIR (if provided as an
|
|
# extra argument, otherwise uses CMAKE_CURRENT_SOURCE_DIR).
|
|
|
|
function(get_source_info_svn path revision repository)
|
|
# If svn is a bat file, find_program(Subversion) doesn't find it.
|
|
# Explicitly search for that here; Subversion_SVN_EXECUTABLE will override
|
|
# the find_program call in FindSubversion.cmake.
|
|
find_program(Subversion_SVN_EXECUTABLE NAMES svn svn.bat)
|
|
find_package(Subversion)
|
|
|
|
# Subversion module does not work with symlinks, see PR8437.
|
|
get_filename_component(realpath ${path} REALPATH)
|
|
if(Subversion_FOUND)
|
|
subversion_wc_info(${realpath} Project)
|
|
if(Project_WC_REVISION)
|
|
set(${revision} ${Project_WC_REVISION} PARENT_SCOPE)
|
|
endif()
|
|
if(Project_WC_URL)
|
|
set(${repository} ${Project_WC_URL} PARENT_SCOPE)
|
|
endif()
|
|
endif()
|
|
endfunction()
|
|
|
|
function(get_source_info_git path revision repository)
|
|
find_package(Git)
|
|
if(GIT_FOUND)
|
|
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --git-dir
|
|
WORKING_DIRECTORY ${path}
|
|
RESULT_VARIABLE git_result
|
|
OUTPUT_VARIABLE git_output
|
|
ERROR_QUIET)
|
|
if(git_result EQUAL 0)
|
|
string(STRIP "${git_output}" git_output)
|
|
get_filename_component(git_dir ${git_output} ABSOLUTE BASE_DIR ${path})
|
|
if(EXISTS "${git_dir}/svn/refs")
|
|
execute_process(COMMAND ${GIT_EXECUTABLE} svn info
|
|
WORKING_DIRECTORY ${path}
|
|
RESULT_VARIABLE git_result
|
|
OUTPUT_VARIABLE git_output)
|
|
if(git_result EQUAL 0)
|
|
string(REGEX REPLACE "^(.*\n)?Revision: ([^\n]+).*"
|
|
"\\2" git_svn_rev "${git_output}")
|
|
set(${revision} ${git_svn_rev} PARENT_SCOPE)
|
|
string(REGEX REPLACE "^(.*\n)?URL: ([^\n]+).*"
|
|
"\\2" git_url "${git_output}")
|
|
set(${repository} ${git_url} PARENT_SCOPE)
|
|
endif()
|
|
else()
|
|
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
|
|
WORKING_DIRECTORY ${path}
|
|
RESULT_VARIABLE git_result
|
|
OUTPUT_VARIABLE git_output)
|
|
if(git_result EQUAL 0)
|
|
string(STRIP "${git_output}" git_output)
|
|
set(${revision} ${git_output} PARENT_SCOPE)
|
|
endif()
|
|
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref --symbolic-full-name @{upstream}
|
|
WORKING_DIRECTORY ${path}
|
|
RESULT_VARIABLE git_result
|
|
OUTPUT_VARIABLE git_output
|
|
ERROR_QUIET)
|
|
if(git_result EQUAL 0)
|
|
string(REPLACE "/" ";" branch ${git_output})
|
|
list(GET branch 0 remote)
|
|
else()
|
|
set(remote "origin")
|
|
endif()
|
|
execute_process(COMMAND ${GIT_EXECUTABLE} remote get-url ${remote}
|
|
WORKING_DIRECTORY ${path}
|
|
RESULT_VARIABLE git_result
|
|
OUTPUT_VARIABLE git_output
|
|
ERROR_QUIET)
|
|
if(git_result EQUAL 0)
|
|
string(STRIP "${git_output}" git_output)
|
|
set(${repository} ${git_output} PARENT_SCOPE)
|
|
else()
|
|
set(${repository} ${path} PARENT_SCOPE)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endfunction()
|
|
|
|
function(get_source_info path revision repository)
|
|
if(EXISTS "${path}/.svn")
|
|
get_source_info_svn("${path}" revision_info repository_info)
|
|
else()
|
|
get_source_info_git("${path}" revision_info repository_info)
|
|
endif()
|
|
set(${repository} "${repository_info}" PARENT_SCOPE)
|
|
set(${revision} "${revision_info}" PARENT_SCOPE)
|
|
endfunction()
|