commit: fc430dd5f1c6d6d91f8527413a00f82b2c514cc7 Author: Robert Siebeck <gentoo.2019 <AT> r123 <DOT> de> AuthorDate: Wed Mar 11 19:06:52 2026 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Sat Mar 14 19:00:06 2026 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=fc430dd5
media-gfx/superslicer: add 2.7.61.10 Closes: https://bugs.gentoo.org/940498 Signed-off-by: Robert Siebeck <gentoo.2019 <AT> r123.de> Part-of: https://codeberg.org/gentoo/gentoo/pulls/300 Merges: https://codeberg.org/gentoo/gentoo/pulls/300 Signed-off-by: Sam James <sam <AT> gentoo.org> media-gfx/superslicer/Manifest | 2 + ...icer-2.7.61.10-fix-bonjour-deadline-timer.patch | 11 ++ .../files/superslicer-2.7.61.10-fix-boost.patch | 118 +++++++++++++++++++++ .../superslicer-2.7.61.10-fix-cutsurface.patch | 83 +++++++++++++++ .../files/superslicer-2.7.61.10-fix-libexpat.patch | 13 +++ .../superslicer-2.7.61.10-fix-seam-placer.patch | 9 ++ media-gfx/superslicer/superslicer-2.7.61.10.ebuild | 96 +++++++++++++++++ 7 files changed, 332 insertions(+) diff --git a/media-gfx/superslicer/Manifest b/media-gfx/superslicer/Manifest index 6e67eb151ca2..9c08a92260a9 100644 --- a/media-gfx/superslicer/Manifest +++ b/media-gfx/superslicer/Manifest @@ -1,2 +1,4 @@ DIST superslicer-2.5.59.10-profiles.tar.gz 17933533 BLAKE2B d11e8660a9c04221ece8352695a78b302d0d934fca4cc26c17b44ba74d99271aa2f0088de4f36f718827f22073f5bdd90d1163c44d0fe0139b73e55929019ec8 SHA512 43dfe882fb52840abdcbc6c3c4441f7a02b2f21bfa986594e2c6399823508433a29d7372cdf28dab442ae831c0b89d1792e349944e797c899aaffeaf6b738ad6 DIST superslicer-2.5.59.10.tar.gz 46034708 BLAKE2B 7d30b7e365d336725606f298b0b8ecbf56170e822c8d00a323d45bdf93ae399fb0a312e542ebde51642b7404820604338bd3606add60aad5c3e492e73ef5a28f SHA512 44f46a739f8e1769dd1883dd8ff88c6b3f0efbea2abcf9281cca22e48693ca8643a911c24325f0b8df7c66e3d32ad2e51854f09a67a4f2738ce0673c19485f1b +DIST superslicer-2.7.61.10-profiles.tar.gz 24683364 BLAKE2B e10da181122885f8a09270d54382f130622e7bdcc1576846089a86587ddaf75447b0ba22d8539c2dbab57dbbbd214da158108c0f76733e5047e01f3d986c533d SHA512 88d04ba9825b70fa93525916292f7fda3744ad90431e533b5a5b06a167ae7922d4b148a18ec698c96d131f9b685978e82c97d24d4e1208eaed59164658822104 +DIST superslicer-2.7.61.10.tar.gz 50223296 BLAKE2B 50e12113c978309cbda17b582d14181b1eec5a5f5743f2d99b548d85ae1eea36a61ba59c53a40199fde340bbee2089cd0bf797bb6aa2c38fbaa3f1297cc9f117 SHA512 f7a74145b2ca254b84db968b5e7984af36f2874a9188e05de7d638558e1ce305fddd3604a1b3a93942b6942dcfe8321b4d5ba1d387b8b9f769e724eaaf501259 diff --git a/media-gfx/superslicer/files/superslicer-2.7.61.10-fix-bonjour-deadline-timer.patch b/media-gfx/superslicer/files/superslicer-2.7.61.10-fix-bonjour-deadline-timer.patch new file mode 100644 index 000000000000..3b6965d6526a --- /dev/null +++ b/media-gfx/superslicer/files/superslicer-2.7.61.10-fix-bonjour-deadline-timer.patch @@ -0,0 +1,11 @@ +diff --git a/src/slic3r/Utils/Bonjour.hpp b/src/slic3r/Utils/Bonjour.hpp +--- a/src/slic3r/Utils/Bonjour.hpp ++++ b/src/slic3r/Utils/Bonjour.hpp +@@ -16,6 +16,7 @@ + #include <boost/asio.hpp> + #include <boost/asio/ip/address.hpp> + #include <boost/system/error_code.hpp> ++#include <boost/asio/deadline_timer.hpp> + #include <boost/shared_ptr.hpp> + + namespace Slic3r { diff --git a/media-gfx/superslicer/files/superslicer-2.7.61.10-fix-boost.patch b/media-gfx/superslicer/files/superslicer-2.7.61.10-fix-boost.patch new file mode 100644 index 000000000000..4119a51a84eb --- /dev/null +++ b/media-gfx/superslicer/files/superslicer-2.7.61.10-fix-boost.patch @@ -0,0 +1,118 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -384,7 +384,7 @@ + # boost::process was introduced first in version 1.64.0, + # boost::beast::detail::base64 was introduced first in version 1.66.0 + set(MINIMUM_BOOST_VERSION "1.66.0") +-set(_boost_components "system;filesystem;thread;log;locale;regex;chrono;atomic;date_time;iostreams") ++set(_boost_components "filesystem;thread;log;locale;regex;chrono;atomic;date_time;iostreams;process") + find_package(Boost ${MINIMUM_BOOST_VERSION} REQUIRED COMPONENTS ${_boost_components}) + # boost compile only in release & debug. We have to force the release version for RELWITHDEBINFO compilation + if (MSVC) +diff --git a/src/libslic3r/GCode/PostProcessor.cpp b/src/libslic3r/GCode/PostProcessor.cpp +--- a/src/libslic3r/GCode/PostProcessor.cpp ++++ b/src/libslic3r/GCode/PostProcessor.cpp +@@ -29,6 +29,8 @@ + // POSIX + #include <sstream> + #include <boost/process.hpp> ++#include <boost/process/v1/child.hpp> ++#include <boost/process/v1/io.hpp> + #include <unistd.h> //readlink + #endif + +@@ -228,8 +230,8 @@ + command_line.push_back('\''); + + BOOST_LOG_TRIVIAL(trace) << boost::format("Executing script, shell: %1%, command: %2%") % shell % command_line; +- process::ipstream istd_err; +- process::child child(shell, "-c", command_line, process::std_err > istd_err); ++ boost::process::v1::ipstream istd_err; ++ boost::process::v1::child child(shell, "-c", command_line, boost::process::v1::std_err > istd_err); + + std_err.clear(); + std::string line; +diff --git a/src/slic3r/GUI/FreeCADDialog.cpp b/src/slic3r/GUI/FreeCADDialog.cpp +--- a/src/slic3r/GUI/FreeCADDialog.cpp ++++ b/src/slic3r/GUI/FreeCADDialog.cpp +@@ -45,6 +45,11 @@ + // note: don't put it in a header, as it can create problems. Here it's safe enough to be used, as it's just applied for the process.hpp file and this source code. + #define pid_t pid_t + #include <boost/process.hpp> ++#include <boost/process/v1/child.hpp> ++#include <boost/process/v1/io.hpp> ++#include <boost/process/v1/pipe.hpp> ++#include <boost/process/v1/async.hpp> ++ + + #include <cstdlib> // getenv() + +@@ -63,11 +68,12 @@ + //now that we have process.hpp, we can define the ExecVar + class ExecVar { + public: +- boost::process::opstream pyin; ++ boost::process::v1::opstream pyin; ++#include <boost/process/v1/io.hpp> + boost::asio::io_context ios; + std::future<std::string> data_out; + std::future<std::string> data_err; +- std::unique_ptr<boost::process::child> process; ++ std::unique_ptr<boost::process::v1::child> process; + }; + + //TODO: auto tab +@@ -843,8 +849,8 @@ + get_string_from_web_async("https://api.github.com/repos/supermerill/FreePySCAD/commits/master", this, &FreeCADDialog::test_update_script_file); + } + +- exec_var->process.reset(new boost::process::child(pythonpath.string() + " -u -i", boost::process::std_in < exec_var->pyin, +- boost::process::std_out > exec_var->data_out, boost::process::std_err > exec_var->data_err, exec_var->ios)); ++ exec_var->process.reset(new boost::process::v1::child(pythonpath.string() + " -u -i", boost::process::v1::std_in < exec_var->pyin, ++ boost::process::v1::std_out > exec_var->data_out, boost::process::v1::std_err > exec_var->data_err, exec_var->ios)); + exec_var->pyin << "import sys" << std::endl; + // add freecad lib path if not already done + exec_var->pyin << "sys.path.append('" << (freecadpath / "lib").string() << "')" << std::endl; +diff --git a/src/slic3r/GUI/RemovableDriveManager.cpp b/src/slic3r/GUI/RemovableDriveManager.cpp +--- a/src/slic3r/GUI/RemovableDriveManager.cpp ++++ b/src/slic3r/GUI/RemovableDriveManager.cpp +@@ -36,6 +36,9 @@ + #include <boost/filesystem.hpp> + #include <boost/system/error_code.hpp> + #include <boost/process.hpp> ++#include <boost/process/v1/child.hpp> ++#include <boost/process/v1/io.hpp> ++#include <boost/process/v1/search_path.hpp> + #endif + + namespace Slic3r { +@@ -859,15 +862,15 @@ + // but neither triggers "succesful safe removal messege" + + BOOST_LOG_TRIVIAL(info) << "Ejecting started"; +- boost::process::ipstream istd_err; +- boost::process::child child( ++ boost::process::v1::ipstream istd_err; ++ boost::process::v1::child child( + #if __APPLE__ +- boost::process::search_path("diskutil"), "eject", correct_path.c_str(), (boost::process::std_out & boost::process::std_err) > istd_err); ++ boost::process::v1::search_path("diskutil"), "eject", correct_path.c_str(), (boost::process::v1::std_out & boost::process::v1::std_err) > istd_err); + //Another option how to eject at mac. Currently not working. + //used insted of system() command; + //this->eject_device(correct_path); + #else +- boost::process::search_path("umount"), correct_path.c_str(), (boost::process::std_out & boost::process::std_err) > istd_err); ++ boost::process::v1::search_path("umount"), correct_path.c_str(), (boost::process::v1::std_out & boost::process::v1::std_err) > istd_err); + #endif + std::string line; + while (child.running() && std::getline(istd_err, line)) { +@@ -881,7 +884,7 @@ + // The wait call can fail, as it did in https://github.com/prusa3d/PrusaSlicer/issues/5507 + // It can happen even in cases where the eject is sucessful, but better report it as failed. + // We did not find a way to reliably retrieve the exit code of the process. +- BOOST_LOG_TRIVIAL(error) << "boost::process::child::wait() failed during Ejection. State of Ejection is unknown. Error code: " << ec.value(); ++ BOOST_LOG_TRIVIAL(error) << "boost::process::v1::child::wait() failed during Ejection. State of Ejection is unknown. Error code: " << ec.value(); + } else { + int err = child.exit_code(); + if (err) { diff --git a/media-gfx/superslicer/files/superslicer-2.7.61.10-fix-cutsurface.patch b/media-gfx/superslicer/files/superslicer-2.7.61.10-fix-cutsurface.patch new file mode 100644 index 000000000000..5cb7d10c55e8 --- /dev/null +++ b/media-gfx/superslicer/files/superslicer-2.7.61.10-fix-cutsurface.patch @@ -0,0 +1,83 @@ +diff --git a/src/libslic3r/CutSurface.cpp b/src/libslic3r/CutSurface.cpp +index c229ff246b..89d3955b29 100644 +--- a/src/libslic3r/CutSurface.cpp ++++ b/src/libslic3r/CutSurface.cpp +@@ -3,6 +3,7 @@ + ///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher + ///|/ + #include "CutSurface.hpp" ++#include <CGAL/AABB_traits.h> + + /// models_input.obj - Check transormation of model to each others + /// projection_center.obj - circle representing center of projection with correct distance +@@ -1429,8 +1430,8 @@ priv::CutAOIs priv::cut_from_model(CutMesh &cgal_model, + // detect anomalities in visitor. + bool is_valid = true; + // NOTE: map are created when convert shapes to cgal model +- const EdgeShapeMap& edge_shape_map = cgal_shape.property_map<EI, IntersectingElement>(edge_shape_map_name).first; +- const FaceShapeMap& face_shape_map = cgal_shape.property_map<FI, IntersectingElement>(face_shape_map_name).first; ++ const EdgeShapeMap& edge_shape_map = cgal_shape.property_map<EI, IntersectingElement>(edge_shape_map_name).value(); ++ const FaceShapeMap& face_shape_map = cgal_shape.property_map<FI, IntersectingElement>(face_shape_map_name).value(); + Visitor visitor{cgal_model, cgal_shape, edge_shape_map, face_shape_map, vert_shape_map, &is_valid}; + + // a property map containing the constrained-or-not status of each edge +@@ -1579,8 +1580,8 @@ void priv::collect_surface_data(std::queue<FI> &process, + + void priv::create_reduce_map(ReductionMap &reduction_map, const CutMesh &mesh) + { +- const VertexShapeMap &vert_shape_map = mesh.property_map<VI, const IntersectingElement*>(vert_shape_map_name).first; +- const EdgeBoolMap &ecm = mesh.property_map<EI, bool>(is_constrained_edge_name).first; ++ const VertexShapeMap &vert_shape_map = mesh.property_map<VI, const IntersectingElement*>(vert_shape_map_name).value(); ++ const EdgeBoolMap &ecm = mesh.property_map<EI, bool>(is_constrained_edge_name).value(); + + // check if vertex was made by edge_2 which is diagonal of quad + auto is_reducible_vertex = [&vert_shape_map](VI reduction_from) -> bool { +@@ -1765,10 +1766,10 @@ priv::VDistances priv::calc_distances(const SurfacePatches &patches, + for (const SurfacePatch &patch : patches) { + // map is created during intersection by corefine visitor + const VertexShapeMap &vert_shape_map = +- models[patch.model_id].property_map<VI, const IntersectingElement *>(vert_shape_map_name).first; ++ models[patch.model_id].property_map<VI, const IntersectingElement *>(vert_shape_map_name).value(); + uint32_t patch_index = &patch - &patches.front(); + // map is created during patch creation / dividing +- const CvtVI2VI& cvt = patch.mesh.property_map<VI, VI>(patch_source_name).first; ++ const CvtVI2VI& cvt = patch.mesh.property_map<VI, VI>(patch_source_name).value(); + // for each point on outline + for (const Loop &loop : patch.loops) + for (const VI &vi_patch : loop) { +@@ -2929,7 +2930,7 @@ bool priv::is_patch_inside_of_model(const SurfacePatch &patch, + uint32_t priv::get_shape_point_index(const CutAOI &cut, const CutMesh &model) + { + // map is created during intersection by corefine visitor +- const VertexShapeMap &vert_shape_map = model.property_map<VI, const IntersectingElement *>(vert_shape_map_name).first; ++ const VertexShapeMap &vert_shape_map = model.property_map<VI, const IntersectingElement *>(vert_shape_map_name).value(); + // for each half edge of outline + for (HI hi : cut.second) { + VI vi = model.source(hi); +@@ -2954,7 +2955,7 @@ priv::SurfacePatch priv::separate_patch(const std::vector<FI>& fis, + patch_new.model_id = patch.model_id; + patch_new.shape_id = patch.shape_id; + // fix cvt +- CvtVI2VI cvt = patch_new.mesh.property_map<VI, VI>(patch_source_name).first; ++ CvtVI2VI cvt = patch_new.mesh.property_map<VI, VI>(patch_source_name).value(); + for (VI &vi : cvt) { + if (!vi.is_valid()) continue; + vi = cvt_from[vi]; +@@ -2974,7 +2975,7 @@ void priv::divide_patch(size_t i, SurfacePatchesEx &patches) + std::string patch_number_name = "f:patch_number"; + CutMesh::Property_map<FI,bool> is_processed = access_pmap(cm.add_property_map<FI, bool>(patch_number_name, false)); + +- const CvtVI2VI& cvt_from = patch.mesh.property_map<VI, VI>(patch_source_name).first; ++ const CvtVI2VI& cvt_from = patch.mesh.property_map<VI, VI>(patch_source_name).value(); + + std::vector<FI> fis; + fis.reserve(cm.faces().size()); +@@ -3161,7 +3162,7 @@ bool priv::is_over_whole_expoly(const CutAOI &cutAOI, + const CutMesh &mesh) + { + // NonInterupted contour is without other point and contain all from shape +- const VertexShapeMap &vert_shape_map = mesh.property_map<VI, const IntersectingElement*>(vert_shape_map_name).first; ++ const VertexShapeMap &vert_shape_map = mesh.property_map<VI, const IntersectingElement*>(vert_shape_map_name).value(); + for (HI hi : cutAOI.second) { + const IntersectingElement *ie_s = vert_shape_map[mesh.source(hi)]; + const IntersectingElement *ie_t = vert_shape_map[mesh.target(hi)]; diff --git a/media-gfx/superslicer/files/superslicer-2.7.61.10-fix-libexpat.patch b/media-gfx/superslicer/files/superslicer-2.7.61.10-fix-libexpat.patch new file mode 100644 index 000000000000..60b2c33bbbf5 --- /dev/null +++ b/media-gfx/superslicer/files/superslicer-2.7.61.10-fix-libexpat.patch @@ -0,0 +1,13 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 34fe44a2ef..01c874dcfd 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -485,7 +485,7 @@ include_directories(BEFORE SYSTEM ${EIGEN3_INCLUDE_DIR}) + # no matter what. + find_package(EXPAT REQUIRED) + +-add_library(libexpat INTERFACE) ++#add_library(libexpat INTERFACE) + + if (TARGET EXPAT::EXPAT ) + target_link_libraries(libexpat INTERFACE EXPAT::EXPAT) diff --git a/media-gfx/superslicer/files/superslicer-2.7.61.10-fix-seam-placer.patch b/media-gfx/superslicer/files/superslicer-2.7.61.10-fix-seam-placer.patch new file mode 100644 index 000000000000..3c5602fd672d --- /dev/null +++ b/media-gfx/superslicer/files/superslicer-2.7.61.10-fix-seam-placer.patch @@ -0,0 +1,9 @@ +diff --git a/src/libslic3r/GCode/SeamPlacer.hpp b/src/libslic3r/GCode/SeamPlacer.hpp +--- a/src/libslic3r/GCode/SeamPlacer.hpp ++++ b/src/libslic3r/GCode/SeamPlacer.hpp +@@ -17,6 +17,7 @@ + #include "libslic3r/BoundingBox.hpp" + #include "libslic3r/AABBTreeIndirect.hpp" + #include "libslic3r/KDTreeIndirect.hpp" ++#include "libslic3r/TriangleMesh.hpp" + diff --git a/media-gfx/superslicer/superslicer-2.7.61.10.ebuild b/media-gfx/superslicer/superslicer-2.7.61.10.ebuild new file mode 100644 index 000000000000..0f5496cc1a02 --- /dev/null +++ b/media-gfx/superslicer/superslicer-2.7.61.10.ebuild @@ -0,0 +1,96 @@ +# Copyright 2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +WX_GTK_VER="3.2-gtk3" +MY_PN="SuperSlicer" +SLICER_PROFILES_COMMIT="c3fc5fd5948c74c51dd6d49d1521b6059eb82f7d" + +inherit cmake wxwidgets xdg + +DESCRIPTION="A mesh slicer to generate G-code for fused-filament-fabrication (3D printers)" +HOMEPAGE="https://github.com/supermerill/SuperSlicer/" +SRC_URI=" + https://github.com/supermerill/SuperSlicer/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz + https://github.com/slic3r/slic3r-profiles/archive/${SLICER_PROFILES_COMMIT}.tar.gz -> ${P}-profiles.tar.gz +" + +S="${WORKDIR}/${MY_PN}-${PV}" + +LICENSE="AGPL-3 Boost-1.0 GPL-2 LGPL-3 MIT" +SLOT="0" +KEYWORDS="~amd64 ~arm64 ~x86" +IUSE="test" +RESTRICT="test" + +RDEPEND=" + dev-cpp/eigen:3 + dev-cpp/tbb:= + dev-libs/boost:=[nls] + dev-libs/cereal + dev-libs/expat + dev-libs/glib:2 + dev-libs/gmp:= + dev-libs/mpfr:= + media-gfx/openvdb:= + media-gfx/libbgcode + media-libs/fontconfig + net-misc/curl[adns] + media-libs/glew:0= + media-libs/libjpeg-turbo:= + media-libs/libpng:0= + media-libs/nanosvg + sci-libs/libigl + sci-libs/nlopt + sci-libs/opencascade:= + sci-mathematics/cgal:= + sys-apps/dbus + virtual/opengl + x11-libs/gtk+:3 + x11-libs/wxGTK:${WX_GTK_VER}=[X,opengl] +" +DEPEND="${RDEPEND} + media-libs/qhull[static-libs] +" + +PATCHES=( + "${FILESDIR}/${PN}-${PV}-fix-boost.patch" + "${FILESDIR}/${PN}-${PV}-fix-libexpat.patch" + "${FILESDIR}/${PN}-${PV}-fix-cutsurface.patch" + "${FILESDIR}/${PN}-${PV}-fix-seam-placer.patch" + "${FILESDIR}/${PN}-${PV}-fix-bonjour-deadline-timer.patch" +) + +src_unpack() { + default + + mv slic3r-profiles-*/* "${S}"/resources/profiles/ || die +} + +src_configure() { + CMAKE_BUILD_TYPE="Release" + + setup-wxwidgets + + local mycmakeargs=( + -DOPENVDB_FIND_MODULE_PATH="/usr/$(get_libdir)/cmake/OpenVDB" + + -DSLIC3R_BUILD_TESTS=$(usex test) + -DSLIC3R_FHS=ON + -DSLIC3R_GTK=3 + -DSLIC3R_GUI=ON + -DSLIC3R_PCH=OFF + -DSLIC3R_STATIC=OFF + -DSLIC3R_WX_STABLE=ON + -Wno-dev + ) + + cmake_src_configure +} + +src_install() { + cmake_src_install + + rm "${ED}/usr/lib/udev/rules.d/90-3dconnexion.rules" || die +}
