[PATCH 3/3] ecm-common.eclass: Cleanup KF5 support

Andreas Sturmlechner <[email protected]> Sat, 06 Jun 2026 01:05:42 +0200
Newsgroups gmane.linux.gentoo.devel
Message-ID <[email protected]>
Signed-off-by: Andreas Sturmlechner <[email protected]>
---
 eclass/ecm-common.eclass | 158 +++++++++------------------------------
 1 file changed, 36 insertions(+), 122 deletions(-)

diff --git a/eclass/ecm-common.eclass b/eclass/ecm-common.eclass
index 7c81511faa49..d14aa2bd3cdb 100644
--- a/eclass/ecm-common.eclass
+++ b/eclass/ecm-common.eclass
@@ -1,4 +1,4 @@
-# Copyright 2024-2025 Gentoo Authors
+# Copyright 2024-2026 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 # @ECLASS: ecm-common.eclass
@@ -28,47 +28,16 @@ inherit cmake
 # @ECLASS_VARIABLE: KFMIN
 # @DEFAULT_UNSET
 # @DESCRIPTION:
-# Minimum version of Frameworks to require.  Default value is 6.0.0.
-# If set to <5.240, it is assumed dependencies are fulfilled by KF5/Qt5
-# alternatively, thus a block of SLOT=5 shadow dependencies added.
-: "${KFMIN:=6.0.0}"
+# Minimum version of Frameworks to require.  Baseline value is 6.22.0.
+: "${KFMIN:=6.22.0}"
 
-# @ECLASS_VARIABLE: _KFSLOT
-# @INTERNAL
-# @DESCRIPTION:
-# KDE Frameworks main slot dependency for consistently finding all KF5 or KF6
-# in CMakeLists.txt.  Consistency over installed KF packages is established via
-# BDEPEND, then detected in pkg_setup().
-# Is passed as -DQT_MAJOR_VERSION=${_KFSLOT} in src_configure() too.
-_KFSLOT=6
-
-# @ECLASS_VARIABLE: KF5_BDEPEND
-# @PRE_INHERIT
-# @DESCRIPTION:
-# Dynamic KF5 dependency list.
-if [[ ${KF5_BDEPEND} ]]; then
-	[[ ${KF5_BDEPEND@a} == *a* ]] ||
-		die "KF5_BDEPEND must be an array"
-else
-	KF5_BDEPEND=( )
-fi
-
-# @ECLASS_VARIABLE: KF6_BDEPEND
-# @PRE_INHERIT
-# @DESCRIPTION:
-# Dynamic KF6 dependency list.
-if [[ ${KF6_BDEPEND} ]]; then
-	[[ ${KF6_BDEPEND@a} == *a* ]] ||
-		die "KF6_BDEPEND must be an array"
-else
-	KF6_BDEPEND=( )
-fi
+ver_test ${KFMIN} -lt 5.240 && die "KF5 is unsupported!"
 
 # @ECLASS_VARIABLE: ECM_I18N
 # @PRE_INHERIT
 # @DESCRIPTION:
 # Will accept "true" (default) or "false".  If set to "false", do nothing.
-# Otherwise, add kde-frameworks/ki18n:* to BDEPEND, find KF[56]I18n and let
+# Otherwise, add kde-frameworks/ki18n:6 to BDEPEND, find KF6I18n and let
 # ki18n_install(po) generate and install translations.
 : "${ECM_I18N:=true}"
 
@@ -76,8 +45,8 @@ fi
 # @PRE_INHERIT
 # @DESCRIPTION:
 # Will accept "true" or "false" (default).  If set to "false", do nothing.
-# Otherwise, add "+handbook" to IUSE, add kde-frameworks/kdoctools:* to BDEPEND
-# find KF[56]DocTools in CMake, call add_subdirectory(ECM_HANDBOOK_DIRS)
+# Otherwise, add "+handbook" to IUSE, add kde-frameworks/kdoctools:6 to BDEPEND
+# find KF6DocTools in CMake, call add_subdirectory(ECM_HANDBOOK_DIRS)
 # and let let kdoctools_install(po) generate and install translated docbook
 # files.
 : "${ECM_HANDBOOK:=false}"
