From e674b316c33d7bbe7b2099466ba23f8c123b47fe Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Sat, 8 Feb 2025 02:48:19 +0400 Subject: [PATCH] =?UTF-8?q?am=C3=A9liorer=20la=20prise=20en=20charge=20de?= =?UTF-8?q?=20dkbuild=20imbriqu=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dkbuild | 55 ++++++++++++++++++++++++++++------ lib/dkbuild/tests/test-dkbuild | 8 +++++ 2 files changed, 54 insertions(+), 9 deletions(-) create mode 100644 lib/dkbuild/tests/test-dkbuild diff --git a/dkbuild b/dkbuild index d56acc7..4e66819 100755 --- a/dkbuild +++ b/dkbuild @@ -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() { diff --git a/lib/dkbuild/tests/test-dkbuild b/lib/dkbuild/tests/test-dkbuild new file mode 100644 index 0000000..4e1b45e --- /dev/null +++ b/lib/dkbuild/tests/test-dkbuild @@ -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=