Inside Bitcoin
Opening the selected file…
Opening the selected file…
The code behind the network, with room to understand it.
Release published 2026-10-28 · Snapshot fetched 2026-11-01. Latest stable release at fetch time; development branches and Git history are excluded. Only the selected code window and visible folders load here.
1# Copyright (c) 2023-present The Bitcoin Core developers2# Distributed under the MIT software license, see the accompanying3# file COPYING or https://opensource.org/license/mit/.5macro(fatal_error)6message(FATAL_ERROR "\n"7"Usage:\n"8" cmake -D BUILD_INFO_HEADER_PATH=<path> -D GIT_EXECUTABLE=<path> [-D SOURCE_DIR=<path>] -P ${CMAKE_CURRENT_LIST_FILE}\n"9"All specified paths must be absolute ones.\n"10)11endmacro()13if(DEFINED BUILD_INFO_HEADER_PATH AND IS_ABSOLUTE "${BUILD_INFO_HEADER_PATH}")14if(EXISTS "${BUILD_INFO_HEADER_PATH}")15file(STRINGS ${BUILD_INFO_HEADER_PATH} INFO LIMIT_COUNT 1)16endif()17else()18fatal_error()19endif()21if(DEFINED SOURCE_DIR)22if(IS_ABSOLUTE "${SOURCE_DIR}" AND IS_DIRECTORY "${SOURCE_DIR}")23set(WORKING_DIR ${SOURCE_DIR})24else()25fatal_error()26endif()27else()28set(WORKING_DIR ${CMAKE_CURRENT_SOURCE_DIR})29endif()31set(GIT_TAG "")32set(GIT_COMMIT "")33if(GIT_EXECUTABLE)34execute_process(35COMMAND ${GIT_EXECUTABLE} rev-parse --is-inside-work-tree36WORKING_DIRECTORY ${WORKING_DIR}37OUTPUT_VARIABLE IS_INSIDE_WORK_TREE38OUTPUT_STRIP_TRAILING_WHITESPACE39ERROR_QUIET40)41if(IS_INSIDE_WORK_TREE)42# Clean 'dirty' status of touched files that haven't been modified.43execute_process(44COMMAND ${GIT_EXECUTABLE} diff45WORKING_DIRECTORY ${WORKING_DIR}46OUTPUT_QUIET47ERROR_QUIET48)50execute_process(51COMMAND ${GIT_EXECUTABLE} describe --abbrev=052WORKING_DIRECTORY ${WORKING_DIR}53OUTPUT_VARIABLE MOST_RECENT_TAG54OUTPUT_STRIP_TRAILING_WHITESPACE55ERROR_QUIET56)58execute_process(59COMMAND ${GIT_EXECUTABLE} rev-list -1 ${MOST_RECENT_TAG}60WORKING_DIRECTORY ${WORKING_DIR}61OUTPUT_VARIABLE MOST_RECENT_TAG_COMMIT62OUTPUT_STRIP_TRAILING_WHITESPACE63ERROR_QUIET64)66execute_process(67COMMAND ${GIT_EXECUTABLE} rev-parse HEAD68WORKING_DIRECTORY ${WORKING_DIR}69OUTPUT_VARIABLE HEAD_COMMIT70OUTPUT_STRIP_TRAILING_WHITESPACE71ERROR_QUIET72)74execute_process(75COMMAND ${GIT_EXECUTABLE} diff-index --quiet HEAD --76WORKING_DIRECTORY ${WORKING_DIR}77RESULT_VARIABLE IS_DIRTY78)80if(HEAD_COMMIT STREQUAL MOST_RECENT_TAG_COMMIT AND NOT IS_DIRTY)81# If latest commit is tagged and not dirty, then use the tag name.82set(GIT_TAG ${MOST_RECENT_TAG})83else()84# Otherwise, generate suffix from git, i.e. string like "0e0a5173fae3-dirty".85execute_process(86COMMAND ${GIT_EXECUTABLE} rev-parse --short=12 HEAD87WORKING_DIRECTORY ${WORKING_DIR}88OUTPUT_VARIABLE GIT_COMMIT89OUTPUT_STRIP_TRAILING_WHITESPACE90ERROR_QUIET91)92if(IS_DIRTY)93string(APPEND GIT_COMMIT "-dirty")94endif()95endif()96endif()97endif()99if(GIT_TAG)100set(NEWINFO "#define BUILD_GIT_TAG \"${GIT_TAG}\"")101elseif(GIT_COMMIT)102set(NEWINFO "#define BUILD_GIT_COMMIT \"${GIT_COMMIT}\"")103else()104set(NEWINFO "// No build information available")105endif()107# Only update the header if necessary.108if(NOT "${INFO}" STREQUAL "${NEWINFO}")109file(WRITE ${BUILD_INFO_HEADER_PATH} "${NEWINFO}\n")110endif()
Independent explanations by MyBitcoinExplorer. Not affiliated with or endorsed by Bitcoin Core. Guides are educational and do not replace the source or its tests.
Bitcoin Core source © its contributors, distributed under the MIT license. Original notices and bundled third-party licenses are retained in the source tree.