File: patch.cmake

package info (click to toggle)
ausweisapp2 2.4.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 22,060 kB
  • sloc: cpp: 114,067; python: 2,805; xml: 1,426; java: 885; sh: 186; makefile: 7
file content (68 lines) | stat: -rw-r--r-- 1,970 bytes parent folder | download | duplicates (2)
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()