commit:     804bb51caee7ca2d6f004224648a4b6b54b78ac0
Author:     Eli Schwartz <eschwartz <AT> gentoo <DOT> org>
AuthorDate: Mon Dec 15 04:09:53 2025 +0000
Commit:     Eli Schwartz <eschwartz <AT> gentoo <DOT> org>
CommitDate: Mon Dec 22 00:00:34 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=804bb51c

app-text/calibre: backport fix to build with qt 6.10

Bug: https://bugs.gentoo.org/966278
Signed-off-by: Eli Schwartz <eschwartz <AT> gentoo.org>

 app-text/calibre/calibre-8.9.0.ebuild           |   1 +
 app-text/calibre/files/calibre-8.9-qt6.10.patch | 105 ++++++++++++++++++++++++
 2 files changed, 106 insertions(+)

diff --git a/app-text/calibre/calibre-8.9.0.ebuild 
b/app-text/calibre/calibre-8.9.0.ebuild
index 44add51d1b8b..5b7f92fe2e89 100644
--- a/app-text/calibre/calibre-8.9.0.ebuild
+++ b/app-text/calibre/calibre-8.9.0.ebuild
@@ -127,6 +127,7 @@ PATCHES=(
        # (last commit in 2017)
        "${FILESDIR}/${PN}-7.0.0-jxr-test.patch"
        "${FILESDIR}/${PN}-8.9.0-piper.patch"
+       "${FILESDIR}/${PN}-8.9-qt6.10.patch"
 )
 
 src_prepare() {

diff --git a/app-text/calibre/files/calibre-8.9-qt6.10.patch 
b/app-text/calibre/files/calibre-8.9-qt6.10.patch
new file mode 100644
index 000000000000..c1b2937d3b66
--- /dev/null
+++ b/app-text/calibre/files/calibre-8.9-qt6.10.patch
@@ -0,0 +1,105 @@
+From 4c44e8f76f197629af695091c49b1a0efbb30bae Mon Sep 17 00:00:00 2001
+From: Marcin Serwin <[email protected]>
+Date: Sat, 11 Oct 2025 02:00:04 +0200
+Subject: [PATCH] Fix building with Qt 6.10
+
+Qt 6.10 no longer implicitly imports private modules, see 
https://doc.qt.io/qt-6/whatsnew610.html#build-system-changes.
+---
+ src/calibre/headless/CMakeLists.txt | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/calibre/headless/CMakeLists.txt 
b/src/calibre/headless/CMakeLists.txt
+index c2c8fa88e58f..3fc5d8e4862f 100644
+--- a/src/calibre/headless/CMakeLists.txt
++++ b/src/calibre/headless/CMakeLists.txt
+@@ -1,8 +1,8 @@
+ cmake_minimum_required(VERSION 3.21)
+ project(headless)
+ set(CMAKE_AUTOMOC ON)
+-find_package(Qt6Gui REQUIRED)
++find_package(Qt6 REQUIRED COMPONENTS Gui GuiPrivate Core CorePrivate)
+ add_library(headless MODULE main.cpp headless_backingstore.cpp 
headless_integration.cpp)
+ set_property(TARGET headless PROPERTY QT_PLUGIN_TYPE "platforms")
+ set_property(TARGET headless PROPERTY QT_PLUGIN_CLASS_NAME 
"HeadlessIntegrationPlugin")
+-target_link_libraries(headless PRIVATE Qt::Gui Qt::GuiPrivate Qt::Core 
Qt::CorePrivate)
++target_link_libraries(headless PRIVATE Qt6::Gui Qt6::GuiPrivate Qt6::Core 
Qt6::CorePrivate)
+
+
+From 8820bffc86631ca7020177a4998b478141a7b8c1 Mon Sep 17 00:00:00 2001
+From: Kovid Goyal <[email protected]>
+Date: Sat, 11 Oct 2025 08:26:28 +0530
+Subject: [PATCH] Only change CMakeLists.txt for headless if actually building
+ with Qt >= 6.10
+
+---
+ setup/build.py                      | 18 +++++++++++++++++-
+ setup/build_environment.py          |  3 ++-
+ src/calibre/headless/CMakeLists.txt |  3 ++-
+ 3 files changed, 21 insertions(+), 3 deletions(-)
+
+diff --git a/setup/build.py b/setup/build.py
+index 5ed34720dbb9..7816493ad94b 100644
+--- a/setup/build.py
++++ b/setup/build.py
+@@ -648,6 +648,22 @@ def build_headless(self):
+         bdir = self.j(self.build_dir, 'headless')
+         if os.path.exists(bdir):
+             shutil.rmtree(bdir)
++        sdir = os.path.join(bdir, 'src')
++        shutil.copytree(os.path.dirname(sources[0]), sdir)
++        with open(os.path.join(sdir, 'CMakeLists.txt'), 'r+') as f:
++            raw = f.read()
++            qt = lazy_load('qt')
++            if qt['version'] >= (6, 10):
++                fp = 'find_package(Qt6 REQUIRED COMPONENTS Gui GuiPrivate 
Core CorePrivate)'
++                ll = 'target_link_libraries(headless PRIVATE Qt6::Gui 
Qt6::GuiPrivate Qt6::Core Qt6::CorePrivate)'
++            else:
++                fp = 'find_package(Qt6Gui REQUIRED)'
++                ll = 'target_link_libraries(headless PRIVATE Qt::Gui 
Qt::GuiPrivate Qt::Core Qt::CorePrivate)'
++            raw = raw.replace('__FIND_GUI__', fp)
++            raw = raw.replace('__LINK_TARGETS__', ll)
++            f.seek(0), f.truncate()
++            f.write(raw)
++        bdir = os.path.join(bdir, 'build')
+         cmd = [CMAKE]
+         if is_macos_universal_build:
+             cmd += ['-DCMAKE_OSX_ARCHITECTURES=x86_64;arm64']
+@@ -657,7 +673,7 @@ def build_headless(self):
+         cwd = os.getcwd()
+         os.chdir(bdir)
+         try:
+-            self.check_call(cmd + ['-S', os.path.dirname(sources[0])])
++            self.check_call(cmd + ['-S', sdir])
+             self.check_call([self.env.make] + [f'-j{cpu_count or 1}'])
+         finally:
+             os.chdir(cwd)
+diff --git a/setup/build_environment.py b/setup/build_environment.py
+index a0fd7f2dd260..f5ca099d71a1 100644
+--- a/setup/build_environment.py
++++ b/setup/build_environment.py
+@@ -119,8 +119,9 @@ def readvar(name):
+     return re.search(f'^{name}:(.+)$', qraw, flags=re.M).group(1).strip()
+ 
+ 
+-qt = {x:readvar(y) for x, y in {'libs':'QT_INSTALL_LIBS', 
'plugins':'QT_INSTALL_PLUGINS'}.items()}
++qt = {x:readvar(y) for x, y in {'libs':'QT_INSTALL_LIBS', 
'plugins':'QT_INSTALL_PLUGINS', 'version_str': 'QT_VERSION'}.items()}
+ qmakespec = readvar('QMAKE_SPEC') if iswindows else None
++qt['version'] = tuple(map(int, qt['version_str'].split('.')[:2]))
+ freetype_lib_dirs = []
+ freetype_libs = []
+ freetype_inc_dirs = []
+diff --git a/src/calibre/headless/CMakeLists.txt 
b/src/calibre/headless/CMakeLists.txt
+index 3fc5d8e4862f..49b110477b6d 100644
+--- a/src/calibre/headless/CMakeLists.txt
++++ b/src/calibre/headless/CMakeLists.txt
+@@ -1,8 +1,9 @@
+ cmake_minimum_required(VERSION 3.21)
+ project(headless)
+ set(CMAKE_AUTOMOC ON)
++__FIND_GUI__
+ find_package(Qt6 REQUIRED COMPONENTS Gui GuiPrivate Core CorePrivate)
+ add_library(headless MODULE main.cpp headless_backingstore.cpp 
headless_integration.cpp)
+ set_property(TARGET headless PROPERTY QT_PLUGIN_TYPE "platforms")
+ set_property(TARGET headless PROPERTY QT_PLUGIN_CLASS_NAME 
"HeadlessIntegrationPlugin")
+-target_link_libraries(headless PRIVATE Qt6::Gui Qt6::GuiPrivate Qt6::Core 
Qt6::CorePrivate)
++__LINK_TARGETS__

Reply via email to