@@ -119,9 +88,11 @@ fi
 # @DEFAULT_UNSET
 # @PRE_INHERIT
 # @DESCRIPTION:
+# If empty, do nothing.  Otherwise, add kde-frameworks/kcmutils:6 to BDEPEND
+# and set up the CMaḱeLists.txt according to the content of ECM_KCM_TARGETS:
 # Array of <target>:<subdir> tuples to feed to ECMInstallIcons via
-# ecmcommon_generate_desktop_file(<target> <subdir>), which is this
-# eclass adaptation of kcmutils_generate_desktop_file.
+# ecmcommon_generate_desktop_file(<target> <subdir>), which is this eclass'
+# adaptation of kcmutils_generate_desktop_file.
 if [[ ${ECM_KCM_TARGETS} ]]; then
 	[[ ${ECM_KCM_TARGETS@a} == *a* ]] ||
 		die "ECM_KCM_TARGETS must be an array"
@@ -131,13 +102,13 @@ DESCRIPTION="Common files for ${PN/-common/}"
 
 BDEPEND="
 	>=dev-build/cmake-3.31.9-r1
+	dev-qt/qtbase:6
 	>=kde-frameworks/extra-cmake-modules-${KFMIN}:*
 "
 
 case ${ECM_I18N} in
 	true)
-		KF5_BDEPEND+=( "kde-frameworks/ki18n:5" )
-		KF6_BDEPEND+=( "kde-frameworks/ki18n:6" )
+		BDEPEND+=" kde-frameworks/ki18n:6"
 		;;
 	false) ;;
 	*)
@@ -149,8 +120,7 @@ esac
 case ${ECM_HANDBOOK} in
 	true)
 		IUSE+=" +handbook"
-		KF5_BDEPEND+=( "handbook? ( kde-frameworks/kdoctools:5 )" )
-		KF6_BDEPEND+=( "handbook? ( kde-frameworks/kdoctools:6 )" )
+		BDEPEND+=" handbook? ( kde-frameworks/kdoctools:6 )"
 		;;
 	false) ;;
 	*)
@@ -160,22 +130,7 @@ case ${ECM_HANDBOOK} in
 esac
 
 if [[ ${ECM_KCM_TARGETS} ]]; then
-	KF5_BDEPEND+=( "kde-frameworks/kcmutils:5" )
-	KF6_BDEPEND+=( "kde-frameworks/kcmutils:6" )
-fi
-
-KF6_BDEPEND+=( "dev-qt/qtbase:6" )
-
-if $(ver_test ${KFMIN} -lt 5.240) && [[ ${KF6_BDEPEND} && ${KF5_BDEPEND} ]]; then
-	BDEPEND+=" || (
-		( ${KF6_BDEPEND[*]} )
-		(
-			${KF5_BDEPEND[*]}
-			dev-qt/qtcore:5
-		)
-	)"
-else
-	BDEPEND+=" ${KF6_BDEPEND[*]}"
+	BDEPEND+=" kde-frameworks/kcmutils:6"
 fi
 
 # @FUNCTION: _ecm-common_preamble
