* [gentoo-commits] repo/user/dlang:master commit in: eclass/, profiles/
@ 2022-02-06 15:50 Marco Leise
0 siblings, 0 replies; 4+ messages in thread
From: Marco Leise @ 2022-02-06 15:50 UTC (permalink / raw
To: gentoo-commits
commit: e7cac6f2e7069b79de6b0120097fc2f2e1e700a1
Author: Niko Böckerman <niko.bockerman <AT> protonmail <DOT> com>
AuthorDate: Thu Feb 3 19:29:06 2022 +0000
Commit: Marco Leise <marco.leise <AT> gmx <DOT> de>
CommitDate: Thu Feb 3 19:36:26 2022 +0000
URL: https://gitweb.gentoo.org/repo/user/dlang.git/commit/?id=e7cac6f2
Add ldc2 1.25 and 1.26 as possible compilers
Signed-off-by: Niko Böckerman <niko.bockerman <AT> protonmail.com>
eclass/dlang-compilers.eclass | 2 ++
profiles/use.desc | 2 ++
2 files changed, 4 insertions(+)
diff --git a/eclass/dlang-compilers.eclass b/eclass/dlang-compilers.eclass
index 22b3d66..f74b9a4 100644
--- a/eclass/dlang-compilers.eclass
+++ b/eclass/dlang-compilers.eclass
@@ -62,6 +62,8 @@ dlang-compilers_declare_versions() {
["1.22"]="2.092 amd64 ~arm ~arm64 ~ppc64 x86"
["1.23"]="2.093 amd64 ~arm ~arm64 ~ppc64 x86"
["1.24"]="2.094 amd64 ~arm ~arm64 ~ppc64 x86"
+ ["1.25"]="2.095 ~amd64 ~arm ~arm64 ~ppc64 ~x86"
+ ["1.26"]="2.096 ~amd64 ~arm ~arm64 ~ppc64 ~x86"
)
}
diff --git a/profiles/use.desc b/profiles/use.desc
index 7aa58d7..6141d18 100644
--- a/profiles/use.desc
+++ b/profiles/use.desc
@@ -40,3 +40,5 @@ ldc2-1_21 - Build for ldc2 1.21
ldc2-1_22 - Build for ldc2 1.22
ldc2-1_23 - Build for ldc2 1.23
ldc2-1_24 - Build for ldc2 1.24
+ldc2-1_25 - Build for ldc2 1.25
+ldc2-1_26 - Build for ldc2 1.26
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [gentoo-commits] repo/user/dlang:master commit in: eclass/, profiles/
@ 2022-10-13 15:56 Marco Leise
0 siblings, 0 replies; 4+ messages in thread
From: Marco Leise @ 2022-10-13 15:56 UTC (permalink / raw
To: gentoo-commits
commit: 655270085d33b7b3b166df4d5ef5086121cab380
Author: Horodniceanu Andrei <a.horodniceanu <AT> protonmail <DOT> com>
AuthorDate: Sun Oct 9 15:56:46 2022 +0000
Commit: Marco Leise <marco.leise <AT> gmx <DOT> de>
CommitDate: Sun Oct 9 15:56:46 2022 +0000
URL: https://gitweb.gentoo.org/repo/user/dlang.git/commit/?id=65527008
Fix dlang-compilers.eclass keyword mismatch, remove obsolete dmd-2_063 reference.
Signed-off-by: Horodniceanu Andrei <a.horodniceanu <AT> protonmail.com>
eclass/dlang-compilers.eclass | 6 +++---
profiles/use.desc | 1 -
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/eclass/dlang-compilers.eclass b/eclass/dlang-compilers.eclass
index 7ae7285..a872872 100644
--- a/eclass/dlang-compilers.eclass
+++ b/eclass/dlang-compilers.eclass
@@ -47,9 +47,9 @@ dlang-compilers_declare_versions() {
["2.094"]="2.094 x86 amd64"
["2.095"]="2.095 x86 amd64"
["2.096"]="2.096 x86 amd64"
- ["2.097"]="2.097 ~x86 ~amd64"
- ["2.098"]="2.098 ~x86 ~amd64"
- ["2.099"]="2.099 ~x86 ~amd64"
+ ["2.097"]="2.097 x86 amd64"
+ ["2.098"]="2.098 x86 amd64"
+ ["2.099"]="2.099 x86 amd64"
)
# GDC (hppa, sparc: masked "d" USE-flag)
diff --git a/profiles/use.desc b/profiles/use.desc
index d9c78c3..f8d195d 100644
--- a/profiles/use.desc
+++ b/profiles/use.desc
@@ -1,4 +1,3 @@
-dmd-2_063 - Build for DMD 2.063
dmd-2_064 - Build for DMD 2.064
dmd-2_065 - Build for DMD 2.065
dmd-2_066 - Build for DMD 2.066
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [gentoo-commits] repo/user/dlang:master commit in: eclass/, profiles/
@ 2025-05-12 4:01 Horodniceanu Andrei
0 siblings, 0 replies; 4+ messages in thread
From: Horodniceanu Andrei @ 2025-05-12 4:01 UTC (permalink / raw
To: gentoo-commits
commit: 218e2a8f3330936e197caaa9f5873ae0f727264d
Author: Andrei Horodniceanu <a.horodniceanu <AT> proton <DOT> me>
AuthorDate: Sat Apr 26 13:07:56 2025 +0000
Commit: Horodniceanu Andrei <a.horodniceanu <AT> proton <DOT> me>
CommitDate: Sun May 11 16:03:35 2025 +0000
URL: https://gitweb.gentoo.org/repo/user/dlang.git/commit/?id=218e2a8f
dlang-compilers-r1.eclass: Add gdc-15 target
Signed-off-by: Andrei Horodniceanu <a.horodniceanu <AT> proton.me>
eclass/dlang-compilers-r1.eclass | 3 ++-
profiles/use.desc | 2 ++
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/eclass/dlang-compilers-r1.eclass b/eclass/dlang-compilers-r1.eclass
index 805227e..08f582d 100644
--- a/eclass/dlang-compilers-r1.eclass
+++ b/eclass/dlang-compilers-r1.eclass
@@ -1,4 +1,4 @@
-# Copyright 2024 Gentoo Authors
+# Copyright 2024-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# @ECLASS: dlang-compilers-r1.eclass
@@ -71,6 +71,7 @@ readonly _DLANG_GDC_FRONTENDS=(
"12 2.100 ~amd64 ~arm64 ~x86"
"13 2.103 ~amd64 ~arm64 ~x86"
"14 2.108 ~amd64 ~arm64 ~x86"
+ "15 2.111 ~amd64 ~arm64 ~x86"
)
# @ECLASS_VARIABLE: _DLANG_LDC2_FRONTENDS
diff --git a/profiles/use.desc b/profiles/use.desc
index f39776f..0cd1b6f 100644
--- a/profiles/use.desc
+++ b/profiles/use.desc
@@ -13,6 +13,7 @@ dlang_single_target_dmd-2_111 - Build for DMD 2.111 only
dlang_single_target_gdc-12 - Build for GCC 12 only
dlang_single_target_gdc-13 - Build for GCC 13 only
dlang_single_target_gdc-14 - Build for GCC 14 only
+dlang_single_target_gdc-15 - Build for GCC 15 only
dlang_single_target_ldc2-1_32 - Build for ldc2 1.32 only
dlang_single_target_ldc2-1_33 - Build for ldc2 1.33 only
@@ -39,6 +40,7 @@ dlang_targets_dmd-2_111 - Build with DMD 2.111
dlang_targets_gdc-12 - Build with GCC 12
dlang_targets_gdc-13 - Build with GCC 13
dlang_targets_gdc-14 - Build with GCC 14
+dlang_targets_gdc-15 - Build with GCC 15
dlang_targets_ldc2-1_32 - Build with ldc2 1.32
dlang_targets_ldc2-1_33 - Build with ldc2 1.33
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [gentoo-commits] repo/user/dlang:master commit in: eclass/, profiles/
@ 2025-08-24 15:47 Horodniceanu Andrei
0 siblings, 0 replies; 4+ messages in thread
From: Horodniceanu Andrei @ 2025-08-24 15:47 UTC (permalink / raw
To: gentoo-commits
commit: f47ab7bebacac6cfc355b1d161e3cd50bab0381f
Author: Andrei Horodniceanu <a.horodniceanu <AT> proton <DOT> me>
AuthorDate: Fri Aug 8 15:30:37 2025 +0000
Commit: Horodniceanu Andrei <a.horodniceanu <AT> proton <DOT> me>
CommitDate: Sun Aug 24 15:29:18 2025 +0000
URL: https://gitweb.gentoo.org/repo/user/dlang.git/commit/?id=f47ab7be
Drop old dlang eclasses
Signed-off-by: Andrei Horodniceanu <a.horodniceanu <AT> proton.me>
Part-of: https://github.com/gentoo/dlang/pull/140
Signed-off-by: Andrei Horodniceanu <a.horodniceanu <AT> proton.me>
eclass/dlang-compilers.eclass | 43 ---
eclass/dlang.eclass | 799 ------------------------------------------
eclass/dmd.eclass | 422 ----------------------
profiles/use.desc | 7 -
4 files changed, 1271 deletions(-)
diff --git a/eclass/dlang-compilers.eclass b/eclass/dlang-compilers.eclass
deleted file mode 100644
index 7d70852..0000000
--- a/eclass/dlang-compilers.eclass
+++ /dev/null
@@ -1,43 +0,0 @@
-# @ECLASS: dlang-compilers.eclass
-# @MAINTAINER:
-# Marco Leise <marco.leise@gmx.de>
-# @BLURB: Support data for dlang.eclass
-# @DESCRIPTION:
-# Contains the available D compiler versions with their stable archs.
-
-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
- declare -gA _dlang_ldc2_frontend
-
- # DMD
- _dlang_dmd_frontend=(
- ["2.107"]="2.107 ~x86 ~amd64"
- )
-
- # GDC (hppa, sparc: masked "d" USE-flag)
- _dlang_gdc_frontend=(
- ["11"]="2.076 ~alpha amd64 arm arm64 ~ia64 ~m68k ~mips ppc ppc64 ~riscv ~s390 x86"
- ["12"]="2.100 ~alpha amd64 arm arm64 ~ia64 ~m68k ~mips ~ppc ppc64 ~riscv ~s390 x86"
- ["13"]="2.103 ~alpha amd64 arm arm64 ~ia64 ~loong ~m68k ~mips ~ppc ppc64 ~riscv ~s390 x86"
- )
-
- # LDC
- _dlang_ldc2_frontend=(
- ["1.36"]="2.106 ~amd64 ~arm64 ~x86"
- )
-}
-
-fi
diff --git a/eclass/dlang.eclass b/eclass/dlang.eclass
deleted file mode 100644
index 5c7d3f9..0000000
--- a/eclass/dlang.eclass
+++ /dev/null
@@ -1,799 +0,0 @@
-# @ECLASS: dlang.eclass
-# @MAINTAINER:
-# Marco Leise <marco.leise@gmx.de>
-# @SUPPORTED_EAPIS: 6 7 8
-# @BLURB: install D libraries in multiple locations for each D version and compiler
-# @DESCRIPTION:
-# The dlang eclass faciliates creating dependiencies on D libraries for use
-# with different D compilers and D versions.
-# DLANG_VERSION_RANGE can be set in the ebuild to limit the search on the known
-# compatible Dlang front-end versions. It is a space separated list with each item
-# can be a single version, an open or a closed range (e.g. "2.063 2.065-2.067 2.070-").
-# The range can be open in either direction.
-# 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).
-# "single" - An application is built and the package will be built using one compiler.
-# "multi" - A library is built and multiple compiler versions and vendors can be selected.
-# "dmd" - Special case for dmd, which is like "single", but picking no compiler USE flag
-# is allowed and results in a self-hosting dmd.
-# DLANG_USE_COMPILER, if set, inhibits the generation of IUSE, REQUIRED_USE, DEPEND
-# 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.
-
-# @ECLASS_VARIABLE: DLANG_COMPILER_DISABLED_BACKENDS
-# @PRE_INHERIT
-# @DEFAULT_UNSET
-# @DESCRIPTION:
-# Optional list of D compiler backends to disable as a Bash array.
-# Possible values include dmd, ldc2, and gdc.
-# Set before inheritting the eclass.
-
-if [[ ${_ECLASS_ONCE_DLANG} != "recur -_+^+_- spank" ]] ; then
-_ECLASS_ONCE_DLANG="recur -_+^+_- spank"
-
-case ${EAPI:-0} in
- 6) inherit eapi7-ver ;;
- 7|8) ;;
- *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;;
-esac
-
-inherit flag-o-matic dlang-compilers
-if [[ "${DLANG_PACKAGE_TYPE}" == "multi" ]]; then
- # We handle a multi instance package.
- inherit multilib-minimal
-fi
-
-EXPORT_FUNCTIONS src_prepare src_configure src_compile src_test src_install
-
-# Definition of know compilers and supported front-end versions from dlang-compilers.eclass
-dlang-compilers_declare_versions
-
-# @FUNCTION: dlang_foreach_config
-# @DESCRIPTION:
-# Function that calls its arguments for each D configuration. A few environment
-# variables will be set for each call:
-# ABI: See 'multilib_get_enabled_abis' from multilib-build.eclass.
-# MODEL: This is either 32 or 64.
-# DLANG_VENDOR: Either DigitalMars, GNU or LDC.
-# DC: D compiler command. E.g.
-# /usr/x86_64-pc-linux-gnu/gcc-bin/12/x86_64-pc-linux-gnu-gdc,
-# /usr/lib/dmd/2.067/bin/dmd, or
-# /usr/lib/ldc2/0.17/bin/ldc2
-# DMD: DMD compiler command. E.g.
-# /usr/x86_64-pc-linux-gnu/gcc-bin/12/x86_64-pc-linux-gnu-gdmd,
-# /usr/lib/dmd/2.086/bin/dmd, or
-# /usr/lib/ldc2/0.17/bin/ldmd2
-# DC_VERSION: Release version of the compiler. This is the version excluding any
-# Patch releases. So dmd 2.064.2 would still be 2.064. This version is used
-# to separate potentially incompatible ABIs and to create the library path.
-# Typical versions of gdc or ldc are 4.8.1 or 0.12.
-# DLANG_VERSION: This differs from DC_VERSION in so far as it displays the
-# front-end or language specification version for every compiler. Since the
-# release of D1 it follows the scheme x.yyy and is as of writing at 2.064.
-# DLANG_LINKER_FLAG: The command-line flag, the respective compiler understands
-# 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_foreach_config() {
- debug-print-function ${FUNCNAME} "${@}"
-
- local MULTIBUILD_VARIANTS=($(_dlang_build_configurations))
-
- multibuild_wrapper() {
- debug-print-function ${FUNCNAME} "${@}"
-
- # We need to reset CC, else when dmd calls it, the result is:
- # "x86_64-pc-linux-gnu-gcc -m32": No such file or directory
- if [[ -v CC ]]; then
- local _ORIGINAL_CC="${CC}"
- fi
- multilib_toolchain_setup "${ABI}"
- if [[ -v _ORIGINAL_CC ]]; then
- CC="${_ORIGINAL_CC}"
- else
- unset CC
- fi
- mkdir -p "${BUILD_DIR}" || die
- pushd "${BUILD_DIR}" >/dev/null || die
- _dlang_use_build_vars "${@}"
- popd >/dev/null || die
- }
-
- multibuild_foreach_variant multibuild_wrapper "${@}"
-}
-
-# @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} "${@}"
-
- local MULTIBUILD_VARIANT=$(_dlang_build_configurations)
-
- _dlang_use_build_vars "${@}"
-}
-
-export DLANG_IMPORT_DIR="usr/include/dlang"
-
-# @FUNCTION: dlang_src_prepare
-# @DESCRIPTION:
-# Create a single copy of the package sources for each enabled D configuration.
-dlang_src_prepare() {
- debug-print-function ${FUNCNAME} "${@}"
-
- default_src_prepare
-
- if [[ "${DLANG_PACKAGE_TYPE}" == "multi" ]]; then
- local MULTIBUILD_VARIANTS=($(_dlang_build_configurations))
- multibuild_copy_sources
- fi
-}
-
-dlang_src_configure() {
- _dlang_phase_wrapper configure
-}
-
-dlang_src_compile() {
- _dlang_phase_wrapper compile
-}
-
-dlang_src_test() {
- _dlang_phase_wrapper test
-}
-
-dlang_src_install() {
- _dlang_phase_wrapper install
-}
-
-# @FUNCTION: dlang_exec
-# @DESCRIPTION:
-# Run and print a shell command. Aborts the ebuild on error using "die".
-dlang_exec() {
- echo "${@}"
- ${@} || die
-}
-
-# @FUNCTION: dlang_compile_bin
-# @DESCRIPTION:
-# Compiles a D application. The first argument is the output file name, the
-# other arguments are source files. Additional variables can be set to fine tune
-# the compilation. They will be prepended with the proper flags for each
-# compiler:
-# versions - a list of versions to activate during compilation
-# imports - a list of import paths
-# string_imports - a list of string import paths
-#
-# Aditionally, if the ebuild offers the "debug" use flag, we will automatically
-# raise the debug level to 1 during compilation.
-dlang_compile_bin() {
- [[ "${DLANG_PACKAGE_TYPE}" == "multi" ]] && die "${FUNCTION} does not work with DLANG_PACKAGE_TYPE=\"multi\" currently."
-
- local binname="${1}"
- local sources="${@:2}"
-
- dlang_exec ${DC} ${DCFLAGS} ${sources} $(_dlang_additional_flags) \
- ${LDFLAGS} ${DLANG_OUTPUT_FLAG}${binname}
-}
-
-# @FUNCTION: dlang_compile_lib_a
-# @DESCRIPTION:
-# Compiles a D static library. The first argument is the output file name, the
-# other arguments are source files. Additional variables and the
-# "debug" use flag will be handled as described in dlang_compile_bin().
-dlang_compile_lib_a() {
- local libname="${1}"
- local sources="${@:2}"
-
- if [[ "${DLANG_VENDOR}" == "GNU" ]]; then
- die "Static libraries for GDC is not supported yet."
- fi
- if [[ "${DLANG_PACKAGE_TYPE}" == "multi" ]]; then
- DCFLAGS="${DCFLAGS} -m${MODEL}"
- fi
- dlang_exec ${DC} ${DCFLAGS} ${sources} $(_dlang_additional_flags) \
- ${LDFLAGS} ${DLANG_A_FLAGS} ${DLANG_OUTPUT_FLAG}${libname}
-}
-
-# @FUNCTION: dlang_compile_lib_so
-# @DESCRIPTION:
-# Compiles a D shared library. The first argument is the output file name, the
-# second argument is the soname (typically file name without patch level
-# suffix), the other arguments are source files. Additional variables and the
-# "debug" use flag will be handled as described in dlang_compile_bin().
-dlang_compile_lib_so() {
- local libname="${1}"
- local soname="${2}"
- local sources="${@:3}"
-
- dlang_exec ${DC} ${DCFLAGS} -m${MODEL} ${sources} $(_dlang_additional_flags) \
- ${LDFLAGS} ${DLANG_SO_FLAGS} ${DLANG_LINKER_FLAG}-soname=${soname} \
- ${DLANG_OUTPUT_FLAG}${libname}
-}
-
-# @FUNCTION: dlang_convert_ldflags
-# @DESCRIPTION:
-# Makes linker flags meant for GCC understandable for the current D compiler.
-# Basically it replaces -L with what the D compiler uses as linker prefix.
-dlang_convert_ldflags() {
- if [[ "${DLANG_VENDOR}" == "DigitalMars" ]] || [[ "${DLANG_VENDOR}" == "LDC" ]]; then
- local set prefix flags=()
- if [[ is_dmd ]]; then
- prefix="-L"
- elif [[ is_ldc ]]; then
- prefix="-L="
- fi
- for set in ${LDFLAGS}; do
- if [[ "${set:0:4}" == "-Wl," ]]; then
- set=${set/-Wl,/${prefix}}
- flags+=(${set//,/ ${prefix}})
- elif [[ "${set:0:9}" == "-Xlinker " ]]; then
- flags+=(${set/-Xlinker /${prefix}})
- elif [[ "${set:0:2}" == "-L" ]]; then
- flags+=(${set/-L/${prefix}})
- else
- flags+=(${set})
- fi
- done
- echo "${flags[@]}"
- elif [[ "${DLANG_VENDOR}" == "GNU" ]]; then
- echo "${LDFLAGS}"
- else
- die "Set DLANG_VENDOR to DigitalMars, LDC or GNU prior to calling ${FUNCNAME}()."
- fi
-}
-
-# @FUNCTION: dlang_dmdw_dcflags
-# @DESCRIPTION:
-# Convertes compiler specific $DCFLAGS to something that can be passed to the
-# dmd wrapper of said compiler. Calls `die` if the flags could not be
-# converted.
-dlang_dmdw_dcflags() {
- if [[ "${DLANG_VENDOR}" == "DigitalMars" ]]; then
- # There's no translation that needs to be done.
- echo "${DCFLAGS}"
- elif [[ "${DLANG_VENDOR}" == "LDC" ]]; then
- # ldmd2 passes all the arguments that it doesn't understand to ldc2.
- echo "${DCFLAGS}"
- elif [[ "${DLANG_VENDOR}" == "GNU" ]]; then
- # From `gdmd --help`: -q,arg1,... pass arg1, arg2, etc. to gdc
- if [[ "${DCFLAGS}" =~ .*,.* ]]; then
- eerror "DCFLAGS (${DCFLAGS}) contain a comma and can not be passed to gdmd."
- eerror "Please remove the comma, use a different compiler, or call gdc directly."
- die "DCFLAGS contain an unconvertable comma."
- fi
-
- local set flags=()
- for set in ${DCFLAGS}; do
- flags+=("-q,${set}")
- done
- echo "${flags[@]}"
- else
- die "Set DLANG_VENDOR to DigitalMars, LDC or GNU prior to calling ${FUNCNAME}()."
- fi
-}
-
-# @FUNCTION: dlang_system_imports
-# @DESCRIPTION:
-# Returns a list of standard system import paths (one per line) for the current
-# D compiler. This includes druntime and Phobos as well as compiler specific
-# paths.
-dlang_system_imports() {
- if [[ "${DLANG_VENDOR}" == "DigitalMars" ]]; then
- echo "/usr/lib/dmd/${DC_VERSION}/import"
- elif [[ "${DLANG_VENDOR}" == "GNU" ]]; then
- # gcc's SLOT is its major version component.
- echo "/usr/lib/gcc/${CHOST_default}/${DC_VERSION}/include/d"
- elif [[ "${DLANG_VENDOR}" == "LDC" ]]; then
- echo "/usr/lib/ldc2/${DC_VERSION}/include/d"
- echo "/usr/lib/ldc2/${DC_VERSION}/include/d/ldc"
- else
- die "Could not detect D compiler vendor!"
- fi
-}
-
-# @FUNCTION: dlang_phobos_level
-# @DESCRIPTION:
-# Succeeds if we are compiling against a version of Phobos that is at least as
-# high as the argument.
-dlang_phobos_level() {
- if [ -z "$DLANG_VERSION" ]; then
- [ "$DLANG_PACKAGE_TYPE" != "multi" ] || die "'dlang_phobos_level' needs 'DLANG_PACKAGE_TYPE != multi' when called outside of compiles."
- local config=`_dlang_build_configurations`
- local dc="$(echo ${config} | cut -d- -f2)"
- local dc_version="$(echo ${config} | cut -d- -f3)"
- local DLANG_VERSION="$(_dlang_compiler_to_dlang_version ${dc} ${dc_version})"
- fi
- ver_test "$DLANG_VERSION" -ge "$1"
-}
-
-### Non-public helper functions ###
-
-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() {
- local iuse=$1
- if [[ "$iuse" == gdc* ]]; then
- local depend="$iuse? ( $2 dev-util/gdmd:${iuse#gdc-} )"
- else
- local depend="$iuse? ( $2 )"
- fi
- local dlang_version=${3%% *}
- local compiler_keywords=${3:${#dlang_version}}
- local compiler_keyword package_keyword arch
- local -a masked_archs
-
- # Check the version range
- if [[ -n "$4" ]]; then
- [[ $((10#${dlang_version#*.})) -lt $((10#${4#*.})) ]] && return 1
- fi
- if [[ -n "$5" ]]; then
- [[ $((10#${dlang_version#*.})) -gt $((10#${5#*.})) ]] && return 1
- fi
-
- # Check the stability requirements
- local package_stab comp_stab=0 have_one=0
- for package_keyword in $KEYWORDS; do
- if [ "${package_keyword:0:1}" == "-" ]; then
- # Skip "-arch" and "-*"
- continue
- elif [ "${package_keyword:0:1}" == "~" ]; then
- package_stab=1
- arch=${package_keyword:1}
- else
- package_stab=2
- arch=$package_keyword
- fi
-
- comp_stab=0
- for compiler_keyword in $compiler_keywords; do
- if [ "$compiler_keyword" == "~$arch" ]; then
- comp_stab=1
- elif [ "$compiler_keyword" == "$arch" ]; then
- comp_stab=2
- fi
- done
- if [ $comp_stab -lt $package_stab ]; then
- masked_archs+=( $arch )
- fi
- if [ $comp_stab -gt 0 ]; then
- have_one=1
- fi
- done
- [ $have_one -eq 0 ] && return 1
-
- _dlang_compiler_iuse+=( $iuse )
- if [ "${#masked_archs[@]}" -ne 0 ]; then
- for arch in ${masked_archs[@]}; do
- _dlang_compiler_iuse_mask+=( "${arch}? ( !${iuse} )" )
- depend="!${arch}? ( ${depend} )"
- done
- fi
- _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() {
- local dc_version mapping iuse depend
-
- if _dlang_compiler_backend_is_enabled "dmd"; then
- # filter for DMD (hardcoding support for x86 and amd64 only)
- for dc_version in "${!_dlang_dmd_frontend[@]}"; do
- mapping="${_dlang_dmd_frontend[${dc_version}]}"
- iuse="dmd-$(ver_rs 1- _ $dc_version)"
- if [ "${DLANG_PACKAGE_TYPE}" == "multi" ]; then
- depend="[${MULTILIB_USEDEP}]"
- else
- depend=""
- fi
- depend="dev-lang/dmd:$dc_version=$depend"
- _dlang_compiler_masked_archs_for_version_range "$iuse" "$depend" "$mapping" "$1" "$2"
- done
- fi
-
- if _dlang_compiler_backend_is_enabled "gdc"; then
- # GDC (doesn't support sub-slots, to stay compatible with upstream GCC)
- for dc_version in "${!_dlang_gdc_frontend[@]}"; do
- mapping="${_dlang_gdc_frontend[${dc_version}]}"
- iuse="gdc-${dc_version}"
- depend="sys-devel/gcc:$dc_version[d,-d-bootstrap(-)]"
- _dlang_compiler_masked_archs_for_version_range "$iuse" "$depend" "$mapping" "$1" "$2"
- done
- fi
-
- if _dlang_compiler_backend_is_enabled "ldc2"; then
- # filter for LDC2
- for dc_version in "${!_dlang_ldc2_frontend[@]}"; do
- mapping="${_dlang_ldc2_frontend[${dc_version}]}"
- iuse=ldc2-$(ver_rs 1- _ $dc_version)
- if [ "${DLANG_PACKAGE_TYPE}" == "multi" ]; then
- depend="[${MULTILIB_USEDEP}]"
- else
- depend=""
- fi
- depend="dev-lang/ldc2:$dc_version=$depend"
- _dlang_compiler_masked_archs_for_version_range "$iuse" "$depend" "$mapping" "$1" "$2"
- done
- fi
-}
-
-# @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() {
- local range start stop matches d_version versions do_start
- local -A valid
-
- # Use given range to create a positive list of supported D versions
- if [[ -v DLANG_VERSION_RANGE ]]; then
- for range in $DLANG_VERSION_RANGE; do
- # Define start and stop of range
- if [[ "${range}" == *?- ]]; then
- start="${range%-}"
- stop=
- elif [[ "${range}" == -?* ]]; then
- start=
- stop="${range#-}"
- elif [[ "${range}" == *?-?* ]]; then
- start="${range%-*}"
- stop="${range#*-}"
- else
- start="${range}"
- stop="${range}"
- fi
- _dlang_filter_compilers "$start" "$stop"
- done
- else
- _dlang_filter_compilers "" ""
- fi
-
- [ ${#_dlang_compiler_iuse[@]} -eq 0 ] && die "No Dlang compilers found that satisfy this package's version range: $DLANG_VERSION_RANGE"
-
- if [ "${DLANG_PACKAGE_TYPE}" != "multi" ]; then
- REQUIRED_USE="^^"
- else
- REQUIRED_USE="||"
- fi
- DEPEND="${_dlang_depends[@]}"
- # DMD, is statically linked and does not have its host compiler as a runtime dependency.
- if [ "${DLANG_PACKAGE_TYPE}" == "dmd" ]; then
- IUSE="${_dlang_compiler_iuse[@]} +selfhost"
- _dlang_compiler_iuse+=( selfhost )
- else
- RDEPEND="$DEPEND"
- IUSE="${_dlang_compiler_iuse[@]}"
- fi
- REQUIRED_USE="${REQUIRED_USE} ( ${_dlang_compiler_iuse[@]} ) ${_dlang_compiler_iuse_mask[@]}"
-
- local -a compiler
- for compiler in ${_dlang_compiler_iuse[@]}; do
- DLANG_COMPILER_USE="${DLANG_COMPILER_USE}${compiler}?,"
- done
- 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
- d_src_${1}
- else
- default_src_${1}
- fi
- }
-
- if [[ "${DLANG_PACKAGE_TYPE}" == "multi" ]]; then
- dlang_foreach_config dlang_phase "${1}"
- # Handle any compiler & arch independent installation steps
- if declare -f d_src_${1}_all >/dev/null ; then
- d_src_${1}_all
- fi
- else
- dlang_single_config dlang_phase "${1}"
- 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
- "dmd")
- mapping="$2"
- ;;
- "gdc")
- mapping=`echo ${_dlang_gdc_frontend[$2]} | cut -f 1 -d " "`
- ;;
- "ldc2")
- mapping=`echo ${_dlang_ldc2_frontend[$2]} | cut -f 1 -d " "`
- ;;
- esac
- [ -n "${mapping}" ] || die "Could not retrieve dlang version for '$1-$2'."
- 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
-
- if [ -z ${DLANG_USE_COMPILER+x} ]; then
- use_flags="${USE}"
- else
- use_flags="${DLANG_USE_COMPILER}"
- fi
- for use_flag in $use_flags; do
- case ${use_flag} in
- dmd-* | gdc-* | ldc-* | ldc2-*)
- # On the left are possible $use_flag,
- # on the right, the correct $version_component:
- #
- # dmd-2_088 dmd-2.088
- # gdc-12 gdc-12
- # gdc-11 gdc-11
- # ldc-1_29 ldc-1.29
- # ldc2-1_30 ldc2-1.30
- #
- # Note: for ldc2 there is an empty separater betwen the 'c' and the '2'.
- if [[ "${use_flag}" =~ ldc2-* ]]; then
- version_component=$(ver_rs 3 . ${use_flag})
- else
- version_component=$(ver_rs 2-3 . ${use_flag})
- fi
-
- if [ "${DLANG_PACKAGE_TYPE}" == "multi" ]; then
- for abi in $(multilib_get_enabled_abis); do
- variants="${variants} ${abi}-${version_component}"
- done
- else
- variants="${DEFAULT_ABI:-default}-${version_component}"
- fi
- ;;
- selfhost)
- if [ "${DLANG_PACKAGE_TYPE}" == "dmd" ]; then
- variants="default-dmd-selfhost"
- fi
- ;;
- esac
- done
- if [ -z "${variants}" ]; then
- die "At least one compiler USE-flag must be selected. This should be checked by REQUIRED_USE in this package."
- fi
- 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.
- # The original value is exported as LIBDIR_HOST.
- local libdir_var="LIBDIR_${ABI}"
- export LIBDIR_HOST="${!libdir_var}"
- # Save the default pkgconfig path
- if [[ ! -v DLANG_SAVE_PKG_CONFIG_PATH ]]; then
- # Copy the logic from meson.eclass for setting PKG_CONFIG_PATH
- export DLANG_SAVE_PKG_CONFIG_PATH="${PKG_CONFIG_PATH}${PKG_CONFIG_PATH:+:}/usr/share/pkgconfig"
- fi
- if [[ ! -v DLANG_SAVE_PKG_CONFIG_LIBDIR ]]; then
- # either save the value or provide a sane default lest other eclasses get confused.
- # e.g. meson.eclass will set PKG_CONFIG_LIBDIR using $(get_libdir) which won't
- # work properly since we will overwrite $LIBDIR_$ABI
- export DLANG_SAVE_PKG_CONFIG_LIBDIR="${PKG_CONFIG_LIBDIR:-/usr/$(get_libdir)/pkgconfig}"
- fi
- export ABI="$(echo ${MULTIBUILD_VARIANT} | cut -d- -f1)"
- export DC="$(echo ${MULTIBUILD_VARIANT} | cut -d- -f2)"
- export DC_VERSION="$(echo ${MULTIBUILD_VARIANT} | cut -d- -f3)"
- case "${DC:0:3}" in
- "dmd") export DLANG_VENDOR="DigitalMars" ;;
- "gdc") export DLANG_VENDOR="GNU" ;;
- "ldc") export DLANG_VENDOR="LDC" ;;
- esac
- export DLANG_VERSION="$(_dlang_compiler_to_dlang_version ${DC} ${DC_VERSION})"
- case "${ABI}" in
- "default") ;;
- "x86"*) export MODEL=32 ;;
- *) export MODEL=64 ;;
- esac
- if [[ "${DLANG_VENDOR}" == "DigitalMars" ]]; then
- if [ "${DC_VERSION}" != "selfhost" ]; then
- export DC="/usr/lib/dmd/${DC_VERSION}/bin/dmd"
- export DMD="${DC}"
- fi
- # "lib" on pure x86, "lib{32,64}" on amd64 (and multilib)
- if has_multilib_profile || [[ "${MODEL}" == "64" ]]; then
- export LIBDIR_${ABI}="../usr/lib/dmd/${DC_VERSION}/lib${MODEL}"
- else
- export LIBDIR_${ABI}="../usr/lib/dmd/${DC_VERSION}/lib"
- fi
- export DCFLAGS="${DMDFLAGS}"
- export DLANG_LINKER_FLAG="-L"
- export DLANG_A_FLAGS="-lib -fPIC"
- export DLANG_SO_FLAGS="-shared -defaultlib=libphobos2.so -fPIC"
- export DLANG_OUTPUT_FLAG="-of"
- export DLANG_VERSION_FLAG="-version"
- export DLANG_UNITTEST_FLAG="-unittest"
- elif [[ "${DLANG_VENDOR}" == "GNU" ]]; then
- # Note that ldc2 expects the compiler name to be 'gdmd', not 'x86_64-pc-linux-gnu-gdmd'.
- # gcc's SLOT is its major version component.
- export DC="/usr/${CHOST_default}/gcc-bin/${DC_VERSION}/${CHOST_default}-gdc"
- export DMD="/usr/${CHOST_default}/gcc-bin/${DC_VERSION}/gdmd"
- if [[ ${DLANG_PACKAGE_TYPE} != multi ]]; then
- # Both single and dmd enter this branch
- export LIBDIR_${ABI}="lib/gcc/${CHOST_default}/${DC_VERSION}"
- else
- if multilib_is_native_abi; then
- export LIBDIR_${ABI}="lib/gcc/${CHOST_default}/${DC_VERSION}"
- else
- export LIBDIR_${ABI}="lib/gcc/${CHOST_default}/${DC_VERSION}/${MODEL}"
- fi
- fi
- export DCFLAGS="${GDCFLAGS} -shared-libphobos"
- export DLANG_LINKER_FLAG="-Xlinker "
- export DLANG_SO_FLAGS="-shared -fpic"
- export DLANG_OUTPUT_FLAG="-o "
- export DLANG_VERSION_FLAG="-fversion"
- export DLANG_UNITTEST_FLAG="-funittest"
- elif [[ "${DLANG_VENDOR}" == "LDC" ]]; then
- export LIBDIR_${ABI}="../usr/lib/ldc2/${DC_VERSION}/lib${MODEL}"
- export DMD="/usr/lib/ldc2/${DC_VERSION}/bin/ldmd2"
- export DC="/usr/lib/ldc2/${DC_VERSION}/bin/ldc2"
- # To allow separate compilation and avoid object file name collisions,
- # we append -op (do not strip paths from source file).
- export DCFLAGS="${LDCFLAGS} -op"
- export DLANG_LINKER_FLAG="-L="
- export DLANG_A_FLAGS="-lib -relocation-model=pic"
- export DLANG_SO_FLAGS="-shared -relocation-model=pic"
- export DLANG_OUTPUT_FLAG="-of="
- export DLANG_VERSION_FLAG="-d-version"
- export DLANG_UNITTEST_FLAG="-unittest"
- else
- die "Could not detect D compiler vendor!"
- fi
- # We need to convert the LDFLAGS, so they are understood by DMD and LDC.
- if [[ "${DLANG_VENDOR}" == "DigitalMars" ]]; then
- # gc-sections breaks executables for some versions of D
- # It works with the gold linker on the other hand
- # See: https://issues.dlang.org/show_bug.cgi?id=879
- [[ "${DLANG_PACKAGE_TYPE}" == "dmd" ]] && local dlang_version=$SLOT || local dlang_version=$DLANG_VERSION
- if ver_test $dlang_version -lt 2.072; then
- if ! ld -v | grep -q "^GNU gold"; then
- filter-flags {-L,-Xlinker,-Wl\,}--gc-sections
- fi
- fi
- # Filter ld.gold ICF flag. (https://issues.dlang.org/show_bug.cgi?id=17515)
- filter-flags {-L,-Xlinker,-Wl\,}--icf={none,all,safe}
- fi
-
- if [[ "${DLANG_VENDOR}" == "DigitalMars" ]] || [[ "${DLANG_VENDOR}" == "GNU" ]]; then
- # DMD and GDC don't undestand/work with LTO flags
- filter-ldflags -f{no-,}use-linker-plugin -f{no-,}lto -flto=*
- fi
- export LDFLAGS=`dlang_convert_ldflags`
-
- # Add the compiler specific pkgconfig paths.
- export PKG_CONFIG_PATH="${DLANG_SAVE_PKG_CONFIG_PATH}:/usr/$(get_libdir)/pkgconfig"
- # Technically, this value will stay the same so it's enough to export it once
- # but it's cleaner to keep these 2 variables close together.
- export PKG_CONFIG_LIBDIR="${DLANG_SAVE_PKG_CONFIG_LIBDIR}"
-
- "${@}"
-}
-
-# @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
- case "${DLANG_VENDOR}" in
- "DigitalMars")
- local import_prefix="-I"
- local string_import_prefix="-J"
- local debug_flags="-debug"
- ;;
- "GNU")
- local import_prefix="-I"
- local string_import_prefix="-J"
- local debug_flags="-fdebug"
- ;;
- "LDC")
- local import_prefix="-I="
- local string_import_prefix="-J="
- local debug_flags="-d-debug"
- ;;
- esac
- echo $(has debug ${IUSE} && use debug && echo ${debug_flags})\
- $(_dlang_prefix_words "${DLANG_VERSION_FLAG}=" $versions)\
- $(_dlang_prefix_words $import_prefix $imports)\
- $(_dlang_prefix_words $string_import_prefix $string_imports)\
- $(_dlang_prefix_words "${DLANG_LINKER_FLAG}-l" $libs)
-}
-
-# @FUNCTION: _dlang_compiler_backend_is_enabled
-# @USAGE: _dlang_compiler_backend_is_enabled <backend>
-# @RETURN: Truth if the backend is enabled
-# @INTERNAL
-# @DESCRIPTION:
-# Check if the given backend is enabled.
-# Possible values for the backend are: dmd, ldc2 and gdc
-_dlang_compiler_backend_is_enabled() {
- local disabled_backend
- for disabled_backend in "${DLANG_COMPILER_DISABLED_BACKENDS[@]}"; do
- [[ ${disabled_backend} == ${1} ]] && return 1
- done
- return 0
-}
-
-# Setting DLANG_USE_COMPILER skips the generation of USE-flags for compilers
-if [ -z ${DLANG_USE_COMPILER+x} ]; then
- set -f; _dlang_filter_versions; set +f
-fi
-
-fi
diff --git a/eclass/dmd.eclass b/eclass/dmd.eclass
deleted file mode 100644
index 9b4554a..0000000
--- a/eclass/dmd.eclass
+++ /dev/null
@@ -1,422 +0,0 @@
-# @ECLASS: dmd.eclass
-# @MAINTAINER:
-# Marco Leise <marco.leise@gmx.de>
-# @SUPPORTED_EAPIS: 6 7 8
-# @BLURB: Captures most of the logic for installing DMD
-# @DESCRIPTION:
-# 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"
-
-case ${EAPI:-0} in
- 6) inherit eapi7-ver ;;
- 7|8) ;;
- *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;;
-esac
-
-DESCRIPTION="Reference compiler for the D programming language"
-HOMEPAGE="http://dlang.org/"
-HTML_DOCS="html/*"
-
-# DMD supports amd64/x86 exclusively
-MULTILIB_COMPAT=( abi_x86_{32,64} )
-
-inherit desktop edos2unix multilib-build optfeature 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.101; then
- echo generated/linux/release/$(dmd_arch_to_model)
- elif dmd_ge 2.074; then
- echo dmd/generated/linux/release/$(dmd_arch_to_model)
- else
- echo dmd/src
- fi
-}
-
-# For reliable download statistics, we don't mirror.
-RESTRICT="mirror"
-LICENSE="Boost-1.0"
-SLOT="$(ver_cut 1-2)"
-MAJOR="$(ver_cut 1)"
-MINOR="$((10#$(ver_cut 2)))"
-PATCH="$(ver_cut 3)"
-VERSION="$(ver_cut 1-3)"
-BETA="$(ver_cut 4)"
-if [ "${KERNEL}" != "FreeBSD" ]; then
- ARCHIVE="${ARCHIVE-linux.tar.xz}"
-elif [ "${ARCH}" == "x86" ]; then
- ARCHIVE="${ARCHIVE-freebsd-32.tar.xz}"
-else
- ARCHIVE="${ARCHIVE-freebsd-64.tar.xz}"
-fi
-SONAME="${SONAME-libphobos2.so.0.${MINOR}.${PATCH}}"
-SONAME_SYM="${SONAME%.*}"
-
-IUSE="doc examples static-libs"
-
-# Self-hosting versions of DMD need a host compiler.
-if dmd_ge 2.068; then
- DLANG_VERSION_RANGE="${DLANG_VERSION_RANGE-${SLOT}}"
- DLANG_PACKAGE_TYPE=dmd
- inherit dlang
-fi
-
-# Call EXPORT_FUNCTIONS after any imports
-EXPORT_FUNCTIONS src_prepare src_compile src_test src_install pkg_postinst pkg_postrm
-
-if [[ -n "${BETA}" ]]; then
- # We want to convert a Gentoo version string to an upstream one: 2.097.0_rc1 -> 2.097.0-rc.1
- SRC_URI="http://downloads.dlang.org/pre-releases/${MAJOR}.x/${VERSION}/${PN}.$(ver_rs 3 "-" 4 ".").${ARCHIVE}"
-else
- # the aws mirrors work for <=dmd-2.100.2
- if dmd_ge 2.101; then
- SRC_URI="https://downloads.dlang.org/releases/${YEAR}/${PN}.${PV}.${ARCHIVE}"
- else
- SRC_URI="mirror://aws/${YEAR}/${PN}.${PV}.${ARCHIVE}"
- fi
-fi
-
-COMMON_DEPEND="
- net-misc/curl[${MULTILIB_USEDEP}]
- >=app-eselect/eselect-dlang-20140709
- "
-DEPEND="
- ${COMMON_DEPEND}
- app-arch/unzip
- "
-RDEPEND="
- ${COMMON_DEPEND}
- !dev-lang/dmd-bin
- "
-
-S="${WORKDIR}/dmd2"
-PREFIX="usr/lib/${PN}/${SLOT}"
-IMPORT_DIR="/${PREFIX}/import"
-
-dmd_src_prepare() {
- # Reorganize directories
- mkdir dmd || die "Failed to create directories 'dmd', 'druntime' and 'phobos'"
- mv src/dmd dmd/src || die "Failed to move 'src/dmd' to 'dmd/src'"
- mv src/VERSION dmd/VERSION || die "Failed to move 'src/VERSION' to 'dmd/VERSION'"
- # >=dmd-2.101 expects the version file to be in the same directory as the dmd
- # folder. i.e. VERSION should be in ${S} not in ${S}/dmd
- ln -s dmd/VERSION VERSION || die "Failed to symlink 'src/VERSION' to 'VERSION'"
- mv src/druntime druntime || die "Failed to move 'src/druntime' to 'druntime'"
- mv src/phobos phobos || die "Failed to move 'src/phobos' to 'phobos'"
- # Symlinks used by dmd in the selfhosting case
- ln -s ../druntime src/druntime || die "Failed to symlink 'druntime' to 'src/druntime'"
- ln -s ../phobos src/phobos || die "Failed to symlink 'phobos' to 'src/phobos'"
-
- mkdir dmd/generated || die "Could not create output directory"
-
- # Convert line-endings of file-types that start as cr-lf and are installed later on
- for file in $( find . -name "*.txt" -o -name "*.html" -o -name "*.d" -o -name "*.di" -o -name "*.ddoc" -type f ); do
- edos2unix $file || die "Failed to convert DOS line-endings to Unix."
- done
-
- # Ebuild patches
- default
-
- # Run other preparations
- declare -f dmd_src_prepare_extra > /dev/null && dmd_src_prepare_extra
-
- # User patches
- eapply_user
-}
-
-dmd_src_compile() {
- # A native build of dmd is used to compile the runtimes for both x86 and amd64
- # We cannot use multilib-minimal yet, as we have to be sure dmd for amd64
- # always gets build first.
-
- # 2.068 used HOST_DC instead of HOST_DMD
- dmd_eq 2.068 && HOST_DMD="HOST_DC" || HOST_DMD="HOST_DMD"
- # 2.070 and below used HOST_CC instead of HOST_CXX
- dmd_ge 2.071 && HOST_CXX="HOST_CXX" || HOST_CXX="HOST_CC"
- # 2.072 and 2.073 have support for LTO, but would need a Makefile patch.
- # From 2.088 on, the build fails with it active.
- dmd_ge 2.074 && ! dmd_ge 2.088 && LTO="ENABLE_LTO=1"
- # 2.080 and below used RELEASE instead of ENABLE_RELEASE
- dmd_ge 2.081 && ENABLE_RELEASE="ENABLE_RELEASE" || ENABLE_RELEASE="RELEASE"
-
- # Special case for self-hosting (i.e. no compiler USE flag selected).
- local kernel model actual_compiler
- if [ "${DC_VERSION}" == "selfhost" ]; then
- case "${KERNEL}" in
- "linux") kernel="linux";;
- "FreeBSD") kernel="freebsd";;
- *) die "Self-hosting dmd on ${KERNEL} is not currently supported."
- esac
- case "${ARCH}" in
- "x86") model=32;;
- "amd64") model=64;;
- *) die "Self-hosting dmd on ${ARCH} is not currently supported."
- esac
- export DMD="${kernel}/bin${model}/dmd"
- if ! dmd_ge 2.094; then
- export DMD="../../${DMD}"
- fi
- actual_compiler="${S}/${DMD}"
- else
- # Not selfhosting, leave the compiler variable unchanged
- actual_compiler="${DC}"
- fi
- if dmd_ge 2.094; then
- einfo "Building dmd build script..."
- DC="${actual_compiler}" dlang_compile_bin dmd/generated/build dmd/src/build.d
- einfo "Building dmd..."
- env VERBOSE=1 ${HOST_DMD}="${DMD}" CXX="$(tc-getCXX)" ${ENABLE_RELEASE}=1 ${LTO} dmd/generated/build DFLAGS="$(dlang_dmdw_dcflags)" dmd || die
- else
- einfo "Building dmd..."
- emake -C dmd/src -f posix.mak TARGET_CPU=X86 ${HOST_DMD}="${DMD}" ${HOST_CXX}="$(tc-getCXX)" ${ENABLE_RELEASE}=1 ${LTO}
- fi
-
- # Don't pick up /etc/dmd.conf when calling $(dmd_gen_exe_dir)/dmd !
- if [ ! -f "$(dmd_gen_exe_dir)/dmd.conf" ]; then
- einfo "Creating a dummy dmd.conf"
- touch "$(dmd_gen_exe_dir)/dmd.conf" || die "Could not create dummy dmd.conf"
- fi
-
- compile_libraries() {
- local mymakeargs=(
- DMD="../$(dmd_gen_exe_dir)/dmd"
- MODEL="${MODEL}"
- PIC=1
- CC="$(tc-getCC)"
- DMD_DIR=../dmd
- )
- # <2.107 use posix.mak, >=dmd-2.107 use Makefile
- ! dmd_ge 2.107 && mymakeargs+=(-f posix.mak)
-
- local druntimeMakeArgs=(
- MANIFEST=
- )
- local phobosMakeArgs=(
- CUSTOM_DRUNTIME=1
- DRUNTIME_PATH=../druntime
- )
- # Let's try to specify the build args to avoid building both
- # shared+static libraries with !static-libs. Do this only for
- # >=2.107, if it's useful backport the improvements later.
- if dmd_ge 2.107; then
- phobosMakeArgs+=( $(usex static-libs 'lib dll' 'dll') )
- # druntime's notion of a shared library is a static archive
- # that is embedded into the phobos shared library.
- #
- # Technically there is the dll_so target which is the proper
- # so file but who's gonna use it? Perhaps if phobos would
- # not incorporate druntime we could install them as separate
- # libraries (like ldc2 and gdc).
- druntimeMakeArgs+=( $(usex static-libs 'lib dll' 'dll') )
- # Either way, now we no longer build static-libs
- # indiscriminately.
- fi
-
- einfo 'Building druntime...'
- emake -C druntime "${mymakeargs[@]}" "${druntimeMakeArgs[@]}"
-
- einfo 'Building Phobos 2...'
- emake -C phobos "${mymakeargs[@]}" "${phobosMakeArgs[@]}"
- }
-
- dmd_foreach_abi compile_libraries
-
- # Not needed after compilation. Would otherwise be installed as imports.
- rm -r phobos/etc/c/zlib
-}
-
-dmd_src_test() {
- test_hello_world() {
- local phobosDir=phobos/generated/linux/release/"${MODEL}"
- local commandArgs=(
- # Copied from below, where dmd.conf is generated
- -L--export-dynamic
- -defaultlib=phobos2 # If unspecified, defaults to libphobos2.a
- -fPIC
- -L-L"${phobosDir}"
- -L-rpath="${phobosDir}"
-
- -conf= # Don't use dmd.conf
- -m"${MODEL}"
- -Iphobos
- -Idruntime/import
- )
- "$(dmd_gen_exe_dir)/dmd" "${commandArgs[@]}" samples/d/hello.d \
- || die "Failed to build hello.d (${MODEL}-bit)"
- ./hello ${MODEL}-bit || die "Failed to run test sample (${MODEL}-bit)"
- rm hello.o hello || die "Could not remove temporary files"
- }
-
- dmd_foreach_abi test_hello_world
-}
-
-dmd_src_install() {
- local MODEL=$(dmd_abi_to_model)
-
- # dmd.conf
- if has_multilib_profile; then
- cat > linux/bin${MODEL}/dmd.conf << EOF
-[Environment]
-DFLAGS=-I${IMPORT_DIR} -L--export-dynamic -defaultlib=phobos2 -fPIC
-[Environment32]
-DFLAGS=%DFLAGS% -L-L/${PREFIX}/lib32 -L-rpath=/${PREFIX}/lib32
-[Environment64]
-DFLAGS=%DFLAGS% -L-L/${PREFIX}/lib64 -L-rpath=/${PREFIX}/lib64
-EOF
- elif [ "${ABI:0:5}" = "amd64" ]; then
- cat > linux/bin${MODEL}/dmd.conf << EOF
-[Environment]
-DFLAGS=-I${IMPORT_DIR} -L--export-dynamic -defaultlib=phobos2 -fPIC -L-L/${PREFIX}/lib64 -L-rpath=/${PREFIX}/lib64
-EOF
- else
- cat > linux/bin${MODEL}/dmd.conf << EOF
-[Environment]
-DFLAGS=-I${IMPORT_DIR} -L--export-dynamic -defaultlib=phobos2 -fPIC -L-L/${PREFIX}/lib -L-rpath=/${PREFIX}/lib
-EOF
- fi
- insinto "etc/dmd"
- newins "linux/bin${MODEL}/dmd.conf" "${SLOT}.conf"
- dosym "../../../../../etc/dmd/${SLOT}.conf" "${PREFIX}/bin/dmd.conf"
-
- # DMD
- einfo "Installing ${PN}..."
- # From version 2.066 on, dmd will find dmd.conf in the executable directory, if we
- # call it through a symlink in /usr/bin
- dmd_ge 2.066 && dosym "../../${PREFIX}/bin/dmd" "/usr/bin/dmd-${SLOT}"
- into ${PREFIX}
- dobin "$(dmd_gen_exe_dir)/dmd"
-
- # druntime
- einfo 'Installing druntime...'
- insinto ${PREFIX}
- doins -r druntime/import
-
- # Phobos 2
- einfo 'Installing Phobos 2...'
- into usr
- install_phobos_2() {
- # Copied get_libdir logic from dlang.eclass, so we can install Phobos correctly.
- if has_multilib_profile || [[ "${MODEL}" == "64" ]]; then
- local libdir="../${PREFIX}/lib${MODEL}"
- else
- local libdir="../${PREFIX}/lib"
- fi
-
- # Install shared lib.
- # dlang.eclass will set LIBDIR_$ABI to the path of the host compiler
- # library direcory (if not selfhosting). We don't care about that
- # location, however, and we instead want to have it point
- # to the path where this package is supposed to install the libraries
- # to, i.e. the system library directory. We can use $LIBDIR_HOST
- # to restore that value to the correct one but only if the ABI
- # this function is running into is the same as the one set
- # by dlang.eclass. Since dlang.eclass treats dmd as a 'single'
- # type package, it will only treat the case where $ABI is the
- # native one.
- if ! use selfhost && multilib_is_native_abi; then
- # We aren't going to use LIBDIR_$ABI for this ABI anymore
- # so just overwrite it, don't bother saving it.
- export LIBDIR_${ABI}="${LIBDIR_HOST}"
- fi
-
- # We are installing the real file into the system libdir.
- dolib.so phobos/generated/linux/release/${MODEL}/"${SONAME}"
- dosym "${SONAME}" /usr/"$(get_libdir)"/"${SONAME_SYM}"
- # We create an additional symlink in this package's specific libdir.
- dosym ../../../../../usr/"$(get_libdir)"/"${SONAME}" /usr/"${libdir}"/libphobos2.so
-
- # Install static lib if requested.
- if use static-libs; then
- if has_multilib_profile || [[ "${MODEL}" == "64" ]]; then
- export LIBDIR_${ABI}="../${PREFIX}/lib${MODEL}"
- else
- export LIBDIR_${ABI}="../${PREFIX}/lib"
- fi
- dolib.a phobos/generated/linux/release/${MODEL}/libphobos2.a
- fi
- }
- dmd_foreach_abi install_phobos_2
- insinto ${PREFIX}/import
- doins -r phobos/{etc,std}
-
- # man pages, docs and samples
- insinto ${PREFIX}/man/man1
- doins man/man1/dmd.1
- insinto ${PREFIX}/man/man5
- doins man/man5/dmd.conf.5
- if use doc; then
- einstalldocs
- insinto "/usr/share/doc/${PF}/html"
- doins "${FILESDIR}/dmd-doc.png"
- make_desktop_entry "xdg-open ${EPREFIX}/usr/share/doc/${PF}/html/d/index.html" "DMD ${PV}" "${EPREFIX}/usr/share/doc/${PF}/html/dmd-doc.png" "Development"
- fi
- if use examples; then
- insinto ${PREFIX}/samples
- doins -r samples/d/*
- docompress -x ${PREFIX}/samples/
- fi
-}
-
-dmd_pkg_postinst() {
- # Update active dmd
- "${ROOT%/}"/usr/bin/eselect dlang update dmd
-
- use examples && elog "Examples can be found in: /${PREFIX}/samples"
- use doc && elog "HTML documentation is in: /usr/share/doc/${PF}/html"
-
- optfeature "additional D development tools" "dev-util/dlang-tools"
-}
-
-dmd_pkg_postrm() {
- "${ROOT%/}"/usr/bin/eselect dlang update dmd
-}
-
-dmd_foreach_abi() {
- for ABI in $(multilib_get_enabled_abis); do
- local MODEL=$(dmd_abi_to_model)
- einfo " Executing ${1} in ${MODEL}-bit ..."
- "${@}"
- done
-}
-
-dmd_arch_to_model() {
- [[ "${ARCH}" == "amd64" ]] && echo 64 || echo 32
-}
-
-dmd_abi_to_model() {
- [[ "${ABI:0:5}" == "amd64" ]] && echo 64 || echo 32
-}
-
-fi
diff --git a/profiles/use.desc b/profiles/use.desc
index 5c7bc4a..60bda0f 100644
--- a/profiles/use.desc
+++ b/profiles/use.desc
@@ -31,10 +31,3 @@ dlang_targets_ldc2-1_37 - Build with ldc2 1.37
dlang_targets_ldc2-1_38 - Build with ldc2 1.38
dlang_targets_ldc2-1_39 - Build with ldc2 1.39
dlang_targets_ldc2-1_40 - Build with ldc2 1.40
-
-
-dmd-2_107 - Build for DMD 2.107
-gdc-11 - Build for GCC 11
-gdc-12 - Build for GCC 12
-gdc-13 - Build for GCC 13
-ldc2-1_36 - Build for ldc2 1.36
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-08-24 15:47 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-02-06 15:50 [gentoo-commits] repo/user/dlang:master commit in: eclass/, profiles/ Marco Leise
-- strict thread matches above, loose matches on Subject: below --
2022-10-13 15:56 Marco Leise
2025-05-12 4:01 Horodniceanu Andrei
2025-08-24 15:47 Horodniceanu Andrei
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox