améliorer la prise en charge de dkbuild imbriqué

This commit is contained in:
Jephté Clain 2025-02-08 02:48:19 +04:00
parent 7611760c3c
commit e674b316c3
2 changed files with 54 additions and 9 deletions

55
dkbuild
View File

@ -719,6 +719,18 @@ quelle, avec la même syntaxe qu'en ligne de commande. L'intérêt de cette
commande est qu'on est assuré d'utiliser le même dkbuild que celui qui traite le
script de build courant.
Les variables DKBUILD_CMD_ARGS, DKBUILD_CONFIGS, DKBUILD_ENVS et DKBUILD_ARGS
peuvent être utilisées pour reprendre les valeurs spécifiées en ligne de
commande, e.g"'
dkbuild -c "${DKBUILD_CONFIGS[0]}" "${DKBUILD_CMD_ARGS[@]}"'"
La variable DKBUILD_CONFIGS contient les noms des fichiers de configuration
utilisés.
Les variables DKBUILD_ENVS et DKBUILD_ARGS sont indexées sur le nom des
variables (resp. arguments). Il est donc possible de reprendre une valeur
particulière, e.g"'
dkbuild -c "${DKBUILD_CONFIGS[0]}" -e "${DKBUILD_ENVS[myenv]}"'"
## composer -- gérer projet composer
USAGE: composer DESTDIR [ACTION [PARAMS] [ARGS]]
@ -935,6 +947,10 @@ declare -A PROTECTED_VARS=(
[ENVIRON]=1
[ARGS]=1
[DEFAULTS]=1
[DKBUILD_CMD_ARGS]=1
[fill_DKBUILD_CONFIGS]=1 [DKBUILD_CONFIGS]=1
[fill_DKBUILD_ENVS]=1 [DKBUILD_ENVS]=1
[fill_DKBUILD_ARGS]=1 [DKBUILD_ARGS]=1
)
SHARED_LOCALS1="local PROJDIR DKBUILD CONFIG"
@ -969,6 +985,11 @@ SHARED_ARGS2=(
--arg: '$TMPARGS+=("$value_")'
)
declare -a DKBUILD_CMD_ARGS
fill_DKBUILD_CONFIGS=; declare -a DKBUILD_CONFIGS
fill_DKBUILD_ENVS=; declare -A DKBUILD_ENVS
fill_DKBUILD_ARGS=; declare -A DKBUILD_ARGS
TFUNCTIONS=(
# dkbuild
section note info debug
@ -1158,32 +1179,38 @@ function ensure_projdir() {
setx CONFIG=abspath "$CONFIG"
edebug "using config $CONFIG"
else
local config
local config found
for config in ~/.dkbuild.env /etc/dkbuild.env; do
if [ -f "$config" ]; then
found=1
CONFIG="$config"
edebug "using default config $CONFIG"
break
fi
done
[ -n "$found" ] || CONFIG=none
fi
}
function load_dkbuild() {
local CONFIG="$CONFIG"
local dkbuildenv="$PROJDIR/$(basename "$DKBUILD").env"
cd "$PROJDIR"
set_defaults dkbuild
if [ -n "$CONFIG" -a "$CONFIG" != none ]; then
edebug "loading $CONFIG"
source "$CONFIG"
if [ -n "$CONFIG" ]; then
if [ "$CONFIG" != none ]; then
edebug "loading $CONFIG"
source "$CONFIG"
fi
[ -n "$fill_DKBUILD_CONFIGS" ] && DKBUILD_CONFIGS+=("$CONFIG")
fi
if [ -f "$dkbuildenv" ]; then
edebug "loading $dkbuildenv"
source "$dkbuildenv"
[ -n "$fill_DKBUILD_CONFIGS" ] && DKBUILD_CONFIGS+=("$dkbuildenv")
fi
edebug "loading $DKBUILD"
source "$DKBUILD"
}
@ -1368,7 +1395,13 @@ function define_functions_env() {
# Ne spécifier la valeur que si elle n'a pas déjà été définie
_ENVIRON["$name"]="$value"
ENVIRON["$name"]="$value"
[ -z "${PROTECTED_VARS[$name]}" ] && _setv "export $name" "$value"
if [ -z "${PROTECTED_VARS[$name]}" ]; then
_setv "export $name" "$value"
if [ -n "$fill_DKBUILD_ENVS" ]; then
DKBUILD_ENVS["$name"]="$name=$value"
DKBUILD_CMD_ARGS+=(-e "$name=$value")
fi
fi
fi
done
}
@ -1401,6 +1434,10 @@ function define_functions_env() {
if [ "${ARGS[$name]-__UNDEFINED__}" == __UNDEFINED__ ]; then
# Ne spécifier la valeur que si elle n'a pas déjà été définie
ARGS["$name"]="$value"
if [ -n "$fill_DKBUILD_ARGS" ]; then
DKBUILD_ARGS["$name"]="$name=$value"
DKBUILD_CMD_ARGS+=(--arg "$name=$value")
fi
fi
done
}
@ -1610,10 +1647,10 @@ function resolve_dists_profiles() {
reset_functions
define_functions_env
setenv "${TMPENVIRON[@]}"
setarg "${TMPARGS[@]}"
fill_DKBUILD_ENVS=1 setenv "${TMPENVIRON[@]}"
fill_DKBUILD_ARGS=1 setarg "${TMPARGS[@]}"
setarg "$@"
load_dkbuild
fill_DKBUILD_CONFIGS=1 load_dkbuild
}
function foreach_dists_profiles() {

View File

@ -0,0 +1,8 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
if runb; then
qvals dkbuild -c "${DKBUILD_CONFIGS[0]}" "${DKBUILD_CMD_ARGS[@]}"
fi
# pas de build automatique
AUTOBUILD=