# Copyright 1999-2026 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 WX_GTK_VER="3.2-gtk3" MY_PN="OrcaSlicer" inherit check-reqs cmake multiprocessing wxwidgets xdg DESCRIPTION="Open-source 3D printer slicer (PrusaSlicer/Bambu Studio fork)" HOMEPAGE="https://orcaslicer.com/ https://github.com/SoftFever/OrcaSlicer https://github.com/OrcaSlicer/OrcaSlicer" SRC_URI="https://github.com/OrcaSlicer/OrcaSlicer/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz" S="${WORKDIR}/${MY_PN}-${PV}" LICENSE="AGPL-3 Apache-2.0 Boost-1.0 GPL-2 LGPL-2.1+ LGPL-3 MIT" SLOT="0" KEYWORDS="~amd64" IUSE="test" RESTRICT="!test? ( test )" PATCHES=( "${FILESDIR}/${P}-boost-1.90.patch" "${FILESDIR}/${P}-boost-process-v1.patch" "${FILESDIR}/${P}-boost-asio-fs.patch" "${FILESDIR}/${P}-cgal-6.patch" "${FILESDIR}/${P}-link-webkit2gtk.patch" "${FILESDIR}/${P}-occt-7.8-tkdestep.patch" "${FILESDIR}/${P}-opencv-no-world.patch" "${FILESDIR}/${P}-wx-set-values-ambig.patch" # Silence wx assertions at runtime: upstream's bundled wx build # sets wxBUILD_DEBUG_LEVEL=0 (deps/wxWidgets/wxWidgets.cmake) so # bad sizer/widget calls never raise; system wxGTK ships with # wxDEBUG_LEVEL=1 and the modal assert dialog wedges startup. "${FILESDIR}/${P}-wx-noop-assert-handler.patch" # Skip g_object_set("audio-sink") when the backend lacks the # property: wx 3.2's media lib wraps a GstPlayer (no audio-sink # prop), so the unguarded call was a silent no-op that only ever # produced a GLib-GObject-CRITICAL on every wxMediaCtrl2 ctor. "${FILESDIR}/${P}-mediactrl-audio-sink-guard.patch" ) RDEPEND=" app-crypt/libsecret dev-cpp/eigen:3 dev-cpp/nlohmann_json:= dev-cpp/tbb:= dev-libs/boost:=[nls] dev-libs/cereal dev-libs/expat dev-libs/glib:2 dev-libs/gmp:= dev-libs/libmspack dev-libs/libspnav dev-libs/mpfr:= media-gfx/libbgcode media-gfx/openvdb:= media-libs/draco media-libs/fontconfig media-libs/glew:0= media-libs/glfw media-libs/gst-plugins-base:1.0 media-libs/gstreamer:1.0 media-libs/libjpeg-turbo:= media-libs/libnoise media-libs/libpng:0= media-libs/nanosvg:= media-libs/qhull:= media-libs/opencv:= net-libs/webkit-gtk:4.1 net-misc/curl[adns] sci-libs/libigl sci-libs/nlopt sci-libs/opencascade:= sci-mathematics/cgal:= sys-apps/dbus virtual/opengl virtual/zlib:= x11-libs/gtk+:3 x11-libs/wxGTK:${WX_GTK_VER}=[X,curl,gstreamer,keyring,opengl,webkit] " DEPEND="${RDEPEND} media-libs/qhull[static-libs] " BDEPEND=" sys-devel/gettext virtual/pkgconfig " pkg_pretend() { if [[ ${MERGE_TYPE} != binary ]]; then # Several CGAL/Eigen-heavy translation units (CutSurface, MeshBoolean, # Arrange, BuildVolume, ...) peak around 4-5 GiB of resident RAM each # while cc1plus instantiates templates. Scale the requirement with # MAKEOPTS jobs so the merge fails up front instead of getting OOM # killed mid-link. local jobs jobs=$(makeopts_jobs) local CHECKREQS_DISK_BUILD="12G" local CHECKREQS_MEMORY="$((jobs * 4 + 2))G" check-reqs_pkg_pretend if (( jobs > 4 )); then ewarn "MAKEOPTS=\"-j${jobs}\" will instantiate many heavy CGAL/Eigen" ewarn "translation units in parallel. If cc1plus gets OOM-killed," ewarn "drop to -j4 via /etc/portage/env/${CATEGORY}/${PN}." fi fi } pkg_setup() { if [[ ${MERGE_TYPE} != binary ]]; then local jobs jobs=$(makeopts_jobs) local CHECKREQS_DISK_BUILD="12G" local CHECKREQS_MEMORY="$((jobs * 4 + 2))G" check-reqs_pkg_setup fi } src_prepare() { # Replace +UNKNOWN suffix with overlay tag (upstream's build_linux.sh sets # this to a date; we use a stable identifier instead). sed -i -e "s/+UNKNOWN/_Gentoo/" version.inc || die cmake_src_prepare } src_configure() { CMAKE_BUILD_TYPE="Release" setup-wxwidgets local mycmakeargs=( -DBUILD_TESTS=$(usex test) -DORCA_TOOLS=ON -DSLIC3R_FHS=ON -DSLIC3R_GTK=3 -DSLIC3R_GUI=ON -DSLIC3R_PCH=OFF -DSLIC3R_STATIC=OFF -DOPENVDB_FIND_MODULE_PATH="/usr/$(get_libdir)/cmake/OpenVDB" -Wno-dev ) cmake_src_configure }