Skip to content

Commit 0ca3a70

Browse files
committed
[CMake] Always patch the builtins starting from the pristine sources
ExternalProject re-runs the patch step not only after a new download, but also when the patch command changes, and then on the already patched tree. Since 0db7792 changed the unuran patch command, this breaks the incremental opensuse CI build. The configure-time checks of the other builtins with patches fail the other way around: after a new download, they skip the patches. Add ROOT_BUILTIN_PATCH_COMMAND, whose patch step commits the pristine sources to a git repository in the source directory and resets to them before applying the patches, so it can always run. Trees patched by the old commands are handled by undoing their patches first, or, if that fails, by downloading the sources again. Use it for all builtins with patches. 🤖 Done with the help of AI
1 parent d61fecf commit 0ca3a70

13 files changed

Lines changed: 163 additions & 65 deletions

File tree

‎builtins/cfitsio/CMakeLists.txt‎

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,10 @@ if(WIN32)
2727
set(patch_args --ignore-whitespace)
2828
endif()
2929

30-
if(NOT EXISTS "${CFITSIO_PREFIX}/src/BUILTIN_CFITSIO/._patched")
31-
set(CFITSIO_PATCH_COMMAND PATCH_COMMAND git init COMMAND git apply ${patch_args}
32-
${CMAKE_CURRENT_SOURCE_DIR}/cfitsio-no-find-zlib.diff
33-
${CMAKE_CURRENT_SOURCE_DIR}/no-fortran-wrapper.diff
34-
${CMAKE_CURRENT_SOURCE_DIR}/cfitsio-marker.diff)
35-
endif()
30+
ROOT_BUILTIN_PATCH_COMMAND(CFITSIO_PATCH_COMMAND
31+
PATCHES ${CMAKE_CURRENT_SOURCE_DIR}/cfitsio-no-find-zlib.diff
32+
${CMAKE_CURRENT_SOURCE_DIR}/no-fortran-wrapper.diff
33+
GIT_APPLY_ARGS ${patch_args})
3634

