#!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 source "$(dirname "$0")/../load.sh" || exit 1 function parse_runphp() { local runphp="$1" preamble="$2" conf="$3" postamble="$4" local conf0 ac_set_tmpfile conf0 # extraire la configuration depuis le fichier <"$runphp" awk -v preamble="$preamble" -v conf="$conf0" -v postamble="$postamble" ' BEGIN { out = preamble } { if ($0 ~ /SOF:runphp.userconf:/) { if (out != "") print >out out = conf } else if ($0 ~ /EOF:runphp.userconf:/) { out = postamble if (out != "") print >out } else { if (out != "") print >out } } ' # mettre en forme le fichier conf: pas de lignes vides avant et après <"$conf0" >"$conf" awk ' BEGIN { p = 0; have_pending = 0; pending = "" } $0 != "" { p = 1 } p == 1 { if ($0 != "") { if (have_pending) print pending print have_pending = 0 pending = "" } else { if (!have_pending) have_pending = 1 else pending = pending "\n" } } ' ac_clean "$conf0" } declare -A PHPWRAPPER_DESTDIRS=( [_bg_launcher.php]=sbin [.launcher.php]=cli [_wrapper.sh]=cli ) declare -A PHPWRAPPER_MODES=( [_bg_launcher.php]=+x [.launcher.php]= [_wrapper.sh]=+x ) projdir= install_phpwrappers=auto args=( "Mettre à jour le script runphp" "[path/to/runphp]" -d:,--projdir:PROJDIR . "\ Copier les fichiers pour un projet de l'université de la Réunion: - BUILDENV0 et BUILDENV sont fixés à ..env.dist et .env - les fichiers ..env.dist et .runphp.conf sont créés le cas échéant - le script build est mis à jour - les wrappers PHP pour la gestion des tâches de fond sont mis à jour le cas échéant" -p,--phpwrappers-install install_phpwrappers=1 "forcer l'installation des wrappers PHP" --np,--no-phpwrappers-install install_phpwrappers= "ne pas installer les wrappers PHP" ) parse_args "$@"; set -- "${args[@]}" if [ -n "$projdir" ]; then setx projdir=abspath "$projdir" set -- "$projdir/sbin/runphp" fi runphp="${1:-.}" if [ -d "$runphp" ]; then runphp="$runphp/runphp" elif [ ! -e "$runphp" ]; then [ "${runphp%/runphp}" != "$runphp" ] || runphp="$runphp/runphp" fi setx runphp=abspath "$runphp" setx rundir=dirname -- "$runphp" [ "$rundir" == "$MYDIR" ] && exit 0 [ -d "$rundir" ] || mkdir -p "$rundir" # Tout d'abord, isoler chaque partie du fichier local ac_set_tmpfile preamble ac_set_tmpfile conf ac_set_tmpfile postamble parse_runphp "$MYDIR/runphp" "$preamble" "$conf" "$postamble" # Puis analyser le fichier destination if [ -f "$runphp" ]; then ac_set_tmpfile userconf parse_runphp "$runphp" "" "$userconf" "" initial_config= elif [ -n "$projdir" ]; then # forcer BUILDENV0=..env.dist et BUILDENV=.env pour les projets de # l'université de la Réunion ac_set_tmpfile userconf sed <"$conf" >"$userconf" ' /^BUILDENV0=/s/=.*/=..env.dist/ /^BUILDENV=/s/=.*/=.env/ ' initial_config=1 else userconf="$conf" initial_config=1 fi # (Re)construire le fichier destination estep "$(relpath "$runphp")" ( cat "$preamble" echo cat "$userconf" echo cat "$postamble" ) >"$runphp" [ -x "$runphp" ] || chmod +x "$runphp" eval "$( vars=(PROJDIR COMPOSERDIR COMPOSERPHAR VENDORDIR BUILDENV0 BUILDENV BUILD_FLAVOUR DIST IMAGENAME) arrays=(BUILD_IMAGES DISTFILES TEMPLATEFILES VARFILES) for var in "${vars[@]}"; do eval "$var="; done for array in "${arrays[@]}"; do eval "$array=()"; done source "$runphp" for var in "${vars[@]}"; do echo_setv2 "$var"; done for array in "${arrays[@]}"; do echo_seta2 "$array"; done )" estep "$(relpath "$rundir/Dockerfile.runphp")" rsync -lpt "$MYDIR/Dockerfile.runphp" "$rundir/" if [ -n "$projdir" ]; then if testdiff "$rundir/build" "$MYDIR/build"; then estep "$(relpath "$rundir/build")" cp "$MYDIR/build" "$rundir/build" chmod +x "$rundir/build" fi if [ ! -f "$projdir/..env.dist" ]; then estep "$(relpath "$projdir/..env.dist")" sed <"$MYDIR/dot-build.env.dist" >"$projdir/..env.dist" ' /^IMAGENAME=/s/=.*\//='"$(basename -- "$projdir")"'\// ' initial_config=1 fi if [ ! -f "$projdir/.runphp.conf" ]; then estep "$(relpath "$projdir/.runphp.conf")" sed <"$MYDIR/dot-runphp.conf" >"$projdir/.runphp.conf" ' /^RUNPHP=/s/=.*/=sbin\/runphp/ ' fi sbin_dest=sbin cli_dest=cli_config if [ "$install_phpwrappers" == auto ]; then if [ ! -f "$PROJDIR/$COMPOSERDIR/composer.json" ]; then # ce doit être un projet PHP install_phpwrappers= elif [ -d "$projdir/cli_config" ]; then install_phpwrappers=1 sbin_dest=sbin cli_dest=cli_config elif [ -d "$projdir/_cli" ]; then install_phpwrappers=1 sbin_dest=sbin cli_dest=_cli else install_phpwrappers= fi fi if [ -n "$install_phpwrappers" ]; then setx -a phpwrappers=ls_files "$MYDIR" "phpwrapper-*" for phpwrapper in "${phpwrappers[@]}"; do destname="${phpwrapper#phpwrapper-}" destdir="${PHPWRAPPER_DESTDIRS[$destname]}" [ -n "$destdir" ] || die "$phpwrapper: la destination n'est pas configurée" mode="${PHPWRAPPER_MODES[$destname]}" case "$destdir" in sbin) destdir="$PROJDIR/$sbin_dest";; cli) destdir="$PROJDIR/$cli_dest";; *) destdir="$PROJDIR/$destdir";; esac estep "$(relpath "$destdir/$destname")" mkdir -p "$destdir" tail -n+4 "$MYDIR/$phpwrapper" | sed "s|/@@CLI@@/|/$cli_dest/|" >"$destdir/$destname" [ -n "$mode" ] && chmod "$mode" "$destdir/$destname" done fi fi [ -n "$initial_config" ]