diff --git a/CMakeLists.txt b/CMakeLists.txt index 635a0ca10a261172831279e14515090ce1137c79..97f7a12e97fa5a5a1f3176ef9e597df9bf57cbbe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -448,7 +448,7 @@ endif() #============================================================================= # generate git version # -px4_create_git_hash_header(HEADER ${PX4_BINARY_DIR}/build_git_version.h) +px4_create_git_hash_header(OUT ${PX4_BINARY_DIR}/build_git_version.h) #============================================================================= # packaging diff --git a/Tools/px_update_git_header.py b/Tools/px_update_git_header.py new file mode 100755 index 0000000000000000000000000000000000000000..e275583393829f4368ee3aa98dd43c3d809d0c3c --- /dev/null +++ b/Tools/px_update_git_header.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python +from __future__ import print_function + +import sys +import subprocess + +filename = sys.argv[1] + +try: + fp_header = open(filename, 'r') + old_header = fp_header.read() +except: + old_header = '' + +git_tag = subprocess.check_output('git describe --always --tags'.split(), + stderr=subprocess.STDOUT).decode('utf-8').strip() +git_version = subprocess.check_output('git rev-parse --verify HEAD'.split(), + stderr=subprocess.STDOUT).decode('utf-8').strip() +git_version_short = git_version[0:16] + +# Generate the header file content +header = """ +/* Auto Magically Generated file */ +/* Do not edit! */ +#pragma once +#define PX4_GIT_VERSION_STR "{git_version}" +#define PX4_GIT_VERSION_BINARY 0x{git_version_short} +#define PX4_GIT_TAG_STR "{git_tag}" +""".format(git_tag=git_tag, + git_version=git_version, + git_version_short=git_version_short) + +if old_header != header: + print('Updating header {}'.format(sys.argv[1])) + fp_header = open(filename, 'w') + fp_header.write(header) diff --git a/cmake/common/px4_base.cmake b/cmake/common/px4_base.cmake index b08565971c6fc3c468cdadcabdd58d391c757af8..00364d25481d1f87078457e212d5777bf5836852 100644 --- a/cmake/common/px4_base.cmake +++ b/cmake/common/px4_base.cmake @@ -925,27 +925,17 @@ endfunction() function(px4_create_git_hash_header) px4_parse_function_args( NAME px4_create_git_hash_header - ONE_VALUE HEADER - REQUIRED HEADER + ONE_VALUE OUT + REQUIRED OUT ARGN ${ARGN}) - execute_process( - COMMAND git describe --always --tags - OUTPUT_VARIABLE git_tag - OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY ${PX4_SOURCE_DIR} - ) - message(STATUS "GIT_TAG = ${git_tag}") - execute_process( - COMMAND git rev-parse --verify HEAD - OUTPUT_VARIABLE git_version - OUTPUT_STRIP_TRAILING_WHITESPACE - WORKING_DIRECTORY ${PX4_SOURCE_DIR} + file(WRITE ${OUT} "") + add_custom_command( + OUTPUT __fake + COMMAND ${PYTHON_EXECUTABLE} ${PX4_SOURCE_DIR}/Tools/px_update_git_header.py ${OUT} + COMMENT "Generating git hash header" ) - #message(STATUS "GIT_VERSION = ${git_version}") - set(git_version_short) - # We use the first 16 chars, starting at index 0 - string(SUBSTRING ${git_version} 0 16 git_version_short) - configure_file(${PX4_SOURCE_DIR}/cmake/templates/build_git_version.h.in ${HEADER} @ONLY) + add_custom_target(ver_gen ALL + DEPENDS ${OUT} __fake) endfunction() #=============================================================================