[LLVMdev] [PATCH] CMake add_version_info_from_vcs SVN_REPOSITORY

Robinson, Paul Paul_Robinson at playstation.sony.com
Tue May 13 12:16:47 PDT 2014


LLVM patches should go to the llvm-commits list, not llvmdev.
--paulr

> -----Original Message-----
> From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu]
> On Behalf Of Adam Strzelecki
> Sent: Tuesday, May 13, 2014 10:15 AM
> To: llvmdev at cs.uiuc.edu
> Subject: [LLVMdev] [PATCH] CMake add_version_info_from_vcs
> SVN_REPOSITORY
> 
> This will be used by Clang to show full build information when
> LLVM_APPEND_VC_REV is enabled and LLVM/Clang are built from Git.
> 
> Also try to figure-out repository URL and revision from Git mirror
> parsing
> git-svn-id: footer from last commit (if present).
> ---
>  cmake/modules/VersionFromVCS.cmake | 55 ++++++++++++++++++++++++++++---
> -------
>  1 file changed, 41 insertions(+), 14 deletions(-)
> 
> diff --git a/cmake/modules/VersionFromVCS.cmake
> b/cmake/modules/VersionFromVCS.cmake
> index 26314d4..4e140e9 100644
> --- a/cmake/modules/VersionFromVCS.cmake
> +++ b/cmake/modules/VersionFromVCS.cmake
> @@ -1,9 +1,13 @@
>  # 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 CMAKE_CURRENT_SOURCE_DIR.
> +# existence of certain subdirectories under CMAKE_CURRENT_SOURCE_DIR
> +# or optional 2nd argument.
> 
>  function(add_version_info_from_vcs VERS)
>    string(REPLACE "svn" "" result "${${VERS}}")
> +  if( ARGV1 )
> +    set(CMAKE_CURRENT_SOURCE_DIR "${ARGV1}")
> +  endif()
>    if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.svn" )
>      set(result "${result}svn")
>      # FindSubversion does not work with symlinks. See PR 8437
> @@ -14,15 +18,16 @@ function(add_version_info_from_vcs VERS)
>        subversion_wc_info( ${CMAKE_CURRENT_SOURCE_DIR} Project )
>        if( Project_WC_REVISION )
>          set(SVN_REVISION ${Project_WC_REVISION} PARENT_SCOPE)
> +        set(SVN_REPOSITORY ${Project_WC_URL} PARENT_SCOPE)
>          set(result "${result}-r${Project_WC_REVISION}")
>        endif()
>      endif()
>    elseif( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git )
>      set(result "${result}git")
> -    # Try to get a ref-id
> -    if( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git/svn )
> -      find_program(git_executable NAMES git git.exe git.cmd)
> -      if( git_executable )
> +    find_program(git_executable NAMES git git.exe git.cmd)
> +    if( git_executable )
> +      # Try to get a ref-id
> +      if( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git/svn )
>          set(is_git_svn_rev_exact false)
>          execute_process(COMMAND ${git_executable} svn log --limit=1 --
> oneline
>            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
> @@ -36,7 +41,16 @@ function(add_version_info_from_vcs VERS)
>            string(SUBSTRING "${git_svn_rev}" 1 ${rev_length}
> git_svn_rev_number)
>            set(SVN_REVISION ${git_svn_rev_number} PARENT_SCOPE)
>            set(git_svn_rev "-svn-${git_svn_rev}")
> -
> +          # Get repository URL
> +          execute_process(COMMAND ${git_executable} svn info --url
> +            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
> +            TIMEOUT 5
> +            RESULT_VARIABLE git_result
> +            OUTPUT_VARIABLE git_output)
> +          if( git_result EQUAL 0 )
> +            string(STRIP "${git_output}" git_svn_info_url)
> +            set(SVN_REPOSITORY ${git_svn_info_url} PARENT_SCOPE)
> +          endif()
>            # Determine if the HEAD points directly at a subversion
> revision.
>            execute_process(COMMAND ${git_executable} svn find-rev HEAD
>              WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
> @@ -52,20 +66,33 @@ function(add_version_info_from_vcs VERS)
>          else()
>            set(git_svn_rev "")
>          endif()
> -        execute_process(COMMAND
> -          ${git_executable} rev-parse --short HEAD
> +      else() # Figure out revision and URL from last commit footer
> +        execute_process(COMMAND ${git_executable} log -1 --
> pretty=format:%b
>            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
>            TIMEOUT 5
>            RESULT_VARIABLE git_result
>            OUTPUT_VARIABLE git_output)
> -        if( git_result EQUAL 0 AND NOT is_git_svn_rev_exact )
> -          string(STRIP "${git_output}" git_ref_id)
> -          set(GIT_COMMIT ${git_ref_id} PARENT_SCOPE)
> -          set(result "${result}${git_svn_rev}-${git_ref_id}")
> -        else()
> -          set(result "${result}${git_svn_rev}")
> +        if( git_result EQUAL 0 AND
> +            git_output MATCHES "^(.*\n)?git-svn-id: ([^@]*)@([0-9]+)" )
> +          set(SVN_REVISION ${CMAKE_MATCH_3} PARENT_SCOPE)
> +          set(SVN_REPOSITORY ${CMAKE_MATCH_2} PARENT_SCOPE)
> +          set(git_svn_rev "-svn-r${CMAKE_MATCH_3}")
> +          set(is_git_svn_rev_exact true)
>          endif()
>        endif()
> +      execute_process(COMMAND
> +        ${git_executable} rev-parse --short HEAD
> +        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
> +        TIMEOUT 5
> +        RESULT_VARIABLE git_result
> +        OUTPUT_VARIABLE git_output)
> +      if( git_result EQUAL 0 AND NOT is_git_svn_rev_exact )
> +        string(STRIP "${git_output}" git_ref_id)
> +        set(GIT_COMMIT ${git_ref_id} PARENT_SCOPE)
> +        set(result "${result}${git_svn_rev}-${git_ref_id}")
> +      else()
> +        set(result "${result}${git_svn_rev}")
> +      endif()
>      endif()
>    endif()
>    set(${VERS} ${result} PARENT_SCOPE)
> --
> 1.8.5.2 (Apple Git-48)
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev





More information about the llvm-dev mailing list