From c58fe7383faab984f0deee1163f74fef681fa43b Mon Sep 17 00:00:00 2001
From: Alexander Golubev <fatzer2@gmail.com>
Date: Sun, 10 Aug 2025 11:00:18 +0300
Subject: trinity-base/tdelibs: multiple fixes

* inherit multilib eclass explicitly
* move networkmanager to DEPEND in 14.1.4 due to mistake in upstream
* in 9999 declare -DNM_VPN_SERVICE_DIR if networkmanager is not
  installed
* move dependencies for smart cards to DEPEND
* add patches to fix build without SSL or PCRE2
* minor refactoring

Signed-off-by: Alexander Golubev <fatzer2@gmail.com>
---
 ...1.4-Fix-build-WITH_LIBBFD-and-libbfd-2.34.patch | 74 ++++++++++++++++++++++
 ...libs-14.1.4-Fix-build-with-PCRE2-disabled.patch | 65 +++++++++++++++++++
 ...delibs-14.1.4-Fix-build-with-SSL-disabled.patch | 36 +++++++++++
 trinity-base/tdelibs/tdelibs-14.1.1.ebuild         | 18 ++++--
 trinity-base/tdelibs/tdelibs-14.1.2.ebuild         | 18 ++++--
 trinity-base/tdelibs/tdelibs-9999.ebuild           | 34 ++++++----
 6 files changed, 226 insertions(+), 19 deletions(-)
 create mode 100644 trinity-base/tdelibs/files/tdelibs-14.1.4-Fix-build-WITH_LIBBFD-and-libbfd-2.34.patch
 create mode 100644 trinity-base/tdelibs/files/tdelibs-14.1.4-Fix-build-with-PCRE2-disabled.patch
 create mode 100644 trinity-base/tdelibs/files/tdelibs-14.1.4-Fix-build-with-SSL-disabled.patch

