From cd17c50bc9c03aed413532eb9596349c34fa8fb2 Mon Sep 17 00:00:00 2001 From: Bertrand Bellenot Date: Wed, 29 Apr 2026 08:40:38 +0200 Subject: [PATCH 1/2] [win] Fix `git apply` failures in incremental builds (#22075) * [win] Fix `git apply` failures in incremental builds * [cmake] Use marker files to detect if the patch has been applied (cherry picked from commit bfe9a837822c5b66425c90a44c692f04b4e2a748) --- builtins/cfitsio/CMakeLists.txt | 13 +++++++++---- builtins/cfitsio/cfitsio-marker.diff | 4 ++++ builtins/gl2ps/CMakeLists.txt | 15 ++++++++------- builtins/gl2ps/gl2ps-marker.patch | 4 ++++ builtins/libgif/CMakeLists.txt | 9 +++++++-- 5 files changed, 32 insertions(+), 13 deletions(-) create mode 100644 builtins/cfitsio/cfitsio-marker.diff create mode 100644 builtins/gl2ps/gl2ps-marker.patch diff --git a/builtins/cfitsio/CMakeLists.txt b/builtins/cfitsio/CMakeLists.txt index f179721885b27..d1f46267a8d8c 100644 --- a/builtins/cfitsio/CMakeLists.txt +++ b/builtins/cfitsio/CMakeLists.txt @@ -26,6 +26,13 @@ if(WIN32) set(patch_args --ignore-whitespace) endif() +if(NOT EXISTS "${CFITSIO_PREFIX}/src/BUILTIN_CFITSIO/._patched") + set(CFITSIO_PATCH_COMMAND PATCH_COMMAND git apply ${patch_args} + ${CMAKE_CURRENT_SOURCE_DIR}/cfitsio-no-find-zlib.diff + ${CMAKE_CURRENT_SOURCE_DIR}/no-fortran-wrapper.diff + ${CMAKE_CURRENT_SOURCE_DIR}/cfitsio-marker.diff) +endif() + ExternalProject_Add( BUILTIN_CFITSIO PREFIX ${CFITSIO_PREFIX} @@ -43,12 +50,10 @@ ExternalProject_Add( -DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIRS} -DZLIB_LIBRARIES=$ # Skip the find_package(ZLIB REQUIRED), because we feed CFITSIO our own ZLIB flags. - PATCH_COMMAND git apply ${patch_args} - ${CMAKE_CURRENT_SOURCE_DIR}/cfitsio-no-find-zlib.diff - ${CMAKE_CURRENT_SOURCE_DIR}/no-fortran-wrapper.diff + ${CFITSIO_PATCH_COMMAND} BUILD_COMMAND ${CMAKE_COMMAND} --build . ${CFITSIO_BUILD_COMMAND_FLAGS} INSTALL_COMMAND ${CMAKE_COMMAND} --build . ${CFITSIO_BUILD_COMMAND_FLAGS} --target install - LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1 + LOG_PATCH 1 LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1 BUILD_BYPRODUCTS ${CFITSIO_LIBRARIES} TIMEOUT 600 ) diff --git a/builtins/cfitsio/cfitsio-marker.diff b/builtins/cfitsio/cfitsio-marker.diff new file mode 100644 index 0000000000000..6be2f6ccec01a --- /dev/null +++ b/builtins/cfitsio/cfitsio-marker.diff @@ -0,0 +1,4 @@ +--- /dev/null 2026-03-12 08:23:04 ++++ ._patched 2026-04-28 08:20:11 +@@ -0,0 +1,1 @@ ++cfitsio has been patched diff --git a/builtins/gl2ps/CMakeLists.txt b/builtins/gl2ps/CMakeLists.txt index 5ab968966276b..ed54a1a711b9d 100644 --- a/builtins/gl2ps/CMakeLists.txt +++ b/builtins/gl2ps/CMakeLists.txt @@ -10,7 +10,7 @@ set(ROOT_GL2PS_VERSION 1.4.2) set(ROOT_GL2PS_HASH "8d1c00c1018f96b4b97655482e57dcb0ce42ae2f1d349cd6d4191e7848d9ffe9") # Backport fix for static Win32 having being overwritten by shared lib: https://gitlab.onelab.info/gl2ps/gl2ps/-/work_items/30 # We use all seven commits between 1.4.2 and before bump to 1.4.3 -set(ROOT_GL2PS_PATCH_FILE ${CMAKE_CURRENT_SOURCE_DIR}/v142_post_tag_fixes.patch) +set(ROOT_GL2PS_PATCH_FILES ${CMAKE_CURRENT_SOURCE_DIR}/v142_post_tag_fixes.patch ${CMAKE_CURRENT_SOURCE_DIR}/gl2ps-marker.patch) set(ROOT_GL2PS_PREFIX ${CMAKE_BINARY_DIR}/builtins/GL2PS-prefix) @@ -29,12 +29,17 @@ if(WIN32) set(patch_args --ignore-whitespace) endif() +# check if the patch has already been applied +if(NOT EXISTS "${ROOT_GL2PS_PREFIX}/src/BUILTIN_GL2PS/._patched") + set(GL2PS_PATCH_COMMAND PATCH_COMMAND git apply ${patch_args} ${ROOT_GL2PS_PATCH_FILES}) +endif() + ExternalProject_Add( BUILTIN_GL2PS PREFIX ${ROOT_GL2PS_PREFIX} URL ${lcgpackages}/gl2ps-${ROOT_GL2PS_VERSION}.tgz URL_HASH SHA256=${ROOT_GL2PS_HASH} - PATCH_COMMAND git apply ${patch_args} ${ROOT_GL2PS_PATCH_FILE} + ${GL2PS_PATCH_COMMAND} CMAKE_ARGS -G ${CMAKE_GENERATOR} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX= @@ -46,11 +51,7 @@ ExternalProject_Add( -DBUILD_SHARED_LIBS=OFF BUILD_COMMAND ${CMAKE_COMMAND} --build . ${ROOT_GL2PS_BUILD_COMMAND_FLAGS} INSTALL_COMMAND ${CMAKE_COMMAND} --build . ${ROOT_GL2PS_BUILD_COMMAND_FLAGS} --target install - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 - LOG_INSTALL 1 - LOG_OUTPUT_ON_FAILURE 1 + LOG_PATCH 1 LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1 BUILD_BYPRODUCTS ${ROOT_GL2PS_LIBRARY} TIMEOUT 600) diff --git a/builtins/gl2ps/gl2ps-marker.patch b/builtins/gl2ps/gl2ps-marker.patch new file mode 100644 index 0000000000000..44b7174ea80ff --- /dev/null +++ b/builtins/gl2ps/gl2ps-marker.patch @@ -0,0 +1,4 @@ +--- /dev/null 2026-03-12 08:23:04 ++++ ._patched 2026-04-28 08:20:11 +@@ -0,0 +1,1 @@ ++gl2ps has been patched diff --git a/builtins/libgif/CMakeLists.txt b/builtins/libgif/CMakeLists.txt index 48a2ed37254b3..9d2ad00fe748b 100644 --- a/builtins/libgif/CMakeLists.txt +++ b/builtins/libgif/CMakeLists.txt @@ -28,12 +28,17 @@ if(WIN32) set(patch_args --ignore-whitespace) endif() +# check if the patch has already been applied +if(NOT EXISTS "${ROOT_LIBGIF_PREFIX}/src/BUILTIN_LIBGIF/CMakeLists.txt") + set(LIBGIF_PATCH_COMMAND PATCH_COMMAND git apply ${patch_args} ${ROOT_LIBGIF_PATCH_FILE}) +endif() + ExternalProject_Add( BUILTIN_LIBGIF PREFIX ${ROOT_LIBGIF_PREFIX} URL ${lcgpackages}/giflib-${ROOT_LIBGIF_VERSION}.tar.gz URL_HASH SHA256=${ROOT_LIBGIF_HASH} - PATCH_COMMAND git apply ${patch_args} ${ROOT_LIBGIF_PATCH_FILE} + ${LIBGIF_PATCH_COMMAND} CMAKE_ARGS -G ${CMAKE_GENERATOR} -DCMAKE_POLICY_VERSION_MINIMUM=3.5 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} @@ -43,7 +48,7 @@ ExternalProject_Add( -DCMAKE_C_VISIBILITY_PRESET=hidden BUILD_COMMAND ${CMAKE_COMMAND} --build . ${ROOT_LIBGIF_BUILD_COMMAND_FLAGS} INSTALL_COMMAND ${CMAKE_COMMAND} --build . ${ROOT_LIBGIF_BUILD_COMMAND_FLAGS} --target install - LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1 + LOG_PATCH 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1 BUILD_BYPRODUCTS ${ROOT_LIBGIF_LIBRARY} TIMEOUT 600 ) From 7e2a756aa97fcce1386d2a1a756a6a60466ed488 Mon Sep 17 00:00:00 2001 From: will-cern Date: Sun, 31 May 2026 06:27:39 +0100 Subject: [PATCH 2/2] [CMake] Init git before patches to ensure correct paths of patched files This fixes issue where the build directory is somewhere underneath a git repository, which affects `git apply` behaviour. This is commit 836cf1a7f from master, partially applied. --- builtins/cfitsio/CMakeLists.txt | 2 +- builtins/gl2ps/CMakeLists.txt | 2 +- builtins/libgif/CMakeLists.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/builtins/cfitsio/CMakeLists.txt b/builtins/cfitsio/CMakeLists.txt index d1f46267a8d8c..37a42d1c0056e 100644 --- a/builtins/cfitsio/CMakeLists.txt +++ b/builtins/cfitsio/CMakeLists.txt @@ -27,7 +27,7 @@ if(WIN32) endif() if(NOT EXISTS "${CFITSIO_PREFIX}/src/BUILTIN_CFITSIO/._patched") - set(CFITSIO_PATCH_COMMAND PATCH_COMMAND git apply ${patch_args} + set(CFITSIO_PATCH_COMMAND PATCH_COMMAND git init COMMAND git apply ${patch_args} ${CMAKE_CURRENT_SOURCE_DIR}/cfitsio-no-find-zlib.diff ${CMAKE_CURRENT_SOURCE_DIR}/no-fortran-wrapper.diff ${CMAKE_CURRENT_SOURCE_DIR}/cfitsio-marker.diff) diff --git a/builtins/gl2ps/CMakeLists.txt b/builtins/gl2ps/CMakeLists.txt index ed54a1a711b9d..72ee0381c450d 100644 --- a/builtins/gl2ps/CMakeLists.txt +++ b/builtins/gl2ps/CMakeLists.txt @@ -31,7 +31,7 @@ endif() # check if the patch has already been applied if(NOT EXISTS "${ROOT_GL2PS_PREFIX}/src/BUILTIN_GL2PS/._patched") - set(GL2PS_PATCH_COMMAND PATCH_COMMAND git apply ${patch_args} ${ROOT_GL2PS_PATCH_FILES}) + set(GL2PS_PATCH_COMMAND PATCH_COMMAND git init COMMAND git apply ${patch_args} ${ROOT_GL2PS_PATCH_FILES}) endif() ExternalProject_Add( diff --git a/builtins/libgif/CMakeLists.txt b/builtins/libgif/CMakeLists.txt index 9d2ad00fe748b..a9ad0531f7c18 100644 --- a/builtins/libgif/CMakeLists.txt +++ b/builtins/libgif/CMakeLists.txt @@ -30,7 +30,7 @@ endif() # check if the patch has already been applied if(NOT EXISTS "${ROOT_LIBGIF_PREFIX}/src/BUILTIN_LIBGIF/CMakeLists.txt") - set(LIBGIF_PATCH_COMMAND PATCH_COMMAND git apply ${patch_args} ${ROOT_LIBGIF_PATCH_FILE}) + set(LIBGIF_PATCH_COMMAND PATCH_COMMAND git init COMMAND git apply ${patch_args} ${ROOT_LIBGIF_PATCH_FILE}) endif() ExternalProject_Add(