#!/bin/bash
+# Local variables:
+# mode: sh
+# End:
+
+set -e
+
if [ "$1" = "-n" ]; then
echo "# Dry run mode!" >&2
create_files=0
fi
if [ $# -ne 1 ]; then
- echo "Usage: $0 name" >&2
- echo " Create files loba_name.h and loba_name.cpp."
+ cat >&2 <<EOF
+Usage: $0 [-n] name
+ Add new load-balancing algorithm \`name'.
+Options:
+ -n dry-run mode (no file created, nor modified)
+EOF
exit 1
fi
void loba_${name}::load_balance()
{
// write code here...
- xbt_die("Load-balancing algorithm ${name} not implemented!");
+ xbt_die("Load-balancing algorithm \\"${name}\\" not implemented!");
}
// Local variables:
EOF
fi
+echo "# Updating options.cpp..."
+tmp="options.cpp.new.$$"
+trap "rm -f $tmp" EXIT
+
+awk -vname="${name}" '
+/^#include "loba_/ {
+ if (!include_line) {
+ h_file = "\"loba_" name ".h\"";
+ include_line = "#include " h_file;
+ }
+ if (!included && $2 >= h_file) {
+ if ($2 != h_file)
+ print "#include " h_file;
+ included = 1;
+ }
+ print;
+ next;
+}
+
+!included && include_line {
+ print include_line;
+ included = 1;
+}
+
+/loba_algorithms_type::loba_algorithms_type\(\)/ {
+ nol_compare = "NOL_INSERT(\"" name "\","
+ nol_string = " " nol_compare " \"describe your algorithm here...\",\n";
+ nol_string = nol_string " loba_" name ");"
+ nol_insert = 1;
+}
+
+nol_insert && $1 ~ /\}/ {
+ if (!nol_inserted)
+ print nol_string;
+ nol_insert = 0;
+}
+
+nol_insert && !nol_inserted && /NOL_INSERT/ {
+ if ($1 >= nol_compare) {
+ if ($1 > nol_compare)
+ print nol_string;
+ nol_inserted = 1;
+ }
+}
+
+{ print }
+' options.cpp > $tmp
+
+if [ "$create_files" = "1" ]; then
+ mv options.cpp options.cpp~
+ mv $tmp options.cpp
+else
+ if type colordiff &> /dev/null; then
+ diff -u options.cpp $tmp | colordiff
+ else
+ diff -u options.cpp $tmp
+ fi
+fi
+
cat >&2 <<EOF
# Done.
-Do not forget to:
-* update file "options.cpp":
- - add following include line
- #include "${h_file}"
- - add following line in loba_algorithms_type::loba_algorithms_type()
- NOL_INSERT("${name}", "description...",
- loba_${name});
-* add new files in SCM repository, for example with:
+
+Check for differences, update algorithm description in "options.cpp",
+write your code in "${cpp_file}", and do not forget to add new files
+in SCM repository, for example with:
\$ git add options.cpp ${h_file} ${cpp_file}
\$ git commit -m 'Add algorithm ${name}."
EOF