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