# Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. find_package(Git REQUIRED QUIET) if (NOT Git_FOUND) message(FATAL_ERROR "Unable to find git, which is needed for versioning") endif() function(get_git_dir DIRECTORY OUTPUT_VAR) execute_process( COMMAND ${GIT_EXECUTABLE} rev-parse --git-dir WORKING_DIRECTORY ${DIRECTORY} RESULT_VARIABLE GIT_DIR_RESULT OUTPUT_VARIABLE GIT_DIR_OUTPUT ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE ) # Allow to fail set(${OUTPUT_VAR} ${GIT_DIR_OUTPUT} PARENT_SCOPE) endfunction() function(get_git_current_hash DIRECTORY OUTPUT_VAR) execute_process( COMMAND ${GIT_EXECUTABLE} rev-parse --verify HEAD WORKING_DIRECTORY ${DIRECTORY} RESULT_VARIABLE GIT_CURRENT_HASH_RESULT OUTPUT_VARIABLE GIT_CURRENT_HASH_OUTPUT OUTPUT_STRIP_TRAILING_WHITESPACE ) if (NOT ("${GIT_CURRENT_HASH_RESULT}" STREQUAL "0")) message(${GIT_CURRENT_HASH_OUTPUT}) message(FATAL_ERROR "Failed to get ${DIRECTORY} git hash") endif() set(${OUTPUT_VAR} ${GIT_CURRENT_HASH_OUTPUT} PARENT_SCOPE) endfunction() function(get_git_remote_url DIRECTORY OUTPUT_VAR) execute_process( COMMAND ${GIT_EXECUTABLE} config --get remote.origin.url RESULT_VARIABLE GIT_REMOTE_URL_RESULT OUTPUT_VARIABLE GIT_REMOTE_URL_OUTPUT OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY ${DIRECTORY} ) if (NOT ("${GIT_REMOTE_URL_RESULT}" STREQUAL "0")) message(${GIT_REMOTE_URL_OUTPUT}) message(FATAL_ERROR "Failed to get ${DIRECTORY} git remote") endif() set(${OUTPUT_VAR} ${GIT_REMOTE_URL_OUTPUT} PARENT_SCOPE) endfunction() function(run_git_submodule_foreach CMD DIRECTORY OUTPUT_VALUE) execute_process( COMMAND ${GIT_EXECUTABLE} submodule foreach --quiet --recursive "${CMD}" RESULT_VARIABLE GIT_SUBMODULE_CMD_RESULT OUTPUT_VARIABLE GIT_SUBMODULE_CMD_OUTPUT OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY ${DIRECTORY} ) if (NOT ("${GIT_SUBMODULE_CMD_RESULT}" STREQUAL "0")) message(${GIT_SUBMODULE_CMD_OUTPUT}) message(FATAL_ERROR "Failed to run git submodule foreach command: ${CMD} in ${DIRECTORY}") endif() set(${OUTPUT_VALUE} ${GIT_SUBMODULE_CMD_OUTPUT} PARENT_SCOPE) endfunction()