diff options
Diffstat (limited to 'eclass/rebar.eclass')
-rw-r--r-- | eclass/rebar.eclass | 141 |
1 files changed, 16 insertions, 125 deletions
diff --git a/eclass/rebar.eclass b/eclass/rebar.eclass index c1a3aca67b54..951e29b05a91 100644 --- a/eclass/rebar.eclass +++ b/eclass/rebar.eclass @@ -1,4 +1,4 @@ -# Copyright 1999-2023 Gentoo Authors +# Copyright 1999-2024 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: rebar.eclass @@ -6,7 +6,8 @@ # maintainer-needed@gentoo.org # @AUTHOR: # Amadeusz Żołnowski <aidecoe@gentoo.org> -# @SUPPORTED_EAPIS: 6 7 8 +# @SUPPORTED_EAPIS: 7 8 +# @PROVIDES: rebar-utils # @BLURB: Build Erlang/OTP projects using dev-util/rebar. # @DESCRIPTION: # An eclass providing functions to build Erlang/OTP projects using @@ -20,35 +21,21 @@ # installation in a generic way for Erlang/OTP structured projects. case ${EAPI} in - 6|7|8) ;; + 7|8) ;; *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; esac if [[ -z ${_REBAR_ECLASS} ]]; then _REBAR_ECLASS=1 +inherit rebar-utils + RDEPEND="dev-lang/erlang:=" DEPEND="${RDEPEND}" BDEPEND=" dev-util/rebar:0 >=sys-apps/gawk-4.1 " -if [[ ${EAPI} == 6 ]]; then - DEPEND+=" ${BDEPEND}" -fi - -# @ECLASS_VARIABLE: REBAR_APP_SRC -# @DESCRIPTION: -# Relative path to .app.src description file. -REBAR_APP_SRC="${REBAR_APP_SRC-src/${PN}.app.src}" - -# @FUNCTION: get_erl_libs -# @RETURN: the path to Erlang lib directory -# @DESCRIPTION: -# Get the full path without EPREFIX to Erlang lib directory. -get_erl_libs() { - echo "/usr/$(get_libdir)/erlang/lib" -} # @FUNCTION: _rebar_find_dep # @INTERNAL @@ -63,7 +50,7 @@ _rebar_find_dep() { local p local result - pushd "${EPREFIX}/$(get_erl_libs)" >/dev/null || return 1 + pushd "${EPREFIX}$(get_erl_libs)" >/dev/null || return 1 for p in ${pn} ${pn}-*; do if [[ -d ${p} ]]; then # Ensure there's at most one matching. @@ -77,117 +64,21 @@ _rebar_find_dep() { echo "${result}" } -# @FUNCTION: rebar_disable_coverage -# @USAGE: [<rebar_config>] -# @DESCRIPTION: -# Disable coverage in rebar.config. This is a workaround for failing coverage. -# Coverage is not relevant in this context, so there's no harm to disable it, -# although the issue should be fixed. -rebar_disable_coverage() { - debug-print-function ${FUNCNAME} "${@}" - - local rebar_config="${1:-rebar.config}" - - sed -e 's/{cover_enabled, true}/{cover_enabled, false}/' \ - -i "${rebar_config}" \ - || die "failed to disable coverage in ${rebar_config}" -} - # @FUNCTION: erebar # @USAGE: <targets> # @DESCRIPTION: # Run rebar with verbose flag. Die on failure. erebar() { - debug-print-function ${FUNCNAME} "${@}" + debug-print-function ${FUNCNAME} "$@" (( $# > 0 )) || die "erebar: at least one target is required" - local -x ERL_LIBS="${EPREFIX}/$(get_erl_libs)" + local -x ERL_LIBS="${EPREFIX}$(get_erl_libs)" [[ ${1} == eunit ]] && local -x ERL_LIBS="." rebar -v skip_deps=true "$@" || die -n "rebar $@ failed" } -# @FUNCTION: rebar_fix_include_path -# @USAGE: <project_name> [<rebar_config>] -# @DESCRIPTION: -# Fix path in rebar.config to 'include' directory of dependent project/package, -# so it points to installation in system Erlang lib rather than relative 'deps' -# directory. -# -# <rebar_config> is optional. Default is 'rebar.config'. -# -# The function dies on failure. -rebar_fix_include_path() { - debug-print-function ${FUNCNAME} "${@}" - - local pn="${1}" - local rebar_config="${2:-rebar.config}" - local erl_libs="${EPREFIX}/$(get_erl_libs)" - local p - - p="$(_rebar_find_dep "${pn}")" \ - || die "failed to unambiguously resolve dependency of '${pn}'" - - gawk -i inplace \ - -v erl_libs="${erl_libs}" -v pn="${pn}" -v p="${p}" ' -/^{[[:space:]]*erl_opts[[:space:]]*,/, /}[[:space:]]*\.$/ { - pattern = "\"(./)?deps/" pn "/include\""; - if (match($0, "{i,[[:space:]]*" pattern "[[:space:]]*}")) { - sub(pattern, "\"" erl_libs "/" p "/include\""); - } - print $0; - next; -} -1 -' "${rebar_config}" || die "failed to fix include paths in ${rebar_config} for '${pn}'" -} - -# @FUNCTION: rebar_remove_deps -# @USAGE: [<rebar_config>] -# @DESCRIPTION: -# Remove dependencies list from rebar.config and deceive build rules that any -# dependencies are already fetched and built. Otherwise rebar tries to fetch -# dependencies and compile them. -# -# <rebar_config> is optional. Default is 'rebar.config'. -# -# The function dies on failure. -rebar_remove_deps() { - debug-print-function ${FUNCNAME} "${@}" - - local rebar_config="${1:-rebar.config}" - - mkdir -p "${S}/deps" && :>"${S}/deps/.got" && :>"${S}/deps/.built" || die - gawk -i inplace ' -/^{[[:space:]]*deps[[:space:]]*,/, /}[[:space:]]*\.$/ { - if ($0 ~ /}[[:space:]]*\.$/) { - print "{deps, []}."; - } - next; -} -1 -' "${rebar_config}" || die "failed to remove deps from ${rebar_config}" -} - -# @FUNCTION: rebar_set_vsn -# @USAGE: [<version>] -# @DESCRIPTION: -# Set version in project description file if it's not set. -# -# <version> is optional. Default is PV stripped from version suffix. -# -# The function dies on failure. -rebar_set_vsn() { - debug-print-function ${FUNCNAME} "${@}" - - local version="${1:-${PV%_*}}" - - sed -e "s/vsn, git/vsn, \"${version}\"/" \ - -i "${S}/${REBAR_APP_SRC}" \ - || die "failed to set version in src/${PN}.app.src" -} - # @FUNCTION: rebar_src_prepare # @DESCRIPTION: # Prevent rebar from fetching and compiling dependencies. Set version in @@ -196,7 +87,7 @@ rebar_set_vsn() { # Existence of rebar.config is optional, but file description file must exist # at 'src/${PN}.app.src'. rebar_src_prepare() { - debug-print-function ${FUNCNAME} "${@}" + debug-print-function ${FUNCNAME} "$@" default rebar_set_vsn @@ -210,9 +101,9 @@ rebar_src_prepare() { # @DESCRIPTION: # Configure with ERL_LIBS set. rebar_src_configure() { - debug-print-function ${FUNCNAME} "${@}" + debug-print-function ${FUNCNAME} "$@" - local -x ERL_LIBS="${EPREFIX}/$(get_erl_libs)" + local -x ERL_LIBS="${EPREFIX}$(get_erl_libs)" default } @@ -220,7 +111,7 @@ rebar_src_configure() { # @DESCRIPTION: # Compile project with rebar. rebar_src_compile() { - debug-print-function ${FUNCNAME} "${@}" + debug-print-function ${FUNCNAME} "$@" erebar compile } @@ -229,7 +120,7 @@ rebar_src_compile() { # @DESCRIPTION: # Run unit tests. rebar_src_test() { - debug-print-function ${FUNCNAME} "${@}" + debug-print-function ${FUNCNAME} "$@" erebar eunit } @@ -241,7 +132,7 @@ rebar_src_test() { # # Function expects that project conforms to Erlang/OTP structure. rebar_src_install() { - debug-print-function ${FUNCNAME} "${@}" + debug-print-function ${FUNCNAME} "$@" local bin local dest="$(get_erl_libs)/${P}" @@ -252,7 +143,7 @@ rebar_src_install() { [[ -d bin ]] && for bin in bin/*; do dobin "$bin"; done if [[ -d priv ]]; then - cp -pR priv "${ED%/}/${dest}/" || die "failed to install priv/" + cp -pR priv "${ED}${dest}/" || die "failed to install priv/" fi einstalldocs |