diff --git a/trinity-base/tdelibs/files/tdelibs-14.1.4-Fix-build-WITH_LIBBFD-and-libbfd-2.34.patch b/trinity-base/tdelibs/files/tdelibs-14.1.4-Fix-build-WITH_LIBBFD-and-libbfd-2.34.patch
new file mode 100644
index 00000000..2ed6be24
--- /dev/null
+++ b/trinity-base/tdelibs/files/tdelibs-14.1.4-Fix-build-WITH_LIBBFD-and-libbfd-2.34.patch
@@ -0,0 +1,74 @@
+From 0a9401e9c5afd3504162aab918ad84fa279a140b Mon Sep 17 00:00:00 2001
+From: Alexander Golubev <fatzer2@gmail.com>
+Date: Sat, 9 Aug 2025 08:49:12 +0300
+Subject: [PATCH] Fix build WITH_LIBBFD and libbfd 2.34+
+
+Source: Extracted from upstream Git master
+Closes: https://mirror.git.trinitydesktop.org/gitea/TDE/tdelibs/issues/368
+Signed-off-by: Alexander Golubev <fatzer2@gmail.com>
+---
+ CMakeLists.txt     | 10 ++++++++++
+ config.h.cmake     |  4 ++++
+ tdecore/kdebug.cpp |  7 ++++++-
+ 3 files changed, 20 insertions(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 505977a9c..baecceb88 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1102,6 +1102,16 @@ if( WITH_LIBBFD )
+   endif( NOT HAVE_LIBBFD )
+   set( LIBBFD_LIBRARIES bfd )
+   check_include_file( "demangle.h" HAVE_DEMANGLE_H )
++
++  tde_save_and_set( CMAKE_REQUIRED_LIBRARIES "${LIBBFD_LIBRARIES}" )
++  check_c_source_compiles("
++    #define PACKAGE tdelibs
++    #define PACKAGE_VERSION \"${TDE_VERSION}\"
++    #include <bfd.h>
++    int main() {bfd_section_flags((asection *)0); return 0;} "
++    HAVE_LIBBFD_2_34_API
++  )
++  tde_restore( CMAKE_REQUIRED_LIBRARIES )
+ endif( WITH_LIBBFD )
+ 
+ 
+diff --git a/config.h.cmake b/config.h.cmake
+index cd2ec1c96..7aaf0a23f 100644
+--- a/config.h.cmake
++++ b/config.h.cmake
+@@ -108,6 +108,10 @@
+ /* Define to 1 if libbfd provides demangle.h header */
+ #cmakedefine HAVE_DEMANGLE_H 1
+ 
++/* Define to 1 if libbfd have API of version 2.34+ (i.e.
++ * bfd_section_flags() has only one paremater) */
++#cmakedefine HAVE_LIBBFD_2_34_API 1
++
+ /* Define if getaddrinfo is broken and should be replaced */
+ #cmakedefine HAVE_BROKEN_GETADDRINFO 1
+ 
+diff --git a/tdecore/kdebug.cpp b/tdecore/kdebug.cpp
+index 43b50880d..e30ebeae0 100644
+--- a/tdecore/kdebug.cpp
++++ b/tdecore/kdebug.cpp
+@@ -693,10 +693,15 @@ void bfdFillAdditionalFunctionsInfo(BacktraceFunctionInfo &func) {
+ 
+ 	// found source file and line for given address
+ 	for (asection *sect = abfd->sections; sect != NULL; sect = sect->next) {
+-
++#ifdef HAVE_LIBBFD_2_34_API
++		if (bfd_section_flags(sect) & SEC_ALLOC) {
++			bfd_vma sectStart = bfd_section_vma(sect);
++			bfd_vma sectEnd   = sectStart + bfd_section_size(sect);
++#else // HAVE_LIBBFD_2_34_API
+ 		if (bfd_get_section_flags(abfd, sect) & SEC_ALLOC) {
+ 			bfd_vma sectStart = bfd_get_section_vma(abfd, sect);
+ 			bfd_vma sectEnd   = sectStart + bfd_section_size(abfd, sect);
++#endif // HAVE_LIBBFD_2_34_API
+ 			if (sectStart <= func.offset && func.offset < sectEnd) {
+ 				bfd_vma sectOffset = func.offset - sectStart;
+ 				const char* functionName;
+-- 
+2.49.1
+
diff --git a/trinity-base/tdelibs/files/tdelibs-14.1.4-Fix-build-with-PCRE2-disabled.patch b/trinity-base/tdelibs/files/tdelibs-14.1.4-Fix-build-with-PCRE2-disabled.patch
new file mode 100644
index 00000000..0a317d3a
--- /dev/null
+++ b/trinity-base/tdelibs/files/tdelibs-14.1.4-Fix-build-with-PCRE2-disabled.patch
@@ -0,0 +1,65 @@
+From 351e6ce3b2757c57071ab33fdde2afe265c048af Mon Sep 17 00:00:00 2001
+From: Alexander Golubev <fatzer2@gmail.com>
+Date: Sun, 10 Aug 2025 14:40:54 +0300
+Subject: [PATCH] Fix build with PCRE2 disabled
+
+Origin: extracted from upstream git
+Signed-off-by: Alexander Golubev <fatzer2@gmail.com>
+---
+ kjs/regexp.cpp | 6 ++++++
+ kjs/regexp.h   | 1 +
+ 2 files changed, 7 insertions(+)
+
+diff --git a/kjs/regexp.cpp b/kjs/regexp.cpp
+index c92a69d6a..04159904f 100644
+--- a/kjs/regexp.cpp
++++ b/kjs/regexp.cpp
+@@ -30,17 +30,21 @@
+ 
+ using namespace KJS;
+ 
++#ifdef HAVE_PCRE2POSIX
+ RegExp::UTF8SupportState RegExp::utf8Support = RegExp::Unknown;
++#endif
+ 
+ RegExp::RegExp(const UString &p, int f)
+   : pat(p), flgs(f), m_notEmpty(false), valid(true), buffer(0), originalPos(0)
+ {
++#ifdef HAVE_PCRE2POSIX
+   // Determine whether libpcre has unicode support if need be..
+   if (utf8Support == Unknown) {
+     uint32_t supported;
+     pcre2_config(PCRE2_CONFIG_COMPILED_WIDTHS, (void*)&supported);
+     utf8Support = (supported & 0x0001) ? Supported : Unsupported;
+   }
++#endif
+ 
+   nrSubPatterns = 0; // determined in match() with POSIX regex.
+ 
+@@ -276,9 +280,11 @@ void RegExp::prepareMatch(const UString &s)
+ {
+   delete[] originalPos; // Just to be sure..
+   delete[] buffer;
++#ifdef HAVE_PCRE2POSIX
+   if (utf8Support == Supported)
+     prepareUtf8(s);
+   else
++#endif
+     prepareASCII(s);
+ 
+ #ifndef NDEBUG
+diff --git a/kjs/regexp.h b/kjs/regexp.h
+index e731eb714..d84fca17c 100644
+--- a/kjs/regexp.h
++++ b/kjs/regexp.h
+@@ -21,6 +21,7 @@
+ #ifndef _KJS_REGEXP_H_
+ #define _KJS_REGEXP_H_
+ 
++#include <stdint.h>
+ #include <sys/types.h>
+ 
+ #include "config.h"
+-- 
+2.49.1
+
diff --git a/trinity-base/tdelibs/files/tdelibs-14.1.4-Fix-build-with-SSL-disabled.patch b/trinity-base/tdelibs/files/tdelibs-14.1.4-Fix-build-with-SSL-disabled.patch
new file mode 100644
index 00000000..440d7f7e
--- /dev/null
+++ b/trinity-base/tdelibs/files/tdelibs-14.1.4-Fix-build-with-SSL-disabled.patch
@@ -0,0 +1,36 @@
+From 57a94cb6f56a2c7e4900148771c44eb689d2aaa7 Mon Sep 17 00:00:00 2001
+From: Alexander Golubev <fatzer2@gmail.com>
+Date: Sun, 10 Aug 2025 13:54:03 +0300
+Subject: [PATCH] Fix build with SSL disabled
+
+Origin: extracted from upstream git
+Signed-off-by: Alexander Golubev <fatzer2@gmail.com>
+---
+ tdeio/kssl/kopenssl.h | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/tdeio/kssl/kopenssl.h b/tdeio/kssl/kopenssl.h
+index d305243e4..986ecdc86 100644
+--- a/tdeio/kssl/kopenssl.h
++++ b/tdeio/kssl/kopenssl.h
+@@ -56,14 +56,14 @@ class KOpenSSLProxyPrivate;
+ #define STACK _STACK
+ #endif
+ #endif
+-#endif
+-
+-#include <kstaticdeleter.h>
+ 
+ #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+ typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *);
+ typedef int X509_LOOKUP_TYPE;
+ #endif
++#endif // KSSL_HAVE_SSL
++
++#include <kstaticdeleter.h>
+ 
+ /**
+  * Dynamically load and wrap OpenSSL.
+-- 
+2.49.1
+
diff --git a/trinity-base/tdelibs/tdelibs-14.1.1.ebuild b/trinity-base/tdelibs/tdelibs-14.1.1.ebuild
index eff318b8..9b7a7334 100644
--- a/trinity-base/tdelibs/tdelibs-14.1.1.ebuild
+++ b/trinity-base/tdelibs/tdelibs-14.1.1.ebuild
@@ -6,7 +6,7 @@ EAPI="8"
 
 TRINITY_MODULE_NAME="tdelibs"
 TRINITY_MODULE_TYPE="core"
-inherit trinity-base-2
+inherit trinity-base-2 multilib
 
 DESCRIPTION="Trinity libraries needed by all TDE programs"
 HOMEPAGE="https://trinitydesktop.org/"
@@ -60,6 +60,13 @@ DEPEND="
 	xcomposite? ( x11-libs/libXcomposite )
 	xrandr? ( x11-libs/libXrandr )
 	zeroconf? ( ~dev-tqt/avahi-tqt-${PV} )
+	hwlib? (
+		pcsc-lite? ( sys-apps/pcsc-lite )
+		pkcs11? (
+			dev-libs/pkcs11-helper
+			dev-libs/opensc
+		)
+	)
 "
 RDEPEND="${DEPEND}
 	sudo? ( app-admin/sudo )
@@ -69,8 +76,6 @@ RDEPEND="${DEPEND}
 		cryptsetup? ( sys-fs/cryptsetup )
 		elogind? ( sys-auth/elogind )
 		networkmanager? ( net-misc/networkmanager )
-		pcsc-lite? ( sys-apps/pcsc-lite )
-		pkcs11? ( dev-libs/pkcs11-helper )
 		systemd? ( sys-apps/systemd )
 		udevil? ( sys-apps/udevil )
 		udisks? ( sys-fs/udisks:2 )
@@ -78,6 +83,11 @@ RDEPEND="${DEPEND}
 	)
 "
 
+PATCHES=(
+	"${FILESDIR}/${PN}-14.1.4-Fix-build-WITH_LIBBFD-and-libbfd-2.34.patch"
+	"${FILESDIR}/${PN}-14.1.4-Fix-build-with-SSL-disabled.patch"
+)
+
 src_configure() {
 	local enable_logind="OFF"
 	if use systemd || use elogind; then
@@ -119,7 +129,7 @@ src_configure() {
 		-DWITH_GAMIN="$(usex fam)"
 		-DWITH_TIFF="$(usex tiff)"
 		-DWITH_UTEMPTER="$(usex utempter)"
-		-DUTEMPTER_HELPER="/usr/sbin/utempter"
+		-DUTEMPTER_HELPER="${PREFIX}/usr/sbin/utempter"
 		-DWITH_UPOWER="$(usex upower)"
 		-DWITH_PKCS="$(usex pkcs11)"
 		-DWITH_CONSOLEKIT=OFF
diff --git a/trinity-base/tdelibs/tdelibs-14.1.2.ebuild b/trinity-base/tdelibs/tdelibs-14.1.2.ebuild
index 079e9fcc..3cdb869c 100644
--- a/trinity-base/tdelibs/tdelibs-14.1.2.ebuild
+++ b/trinity-base/tdelibs/tdelibs-14.1.2.ebuild
@@ -6,7 +6,7 @@ EAPI="8"
 
 TRINITY_MODULE_NAME="tdelibs"
 TRINITY_MODULE_TYPE="core"
-inherit trinity-base-2
+inherit trinity-base-2 multilib
 
 DESCRIPTION="Trinity libraries needed by all TDE programs"
 HOMEPAGE="https://trinitydesktop.org/"
@@ -60,6 +60,13 @@ DEPEND="
 	xcomposite? ( x11-libs/libXcomposite )
 	xrandr? ( x11-libs/libXrandr )
 	zeroconf? ( ~dev-tqt/avahi-tqt-${PV} )
+	hwlib? (
+		pcsc-lite? ( sys-apps/pcsc-lite )
+		pkcs11? (
+			dev-libs/pkcs11-helper
+			dev-libs/opensc
+		)
+	)
 "
 RDEPEND="${DEPEND}
 	sudo? ( app-admin/sudo )
@@ -69,8 +76,6 @@ RDEPEND="${DEPEND}
 		cryptsetup? ( sys-fs/cryptsetup )
 		elogind? ( sys-auth/elogind )
 		networkmanager? ( net-misc/networkmanager )
-		pcsc-lite? ( sys-apps/pcsc-lite )
-		pkcs11? ( dev-libs/pkcs11-helper )
 		systemd? ( sys-apps/systemd )
 		udevil? ( sys-apps/udevil )
 		udisks? ( sys-fs/udisks:2 )
@@ -78,6 +83,11 @@ RDEPEND="${DEPEND}
 	)
 "
 
+PATCHES=(
+	"${FILESDIR}/${PN}-14.1.4-Fix-build-WITH_LIBBFD-and-libbfd-2.34.patch"
+	"${FILESDIR}/${PN}-14.1.4-Fix-build-with-SSL-disabled.patch"
+)
+
 src_configure() {
 	local enable_logind="OFF"
 	if use systemd || use elogind; then
@@ -119,7 +129,7 @@ src_configure() {
 		-DWITH_GAMIN="$(usex fam)"
 		-DWITH_TIFF="$(usex tiff)"
 		-DWITH_UTEMPTER="$(usex utempter)"
-		-DUTEMPTER_HELPER="/usr/sbin/utempter"
+		-DUTEMPTER_HELPER="${PREFIX}/usr/sbin/utempter"
 		-DWITH_UPOWER="$(usex upower)"
 		-DWITH_PKCS="$(usex pkcs11)"
 		-DWITH_CONSOLEKIT=OFF
diff --git a/trinity-base/tdelibs/tdelibs-9999.ebuild b/trinity-base/tdelibs/tdelibs-9999.ebuild
index 16be6893..8e096c31 100644
--- a/trinity-base/tdelibs/tdelibs-9999.ebuild
+++ b/trinity-base/tdelibs/tdelibs-9999.ebuild
@@ -6,7 +6,7 @@ EAPI="8"
 
 TRINITY_MODULE_NAME="tdelibs"
 TRINITY_MODULE_TYPE="core"
-inherit trinity-base-2
+inherit trinity-base-2 multilib
 
 DESCRIPTION="Trinity libraries needed by all TDE programs"
 HOMEPAGE="https://trinitydesktop.org/"
@@ -61,6 +61,13 @@ DEPEND="
 	xcomposite? ( x11-libs/libXcomposite )
 	xrandr? ( x11-libs/libXrandr )
 	zeroconf? ( ~dev-tqt/avahi-tqt-${PV} )
+	hwlib? (
+		pcsc-lite? ( sys-apps/pcsc-lite )
+		pkcs11? (
+			dev-libs/pkcs11-helper
+			dev-libs/opensc
+		)
+	)
 "
 RDEPEND="${DEPEND}
 	sudo? ( app-admin/sudo )
@@ -120,7 +127,7 @@ src_configure() {
 		-DWITH_GAMIN="$(usex fam)"
 		-DWITH_TIFF="$(usex tiff)"
 		-DWITH_UTEMPTER="$(usex utempter)"
-		-DUTEMPTER_HELPER="/usr/sbin/utempter"
+		-DUTEMPTER_HELPER="${PREFIX}/usr/sbin/utempter"
 		-DWITH_UPOWER="$(usex upower)"
 		-DWITH_PKCS="$(usex pkcs11)"
 		-DWITH_CONSOLEKIT=OFF
@@ -133,6 +140,11 @@ src_configure() {
 		-DWITH_TDEICONLOADER_DEBUG="$(usex debug)"
 	)
 
+	# Avoid warning if NM is not installed during build
+	if use networkmanager && ! has_version net-misc/networkmanager; then
+		mycmakeargs+=( -DNM_VPN_SERVICE_DIR=${PREFIX}/usr/lib/NetworkManager/VPN )
+	fi
+
 	trinity-base-2_src_configure
 }
 
@@ -201,20 +213,20 @@ pkg_postinst () {
 		einfo "If you remove the malloc USE flag, GLIBC's malloc will be used."
 		echo
 	fi
-	if ! use hwlib; then
-		for flag in networkmanager upower systemd elogind udisks udevil pkcs11 pcsc-lite cryptsetup; do
-			use $flag && \
-				echo
-				ewarn "USE=\"$flag\" is passed, but it doesn't change anything because" && \
-				ewarn "$flag support in ${P} takes effect only if the TDE hwlib is enabled."
-				echo
-		done
 
-	fi
 	if use hwlib; then
 		echo
 		einfo "Please add your user to the plugdev group to be able"
 		einfo "to use the features of the TDE hwlibdaemons like suspend."
 		echo
+	else # ! use hwlib
+		for flag in networkmanager upower systemd elogind udisks udevil pkcs11 pcsc-lite cryptsetup; do
+			use $flag && {
+				echo
+				ewarn "USE=\"$flag\" is passed, but it doesn't change anything because"
+				ewarn "$flag support in ${P} takes effect only if the TDE hwlib is enabled."
+				echo
+			}
+		done
 	fi
 }
-- 
cgit v1.2.3

