Skip to content
Snippets Groups Projects
Select Git revision
  • v2.0.80
  • master default protected
  • al9-jobs
  • engamber-master-patch-62722
  • wip-el
  • wip-sfa
  • v2.0.159 protected
  • v2.0.145 protected
  • v2.0.140 protected
  • v2.0.127 protected
  • v2.0.118 protected
  • v2.0.76 protected
  • v2.0.67 protected
13 results

GitVersion.cmake

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    GitVersion.cmake 1.66 KiB
    
    find_program(GIT_EXE NAMES git git.cmd PATHS
        ${GIT_PATH}
        ENV PATH
        $ENV{GIT_PATH}
        CMAKE_FIND_ROOT_PATH_BOTH)
    
    if(NOT GIT_EXE)
        find_package(Git)
        if(GIT_FOUND)
            set(GIT_EXE ${GIT_EXECUTABLE})
        endif(GIT_FOUND)
    endif(NOT GIT_EXE)
    
    if(NOT CMAKE_SCRIPT_MODE_FILE)
        add_custom_target(git_check ALL DEPENDS ${CMAKE_BINARY_DIR}/.git_version)
        set(GIT_WORKDIR "${CMAKE_SOURCE_DIR}")
        add_custom_command(
            OUTPUT ${CMAKE_BINARY_DIR}/.git_version
            COMMAND ${CMAKE_COMMAND} -DGIT_WORKDIR="${GIT_WORKDIR}" -P "${CMAKE_CURRENT_LIST_FILE}"
            DEPENDS ${CMAKE_SOURCE_DIR}/.git)
    
        include(GitBadge)
    endif(NOT CMAKE_SCRIPT_MODE_FILE)
    
    if (EXISTS "${CMAKE_SOURCE_DIR}/.git/shallow")
        # Use git fetch --unshallow to count commits
        message(STATUS "Count commits: shallow clone")
        set(GIT_COUNT "0")
    else()
        execute_process(
            COMMAND ${GIT_EXE} "log" "--pretty=format:"
            WORKING_DIRECTORY "${GIT_WORKDIR}"
            ERROR_FILE "${CMAKE_BINARY_DIR}/.git_error.log"
            OUTPUT_FILE ${CMAKE_BINARY_DIR}/.git_version)
        file(READ ${CMAKE_BINARY_DIR}/.git_version GIT_COUNT)
        string(LENGTH "${GIT_COUNT}" GIT_COUNT)
        file(WRITE ${CMAKE_BINARY_DIR}/.git_version ${GIT_COUNT})
        message(STATUS "Count commits: ${GIT_COUNT}")
    endif()
    
    execute_process(
        COMMAND ${GIT_EXE} "rev-parse" "--short" "HEAD"
        WORKING_DIRECTORY "${GIT_WORKDIR}"
        OUTPUT_STRIP_TRAILING_WHITESPACE
        OUTPUT_VARIABLE GIT_SHORT)
    execute_process(
        COMMAND ${GIT_EXE} "status" "-s"
        WORKING_DIRECTORY "${GIT_WORKDIR}"
        OUTPUT_VARIABLE GIT_DIRTY)
    if(GIT_DIRTY)
        message(STATUS "Git tree is dirty")
        set(GIT_DIRTY "+")
    endif(GIT_DIRTY)