Skip to content

Commit

Permalink
[CMake] Update GetSVN.cmake to use LLVM version control helper scripts.
Browse files Browse the repository at this point in the history
This allows the logic to work with Git, and also uses the variable names
to match what Clang is actually looking for.

This is a re-application of r190556 and r190808. This changes the interface
of GetSVN.cmake. Clang change to follow.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222391 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
jrose-apple committed Nov 19, 2014
1 parent 06f9f40 commit 61fd8ea
Showing 1 changed file with 37 additions and 17 deletions.
54 changes: 37 additions & 17 deletions cmake/modules/GetSVN.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,44 @@
#
# Input variables:
# FIRST_SOURCE_DIR - First source directory
# FIRST_REPOSITORY - The macro to define to the first revision number.
# SECOND_SOURCE_DIR - Second source directory
# SECOND_REPOSITORY - The macro to define to the second revision number.
# FIRST_NAME - The macro prefix for the first repository's info
# SECOND_SOURCE_DIR - Second source directory (opt)
# SECOND_NAME - The macro prefix for the second repository's info (opt)
# HEADER_FILE - The header file to write
include(FindSubversion)
if (Subversion_FOUND AND EXISTS "${FIRST_SOURCE_DIR}/.svn")
# Repository information for the first repository.
Subversion_WC_INFO(${FIRST_SOURCE_DIR} MY)
file(WRITE ${HEADER_FILE}.txt "#define ${FIRST_REPOSITORY} \"${MY_WC_REVISION}\"\n")
#
# The output header will contain macros FIRST_REPOSITORY and FIRST_REVISION,
# and SECOND_REPOSITORY and SECOND_REVISION if requested, where "FIRST" and
# "SECOND" are substituted with the names specified in the input variables.

# Chop off cmake/modules/GetSVN.cmake
get_filename_component(LLVM_DIR "${CMAKE_SCRIPT_MODE_FILE}" PATH)
get_filename_component(LLVM_DIR "${LLVM_DIR}" PATH)
get_filename_component(LLVM_DIR "${LLVM_DIR}" PATH)

# Handle strange terminals
set(ENV{TERM} "dumb")

# Repository information for the second repository.
if (EXISTS "${SECOND_SOURCE_DIR}/.svn")
Subversion_WC_INFO(${SECOND_SOURCE_DIR} MY)
file(APPEND ${HEADER_FILE}.txt
"#define ${SECOND_REPOSITORY} \"${MY_WC_REVISION}\"\n")
endif ()
function(append_info name path)
execute_process(COMMAND "${LLVM_DIR}/utils/GetSourceVersion" "${path}"
OUTPUT_VARIABLE revision)
string(STRIP "${revision}" revision)
execute_process(COMMAND "${LLVM_DIR}/utils/GetRepositoryPath" "${path}"
OUTPUT_VARIABLE repository
OUTPUT_STRIP_TRAILING_WHITESPACE)
string(STRIP "${repository}" repository)
file(APPEND "${HEADER_FILE}.txt"
"#define ${name}_REVISION \"${revision}\"\n")
file(APPEND "${HEADER_FILE}.txt"
"#define ${name}_REPOSITORY \"${repository}\"\n")
endfunction()

# Copy the file only if it has changed.
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different
${HEADER_FILE}.txt ${HEADER_FILE})
append_info(${FIRST_NAME} "${FIRST_SOURCE_DIR}")
if(DEFINED SECOND_SOURCE_DIR)
append_info(${SECOND_NAME} "${SECOND_SOURCE_DIR}")
endif()

# Copy the file only if it has changed.
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${HEADER_FILE}.txt" "${HEADER_FILE}")
file(REMOVE "${HEADER_FILE}.txt")

0 comments on commit 61fd8ea

Please sign in to comment.