[llvm] r352733 - Revert "[CMake] Unify scripts for generating VCS headers"

Petr Hosek via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 30 23:12:43 PST 2019


Author: phosek
Date: Wed Jan 30 23:12:43 2019
New Revision: 352733

URL: http://llvm.org/viewvc/llvm-project?rev=352733&view=rev
Log:
Revert "[CMake] Unify scripts for generating VCS headers"

This reverts commits r352729 and r352731: this broke Sanitizer Windows bots

Added:
    llvm/trunk/cmake/modules/GenerateVersionFromCVS.cmake
    llvm/trunk/cmake/modules/GetSVN.cmake
Removed:
    llvm/trunk/cmake/modules/GenerateVersionFromVCS.cmake
Modified:
    llvm/trunk/CMakeLists.txt
    llvm/trunk/cmake/modules/AddLLVM.cmake
    llvm/trunk/cmake/modules/VersionFromVCS.cmake
    llvm/trunk/include/llvm/Support/CMakeLists.txt

Modified: llvm/trunk/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/CMakeLists.txt?rev=352733&r1=352732&r2=352733&view=diff
==============================================================================
--- llvm/trunk/CMakeLists.txt (original)
+++ llvm/trunk/CMakeLists.txt Wed Jan 30 23:12:43 2019
@@ -200,7 +200,7 @@ endif()
 include(VersionFromVCS)
 
 option(LLVM_APPEND_VC_REV
-  "Embed the version control system revision in LLVM" ON)
+  "Embed the version control system revision id in LLVM" ON)
 
 set(PACKAGE_NAME LLVM)
 set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
