82 lines
2.4 KiB
CMake
82 lines
2.4 KiB
CMake
# Copyright Epic Games, Inc. All Rights Reserved.
|
|
# This CMake script will patch only if the corresponding git repository at the
|
|
# working directory is clean.
|
|
|
|
if(NOT DEFINED UNREALINSTRUMENTATION_DIR)
|
|
message(FATAL_ERROR "The CMake define 'UNREALINSTRUMENTATION_DIR' was not set!")
|
|
endif()
|
|
|
|
if(NOT DEFINED PATCH_FILE)
|
|
message(FATAL_ERROR "The CMake define 'PATCH_FILE' was not set!")
|
|
endif()
|
|
|
|
if(NOT DEFINED PATCH_HASH_FILE)
|
|
message(FATAL_ERROR "The CMake define 'PATCH_HASH_FILE' was not set!")
|
|
endif()
|
|
|
|
if(NOT DEFINED GIT_EXECUTABLE)
|
|
message(FATAL_ERROR "The CMake define 'GIT_EXECUTABLE' was not set!")
|
|
endif()
|
|
|
|
if(NOT DEFINED Patch_EXECUTABLE)
|
|
message(FATAL_ERROR "The CMake define 'Patch_EXECUTABLE' was not set!")
|
|
endif()
|
|
|
|
execute_process(
|
|
COMMAND ${GIT_EXECUTABLE} status
|
|
OUTPUT_VARIABLE OUTPUT
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
)
|
|
|
|
string(FIND "${OUTPUT}" "working tree clean" IS_CLEAN)
|
|
|
|
if(IS_CLEAN EQUAL -1)
|
|
if(EXISTS "${PATCH_HASH_FILE}")
|
|
file(READ "${PATCH_HASH_FILE}" CACHED_PATCH_HASH)
|
|
file(SHA512 "${PATCH_FILE}" LATEST_PATCH_HASH)
|
|
|
|
message(STATUS "Comparing '${CACHED_PATCH_HASH}' vs '${LATEST_PATCH_HASH}'")
|
|
|
|
if(NOT "${CACHED_PATCH_HASH}" STREQUAL "${LATEST_PATCH_HASH}")
|
|
message(STATUS "Hashes did not match, cleaning out git sources!")
|
|
|
|
# Clean out the git sources.
|
|
execute_process(
|
|
COMMAND ${GIT_EXECUTABLE} checkout .
|
|
COMMAND ${GIT_EXECUTABLE} clean -fd
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
)
|
|
|
|
# We need to force repatching.
|
|
set(IS_CLEAN 0)
|
|
endif()
|
|
else()
|
|
message(STATUS "Hashes did not match, cleaning out git sources!")
|
|
|
|
# Clean out the git sources.
|
|
execute_process(
|
|
COMMAND ${GIT_EXECUTABLE} checkout .
|
|
COMMAND ${GIT_EXECUTABLE} clean -fd
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
)
|
|
|
|
# We need to force repatching.
|
|
set(IS_CLEAN 0)
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT IS_CLEAN EQUAL -1)
|
|
execute_process(
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${UNREALINSTRUMENTATION_DIR}/Compiler/CustomMemoryInstrumentation.cpp" "llvm/lib/Transforms/Instrumentation"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${UNREALINSTRUMENTATION_DIR}/Compiler/CustomMemoryInstrumentation.h" "llvm/include/llvm/Transforms/Instrumentation"
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
)
|
|
|
|
execute_process(
|
|
COMMAND ${Patch_EXECUTABLE} -p1 -i ${PATCH_FILE}
|
|
COMMAND_ERROR_IS_FATAL ANY
|
|
)
|
|
else()
|
|
message(STATUS "Git sources are already patched so not re-applying!")
|
|
endif()
|