mirror of
https://github.com/gentoo-mirror/guru.git
synced 2026-07-20 04:23:16 -04:00
eclass/nimble.eclass: new eclass
Signed-off-by: Anna (cybertailor) Vyalkova <cyber+gentoo@sysrq.in>
This commit is contained in:
169
eclass/nimble.eclass
Normal file
169
eclass/nimble.eclass
Normal file
@@ -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 <cyber+gentoo@sysrq.in>
|
||||
# @AUTHOR:
|
||||
# Anna Vyalkova <cyber+gentoo@sysrq.in>
|
||||
# @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
|
||||
Reference in New Issue
Block a user