aboutsummaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
authorAnna (cybertailor) Vyalkova <cyber+gentoo@sysrq.in>2022-06-29 12:13:20 +0500
committerAnna (cybertailor) Vyalkova <cyber+gentoo@sysrq.in>2022-06-29 16:52:26 +0500
commitd34b616bfc616418be86dab44d53f9397665a7bc (patch)
treeff83a32a0222d0417adcd4b0ce412fd1d2a77ffb /eclass
parentdev-nim: new category (diff)
downloadguru-d34b616bfc616418be86dab44d53f9397665a7bc.tar.gz
guru-d34b616bfc616418be86dab44d53f9397665a7bc.tar.bz2
guru-d34b616bfc616418be86dab44d53f9397665a7bc.zip
eclass/nim-utils.eclass: new eclass
Signed-off-by: Anna (cybertailor) Vyalkova <cyber+gentoo@sysrq.in>
Diffstat (limited to 'eclass')
-rw-r--r--eclass/nim-utils.eclass115
1 files changed, 115 insertions, 0 deletions
diff --git a/eclass/nim-utils.eclass b/eclass/nim-utils.eclass
new file mode 100644
index 000000000..12b077452
--- /dev/null
+++ b/eclass/nim-utils.eclass
@@ -0,0 +1,115 @@
+# Copyright 2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# @ECLASS: nim-utils.eclass
+# @MAINTAINER:
+# Anna Vyalkova <cyber+gentoo@sysrq.in>
+# @AUTHOR:
+# Anna Vyalkova <cyber+gentoo@sysrq.in>
+# @SUPPORTED_EAPIS: 8
+# @BLURB: utility functions for Nim packages
+# @DESCRIPTION:
+# A utility eclass providing functions to call and configure Nim.
+#
+# This eclass does not set any metadata variables nor export any phase
+# functions. It can be inherited safely.
+
+case ${EAPI} in
+ 8) ;;
+ *) die "${ECLASS}: EAPI ${EAPI} unsupported."
+esac
+
+if [[ ! ${_NIM_UTILS_ECLASS} ]]; then
+
+# @ECLASS_VARIABLE: NIMFLAGS
+# @USER_VARIABLE
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# Flags for the Nim compiler.
+
+# @ECLASS_VARIABLE: TESTAMENT_DISABLE_MEGATEST
+# @USER_VARIABLE
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# If set, pass '--megatest:off' to testament.
+
+# @VARIABLE: ETESTAMENT_DESELECT
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# Specifies an array of test files to be deselected via testament's --skipFrom
+# parameter, when calling etestament.
+
+inherit multiprocessing toolchain-funcs xdg-utils
+
+# @FUNCTION: enim
+# @USAGE: [<args>...]
+# @DESCRIPTION:
+# Call nim, passing the supplied arguments.
+# This function dies if nim fails. It also supports being called via 'nonfatal'.
+# If you need to call nim directly in your ebuilds, this is the way it should
+# be done.
+enim() {
+ debug-print-function ${FUNCNAME} "${@}"
+
+ set -- nim "${@}"
+ echo "$@" >&2
+ "$@" || die -n "${*} failed"
+}
+
+# @FUNCTION: etestament
+# @USAGE: [<args>...]
+# @DESCRIPTION:
+# Call testament, passing the supplied arguments.
+# This function dies if testament fails.
+etestament() {
+ debug-print-function ${FUNCNAME} "${@}"
+
+ local -a testament_args=()
+ [[ ${TESTAMENT_DISABLE_MEGATEST} ]] && \
+ testament_args+=( --megatest:off )
+
+ [[ "${NOCOLOR}" == true || "${NOCOLOR}" == yes ]] && \
+ testament_args+=( --colors:off )
+
+ if [[ ${ETESTAMENT_DESELECT} ]]; then
+ local skipfile="${T}"/testament.skipfile
+ for t in "${ETESTAMENT_DESELECT[@]}"; do
+ echo "${t}" >> "${skipfile}"
+ done
+ testament_args+=( --skipFrom:"${skipfile}" )
+ fi
+
+ set -- testament "${testament_args[@]}" "${@}"
+ echo "$@" >&2
+ "$@" || die -n "${*} failed"
+}
+
+# @FUNCTION: nim_gen_config
+# @USAGE:
+# @DESCRIPTION:
+# Generate the ${WORKDIR}/nim.cfg to respect user's toolchain and preferences.
+nim_gen_config() {
+ debug-print-function ${FUNCNAME} "${@}"
+
+ xdg_environment_reset
+
+ cat > "${WORKDIR}/nim.cfg" <<- EOF || die "Failed to create Nim config"
+ cc:"gcc"
+ gcc.exe:"$(tc-getCC)"
+ gcc.linkerexe:"$(tc-getCC)"
+ gcc.cpp.exe:"$(tc-getCXX)"
+ gcc.cpp.linkerexe:"$(tc-getCXX)"
+ gcc.options.always:"${CFLAGS} ${CPPFLAGS}"
+ gcc.options.linker:"${LDFLAGS}"
+ gcc.cpp.options.always:"${CFLAGS} ${CPPFLAGS}"
+ gcc.cpp.options.linker:"${LDFLAGS}"
+
+ $([[ "${NOCOLOR}" == true || "${NOCOLOR}" == yes ]] && echo '--colors:"off"')
+ -d:"release"
+ --parallelBuild:"$(makeopts_jobs)"
+ $(printf "%s\n" ${NIMFLAGS})
+ EOF
+}
+
+_NIM_UTILS_ECLASS=1
+fi