Files
TheRock/rocm-systems/projects/rocprofiler-systems/cmake/apply_patch_idempotent.cmake
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

45 lines
1.4 KiB
CMake

# Copyright (c) Advanced Micro Devices, Inc.
# SPDX-License-Identifier: MIT
# Apply a patch idempotently.
#
# CMake's ExternalProject regenerates `*-patch-info.txt` on every reconfigure,
# which makes the patch step appear out-of-date and re-runs it. Vanilla
# `patch -p1` errors when its target is already patched, so subsequent
# reconfigures fail. Wrap the patch invocation with a reverse-dry-run probe
# so an already-applied patch is treated as success.
#
# Usage (from PATCH_COMMAND):
# ${CMAKE_COMMAND}
# -DSRC=<SOURCE_DIR>
# -DPATCH=<absolute path to patch file>
# -DPATCH_EXE=${PATCH_EXECUTABLE}
# -P ${CMAKE_CURRENT_LIST_DIR}/apply_patch_idempotent.cmake
foreach(_arg SRC PATCH PATCH_EXE)
if(NOT DEFINED ${_arg} OR "${${_arg}}" STREQUAL "")
message(FATAL_ERROR "apply_patch_idempotent: -D${_arg}=<value> is required")
endif()
endforeach()
execute_process(
COMMAND ${PATCH_EXE} --dry-run --reverse --silent --force -p1 -d ${SRC} -i ${PATCH}
RESULT_VARIABLE _reverse_check
OUTPUT_QUIET
ERROR_QUIET
)
if(_reverse_check EQUAL 0)
message(STATUS "Patch already applied, skipping: ${PATCH}")
return()
endif()
execute_process(
COMMAND ${PATCH_EXE} -p1 -d ${SRC} -i ${PATCH}
RESULT_VARIABLE _apply_result
)
if(NOT _apply_result EQUAL 0)
message(FATAL_ERROR "Failed to apply patch ${PATCH} (exit ${_apply_result})")
endif()