From b82d13a5a96199328045a7606f2292fccb91f009 Mon Sep 17 00:00:00 2001 From: Joseph Palazzolo Date: Thu, 20 Feb 2025 21:50:17 -0700 Subject: [PATCH] Fix OCCT and OpenCV patching during build (#8465) * Fix OCCT and OpenCV patching during build The inclusion of the `--directory` flag here isn't necessary because of how `PATCH_COMMAND` applies patches. In fact this causes issues when trying to build from an archive, `--directory` seems to imply `--index` and thus this patch only succeeds if you're inside an initialized git repo. If you simply use the archive without a git repo the build fails at the patch step. * Alter patch command based on git repo status `git apply` has different behavior when inside a git repo vs not. If we're in a git repo we need to fully quality the path for these patches, otherwise we can omit the directory flag. --------- Co-authored-by: Joe Palazzolo --- deps/CMakeLists.txt | 14 ++++++++++++++ deps/OCCT/OCCT.cmake | 8 ++++---- deps/OpenCV/OpenCV.cmake | 6 +++++- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index 77cae3382..0548e405e 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -340,6 +340,20 @@ if(NOT FREETYPE_FOUND) set(FREETYPE_PKG "dep_FREETYPE") endif() +execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --is-inside-work-tree + RESULT_VARIABLE REV_PARSE_RESULT + OUTPUT_VARIABLE REV_PARSE_OUTPUT + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +# Will output "true" and have a 0 return code if within a git repo +if((REV_PARSE_RESULT EQUAL 0) AND (REV_PARSE_OUTPUT STREQUAL "true")) + set(IN_GIT_REPO TRUE) + # Find relative path from root to source used for adjusting patch command + file(RELATIVE_PATH BINARY_DIR_REL ${CMAKE_SOURCE_DIR}/.. ${CMAKE_BINARY_DIR}) +endif () + include(OCCT/OCCT.cmake) include(OpenCV/OpenCV.cmake) diff --git a/deps/OCCT/OCCT.cmake b/deps/OCCT/OCCT.cmake index 096da413d..98c6efc98 100644 --- a/deps/OCCT/OCCT.cmake +++ b/deps/OCCT/OCCT.cmake @@ -4,15 +4,15 @@ else() set(library_build_type "Static") endif() - -# get relative path of CMAKE_BINARY_DIR against root source directory -file(RELATIVE_PATH BINARY_DIR_REL ${CMAKE_SOURCE_DIR}/.. ${CMAKE_BINARY_DIR}) +if (IN_GIT_REPO) + set(OCCT_DIRECTORY_FLAG --directory ${BINARY_DIR_REL}/dep_OCCT-prefix/src/dep_OCCT) +endif () orcaslicer_add_cmake_project(OCCT URL https://github.com/Open-Cascade-SAS/OCCT/archive/refs/tags/V7_6_0.zip URL_HASH SHA256=28334f0e98f1b1629799783e9b4d21e05349d89e695809d7e6dfa45ea43e1dbc #PATCH_COMMAND ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-OCCT-fix.patch - PATCH_COMMAND git apply --directory ${BINARY_DIR_REL}/dep_OCCT-prefix/src/dep_OCCT --verbose --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/0001-OCCT-fix.patch + PATCH_COMMAND git apply ${OCCT_DIRECTORY_FLAG} --verbose --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/0001-OCCT-fix.patch #DEPENDS dep_Boost DEPENDS ${FREETYPE_PKG} CMAKE_ARGS diff --git a/deps/OpenCV/OpenCV.cmake b/deps/OpenCV/OpenCV.cmake index 6d62b018a..23cbafa2a 100644 --- a/deps/OpenCV/OpenCV.cmake +++ b/deps/OpenCV/OpenCV.cmake @@ -4,10 +4,14 @@ else () set(_use_IPP "-DWITH_IPP=OFF") endif () +if (IN_GIT_REPO) + set(OpenCV_DIRECTORY_FLAG --directory ${BINARY_DIR_REL}/dep_OpenCV-prefix/src/dep_OpenCV) +endif () + orcaslicer_add_cmake_project(OpenCV URL https://github.com/opencv/opencv/archive/refs/tags/4.6.0.tar.gz URL_HASH SHA256=1ec1cba65f9f20fe5a41fda1586e01c70ea0c9a6d7b67c9e13edf0cfe2239277 - PATCH_COMMAND git apply --directory ${BINARY_DIR_REL}/dep_OpenCV-prefix/src/dep_OpenCV --verbose --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/0001-vs2022.patch + PATCH_COMMAND git apply ${OpenCV_DIRECTORY_FLAG} --verbose --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/0001-vs2022.patch CMAKE_ARGS -DBUILD_SHARED_LIBS=0 -DBUILD_PERE_TESTS=OFF