aboutsummaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
authorAnna (cybertailor) Vyalkova <cyber+gentoo@sysrq.in>2024-01-23 20:24:35 +0500
committerAnna (cybertailor) Vyalkova <cyber+gentoo@sysrq.in>2024-01-24 23:43:00 +0500
commit586a56440594d8cde2ceb75e90cc0f4a19d8a8f5 (patch)
treebb0040adb602e1763c219aa8fa199ab1f3894d43 /eclass
parentapp-editors/neovim-qt: add 0.2.18 (diff)
downloadguru-586a56440594d8cde2ceb75e90cc0f4a19d8a8f5.tar.gz
guru-586a56440594d8cde2ceb75e90cc0f4a19d8a8f5.tar.bz2
guru-586a56440594d8cde2ceb75e90cc0f4a19d8a8f5.zip
databases.eclass: new --add-deps helper
Signed-off-by: Anna (cybertailor) Vyalkova <cyber+gentoo@sysrq.in>
Diffstat (limited to 'eclass')
-rw-r--r--eclass/databases.eclass101
-rwxr-xr-xeclass/tests/databases.sh86
2 files changed, 131 insertions, 56 deletions
diff --git a/eclass/databases.eclass b/eclass/databases.eclass
index 9c2457e93..1c640d3ee 100644
--- a/eclass/databases.eclass
+++ b/eclass/databases.eclass
@@ -28,6 +28,11 @@
#
# @SUBSECTION Helper usage
#
+# --add-deps <use>
+#
+# Adds the server package to build-time dependencies under the given USE flag
+# (IUSE will be set automatically).
+#
# --die [msg]
#
# Prints the path to the server's log file to the console and aborts the
@@ -79,10 +84,10 @@
#
# ...
#
-# BDEPEND="test? ( ${DATABASES_DEPEND[postgres]} )"
-#
# distutils_enable_tests pytest
#
+# epostgres --add-deps test
+#
# src_test() {
# epostgres --start 65432
# distutils-r1_src_test
@@ -118,39 +123,41 @@ declare -Ag DATABASES_DEPEND=()
# @FUNCTION: _databases_set_globals
# @INTERNAL
+# @DESCRIPTION:
+# Set the DATABASES_DEPEND variable.
_databases_set_globals() {
- local -A db_pkgs=(
- [memcached]="net-misc/memcached"
- [mongod]="dev-db/mongodb"
- [mysql]="virtual/mysql"
- [postgres]="dev-db/postgresql"
- [redis]="dev-db/redis"
- )
-
- local -A db_useflags=(
- [mysql]="server"
- [postgres]="server"
- )
-
- if declare -p DATABASES_REQ_USE &>/dev/null; then
- [[ $(declare -p DATABASES_REQ_USE) == "declare -A"* ]] || \
- die "DATABASES_REQ_USE must be declared as an associative array"
- fi
-
- local name dep usestr
- for name in "${!db_pkgs[@]}"; do
- dep=${db_pkgs[${name}]?}
- usestr=${db_useflags[${name}]}
- usestr+=",${DATABASES_REQ_USE[${name}]}"
- # strip leading/trailing commas
- usestr=${usestr#,}
- usestr=${usestr%,}
-
- [[ ${usestr} ]] && usestr="[${usestr}]"
- DATABASES_DEPEND[${name?}]="${dep?}${usestr}"
- done
-
- readonly DATABASES_DEPEND
+ local -A db_pkgs=(
+ [memcached]="net-misc/memcached"
+ [mongod]="dev-db/mongodb"
+ [mysql]="virtual/mysql"
+ [postgres]="dev-db/postgresql"
+ [redis]="dev-db/redis"
+ )
+
+ local -A db_useflags=(
+ [mysql]="server"
+ [postgres]="server"
+ )
+
+ if declare -p DATABASES_REQ_USE &>/dev/null; then
+ [[ $(declare -p DATABASES_REQ_USE) == "declare -A"* ]] || \
+ die "DATABASES_REQ_USE must be declared as an associative array"
+ fi
+
+ local name dep usestr
+ for name in "${!db_pkgs[@]}"; do
+ dep=${db_pkgs[${name}]?}
+ usestr=${db_useflags[${name}]}
+ usestr+=",${DATABASES_REQ_USE[${name}]}"
+ # strip leading/trailing commas
+ usestr=${usestr#,}
+ usestr=${usestr%,}
+
+ [[ ${usestr} ]] && usestr="[${usestr}]"
+ DATABASES_DEPEND[${name?}]="${dep?}${usestr}"
+ done
+
+ readonly DATABASES_DEPEND
}
_databases_set_globals
unset -f _databases_set_globals
@@ -176,6 +183,23 @@ _databases_die() {
die -n "${@}"
}
+# @FUNCTION: _databases_add_deps
+# @USAGE: <funcname> <use>
+# @INTERNAL
+# @DESCRIPTION:
+# Set the BDEPEND, IUSE and RESTRICT variables.
+_databases_add_deps() {
+ local funcname=${1?}
+ local useflag=${2?}
+
+ BDEPEND="${useflag}? ( ${DATABASES_DEPEND[${funcname:1}]} )"
+ IUSE="${useflag}"
+ [[ ${useflag} == "test" ]] &&
+ RESTRICT="!test? ( test )"
+
+ return 0
+}
+
# @FUNCTION: _databases_stop_service
# @USAGE: <funcname>
# @INTERNAL
@@ -200,19 +224,22 @@ _databases_stop_service() {
# @DESCRIPTION:
# Process the given command with its options.
#
-# If "--start" command is used, `_${funcname}_start` function must be defined.
+# If "--start" command is used, "_${funcname}_start" function must be defined.
# Note that directories will be created automatically.
#
-# If `_${funcname}_stop` function is not declared, the internal
+# If "_${funcname}_stop" function is not declared, the internal
# `_databases_stop_service` function will be used instead.
#
-# No `--get` function can be overloaded.
+# "--get-*" and "-add-deps" helpers cannot be overloaded.
_databases_dispatch() {
local funcname=${1?}
local cmd=${2?}
shift; shift
case ${cmd} in
+ --add-deps)
+ _databases_add_deps ${funcname} "${@}"
+ ;;
--die)
_databases_die ${funcname} "${@}"
;;
diff --git a/eclass/tests/databases.sh b/eclass/tests/databases.sh
index 92cbbd13b..08dd75472 100755
--- a/eclass/tests/databases.sh
+++ b/eclass/tests/databases.sh
@@ -9,36 +9,70 @@ source "${GENTOO_REPO}"/eclass/tests/tests-common.sh || exit
TESTS_ECLASS_SEARCH_PATHS+=( "${GENTOO_REPO}"/eclass )
declare -A DATABASES_REQ_USE=(
- [mongod]="ssl"
- [postgres]="xml"
+ [mongod]="ssl"
+ [postgres]="xml"
)
inherit databases
+HELPERS=( ememcached emongod emysql epostgres eredis )
+
test_depend() {
- tbegin "if \${DATABASES_DEPEND} is defined"
- declare -p DATABASES_DEPEND &>/dev/null
- tend $?
+ tbegin "if \${DATABASES_DEPEND} is defined"
+ declare -p DATABASES_DEPEND &>/dev/null
+ tend $?
- tbegin "\${DATABASES_DEPEND[memcached]}"
- test "${DATABASES_DEPEND[memcached]}" == "net-misc/memcached"
- tend $?
+ tbegin "\${DATABASES_DEPEND[memcached]}"
+ test "${DATABASES_DEPEND[memcached]}" == "net-misc/memcached"
+ tend $?
- tbegin "\${DATABASES_DEPEND[mongod]}"
- test "${DATABASES_DEPEND[mongod]}" == "dev-db/mongodb[ssl]"
- tend $?
+ tbegin "\${DATABASES_DEPEND[mongod]}"
+ test "${DATABASES_DEPEND[mongod]}" == "dev-db/mongodb[ssl]"
+ tend $?
- tbegin "\${DATABASES_DEPEND[mysql]}"
- test "${DATABASES_DEPEND[mysql]}" == "virtual/mysql[server]"
- tend $?
+ tbegin "\${DATABASES_DEPEND[mysql]}"
+ test "${DATABASES_DEPEND[mysql]}" == "virtual/mysql[server]"
+ tend $?
- tbegin "\${DATABASES_DEPEND[postgres]}"
- test "${DATABASES_DEPEND[postgres]}" == "dev-db/postgresql[server,xml]"
- tend $?
+ tbegin "\${DATABASES_DEPEND[postgres]}"
+ test "${DATABASES_DEPEND[postgres]}" == "dev-db/postgresql[server,xml]"
+ tend $?
+
+ tbegin "\${DATABASES_DEPEND[redis]}"
+ test "${DATABASES_DEPEND[redis]}" == "dev-db/redis"
+ tend $?
+}
+
+test_add_deps() {
+ local IUSE= RESTRICT= BDEPEND=
+ local helper=${1?}
+
+ IUSE= RESTRICT= BDEPEND=
+ tbegin "'${helper} --add-deps test'"
+ ${helper} --add-deps test && [[ ${BDEPEND} && ${IUSE} && ${RESTRICT} ]]
+ tend $?
- tbegin "\${DATABASES_DEPEND[redis]}"
- test "${DATABASES_DEPEND[redis]}" == "dev-db/redis"
+ IUSE= RESTRICT= BDEPEND=
+ tbegin "'${helper} --add-deps test-db'"
+ ${helper} --add-deps test-db && [[ ${BDEPEND} && ${IUSE} && ! ${RESTRICT} ]]
+ tend $?
+}
+
+test_getters() {
+ local helper=${1?}
+ local getters=(
+ --get-dbpath
+ --get-logfile
+ --get-pidfile
+ --get-sockdir
+ --get-sockfile
+ )
+
+ for getter in "${getters[@]}"; do
+ tbegin "'${helper} ${getter}'"
+ test -n "$(${helper} ${getter})"
tend $?
+ done
}
einfo "Testing dependency strings"
@@ -46,4 +80,18 @@ eindent
test_depend
eoutdent
+einfo "Testing --add-deps helper"
+eindent
+for helper in "${HELPERS[@]}"; do
+ test_add_deps ${helper}
+done
+eoutdent
+
+einfo "Testing --get-* helpers"
+eindent
+for helper in "${HELPERS[@]}"; do
+ test_getters ${helper}
+done
+eoutdent
+
texit