+#!/bin/bash
+
+set -e
+#set -x
+
+usage() {
+ cat >&2 <<EOF
+Usage: $0 [-c] <parameters file>
+Options:
+ -h print this help
+ -n dry-run mode (for debugging)
+ -c (continue) do not overwrite previous results
+EOF
+ exit $1
+}
+
+log() {
+ echo "-#- $@" >&2
+}
+
+die() {
+ echo "ERROR: $@" >&2
+ exit 2
+}
+
+variable_check() {
+ eval test -n "\${$1}" || die "undefined $1"
+}
+
+array_check() {
+ eval test "\${#$1}" -gt 0 || die "undefined $1"
+}
+
+# read args
+overwrite=1
+debug=0
+while getopts "chn" c; do
+ case "$c" in
+ 'c') overwrite=0 ;;
+ 'h') usage 0 ;;
+ 'n') debug=1 ;;
+ '?') usage 1 ;;
+ esac
+done
+shift $((OPTIND - 1))
+[ $# -eq 1 ] || usage 1
+parameters="$1"
+
+log "Running: $0 $@"
+log "Hostname: $(hostname -f)"
+
+declare -a TOPOLOGIES ALGORITHMS PLATFORMS COMMON_OPTS
+
+# read parameters
+log "Reading parameters from \"$1\"."
+source "$parameters" || die "cannot read parameters file: \"$parameters\""
+
+array_check TOPOLOGIES
+array_check ALGORITHMS
+array_check PLATFORMS
+variable_check NHOSTS
+variable_check LOAD
+variable_check DEADLINE
+
+# default values
+: ${RESULTS:=$PWD/results}
+: ${LOBA:=$PWD/loba}
+
+COMMON_OPTS=(
+ --cfg=contexts/factory:raw
+)
+
+log "Results put in: \"$RESULTS\"."
+
+[ $debug = 1 ] && log "Running in dry-run mode"
+
+outfile() {
+ echo "$*" | sed 's,[^ ]*/,,g;s/\.xml//;y/ /_/'
+}
+
+for plat in "${PLATFORMS[@]}"; do
+ tmp=$(basename "$plat" ".xml")
+ plat_output="$RESULTS/plat_$tmp"
+ for topo in "${TOPOLOGIES[@]}"; do
+ topo_output="$plat_output/topo_$topo"
+ for algo in "${ALGORITHMS[@]}"; do
+ algo_output="$topo_output/algo_$algo"
+ [ $debug = 0 ] && mkdir -p "$algo_output"
+ args=(
+ -T"$topo"
+ -a"$algo"
+ -N"$NHOSTS"
+ -L"$LOAD"
+ -t"$DEADLINE"
+ "$plat"
+ )
+ for bk in "" "-b"; do
+ tmp=$(outfile "loba" $bk "${args[@]}")
+ out="$algo_output/$tmp.out"
+ cmd=( "$LOBA" "${COMMON_OPTS[@]}" $bk "${args[@]}" )
+ log "Run: ${cmd[@]}"$'\n'"... &> $out"
+ if [ $overwrite = 0 -a -e "$out" ]; then
+ log "already run !"
+ tail -n4 "$out"
+ continue
+ fi
+ if [ $debug = 1 ]; then
+ log "skipped (dry-run)"
+ else
+ echo "# ${cmd[@]}" > "$out"
+ "${cmd[@]}" >> "$out" 2>&1
+ tail -n4 "$out"
+ fi
+ done
+ done
+ done
+done