@@ -752,12 +752,13 @@ set(LLVM_SRPM_USER_BINARY_SPECFILE ${CMA
 set(LLVM_SRPM_BINARY_SPECFILE ${CMAKE_CURRENT_BINARY_DIR}/llvm.spec)
 set(LLVM_SRPM_DIR "${CMAKE_CURRENT_BINARY_DIR}/srpm")
 
-get_source_info(${CMAKE_CURRENT_SOURCE_DIR} revision repository)
-string(LENGTH "${revision}" revision_length)
-if(revision MATCHES "^[0-9]+$" AND revision_length LESS 40)
-  set(LLVM_RPM_SPEC_REVISION "r${revision}")
-else()
-  set(LLVM_RPM_SPEC_REVISION "${revision}")
+# SVN_REVISION and GIT_COMMIT get set by the call to add_version_info_from_vcs.
+# DUMMY_VAR contains a version string which we don't care about.
+add_version_info_from_vcs(DUMMY_VAR)
+if ( SVN_REVISION )
+  set(LLVM_RPM_SPEC_REVISION "r${SVN_REVISION}")
+elseif ( GIT_COMMIT )
+  set (LLVM_RPM_SPEC_REVISION "g${GIT_COMMIT}")
 endif()
 
 configure_file(

Modified: llvm/trunk/cmake/modules/AddLLVM.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/AddLLVM.cmake?rev=352733&r1=352732&r2=352733&view=diff
==============================================================================
--- llvm/trunk/cmake/modules/AddLLVM.cmake (original)
+++ llvm/trunk/cmake/modules/AddLLVM.cmake Wed Jan 30 23:12:43 2019
@@ -1707,35 +1707,35 @@ function(setup_dependency_debugging name
   set_target_properties(${name} PROPERTIES RULE_LAUNCH_COMPILE ${sandbox_command})
 endfunction()
 
-function(find_first_existing_vc_file path out_var)
-  if(EXISTS "${path}/.svn")
-    set(svn_files
-      "${path}/.svn/wc.db"   # SVN 1.7
-      "${path}/.svn/entries" # SVN 1.6
-    )
-    foreach(file IN LISTS svn_files)
-      if(EXISTS "${file}")
-        set(${out_var} "${file}" PARENT_SCOPE)
-        return()
-      endif()
-    endforeach()
-  else()
-    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})
-        # Some branchless cases (e.g. 'repo') may not yet have .git/logs/HEAD
-        if (NOT EXISTS "${git_dir}/logs/HEAD")
-          file(WRITE "${git_dir}/logs/HEAD" "")
-        endif()
-        set(${out_var} "${git_dir}/logs/HEAD" PARENT_SCOPE)
-      endif()
+# Figure out if we can track VC revisions.
+function(find_first_existing_file out_var)
+  foreach(file ${ARGN})
+    if(EXISTS "${file}")
+      set(${out_var} "${file}" PARENT_SCOPE)
+      return()
     endif()
-  endif()
+  endforeach()
 endfunction()
+
+macro(find_first_existing_vc_file out_var path)
+    find_program(git_executable NAMES git git.exe git.cmd)
+    # Run from a subdirectory to force git to print an absolute path.
+    execute_process(COMMAND ${git_executable} rev-parse --git-dir
+      WORKING_DIRECTORY ${path}/cmake
+      RESULT_VARIABLE git_result
+      OUTPUT_VARIABLE git_dir
+      ERROR_QUIET)
+    if(git_result EQUAL 0)
+      string(STRIP "${git_dir}" git_dir)
+      set(${out_var} "${git_dir}/logs/HEAD")
+      # some branchless cases (e.g. 'repo') may not yet have .git/logs/HEAD
+      if (NOT EXISTS "${git_dir}/logs/HEAD")
+        file(WRITE "${git_dir}/logs/HEAD" "")
+      endif()
+    else()
+      find_first_existing_file(${out_var}
+        "${path}/.svn/wc.db"   # SVN 1.7
+        "${path}/.svn/entries" # SVN 1.6
+      )
+    endif()
+endmacro()

Added: llvm/trunk/cmake/modules/GenerateVersionFromCVS.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/GenerateVersionFromCVS.cmake?rev=352733&view=auto
==============================================================================
--- llvm/trunk/cmake/modules/GenerateVersionFromCVS.cmake (added)
+++ llvm/trunk/cmake/modules/GenerateVersionFromCVS.cmake Wed Jan 30 23:12:43 2019
@@ -0,0 +1,39 @@
+# CMake project that writes Subversion revision information to a header.
+#
+# Input variables:
+#   SRC               - Source directory
+#   HEADER_FILE       - The header file to write
+#
+# 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)
+
+set(CMAKE_MODULE_PATH
+  ${CMAKE_MODULE_PATH}
+  "${LLVM_DIR}/cmake/modules")
+include(VersionFromVCS)
+
+# Handle strange terminals
+set(ENV{TERM} "dumb")
+
+function(append_info name path)
+  add_version_info_from_vcs(REVISION ${path})
+  string(STRIP "${REVISION}" REVISION)
+  file(APPEND "${HEADER_FILE}.txt"
+    "#define ${name} \"${REVISION}\"\n")
+endfunction()
+
+append_info(${NAME} "${SOURCE_DIR}")
+
+# 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")
+

Removed: llvm/trunk/cmake/modules/GenerateVersionFromVCS.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/GenerateVersionFromVCS.cmake?rev=352732&view=auto
==============================================================================
--- llvm/trunk/cmake/modules/GenerateVersionFromVCS.cmake (original)
+++ llvm/trunk/cmake/modules/GenerateVersionFromVCS.cmake (removed)
@@ -1,53 +0,0 @@
-# CMake script that writes version control information to a header.
-#
-# Input variables:
-#   NAMES             - A list of names for each of the source directories.
-#   <NAME>_SOURCE_DIR - A path to source directory for each name in NAMES.
-#   HEADER_FILE       - The header file to write
-#
-# The output header will contain macros <NAME>_REPOSITORY and <NAME>_REVISION,
-# where "<NAME>" is substituted with the names specified in the input variables,
-# for each of the <NAME>_SOURCE_DIR given.
-
-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)
-
-list(APPEND CMAKE_MODULE_PATH "${LLVM_DIR}/cmake/modules")
-
-include(VersionFromVCS)
-
-# Handle strange terminals
-set(ENV{TERM} "dumb")
-
-function(append_info name path)
-  if(path)
-    get_source_info("${path}" revision repository)
-  endif()
-  if(revision)
-    file(APPEND "${HEADER_FILE}.tmp"
-      "#define ${name}_REVISION \"${revision}\"\n")
-  else()
-    file(APPEND "${HEADER_FILE}.tmp"
-      "#undef ${name}_REVISION\n")
-  endif()
-  if(repository)
-    file(APPEND "${HEADER_FILE}.tmp"
-      "#define ${name}_REPOSITORY \"${repository}\"\n")
-  else()
-    file(APPEND "${HEADER_FILE}.tmp"
-      "#undef ${name}_REPOSITORY\n")
-  endif()
-endfunction()
-
-foreach(name IN LISTS NAMES)
-  if(NOT DEFINED ${name}_SOURCE_DIR)
-    message(FATAL_ERROR "${name}_SOURCE_DIR is not defined")
-  endif()
-  append_info(${name} "${${name}_SOURCE_DIR}")
-endforeach()
-
-# Copy the file only if it has changed.
-execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different
-  "${HEADER_FILE}.tmp" "${HEADER_FILE}")
-file(REMOVE "${HEADER_FILE}.tmp")

