From a2f62eab0435e67f42f2dfc8746dce7944cc0f57 Mon Sep 17 00:00:00 2001 From: redtide Date: Thu, 4 Jan 2024 13:00:26 +0100 Subject: [PATCH] Changed GitBuildID.cmake to work as function --- cmake/GitBuildID.cmake | 40 ++++++++++++++++++++++------------------ src/CMakeLists.txt | 20 ++++++++++---------- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/cmake/GitBuildID.cmake b/cmake/GitBuildID.cmake index 5419ca50..d615bdb7 100644 --- a/cmake/GitBuildID.cmake +++ b/cmake/GitBuildID.cmake @@ -6,25 +6,29 @@ # OUTPUT_FILE The file which gets written # PREFIX An optional prefix for the constant name -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}") +function(make_git_build_id) + set(oneValueArgs SOURCE_DIR OUTPUT_FILE PREFIX) + cmake_parse_arguments(GBI "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) -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() + get_filename_component(OUTPUT_NAME "${GBI_OUTPUT_FILE}" NAME) + get_filename_component(OUTPUT_DIR "${GBI_OUTPUT_FILE}" DIRECTORY) + message("(Git Build ID) Generating ${OUTPUT_NAME}") -file(WRITE "${OUTPUT_FILE}.temp" "const char* ${PREFIX}GitBuildId = \"${GIT_COMMIT_ID}\";\n") -execute_process(COMMAND "${CMAKE_COMMAND}" "-E" "copy_if_different" "${OUTPUT_FILE}.temp" "${OUTPUT_FILE}") -file(REMOVE "${OUTPUT_FILE}.temp") + file(MAKE_DIRECTORY "${OUTPUT_DIR}") + + if(GIT_FOUND) + execute_process(COMMAND "${GIT_EXECUTABLE}" "rev-parse" "--short" "HEAD" + WORKING_DIRECTORY "${GBI_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 "${GBI_OUTPUT_FILE}.temp" "const char* ${GBI_PREFIX}GitBuildId = \"${GIT_COMMIT_ID}\";\n") + execute_process(COMMAND "${CMAKE_COMMAND}" "-E" "copy_if_different" "${GBI_OUTPUT_FILE}.temp" "${GBI_OUTPUT_FILE}") + file(REMOVE "${GBI_OUTPUT_FILE}.temp") +endfunction() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b68e750c..0a808e8f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -358,17 +358,17 @@ endif() add_library(sfizz::sfizz ALIAS sfizz_static) # Git build identifier -add_custom_target(sfizz-generate-git-build-id - COMMAND "${CMAKE_COMMAND}" - "-DSOURCE_DIR=${PROJECT_SOURCE_DIR}" - "-DOUTPUT_FILE=${PROJECT_BINARY_DIR}/git-build-id/GitBuildId.c" - "-P" "${PROJECT_SOURCE_DIR}/cmake/GitBuildID.cmake" - BYPRODUCTS "${PROJECT_BINARY_DIR}/git-build-id/GitBuildId.c") -add_library(sfizz-git-build-id STATIC EXCLUDE_FROM_ALL +include(GitBuildID) +make_git_build_id( + SOURCE_DIR "${PROJECT_SOURCE_DIR}" + OUTPUT_FILE "${PROJECT_BINARY_DIR}/git-build-id/GitBuildId.c" +) +add_library(sfizz_git_build_id STATIC EXCLUDE_FROM_ALL "sfizz/git-build-id/GitBuildId.h" - "${PROJECT_BINARY_DIR}/git-build-id/GitBuildId.c") -target_include_directories(sfizz-git-build-id PUBLIC "sfizz/git-build-id") -add_dependencies(sfizz-git-build-id sfizz-generate-git-build-id) + "${PROJECT_BINARY_DIR}/git-build-id/GitBuildId.c" +) +target_include_directories(sfizz_git_build_id PUBLIC "sfizz/git-build-id") +target_link_libraries(sfizz_static PRIVATE sfizz_git_build_id) # Preserve generated files (Faust) set_directory_properties(PROPERTIES CLEAN_NO_CUSTOM TRUE)