diff options
author | Anna (cybertailor) Vyalkova <cyber+gentoo@sysrq.in> | 2022-11-08 21:12:14 +0500 |
---|---|---|
committer | Anna (cybertailor) Vyalkova <cyber+gentoo@sysrq.in> | 2022-11-08 22:11:30 +0500 |
commit | 2b2b50543122b1e068cac963f70de19cc3f50dd4 (patch) | |
tree | 0338748cc6f66cedd242eb256dbdafe2588dc96c /eclass | |
parent | media-sound/dzr: add 221106, drop 221021 (diff) | |
download | guru-2b2b50543122b1e068cac963f70de19cc3f50dd4.tar.gz guru-2b2b50543122b1e068cac963f70de19cc3f50dd4.tar.bz2 guru-2b2b50543122b1e068cac963f70de19cc3f50dd4.zip |
crystal-utils.eclass: new eclass
Signed-off-by: Anna (cybertailor) Vyalkova <cyber+gentoo@sysrq.in>
Diffstat (limited to 'eclass')
-rw-r--r-- | eclass/crystal-utils.eclass | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/eclass/crystal-utils.eclass b/eclass/crystal-utils.eclass new file mode 100644 index 000000000..cb67682a6 --- /dev/null +++ b/eclass/crystal-utils.eclass @@ -0,0 +1,124 @@ +# Copyright 2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +# @ECLASS: crystal-utils.eclass +# @MAINTAINER: +# Anna <cyber+gentoo@sysrq.in> +# @AUTHOR: +# Anna <cyber+gentoo@sysrq.in> +# @SUPPORTED_EAPIS: 8 +# @BLURB: utility functions for Crystal packages +# @DESCRIPTION: +# A utility eclass providing functions to invoke Crystal. +# +# This eclass does not set any metadata variables nor export any phase, so it +# can be inherited safely. +# +# All helper functions die on failure and support being called via 'nonfatal'. + +case ${EAPI} in + 8) ;; + *) die "${ECLASS}: EAPI ${EAPI} unsupported." +esac + +if [[ ! ${_CRYSTAL_UTILS_ECLASS} ]]; then +_CRYSTAL_UTILS_ECLASS=1 + +inherit edo flag-o-matic + +# @ECLASS_VARIABLE: CRYSTAL_DEPS +# @OUTPUT_VARIABLE +# @DESCRIPTION: +# This is an eclass-generated Crystal dependency string. +CRYSTAL_DEPS=" + || ( + dev-lang/crystal + dev-lang/crystal-bin + ) +" + +# @FUNCTION: _crystal_get_colors_opt +# @INTERNAL +# @RETURN: "--no-color" if colors should be disabled, empty string otherwise +_crystal_get_colors_opt() { + if [[ ${NOCOLOR} == "true" || ${NOCOLOR} == "yes" ]]; then + echo "--no-color" + fi +} + +# @FUNCTION: _crystal_get_debug_opt +# @INTERNAL +# @RETURN: "--debug" if USE=debug, "--no-debug" otherwise +_crystal_get_debug_opt() { + if has debug ${IUSE} && use debug; then + echo "--debug" + else + echo "--no-debug" + fi +} + +# @FUNCTION: crystal_configure +# @DESCRIPTION: +# Set Crystal environment variables to match user settings. +# +# Must be run or ecrystal/eshards will fail. +crystal_configure() { + debug-print-function ${FUNCNAME} "${@}" + + # avoid possible sandbox violation + export CRYSTAL_CACHE_DIR="${T}/crystal" + export SHARDS_CACHE_PATH="${T}/shards" + + local args=( + --link-flags="\"${LDFLAGS}\"" + --release + --progress + $(_crystal_get_debug_opt) + $(_crystal_get_colors_opt) + $(is-flagq -mcpu && echo "--mcpu=$(get-flag mcpu)") + $(is-flagq -mcmodel && echo "--mcmodel=$(get-flag mcmodel)") + # TODO: --mattr + ) + + export CRYSTAL_OPTS="${args[@]}" + + _CRYSTAL_CONFIGURE_HAS_RUN=1 +} + +# @FUNCTION: ecrystal +# @USAGE: [<args>...] +# @DESCRIPTION: +# Call crystal, passing supplied arguments. +ecrystal() { + debug-print-function ${FUNCNAME} "${@}" + + [[ ${_CRYSTAL_CONFIGURE_HAS_RUN} ]] || \ + die "${FUNCNAME}: crystal_configure has not been run" + + mkdir -p "${CRYSTAL_CACHE_DIR}" || die "Creating Crystal cache dir failed" + edo crystal "${@}" +} + +# @FUNCTION: eshards +# @USAGE: [<args>...] +# @DESCRIPTION: +# Call shards, passing the standard set of options, then supplied arguments. +eshards() { + debug-print-function ${FUNCNAME} "${@}" + + [[ ${_CRYSTAL_CONFIGURE_HAS_RUN} ]] || \ + die "${FUNCNAME}: crystal_configure has not been run" + + mkdir -p "${CRYSTAL_CACHE_DIR}" || die "Creating Crystal cache dir failed" + mkdir -p "${SHARDS_CACHE_PATH}" || die "Creating Shards cache dir failed" + + local args=( + --local + --without-development + $(_crystal_get_colors_opt) + ) + + edo shards "${args[@]}" "${@}" +} + +fi |