commit:     56b12ae84dcc932450abcab8e2099582cf4e22c0
Author:     Anna (cybertailor) Vyalkova <cyber+gentoo <AT> sysrq <DOT> in>
AuthorDate: Wed Jun 29 08:18:03 2022 +0000
Commit:     Florian Schmaus <flow <AT> gentoo <DOT> org>
CommitDate: Wed Jun 29 11:52:32 2022 +0000
URL:        https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=56b12ae8

eclass/nimble.eclass: new eclass

Signed-off-by: Anna (cybertailor) Vyalkova <cyber+gentoo <AT> sysrq.in>

 eclass/nimble.eclass | 169 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 169 insertions(+)

diff --git a/eclass/nimble.eclass b/eclass/nimble.eclass
new file mode 100644
index 000000000..177a2fbd4
--- /dev/null
+++ b/eclass/nimble.eclass
@@ -0,0 +1,169 @@
+# Copyright 2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# @ECLASS: nimble.eclass
+# @MAINTAINER:
+# Anna Vyalkova <[email protected]>
+# @AUTHOR:
+# Anna Vyalkova <[email protected]>
+# @SUPPORTED_EAPIS: 8
+# @PROVIDES: nim-utils
+# @BLURB: eclass to build Nim packages that use nimble as a build system
+# @EXAMPLE:
+# Typical ebuild for a Nim application:
+#
+# EAPI=8
+#
+# inherit nimble
+#
+# ...
+#
+# src_compile() {
+#      nimble_src_compile
+#      nimble_build scss
+# }
+#
+# ...
+#
+#
+# Typical ebuild for a Nim library:
+#
+# EAPI=8
+#
+# inherit nimble
+#
+# ...
+# SLOT=${PV}
+#
+# set_package_url "https://github.com/example/example";
+
+
+case ${EAPI} in
+       8) ;;
+       *) die "${ECLASS}: EAPI ${EAPI} unsupported."
+esac
+
+if [[ ! ${_NIMBLE_ECLASS} ]]; then
+
+# @ECLASS_VARIABLE: BUILD_DIR
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# Build directory, location where all generated files should be placed.
+# If this isn't set, it defaults to ${WORKDIR}/${P}-build.
+
+inherit edo nim-utils ninja-utils
+
+BDEPEND="${NINJA_DEPEND}
+       dev-lang/nim
+       dev-nim/nimbus
+"
+
+# @FUNCTION: set_package_url
+# @USAGE: <url>
+# @DESCRIPTION:
+# If this function is called, nimbus will generate and install a 
nimblemeta.json
+# file.  Some packages specify their dependencies using URLs and nimbus is
+# unable to find them unless a metadata file exists.
+set_package_url() {
+       debug-print-function ${FUNCNAME} "${@}"
+
+       (( $# == 1 )) || \
+               die "${FUNCNAME} takes exactly one argument"
+
+       _PACKAGE_URL="${1}"
+}
+
+# @FUNCTION: get_package_url
+# @USAGE:
+# @INTERNAL
+# @RETURN: package URL
+get_package_url() {
+       echo "${_PACKAGE_URL}"
+}
+
+# @FUNCTION: nimble_src_configure
+# @USAGE:
+# @DESCRIPTION:
+# Configure the package with nimbus.  This will start an out-of-source build.
+# Passes arguments to Nim by reading from an optionally pre-defined local
+# mynimargs bash array.
+# @CODE
+# src_configure() {
+#       local mynimargs=(
+#               --threads:on
+#       )
+#       nimble_src_configure
+# }
+# @CODE
+nimble_src_configure() {
+       debug-print-function ${FUNCNAME} "${@}"
+
+       [[ -n "${NINJA_DEPEND}" ]] || \
+               ewarn "Unknown value '${NINJA}' for \${NINJA}"
+
+       BUILD_DIR="${BUILD_DIR:-${WORKDIR}/${P}-build}"
+
+       [[ -z ${mynimargs} ]] && local -a mynimargs=()
+       local mynimargstype=$(declare -p mynimargs 2>&-)
+       if [[ "${mynimargstype}" != "declare -a mynimargs="* ]]; then
+               die "mynimargs must be declared as array"
+       fi
+
+       nim_gen_config
+
+       local nimbusargs=(
+               --nimbleDir:"${EPREFIX}"/opt/nimble
+               --binDir:"${EPREFIX}"/usr/bin
+               --url:"$(get_package_url)"
+               "${mynimargs[@]}"
+       )
+
+       edo nimbus "${nimbusargs[@]}" "${S}" "${BUILD_DIR}"
+}
+
+# @FUNCTION: nimble_build
+# @USAGE: [ninja args...]
+# @DESCRIPTION:
+# Function for building the package.  All arguments are passed to eninja.
+nimble_build() {
+       debug-print-function ${FUNCNAME} "${@}"
+
+       eninja -C "${BUILD_DIR}" "${@}"
+}
+
+# @FUNCTION: nimble_src_compile
+# @USAGE: [ninja args...]
+# @DESCRIPTION:
+# Build the package with Ninja.  All arguments are passed to nimble_build.
+nimble_src_compile() {
+       debug-print-function ${FUNCNAME} "${@}"
+
+       nimble_build "${@}"
+}
+
+# @FUNCTION: nimble_src_test
+# @USAGE: [ninja args...]
+# @DESCRIPTION:
+# Test the package.  All arguments are passed to nimble_build.
+nimble_src_test() {
+       debug-print-function ${FUNCNAME} "${@}"
+
+       if nonfatal nimble_build test -n &> /dev/null; then
+               nimble_build test "${@}"
+       fi
+}
+
+# @FUNCTION: nimble_src_install
+# @DESCRIPTION:
+# Install the package with Ninja.  All arguments are passed to nimble_build.
+nimble_src_install() {
+       debug-print-function ${FUNCNAME} "${@}"
+
+       DESTDIR="${D}" nimble_build install "${@}"
+       einstalldocs
+}
+
+_NIMBLE_ECLASS=1
+fi
+
+EXPORT_FUNCTIONS src_configure src_compile src_test src_install

Reply via email to