diff options
author | Haelwenn (lanodan) Monnier <contact@hacktivis.me> | 2023-06-24 21:13:05 +0200 |
---|---|---|
committer | Haelwenn (lanodan) Monnier <contact@hacktivis.me> | 2023-06-24 21:13:05 +0200 |
commit | c64dbb92037c38a5afb44467023b7ece43d662c5 (patch) | |
tree | 26897c4f38a95658ee758e39d4c758561361d5d3 /eclass | |
parent | www-apps/pleroma: add 2.5.2, 9999 (diff) | |
download | guru-c64dbb92037c38a5afb44467023b7ece43d662c5.tar.gz guru-c64dbb92037c38a5afb44467023b7ece43d662c5.tar.bz2 guru-c64dbb92037c38a5afb44467023b7ece43d662c5.zip |
mix.eclass: New eclass, used by www-apps/pleroma
Signed-off-by: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Diffstat (limited to 'eclass')
-rw-r--r-- | eclass/mix.eclass | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/eclass/mix.eclass b/eclass/mix.eclass new file mode 100644 index 000000000..b7d464731 --- /dev/null +++ b/eclass/mix.eclass @@ -0,0 +1,95 @@ +# Copyright 2019-2023 Haelwenn (lanodan) Monnier <contact@hacktivis.me> +# Distributed under the terms of the GNU General Public License v2 + +# @ECLASS: mix.eclass +# @MAINTAINER: +# Haelwenn (lanodan) Monnier <contact@hacktivis.me> +# @AUTHOR: +# Haelwenn (lanodan) Monnier <contact@hacktivis.me> +# @SUPPORTED_EAPIS: 6 7 8 +# @BLURB: Build Elixir projects using Elixir's mix +# @DESCRIPTION: +# An eclass providing functions to build Elixir projects using Elixir's mix +# +# mix is a tool which tries to resolve dependencies itself + +case "${EAPI:-0}" in + 0|1|2|3|4|5) + die "Unsupported EAPI=${EAPI:-0} (too old) for ${ECLASS}" + ;; + 6|7) + ;; + *) + die "Unsupported EAPI=${EAPI} (unknown) for ${ECLASS}" + ;; +esac + +EXPORT_FUNCTIONS src_prepare src_compile src_install + +RDEPEND="dev-lang/elixir" +DEPEND="${RDEPEND}" + +# Erlang/Elixir software fails to build when another version with API +# differences is present +BDEPEND="!<${CATEGORY}/${P} !>${CATEGORY}/${P}" + +# @ECLASS-VARIABLE: HEX_OFFLINE +HEX_OFFLINE=1 + +# @ECLASS-VARIABLE: MIX_ENV +MIX_ENV="prod" + +# @ECLASS-VARIABLE: MIX_NO_DEPS +MIX_NO_DEPS=1 + +# @FUNCTION: emix +# @USAGE: <targets> +# @DESCRIPTION: +# Run mix with provided arguments. Die on failure +emix() { + debug-print-function ${FUNCNAME} "${@}" + + (( $# > 0 )) || die "emix: at least one target is required" + + MIX_ENV="${MIX_ENV}" mix "$@" || die -n "mix $@ failed" +} + +# @ECLASS-VARIABLE: MIX_REWRITE +MIX_REWRITE="" + +# @ECLASS-VARIABLE: MIX_BUILD_NAME +MIX_BUILD_NAME="${MIX_ENV}" + +# @FUNCTION: mix_src_prepare +mix_src_prepare() { + if [[ "${MIX_REWRITE}" != "" ]] + then + sed -i -E -e 's@\{.*(only|optional): .*},?@@' mix.exs || die "failed removing only & optionnal deps" + rm -f mix.lock + fi + + default +} + +# @FUNCTION: mix_src_compile +# @DESCRIPTION: +# Compile project with mix. +mix_src_compile() { + debug-print-function ${FUNCNAME} "${@}" + + emix compile --no-deps-check +} + +# @FUNCTION: mix_src_install +# @DESCRIPTION: +# Install project with mix. +mix_src_install() { + debug-print-function ${FUNCNAME} "${@}" + + insinto "/usr/$(get_libdir)/elixir/lib/${P}" + pushd "_build/${MIX_BUILD_NAME}/lib/${PN}" >/dev/null + for reldir in src ebin priv include; do + [ -d "$reldir" ] && doins -r "$(realpath ${reldir})" + done + popd >/dev/null +} |