From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <gentoo-commits+bounces-1539434-garchives=archives.gentoo.org@lists.gentoo.org>
Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
	 key-exchange X25519 server-signature RSA-PSS (2048 bits))
	(No client certificate requested)
	by finch.gentoo.org (Postfix) with ESMTPS id D54F815801B
	for <garchives@archives.gentoo.org>; Sat, 22 Jul 2023 14:13:21 +0000 (UTC)
Received: from pigeon.gentoo.org (localhost [127.0.0.1])
	by pigeon.gentoo.org (Postfix) with SMTP id 09E67E07A9;
	Sat, 22 Jul 2023 14:13:21 +0000 (UTC)
Received: from smtp.gentoo.org (dev.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
	 key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
	(No client certificate requested)
	by pigeon.gentoo.org (Postfix) with ESMTPS id E083CE07A9
	for <gentoo-commits@lists.gentoo.org>; Sat, 22 Jul 2023 14:13:20 +0000 (UTC)
Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
	 key-exchange X25519 server-signature RSA-PSS (4096 bits))
	(No client certificate requested)
	by smtp.gentoo.org (Postfix) with ESMTPS id 5E7B4340AF0
	for <gentoo-commits@lists.gentoo.org>; Sat, 22 Jul 2023 14:13:19 +0000 (UTC)
Received: from localhost.localdomain (localhost [IPv6:::1])
	by oystercatcher.gentoo.org (Postfix) with ESMTP id E12C2BEE
	for <gentoo-commits@lists.gentoo.org>; Sat, 22 Jul 2023 14:13:17 +0000 (UTC)
From: "Marco Leise" <marco.leise@gmx.de>
To: gentoo-commits@lists.gentoo.org
Content-Transfer-Encoding: 8bit
Content-type: text/plain; charset=UTF-8
Reply-To: gentoo-dev@lists.gentoo.org, "Marco Leise" <marco.leise@gmx.de>
Message-ID: <1690034983.9e1a32ae03e9dd8798a95c6aab5953cd74646bdc.mleise@gentoo>
Subject: [gentoo-commits] repo/user/dlang:master commit in: eclass/
X-VCS-Repository: repo/user/dlang
X-VCS-Files: eclass/dlang-compilers.eclass eclass/dlang.eclass eclass/dmd.eclass
X-VCS-Directories: eclass/
X-VCS-Committer: mleise
X-VCS-Committer-Name: Marco Leise
X-VCS-Revision: 9e1a32ae03e9dd8798a95c6aab5953cd74646bdc
X-VCS-Branch: master
Date: Sat, 22 Jul 2023 14:13:17 +0000 (UTC)
Precedence: bulk
List-Post: <mailto:gentoo-commits@lists.gentoo.org>
List-Help: <mailto:gentoo-commits+help@lists.gentoo.org>
List-Unsubscribe: <mailto:gentoo-commits+unsubscribe@lists.gentoo.org>
List-Subscribe: <mailto:gentoo-commits+subscribe@lists.gentoo.org>
List-Id: Gentoo Linux mail <gentoo-commits.gentoo.org>
X-BeenThere: gentoo-commits@lists.gentoo.org
X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply
X-Archives-Salt: 0f496412-24d4-4ccb-b3fd-cc4e501c0637
X-Archives-Hash: d6f19d03c4f59e83785513f8ff2f563c

commit:     9e1a32ae03e9dd8798a95c6aab5953cd74646bdc
Author:     Marco Leise <marco.leise <AT> gmx <DOT> de>
AuthorDate: Sat Jul 22 14:09:43 2023 +0000
Commit:     Marco Leise <marco.leise <AT> gmx <DOT> de>
CommitDate: Sat Jul 22 14:09:43 2023 +0000
URL:        https://gitweb.gentoo.org/repo/user/dlang.git/commit/?id=9e1a32ae

Fixed pkgcheck documentation errors.

Signed-off-by: Marco Leise <marco.leise <AT> gmx.de>

 eclass/dlang-compilers.eclass |   9 ++++
 eclass/dlang.eclass           | 111 +++++++++++++++++++++++++++++-------------
 eclass/dmd.eclass             |  22 +++++++++
 3 files changed, 107 insertions(+), 35 deletions(-)

diff --git a/eclass/dlang-compilers.eclass b/eclass/dlang-compilers.eclass
index 5d1c924..59ace86 100644
--- a/eclass/dlang-compilers.eclass
+++ b/eclass/dlang-compilers.eclass
@@ -8,6 +8,15 @@
 if [[ ${_ECLASS_ONCE_DLANG_COMPILERS} != "recur -_+^+_- spank" ]] ; then
 _ECLASS_ONCE_DLANG_COMPILERS="recur -_+^+_- spank"
 
