From 2ea7e3ad069dc7fc217cac9fec20e6e87796e60c Mon Sep 17 00:00:00 2001 From: Arths17 Date: Thu, 5 Mar 2026 23:05:10 -0600 Subject: [PATCH] Fix Windows build issues with IPPICV unpack and IPPIW CMakeLists.txt copy (#28608) - Replace execute_process(tar) with file(ARCHIVE_EXTRACT) for native .zip support and better Windows path handling when CMAKE_VERSION >= 3.18 - Replace execute_process copy with file(COPY) and existence check for reliable CMakeLists.txt copying to avoid timing/path issues on Windows - Maintains backward compatibility with older CMake versions and Linux behavior Fixes issue #28608 --- cmake/OpenCVDownload.cmake | 16 +++++++++++----- cmake/OpenCVFindIPPIW.cmake | 4 +++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/cmake/OpenCVDownload.cmake b/cmake/OpenCVDownload.cmake index 40e48d7465..0f8de153d8 100644 --- a/cmake/OpenCVDownload.cmake +++ b/cmake/OpenCVDownload.cmake @@ -282,11 +282,17 @@ ${OPENCV_DOWNLOAD_LOG} ocv_download_log("#mkdir \"${DL_DESTINATION_DIR}\"") file(MAKE_DIRECTORY "${DL_DESTINATION_DIR}") ocv_download_log("#unpack \"${DL_DESTINATION_DIR}\" \"${CACHE_CANDIDATE}\"") - execute_process(COMMAND "${CMAKE_COMMAND}" -E tar xzf "${CACHE_CANDIDATE}" - WORKING_DIRECTORY "${DL_DESTINATION_DIR}" - RESULT_VARIABLE res) - if(NOT res EQUAL 0) - message(FATAL_ERROR "${__msg_prefix}Unpack failed: ${res}") + if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.18") + file(ARCHIVE_EXTRACT + INPUT "${CACHE_CANDIDATE}" + DESTINATION "${DL_DESTINATION_DIR}") + else() + execute_process(COMMAND "${CMAKE_COMMAND}" -E tar xzf "${CACHE_CANDIDATE}" + WORKING_DIRECTORY "${DL_DESTINATION_DIR}" + RESULT_VARIABLE res) + if(NOT res EQUAL 0) + message(FATAL_ERROR "${__msg_prefix}Unpack failed: ${res}") + endif() endif() else() ocv_download_log("#copy \"${COPY_DESTINATION}\" \"${CACHE_CANDIDATE}\"") diff --git a/cmake/OpenCVFindIPPIW.cmake b/cmake/OpenCVFindIPPIW.cmake index 1e065e10f6..b32113c5ac 100644 --- a/cmake/OpenCVFindIPPIW.cmake +++ b/cmake/OpenCVFindIPPIW.cmake @@ -83,7 +83,9 @@ macro(ippiw_setup PATH BUILD) set(IPP_IW_LIBRARY ippiw) set(IPP_IW_INCLUDES "${IPP_IW_PATH}/include") set(IPP_IW_LIBRARIES ${IPP_IW_LIBRARY}) - execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${OpenCV_SOURCE_DIR}/3rdparty/ippicv/CMakeLists.txt" "${IPP_IW_PATH}/") + if(NOT EXISTS "${IPP_IW_PATH}/CMakeLists.txt") + file(COPY "${OpenCV_SOURCE_DIR}/3rdparty/ippicv/CMakeLists.txt" DESTINATION "${IPP_IW_PATH}") + endif() add_subdirectory("${IPP_IW_PATH}/" ${OpenCV_BINARY_DIR}/3rdparty/ippiw) set(HAVE_IPP_IW 1)