# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 ##@require sysinc/functions ##@require envsetup envsetup_tmpfile= function envsetup_init() { ac_set_tmpfile envsetup_tmpfile } function move_after() { # dans le fichier $1, déplacer la ligne $2 après la ligne $3. Utiliser $4 # comme fichier temporaire. # si $3==*, mettre la ligne $2 en dernier if [ "$3" != "*" ] && ! quietgrep "$3" "$1"; then # la ligne "$3" doit exister return fi uawk <"$1" >"$4" -v line="$2" -v after="$3" ' BEGIN { found_line = 0 found_after = 0 } ! found_line && $0 == line { found_line = 1 if (! found_after) { next } } ! found_after && $0 == after { found_after = 1 if (found_line) { # si nous avons trouvé la ligne avant after, la mettre juste après # sinon, par la peine de faire de modification print print line next } } { print } END { if (! found_after && after == "*") { if (found_line) { print line } } } ' /bin/cp "$4" "$1" } function move_before() { # dans le fichier $1, déplacer la ligne $2 avant la ligne $3. Utiliser $4 # comme fichier temporaire # si $3==*, mettre la ligne $2 en premier uawk <"$1" >"$4" -v line="$2" -v before="$3" ' BEGIN { found_line = 0 found_before = 0 } ! found_line && $0 == line { found_line = 1 if (found_before) { next } } ! found_before && ($0 == before || before == "*") { found_before = 1 if (! found_line) { print line print next } } { print } ' /bin/cp "$4" "$1" } envsetup_update_dir() { # mettre à jour un répertoire qui contient des inclusions. $1=le répertoire, # $2 un fichier temporaire qui est utilisé par cette fonction, $3=le # répertoire de destination, qui vaut $1 par défaut local system host user before after dir destdir file sio tmpfile tmpfile="$2" dir="$(cd "$1"; pwd)" destdir="${3:-$dir}" sio="$dir/.source_in_order" >"$sio" list_files "$dir" | while read file; do __envsetup_check_file "$dir" "$file" && echo "$file" >>"$sio" done echo "$(< "$sio")" | while read file; do [ -z "$file" ] && continue before="$(awk <"$dir/$file" ' $0 ~ /^##@before / { print $2 exit 0 } ')" if [ -n "$before" ]; then move_before "$sio" "$file" "$before" "$tmpfile" fi after="$(awk <"$dir/$file" ' $0 ~ /^##@after / { print $2 exit 0 } ')" if [ -n "$after" ]; then move_after "$sio" "$file" "$after" "$tmpfile" fi done uawk <"$sio" >"$tmpfile" -v destdir="$destdir" '{ print "source " destdir "/" $0 }' /bin/cp "$tmpfile" "$sio" }