summaryrefslogtreecommitdiff
path: root/media-gfx
diff options
context:
space:
mode:
authorCrucible <crucible@localhost>2026-09-22 18:47:35 -0500
committerCrucible <crucible@localhost>2026-09-22 18:47:35 -0500
commitcde96c5ea0c81397fd3214d455a374f76179a7aa (patch)
tree12c86d59eb88887c244b1145411db084ae5a6c1f /media-gfx
parent47516b9667518dacb1efd6d257f7b3e6a481ec93 (diff)
downloadbaldeagleos-repo-cde96c5ea0c81397fd3214d455a374f76179a7aa.tar.gz
baldeagleos-repo-cde96c5ea0c81397fd3214d455a374f76179a7aa.tar.xz
baldeagleos-repo-cde96c5ea0c81397fd3214d455a374f76179a7aa.zip
Publish baldeagleos-repo candidate 0000000325-20260922-184323
Diffstat (limited to 'media-gfx')
-rw-r--r--media-gfx/exiv2/Manifest1
-rw-r--r--media-gfx/exiv2/exiv2-0.28.8.ebuild128
-rw-r--r--media-gfx/exiv2/exiv2-0.28.9.ebuild2
-rw-r--r--media-gfx/feh/Manifest3
-rw-r--r--media-gfx/feh/feh-3.11.3.ebuild73
-rw-r--r--media-gfx/feh/feh-3.13.ebuild (renamed from media-gfx/feh/feh-3.12.3.ebuild)0
-rw-r--r--media-gfx/inkscape/files/inkscape-1.4.4-poppler-26.06.patch516
-rw-r--r--media-gfx/inkscape/files/inkscape-1.4.4-poppler-26.07.patch335
-rw-r--r--media-gfx/inkscape/files/inkscape-1.4.4-poppler-26.08.patch51
-rw-r--r--media-gfx/inkscape/inkscape-1.4.4-r1.ebuild217
-rw-r--r--media-gfx/jp2a/jp2a-1.3.2.ebuild2
-rw-r--r--media-gfx/metapixel/metapixel-1.0.2-r3.ebuild4
-rw-r--r--media-gfx/nomacs/nomacs-3.22.0.ebuild4
-rw-r--r--media-gfx/orcaslicer-bin/orcaslicer-bin-2.4.2-r1.ebuild (renamed from media-gfx/orcaslicer-bin/orcaslicer-bin-2.4.2.ebuild)1
-rw-r--r--media-gfx/pngcheck/pngcheck-4.0.1.ebuild2
-rw-r--r--media-gfx/slic3r/Manifest1
-rw-r--r--media-gfx/slic3r/files/admesh-vulnerability.patch21
-rw-r--r--media-gfx/slic3r/files/boost-header.patch42
-rw-r--r--media-gfx/slic3r/files/boost-io-context-1.3.0.patch83
-rw-r--r--media-gfx/slic3r/files/boost-io-context-9999.patch70
-rw-r--r--media-gfx/slic3r/files/boost-placeholders.patch70
-rw-r--r--media-gfx/slic3r/files/libexpat-cve-2024-45492.patch25
-rw-r--r--media-gfx/slic3r/metadata.xml13
-rw-r--r--media-gfx/slic3r/slic3r-1.3.0.ebuild125
-rw-r--r--media-gfx/slic3r/slic3r-9999.ebuild118
-rw-r--r--media-gfx/valentina/Manifest2
-rw-r--r--media-gfx/valentina/valentina-1.0.5.ebuild134
-rw-r--r--media-gfx/valentina/valentina-1.1.1.ebuild138
-rw-r--r--media-gfx/viewnior/viewnior-1.8_p20210825.ebuild2
-rw-r--r--media-gfx/wings/wings-2.4.1.ebuild2
30 files changed, 1972 insertions, 213 deletions
diff --git a/media-gfx/exiv2/Manifest b/media-gfx/exiv2/Manifest
index 5cf789c7c974..186811dda78c 100644
--- a/media-gfx/exiv2/Manifest
+++ b/media-gfx/exiv2/Manifest
@@ -1,2 +1 @@
-DIST exiv2-0.28.8.tar.gz 46670323 BLAKE2B c0248826eda08e7be4ecb597a5d4db37cd06abb03baa7bfc1fa32ff3b51b5900946dd24f7c9dd9423b5a56d40c8dbe8b792d46e697a08bad7feeaa3009c64a10 SHA512 e322438b565fe373e65baceeb4fd5173f538063b12b3d5a93d6e707da5020c818b1b9cc116f7bf0709635aa72b941dacb7a2bcfe6d946e2eaf7d9e55736dec5b
DIST exiv2-0.28.9.tar.gz 47189810 BLAKE2B 59e84f43e73b10f0201ab833065fe924d4a083a4b1f1663bb9e2023856993fd8f7180a42b5cca2259df6ee59dc24e3479ca8fd36cad81c8928da8c03156889bf SHA512 a7fa8fb19e54cdf0b9aac917087c86d45ea1b4a991a85ea8c5dd96af0289df63823901e44604d4c8df55883dcd19aee2efc48d7b5fde313dc0787b842a223a4a
diff --git a/media-gfx/exiv2/exiv2-0.28.8.ebuild b/media-gfx/exiv2/exiv2-0.28.8.ebuild
deleted file mode 100644
index dbf51c31bb96..000000000000
--- a/media-gfx/exiv2/exiv2-0.28.8.ebuild
+++ /dev/null
@@ -1,128 +0,0 @@
-# Copyright 1999-2026 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-PYTHON_COMPAT=( python3_{13..14} )
-inherit cmake-multilib python-any-r1
-
-DESCRIPTION="EXIF, IPTC and XMP metadata C++ library and command line utility"
-HOMEPAGE="https://exiv2.org/"
-
-if [[ ${PV} == *9999* ]]; then
- EGIT_REPO_URI="https://github.com/Exiv2/exiv2.git"
- inherit git-r3
-else
- SRC_URI="https://github.com/Exiv2/exiv2/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
- KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~s390 ~sparc x86 ~x64-solaris"
-fi
-
-LICENSE="GPL-2"
-# Upstream hope to have stable ABI in 1.0. Until then, go off ${PV}.
-# We may be able to change it to $(ver_cut 1-2) once e.g.
-# https://github.com/Exiv2/exiv2/pull/917 is merged.
-SLOT="0/$(ver_cut 1-2)"
-IUSE="+bmff doc examples jpegxl nls +png test webready +xmp"
-RESTRICT="!test? ( test )"
-
-RDEPEND="
- dev-libs/inih[${MULTILIB_USEDEP}]
- >=virtual/libiconv-0-r1[${MULTILIB_USEDEP}]
- jpegxl? ( app-arch/brotli:=[${MULTILIB_USEDEP}] )
- nls? ( >=virtual/libintl-0-r1[${MULTILIB_USEDEP}] )
- png? ( virtual/zlib:=[${MULTILIB_USEDEP}] )
- webready? ( net-misc/curl[${MULTILIB_USEDEP}] )
- xmp? ( dev-libs/expat[${MULTILIB_USEDEP}] )
-"
-DEPEND="${RDEPEND}
- test? ( dev-cpp/gtest )
-"
-BDEPEND="
- doc? (
- ${PYTHON_DEPS}
- app-text/doxygen
- dev-libs/libxslt
- media-gfx/graphviz
- virtual/pkgconfig
- )
- test? ( ${PYTHON_DEPS} )
- nls? ( sys-devel/gettext )
-"
-
-DOCS=( README.md doc/ChangeLog doc/cmd.txt )
-
-pkg_setup() {
- if use doc || use test ; then
- python-any-r1_pkg_setup
- fi
-}
-
-src_prepare() {
- # FIXME @upstream:
- einfo "Converting doc/cmd.txt to UTF-8"
- iconv -f LATIN1 -t UTF-8 doc/cmd.txt > doc/cmd.txt.tmp || die
- mv -f doc/cmd.txt.tmp doc/cmd.txt || die
-
- cmake_src_prepare
-
- sed -e "/^include.*compilerFlags/s/^/#DONT /" -i CMakeLists.txt || die
-}
-
-multilib_src_configure() {
- local mycmakeargs=(
- -DEXIV2_BUILD_SAMPLES=NO
- -DEXIV2_ENABLE_BROTLI=$(usex jpegxl)
- -DEXIV2_ENABLE_NLS=$(usex nls)
- -DEXIV2_ENABLE_PNG=$(usex png)
- -DEXIV2_ENABLE_CURL=$(usex webready)
- -DEXIV2_ENABLE_INIH=ON # must be enabled (bug #921937)
- -DEXIV2_ENABLE_WEBREADY=$(usex webready)
- -DEXIV2_ENABLE_XMP=$(usex xmp)
- -DEXIV2_ENABLE_BMFF=$(usex bmff)
-
- # We let users control this.
- -DBUILD_WITH_CCACHE=OFF
- # Our toolchain sets this by default.
- -DBUILD_WITH_STACK_PROTECTOR=OFF
-
- $(multilib_is_native_abi || echo -DEXIV2_BUILD_EXIV2_COMMAND=NO)
- $(multilib_is_native_abi && echo -DEXIV2_BUILD_DOC=$(usex doc))
- $(multilib_is_native_abi && echo -DEXIV2_BUILD_UNIT_TESTS=$(usex test))
- -DCMAKE_INSTALL_DOCDIR="${EPREFIX}"/usr/share/doc/${PF}/html
- )
-
- if use doc || use test ; then
- mycmakeargs+=(
- -DPython3_EXECUTABLE="${PYTHON}"
- )
- fi
-
- cmake_src_configure
-}
-
-multilib_src_compile() {
- cmake_src_compile
-
- if multilib_is_native_abi; then
- use doc && eninja doc
- fi
-}
-
-multilib_src_test() {
- if multilib_is_native_abi; then
- cd "${BUILD_DIR}"/bin || die
- ./unit_tests || die "Failed to run tests"
- fi
-}
-
-multilib_src_install_all() {
- use xmp && DOCS+=( doc/{COPYING-XMPSDK,README-XMP,cmdxmp.txt} )
-
- einstalldocs
- find "${D}" -name '*.la' -delete || die
-
- if use examples; then
- docinto examples
- dodoc samples/*.cpp
- fi
-}
diff --git a/media-gfx/exiv2/exiv2-0.28.9.ebuild b/media-gfx/exiv2/exiv2-0.28.9.ebuild
index 5dd6e84012b6..09891d8abde8 100644
--- a/media-gfx/exiv2/exiv2-0.28.9.ebuild
+++ b/media-gfx/exiv2/exiv2-0.28.9.ebuild
@@ -14,7 +14,7 @@ if [[ ${PV} == *9999* ]]; then
inherit git-r3
else
SRC_URI="https://github.com/Exiv2/exiv2/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
- KEYWORDS="~alpha ~amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~s390 ~sparc x86 ~x64-solaris"
+ KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~s390 ~sparc x86 ~x64-solaris"
fi
LICENSE="GPL-2+"
diff --git a/media-gfx/feh/Manifest b/media-gfx/feh/Manifest
index 3c4e3b9fb2e9..a62cc3b6307b 100644
--- a/media-gfx/feh/Manifest
+++ b/media-gfx/feh/Manifest
@@ -1,4 +1,3 @@
-DIST feh-3.11.3.tar.bz2 2109841 BLAKE2B eba549f799f1f7d0822c513fb80be495d54976ef2511a8830242acb2564c2a9f170f8f04699c14cb838c43721ff33b9d286c2fdf811e60ce49a6029fb62b9c1e SHA512 b5b009c9a1b1416ba6aec150c96309106b03a17a0be636c1d008a5817e3895306e7c02167c11a97c04c2ef46efe848648c2163977733efebc45caa4a9a3befb5
DIST feh-3.12.2.tar.bz2 2111186 BLAKE2B 5ffb5bd57340523ec12f4f900f92704fc67570438638b48ce15b034bc36ce9b02fbccad600da785a5d4e3660dd7f46e0e48d09dfbaec0d347439fc041949ca10 SHA512 a060043d9d59bb5f4e0a0525c97ce8637f4bb9efbd27a46a2275da6c646f0d1de7fba80172f16a8d3f2dcb54f2bbeca13c073d033cfc08b62f78ac9a6d740ca2
-DIST feh-3.12.3.tar.bz2 2111581 BLAKE2B 63216d97092b3d56d7c73b3f405d66e2c6306ad9ddea3dcaeec87660284d415427d900ab7a03441f04b119176bedf71547a0db9ad9b596415da41259bf18d82f SHA512 3548e75aa3c72be528669b1d63a1e2bb44467ec0111abe7e7a5edc92601b164e66304db653778f9ee46883c57526b46d764659a380be0012360679a654de8f3d
DIST feh-3.12.4.tar.bz2 2111928 BLAKE2B 2a609a6536bfc6639c950a6bc5f7cd2a7a5dbfce8c5ddf04704b981578820f3cafabc280b52e3777926c78240d0930be8bf53802ae7ef5b2e5d124c80eaa7d03 SHA512 84a16fcdb953a16c851c219f21c2b8f70371452886d3ef778acc4d3d41e054243effa2b101bc76727769d5fa3d1582581e082f1f01a4bb0ad196ca011ce24621
+DIST feh-3.13.tar.bz2 2430219 BLAKE2B bbbcddc5a7d9d162866765a2a2ba5a8d8d57017fb2bbab5b88b47428fc15790326abb229cf62e831b9d2c1b9bbda11a52cde4e2612ad13b5e2dd0204138f8f1a SHA512 35c7af2901c0356cd76f109a9c5ce694d9a77cc37ff783195f7a6d23377ea7412bc87a26501cfceb340f36fb1d31c91df23719dc882292cbf060a9057587207b
diff --git a/media-gfx/feh/feh-3.11.3.ebuild b/media-gfx/feh/feh-3.11.3.ebuild
deleted file mode 100644
index 6bad3a9f2b9e..000000000000
--- a/media-gfx/feh/feh-3.11.3.ebuild
+++ /dev/null
@@ -1,73 +0,0 @@
-# Copyright 1999-2026 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-inherit toolchain-funcs xdg-utils
-
-DESCRIPTION="A fast, lightweight imageviewer using imlib2"
-HOMEPAGE="https://feh.finalrewind.org/"
-SRC_URI="https://feh.finalrewind.org/${P}.tar.bz2"
-
-LICENSE="feh"
-SLOT="0"
-KEYWORDS="amd64 ~arm arm64 ~mips ppc ppc64 ~riscv x86"
-IUSE="debug curl exif magic test xinerama inotify"
-RESTRICT="test" # Tests are broken.
-
-COMMON_DEPEND="
- media-libs/imlib2[X,text(+)]
- >=media-libs/libpng-1.2:0=
- x11-libs/libX11
- curl? ( net-misc/curl )
- exif? ( media-libs/libexif )
- magic? ( sys-apps/file )
- xinerama? ( x11-libs/libXinerama )"
-RDEPEND="${COMMON_DEPEND}
- media-libs/libjpeg-turbo:0"
-DEPEND="${COMMON_DEPEND}
- x11-base/xorg-proto
- x11-libs/libXt
- test? (
- >=dev-lang/perl-5.10
- dev-perl/Test-Command
- media-libs/imlib2[gif,jpeg,png]
- )"
-
-PATCHES=( "${FILESDIR}"/${PN}-3.2-debug-cflags.patch )
-
-pkg_setup() {
- use_feh() { usex $1 1 0; }
-
- fehopts=(
- PREFIX="${EPREFIX}"/usr
- doc_dir='${main_dir}'/share/doc/${PF}
- example_dir='${main_dir}'/share/doc/${PF}/examples
- curl=$(use_feh curl)
- debug=$(use_feh debug)
- xinerama=$(use_feh xinerama)
- exif=$(use_feh exif)
- inotify=$(use_feh inotify)
- magic=$(use_feh magic)
- )
-}
-
-src_compile() {
- tc-export CC
- emake "${fehopts[@]}"
-}
-
-src_install() {
- emake "${fehopts[@]}" DESTDIR="${D}" install
-}
-
-pkg_postinst() {
- xdg_icon_cache_update
- xdg_mimeinfo_database_update
- xdg_desktop_database_update
-}
-
-pkg_postrm() {
- xdg_icon_cache_update
- xdg_mimeinfo_database_update
- xdg_desktop_database_update
-}
diff --git a/media-gfx/feh/feh-3.12.3.ebuild b/media-gfx/feh/feh-3.13.ebuild
index ed2fb4314b2e..ed2fb4314b2e 100644
--- a/media-gfx/feh/feh-3.12.3.ebuild
+++ b/media-gfx/feh/feh-3.13.ebuild
diff --git a/media-gfx/inkscape/files/inkscape-1.4.4-poppler-26.06.patch b/media-gfx/inkscape/files/inkscape-1.4.4-poppler-26.06.patch
new file mode 100644
index 000000000000..01c7138e4002
--- /dev/null
+++ b/media-gfx/inkscape/files/inkscape-1.4.4-poppler-26.06.patch
@@ -0,0 +1,516 @@
+Source:
+https://build.opensuse.org/projects/graphics/packages/inkscape/files/fix_build_with_poppler_26.06.patch
+
+From b95f70db09072bb60600d2f6de103608750ef247 Mon Sep 17 00:00:00 2001
+From: KrIr17 <elendil.krir17@gmail.com>
+Date: Mon, 8 Jun 2026 20:16:32 +0200
+Subject: [PATCH] Fix Building with Poppler 26.06.0
+
+- pdfparser: Some `const PDFRectangle *` to `const PDFRectangle &` [1]
+- pdfparser: Some `const GfxColor *` to `const GfxColor &` [2]
+- pdf-utils: Add a `getRect(const PDFRectangle &)` alongside `getRect(const
+ PDFRectangle *)`
+- poppler-cairo-font-engine: `getKey()` now returns std::string and not
+ char[], so change `strcmp` to `std::string(...).compare(...)` [3]
+- poppler-utils: `obj->dictGetKey()` etc. were removed; use
+ `obj->dict()->getKey()` instead (these have also existed in poppler
+ since the beginning, so shouldn't break any old poppler) [4,5]
+- svg-builder: `convertGfxColor` now takes `const GfxColor &` as input.
+ A convenience function taking `const GfxColor *` (for older poppler)
+ now calls the new one after confirming `color` is a valid pointer
+- svg-builder: `_addStopToGradient` now takes `const GfxColor &` as
+ input. This was used only in `convertGfxColor` and therefore doesn't
+ need a helper function for compatibility
+- testfiles pdf-utils-test: `<poppler/*.h>` to `<*.h>` (see e3eb1210)
+- testfiles pdf-utils-test: Some `const PDFRectangle *`
+ to `const PDFRectangle &` [1]
+
+Fixes https://gitlab.com/inkscape/inkscape/-/work_items/6210
+
+Upstream Commits:
+
+[1] https://gitlab.freedesktop.org/poppler/poppler/-/commit/d50a4510
+[2] https://gitlab.freedesktop.org/poppler/poppler/-/commit/0f94f530
+[3] https://gitlab.freedesktop.org/poppler/poppler/-/commit/a3de7f8a
+[4] https://gitlab.freedesktop.org/poppler/poppler/-/commit/bb13b0f5
+[5] https://gitlab.freedesktop.org/poppler/poppler/-/commit/8ae0f8e7
+---
+ src/extension/internal/pdfinput/pdf-input.cpp | 14 +++++-
+ .../internal/pdfinput/pdf-parser.cpp | 43 ++++++++++---------
+ src/extension/internal/pdfinput/pdf-parser.h | 4 +-
+ src/extension/internal/pdfinput/pdf-utils.cpp | 5 +++
+ src/extension/internal/pdfinput/pdf-utils.h | 3 ++
+ .../pdfinput/poppler-cairo-font-engine.cpp | 2 +-
+ .../pdfinput/poppler-transition-api.h | 16 +++++++
+ .../internal/pdfinput/poppler-utils.cpp | 20 +++++----
+ .../internal/pdfinput/svg-builder.cpp | 29 ++++++++-----
+ src/extension/internal/pdfinput/svg-builder.h | 3 +-
+ 10 files changed, 94 insertions(+), 45 deletions(-)
+
+diff --git a/src/extension/internal/pdfinput/pdf-input.cpp b/src/extension/internal/pdfinput/pdf-input.cpp
+index 45df931f00..441871bb10 100644
+--- a/src/extension/internal/pdfinput/pdf-input.cpp
++++ b/src/extension/internal/pdfinput/pdf-input.cpp
+@@ -808,7 +808,11 @@ PdfInput::add_builder_page(std::shared_ptr<PDFDoc>pdf_doc, SvgBuilder *builder,
+ }
+
+ // Apply crop settings
++#if POPPLER_CHECK_VERSION(26, 6, 0)
++ std::optional<PDFRectangle> clipToBox;
++#else
+ _POPPLER_CONST PDFRectangle *clipToBox = nullptr;
++#endif
+
+ if (crop_to == "media-box") {
+ clipToBox = page->getMediaBox();
+@@ -822,8 +826,16 @@ PdfInput::add_builder_page(std::shared_ptr<PDFDoc>pdf_doc, SvgBuilder *builder,
+ clipToBox = page->getArtBox();
+ }
+
++ std::optional<PDFRectangle> cropBox;
++#if POPPLER_CHECK_VERSION(26, 6, 0)
++ cropBox = clipToBox;
++#else
++ if (clipToBox) {
++ cropBox = *clipToBox;
++ }
++#endif
+ // Create parser (extension/internal/pdfinput/pdf-parser.h)
+- auto pdf_parser = PdfParser(pdf_doc, builder, page, clipToBox);
++ auto pdf_parser = PdfParser(pdf_doc, builder, page, cropBox);
+
+ // Set up approximation precision for parser. Used for converting Mesh Gradients into tiles.
+ if ( color_delta <= 0.0 ) {
+diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp
+index d24dc05dab..e32fa24b32 100644
+--- a/src/extension/internal/pdfinput/pdf-parser.cpp
++++ b/src/extension/internal/pdfinput/pdf-parser.cpp
+@@ -43,6 +43,7 @@
+ #include <poppler/GlobalParams.h>
+ #include <poppler/Lexer.h>
+ #include <poppler/Object.h>
++#include <poppler/OptionalContent.h>
+ #include <poppler/OutputDev.h>
+ #include <poppler/PDFDoc.h>
+ #include <poppler/Page.h>
+@@ -266,7 +267,7 @@ GfxPatch blankPatch()
+ //------------------------------------------------------------------------
+
+ PdfParser::PdfParser(std::shared_ptr<PDFDoc> pdf_doc, Inkscape::Extension::Internal::SvgBuilder *builderA, Page *page,
+- _POPPLER_CONST PDFRectangle *cropBox)
++ const std::optional<PDFRectangle> &cropBox)
+ : _pdf_doc(pdf_doc)
+ , xref(pdf_doc->getXRef())
+ , builder(builderA)
+@@ -307,8 +308,8 @@ PdfParser::PdfParser(std::shared_ptr<PDFDoc> pdf_doc, Inkscape::Extension::Inter
+ builder->setMargins(getRect(page->getTrimBox()) * scale,
+ getRect(page->getArtBox()) * scale,
+ getRect(page->getBleedBox()) * scale);
+- if (cropBox && getRect(cropBox) != page_box) {
+- builder->cropPage(getRect(cropBox) * scale);
++ if (cropBox && getRect(*cropBox) != page_box) {
++ builder->cropPage(getRect(*cropBox) * scale);
+ }
+
+ saveState();
+@@ -325,7 +326,7 @@ PdfParser::PdfParser(XRef *xrefA, Inkscape::Extension::Internal::SvgBuilder *bui
+ , printCommands(false)
+ , res(new GfxResources(xref, resDict, nullptr))
+ , // start the resource stack
+- state(new GfxState(72, 72, box, 0, false))
++ state(new _POPPLER_GFX_STATE(72, 72, *box, 0, false))
+ , fontChanged(gFalse)
+ , clip(clipNone)
+ , ignoreUndef(0)
+@@ -992,7 +993,7 @@ void PdfParser::opSetFillGray(Object args[], int /*numArgs*/)
+ state->setFillPattern(nullptr);
+ state->setFillColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceGrayColorSpace>()));
+ color.c[0] = dblToCol(args[0].getNum());
+- state->setFillColor(&color);
++ state->_POPPLER_SET_FILL_COLOR(color);
+ builder->updateStyle(state);
+ }
+
+@@ -1004,7 +1005,7 @@ void PdfParser::opSetStrokeGray(Object args[], int /*numArgs*/)
+ state->setStrokePattern(nullptr);
+ state->setStrokeColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique<GfxDeviceGrayColorSpace>()));
+ color.c[0] = dblToCol(args[0].getNum());
+- state->setStrokeColor(&color);
++ state->_POPPLER_SET_STROKE_COLOR(color);
+ builder->updateStyle(state);
+ }
+
+@@ -1019,7 +1020,7 @@ void PdfParser::opSetFillCMYKColor(Object args[], int /*numArgs*/)
+ for (i = 0; i < 4; ++i) {
+ color.c[i] = dblToCol(args[i].getNum());
+ }
+- state->setFillColor(&color);
++ state->_POPPLER_SET_FILL_COLOR(color);
+ builder->updateStyle(state);
+ }
+
+@@ -1033,7 +1034,7 @@ void PdfParser::opSetStrokeCMYKColor(Object args[], int /*numArgs*/)
+ for (int i = 0; i < 4; ++i) {
+ color.c[i] = dblToCol(args[i].getNum());
+ }
+- state->setStrokeColor(&color);
++ state->_POPPLER_SET_STROKE_COLOR(color);
+ builder->updateStyle(state);
+ }
+
+@@ -1047,7 +1048,7 @@ void PdfParser::opSetFillRGBColor(Object args[], int /*numArgs*/)
+ for (int i = 0; i < 3; ++i) {
+ color.c[i] = dblToCol(args[i].getNum());
+ }
+- state->setFillColor(&color);
++ state->_POPPLER_SET_FILL_COLOR(color);
+ builder->updateStyle(state);
+ }
+
+@@ -1060,7 +1061,7 @@ void PdfParser::opSetStrokeRGBColor(Object args[], int /*numArgs*/) {
+ for (int i = 0; i < 3; ++i) {
+ color.c[i] = dblToCol(args[i].getNum());
+ }
+- state->setStrokeColor(&color);
++ state->_POPPLER_SET_STROKE_COLOR(color);
+ builder->updateStyle(state);
+ }
+
+@@ -1076,7 +1077,7 @@ void PdfParser::opSetFillColorSpace(Object args[], int numArgs)
+ GfxColor color;
+ colorSpace->getDefaultColor(&color);
+ state->setFillColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(colorSpace));
+- state->setFillColor(&color);
++ state->_POPPLER_SET_FILL_COLOR(color);
+ builder->updateStyle(state);
+ } else {
+ error(errSyntaxError, getPos(), "Bad color space (fill)");
+@@ -1097,7 +1098,7 @@ void PdfParser::opSetStrokeColorSpace(Object args[], int numArgs)
+ GfxColor color;
+ colorSpace->getDefaultColor(&color);
+ state->setStrokeColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(colorSpace));
+- state->setStrokeColor(&color);
++ state->_POPPLER_SET_STROKE_COLOR(color);
+ builder->updateStyle(state);
+ } else {
+ error(errSyntaxError, getPos(), "Bad color space (stroke)");
+@@ -1117,7 +1118,7 @@ void PdfParser::opSetFillColor(Object args[], int numArgs) {
+ for (i = 0; i < numArgs; ++i) {
+ color.c[i] = dblToCol(args[i].getNum());
+ }
+- state->setFillColor(&color);
++ state->_POPPLER_SET_FILL_COLOR(color);
+ builder->updateStyle(state);
+ }
+
+@@ -1134,7 +1135,7 @@ void PdfParser::opSetStrokeColor(Object args[], int numArgs) {
+ for (i = 0; i < numArgs; ++i) {
+ color.c[i] = dblToCol(args[i].getNum());
+ }
+- state->setStrokeColor(&color);
++ state->_POPPLER_SET_STROKE_COLOR(color);
+ builder->updateStyle(state);
+ }
+
+@@ -1155,7 +1156,7 @@ void PdfParser::opSetFillColorN(Object args[], int numArgs) {
+ color.c[i] = dblToCol(args[i].getNum());
+ }
+ }
+- state->setFillColor(&color);
++ state->_POPPLER_SET_FILL_COLOR(color);
+ builder->updateStyle(state);
+ }
+ if (auto pattern = lookupPattern(&(args[numArgs - 1]), state)) {
+@@ -1174,7 +1175,7 @@ void PdfParser::opSetFillColorN(Object args[], int numArgs) {
+ color.c[i] = dblToCol(args[i].getNum());
+ }
+ }
+- state->setFillColor(&color);
++ state->_POPPLER_SET_FILL_COLOR(color);
+ builder->updateStyle(state);
+ }
+ }
+@@ -1198,7 +1199,7 @@ void PdfParser::opSetStrokeColorN(Object args[], int numArgs) {
+ color.c[i] = dblToCol(args[i].getNum());
+ }
+ }
+- state->setStrokeColor(&color);
++ state->_POPPLER_SET_STROKE_COLOR(color);
+ builder->updateStyle(state);
+ }
+ if (auto pattern = lookupPattern(&(args[numArgs - 1]), state)) {
+@@ -1217,7 +1218,7 @@ void PdfParser::opSetStrokeColorN(Object args[], int numArgs) {
+ color.c[i] = dblToCol(args[i].getNum());
+ }
+ }
+- state->setStrokeColor(&color);
++ state->_POPPLER_SET_STROKE_COLOR(color);
+ builder->updateStyle(state);
+ }
+ }
+@@ -1700,7 +1701,7 @@ void PdfParser::doFunctionShFill1(GfxFunctionShading *shading,
+
+ // use the center color
+ shading->getColor(xM, yM, &fillColor);
+- state->setFillColor(&fillColor);
++ state->_POPPLER_SET_FILL_COLOR(fillColor);
+
+ // fill the rectangle
+ state->moveTo(x0 * matrix[0] + y0 * matrix[2] + matrix[4],
+@@ -1799,7 +1800,7 @@ void PdfParser::gouraudFillTriangle(double x0, double y0, GfxColor *color0,
+ }
+ }
+ if (i == nComps || depth == maxDepths[pdfGouraudTriangleShading-1]) {
+- state->setFillColor(color0);
++ state->_POPPLER_SET_FILL_COLOR(*color0);
+ state->moveTo(x0, y0);
+ state->lineTo(x1, y1);
+ state->lineTo(x2, y2);
+@@ -1877,7 +1878,7 @@ void PdfParser::fillPatch(_POPPLER_CONST GfxPatch *patch, int nComps, int depth)
+ color.c[i] = GfxColorComp(patch->color[0][0].c[i]);
+ }
+ if (i == nComps || depth == maxDepths[pdfPatchMeshShading-1]) {
+- state->setFillColor(&color);
++ state->_POPPLER_SET_FILL_COLOR(color);
+ state->moveTo(patch->x[0][0], patch->y[0][0]);
+ state->curveTo(patch->x[0][1], patch->y[0][1],
+ patch->x[0][2], patch->y[0][2],
+diff --git a/src/extension/internal/pdfinput/pdf-parser.h b/src/extension/internal/pdfinput/pdf-parser.h
+index c136ebf1ef..58044fb518 100644
+--- a/src/extension/internal/pdfinput/pdf-parser.h
++++ b/src/extension/internal/pdfinput/pdf-parser.h
+@@ -112,8 +112,8 @@ struct OpHistoryEntry {
+ class PdfParser {
+ public:
+
+- // Constructor for regular output.
+- PdfParser(std::shared_ptr<PDFDoc> pdf_doc, SvgBuilder *builderA, Page *page, _POPPLER_CONST PDFRectangle *cropBox);
++ // Constructor for regular output.
++ PdfParser(std::shared_ptr<PDFDoc> pdf_doc, SvgBuilder *builderA, Page *page, const std::optional<PDFRectangle> &cropBox);
+ // Constructor for a sub-page object.
+ PdfParser(XRef *xrefA, SvgBuilder *builderA, Dict *resDict, _POPPLER_CONST PDFRectangle *box);
+
+diff --git a/src/extension/internal/pdfinput/pdf-utils.cpp b/src/extension/internal/pdfinput/pdf-utils.cpp
+index d126426b62..28c1678f2d 100644
+--- a/src/extension/internal/pdfinput/pdf-utils.cpp
++++ b/src/extension/internal/pdfinput/pdf-utils.cpp
+@@ -133,6 +133,11 @@ Geom::Rect getRect(_POPPLER_CONST PDFRectangle *box)
+ return Geom::Rect(box->x1, box->y1, box->x2, box->y2);
+ }
+
++Geom::Rect getRect(const PDFRectangle &box)
++{
++ return Geom::Rect(box.x1, box.y1, box.x2, box.y2);
++}
++
+ Geom::PathVector getPathV(GfxPath *path)
+ {
+ if (!path) {
+diff --git a/src/extension/internal/pdfinput/pdf-utils.h b/src/extension/internal/pdfinput/pdf-utils.h
+index 59efdeae27..d5b3020d61 100644
+--- a/src/extension/internal/pdfinput/pdf-utils.h
++++ b/src/extension/internal/pdfinput/pdf-utils.h
+@@ -59,6 +59,9 @@ private:
+ };
+
+ Geom::Rect getRect(_POPPLER_CONST PDFRectangle *box);
++Geom::Rect getRect(_POPPLER_CONST PDFRectangle &box);
+ Geom::PathVector getPathV(GfxPath *gPath);
++Geom::PathVector maybeIntersect(Geom::PathVector const &v1, Geom::PathVector const &v2,
++ FillRule fill1 = FillRule::fill_nonZero, FillRule fill2 = FillRule::fill_nonZero);
+
+ #endif /* PDF_UTILS_H */
+diff --git a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
+index 9d908a33e3..af132ad735 100644
+--- a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
++++ b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
+@@ -712,7 +712,7 @@ CairoType3Font *CairoType3Font::create(GfxFont *gfxFont, PDFDoc *doc, CairoFontE
+ codeToGID[i] = 0;
+ if (charProcs && (name = enc[i])) {
+ for (int j = 0; j < charProcs->getLength(); j++) {
+- if (strcmp(name, charProcs->getKey(j)) == 0) {
++ if (std::string(charProcs->getKey(j)).compare(name) == 0) {
+ codeToGID[i] = j;
+ }
+ }
+diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h
+index 7f299bd05a..bf42f54142 100644
+--- a/src/extension/internal/pdfinput/poppler-transition-api.h
++++ b/src/extension/internal/pdfinput/poppler-transition-api.h
+@@ -15,6 +15,22 @@
+ #include <glib/poppler-features.h>
+ #include <poppler/UTF.h>
+
++#if POPPLER_CHECK_VERSION(26, 6, 0)
++#define _POPPLER_GET_GRAY(color, gray) getGray(color, gray)
++#define _POPPLER_GET_RGB(color, rgb) getRGB(color, rgb)
++#define _POPPLER_GET_CMYK(color, cmyk) getCMYK(color, cmyk)
++#define _POPPLER_SET_FILL_COLOR(color) setFillColor(color)
++#define _POPPLER_SET_STROKE_COLOR(color) setStrokeColor(color)
++#define _POPPLER_GFX_STATE(h, v, Rect, rotateA, upsideDown) GfxState(h, v, Rect, rotateA, upsideDown)
++#else
++#define _POPPLER_GET_GRAY(color, gray) getGray(&color, gray)
++#define _POPPLER_GET_RGB(color, rgb) getRGB(&color, rgb)
++#define _POPPLER_GET_CMYK(color, cmyk) getCMYK(&color, cmyk)
++#define _POPPLER_SET_FILL_COLOR(color) setFillColor(&color)
++#define _POPPLER_SET_STROKE_COLOR(color) setStrokeColor(&color)
++#define _POPPLER_GFX_STATE(h, v, Rect, rotateA, upsideDown) GfxState(h, v, &Rect, rotateA, upsideDown)
++#endif
++
+ #if POPPLER_CHECK_VERSION(26, 2, 0)
+ #define _POPPLER_WMODE GfxFont::WritingMode
+ #define _POPPLER_WMODE_HORIZONTAL GfxFont::WritingMode::Horizontal
+diff --git a/src/extension/internal/pdfinput/poppler-utils.cpp b/src/extension/internal/pdfinput/poppler-utils.cpp
+index a65a5780ee..902736281a 100644
+--- a/src/extension/internal/pdfinput/poppler-utils.cpp
++++ b/src/extension/internal/pdfinput/poppler-utils.cpp
+@@ -195,15 +195,17 @@ void InkFontDict::hashFontObject1(const Object *obj, FNVHash *h)
+ hashFontObject1(&obj2, h);
+ }
+ break;
+- case objDict:
+- h->hash('d');
+- n = obj->dictGetLength();
+- h->hash((char *)&n, sizeof(int));
+- for (i = 0; i < n; ++i) {
+- p = obj->dictGetKey(i);
+- h->hash(p, (int)strlen(p));
+- const Object &obj2 = obj->dictGetValNF(i);
+- hashFontObject1(&obj2, h);
++ case objDict: {
++ h->hash('d');
++ auto objdict = obj->getDict();
++ n = objdict->getLength();
++ h->hash((char *)&n, sizeof(int));
++ for (i = 0; i < n; ++i) {
++ auto p = std::string(objdict->getKey(i));
++ h->hash(p.c_str(), p.length());
++ const Object &obj2 = objdict->getValNF(i);
++ hashFontObject1(&obj2, h);
++ }
+ }
+ break;
+ case objStream:
+diff --git a/src/extension/internal/pdfinput/svg-builder.cpp b/src/extension/internal/pdfinput/svg-builder.cpp
+index d854ed8a2e..c308561319 100644
+--- a/src/extension/internal/pdfinput/svg-builder.cpp
++++ b/src/extension/internal/pdfinput/svg-builder.cpp
+@@ -384,6 +384,7 @@ static gchar *svgConvertRGBToText(double r, double g, double b) {
+ return (gchar *)&tmp;
+ }
+
++// for poppler < 26.06.0
+ static std::string svgConvertGfxRGB(GfxRGB *color)
+ {
+ double r = (double)color->r / 65535.0;
+@@ -393,6 +394,14 @@ static std::string svgConvertGfxRGB(GfxRGB *color)
+ }
+
+ std::string SvgBuilder::convertGfxColor(const GfxColor *color, GfxColorSpace *space)
++{
++ if (!color) {
++ return "";
++ }
++ return convertGfxColor(*color, space);
++}
++
++std::string SvgBuilder::convertGfxColor(const GfxColor &color, GfxColorSpace *space)
+ {
+ std::string icc = "";
+ switch (space->getMode()) {
+@@ -412,14 +421,14 @@ std::string SvgBuilder::convertGfxColor(const GfxColor *color, GfxColorSpace *sp
+ }
+
+ GfxRGB rgb;
+- space->getRGB(color, &rgb);
++ space->_POPPLER_GET_RGB(color, &rgb);
+ auto rgb_color = svgConvertGfxRGB(&rgb);
+
+ if (!icc.empty()) {
+ Inkscape::CSSOStringStream icc_color;
+ icc_color << rgb_color << " icc-color(" << icc;
+ for (int i = 0; i < space->getNComps(); ++i) {
+- icc_color << ", " << colToDbl((*color).c[i]);
++ icc_color << ", " << colToDbl((color).c[i]);
+ }
+ icc_color << ");";
+ return icc_color.str();
+@@ -1204,7 +1213,7 @@ gchar *SvgBuilder::_createGradient(GfxShading *shading, const Geom::Affine pat_m
+ /**
+ * \brief Adds a stop with the given properties to the gradient's representation
+ */
+-void SvgBuilder::_addStopToGradient(Inkscape::XML::Node *gradient, double offset, GfxColor *color, GfxColorSpace *space,
++void SvgBuilder::_addStopToGradient(Inkscape::XML::Node *gradient, double offset, GfxColor &color, GfxColorSpace *space,
+ double opacity)
+ {
+ Inkscape::XML::Node *stop = _xml_doc->createElement("svg:stop");
+@@ -1214,7 +1223,7 @@ void SvgBuilder::_addStopToGradient(Inkscape::XML::Node *gradient, double offset
+ if (space->getMode() == csDeviceGray) {
+ // This is a transparency mask.
+ GfxRGB rgb;
+- space->getRGB(color, &rgb);
++ space->_POPPLER_GET_RGB(color, &rgb);
+ double gray = (double)rgb.r / 65535.0;
+ gray = CLAMP(gray, 0.0, 1.0);
+ os_opacity << gray;
+@@ -1255,8 +1264,8 @@ bool SvgBuilder::_addGradientStops(Inkscape::XML::Node *gradient, GfxShading *sh
+ if (!svgGetShadingColor(shading, 0.0, &stop1) || !svgGetShadingColor(shading, 1.0, &stop2)) {
+ return false;
+ } else {
+- _addStopToGradient(gradient, 0.0, &stop1, space, 1.0);
+- _addStopToGradient(gradient, 1.0, &stop2, space, 1.0);
++ _addStopToGradient(gradient, 0.0, stop1, space, 1.0);
++ _addStopToGradient(gradient, 1.0, stop2, space, 1.0);
+ }
+ } else if (type == _POPPLER_FUNCTION_TYPE_STITCHING) {
+ auto stitchingFunc = static_cast<_POPPLER_CONST StitchingFunction*>(func);
+@@ -1269,7 +1278,7 @@ bool SvgBuilder::_addGradientStops(Inkscape::XML::Node *gradient, GfxShading *sh
+ // Add stops from all the stitched functions
+ GfxColor prev_color, color;
+ svgGetShadingColor(shading, bounds[0], &prev_color);
+- _addStopToGradient(gradient, bounds[0], &prev_color, space, 1.0);
++ _addStopToGradient(gradient, bounds[0], prev_color, space, 1.0);
+ for ( int i = 0 ; i < num_funcs ; i++ ) {
+ svgGetShadingColor(shading, bounds[i + 1], &color);
+ // Add stops
+@@ -1279,14 +1288,14 @@ bool SvgBuilder::_addGradientStops(Inkscape::XML::Node *gradient, GfxShading *sh
+ expE = (bounds[i + 1] - bounds[i])/expE; // approximate exponential as a single straight line at x=1
+ if (encode[2*i] == 0) { // normal sequence
+ auto offset = (bounds[i + 1] - expE) / max_bound;
+- _addStopToGradient(gradient, offset, &prev_color, space, 1.0);
++ _addStopToGradient(gradient, offset, prev_color, space, 1.0);
+ } else { // reflected sequence
+ auto offset = (bounds[i] + expE) / max_bound;
+- _addStopToGradient(gradient, offset, &color, space, 1.0);
++ _addStopToGradient(gradient, offset, color, space, 1.0);
+ }
+ }
+ }
+- _addStopToGradient(gradient, bounds[i + 1] / max_bound, &color, space, 1.0);
++ _addStopToGradient(gradient, bounds[i + 1] / max_bound, color, space, 1.0);
+ prev_color = color;
+ }
+ } else { // Unsupported function type
+diff --git a/src/extension/internal/pdfinput/svg-builder.h b/src/extension/internal/pdfinput/svg-builder.h
+index b814a67807..4041c95a9f 100644
+--- a/src/extension/internal/pdfinput/svg-builder.h
++++ b/src/extension/internal/pdfinput/svg-builder.h
+@@ -186,7 +186,7 @@ private:
+ // Pattern creation
+ gchar *_createPattern(GfxPattern *pattern, GfxState *state, bool is_stroke=false);
+ gchar *_createGradient(GfxShading *shading, const Geom::Affine pat_matrix, bool for_shading = false);
+- void _addStopToGradient(Inkscape::XML::Node *gradient, double offset, GfxColor *color, GfxColorSpace *space,
++ void _addStopToGradient(Inkscape::XML::Node *gradient, double offset, GfxColor &color, GfxColorSpace *space,
+ double opacity);
+ bool _addGradientStops(Inkscape::XML::Node *gradient, GfxShading *shading,
+ _POPPLER_CONST Function *func);
+@@ -239,6 +239,7 @@ private:
+ static bool _attrEqual(Inkscape::XML::Node *a, Inkscape::XML::Node *b, char const *attr);
+
+ // Colors
++ std::string convertGfxColor(const GfxColor &color, GfxColorSpace *space);
+ std::string convertGfxColor(const GfxColor *color, GfxColorSpace *space);
+ std::string _getColorProfile(cmsHPROFILE hp);
+
+--
+2.54.0
diff --git a/media-gfx/inkscape/files/inkscape-1.4.4-poppler-26.07.patch b/media-gfx/inkscape/files/inkscape-1.4.4-poppler-26.07.patch
new file mode 100644
index 000000000000..b5b600e637d2
--- /dev/null
+++ b/media-gfx/inkscape/files/inkscape-1.4.4-poppler-26.07.patch
@@ -0,0 +1,335 @@
+Source:
+https://build.opensuse.org/projects/graphics/packages/inkscape/files/fix_build_with_poppler_26.07.patch
+
+From eebf0342cbfcd23c6cba6053dd6ab7306d0de065 Mon Sep 17 00:00:00 2001
+From: KrIr17 <elendil.krir17@gmail.com>
+Date: Sat, 4 Jul 2026 14:07:44 +0200
+Subject: [PATCH] Fix building with Poppler 26.07.0
+
+1. `arrayGetfoo()` to `getArray()->getFoo()` [1]
+2. `streamGetFoo()` to `getStream()->getFoo()` [2]
+3. indextolabel now requires an `std::string *` and not `GooString *`
+ introduced _POPPLER_STRING_26_7 that changes accordingly.
+
+Relevant poppler commits:
+
+[1] [Remove Object::arrayGetNF](https://gitlab.freedesktop.org/poppler/poppler/-/commit/d9ffc4c29d1975a5c81d6bac9d8a1b6dc5aa1f50): Technically only arrayGetNF was removed, but perusing the commit shows that all `arrayGetFoo` are being changed. I assume they are slated for removal in future releases.
+
+[2] [Remove Object::streamGetDict](gitlab.freedesktop.org/poppler/poppler/-/commit/87edb5a5c40e67e782e54a14a2251547b4acdfb5)
+
+[3] [Use std::string instead of GooString for label](https://gitlab.freedesktop.org/poppler/poppler/-/commit/9e34004aae04064f1b798b5e711e13d0dddacf9e)
+
+(cherry picked from commit 9262f83aff7d8a6cadcb42446f9b943a561910cf)
+---
+ src/extension/internal/pdfinput/pdf-input.cpp | 5 +-
+ .../internal/pdfinput/pdf-parser.cpp | 50 +++++++++----------
+ .../pdfinput/poppler-transition-api.h | 6 +++
+ .../internal/pdfinput/poppler-utils.cpp | 29 ++++++-----
+ .../internal/pdfinput/poppler-utils.h | 1 +
+ 5 files changed, 52 insertions(+), 39 deletions(-)
+
+diff --git a/src/extension/internal/pdfinput/pdf-input.cpp b/src/extension/internal/pdfinput/pdf-input.cpp
+index 441871bb10..3507ce4173 100644
+--- a/src/extension/internal/pdfinput/pdf-input.cpp
++++ b/src/extension/internal/pdfinput/pdf-input.cpp
+@@ -855,9 +855,10 @@ PdfInput::add_builder_page(std::shared_ptr<PDFDoc>pdf_doc, SvgBuilder *builder,
+
+ // Parse the annotations
+ if (auto annots = page->getAnnotsObject(); annots.isArray()) {
+- auto const size = annots.arrayGetLength();
++ auto* annotsArray = annots.getArray();
++ auto const size = annotsArray->getLength();
+ for (int i = 0; i < size; i++) {
+- pdf_parser.build_annots(annots.arrayGet(i), page_num);
++ pdf_parser.build_annots(annotsArray->get(i), page_num);
+ }
+ }
+ }
+diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp
+index e32fa24b32..bf8daaac1b 100644
+--- a/src/extension/internal/pdfinput/pdf-parser.cpp
++++ b/src/extension/internal/pdfinput/pdf-parser.cpp
+@@ -293,8 +293,8 @@ PdfParser::PdfParser(std::shared_ptr<PDFDoc> pdf_doc, Inkscape::Extension::Inter
+ if (page) {
+ // Increment the page building here and set page label
+ Catalog *catalog = pdf_doc->getCatalog();
+- GooString *label = new GooString("");
+- catalog->indexToLabel(page->getNum() - 1, label);
++ _POPPLER_STRING_26_7 label;
++ catalog->indexToLabel(page->getNum() - 1, &label);
+ builder->pushPage(getString(label), state);
+ }
+
+@@ -370,8 +370,8 @@ void PdfParser::parse(Object *obj, GBool topLevel) {
+ Object obj2;
+
+ if (obj->isArray()) {
+- for (int i = 0; i < obj->arrayGetLength(); ++i) {
+- _POPPLER_CALL_ARGS(obj2, obj->arrayGet, i);
++ for (int i = 0; i < obj->getArray()->getLength(); ++i) {
++ _POPPLER_CALL_ARGS(obj2, obj->getArray()->get, i);
+ if (!obj2.isStream()) {
+ error(errInternal, -1, "Weird page contents");
+ _POPPLER_FREE(obj2);
+@@ -808,8 +808,8 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/)
+ for (int &i : backdropColor.c) {
+ i = 0;
+ }
+- for (int i = 0; i < obj3.arrayGetLength() && i < gfxColorMaxComps; ++i) {
+- _POPPLER_CALL_ARGS(obj4, obj3.arrayGet, i);
++ for (int i = 0; i < obj3.getArray()->getLength() && i < gfxColorMaxComps; ++i) {
++ _POPPLER_CALL_ARGS(obj4, obj3.getArray()->get, i);
+ if (obj4.isNum()) {
+ backdropColor.c[i] = dblToCol(obj4.getNum());
+ }
+@@ -818,7 +818,7 @@ void PdfParser::opSetExtGState(Object args[], int /*numArgs*/)
+ }
+ _POPPLER_FREE(obj3);
+ if (_POPPLER_CALL_ARGS_DEREF(obj3, obj2.dictLookup, "G").isStream()) {
+- if (_POPPLER_CALL_ARGS_DEREF(obj4, obj3.streamGetDict()->lookup, "Group").isDict()) {
++ if (_POPPLER_CALL_ARGS_DEREF(obj4, obj3.getStream()->getDict()->lookup, "Group").isDict()) {
+ std::unique_ptr<GfxColorSpace> blendingColorSpace;
+ GBool isolated = gFalse;
+ GBool knockout = gFalse;
+@@ -881,7 +881,7 @@ void PdfParser::doSoftMask(Object *str, GBool alpha,
+ }
+
+ // get stream dict
+- dict = str->streamGetDict();
++ dict = str->getStream()->getDict();
+
+ // check form type
+ _POPPLER_CALL_ARGS(obj1, dict->lookup, "FormType");
+@@ -898,7 +898,7 @@ void PdfParser::doSoftMask(Object *str, GBool alpha,
+ return;
+ }
+ for (i = 0; i < 4; ++i) {
+- _POPPLER_CALL_ARGS(obj2, obj1.arrayGet, i);
++ _POPPLER_CALL_ARGS(obj2, obj1.getArray()->get, i);
+ bbox[i] = obj2.getNum();
+ _POPPLER_FREE(obj2);
+ }
+@@ -908,7 +908,7 @@ void PdfParser::doSoftMask(Object *str, GBool alpha,
+ _POPPLER_CALL_ARGS(obj1, dict->lookup, "Matrix");
+ if (obj1.isArray()) {
+ for (i = 0; i < 6; ++i) {
+- _POPPLER_CALL_ARGS(obj2, obj1.arrayGet, i);
++ _POPPLER_CALL_ARGS(obj2, obj1.getArray()->get, i);
+ m[i] = obj2.getNum();
+ _POPPLER_FREE(obj2);
+ }
+@@ -2378,7 +2378,7 @@ void PdfParser::opXObject(Object args[], int /*numArgs*/)
+ }
+
+ //add layer at root if xObject has type OCG
+- _POPPLER_CALL_ARGS(obj2, obj1.streamGetDict()->lookup, "OC");
++ _POPPLER_CALL_ARGS(obj2, obj1.getStream()->getDict()->lookup, "OC");
+ if(obj2.isDict()){
+ auto type_dict = obj2.getDict();
+ if (type_dict->lookup("Type").isName("OCG")) {
+@@ -2396,7 +2396,7 @@ void PdfParser::opXObject(Object args[], int /*numArgs*/)
+ }
+ }
+
+- _POPPLER_CALL_ARGS(obj2, obj1.streamGetDict()->lookup, "Subtype");
++ _POPPLER_CALL_ARGS(obj2, obj1.getStream()->getDict()->lookup, "Subtype");
+ if (obj2.isName(const_cast<char*>("Image"))) {
+ _POPPLER_CALL_ARGS(refObj, res->lookupXObjectNF, name);
+ doImage(&refObj, obj1.getStream(), gFalse);
+@@ -2404,7 +2404,7 @@ void PdfParser::opXObject(Object args[], int /*numArgs*/)
+ } else if (obj2.isName(const_cast<char*>("Form"))) {
+ doForm(&obj1);
+ } else if (obj2.isName(const_cast<char*>("PS"))) {
+- _POPPLER_CALL_ARGS(obj3, obj1.streamGetDict()->lookup, "Level1");
++ _POPPLER_CALL_ARGS(obj3, obj1.getStream()->getDict()->lookup, "Level1");
+ } else if (obj2.isName()) {
+ error(errSyntaxError, getPos(), "Unknown XObject subtype '{0:s}'", obj2.getName());
+ } else {
+@@ -2535,7 +2535,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
+ _POPPLER_CALL_ARGS(obj1, dict->lookup, "D");
+ }
+ if (obj1.isArray()) {
+- _POPPLER_CALL_ARGS(obj2, obj1.arrayGet, 0);
++ _POPPLER_CALL_ARGS(obj2, obj1.getArray()->get, 0);
+ if (obj2.isInt() && obj2.getInt() == 1) {
+ invert = gTrue;
+ }
+@@ -2597,7 +2597,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
+ goto err1;
+ }
+ maskStr = smaskObj.getStream();
+- maskDict = smaskObj.streamGetDict();
++ maskDict = smaskObj.getStream()->getDict();
+ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "Width");
+ if (obj1.isNull()) {
+ _POPPLER_FREE(obj1);
+@@ -2663,8 +2663,8 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
+ } else if (maskObj.isArray()) {
+ // color key mask
+ int i;
+- for (i = 0; i < maskObj.arrayGetLength() && i < 2*gfxColorMaxComps; ++i) {
+- _POPPLER_CALL_ARGS(obj1, maskObj.arrayGet, i);
++ for (i = 0; i < maskObj.getArray()->getLength() && i < 2*gfxColorMaxComps; ++i) {
++ _POPPLER_CALL_ARGS(obj1, maskObj.getArray()->get, i);
+ maskColors[i] = obj1.getInt();
+ _POPPLER_FREE(obj1);
+ }
+@@ -2675,7 +2675,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
+ goto err1;
+ }
+ maskStr = maskObj.getStream();
+- maskDict = maskObj.streamGetDict();
++ maskDict = maskObj.getStream()->getDict();
+ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "Width");
+ if (obj1.isNull()) {
+ _POPPLER_FREE(obj1);
+@@ -2722,7 +2722,7 @@ void PdfParser::doImage(Object * /*ref*/, Stream *str, GBool inlineImg)
+ _POPPLER_CALL_ARGS(obj1, maskDict->lookup, "D");
+ }
+ if (obj1.isArray()) {
+- _POPPLER_CALL_ARGS(obj2, obj1.arrayGet, 0);
++ _POPPLER_CALL_ARGS(obj2, obj1.getArray()->get, 0);
+ if (obj2.isInt() && obj2.getInt() == 1) {
+ maskInvert = gTrue;
+ }
+@@ -2775,7 +2775,7 @@ void PdfParser::doForm(Object *str, double *offset)
+ }
+
+ // get stream dict
+- dict = str->streamGetDict();
++ dict = str->getStream()->getDict();
+
+ // check form type
+ _POPPLER_CALL_ARGS(obj1, dict->lookup, "FormType");
+@@ -2792,7 +2792,7 @@ void PdfParser::doForm(Object *str, double *offset)
+ return;
+ }
+ for (i = 0; i < 4; ++i) {
+- _POPPLER_CALL_ARGS(obj1, bboxObj.arrayGet, i);
++ _POPPLER_CALL_ARGS(obj1, bboxObj.getArray()->get, i);
+ bbox[i] = obj1.getNum();
+ _POPPLER_FREE(obj1);
+ }
+@@ -2802,7 +2802,7 @@ void PdfParser::doForm(Object *str, double *offset)
+ _POPPLER_CALL_ARGS(matrixObj, dict->lookup, "Matrix");
+ if (matrixObj.isArray()) {
+ for (i = 0; i < 6; ++i) {
+- _POPPLER_CALL_ARGS(obj1, matrixObj.arrayGet, i);
++ _POPPLER_CALL_ARGS(obj1, matrixObj.getArray()->get, i);
+ m[i] = obj1.getNum();
+ _POPPLER_FREE(obj1);
+ }
+@@ -3194,10 +3194,10 @@ void PdfParser::loadColorProfile()
+ return;
+
+ Object outputIntents = catDict.dictLookup("OutputIntents");
+- if (!outputIntents.isArray() || outputIntents.arrayGetLength() != 1)
++ if (!outputIntents.isArray() || outputIntents.getArray()->getLength() != 1)
+ return;
+
+- Object firstElement = outputIntents.arrayGet(0);
++ Object firstElement = outputIntents.getArray()->get(0);
+ if (!firstElement.isDict())
+ return;
+
+@@ -3245,7 +3245,7 @@ void PdfParser::build_annots(const Object &annot, int page_num)
+ _POPPLER_CALL_ARGS(Rect_obj, annot_dict->lookup, "Rect");
+ if (Rect_obj.isArray()) {
+ for (int i = 0; i < 2; i++) {
+- _POPPLER_CALL_ARGS(xy_obj, Rect_obj.arrayGet, i);
++ _POPPLER_CALL_ARGS(xy_obj, Rect_obj.getArray()->get, i);
+ offset[i] = xy_obj.getNum();
+ }
+ doForm(&first_state_obj, offset);
+diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h
+index bf42f54142..058c91f379 100644
+--- a/src/extension/internal/pdfinput/poppler-transition-api.h
++++ b/src/extension/internal/pdfinput/poppler-transition-api.h
+@@ -15,6 +15,12 @@
+ #include <glib/poppler-features.h>
+ #include <poppler/UTF.h>
+
++#if POPPLER_CHECK_VERSION(26, 7, 0)
++#define _POPPLER_STRING_26_7 std::string
++#else
++#define _POPPLER_STRING_26_7 GooString
++#endif
++
+ #if POPPLER_CHECK_VERSION(26, 6, 0)
+ #define _POPPLER_GET_GRAY(color, gray) getGray(color, gray)
+ #define _POPPLER_GET_RGB(color, rgb) getRGB(color, rgb)
+diff --git a/src/extension/internal/pdfinput/poppler-utils.cpp b/src/extension/internal/pdfinput/poppler-utils.cpp
+index 902736281a..d084d9218a 100644
+--- a/src/extension/internal/pdfinput/poppler-utils.cpp
++++ b/src/extension/internal/pdfinput/poppler-utils.cpp
+@@ -186,15 +186,16 @@ void InkFontDict::hashFontObject1(const Object *obj, FNVHash *h)
+ case objNull:
+ h->hash('z');
+ break;
+- case objArray:
+- h->hash('a');
+- n = obj->arrayGetLength();
+- h->hash((char *)&n, sizeof(int));
+- for (i = 0; i < n; ++i) {
+- const Object &obj2 = obj->arrayGetNF(i);
+- hashFontObject1(&obj2, h);
+- }
+- break;
++ case objArray: {
++ h->hash('a');
++ Array * objArray = obj->getArray();
++ n = objArray->getLength();
++ h->hash((char *)&n, sizeof(int));
++ for (i = 0; i < n; ++i) {
++ const Object &obj2 = objArray->getNF(i);
++ hashFontObject1(&obj2, h);
++ }
++ } break;
+ case objDict: {
+ h->hash('d');
+ auto objdict = obj->getDict();
+@@ -206,8 +207,7 @@ void InkFontDict::hashFontObject1(const Object *obj, FNVHash *h)
+ const Object &obj2 = objdict->getValNF(i);
+ hashFontObject1(&obj2, h);
+ }
+- }
+- break;
++ } break;
+ case objStream:
+ // this should never happen - streams must be indirect refs
+ break;
+@@ -545,7 +545,7 @@ void _getFontsRecursive(std::shared_ptr<PDFDoc> pdf_doc, Dict *resources, const
+ continue;
+
+ Ref resourcesRef;
+- const Object resObj = obj2.streamGetDict()->lookup("Resources", &resourcesRef);
++ const Object resObj = obj2.getStream()->getDict()->lookup("Resources", &resourcesRef);
+ if (resourcesRef != Ref::INVALID() && !visitedObjects.insert(resourcesRef.num).second)
+ continue;
+
+@@ -610,6 +610,11 @@ std::string getString(const GooString *value)
+ return "";
+ }
+
++std::string getString(const GooString &value)
++{
++ return getString(value.toStr());
++}
++
+ /**
+ * Convert PDF strings, which can be formatted as UTF8, UTF16BE or UTF16LE into
+ * a predictable UTF8 string consistant with svg requirements.
+diff --git a/src/extension/internal/pdfinput/poppler-utils.h b/src/extension/internal/pdfinput/poppler-utils.h
+index 13123d79a9..2b1978bf0f 100644
+--- a/src/extension/internal/pdfinput/poppler-utils.h
++++ b/src/extension/internal/pdfinput/poppler-utils.h
+@@ -86,6 +86,7 @@ std::string getDictString(Dict *dict, const char *key);
+ std::string getString(const std::string &value);
+ std::string getString(const std::unique_ptr<GooString> &value);
+ std::string getString(const GooString *value);
++std::string getString(const GooString &value);
+ std::string validateString(std::string const &in);
+
+ // Replacate poppler FontDict
+--
+2.54.0
diff --git a/media-gfx/inkscape/files/inkscape-1.4.4-poppler-26.08.patch b/media-gfx/inkscape/files/inkscape-1.4.4-poppler-26.08.patch
new file mode 100644
index 000000000000..2d5d4f0743f5
--- /dev/null
+++ b/media-gfx/inkscape/files/inkscape-1.4.4-poppler-26.08.patch
@@ -0,0 +1,51 @@
+From 6018a00d7d885e98d66a6cfa264cacacac966507 Mon Sep 17 00:00:00 2001
+From: brandon wright <33914549+bwrightkc@users.noreply.github.com>
+Date: Sun, 30 Aug 2026 08:16:45 -0500
+Subject: [PATCH] Fix building with Poppler 26.08.0, which now returns
+ std::optional<std::string> from getDocInfoStringEntry, by adding a matching
+ getString() overload.
+
+---
+ src/extension/internal/pdfinput/poppler-utils.cpp | 5 +++++
+ src/extension/internal/pdfinput/poppler-utils.h | 2 ++
+ 2 files changed, 7 insertions(+)
+
+diff --git a/src/extension/internal/pdfinput/poppler-utils.cpp b/src/extension/internal/pdfinput/poppler-utils.cpp
+index 0a82574209..80b25af86f 100644
+--- a/src/extension/internal/pdfinput/poppler-utils.cpp
++++ b/src/extension/internal/pdfinput/poppler-utils.cpp
+@@ -648,6 +648,11 @@ std::string getDictString(Dict *dict, const char *key)
+ return getString(obj.getString());
+ }
+
++std::string getString(const std::optional<std::string> &value)
++{
++ return value ? getString(*value) : "";
++}
++
+ std::string getString(const std::unique_ptr<GooString> &value)
+ {
+ return getString(value.get());
+diff --git a/src/extension/internal/pdfinput/poppler-utils.h b/src/extension/internal/pdfinput/poppler-utils.h
+index 27675b758e..be1103da26 100644
+--- a/src/extension/internal/pdfinput/poppler-utils.h
++++ b/src/extension/internal/pdfinput/poppler-utils.h
+@@ -16,6 +16,7 @@
+ #include <array>
+ #include <map>
+ #include <memory>
++#include <optional>
+ #include <string>
+ #include <unordered_set>
+ #include <vector>
+@@ -84,6 +85,7 @@ FontList getPdfFonts(std::shared_ptr<PDFDoc> pdf_doc);
+ std::string getNameWithoutSubsetTag(std::string name);
+ std::string getDictString(Dict *dict, const char *key);
+ std::string getString(const std::string &value);
++std::string getString(const std::optional<std::string> &value);
+ std::string getString(const std::unique_ptr<GooString> &value);
+ std::string getString(const GooString *value);
+ std::string getString(const GooString &value);
+--
+GitLab
+
diff --git a/media-gfx/inkscape/inkscape-1.4.4-r1.ebuild b/media-gfx/inkscape/inkscape-1.4.4-r1.ebuild
new file mode 100644
index 000000000000..f801799b7dbf
--- /dev/null
+++ b/media-gfx/inkscape/inkscape-1.4.4-r1.ebuild
@@ -0,0 +1,217 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Remember to check the release notes for a 'Important Changes for Packagers'
+# section, e.g. https://inkscape.org/doc/release_notes/1.4/Inkscape_1.4.html#Important_Changes_for_Packagers.
+
+PYTHON_COMPAT=( python3_{13..14} )
+PYTHON_REQ_USE="xml(+)"
+
+inherit cmake flag-o-matic xdg toolchain-funcs python-single-r1
+
+MY_P="${P/_/}"
+DESCRIPTION="SVG based generic vector-drawing program"
+HOMEPAGE="https://inkscape.org/ https://gitlab.com/inkscape/inkscape/"
+
+if [[ ${PV} = 9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.com/inkscape/inkscape.git"
+else
+ SRC_URI="https://media.inkscape.org/dl/resources/file/${MY_P}.tar.xz"
+ KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
+fi
+
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="GPL-2 LGPL-2.1"
+SLOT="0"
+IUSE="cdr dia exif graphicsmagick imagemagick inkjar jpeg openmp postscript readline sourceview spell svg2 test visio wayland wpg X"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+# Lots of test failures which need investigating, bug #871621
+RESTRICT="!test? ( test ) test"
+
+BDEPEND="
+ dev-util/glib-utils
+ >=sys-devel/gettext-0.17
+ virtual/pkgconfig
+ test? ( virtual/imagemagick-tools )
+"
+COMMON_DEPEND="${PYTHON_DEPS}
+ >=app-text/poppler-0.57.0:=[cairo,lcms]
+ >=dev-cpp/cairomm-1.12:0
+ >=dev-cpp/glibmm-2.58:2
+ dev-cpp/gtkmm:3.0
+ >=dev-cpp/pangomm-2.40:1.4
+ >=dev-libs/boehm-gc-7.1:=
+ dev-libs/boost:=[stacktrace(-)]
+ dev-libs/double-conversion:=
+ >=dev-libs/glib-2.41
+ >=dev-libs/libsigc++-2.8:2
+ >=dev-libs/libxml2-2.7.4:=
+ >=dev-libs/libxslt-1.1.25
+ dev-libs/popt
+ media-gfx/potrace
+ media-libs/libepoxy
+ media-libs/fontconfig
+ media-libs/freetype:2
+ media-libs/lcms:2
+ media-libs/libpng:0=
+ sci-libs/gsl:=
+ >=x11-libs/pango-1.44
+ x11-libs/gtk+:3[X?,wayland?]
+ X? ( x11-libs/libX11 )
+ $(python_gen_cond_dep '
+ dev-python/appdirs[${PYTHON_USEDEP}]
+ dev-python/cachecontrol[${PYTHON_USEDEP}]
+ dev-python/cssselect[${PYTHON_USEDEP}]
+ dev-python/filelock[${PYTHON_USEDEP}]
+ dev-python/lockfile[${PYTHON_USEDEP}]
+ dev-python/lxml[${PYTHON_USEDEP}]
+ dev-python/pillow[jpeg?,tiff,webp,${PYTHON_USEDEP}]
+ dev-python/tinycss2[${PYTHON_USEDEP}]
+ media-gfx/scour[${PYTHON_USEDEP}]
+ ')
+ cdr? (
+ app-text/libwpg:0.3
+ dev-libs/librevenge
+ media-libs/libcdr
+ )
+ exif? ( media-libs/libexif )
+ imagemagick? (
+ !graphicsmagick? ( media-gfx/imagemagick:=[cxx] )
+ graphicsmagick? ( media-gfx/graphicsmagick:=[cxx] )
+ )
+ jpeg? ( media-libs/libjpeg-turbo:= )
+ readline? ( sys-libs/readline:= )
+ sourceview? ( x11-libs/gtksourceview:4 )
+ spell? ( app-text/gspell:= )
+ visio? (
+ app-text/libwpg:0.3
+ dev-libs/librevenge
+ media-libs/libvisio
+ )
+ wpg? (
+ app-text/libwpg:0.3
+ dev-libs/librevenge
+ )
+"
+# These only use executables provided by these packages
+# See share/extensions for more details. inkscape can tell you to
+# install these so we could of course just not depend on those and rely
+# on that.
+RDEPEND="${COMMON_DEPEND}
+ $(python_gen_cond_dep '
+ dev-python/numpy[${PYTHON_USEDEP}]
+ ')
+ dia? ( app-office/dia )
+ postscript? ( app-text/ghostscript-gpl )
+"
+DEPEND="${COMMON_DEPEND}
+ test? ( dev-cpp/gtest )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-1.4.3-libcroco-cmake-minreqver-3.12.patch # bug 965915
+ "${FILESDIR}"/${PN}-1.4.4-respect-EPYTHON.patch # bug 924747
+ "${FILESDIR}"/${PN}-1.4.4-poppler-26.05.patch # bug 974462
+ "${FILESDIR}"/${PN}-1.4.4-poppler-26.0{6,7}.patch # thx openSUSE
+ "${FILESDIR}"/${PN}-1.4.4-poppler-26.08.patch # in inkscape git master
+)
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
+}
+
+pkg_setup() {
+ [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
+ python-single-r1_pkg_setup
+}
+
+src_unpack() {
+ if [[ ${PV} = 9999* ]]; then
+ git-r3_src_unpack
+ else
+ default
+ fi
+ [[ -d "${S}" ]] || mv -v "${WORKDIR}/${P/_/-}_202"?-??-* "${S}" || die
+}
+
+src_prepare() {
+ rm -vr src/3rdparty/2geom/tests/dependent-project || die # unused, causing bug #964016
+ cmake_src_prepare
+ # bug #924747
+ sed -i -e "s:@GENTOO_PYTHON_INTERP@:${EPYTHON}:" src/extension/implementation/script.cpp || die
+ sed -i "/install.*COPYING/d" CMakeScripts/ConfigCPack.cmake || die
+}
+
+src_configure() {
+ # ODR violation (https://gitlab.com/inkscape/lib2geom/-/issues/71, bug #859628)
+ filter-lto
+ # Aliasing unsafe (bug #310393)
+ append-flags -fno-strict-aliasing
+
+ use wayland || append-flags -DGENTOO_GTK_HIDE_WAYLAND
+
+ local mycmakeargs=(
+ # -DWITH_LPETOOL # Compile with LPE Tool and experimental LPEs enabled
+ -DWITH_NLS=ON
+ -DENABLE_POPPLER=ON
+ -DENABLE_POPPLER_CAIRO=ON
+ -DWITH_PROFILING=OFF
+ -DWITH_INTERNAL_2GEOM=ON
+ -DBUILD_TESTING=$(usex test)
+ -DWITH_LIBCDR=$(usex cdr)
+ -DWITH_IMAGE_MAGICK=$(usex imagemagick $(usex !graphicsmagick)) # requires ImageMagick 6, only IM must be enabled
+ -DWITH_GRAPHICS_MAGICK=$(usex graphicsmagick $(usex imagemagick)) # both must be enabled to use GraphicsMagick
+ -DWITH_GNU_READLINE=$(usex readline)
+ -DWITH_GSPELL=$(usex spell)
+ -DWITH_JEMALLOC=OFF
+ -DENABLE_LCMS=ON
+ -DWITH_OPENMP=$(usex openmp)
+ -DBUILD_SHARED_LIBS=ON
+ -DWITH_GSOURCEVIEW=$(usex sourceview)
+ -DWITH_SVG2=$(usex svg2)
+ -DWITH_LIBVISIO=$(usex visio)
+ -DWITH_LIBWPG=$(usex wpg)
+ -DWITH_X11=$(usex X)
+ )
+
+ cmake_src_configure
+}
+
+src_test() {
+ CMAKE_SKIP_TESTS=(
+ # render_text*: needs patched Cairo / maybe upstream changes
+ # not yet in a release.
+ # test_lpe/test_lpe64: precision differences b/c of new GCC?
+ # cli_export-png-color-mode-gray-8_png_check_output: ditto?
+ render_test-use
+ render_test-glyph-y-pos
+ render_text-glyphs-combining
+ render_text-glyphs-vertical
+ render_test-rtl-vertical
+ test_lpe
+ test_lpe64
+ cli_export-png-color-mode-gray-8_png_check_output
+ )
+
+ # bug #871621
+ cmake_src_compile tests
+ cmake_src_test -j1
+}
+
+src_install() {
+ cmake_src_install
+
+ find "${ED}" -type f -name "*.la" -delete || die
+ find "${ED}"/usr/share/man -type f -maxdepth 3 -name '*.bz2' -exec bzip2 -d {} \; || die
+ find "${ED}"/usr/share/man -type f -maxdepth 3 -name '*.gz' -exec gzip -d {} \; || die
+
+ local extdir="${ED}"/usr/share/${PN}/extensions
+ if [[ -e "${extdir}" ]] && [[ -n $(find "${extdir}" -mindepth 1) ]]; then
+ python_fix_shebang "${ED}"/usr/share/${PN}/extensions
+ python_optimize "${ED}"/usr/share/${PN}/extensions
+ fi
+}
diff --git a/media-gfx/jp2a/jp2a-1.3.2.ebuild b/media-gfx/jp2a/jp2a-1.3.2.ebuild
index c65f61e28671..3d4e919144ab 100644
--- a/media-gfx/jp2a/jp2a-1.3.2.ebuild
+++ b/media-gfx/jp2a/jp2a-1.3.2.ebuild
@@ -11,7 +11,7 @@ SRC_URI="https://github.com/Talinx/jp2a/releases/download/v${PV}/${P}.tar.bz2"
LICENSE="GPL-2"
SLOT="0"
-KEYWORDS="~amd64 ~ppc ppc64 ~sparc ~x86 ~arm64-macos ~x64-macos ~x64-solaris"
+KEYWORDS="amd64 ppc ppc64 ~sparc x86 ~arm64-macos ~x64-macos ~x64-solaris"
IUSE="curl"
RDEPEND="media-libs/libexif
diff --git a/media-gfx/metapixel/metapixel-1.0.2-r3.ebuild b/media-gfx/metapixel/metapixel-1.0.2-r3.ebuild
index 34eb664d8696..136b7667913e 100644
--- a/media-gfx/metapixel/metapixel-1.0.2-r3.ebuild
+++ b/media-gfx/metapixel/metapixel-1.0.2-r3.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -10,7 +10,7 @@ SRC_URI="https://www.complang.tuwien.ac.at/schani/${PN}/files/${P}.tar.gz"
LICENSE="GPL-2"
SLOT="0"
-KEYWORDS="~amd64 ~x86"
+KEYWORDS="amd64 x86"
RDEPEND="
dev-lang/perl
diff --git a/media-gfx/nomacs/nomacs-3.22.0.ebuild b/media-gfx/nomacs/nomacs-3.22.0.ebuild
index 9e0b9bbd2a70..afce662ea319 100644
--- a/media-gfx/nomacs/nomacs-3.22.0.ebuild
+++ b/media-gfx/nomacs/nomacs-3.22.0.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -16,7 +16,7 @@ LICENSE="GPL-3+"
SLOT="0"
if [[ ${PV} != *_rc* ]] ; then
- KEYWORDS="~amd64 ~arm64 ~riscv ~x86"
+ KEYWORDS="amd64 ~arm64 ~riscv x86"
fi
IUSE="+opencv plugins raw +tiff test zip"
diff --git a/media-gfx/orcaslicer-bin/orcaslicer-bin-2.4.2.ebuild b/media-gfx/orcaslicer-bin/orcaslicer-bin-2.4.2-r1.ebuild
index 7ee9f55ce7ab..13b24d92543e 100644
--- a/media-gfx/orcaslicer-bin/orcaslicer-bin-2.4.2.ebuild
+++ b/media-gfx/orcaslicer-bin/orcaslicer-bin-2.4.2-r1.ebuild
@@ -88,6 +88,7 @@ src_install() {
# Make binaries executable
fperms +x /opt/${PN}/AppRun
fperms +x /opt/${PN}/bin/orca-slicer
+ fperms +x /opt/${PN}/libexec/orca-slicer-env
# Find and make all .so files executable
find "${ED}/opt/${PN}" -name "*.so*" -exec chmod +x {} \;
diff --git a/media-gfx/pngcheck/pngcheck-4.0.1.ebuild b/media-gfx/pngcheck/pngcheck-4.0.1.ebuild
index 56ae05737ba7..a2a2f63648ab 100644
--- a/media-gfx/pngcheck/pngcheck-4.0.1.ebuild
+++ b/media-gfx/pngcheck/pngcheck-4.0.1.ebuild
@@ -11,7 +11,7 @@ SRC_URI="https://github.com/pnggroup/pngcheck/archive/v${PV}.tar.gz -> ${P}.tar.
LICENSE="HPND GPL-2+"
SLOT="0"
-KEYWORDS="~amd64 x86"
+KEYWORDS="amd64 x86"
RDEPEND="virtual/zlib:="
DEPEND="${RDEPEND}"
diff --git a/media-gfx/slic3r/Manifest b/media-gfx/slic3r/Manifest
new file mode 100644
index 000000000000..1a6d2e82c5bf
--- /dev/null
+++ b/media-gfx/slic3r/Manifest
@@ -0,0 +1 @@
+DIST slic3r-1.3.0.tar.gz 2104094 BLAKE2B 74c58690cf196f89ecff5eec853215c87c648df5a504725fea9f14b0343bca105190de1d63e2e8e76d47fcaf8dbe7b6d26f61b304ce7336412effa1c9a3fba41 SHA512 ff0f7747e166826ff1c53220974ee9d3a217d0e19964dbe4a5fa3e81f262a6810a47632686b7f1b3128384ae05c6f98d8aab980524079bdf9811445fe23a0f0d
diff --git a/media-gfx/slic3r/files/admesh-vulnerability.patch b/media-gfx/slic3r/files/admesh-vulnerability.patch
new file mode 100644
index 000000000000..1bd6efb63678
--- /dev/null
+++ b/media-gfx/slic3r/files/admesh-vulnerability.patch
@@ -0,0 +1,21 @@
+From 18d95adb01337e18d49e7c40355dd64df556b67d Mon Sep 17 00:00:00 2001
+From: pr-hung <bkedx0000@gmail.com>
+Date: Wed, 11 Mar 2026 23:29:37 +0800
+Subject: [PATCH] Fix potential vulnerability in cloned code
+ (xs/src/admesh/normals.c)
+
+---
+
+--- a/src/admesh/normals.c
++++ b/src/admesh/normals.c
+@@ -142,7 +142,8 @@ stl_fix_normal_directions(stl_file *stl) {
+ }
+ }
+ /* If this edge of the facet is connected: */
+- if(stl->neighbors_start[facet_num].neighbor[j] != -1) {
++ if(stl->neighbors_start[facet_num].neighbor[j] != -1 &&
++ stl->neighbors_start[facet_num].neighbor[j] < stl->stats.number_of_facets*sizeof(char)) {
+ /* If we haven't fixed this facet yet, add it to the list: */
+ if(norm_sw[stl->neighbors_start[facet_num].neighbor[j]] != 1) {
+ /* Add node to beginning of list. */
+
diff --git a/media-gfx/slic3r/files/boost-header.patch b/media-gfx/slic3r/files/boost-header.patch
new file mode 100644
index 000000000000..85fee321e71d
--- /dev/null
+++ b/media-gfx/slic3r/files/boost-header.patch
@@ -0,0 +1,42 @@
+From ce966c2450183dfc1c6415161463ea8d59dcccd5 Mon Sep 17 00:00:00 2001
+From: zdroyer <ec2-user@ip-172-31-13-62.us-east-2.compute.internal>
+Date: Fri, 12 Apr 2019 12:47:34 +0000
+Subject: [PATCH] Removed unused header wchich generated tons of warnings with
+ boost 1.69
+---
+
+--- a/src/admesh/stl.h
++++ b/src/admesh/stl.h
+@@ -26,7 +26,6 @@
+ #include <stdio.h>
+ #include <stdint.h>
+ #include <stddef.h>
+-#include <boost/detail/endian.hpp>
+
+ #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+ #include "windows.h"
+
+From a0f0616b43f50124164ed274c687cf98f532b3ce Mon Sep 17 00:00:00 2001
+From: Chow Loong Jin <hyperair@debian.org>
+Date: Tue, 6 Nov 2018 01:10:33 +0800
+Subject: [PATCH] Drop #error "admesh works correctly on little endian machines
+ only"
+
+admesh works fine on little-endian machines as of b9592961. It just doesn't
+compile because of this pesky #error.
+---
+
+--- a/src/admesh/stl.h
++++ b/src/admesh/stl.h
+@@ -28,10 +28,6 @@
+ #include <stddef.h>
+ #include <boost/detail/endian.hpp>
+
+-#ifndef BOOST_LITTLE_ENDIAN
+-#error "admesh works correctly on little endian machines only!"
+-#endif
+-
+ #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+ #include "windows.h"
+ #define ADMESH_CHAR wchar_t
+
diff --git a/media-gfx/slic3r/files/boost-io-context-1.3.0.patch b/media-gfx/slic3r/files/boost-io-context-1.3.0.patch
new file mode 100644
index 000000000000..7f27aba377d8
--- /dev/null
+++ b/media-gfx/slic3r/files/boost-io-context-1.3.0.patch
@@ -0,0 +1,83 @@
+From eff78b92512cfe89675f2efd768ddacb2e93ec62 Mon Sep 17 00:00:00 2001
+From: bakedsnake <bakedsnake@vagrantz.xyz>
+Date: Mon, 24 Aug 2026 15:59:05 +0200
+Subject: [PATCH] Updates deprecated `asio::io_service` with `asio::io_context`
+
+Thought I would leave this here for documentation
+purposes at least. This makes the latest version
+able to build. ( latest commit ).
+---
+
+--- a/src/libslic3r/GCodeSender.cpp
++++ b/src/libslic3r/GCodeSender.cpp
+@@ -35,7 +35,9 @@ struct termios2 {
+ speed_t c_ispeed;
+ speed_t c_ospeed;
+ };
++#ifndef BOTHER
+ #define BOTHER CBAUDEX
++#endif
+
+ #endif
+
+@@ -97,12 +99,12 @@ GCodeSender::connect(std::string devname, unsigned int baud_rate)
+ fs.open("serial.txt", std::fstream::out | std::fstream::trunc);
+ #endif
+
+- // this gives some work to the io_service before it is started
++ // this gives some work to the io_context before it is started
+ // (post() runs the supplied function in its thread)
+- this->io.post(boost::bind(&GCodeSender::do_read, this));
++ boost::asio::post(this->io, boost::bind(&GCodeSender::do_read, this));
+
+ // start reading in the background thread
+- boost::thread t(boost::bind(&asio::io_service::run, &this->io));
++ boost::thread t(boost::bind(&asio::io_context::run, &this->io));
+ this->background_thread.swap(t);
+
+ // always send a M105 to check for connection because firmware might be silent on connect
+@@ -159,9 +161,8 @@ GCodeSender::disconnect()
+ if (!this->open) return;
+ this->open = false;
+ this->connected = false;
+- this->io.post(boost::bind(&GCodeSender::do_close, this));
++ boost::asio::post(this->io, boost::bind(&GCodeSender::do_close, this));
+ this->background_thread.join();
+- this->io.reset();
+ /*
+ if (this->error_status()) {
+ throw(boost::system::system_error(boost::system::error_code(),
+@@ -444,7 +445,7 @@ GCodeSender::send(const std::string &line, bool priority)
+ void
+ GCodeSender::send()
+ {
+- this->io.post(boost::bind(&GCodeSender::do_send, this));
++ boost::asio::post(this->io, boost::bind(&GCodeSender::do_send, this));
+ }
+
+ void
+--- a/src/libslic3r/GCodeSender.hpp
++++ b/src/libslic3r/GCodeSender.hpp
+@@ -47,7 +47,7 @@ class GCodeSender : private boost::noncopyable {
+ void reset();
+
+ private:
+- asio::io_service io;
++ asio::io_context io;
+ asio::serial_port serial;
+ boost::thread background_thread;
+ boost::asio::streambuf read_buffer, write_buffer;
+
+From: bakedsnake <bakedsnake@vagrantz.xyz>
+Date: Mon, 24 Aug 2026 15:59:05 +0200
+Subject: [PATCH] add missing boost noncopyable
+--- a/src/libslic3r/GCodeSender.hpp
++++ b/src/libslic3r/GCodeSender.hpp
+@@ -8,6 +8,7 @@
+ #include <vector>
+ #include <boost/asio.hpp>
+ #include <boost/bind.hpp>
++#include <boost/core/noncopyable.hpp>
+ #include <boost/thread.hpp>
+
+ namespace Slic3r {
diff --git a/media-gfx/slic3r/files/boost-io-context-9999.patch b/media-gfx/slic3r/files/boost-io-context-9999.patch
new file mode 100644
index 000000000000..fcf8f760f59b
--- /dev/null
+++ b/media-gfx/slic3r/files/boost-io-context-9999.patch
@@ -0,0 +1,70 @@
+From eff78b92512cfe89675f2efd768ddacb2e93ec62 Mon Sep 17 00:00:00 2001
+From: bakedsnake <bakedsnake@vagrantz.xyz>
+Date: Mon, 24 Aug 2026 15:59:05 +0200
+Subject: [PATCH] Updates deprecated `asio::io_service` with `asio::io_context`
+
+Thought I would leave this here for documentation
+purposes at least. This makes the latest version
+able to build. ( latest commit ).
+---
+
+--- a/src/libslic3r/GCodeSender.cpp
++++ b/src/libslic3r/GCodeSender.cpp
+@@ -35,7 +35,9 @@ struct termios2 {
+ speed_t c_ispeed;
+ speed_t c_ospeed;
+ };
++#ifndef BOTHER
+ #define BOTHER CBAUDEX
++#endif
+
+ #endif
+
+@@ -97,12 +99,12 @@ GCodeSender::connect(std::string devname, unsigned int baud_rate)
+ fs.open("serial.txt", std::fstream::out | std::fstream::trunc);
+ #endif
+
+- // this gives some work to the io_service before it is started
++ // this gives some work to the io_context before it is started
+ // (post() runs the supplied function in its thread)
+- this->io.post(boost::bind(&GCodeSender::do_read, this));
++ boost::asio::post(this->io, boost::bind(&GCodeSender::do_read, this));
+
+ // start reading in the background thread
+- boost::thread t(boost::bind(&asio::io_service::run, &this->io));
++ boost::thread t(boost::bind(&asio::io_context::run, &this->io));
+ this->background_thread.swap(t);
+
+ // always send a M105 to check for connection because firmware might be silent on connect
+@@ -159,9 +161,8 @@ GCodeSender::disconnect()
+ if (!this->open) return;
+ this->open = false;
+ this->connected = false;
+- this->io.post(boost::bind(&GCodeSender::do_close, this));
++ boost::asio::post(this->io, boost::bind(&GCodeSender::do_close, this));
+ this->background_thread.join();
+- this->io.reset();
+ /*
+ if (this->error_status()) {
+ throw(boost::system::system_error(boost::system::error_code(),
+@@ -444,7 +445,7 @@ GCodeSender::send(const std::string &line, bool priority)
+ void
+ GCodeSender::send()
+ {
+- this->io.post(boost::bind(&GCodeSender::do_send, this));
++ boost::asio::post(this->io, boost::bind(&GCodeSender::do_send, this));
+ }
+
+ void
+--- a/src/libslic3r/GCodeSender.hpp
++++ b/src/libslic3r/GCodeSender.hpp
+@@ -47,7 +47,7 @@ class GCodeSender : private boost::noncopyable {
+ void reset();
+
+ private:
+- asio::io_service io;
++ asio::io_context io;
+ asio::serial_port serial;
+ boost::thread background_thread;
+ boost::asio::streambuf read_buffer, write_buffer;
+
diff --git a/media-gfx/slic3r/files/boost-placeholders.patch b/media-gfx/slic3r/files/boost-placeholders.patch
new file mode 100644
index 000000000000..3ec2c8974f81
--- /dev/null
+++ b/media-gfx/slic3r/files/boost-placeholders.patch
@@ -0,0 +1,70 @@
+From d5084db14e7b4e75bf588fe063a5b9941c1cac31 Mon Sep 17 00:00:00 2001
+From: Jonathan Wakely <jwakely@redhat.com>
+Date: Wed, 3 Jun 2020 01:05:39 +0200
+Subject: [PATCH 01/15] Make boost::Placeholders::_1 visible
+
+Fixes https://github.com/slic3r/Slic3r/issues/4967
+---
+
+--- a/src/libslic3r/GCodeTimeEstimator.cpp
++++ b/src/libslic3r/GCodeTimeEstimator.cpp
+@@ -1,9 +1,12 @@
+ #include "GCodeTimeEstimator.hpp"
+-#include <boost/bind.hpp>
++#include <boost/bind/bind.hpp>
+ #include <cmath>
+
+ namespace Slic3r {
+
++using boost::placeholders::_1;
++using boost::placeholders::_2;
++
+ void
+ GCodeTimeEstimator::parse(const std::string &gcode)
+ {
+
+--- a/src/libslic3r/SLAPrint.cpp
++++ b/src/libslic3r/SLAPrint.cpp
+@@ -7,9 +7,12 @@
+ #include <iostream>
+ #include <complex>
+ #include <cstdio>
++#include <boost/bind/bind.hpp>
+
+ namespace Slic3r {
+
++using boost::placeholders::_1;
++
+ void
+ SLAPrint::slice()
+ {
+--- a/src/libslic3r/TriangleMesh.cpp
++++ b/src/libslic3r/TriangleMesh.cpp
+@@ -15,6 +15,7 @@
+ #include <stdexcept>
+ #include <boost/config.hpp>
+ #include <boost/nowide/convert.hpp>
++#include <boost/bind/bind.hpp>
+
+ #ifdef SLIC3R_DEBUG
+ #include "SVG.hpp"
+@@ -22,6 +23,8 @@
+
+ namespace Slic3r {
+
++using boost::placeholders::_1;
++
+ TriangleMesh::TriangleMesh()
+ : repaired(false)
+ {
+--- a/src/libslic3r/PrintObject.cpp
++++ b/src/libslic3r/PrintObject.cpp
+@@ -4,6 +4,9 @@
+ #include "Geometry.hpp"
+ #include <algorithm>
+ #include <vector>
++#include <boost/bind/bind.hpp>
++
++using boost::placeholders::_1;
+
+ namespace Slic3r {
diff --git a/media-gfx/slic3r/files/libexpat-cve-2024-45492.patch b/media-gfx/slic3r/files/libexpat-cve-2024-45492.patch
new file mode 100644
index 000000000000..6002ff0a372b
--- /dev/null
+++ b/media-gfx/slic3r/files/libexpat-cve-2024-45492.patch
@@ -0,0 +1,25 @@
+From d5d036e83c3893f38bf531f9340234a94bdd549d Mon Sep 17 00:00:00 2001
+From: KIMDONGYEON00 <dongyeonkim2000@gmail.com>
+Date: Tue, 15 Jul 2025 01:48:01 +0900
+Subject: [PATCH] CVE-2024-45492
+
+---
+
+--- a/src/expat/xmlparse.c
++++ b/src/expat/xmlparse.c
+@@ -6333,6 +6333,15 @@ nextScaffoldPart(XML_Parser parser)
+ int next;
+
+ if (!dtd->scaffIndex) {
++ /* Detect and prevent integer overflow.
++ * The preprocessor guard addresses the "always false" warning
++ * from -Wtype-limits on platforms where
++ * sizeof(unsigned int) < sizeof(size_t), e.g. on x86_64. */
++#if UINT_MAX >= SIZE_MAX
++ if (parser->m_groupSize > ((size_t)(-1) / sizeof(int))) {
++ return -1;
++ }
++#endif
+ dtd->scaffIndex = (int *)MALLOC(groupSize * sizeof(int));
+ if (!dtd->scaffIndex)
+ return -1;
diff --git a/media-gfx/slic3r/metadata.xml b/media-gfx/slic3r/metadata.xml
new file mode 100644
index 000000000000..8fca00a8b6a7
--- /dev/null
+++ b/media-gfx/slic3r/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>bakedsnake@vagrantz.xyz</email>
+ <name>bakedsnake</name>
+ </maintainer>
+ <use>
+ <flag name="gui">Build with GUI.</flag>
+ <flag name="xs">Build with XS only.</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/media-gfx/slic3r/slic3r-1.3.0.ebuild b/media-gfx/slic3r/slic3r-1.3.0.ebuild
new file mode 100644
index 000000000000..b22d714e5211
--- /dev/null
+++ b/media-gfx/slic3r/slic3r-1.3.0.ebuild
@@ -0,0 +1,125 @@
+# Copyright 2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit perl-module
+
+DESCRIPTION="Open Source toolpath generator for 3D printers"
+HOMEPAGE="https://slic3r.org"
+if [[ ${PV} == *9999* ]] ; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/slic3r/${PN}"
+ S="${WORKDIR}/slic3r-${PV}/xs"
+else
+ SRC_URI="https://github.com/slic3r/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64"
+ S="${WORKDIR}/Slic3r-${PV}/xs"
+fi
+LICENSE="AGPL-3"
+SLOT="0"
+
+IUSE="gui xs test"
+
+RESTRICT="!test? ( test )"
+
+BDEPEND="
+ dev-lang/perl:=
+ dev-perl/ExtUtils-CppGuess[${PERL_USEDEP}]
+ dev-perl/ExtUtils-Typemaps-Default[${PERL_USEDEP}]
+ dev-perl/ExtUtils-XSpp[${PERL_USEDEP}]
+ dev-perl/Module-Build[${PERL_USEDEP}]
+ dev-perl/Module-Build-WithXSpp[${PERL_USEDEP}]
+ dev-perl/Devel-CheckLib[${PERL_USEDEP}]
+ virtual/perl-ExtUtils-ParseXS
+"
+
+RDEPEND="
+ dev-cpp/tbb
+ dev-lang/perl:=
+ dev-libs/boost
+ dev-perl/Encode-Locale[${PERL_USEDEP}]
+ dev-perl/Moo[${PERL_USEDEP}]
+ gui-libs/gtk
+ media-libs/freeglut
+ net-misc/curl[openssl]
+ virtual/perl-Encode
+ virtual/perl-File-Spec
+ virtual/perl-Scalar-List-Utils
+ virtual/perl-Test-Simple
+ virtual/perl-threads
+ virtual/perl-Time-HiRes
+ virtual/perl-autodie
+ virtual/perl-parent
+ virtual/perl-IO-Compress
+ virtual/perl-Test-Harness
+ virtual/perl-Test-Simple
+ x11-libs/libXmu
+ x11-libs/wxGTK
+ gui? (
+ >=dev-lang/perl-5.38.2-r3[perl_features_ithreads]
+ dev-perl/Alien-wxWidgets[${PERL_USEDEP}]
+ dev-perl/Class-Accessor[${PERL_USEDEP}]
+ dev-perl/Growl-GNTP[${PERL_USEDEP}]
+ dev-perl/libwww-perl[${PERL_USEDEP}]
+ dev-perl/Net-Bonjour[${PERL_USEDEP}]
+ dev-perl/OpenGL[${PERL_USEDEP}]
+ dev-perl/Wx[${PERL_USEDEP}]
+ dev-perl/Wx-GLCanvas[${PERL_USEDEP}]
+ virtual/perl-Socket
+ )
+"
+
+DEPEND="${RDEPEND}"
+
+PATCHES=(
+ "${FILESDIR}/admesh-vulnerability.patch"
+ "${FILESDIR}/boost-header.patch"
+ "${FILESDIR}/boost-io-context-${PV}.patch"
+ "${FILESDIR}/boost-placeholders.patch"
+ "${FILESDIR}/libexpat-cve-2024-45492.patch"
+)
+
+src_prepare() {
+ default
+ # boost_system is now part of boost_thread
+ # since Boost 1.69
+ sed -i 's/my @boost_libraries = qw(system thread filesystem);/my @boost_libraries = qw(thread filesystem);/' \
+ Build.PL || die "Failed to remove `boost_system`"
+
+ # No strict ansi
+ # See: https://github.com/slic3r/Slic3r/pull/4974
+ sed -i "s/push @cflags, qw(-std=c++11);/push @cflags, qw(-std=gnu++11);/" \
+ Build.PL || die "Failed to set gnu++11"
+}
+
+src_compile() {
+ local myconf_str=""
+ if use gui; then
+ myconf_str+=" --gui"
+ fi
+
+ if use xs; then
+ myconf_str+=" --xs"
+ fi
+
+ local myconf="$myconf_str"
+ perl-module_src_compile
+}
+
+src_install() {
+ perl-module_src_install
+
+ cd .. || die
+ exeinto /usr/libexec/slic3r
+ doexe "slic3r.pl" || die
+
+ insinto /usr/libexec/slic3r
+ doins -r "lib" "var" "share" || die
+
+ exeinto /usr/bin
+ newexe - slic3r <<-EOF || die
+ #!/bin/sh
+ exec /usr/bin/perl -I/usr/libexec/slic3r/lib /usr/libexec/slic3r/slic3r.pl "\$@"
+ EOF
+}
diff --git a/media-gfx/slic3r/slic3r-9999.ebuild b/media-gfx/slic3r/slic3r-9999.ebuild
new file mode 100644
index 000000000000..d30e199f92cb
--- /dev/null
+++ b/media-gfx/slic3r/slic3r-9999.ebuild
@@ -0,0 +1,118 @@
+# Copyright 2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit perl-module
+
+DESCRIPTION="Open Source toolpath generator for 3D printers"
+HOMEPAGE="https://slic3r.org"
+if [[ ${PV} == *9999* ]] ; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/slic3r/${PN}"
+ S="${WORKDIR}/slic3r-${PV}/xs"
+else
+ SRC_URI="https://github.com/slic3r/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64"
+ S="${WORKDIR}/Slic3r-${PV}/xs"
+fi
+LICENSE="AGPL-3"
+SLOT="0"
+
+IUSE="gui xs test"
+
+RESTRICT="!test? ( test )"
+
+BDEPEND="
+ dev-lang/perl:=
+ dev-perl/ExtUtils-CppGuess[${PERL_USEDEP}]
+ dev-perl/ExtUtils-Typemaps-Default[${PERL_USEDEP}]
+ dev-perl/ExtUtils-XSpp[${PERL_USEDEP}]
+ dev-perl/Module-Build[${PERL_USEDEP}]
+ dev-perl/Module-Build-WithXSpp[${PERL_USEDEP}]
+ dev-perl/Devel-CheckLib[${PERL_USEDEP}]
+ virtual/perl-ExtUtils-ParseXS
+"
+
+RDEPEND="
+ dev-cpp/tbb
+ dev-lang/perl:=
+ dev-libs/boost
+ dev-perl/Encode-Locale[${PERL_USEDEP}]
+ dev-perl/Moo[${PERL_USEDEP}]
+ gui-libs/gtk
+ media-libs/freeglut
+ net-misc/curl[openssl]
+ virtual/perl-Encode
+ virtual/perl-File-Spec
+ virtual/perl-Scalar-List-Utils
+ virtual/perl-Test-Simple
+ virtual/perl-threads
+ virtual/perl-Time-HiRes
+ virtual/perl-autodie
+ virtual/perl-parent
+ virtual/perl-IO-Compress
+ virtual/perl-Test-Harness
+ virtual/perl-Test-Simple
+ x11-libs/libXmu
+ x11-libs/wxGTK
+ gui? (
+ >=dev-lang/perl-5.38.2-r3[perl_features_ithreads]
+ dev-perl/Alien-wxWidgets[${PERL_USEDEP}]
+ dev-perl/Class-Accessor[${PERL_USEDEP}]
+ dev-perl/Growl-GNTP[${PERL_USEDEP}]
+ dev-perl/libwww-perl[${PERL_USEDEP}]
+ dev-perl/Net-Bonjour[${PERL_USEDEP}]
+ dev-perl/OpenGL[${PERL_USEDEP}]
+ dev-perl/Wx[${PERL_USEDEP}]
+ dev-perl/Wx-GLCanvas[${PERL_USEDEP}]
+ virtual/perl-Socket
+ )
+"
+
+DEPEND="${RDEPEND}"
+
+PATCHES=(
+ "${FILESDIR}/admesh-vulnerability.patch"
+ "${FILESDIR}/boost-io-context-${PV}.patch"
+ "${FILESDIR}/libexpat-cve-2024-45492.patch"
+)
+
+src_prepare() {
+ default
+ # boost_system is now part of boost_thread
+ # since Boost 1.69
+ sed -i 's/my @boost_libraries = qw(system thread filesystem);/my @boost_libraries = qw(thread filesystem);/' \
+ Build.PL || die "Failed to remove `boost_system`"
+}
+
+src_compile() {
+ local myconf_str=""
+ if use gui; then
+ myconf_str+=" --gui"
+ fi
+
+ if use xs; then
+ myconf_str+=" --xs"
+ fi
+
+ local myconf="$myconf_str"
+ perl-module_src_compile
+}
+
+src_install() {
+ perl-module_src_install
+
+ cd .. || die
+ exeinto /usr/libexec/slic3r
+ doexe "slic3r.pl" || die
+
+ insinto /usr/libexec/slic3r
+ doins -r "lib" "var" "share" || die
+
+ exeinto /usr/bin
+ newexe - slic3r <<-EOF || die
+ #!/bin/sh
+ exec /usr/bin/perl -I/usr/libexec/slic3r/lib /usr/libexec/slic3r/slic3r.pl "\$@"
+ EOF
+}
diff --git a/media-gfx/valentina/Manifest b/media-gfx/valentina/Manifest
index b0b11fb4c464..318ea3af7a76 100644
--- a/media-gfx/valentina/Manifest
+++ b/media-gfx/valentina/Manifest
@@ -1,2 +1,4 @@
DIST valentina-v1.0.4.tar.bz2 64512148 BLAKE2B 09d22dab3a827b411e119e42609a4e0254ade6b8a91e09aebb0b905578e361b1322f5fab3831ca99494081533dc48cfb3105505f0b5a5ddc817283ecbecaaeb4 SHA512 8a0ab9aa77cea1d019673f42c979121bf20df68221d05f73043012f252e656e2edfd78b00de0d98f32fa232ab9f90ad34a097e522cb548bd46e54e35730a3cf9
+DIST valentina-v1.0.5.tar.bz2 51258167 BLAKE2B d678895d0ed252203f052d2c6a64bd541cc9e9bb25ee8ed7d6baa91cbfe355156fd1164f2be47230b243aff7ddf79d9cad83a943087fcb3931eb87249de8b277 SHA512 190785ed3b1598e2c881ece5c355b7afd61c398930fc1d1ac2af41f184904694b6dca79ba5ec4cfce85c68a337454a1a10de52f4887696e95135d98f575e7dff
DIST valentina-v1.1.0.tar.bz2 65301814 BLAKE2B 3d9f42dd8674d6c9d98e968a0ba5ae275fb8e222c0dfacc169d4a6ea0e39c1a2538a2872c728df400aac25b1bb10f22fd7c771ca9a17215d8e94df18a1a8668c SHA512 af776d993690107545f9f57ea17a3e451f066e19ef01ff0cd6ad1d94b0370afb8f9a1911dc8540f6216e65fa7e93a8f05fff91c47d1343a9bdaf446f56506965
+DIST valentina-v1.1.1.tar.bz2 52050184 BLAKE2B 26112de2b741fcd8256579de92e765699828404313aa7eded9055de40f88db60c135b874a51566b4a9369fcfa82ad4c0d930b78c2ff48439764e24fe62099a46 SHA512 a07c7e0f148992db3d09da5a4e3df845fe695a31c41b31c0110ad257a86501004796152dbd823d8bb8657fe46c747d6f1037cbcfabef71f6b8de570edf167bc8
diff --git a/media-gfx/valentina/valentina-1.0.5.ebuild b/media-gfx/valentina/valentina-1.0.5.ebuild
new file mode 100644
index 000000000000..700d873dfcea
--- /dev/null
+++ b/media-gfx/valentina/valentina-1.0.5.ebuild
@@ -0,0 +1,134 @@
+# Copyright 2025-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit edo flag-o-matic multiprocessing optfeature qt-utils toolchain-funcs xdg
+
+DESCRIPTION="Cloth patternmaking software"
+HOMEPAGE="https://smart-pattern.com.ua/"
+SRC_URI="https://gitlab.com/smart-pattern/${PN}/-/archive/v${PV}/${PN}-v${PV}.tar.bz2"
+S="${WORKDIR}/${PN}-v${PV}"
+
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ dev-libs/xerces-c:=
+ dev-qt/qtbase:6[concurrent,gui,network,opengl,ssl,widgets,xml]
+ dev-qt/qtsvg:6
+ !sci-biology/tree-puzzle
+"
+RDEPEND="${DEPEND}"
+BDEPEND="
+ dev-build/meson-format-array
+ dev-qt/qttools:6[linguist]
+ dev-util/qbs
+"
+
+qbs_format_flags() {
+ meson-format-array "${@}" || die
+}
+
+qbs_config() {
+ debug-print-function ${FUNCNAME} "${@}"
+
+ (( $# == 2 )) || \
+ die "${FUNCNAME} takes exactly two arguments"
+
+ local key=${1}
+ local value=${2}
+
+ edo qbs config "profiles.gentoo.${key}" "${value}"
+}
+
+src_configure() {
+ # setup the toolchain in a profile 'mytoolchain'
+ edo qbs setup-toolchains "$(tc-getCC)" mytoolchain
+
+ # create a profile 'gentoo' with 'mytoolchain' inherited
+ edo qbs setup-qt "$(qt_get_broot_binary 6 qmake)" gentoo
+ qbs_config baseProfile mytoolchain
+
+ # define paths for toolchain
+ qbs_config archiverPath "$(tc-getAR)"
+ qbs_config assemblerPath "$(tc-getAS)"
+ qbs_config linkerPath "$(tc-getCC)"
+ qbs_config nmPath "$(tc-getNM)"
+ qbs_config objcopyPath "$(tc-getOBJCOPY)"
+ qbs_config stripPath "$(tc-getSTRIP)"
+
+ # define global options
+ qbs_config qbs.installPrefix "${EPREFIX}/usr"
+ qbs_config qbs.sysroot "${ESYSROOT}"
+
+ # define system flags
+ qbs_config cpp.cppFlags "$(qbs_format_flags ${CPPFLAGS})"
+ qbs_config cpp.cxxFlags "$(qbs_format_flags ${CXXFLAGS})"
+ qbs_config cpp.linkerFlags "$(qbs_format_flags $(raw-ldflags))"
+ qbs_config qbs.optimization ""
+
+ # define package options
+ local my_opts=(
+ enableCcache:false
+ enablePCH:false
+ enableUnitTests:$(usex test true false)
+ enableRPath:false
+ installLibraryPath:"$(get_libdir)"
+ libDirName:"$(get_libdir)"
+ treatWarningsAsErrors:false
+ )
+
+ # used by all phases
+ qbsargs=(
+ --file ${PN}.qbs
+ config:release
+ profile:gentoo
+ ${my_opts[@]/#/modules.buildconfig.}
+ )
+
+ # export now for src_test
+ local -x LD_LIBRARY_PATH+=":${S}/release/install-root${EPREFIX}/usr/$(get_libdir)/"
+ local -x QT_QPA_PLATFORM=offscreen
+
+ edo qbs resolve "${qbsargs[@]}" --force-probe-execution
+
+ # verbose build/install phase
+ qbsargs+=(
+ --command-echo-mode command-line
+ )
+}
+
+src_compile() {
+ edo qbs build "${qbsargs[@]}" --jobs $(get_makeopts_jobs) --no-install
+}
+
+src_test() {
+ edo qbs -p autotest-runner profile:gentoo config:release
+}
+
+src_install() {
+ edo qbs install "${qbsargs[@]}" --no-build --install-root "${D}"
+
+ if use test; then
+ rm "${ED}"/usr/bin/*Test.debug || die
+ fi
+
+ insinto /usr/share/${PN}
+ doins -r "${S}"/src/app/share/{collection,tables}
+
+ dodoc AUTHORS.txt ChangeLog.txt README.md
+
+ doman dist/debian/${PN}.1
+ doman dist/debian/puzzle.1
+ doman dist/debian/tape.1
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+
+ optfeature "PDF to PS conversion" app-text/poppler[utils]
+}
diff --git a/media-gfx/valentina/valentina-1.1.1.ebuild b/media-gfx/valentina/valentina-1.1.1.ebuild
new file mode 100644
index 000000000000..8326c8a411ba
--- /dev/null
+++ b/media-gfx/valentina/valentina-1.1.1.ebuild
@@ -0,0 +1,138 @@
+# Copyright 2025-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit edo flag-o-matic multiprocessing optfeature qt-utils toolchain-funcs xdg
+
+DESCRIPTION="Cloth patternmaking software"
+HOMEPAGE="https://smart-pattern.com.ua/"
+SRC_URI="https://gitlab.com/smart-pattern/${PN}/-/archive/v${PV}/${PN}-v${PV}.tar.bz2"
+S="${WORKDIR}/${PN}-v${PV}"
+
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+CDEPEND="
+ dev-libs/xerces-c:=
+ dev-qt/qtbase:6[concurrent,gui,network,opengl,ssl,widgets,xml]
+ dev-qt/qtsvg:6
+ !sci-biology/tree-puzzle
+"
+DEPEND="
+ ${CDEPEND}
+ dev-libs/immer
+"
+RDEPEND="${CDEPEND}"
+BDEPEND="
+ dev-build/meson-format-array
+ dev-qt/qttools:6[linguist]
+ dev-util/qbs
+"
+
+qbs_format_flags() {
+ meson-format-array "${@}" || die
+}
+
+qbs_config() {
+ debug-print-function ${FUNCNAME} "${@}"
+
+ (( $# == 2 )) || \
+ die "${FUNCNAME} takes exactly two arguments"
+
+ local key=${1}
+ local value=${2}
+
+ edo qbs config "profiles.gentoo.${key}" "${value}"
+}
+
+src_configure() {
+ # setup the toolchain in a profile 'mytoolchain'
+ edo qbs setup-toolchains "$(tc-getCC)" mytoolchain
+
+ # create a profile 'gentoo' with 'mytoolchain' inherited
+ edo qbs setup-qt "$(qt_get_broot_binary 6 qmake)" gentoo
+ qbs_config baseProfile mytoolchain
+
+ # define paths for toolchain
+ qbs_config archiverPath "$(tc-getAR)"
+ qbs_config assemblerPath "$(tc-getAS)"
+ qbs_config linkerPath "$(tc-getCC)"
+ qbs_config nmPath "$(tc-getNM)"
+ qbs_config objcopyPath "$(tc-getOBJCOPY)"
+ qbs_config stripPath "$(tc-getSTRIP)"
+
+ # define global options
+ qbs_config qbs.installPrefix "${EPREFIX}/usr"
+ qbs_config qbs.sysroot "${ESYSROOT}"
+
+ # define system flags
+ qbs_config cpp.cppFlags "$(qbs_format_flags ${CPPFLAGS})"
+ qbs_config cpp.cxxFlags "$(qbs_format_flags ${CXXFLAGS})"
+ qbs_config cpp.linkerFlags "$(qbs_format_flags $(raw-ldflags))"
+ qbs_config qbs.optimization ""
+
+ # define package options
+ local my_opts=(
+ enableCcache:false
+ enablePCH:false
+ enableUnitTests:$(usex test true false)
+ enableRPath:false
+ installLibraryPath:"$(get_libdir)"
+ libDirName:"$(get_libdir)"
+ treatWarningsAsErrors:false
+ )
+
+ # used by all phases
+ qbsargs=(
+ --file ${PN}.qbs
+ config:release
+ profile:gentoo
+ ${my_opts[@]/#/modules.buildconfig.}
+ )
+
+ # export now for src_test
+ local -x LD_LIBRARY_PATH+=":${S}/release/install-root${EPREFIX}/usr/$(get_libdir)/"
+ local -x QT_QPA_PLATFORM=offscreen
+
+ edo qbs resolve "${qbsargs[@]}" --force-probe-execution
+
+ # verbose build/install phase
+ qbsargs+=(
+ --command-echo-mode command-line
+ )
+}
+
+src_compile() {
+ edo qbs build "${qbsargs[@]}" --jobs $(get_makeopts_jobs) --no-install
+}
+
+src_test() {
+ edo qbs -p autotest-runner profile:gentoo config:release
+}
+
+src_install() {
+ edo qbs install "${qbsargs[@]}" --no-build --install-root "${D}"
+
+ if use test; then
+ rm "${ED}"/usr/bin/*Test.debug || die
+ fi
+
+ insinto /usr/share/${PN}
+ doins -r "${S}"/src/app/share/{collection,tables}
+
+ dodoc AUTHORS.txt ChangeLog.txt README.md
+
+ doman dist/debian/${PN}.1
+ doman dist/debian/puzzle.1
+ doman dist/debian/tape.1
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+
+ optfeature "PDF to PS conversion" app-text/poppler[utils]
+}
diff --git a/media-gfx/viewnior/viewnior-1.8_p20210825.ebuild b/media-gfx/viewnior/viewnior-1.8_p20210825.ebuild
index a26070aba491..2641f3b7a112 100644
--- a/media-gfx/viewnior/viewnior-1.8_p20210825.ebuild
+++ b/media-gfx/viewnior/viewnior-1.8_p20210825.ebuild
@@ -13,7 +13,7 @@ S="${WORKDIR}/Viewnior-${COMMIT}"
LICENSE="GPL-3"
SLOT="0"
-KEYWORDS="amd64 ~arm64 ~riscv ~x86"
+KEYWORDS="amd64 ~arm64 ~riscv x86"
RDEPEND="
dev-libs/glib:2
diff --git a/media-gfx/wings/wings-2.4.1.ebuild b/media-gfx/wings/wings-2.4.1.ebuild
index 9a0bf662bf26..96fd376cee0b 100644
--- a/media-gfx/wings/wings-2.4.1.ebuild
+++ b/media-gfx/wings/wings-2.4.1.ebuild
@@ -10,7 +10,7 @@ SRC_URI="https://downloads.sourceforge.net/wings/${P}.tar.bz2"
LICENSE="BSD"
SLOT="0"
-KEYWORDS="amd64 ~x86"
+KEYWORDS="amd64 x86"
# Run failed with dev-lang/erlang in the range [28, 28.3), see bug 964737
RDEPEND="