Skip to content
Snippets Groups Projects
Select Git revision
  • nas-pitot-correction
  • main default protected
  • spi-transaction-dma
  • logger-documentation
  • arp
  • nd015x-dma
  • arp-gyro
  • async-fsm
  • chipselect-mux
  • nas-catch-dev
  • parafoil-mavlink-upd
  • mockup-main-software
  • quadspi-flash
  • quadspi-flash2
  • sx1278-resilience
  • units-impl
  • nokia-tm-dev
  • spi
  • cc3135
  • ARP-pre-2.7
  • PYXIS_ROCCARASO
  • PYXIS_EUROC
  • lynx-euroc
  • hermes-v1.0
  • hermes-flight-1
25 results

version.cmake

Blame
  • version.cmake 3.44 KiB
    # Copyright (c) 2025 Skyward Experimental Rocketry
    # Author: Niccolò Betto
    #
    # Permission is hereby granted, free of charge, to any person obtaining a copy
    # of this software and associated documentation files (the "Software"), to deal
    # in the Software without restriction, including without limitation the rights
    # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    # copies of the Software, and to permit persons to whom the Software is
    # furnished to do so, subject to the following conditions:
    #
    # The above copyright notice and this permission notice shall be included in
    # all copies or substantial portions of the Software.
    #
    # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    # THE SOFTWARE.
    
    # --- Version Information File Generation ---
    
    # Find Git executable
    find_package(Git REQUIRED QUIET)
    
    set(GIT_WORKING_DIR ${CMAKE_SOURCE_DIR})
    
    # Determine dirty status
    execute_process(
        COMMAND ${GIT_EXECUTABLE} describe --dirty --always --broken
        WORKING_DIRECTORY ${GIT_WORKING_DIR}
        OUTPUT_VARIABLE GIT_DESCRIBE_OUTPUT # We don't use the output directly, just for the dirty check
        OUTPUT_STRIP_TRAILING_WHITESPACE
        RESULT_VARIABLE GIT_DESCRIBE_RESULT
        ERROR_QUIET # Ignore errors
    )
    set(GIT_DIRTY_SUFFIX "")
    # Check if the command succeeded AND if its output ends with "-dirty"
    if(GIT_DESCRIBE_RESULT EQUAL 0 AND GIT_DESCRIBE_OUTPUT MATCHES "-dirty$")
        set(GIT_DIRTY_SUFFIX "-dirty")
    endif()
    
    # Get *annotated* tag name
    execute_process(
        COMMAND ${GIT_EXECUTABLE} describe --exact-match HEAD
        WORKING_DIRECTORY ${GIT_WORKING_DIR}
        OUTPUT_VARIABLE GIT_TAG # Captures the annotated tag name if successful
        OUTPUT_STRIP_TRAILING_WHITESPACE
        RESULT_VARIABLE GIT_EXACT_TAG_RESULT # Will be 0 on success, non-zero on failure
        ERROR_QUIET # Ignore errors, we expect this to fail when not on an annotated tag
    )
    
    # Get branch name
    execute_process(
        COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
        WORKING_DIRECTORY ${GIT_WORKING_DIR}
        OUTPUT_VARIABLE GIT_BRANCH
        OUTPUT_STRIP_TRAILING_WHITESPACE
        # No ERROR_QUIET/RESULT_VARIABLE -> CMake halts on git command failure
    )
    
    # Get short commit hash
    execute_process(
        COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
        WORKING_DIRECTORY ${GIT_WORKING_DIR}
        OUTPUT_VARIABLE GIT_REV
        OUTPUT_STRIP_TRAILING_WHITESPACE
        # No ERROR_QUIET/RESULT_VARIABLE -> CMake halts on git command failure
    )
    
    # Determine the version info based on tag match result
    set(GIT_VERSION_INFO "")
    if(GIT_EXACT_TAG_RESULT EQUAL 0)
        # Use the tag name when exactly on an annotated tag
        set(GIT_VERSION_INFO "${GIT_TAG}")
    else()
        # Use branch-rev when not on a tag
        set(GIT_VERSION_INFO "${GIT_BRANCH}-${GIT_REV}")
    endif()
    
    # Construct the final version string
    # Format: <annotated_tag>[-dirty] OR <branch>-<hash>[-dirty]
    set(GIT_VERSION_STRING "${GIT_VERSION_INFO}${GIT_DIRTY_SUFFIX}")
    
    # Additional variables set by the called of this script via command line args:
    # - TARGET_NAME
    # - CMAKE_BUILD_TYPE
    
    configure_file(
      "${BOARDCORE_PATH}/version/version.cpp.in"
      "${OUT_DIR}/version.cpp"
    )