@@ -190,8 +145,8 @@ _ecm-common_preamble() {
 		find_package(ECM "${KFMIN}" REQUIRED NO_MODULE)
 		set(CMAKE_MODULE_PATH \${ECM_MODULE_PATH})
 
-		# Set by pkg_setup(); Use this if need to differ between KF5 or KF6
-		set(KFSLOT ${_KFSLOT})
+		# TODO EAPI-9: No longer used after KF5 cleanup.
+		set(KFSLOT 6)
 		set(KDE_INSTALL_DOCBUNDLEDIR "${EPREFIX}/usr/share/help" CACHE PATH "")
 
 		include(KDEInstallDirs)
@@ -209,11 +164,11 @@ _ecm-common_preamble() {
 # @FUNCTION: _ecm-common_i18n
 # @INTERNAL
 # @DESCRIPTION:
-# Find KF[56]I18n and call ki18n_install(po).
+# Find KF6I18n and call ki18n_install(po).
 _ecm-common_i18n() {
 	[[ ${ECM_I18N} == true ]] || return
 	cat >> CMakeLists.txt <<- _EOF_ || die
-		find_package(KF\${KFSLOT}I18n REQUIRED)
+		find_package(KF6I18n REQUIRED)
 		ki18n_install(po)
 	_EOF_
 }
@@ -221,13 +176,13 @@ _ecm-common_i18n() {
 # @FUNCTION: _ecm-common_docs
 # @INTERNAL
 # @DESCRIPTION:
-# Find KF[56]DocTools, call kdoctools_install(po) and
+# Find KF6DocTools, call kdoctools_install(po) and
 # add_subdirectory(${ECM_HANDBOOK_DIRS})
 _ecm-common_docs() {
 	{ in_iuse handbook && use handbook; } || return
 
 	cat >> CMakeLists.txt <<- _EOF_ || die
-		find_package(KF\${KFSLOT}DocTools REQUIRED)
+		find_package(KF6DocTools REQUIRED)
 		kdoctools_install(po)
 	_EOF_
 
@@ -244,19 +199,19 @@ _ecm-common_docs() {
 # @FUNCTION: _ecm-common_generate_desktop_file
 # @INTERNAL
 # @DESCRIPTION:
-# Find KF[56]KCMUtils and iterate through ECM_KCM_TARGETS to generate
+# Find KF6KCMUtils and iterate through ECM_KCM_TARGETS to generate
 # desktop files out of json.
 _ecm-common_generate_desktop_file() {
 	[[ ${ECM_KCM_TARGETS} ]] || return
 
 	cat >> CMakeLists.txt <<- _EOF_ || die
-		find_package(KF\${KFSLOT}KCMUtils REQUIRED)
+		find_package(KF6KCMUtils REQUIRED)
 		# extracted from kcmutils_generate_desktop_file(kcm_target)
 		function(ecmcommon_generate_desktop_file kcm_target subdir)
 			set(IN_FILE \${CMAKE_CURRENT_SOURCE_DIR}/\${subdir}\${kcm_target}.json)
 			set(OUT_FILE \${CMAKE_CURRENT_BINARY_DIR}/\${kcm_target}.desktop)
 			add_custom_target(\${kcm_target}-kcm-desktop-gen ALL
-				COMMAND KF\${KFSLOT}::kcmdesktopfilegenerator \${IN_FILE} \${OUT_FILE}
+				COMMAND KF6::kcmdesktopfilegenerator \${IN_FILE} \${OUT_FILE}
 				DEPENDS \${IN_FILE})
 			install(FILES \${OUT_FILE} DESTINATION \${KDE_INSTALL_APPDIR})
 		endfunction()
@@ -316,64 +271,19 @@ _ecm-common_summary() {
 	_EOF_
 }
 
-# @FUNCTION: _ecm-common-check_deps
-# @INTERNAL
-# @DESCRIPTION:
-# Check existence of requested KF6 dependencies.
-_ecm-common-check_deps() {
-	local chk=0
-	case ${1} in
-		i18n)
-			if [[ ${ECM_I18N} ]]; then
-				chk=$(has_version -b "kde-frameworks/ki18n:6")
-			fi
-			;;
-		doctools)
-			if [[ ${ECM_HANDBOOK} ]] && in_iuse handbook; then
-				if use handbook; then
-					chk=$(has_version -b "kde-frameworks/kdoctools:6")
-				fi
-			fi
-			;;
-		kcmutils)
-			if [[ ${ECM_KCM_TARGETS} ]]; then
-				chk=$(has_version -b "kde-frameworks/kcmutils:6")
-			fi
-			;;
-		*)
-			eerror "Unknown value for _ecm-common-check_deps()"
-			die "Value ${1} is not supported"
-			;;
-	esac
-	return ${chk}
-}
-
 # @FUNCTION: ecm-common-check_deps
 # @DESCRIPTION:
-# Override this to add more KF6 has_version checks to pkg_setup(),
-# corresponding with any additional KF6_BDEPEND defined pre-inherit.
-# If false, we'll assume KF5 dependencies are fulfilled via BDEPEND.
+# No-op function since KF5 support was dropped.
 ecm-common-check_deps() {
 	return 0
 }
 
+if [[ ${EAPI} == 8 ]]; then
 # @FUNCTION: ecm-common_pkg_setup
 # @DESCRIPTION:
-# If KFMIN is not lower than 5.240 (default is 6.0.0), do nothing.
-# Otherwise, dDetermine which of KF5 or KF6-based depgraph is complete,
-# preferring KF6.  The result is stored in _KFSLOT, which is then handed
-# to CMakeLists.txt as KFSLOT var for further use.
-ecm-common_pkg_setup() {
-	$(ver_test ${KFMIN} -ge 5.240) && return
-
-	if _ecm-common-check_deps i18n && _ecm-common-check_deps doctools &&
-		_ecm-common-check_deps kcmutils && ecm-common-check_deps
-	then
-		_KFSLOT=6
-	else
-		_KFSLOT=5
-	fi
-}
+# No-op function since KF5 support was dropped.
+ecm-common_pkg_setup() { :; }
+fi
 
 # @FUNCTION: ecm-common_src_prepare
 # @DESCRIPTION:
@@ -396,10 +306,10 @@ ecm-common_src_prepare() {
 
 # @FUNCTION: ecm-common_src_configure
 # @DESCRIPTION:
-# Passes -DQT_MAJOR_VERSION=${_KFSLOT} only.
+# Passes -DQT_MAJOR_VERSION=6 only.
 ecm-common_src_configure() {
 	# necessary for at least KF6KCMUtils
-	local cmakeargs=( -DQT_MAJOR_VERSION=${_KFSLOT} )
+	local cmakeargs=( -DQT_MAJOR_VERSION=6 )
 
 	# allow the ebuild to override what we set here
 	mycmakeargs=("${cmakeargs[@]}" "${mycmakeargs[@]}")
@@ -409,4 +319,8 @@ ecm-common_src_configure() {
 
 fi
 
-EXPORT_FUNCTIONS pkg_setup src_prepare src_configure
+if [[ ${EAPI} == 8 ]]; then
+	EXPORT_FUNCTIONS pkg_setup
+fi
+
+EXPORT_FUNCTIONS src_prepare src_configure
-- 
2.54.0
signature.asc (application/pgp-signature, 829 B)
-----BEGIN PGP SIGNATURE-----

iQIvBAABCgCZFiEE34gXUSooizdYNDu3S5FW4z0PgBkFAmojVkYbFIAAAAAABAAO
bWFudTIsMi41KzEuMTIsMiwyXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25z
Lm9wZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXRERjg4MTc1MTJBMjg4QjM3NTgzNDNC
Qjc0QjkxNTZFMzNEMEY4MDE5AAoJEEuRVuM9D4AZS7wL/3jQJiuLhlOjwdFQPq1W
RW+02JgnavQAusmK4JxOIbcb2pgZVkcnEox6g/Jpk0REehQ86W9NtAvSwYhigZlc
z89oO0xRil6ikx+/PwNYo95sQrvNx7UQgaD+BYJ6NjSbJ5OPgukcrLEFBa230BUJ
e1+lrxXLo8wrufixvw+8IBP1K0+mlNGCT5HjgJr7aaeYjfU+5prFEPlhTGKF4Jqb
EvSVVi5F9W5Mc9l6VFDexAFCNCIajG0fdKFaWtPaXk6+kvxGcolrirmL4TR0QVPR
iUK88cJQKHdwLg5UhsBruJsg/BdnH+H//VeuKKV53Z05dNt02GuxgE/p25V15khR
DPPdAhMtxO5jC5KLaLNFtsGPNvM3N+2QNohUKfxOHDxTuVikQOYYUk9TroNEF+/C
XUFYCHll8cVyzzEF29fpBiZC7x7DYhZ6Svj5ngdkbxYmAwt8Q+5F5aWxSDiCkEOH
lyuwWisSLpqNXx+6oTaWztuRXT0/u24OjMubnCBDU8/1dA==
=CeRe
-----END PGP SIGNATURE-----