diff --git a/plugins/editor/CMakeLists.txt b/plugins/editor/CMakeLists.txt index bd0d71e1..72ed7533 100644 --- a/plugins/editor/CMakeLists.txt +++ b/plugins/editor/CMakeLists.txt @@ -51,7 +51,9 @@ add_library(sfizz_editor STATIC EXCLUDE_FROM_ALL src/editor/NativeHelpers.cpp src/editor/layout/main.hpp src/editor/utility/vstgui_after.h - src/editor/utility/vstgui_before.h) + src/editor/utility/vstgui_before.h + src/editor/GitBuildId.h + "${CMAKE_CURRENT_BINARY_DIR}/git-build-id/GitBuildId.c") add_library(sfizz::editor ALIAS sfizz_editor) target_include_directories(sfizz_editor PUBLIC "src") target_link_libraries(sfizz_editor PUBLIC sfizz::messaging sfizz::plugins-common) @@ -106,3 +108,12 @@ if(NOT CMAKE_CROSSCOMPILING) > "${CMAKE_CURRENT_SOURCE_DIR}/src/editor/layout/main.hpp" DEPENDS layout-maker "${CMAKE_CURRENT_SOURCE_DIR}/layout/main.fl") endif() + +# git build identifier +add_custom_target(sfizz_editor_git_build_id + COMMAND "${CMAKE_COMMAND}" + "-DSOURCE_DIR=${PROJECT_SOURCE_DIR}" + "-DOUTPUT_FILE=${CMAKE_CURRENT_BINARY_DIR}/git-build-id/GitBuildId.c" + "-P" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/GitBuildID.cmake" + BYPRODUCTS "git-build-id/GitBuildId.c") +add_dependencies(sfizz_editor sfizz_editor_git_build_id) diff --git a/plugins/editor/cmake/GitBuildID.cmake b/plugins/editor/cmake/GitBuildID.cmake new file mode 100644 index 00000000..a5f71c72 --- /dev/null +++ b/plugins/editor/cmake/GitBuildID.cmake @@ -0,0 +1,29 @@ +# Generate the Git Build ID information into a C source file +# This does not overwrite the file if the contents are up-to-date. +# +# Arguments: +# SOURCE_DIR The root directory of the project, expected to be a Git repo +# OUTPUT_FILE The file which gets written + +get_filename_component(OUTPUT_NAME "${OUTPUT_FILE}" NAME) +get_filename_component(OUTPUT_DIR "${OUTPUT_FILE}" DIRECTORY) + +message("(Git Build ID) Generating ${OUTPUT_NAME}") + +find_package(Git QUIET) + +file(MAKE_DIRECTORY "${OUTPUT_DIR}") + +if(GIT_FOUND) + execute_process(COMMAND "${GIT_EXECUTABLE}" "rev-parse" "--short" "HEAD" + WORKING_DIRECTORY "${SOURCE_DIR}" + OUTPUT_VARIABLE GIT_COMMIT_ID + OUTPUT_STRIP_TRAILING_WHITESPACE) +else() + set(GIT_COMMIT_ID "") + message("(Git Build ID) Error: could not find Git") +endif() + +file(WRITE "${OUTPUT_FILE}.temp" "const char* GitBuildId = \"${GIT_COMMIT_ID}\";\n") +execute_process(COMMAND "${CMAKE_COMMAND}" "-E" "copy_if_different" "${OUTPUT_FILE}.temp" "${OUTPUT_FILE}") +file(REMOVE "${OUTPUT_FILE}.temp") diff --git a/plugins/editor/src/editor/GitBuildId.h b/plugins/editor/src/editor/GitBuildId.h new file mode 100644 index 00000000..1d2e3edf --- /dev/null +++ b/plugins/editor/src/editor/GitBuildId.h @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: BSD-2-Clause + +// This code is part of the sfizz library and is licensed under a BSD 2-clause +// license. You should have receive a LICENSE.md file along with the code. +// If not, contact the sfizz maintainers at https://github.com/sfztools/sfizz + +#pragma once + +extern "C" { + +/** + * @brief Short identifier of the current head commit. + * This generated identifier is empty if the build is not from a Git repository. + */ +extern const char* GitBuildId; + +} // extern "C"