From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 957101581C1 for ; Thu, 11 Jul 2024 03:39:02 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id F026E2BC01F; Thu, 11 Jul 2024 03:38:56 +0000 (UTC) Received: from sysrq.in (sysrq.in [37.79.202.136]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 7705D2BC013 for ; Thu, 11 Jul 2024 03:38:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; s=sysrq.in; bh=n524o4NMSLJ nU65ikNnzNR7xJGY/LTkR9Sv3DiPqqn8=; h=in-reply-to:references:cc:to: from; d=sysrq.in; b=VnPXQaQ83lDhFrrbLdbUIzJt/3BmY9grtsERXlPEy7GZj/Z2e0 M3dczyvTpXyP5zE2EHhehB6johesdTDYcHSUkx+3t+p2UlS7UI42UoRa9C24XibM4rg/NM eod5H7K5mlLhWVYu6BkGtTsdwwd9K3fztjQgD5bPvlDKWtdU19FsT+OzFFn52Mh9rg7Cw9 CtFxjZCq0TqBnJbhj57xKwGKnNyMrIRVyP0wk4acsMWP3K3XblTYqB3ieuAKWyGrm9lwUO DCWIvuQxrPsBqX6M/j9/ytDUcZ5+vFzH5UunXBXZvMcVc9liAkhfNanKCNjhozQe34cv04 hDEIA3SJpHhw== Received: from sysrq.in ( [10.0.0.1]) by sysrq.in (OpenSMTPD) with ESMTPS id 315c15ce (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Thu, 11 Jul 2024 03:38:46 +0000 (UTC) Date: Thu, 11 Jul 2024 08:38:45 +0500 From: "Anna (cybertailor) Vyalkova" To: gentoo-dev@lists.gentoo.org Cc: contact@hacktivis.me Subject: [gentoo-dev] Re: [PATCH 2/2] rebar3.eclass: add new eclass Message-ID: Mail-Followup-To: gentoo-dev@lists.gentoo.org, contact@hacktivis.me References: <20240710071916.116114-1-flo@geekplace.eu> <20240710071916.116114-3-flo@geekplace.eu> Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-dev@lists.gentoo.org Reply-to: gentoo-dev@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20240710071916.116114-3-flo@geekplace.eu> User-Agent: Mutt/2.2.13 (2024-03-09) X-Archives-Salt: 477991fb-0784-4325-beac-02adeb5bce7d X-Archives-Hash: cc4fe2b6853c02748cafb2c2423971aa On 2024-07-10 09:19, Florian Schmaus wrote: >From: Florian Schmaus > >Add a new eclass for dev-util/rebar:3, based on the work of Anna >Vyalkova in ::guru (thanks!). There's also rebar3.eclass in lanodanOverlay, hereby CC-ing Haelwenn on this. >The Erlang/OTP ecosystem is moving to Rebar3. Upstreams start to drop >support for Rebar2, or at least consider it. > >Signed-off-by: Florian Schmaus >--- > eclass/rebar3.eclass | 204 +++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 204 insertions(+) > create mode 100644 eclass/rebar3.eclass > >diff --git a/eclass/rebar3.eclass b/eclass/rebar3.eclass >new file mode 100644 >index 000000000000..83363ab54602 >--- /dev/null >+++ b/eclass/rebar3.eclass >@@ -0,0 +1,204 @@ >+# Copyright 1999-2024 Gentoo Authors >+# Distributed under the terms of the GNU General Public License v2 >+ >+# @ECLASS: rebar3.eclass >+# @MAINTAINER: >+# Florian Schmaus >+# @AUTHOR: >+# Amadeusz Żołnowski >+# Anna (cybertailor) Vyalkova >+# @SUPPORTED_EAPIS: 8 >+# @PROVIDES: rebar-utils >+# @BLURB: Build Erlang/OTP projects using dev-util/rebar:3. >+# @DESCRIPTION: >+# An eclass providing functions to build Erlang/OTP projects using >+# dev-util/rebar:3. >+# >+# rebar is a tool which tries to resolve dependencies itself which is by >+# cloning remote git repositories. Dependent projects are usually expected to >+# be in sub-directory 'deps' rather than looking at system Erlang lib >+# directory. Projects relying on rebar usually don't have 'install' make >+# targets. The eclass workarounds some of these problems. It handles >+# installation in a generic way for Erlang/OTP structured projects. >+ >+case ${EAPI} in >+ 8) ;; >+ *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; >+esac >+ >+if [[ -z ${_REBAR3_ECLASS} ]]; then >+_REBAR3_ECLASS=1 >+ >+inherit edo rebar-utils >+ >+RDEPEND="dev-lang/erlang:=" >+DEPEND="${RDEPEND}" >+BDEPEND=" >+ dev-util/rebar:3 >+ >=sys-apps/gawk-4.1 >+" >+ >+# @ECLASS_VARIABLE: REBAR_PROFILE >+# @DESCRIPTION: >+# Rebar profile to use. >+: "${REBAR_PROFILE:=default}" >+ >+# @ECLASS_VARIABLE: REBAR_APP_SRC >+# @DESCRIPTION: >+# Relative path to .app.src description file. >+: "${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 >+# @USAGE: >+# @RETURN: 0 success, 1 dependency not found, 2 multiple versions found >+# @DESCRIPTION: >+# Find a Erlang package/project by name in Erlang lib directory. Project >+# directory is usually suffixed with version. It is matched to '' >+# or '-*'. >+_rebar_find_dep() { >+ local pn="${1}" >+ local p >+ local result >+ >+ 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. >+ [[ ${result} ]] && return 2 >+ result="${p}" >+ fi >+ done >+ popd >/dev/null || die >+ >+ [[ ${result} ]] || return 1 >+ echo "${result}" >+} >+ >+# @FUNCTION: erebar3 >+# @USAGE: >+# @DESCRIPTION: >+# Run rebar with verbose flag. Die on failure. >+erebar3() { >+ debug-print-function ${FUNCNAME} "${@}" >+ >+ (( $# > 0 )) || die "erebar: at least one target is required" Oversight, should be ${FUNCNAME} instead of "erebar" (old name). >+ >+ case ${1} in >+ eunit|ct) >+ local -x ERL_LIBS="." ;; >+ *) >+ local -x ERL_LIBS="${EPREFIX}$(get_erl_libs)" ;; >+ esac >+ >+ edo rebar3 "$@" >+} >+ >+# @FUNCTION: rebar3_src_prepare >+# @DESCRIPTION: >+# Prevent rebar from fetching and compiling dependencies. Set version in Ditto. >+# project description file if it's not set. >+# >+# Existence of rebar.config is optional, but file description file must exist >+# at 'src/${PN}.app.src'. >+rebar3_src_prepare() { >+ debug-print-function ${FUNCNAME} "${@}" >+ >+ default_src_prepare >+ rebar_set_vsn >+ >+ if [[ -f rebar.lock ]]; then >+ rm rebar.lock || die >+ fi >+ >+ if [[ -f rebar.config ]]; then >+ rebar_disable_coverage >+ rebar_remove_deps >+ fi >+} >+ >+# @FUNCTION: rebar3_src_configure >+# @DESCRIPTION: >+# Configure with ERL_LIBS set. >+rebar3_src_configure() { >+ debug-print-function ${FUNCNAME} "${@}" >+ >+ local -x ERL_LIBS="${EPREFIX}$(get_erl_libs)" >+ default_src_configure >+} >+ >+# @FUNCTION: rebar3_src_compile >+# @DESCRIPTION: >+# Compile project with rebar. Ditto. >+rebar3_src_compile() { >+ debug-print-function ${FUNCNAME} "${@}" >+ >+ erebar3 as "${REBAR_PROFILE}" release --all >+} >+ >+# @FUNCTION: rebar3_src_test >+# @DESCRIPTION: >+# Run unit tests. >+rebar3_src_test() { >+ debug-print-function ${FUNCNAME} "${@}" >+ >+ erebar3 eunit -v >+} >+ >+# @FUNCTION: rebar3_install_lib >+# @USAGE: >+# @DESCRIPTION: >+# Install BEAM files, include headers and native libraries. >+# >+# Function expects that project conforms to Erlang/OTP structure. >+rebar3_install_lib() { >+ debug-print-function ${FUNCNAME} "${@}" >+ >+ local dest="$(get_erl_libs)/${P}" >+ >+ pushd "${1?}" >/dev/null || die >+ for dir in ebin include priv; do >+ if [[ -d ${dir} && ! -L ${dir} ]]; then >+ cp -pR "${dir}" "${ED%/}${dest}/" || die "failed to install ${dir}/" >+ fi >+ done >+ popd >/dev/null || die >+} >+ >+# @FUNCTION: rebar3_src_install >+# @DESCRIPTION: >+# Install built release or library. >+# >+# Function expects that project conforms to Erlang/OTP structure. >+rebar3_src_install() { >+ debug-print-function ${FUNCNAME} "${@}" >+ >+ pushd "_build/${REBAR_PROFILE}" >/dev/null || die >+ if [[ -d rel/${PN} ]]; then >+ if ! declare -f rebar3_install_release >/dev/null; then >+ die "${FUNCNAME}: a custom function named 'rebar3_install_release' is required to install a release" >+ fi >+ pushd rel/${PN} >/dev/null || die >+ rebar3_install_release || die >+ popd >/dev/null || die >+ elif [[ -d lib/${PN} ]]; then >+ rebar3_install_lib lib/${PN} >+ else >+ die "No releases or libraries to install" >+ fi >+ popd >/dev/null || die >+ >+ einstalldocs >+} >+ >+fi >+ >+EXPORT_FUNCTIONS src_prepare src_compile src_test src_install >-- >2.44.2 >