1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
cmake_minimum_required(VERSION 3.25)
#############################################
# Usage: cmake -DCOMPONENT=XYZ -P patch.cmake
#############################################
get_filename_component(CMAKE_SOURCE_DIR "${CMAKE_CURRENT_LIST_FILE}" DIRECTORY)
function(PATCH_SOURCES_EXECUTE _patchlist)
foreach(_patch ${_patchlist})
get_filename_component(filename "${_patch}" NAME)
message(STATUS "Apply patch: ${filename}")
execute_process(COMMAND "${PATCH_CMD}" ${PATCH_OPTIONS} ${_patch} RESULT_VARIABLE _result)
if(NOT _result EQUAL 0)
message(FATAL_ERROR "Patch failed with exit code: ${_result}")
endif()
endforeach()
endfunction()
function(FETCH_PATCHES _out _component)
set(PATCHES_DIR ${CMAKE_SOURCE_DIR}/patches)
file(GLOB PATCHES "${PATCHES_DIR}/${_component}*.patch")
set(${_out} ${PATCHES} PARENT_SCOPE)
endfunction()
function(FETCH_PATCHES_NAMES _out _component)
FETCH_PATCHES(tmplist ${_component})
foreach(_patch ${tmplist})
get_filename_component(filename "${_patch}" NAME)
list(APPEND PATCHES ${filename})
endforeach()
set(${_out} ${PATCHES} PARENT_SCOPE)
endfunction()
function(PATCH_SOURCES _component)
FETCH_PATCHES(PATCHES ${_component})
PATCH_SOURCES_EXECUTE("${PATCHES}")
endfunction()
macro(SEARCH_PATCH_CMD)
if(NOT DEFINED ENV{FORCE_PATCH_PY})
find_program(PATCH_CMD patch CMAKE_FIND_ROOT_PATH_BOTH)
endif()
if(PATCH_CMD)
set(PATCH_OPTIONS -p1 -i)
if(WIN32)
set(PATCH_OPTIONS --verbose ${PATCH_OPTIONS})
endif()
message(STATUS "Using 'patch' command... ${PATCH_CMD}")
else()
message(STATUS "Cannot find 'patch' command... using patch.py")
find_package(Python REQUIRED)
set(PATCH_CMD ${Python_EXECUTABLE})
set(PATCH_OPTIONS ${CMAKE_SOURCE_DIR}/patch.py -p1 --debug -v)
endif()
endmacro()
if(CMAKE_SCRIPT_MODE_FILE)
if(COMPONENT MATCHES "qt|openssl")
SEARCH_PATCH_CMD()
PATCH_SOURCES(${COMPONENT})
else()
message(FATAL_ERROR "Component unknown: ${COMPONENT}")
endif()
endif()
|