+# @FUNCTION: dlang-compilers_declare_versions
+# @DESCRIPTION:
+# Exports an associative array of all available Dlang compiler versions and their corresponding language support as well
+# as the list of stable and unstable keywords. The language support is basically the DMD front-end version that the
+# compiler is based on. For DMD it will be the same as the compiler version, while for GDC and LDC2 it will differ.
+# The keywords are required, because we offer many compilers to be used for Dlang packages and pull them in as build
+# time dependencies. A stable package cannot depend on an unstable package though, so short of manually looking for
+# KEYWORDS in compiler ebuilds we just keep them up-to-date here. GDC in particular needs constant attention as
+# architectures get markes stable all the time.
 dlang-compilers_declare_versions() {
 	declare -gA _dlang_dmd_frontend
 	declare -gA _dlang_gdc_frontend

diff --git a/eclass/dlang.eclass b/eclass/dlang.eclass
index 751dde4..b86f3bc 100644
--- a/eclass/dlang.eclass
+++ b/eclass/dlang.eclass
@@ -20,6 +20,15 @@
 # and RDEPEND for Dlang compilers based on above variables. The ebuild is responsible
 # for providing them as required by the function it uses from this eclass.
 
+# @ECLASS_VARIABLE: DLANG_COMPILER_USE
+# @DESCRIPTION:
+# Holds the active Dlang compiler for an application as a USE flag to be passed on to depencencies (libraries).
+# Using this variable one can ensure that all required libraries must be compiled with the same compiler.
+
+# @ECLASS_VARIABLE: DLANG_IMPORT_DIR
+# @DESCRIPTION:
+# The path that is used to install include files. A sub-directory specific to the package should be used.
+
 if [[ ${_ECLASS_ONCE_DLANG} != "recur -_+^+_- spank" ]] ; then
 _ECLASS_ONCE_DLANG="recur -_+^+_- spank"
 
@@ -66,8 +75,6 @@ dlang-compilers_declare_versions
 #   as a prefix for a single argument that should be passed to the linker.
 #   dmd: -L, gdc: -Xlinker, ldc: -L=
 # DLANG_LIB_DIR: The compiler and compiler version specific library directory.
-# DLANG_IMPORT_DIR: This is actually set globally. Place includes in a
-#   sub-directory.
 dlang_foreach_config() {
 	debug-print-function ${FUNCNAME} "${@}"
 
@@ -96,8 +103,9 @@ dlang_foreach_config() {
 	multibuild_foreach_variant multibuild_wrapper "${@}"
 }
 
-export DLANG_IMPORT_DIR="usr/include/dlang"
-
+# @FUNCTION: dlang_single_config
+# @DESCRIPTION:
+# Wrapper for build phases when only a single build configuraion is used. See `dlang_foreach_config()` for more details.
 dlang_single_config() {
 	debug-print-function ${FUNCNAME} "${@}"
 
@@ -106,6 +114,7 @@ dlang_single_config() {
 	_dlang_use_build_vars "${@}"
 }
 
+export DLANG_IMPORT_DIR="usr/include/dlang"
 
 # @FUNCTION: dlang_src_prepare
 # @DESCRIPTION:
@@ -306,24 +315,25 @@ declare -a _dlang_compiler_iuse
 declare -a _dlang_compiler_iuse_mask
 declare -a _dlang_depends
 
+# @FUNCTION: _dlang_compiler_masked_archs_for_version_range
+# @DESCRIPTION:
+# Given a Dlang compiler represented through an IUSE flag (e.g. "ldc2-1_1")
+# and DEPEND atom (e.g. "dev-lang/ldc2:1.1="), this function tests if the
+# current ebuild can depend and thus be compiled with that compiler on
+# one or more architectures.
+# A compiler that is less stable than the current ebuild for all
+# architectures, is dropped completely. A compiler that disqualifies
+# for only some, but not all architectures, on the other hand, is disabled
+# though REQUIRED_USE (e.g. "!amd64? ( ldc2-1_1? ( dev-lang/ldc2:1.1= ) )").
+# Available compilers are accumulated in the _dlang_compiler_iuse array,
+# which is later turned into the IUSE variable.
+# Partially available compilers are additionally masked out for particular
+# architectures by adding them to the _dlang_compiler_iuse_mask array,
+# which is later appended to REQUIRED_USE.
+# Finally, the _dlang_depends array receives the USE-flag enabled
+# dependencies on Dlang compilers, which is later turned into DEPEND and
+# RDEPEND.
 _dlang_compiler_masked_archs_for_version_range() {
-	# Given a Dlang compiler represented through an IUSE flag (e.g. "ldc2-1_1")
-	# and DEPEND atom (e.g. "dev-lang/ldc2:1.1="), this function tests if the
-	# current ebuild can depend and thus be compiled with that compiler on
-	# one or more architectures.
-	# A compiler that is less stable than the current ebuild for all
-	# architectures, is dropped completely. A compiler that disqualifies
-	# for only some, but not all architectures, on the other hand, is disabled
-	# though REQUIRED_USE (e.g. "!amd64? ( ldc2-1_1? ( dev-lang/ldc2:1.1= ) )").
-	# Available compilers are accumulated in the _dlang_compiler_iuse array,
-	# which is later turned into the IUSE variable.
-	# Partially available compilers are additionally masked out for particular
-	# architectures by adding them to the _dlang_compiler_iuse_mask array,
-	# which is later appended to REQUIRED_USE.
-	# Finally, the _dlang_depends array receives the USE-flag enabled
-	# dependencies on Dlang compilers, which is later turned into DEPEND and
-	# RDEPEND.
-
 	local iuse=$1
 	if [[ "$iuse" == gdc* ]]; then
 		local depend="$iuse? ( $2 dev-util/gdmd:$(ver_cut 1 ${iuse#gdc-}) )"
@@ -384,13 +394,13 @@ _dlang_compiler_masked_archs_for_version_range() {
 	_dlang_depends+=( "$depend" )
 }
 
+# @FUNCTION: _dlang_filter_compilers
+# @DESCRIPTION:
+# Given a range of Dlang front-end version that the current ebuild can be built with, this function goes through each
+# compatible Dlang compilers as provided by the file dlang-compilers.eclass and then calls
+# _dlang_compiler_masked_archs_for_version_range where they will be further scrutinized for architecture stability
+# requirements and then either dropped as option or partially masked.
 _dlang_filter_compilers() {
-	# Given a range of Dlang front-end version that the current ebuild can be built with,
-	# this function goes through each compatible Dlang compilers as provided by the file
-	# dlang-compilers.eclass and then calls _dlang_compiler_masked_archs_for_version_range
-	# where they will be further scrutinized for architecture stability requirements and
-	# then either dropped as option or partially masked.
-
 	local dc_version mapping iuse depend
 
 	# filter for DMD (hardcoding support for x86 and amd64 only)
@@ -428,15 +438,16 @@ _dlang_filter_compilers() {
 	done
 }
 
+# @FUNCTION: _dlang_filter_versions
+# @DESCRIPTION:
+# This function sets up the preliminary REQUIRED_USE, DEPEND and RDEPEND ebuild
+# variables with compiler requirements for the current ebuild.
+# If DLANG_VERSION_RANGE is set in the ebuild, this variable will be parsed to
+# limit the search on the known compatible Dlang front-end versions.
+# DLANG_PACKAGE_TYPE determines whether the current ebuild can be compiled for
+# multiple Dlang compilers (i.e. is a library to be installed for different
+# versions of dmd, gdc or ldc2) or a single compiler (i.e. is an application).
 _dlang_filter_versions() {
-	# This function sets up the preliminary REQUIRED_USE, DEPEND and RDEPEND ebuild
-	# variables with compiler requirements for the current ebuild.
-	# If DLANG_VERSION_RANGE is set in the ebuild, this variable will be parsed to
-	# limit the search on the known compatible Dlang front-end versions.
-	# DLANG_PACKAGE_TYPE determines whether the current ebuild can be compiled for
-	# multiple Dlang compilers (i.e. is a library to be installed for different
-	# versions of dmd, gdc or ldc2) or a single compiler (i.e. is an application).
-
 	local range start stop matches d_version versions do_start
 	local -A valid
 
@@ -488,6 +499,12 @@ _dlang_filter_versions() {
 	DLANG_COMPILER_USE="${DLANG_COMPILER_USE:0:-1}"
 }
 
+# @FUNCTION: _dlang_phase_wrapper
+# @DESCRIPTION:
+# A more or less typical ebuild phase wrapper that invokes `d_src_*` phases if defined in an ebuild or calls Portage's
+# default implementation otherwise. when multiple build configurations are provided it also takes care of invoking
+# phases once for each configuration as well as calling `d_src_*_all` if defined after the phase has been run for each
+# individual build configuration.
 _dlang_phase_wrapper() {
 	dlang_phase() {
 		if declare -f d_src_${1} >/dev/null ; then
@@ -508,6 +525,11 @@ _dlang_phase_wrapper() {
 	fi
 }
 
+# @FUNCTION: _dlang_compiler_to_dlang_version
+# @DESCRIPTION:
+# Given two arguments, a compiler vendor and a compiler version, this function retrieves the corresponding supported
+# Dlang front-end (language) version. This is used in filtering compilers offering incompatible language versions for
+# some packages. The resulting language version is echo'd.
 _dlang_compiler_to_dlang_version() {
 	local mapping
 	case "$1" in
@@ -525,6 +547,12 @@ _dlang_compiler_to_dlang_version() {
 	echo "${mapping}"
 }
 
+# @FUNCTION: _dlang_build_configurations
+# @DESCRIPTION:
+# Creates a list of all the build configurations we are going to compile. As all Dlang compilers have different ABIs,
+# potentially changing from one release to the next, I decided to distinguish the compiler vendor, compiler version and
+# architecture. An application typically only uses on build configuration, but libraries like GtkD may be installed for
+# many compiler versions as well as in 32-bit and 64-bit at the same time on multilib. The result is echo'd.
 _dlang_build_configurations() {
 	local variants version_component use_flag use_flags
 
@@ -574,6 +602,10 @@ _dlang_build_configurations() {
 	echo ${variants}
 }
 
+# @FUNCTION: _dlang_use_build_vars
+# @DESCRIPTION:
+# Sets and exports important environment variables pertaining to the current build configuration.
+# LDFLAGS are also converted into their compiler specific equivalents here.
 _dlang_use_build_vars() {
 	# Now we define some variables and then call the function.
 	# LIBDIR_${ABI} is used by the dolib.* functions, that's why we override it per compiler.
@@ -667,12 +699,21 @@ _dlang_use_build_vars() {
 	"${@}"
 }
 
+# @FUNCTION: _dlang_prefix_words
+# @DESCRIPTION:
+# A simple helper function that prefixes the first argument to all other arguments and echo's the resulting line.
 _dlang_prefix_words() {
 	for arg in ${*:2}; do
 		echo -n " $1$arg"
 	done
 }
 
+# @FUNCTION: _dlang_additional_flags
+# @DESCRIPTION:
+# This function is internally used by the dlang_compile_bin/lib/so functions. When `debug` is among the enabled IUSE
+# flags, this function ensures that a debug build of the Dlang package is produced. It also provides the additional
+# flags for any imports and libraries mentioned in an ebuild in the compiler specific syntax. The resulting flags are
+# echo'd.
 _dlang_additional_flags() {
 	# For info on debug use flags see:
 	# https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces#debug_USE_flag

diff --git a/eclass/dmd.eclass b/eclass/dmd.eclass
index 15770c1..f972961 100644
--- a/eclass/dmd.eclass
+++ b/eclass/dmd.eclass
@@ -6,6 +6,18 @@
 # Helps with the maintenance of the various DMD versions by capturing common
 # logic.
 
+# @ECLASS_VARIABLE: MAJOR
+# @DESCRIPTION:
+# Major DMD version (usually 2)
+
+# @ECLASS_VARIABLE: MINOR
+# @DESCRIPTION:
+# Minor DMD version without leading zeroes (e.g. 78)
+
+# @ECLASS_VARIABLE: MULTILIB_COMPAT
+# @DESCRIPTION:
+# See Gentoo's multilib-build.eclass
+
 if [[ ${_ECLASS_ONCE_DMD} != "recur -_+^+_- spank" ]] ; then
 _ECLASS_ONCE_DMD="recur -_+^+_- spank"
 
@@ -22,14 +34,24 @@ MULTILIB_COMPAT=( abi_x86_{32,64} )
 
 inherit multilib-build eapi7-ver toolchain-funcs
 
+# @FUNCTION: dmd_eq
+# @DESCRIPTION:
+# Returns `true` if the DMD version we are installing is equal to the one given as the argument.
 dmd_eq() {
 	[[ ${MAJOR} -eq ${1%.*} ]] && [[ ${MINOR} -eq $((10#${1#*.})) ]]
 }
 
+# @FUNCTION: dmd_ge
+# @DESCRIPTION:
+# Returns `true` if the DMD version we are installing is greater or equal to the one given as the argument.
 dmd_ge() {
 	[[ ${MAJOR} -ge ${1%.*} ]] && [[ ${MINOR} -ge $((10#${1#*.})) ]]
 }
 
+# @FUNCTION: dmd_gen_exe_dir
+# @DESCRIPTION:
+# Returns the relative directory that the compiler executable will be found in. This directory is used both for
+# installing the binary as well as setting the compiler during compilation of druntime and Phobos.
 dmd_gen_exe_dir() {
 	if dmd_ge 2.074; then
 		echo dmd/generated/linux/release/$(dmd_arch_to_model)