File 0004-Fix-OCCT.patch of Package SuperSlicer

From 8345dc8d4b946f843ee0ca713580a70e3bf3ea99 Mon Sep 17 00:00:00 2001
From: Mia Herkt <mia@0x0.st>
Date: Tue, 17 Dec 2024 07:00:16 +0100
Subject: [PATCH 04/11] Fix OCCT

---
 src/libslic3r/Format/STEP.cpp   |  6 +--
 src/occt_wrapper/CMakeLists.txt | 87 +++++++--------------------------
 2 files changed, 22 insertions(+), 71 deletions(-)

diff --git a/src/libslic3r/Format/STEP.cpp b/src/libslic3r/Format/STEP.cpp
index c55f0dd861..73718a5053 100644
--- a/src/libslic3r/Format/STEP.cpp
+++ b/src/libslic3r/Format/STEP.cpp
@@ -42,8 +42,8 @@ LoadStepFn get_load_step_fn()
 #endif
 
     if (!load_step_fn) {
-        auto libpath = boost::dll::program_location().parent_path();
 #ifdef _WIN32
+        auto libpath = boost::dll::program_location().parent_path();
         libpath /= "OCCTWrapper.dll";
         HMODULE module = LoadLibraryW(libpath.wstring().c_str());
         if (module == NULL)
@@ -64,8 +64,8 @@ LoadStepFn get_load_step_fn()
 #elif __APPLE__
         load_step_fn = &load_step_internal;
 #else
-        libpath /= "OCCTWrapper.so";
-        void *plugin_ptr = dlopen(libpath.c_str(), RTLD_NOW | RTLD_GLOBAL);
+        // This is installed into /usr/lib(64)/ and dlopen will search there.
+        void *plugin_ptr = dlopen("OCCTWrapper.so", RTLD_NOW | RTLD_GLOBAL);
 
         if (plugin_ptr) {
             load_step_fn = reinterpret_cast<LoadStepFn>(dlsym(plugin_ptr, fn_name));
diff --git a/src/occt_wrapper/CMakeLists.txt b/src/occt_wrapper/CMakeLists.txt
index aba422f427..9a33378f33 100644
--- a/src/occt_wrapper/CMakeLists.txt
+++ b/src/occt_wrapper/CMakeLists.txt
@@ -20,83 +20,34 @@ include(GenerateExportHeader)
 generate_export_header(OCCTWrapper)
 
 find_package(OpenCASCADE REQUIRED)
-if (OpenCASCADE_VERSION VERSION_LESS 7.6.1)
-    message(FATAL_ERROR "OpenCASCADE v7 >= v7.6.1 must be used")
-elseif (OpenCASCADE_VERSION VERSION_GREATER_EQUAL 8.0.0)
-    message(FATAL_ERROR "OpenCASCADE v7 >= v7.6.1 must be used")
-endif ()
-
-if (OpenCASCADE_VERSION VERSION_LESS 7.8.0)
-    message(STATUS "OpenCASCADE_VERSION version < 7.8.0")
-    set(OCCT_LIBS
-        TKXDESTEP
-        TKSTEP
-        TKSTEP209
-        TKSTEPAttr
-        TKSTEPBase
-        TKXCAF
-        TKXSBase
-        TKVCAF
-        TKCAF
-        TKLCAF
-        TKCDF
-        TKV3d
-        TKService
-        TKMesh
-        TKBO
-        TKPrim
-        TKHLR
-        TKShHealing
-        TKTopAlgo
-        TKGeomAlgo
-        TKBRep
-        TKGeomBase
-        TKG3d
-        TKG2d
-        TKMath
-        TKernel
-    )
-else()
-    message(STATUS "OpenCASCADE_VERSION version >= 7.8.0")
-    set(OCCT_LIBS
-            TKXCAF
-            TKXSBase
-            TKVCAF
-            TKCAF
-            TKLCAF
-            TKCDF
-            TKV3d
-            TKService
-            TKMesh
-            TKBO
-            TKPrim
-            TKHLR
-            TKShHealing
-            TKTopAlgo
-            TKGeomAlgo
-            TKBRep
-            TKGeomBase
-            TKG3d
-            TKG2d
-            TKMath
-            TKernel
-            TKDESTEP
-            TKXSDRAWSTEP
+# OpenCASCADE has an exact version match even if you don't specify the EXACT
+# keyword in the find_package(). So lets implement it on our own.
+set(OPENCASCADE_MODULE_VERSION
+    "${OpenCASCADE_MAJOR_VERSION}.${OpenCASCADE_MINOR_VERSION}.${OpenCASCADE_MAINTENANCE_VERSION}")
+set(OPENCASCADE_REQUIRED_VERSION "7.8.0")
+if (${OPENCASCADE_MODULE_VERSION} VERSION_LESS ${OPENCASCADE_REQUIRED_VERSION})
+    message(
+        FATAL_ERROR
+        "Coun't find a compatible OpenCASCADE version - "
+        "required: ${OPENCASCADE_REQUIRED_VERSION}, found: "
+        "${OPENCASCADE_MODULE_VERSION}"
     )
 endif()
 
-message(STATUS "OpenCASCADE_VERSION: '${OpenCASCADE_VERSION}'")
+set(OCCT_LIBS
+    TKDESTEP
+)
 
-message(STATUS "OCCT_LIBS: '${OCCT_LIBS}'")
 slic3r_remap_configs("${OCCT_LIBS}" RelWithDebInfo Release)
 
 target_include_directories(OCCTWrapper PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
 target_include_directories(OCCTWrapper PUBLIC ${OpenCASCADE_INCLUDE_DIR})
 target_link_libraries(OCCTWrapper ${OCCT_LIBS})
-target_link_libraries(OCCTWrapper libslic3r admesh)
-
 
 include(GNUInstallDirs)
 
-install(TARGETS OCCTWrapper DESTINATION "${CMAKE_INSTALL_LIBDIR}/superslicer")
-
+if (WIN32 OR APPLE)
+    install(TARGETS OCCTWrapper DESTINATION "${CMAKE_INSTALL_BINDIR}")
+else()
+    install(TARGETS OCCTWrapper DESTINATION "${CMAKE_INSTALL_LIBDIR}")
+endif()
-- 
2.51.1

openSUSE Build Service is sponsored by