Added: llvm/trunk/cmake/modules/GetSVN.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/GetSVN.cmake?rev=352733&view=auto
==============================================================================
--- llvm/trunk/cmake/modules/GetSVN.cmake (added)
+++ llvm/trunk/cmake/modules/GetSVN.cmake Wed Jan 30 23:12:43 2019
@@ -0,0 +1,141 @@
+# CMake project that writes Subversion revision information to a header.
+#
+# Input variables:
+#   SOURCE_DIRS - A list of source directories.
+#   NAMES       - A list of macro prefixes for each of the source directories.
+#   HEADER_FILE - The header file to write
+#
+# The output header will contain macros <NAME>_REPOSITORY and <NAME>_REVISION,
+# where "<NAME>" and is substituted with the names specified in the input
+# variables, for each of the SOURCE_DIRS given.
+
+# 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")
+
+macro(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)
+
+  # FindSubversion does not work with symlinks. See PR 8437
+  if (NOT IS_SYMLINK "${path}")
+    find_package(Subversion)
+  endif()
+  if (Subversion_FOUND)
+    subversion_wc_info( ${path} 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()
+endmacro()
+
+macro(get_source_info_git_svn path revision repository)
+  find_program(git_executable NAMES git git.exe git.cmd)
+  if (git_executable)
+    execute_process(COMMAND ${git_executable} svn info
+      WORKING_DIRECTORY ${path}
+      TIMEOUT 5
+      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()
+  endif()
+endmacro()
+
+macro(get_source_info_git path revision repository)
+  find_program(git_executable NAMES git git.exe git.cmd)
+  if (git_executable)
+    execute_process(COMMAND ${git_executable} log -1 --pretty=format:%H
+      WORKING_DIRECTORY ${path}
+      TIMEOUT 5
+      RESULT_VARIABLE git_result
+      OUTPUT_VARIABLE git_output)
+    if (git_result EQUAL 0)
+      set(${revision} ${git_output} PARENT_SCOPE)
+    endif()
+    execute_process(COMMAND ${git_executable} remote -v
+      WORKING_DIRECTORY ${path}
+      TIMEOUT 5
+      RESULT_VARIABLE git_result
+      OUTPUT_VARIABLE git_output)
+    if (git_result EQUAL 0)
+      string(REGEX REPLACE "^(.*\n)?[^ \t]+[ \t]+([^ \t\n]+)[ \t]+\\(fetch\\).*"
+        "\\2" git_url "${git_output}")
+      set(${repository} "${git_url}" PARENT_SCOPE)
+    endif()
+  endif()
+endmacro()
+
+function(get_source_info path revision repository)
+  if (EXISTS "${path}/.svn")
+    get_source_info_svn("${path}" revision repository)
+  elseif (EXISTS "${path}/.git/svn/refs")
+    get_source_info_git_svn("${path}" revision repository)
+  elseif (EXISTS "${path}/.git")
+    get_source_info_git("${path}" revision repository)
+  endif()
+endfunction()
+
+function(append_info name path)
+  get_source_info("${path}" revision repository)
+  string(STRIP "${revision}" revision)
+  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()
+
+function(validate_inputs source_dirs names)
+  list(LENGTH source_dirs source_dirs_length)
+  list(LENGTH names names_length)
+  if (NOT source_dirs_length EQUAL names_length)
+    message(FATAL_ERROR
+            "GetSVN.cmake takes two arguments: a list of source directories, "
+            "and a list of names. Expected two lists must be of equal length, "
+            "but got ${source_dirs_length} source directories and "
+            "${names_length} names.")
+  endif()
+endfunction()
+
+if (DEFINED SOURCE_DIRS AND DEFINED NAMES)
+  validate_inputs("${SOURCE_DIRS}" "${NAMES}")
+
+  list(LENGTH SOURCE_DIRS source_dirs_length)
+  math(EXPR source_dirs_max_index ${source_dirs_length}-1)
+  foreach(index RANGE ${source_dirs_max_index})
+    list(GET SOURCE_DIRS ${index} source_dir)
+    list(GET NAMES ${index} name)
+    append_info(${name} ${source_dir})
+  endforeach()
+endif()
+
+# Allow -DFIRST_SOURCE_DIR arguments until Clang migrates to the new
+# -DSOURCE_DIRS argument.
+if(DEFINED FIRST_SOURCE_DIR)
+  append_info(${FIRST_NAME} "${FIRST_SOURCE_DIR}")
+  if(DEFINED SECOND_SOURCE_DIR)
+    append_info(${SECOND_NAME} "${SECOND_SOURCE_DIR}")
+  endif()
+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")
+

Modified: llvm/trunk/cmake/modules/VersionFromVCS.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/VersionFromVCS.cmake?rev=352733&r1=352732&r2=352733&view=diff
==============================================================================
--- llvm/trunk/cmake/modules/VersionFromVCS.cmake (original)
+++ llvm/trunk/cmake/modules/VersionFromVCS.cmake Wed Jan 30 23:12:43 2019
@@ -3,88 +3,90 @@
 # 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)
+function(add_version_info_from_vcs VERS)
+  SET(SOURCE_DIR ${ARGV1})
+  if("${SOURCE_DIR}" STREQUAL "")
+      SET(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+  endif()
+  string(REPLACE "svn" "" result "${${VERS}}")
+  if( EXISTS "${SOURCE_DIR}/.svn" )
+    set(result "${result}svn")
+    # FindSubversion does not work with symlinks. See PR 8437
+    if( NOT IS_SYMLINK "${SOURCE_DIR}" )
+      find_package(Subversion)
     endif()
-    if(Project_WC_URL)
-      set(${repository} ${Project_WC_URL} PARENT_SCOPE)
+    if( Subversion_FOUND )
+      subversion_wc_info( ${SOURCE_DIR} Project )
+      if( Project_WC_REVISION )
+        set(SVN_REVISION ${Project_WC_REVISION} PARENT_SCOPE)
+        set(result "${result}-r${Project_WC_REVISION}")
+      endif()
+      if( Project_WC_URL )
+        set(LLVM_REPOSITORY ${Project_WC_URL} PARENT_SCOPE)
+      endif()
     endif()
-  endif()
-endfunction()
+  else()
+    find_program(git_executable NAMES git git.exe git.cmd)
 
-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)
-        if(git_result EQUAL 0)
-          string(REPLACE "/" ";" branch ${git_output})
-          list(GET branch 0 remote)
-          execute_process(COMMAND ${GIT_EXECUTABLE} remote get-url ${remote}
-            WORKING_DIRECTORY ${path}
+    if( git_executable )
+      # Run from a subdirectory to force git to print an absoute path.
+      execute_process(COMMAND ${git_executable} rev-parse --git-dir
+        WORKING_DIRECTORY ${SOURCE_DIR}/cmake
+        RESULT_VARIABLE git_result
+        OUTPUT_VARIABLE git_dir
+        ERROR_QUIET)
+      if(git_result EQUAL 0)
+        # Try to get a ref-id
+        string(STRIP "${git_dir}" git_dir)
+        set(result "${result}git")
+        if( EXISTS ${git_dir}/svn )
+          # Get the repository URL
+          execute_process(COMMAND
+            ${git_executable} svn info
+            WORKING_DIRECTORY ${SOURCE_DIR}
+            TIMEOUT 5
             RESULT_VARIABLE git_result
-            OUTPUT_VARIABLE git_output)
-          if(git_result EQUAL 0)
-            string(STRIP "${git_output}" git_output)
-            set(${repository} ${git_output} PARENT_SCOPE)
+            OUTPUT_VARIABLE git_output
+            ERROR_QUIET)
+          if( git_result EQUAL 0 )
+            string(REGEX MATCH "URL: ([^ \n]*)" svn_url ${git_output})
+            if(svn_url)
+              set(LLVM_REPOSITORY ${CMAKE_MATCH_1} PARENT_SCOPE)
+            endif()
           endif()
+
+          # Get the svn revision number for this git commit if one exists.
+          execute_process(COMMAND ${git_executable} svn find-rev HEAD
+            WORKING_DIRECTORY ${SOURCE_DIR}
+            TIMEOUT 5
+            RESULT_VARIABLE git_result
+            OUTPUT_VARIABLE git_head_svn_rev_number
+            OUTPUT_STRIP_TRAILING_WHITESPACE)
+          if( git_result EQUAL 0 AND git_output)
+            set(SVN_REVISION ${git_head_svn_rev_number} PARENT_SCOPE)
+            set(git_svn_rev "-svn-${git_head_svn_rev_number}")
+          else()
+            set(git_svn_rev "")
+          endif()
+        endif()
+
+        # Get the git ref id
+        execute_process(COMMAND
+          ${git_executable} rev-parse --short HEAD
+          WORKING_DIRECTORY ${SOURCE_DIR}
+          TIMEOUT 5
+          RESULT_VARIABLE git_result
+          OUTPUT_VARIABLE git_ref_id
+          OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+        if( git_result EQUAL 0 )
+          set(GIT_COMMIT ${git_ref_id} PARENT_SCOPE)
+          set(result "${result}${git_svn_rev}-${git_ref_id}")
         else()
-          set(${repository} ${path} PARENT_SCOPE)
+          set(result "${result}${git_svn_rev}")
         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()
+  set(${VERS} ${result} PARENT_SCOPE)
+endfunction(add_version_info_from_vcs)

Modified: llvm/trunk/include/llvm/Support/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/CMakeLists.txt?rev=352733&r1=352732&r2=352733&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/CMakeLists.txt (original)
+++ llvm/trunk/include/llvm/Support/CMakeLists.txt Wed Jan 30 23:12:43 2019
@@ -1,21 +1,38 @@
-find_first_existing_vc_file("${LLVM_MAIN_SRC_DIR}" llvm_vc)
+find_first_existing_vc_file(llvm_vc "${LLVM_MAIN_SRC_DIR}")
 
 # The VC revision include that we want to generate.
 set(version_inc "${CMAKE_CURRENT_BINARY_DIR}/VCSRevision.h")
 
-set(get_svn_script "${LLVM_CMAKE_PATH}/GenerateVersionFromVCS.cmake")
+set(get_svn_script "${LLVM_CMAKE_PATH}/GenerateVersionFromCVS.cmake")
 
-if(llvm_vc AND LLVM_APPEND_VC_REV)
-  set(llvm_source_dir ${LLVM_MAIN_SRC_DIR})
-endif()
+file(WRITE "${version_inc}.undef" "#undef LLVM_REVISION\n")
+if((DEFINED llvm_vc) AND LLVM_APPEND_VC_REV)
+
+  execute_process(COMMAND ${CMAKE_COMMAND} -E compare_files
+      "${version_inc}.undef" "${version_inc}"
+      RESULT_VARIABLE files_not_equal
+      OUTPUT_QUIET
+      ERROR_QUIET)
+  # Remove ${version_inc} if it doesn't define a revision. This will force it
+  # to be regenerated when toggling LLVM_APPEND_VC_REV from OFF to ON.
+  if(NOT files_not_equal)
+    file(REMOVE "${version_inc}")
+  endif()
 
-# Create custom target to generate the VC revision include.
-add_custom_command(OUTPUT "${version_inc}"
-  DEPENDS "${llvm_vc}" "${get_svn_script}"
-  COMMAND ${CMAKE_COMMAND} "-DNAMES=LLVM"
-                           "-DLLVM_SOURCE_DIR=${llvm_source_dir}"
-                           "-DHEADER_FILE=${version_inc}"
-                           -P "${get_svn_script}")
+  # Create custom target to generate the VC revision include.
+  add_custom_command(OUTPUT "${version_inc}"
+    DEPENDS "${llvm_vc}" "${get_svn_script}"
+    COMMAND
+    ${CMAKE_COMMAND} "-DSOURCE_DIR=${LLVM_MAIN_SRC_DIR}"
+                     "-DNAME=LLVM_REVISION"
+                     "-DHEADER_FILE=${version_inc}"
+                     -P "${get_svn_script}")
+else()
+  # Make sure ${version_inc} doesn't define a revision
+  execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different
+    "${version_inc}.undef" "${version_inc}")
+endif()
+file(REMOVE "${version_inc}.undef")
 
 # Mark the generated header as being generated.
 set_source_files_properties("${version_inc}"




More information about the llvm-commits mailing list