3735
ExternalProject_Add(
3836
BUILTIN_CFITSIO

‎builtins/cfitsio/cfitsio-marker.diff‎

Lines changed: 0 additions & 4 deletions
This file was deleted.

‎builtins/civetweb/CMakeLists.txt‎

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,14 @@ set(ROOT_CIVETWEB_VERSION 1.16) # with some patches, so almost 1.17
1111
set(ROOT_CIVETWEB_PREFIX ${CMAKE_BINARY_DIR}/builtins/CIVETWEB-prefix)
1212
set(ROOT_CIVETWEB_LIBRARY ${ROOT_CIVETWEB_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}civetweb${CMAKE_STATIC_LIBRARY_SUFFIX})
1313

14-
if (NOT DEFINED GIT_EXECUTABLE)
15-
set(GIT_EXECUTABLE "git")
16-
endif()
1714
if(WIN32)
1815
set(GIT_PATCH_ARGS "--ignore-space-change")
1916
endif()
20-
# check if the patch has already been applied
21-
if(NOT EXISTS "${ROOT_CIVETWEB_PREFIX}/src/BUILTIN_CIVETWEB/._patched")
22-
set(ROOT_CIVETWEB_PATCH_COMMAND PATCH_COMMAND ${GIT_EXECUTABLE} init COMMAND ${GIT_EXECUTABLE} apply ${GIT_PATCH_ARGS}
23-
${CMAKE_CURRENT_SOURCE_DIR}/1385.patch # https://github.com/civetweb/civetweb/pull/1385
24-
${CMAKE_CURRENT_SOURCE_DIR}/1389.patch # https://github.com/civetweb/civetweb/pull/1389
25-
${CMAKE_CURRENT_SOURCE_DIR}/1423.patch # https://github.com/civetweb/civetweb/pull/1423 for OpenSSL4 compatibility
26-
${CMAKE_CURRENT_SOURCE_DIR}/civetweb-marker.diff)
27-
endif()
17+
ROOT_BUILTIN_PATCH_COMMAND(ROOT_CIVETWEB_PATCH_COMMAND
18+
PATCHES ${CMAKE_CURRENT_SOURCE_DIR}/1385.patch # https://github.com/civetweb/civetweb/pull/1385
19+
${CMAKE_CURRENT_SOURCE_DIR}/1389.patch # https://github.com/civetweb/civetweb/pull/1389
20+
${CMAKE_CURRENT_SOURCE_DIR}/1423.patch # https://github.com/civetweb/civetweb/pull/1423 for OpenSSL4 compatibility
21+
GIT_APPLY_ARGS ${GIT_PATCH_ARGS})
2822

2923
include(ExternalProject)
3024

‎builtins/civetweb/civetweb-marker.diff‎

Lines changed: 0 additions & 4 deletions
This file was deleted.

‎builtins/ftgl/CMakeLists.txt‎

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,9 @@ set(ROOT_FTGL_PATCH_FILE_3 "${CMAKE_CURRENT_SOURCE_DIR}/0003-fix-nullptr.patch")
2323
set(ROOT_FTGL_PREFIX ${CMAKE_BINARY_DIR}/builtins/FTGL-prefix)
2424
set(ROOT_FTGL_LIBRARY ${ROOT_FTGL_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}ftgl${ROOT_FTGL_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX})
2525

26-
if (NOT DEFINED GIT_EXECUTABLE)
27-
set(GIT_EXECUTABLE "git")
28-
endif()
29-
30-
if(NOT EXISTS "${ROOT_FTGL_PREFIX}/src/BUILTIN_FTGL/._patched")
31-
set(ROOT_FTGL_PATCH_COMMAND PATCH_COMMAND ${GIT_EXECUTABLE} init COMMAND ${GIT_EXECUTABLE} apply --ignore-space-change --ignore-whitespace
32-
${ROOT_FTGL_PATCH_FILE_1}
33-
${ROOT_FTGL_PATCH_FILE_2}
34-
${ROOT_FTGL_PATCH_FILE_3}
35-
${CMAKE_CURRENT_SOURCE_DIR}/ftgl-marker.diff)
36-
endif()
26+
ROOT_BUILTIN_PATCH_COMMAND(ROOT_FTGL_PATCH_COMMAND
27+
PATCHES ${ROOT_FTGL_PATCH_FILE_1} ${ROOT_FTGL_PATCH_FILE_2} ${ROOT_FTGL_PATCH_FILE_3}
28+
GIT_APPLY_ARGS --ignore-space-change --ignore-whitespace)
3729

3830
include(ExternalProject)
3931

‎builtins/ftgl/ftgl-marker.diff‎

Lines changed: 0 additions & 4 deletions
This file was deleted.

‎builtins/gl2ps/CMakeLists.txt‎

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ set(ROOT_GL2PS_VERSION 1.4.2)
1010
set(ROOT_GL2PS_HASH "8d1c00c1018f96b4b97655482e57dcb0ce42ae2f1d349cd6d4191e7848d9ffe9")
1111
# Backport fix for static Win32 having being overwritten by shared lib: https://gitlab.onelab.info/gl2ps/gl2ps/-/work_items/30
1212
# We use all seven commits between 1.4.2 and before bump to 1.4.3
13-
set(ROOT_GL2PS_PATCH_FILES ${CMAKE_CURRENT_SOURCE_DIR}/v142_post_tag_fixes.patch ${CMAKE_CURRENT_SOURCE_DIR}/gl2ps-marker.patch)
13+
set(ROOT_GL2PS_PATCH_FILES ${CMAKE_CURRENT_SOURCE_DIR}/v142_post_tag_fixes.patch)
1414

1515
set(ROOT_GL2PS_PREFIX ${CMAKE_BINARY_DIR}/builtins/GL2PS-prefix)
1616

@@ -29,10 +29,7 @@ if(WIN32)
2929
set(patch_args --ignore-whitespace)
3030
endif()
3131

32-
# check if the patch has already been applied
33-
if(NOT EXISTS "${ROOT_GL2PS_PREFIX}/src/BUILTIN_GL2PS/._patched")
34-
set(GL2PS_PATCH_COMMAND PATCH_COMMAND git init COMMAND git apply ${patch_args} ${ROOT_GL2PS_PATCH_FILES})
35-
endif()
32+
ROOT_BUILTIN_PATCH_COMMAND(GL2PS_PATCH_COMMAND PATCHES ${ROOT_GL2PS_PATCH_FILES} GIT_APPLY_ARGS ${patch_args})
3633

3734
ExternalProject_Add(
3835
BUILTIN_GL2PS

‎builtins/gl2ps/gl2ps-marker.patch‎

Lines changed: 0 additions & 4 deletions
This file was deleted.

‎builtins/libgif/CMakeLists.txt‎

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,7 @@ if(WIN32)
2828
set(patch_args --ignore-whitespace)
2929
endif()
3030

31-
# check if the patch has already been applied
32-
if(NOT EXISTS "${ROOT_LIBGIF_PREFIX}/src/BUILTIN_LIBGIF/CMakeLists.txt")
33-
set(LIBGIF_PATCH_COMMAND PATCH_COMMAND git init COMMAND git apply ${patch_args} ${ROOT_LIBGIF_PATCH_FILE})
34-
endif()
31+
ROOT_BUILTIN_PATCH_COMMAND(LIBGIF_PATCH_COMMAND PATCHES ${ROOT_LIBGIF_PATCH_FILE} GIT_APPLY_ARGS ${patch_args})
3532

3633
ExternalProject_Add(
3734
BUILTIN_LIBGIF

‎builtins/unuran/CMakeLists.txt‎

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ set(ROOT_UNURAN_HASH "098793854c590b4c2c7e98bc48a45408875f48c5ad47650b5fabbd3e94
1111
set(ROOT_UNURAN_PREFIX ${CMAKE_BINARY_DIR}/builtins/UNURAN-prefix)
1212
set(ROOT_UNURAN_LIBRARY ${ROOT_UNURAN_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}unuran${CMAKE_STATIC_LIBRARY_SUFFIX})
1313
set(ROOT_UNURAN_PATCH_FILE_1 "${CMAKE_CURRENT_SOURCE_DIR}/0001-allow-compilation-from-CMake.patch")
14-
if (NOT DEFINED GIT_EXECUTABLE)
15-
set(GIT_EXECUTABLE "git")
16-
endif()
14+
ROOT_BUILTIN_PATCH_COMMAND(ROOT_UNURAN_PATCH_COMMAND PATCHES ${ROOT_UNURAN_PATCH_FILE_1}
15+
GIT_APPLY_ARGS --ignore-space-change --ignore-whitespace)
1716

1817
include(ExternalProject)
1918

@@ -39,8 +38,7 @@ ExternalProject_Add(
3938
URL ${lcgpackages}/unuran-${ROOT_UNURAN_VERSION}.tar.gz
4039
https://statmath.wu.ac.at/unuran/unuran-${ROOT_UNURAN_VERSION}.tar.gz
4140
URL_HASH SHA256=${ROOT_UNURAN_HASH}
42-
PATCH_COMMAND ${GIT_EXECUTABLE} init -q
43-
COMMAND ${GIT_EXECUTABLE} apply --ignore-space-change --ignore-whitespace ${ROOT_UNURAN_PATCH_FILE_1}
41+
${ROOT_UNURAN_PATCH_COMMAND}
4442
SOURCE_SUBDIR src
4543
LOG_DOWNLOAD TRUE
4644
# The following three are disabled to avoid CI failure in Ubuntu22 that has outdated CMake version

0 commit comments

Comments
 (0)