justasample/Patches/apply_patch_if_needed.cmake

37 lines
1.1 KiB
CMake
Raw Normal View History

2026-07-23 23:40:48 +02:00
if(NOT DEFINED REPO_DIR OR NOT DEFINED PATCH_FILE OR NOT DEFINED NAME)
message(FATAL_ERROR "Missing variables: REPO_DIR PATCH_FILE NAME required")
endif()
execute_process(
COMMAND git apply --reverse --check --ignore-whitespace -p0 "${PATCH_FILE}"
WORKING_DIRECTORY "${REPO_DIR}"
RESULT_VARIABLE reverse_result
OUTPUT_QUIET ERROR_QUIET
)
if(reverse_result EQUAL 0)
message(STATUS "${NAME}: patch already applied")
return()
endif()
execute_process(
COMMAND git apply --check --ignore-whitespace -p0 "${PATCH_FILE}"
WORKING_DIRECTORY "${REPO_DIR}"
RESULT_VARIABLE forward_result
OUTPUT_QUIET ERROR_QUIET
)
if(forward_result EQUAL 0)
message(STATUS "${NAME}: applying patch")
execute_process(
COMMAND git apply --ignore-whitespace -p0 "${PATCH_FILE}"
WORKING_DIRECTORY "${REPO_DIR}"
RESULT_VARIABLE apply_result
)
if(NOT apply_result EQUAL 0)
message(FATAL_ERROR "${NAME}: patch failed while applying")
endif()
else()
message(FATAL_ERROR "${NAME}: patch cannot be applied (source differs)")
endif()