+#!/usr/bin/env sh
+
+# Copyright (c) 2013-2018. The SimGrid Team.
+# All rights reserved.
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the license (GNU LGPL) which comes with this package.
+
SAVEIFS="$IFS"
LISTSEP="$(printf '\b')"
-# Create a temporary file, with its name of the form $1_XXX$2, where XXX is
-# replaced by an unique string.
+# Create a temporary file, with its name of the form $1_XXX$2, where XXX is replaced by an unique string.
# $1: prefix, $2: suffix
mymktemp () {
tmp=$(mktemp --suffix="$2" "$1_XXXXXXXXXX" 2> /dev/null)
# Add a word to the end of a list (words separated by LISTSEP)
# $1: list, $2...: words to add
list_add () {
- local list content
+ local list content newcontent
list="$1"
shift
- eval content=\"\${$list}\"
- IFS="$LISTSEP"
- if [ -z "$content" ]; then
- content="$*"
- else
- content="$content${LISTSEP}$*"
+ if [ $# -gt 0 ]; then
+ eval content=\"\${$list}\"
+ IFS="$LISTSEP"
+ newcontent="$*"
+ IFS="$SAVEIFS"
+ if [ -z "$content" ]; then
+ content="$newcontent"
+ else
+ content="$content${LISTSEP}$newcontent"
+ fi
+ eval $list=\"\${content}\"
+ fi
+}
+
+# Like list_add, but only if first word to add ($2) is not empty
+list_add_not_empty () {
+ if [ -n "$2" ]; then
+ list_add "$@"
fi
- IFS="$SAVEIFS"
- eval $list=\"\${content}\"
}
# Set contents of a list (words separated by LISTSEP)
list_add "$@"
}
-# Get the content of a list: positional parameters ($1, $2, ...) are set to the
-# content of the list
+# Get the content of a list: positional parameters ($1, $2, ...) are set to the content of the list
# $1: list
# usage: eval $(list_get list)
list_get () {
- printf 'IFS="$LISTSEP"; eval set -- \\$%s; IFS="$SAVEIFS"' "$1"
+ printf 'IFS="'\$'LISTSEP"; eval set -- \$%s; IFS="'\$'SAVEIFS"\n' "$1"
}