mirror of
https://github.com/gentoo-mirror/guru.git
synced 2025-04-20 00:08:58 -04:00
219 lines
5.5 KiB
Bash
219 lines
5.5 KiB
Bash
# Copyright 2021-2022 Gentoo Authors
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
|
|
# @ECLASS: boinc.eclass
|
|
# @MAINTAINER:
|
|
# Anna Vyalkova <cyber+gentoo@sysrq.in>
|
|
# @SUPPORTED_EAPIS: 8
|
|
# @BLURB: An eclass to build BOINC applications and libraries.
|
|
# @DESCRIPTION:
|
|
# This eclass provides helper functions to build BOINC applications and libraries.
|
|
|
|
case ${EAPI} in
|
|
8) ;;
|
|
*) die "${ECLASS}: EAPI ${EAPI} unsupported."
|
|
esac
|
|
|
|
# @ECLASS_VARIABLE: BOINC_SUBMODULE
|
|
# @PRE_INHERIT
|
|
# @DEFAULT_UNSET
|
|
# @DESCRIPTION:
|
|
# Set this variable to a subdirectory relative to BOINC source repository,
|
|
# if software cannot be built outside it (for example, if some required
|
|
# headers are missing in sci-misc/boinc).
|
|
#
|
|
# If unset, no functions will be exported.
|
|
|
|
# @ECLASS_VARIABLE: BOINC_S
|
|
# @DEFAULT_UNSET
|
|
# @DESCRIPTION:
|
|
# If defined this variable determines the source directory name after
|
|
# unpacking. This defaults to package name and version. Note that this
|
|
# variable supports a wildcard mechanism to help with github tarballs
|
|
# that contain the commit hash as part of the directory name.
|
|
|
|
if [[ ! ${_BOINC_ECLASS} ]]; then
|
|
|
|
inherit autotools edo toolchain-funcs
|
|
|
|
fi
|
|
|
|
if [[ ${BOINC_SUBMODULE} ]]; then
|
|
EXPORT_FUNCTIONS src_unpack src_prepare src_configure
|
|
fi
|
|
|
|
if [[ ! ${_BOINC_ECLASS} ]]; then
|
|
|
|
# @FUNCTION: get_boinc_src
|
|
# @USAGE: <SRC_URI|S> <release> [client|server]
|
|
# @RETURN: SRC_URI snippet or temporary build directory for given BOINC release
|
|
get_boinc_src() {
|
|
debug-print-function ${FUNCNAME} "${@}"]
|
|
|
|
local query_var=${1}
|
|
local RELEASE_PATCH=${2}
|
|
local RELEASE_MINOR=$(ver_cut 1-2 ${RELEASE_PATCH})
|
|
local RELEASE_TYPE=${3:-client}
|
|
|
|
local SUFFIX=
|
|
case ${RELEASE_TYPE} in
|
|
server) SUFFIX="-server" ;;
|
|
client) ;;
|
|
*) die "${FUNCNAME}: unknown release type '${RELEASE_TYPE}'"
|
|
esac
|
|
|
|
local _SRC_URI="https://github.com/BOINC/boinc/archive/"
|
|
_SRC_URI+="${RELEASE_TYPE}_release/${RELEASE_MINOR}/${RELEASE_PATCH}.tar.gz"
|
|
_SRC_URI+=" -> boinc${SUFFIX}-${RELEASE_PATCH}.tar.gz"
|
|
|
|
local _S="${WORKDIR}/boinc-${RELEASE_TYPE}_release-${RELEASE_MINOR}-${RELEASE_PATCH}"
|
|
|
|
case ${query_var} in
|
|
SRC_URI) echo "${_SRC_URI}" ;;
|
|
S) echo "${_S}" ;;
|
|
*) die "${FUNCNAME}: unknown variable to query (${query_var})"
|
|
esac
|
|
|
|
}
|
|
|
|
# @ECLASS_VARIABLE: BOINC_BUILD_DIR
|
|
# @OUTPUT_VARIABLE
|
|
# @DESCRIPTION:
|
|
# Temporary build directory, where BOINC sources are located.
|
|
|
|
# @FUNCTION: boinc_require_source
|
|
# @USAGE: [boinc version] [client|server]
|
|
# @DESCRIPTION:
|
|
# Set up SRC_URI and S for building application within BOINC source tree.
|
|
#
|
|
# This function must be called in global scope, after BOINC_SUBMODULE
|
|
# and SRC_URI have been declared. Take care not to overwrite the variables
|
|
# set by it.
|
|
#
|
|
# If no BOINC version is given, this function assumes it equal to client
|
|
# release $PV.
|
|
boinc_require_source() {
|
|
debug-print-function ${FUNCNAME} "${@}"]
|
|
|
|
local boinc_version=${1:-${PV}}
|
|
SRC_URI+=" $(get_boinc_src SRC_URI ${boinc_version} ${2})"
|
|
|
|
readonly BOINC_BUILD_DIR="$(get_boinc_src S ${boinc_version} ${2})"
|
|
S="${BOINC_BUILD_DIR}/${BOINC_SUBMODULE}"
|
|
}
|
|
|
|
# @FUNCTION: boinc_enable_autotools
|
|
# @USAGE: [econf args...]
|
|
# @DESCRIPTION:
|
|
# Configure BOINC source tree using autotools.
|
|
#
|
|
# If no arguments are given, econf will be called
|
|
# with --enable-pkg-devel flag.
|
|
#
|
|
# This function must be called in global scope.
|
|
boinc_enable_autotools() {
|
|
debug-print-function ${FUNCNAME} "${@}"]
|
|
|
|
_BOINC_RUN_AUTOTOOLS=1
|
|
_BOINC_ECONF_ARGS=${@:---enable-pkg-devel}
|
|
}
|
|
|
|
# @FUNCTION: boinc_override_config
|
|
# @USAGE: <config.h>
|
|
# @DESCRIPTION:
|
|
# Some applications do not need autotools to build but
|
|
# use a few HAVE_* defines.
|
|
|
|
# If you want to save ~40 seconds and really know what
|
|
# to do, pass prepared config.h to this function.
|
|
#
|
|
# This function must be called in global scope.
|
|
boinc_override_config() {
|
|
debug-print-function ${FUNCNAME} "${@}"]
|
|
|
|
_BOINC_CONFIG_OVERRIDE="${1}"
|
|
}
|
|
|
|
# @FUNCTION: boinc_builddir_check
|
|
# @USAGE:
|
|
# @DESCRIPTION:
|
|
# Make sure BOINC_BUILD_DIR has a value.
|
|
boinc_builddir_check() {
|
|
debug-print-function ${FUNCNAME} "${@}"]
|
|
|
|
if [[ ! ${BOINC_BUILD_DIR} ]]; then
|
|
eerror "BOINC_BUILD_DIR is not set."
|
|
die "Did you forget to call boinc_require_source?"
|
|
fi
|
|
|
|
mkdir -p ${BOINC_BUILD_DIR} || die
|
|
}
|
|
|
|
boinc_src_unpack() {
|
|
debug-print-function ${FUNCNAME} "${@}"]
|
|
|
|
default_src_unpack
|
|
boinc_builddir_check
|
|
|
|
[[ -d ${S} ]] && \
|
|
return
|
|
|
|
# Special case, for the always-lovely GitHub fetches. With this,
|
|
# we allow the star glob to just expand to whatever directory it's
|
|
# called.
|
|
if [[ "${BOINC_S:=${P}}" = *"*"* ]]; then
|
|
pushd "${WORKDIR}" >/dev/null || die
|
|
local shopt_save=$(shopt -p nullglob)
|
|
shopt -s nullglob
|
|
|
|
# use an array to trigger filename expansion
|
|
BOINC_S=( ${BOINC_S} )
|
|
if [[ ${#BOINC_S[@]} -gt 1 ]]; then
|
|
die "BOINC_S did expand to multiple paths: ${BOINC_S[*]}"
|
|
fi
|
|
|
|
${shopt_save}
|
|
popd >/dev/null || die
|
|
fi
|
|
|
|
mkdir -p "$(dirname "${S}")" || die
|
|
mv "${WORKDIR}/${BOINC_S}" "${S}" || die
|
|
}
|
|
|
|
boinc_src_prepare() {
|
|
debug-print-function ${FUNCNAME} "${@}"]
|
|
|
|
boinc_builddir_check
|
|
default_src_prepare
|
|
|
|
if [[ ${_BOINC_RUN_AUTOTOOLS} ]]; then
|
|
pushd "${BOINC_BUILD_DIR}" >/dev/null || die
|
|
eautoreconf
|
|
popd >/dev/null || die
|
|
fi
|
|
}
|
|
|
|
boinc_src_configure() {
|
|
debug-print-function ${FUNCNAME} "${@}"]
|
|
|
|
boinc_builddir_check
|
|
pushd "${BOINC_BUILD_DIR}" >/dev/null || die
|
|
|
|
edo bash ./generate_svn_version.sh
|
|
|
|
if [[ ${_BOINC_RUN_AUTOTOOLS} ]]; then
|
|
econf "${_BOINC_ECONF_ARGS[@]}"
|
|
else
|
|
tc-export AR CC CPP CXX LD OBJDUMP RANLIB
|
|
fi
|
|
|
|
if [[ ${_BOINC_CONFIG_OVERRIDE} ]]; then
|
|
cp "${_BOINC_CONFIG_OVERRIDE}" config.h || die
|
|
fi
|
|
|
|
popd >/dev/null || die
|
|
}
|
|
|
|
_BOINC_ECLASS=1
|
|
fi
|